Skip to content

Bootstrap

One-time migration from existing planning docs into the vault. Use when you install Strata on a repo that already has a docs/, .planning/, or similar directory full of markdown.

Bootstrap is not the recurring way knowledge enters the vault. After installation, engineers write directly into the vault as they work, through /strata:save, /strata:decide, /strata:domain during conversation. Bootstrap exists for the chicken-and-egg case: an existing repo with months of planning docs that need migration before Strata has anything to retrieve.

Run it once per major initiative. Then .gitignore (or archive) the planning subdir.

/strata:bootstrap

That’s the whole invocation. Behind the scenes:

  1. Scan the repo for markdown candidates (respects .gitignore, .strataignore, .ignore)
  2. Group by parent directory. .planning/auth-rewrite/PLAN.md + .../CONTEXT.md + .../SPEC.md go to one worker together. Siblings about the same initiative produce one consolidated note, not three near-duplicates
  3. Dispatch 5 groups in parallel to strata:bootstrap-worker subagents. Each worker:
    • Reads its group’s files
    • Calls plan_correlate to cross-check claims against git history + code graph
    • Calls code_map to understand mentioned symbols
    • Classifies → domain / decide / save / skip
    • Writes the note(s)
    • Marks the source files processed (SHA-tracked, idempotent)
  4. Aggregate one-line summaries; print final tally

Source file contents never enter your main Claude context. The workers do the reading; you see only the summary lines.

Each group’s docs are pulled into one of four shapes:

KindWhenLands in
domainDefines vocabulary, invariants, conventions (“what is X”)domain/<slug>.md
decideLocked-in choice with reasoning + alternativesdecisions/YYYY-MM-DD-<slug>.md
saveRetrospective, “we considered X”, historical contextlessons/YYYY-MM-DD-<slug>.md
skipGeneric README, TOC, autogenerated — mark only(no file written)

The classification is informed by plan_correlate’s verdict:

  • ≥80% completion (paths exist + symbols resolve) → decide accepted, domain stable
  • 40–80%decide proposed (caveats inline)
  • under 40%save framed as retrospective (“we considered this in 2026”), not authoritative
  • No testable claims → classify by content alone

Default scope: every *.md under the repo root, minus:

  • Build / cache dirs (node_modules/, dist/, .venv/, __pycache__/, etc.)
  • Plugin meta-config (.claude/, .github/, .vscode/, .idea/, .zed/, .agents/)
  • Strata outputs (graphify-out/, .strata/)
  • AI-tool config files (.cursor.md, .impeccable.md, .windsurf.md, …)
  • Low-signal root files (CHANGELOG.md, LICENSE.md)

Tune per repo with a .strataignore at the project root (gitignore syntax). .ignore (ripgrep/fd convention) also honoured.

.strataignore
docs/legacy/ # skip an old subtree
!RUNBOOK.md # re-include a default-excluded file

Default pass is fresh docs only (under 90 days old) with claims verified at ≥60% freshness. Override via the MCP bootstrap_scan tool:

bootstrap_scan(
unprocessed=true,
bucket="aging", # 90-365 days
verify=true,
min_freshness=0.4, # accept partial-evidence plans
)

Or skip verification entirely (faster, less precise):

bootstrap_scan(unprocessed=true, verify=false)

<vault>/<repo>/.bootstrap-state.json tracks {path: {sha256, processed_at}}. Re-running the bootstrap skips already-processed files unless their SHA changed. To force a re-process, edit the source or delete its entry.

Two options for the planning subdir:

  • Keep + archive: git mv .planning/auth-rewrite .attic/auth-rewrite. Historical reference, no longer scanned.
  • Delete: git rm -r .planning/auth-rewrite. The vault now holds what should survive.

Either way: future planning happens directly in the vault. The .planning/ workflow was the migration source, not the steady state.


Next: Code graph — Graphify integration and how code_map cuts token budget.