From Strata
Seeds the Strata vault from existing codebase docs by scanning CLAUDE.md, docs/, .planning/ and dispatching files to worker subagents in parallel batches. Idempotent and SHA256-tracked.
How this skill is triggered — by the user, by Claude, or both
Slash command
/strata:bootstrapThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Onboarding pass. Walk existing docs, dispatch each one to a worker
Onboarding pass. Walk existing docs, dispatch each one to a worker Subagent, aggregate the results.
/strata:review
for detail.bootstrap_scan(unprocessed=true, bucket="fresh", verify=true,
min_freshness=0.6, max_group_size=12)
Default pass: fresh docs only (<90d), claims verified, freshness ≥ 60%,
dense parent dirs split into sub-groups of at most 12 files
(by date prefix when filenames are dated). For a wider net, drop
min_freshness to 0.4, or omit bucket so aging + old appear too.
max_group_size is what stops dense planning folders (a docs/plans/
with 40+ unrelated initiatives) from collapsing into 3-6 consolidated
Notes. Pass max_group_size=12 for typical mixed-initiative folders;
Omit it for folders where siblings genuinely describe one thing.
If after filtering the candidate count is > 50, ask the user once to Narrow scope (e.g. by directory). Otherwise proceed.
memory_status()
Note the vault_dir path printed in the response. You'll pass it to
Each worker.
The scan's JSON output (when --json is on) includes a
dispatch_groups map keyed by parent directory. Sibling files in
the same folder (e.g. .planning/auth-rewrite/PLAN.md +
.../CONTEXT.md + .../SPEC.md) almost always describe the same
Initiative, dispatch them to ONE worker that handles the set together
and writes one consolidated note, not three near-duplicates. (Previous
"one worker per file" dispatch produced the duplicate ADRs we saw on
the earliest bootstrap runs.)
Batch the groups into runs of 5 groups at a time. For each batch,
invoke strata:bootstrap-worker once per group in a single
Message with multiple Agent tool calls so they run concurrently.
Per worker, the prompt to send:
file_paths:
.planning/auth-rewrite/PLAN.md
.planning/auth-rewrite/CONTEXT.md
.planning/auth-rewrite/SPEC.md
vault_dir: /Users/gd/StrataVault/myrepo
plugin_root: ${CLAUDE_PLUGIN_ROOT}
Group freshness: <average freshness% across the group, when verify was on>
Group age: <oldest bucket across the group>
Follow your standard procedure. Return one line per note written + one
per skipped file.
Hand the worker only metadata, never paste source file content into the prompt. The worker reads each file itself.
When verify was on and any file in the group had paths_missing,
mention that in the prompt so the worker downgrades the status
(proposed instead of accepted for decisions; framed as a lesson
when group freshness < 50%).
Each worker returns 1-3 lines (one per write + one per skipped sibling in the group). Collect and print them grouped by kind, no commentary:
DECIDE decisions/2026-05-24-use-postgres-tenant-data.md from .planning/auth/PLAN.md,.planning/auth/SPEC.md
SKIP - from .planning/auth/CONTEXT.md (generic preamble)
DOMAIN domain/auth-tokens.md from .planning/auth/TOKENS.md
DOMAIN domain/scheduling-tenant.md from .planning/scheduling/PLAN.md
SAVE pr-context/feat-x/...handoff.md from .planning/x/HANDOFF.md
ERROR .planning/oversized/PLAN.md — write failed: ...
Then dispatch the next batch of groups. Stop when the group list is Exhausted or you've processed ~20 groups (then ask the user whether to continue, not because of context pressure, but to let them Eyeball quality mid-flight).
Bootstrapped N files. D domain, A decisions, L lessons. Skipped S. E errors.
State: <vault_dir>/.bootstrap-state.json
That's the whole report.
Each worker has its own context window, your context stays clean. Five parallel workers cut wall time by ~5x. A bad file fails one Worker without poisoning the run.
Grouping by parent dir is the dedup mechanism: workers see all
Siblings together, so the three-files-of-the-same-initiative case
(PLAN.md + CONTEXT.md + SPEC.md) produces one consolidated note
Instead of three near-duplicates. Early bootstrap runs exposed
this when un-grouped dispatch wrote 3 near-identical "extract visit
Aggregate" ADRs from PLAN/CONTEXT/SPEC.
Trade-off that remains: no shared context across workers, so
Wikilinks between notes written in the same batch may be unresolved.
That's fine, /strata:review surfaces them later and the user can
[[link]] them by hand.
dispatch_groups from the
scan output and dispatch one worker per parent-dir group.forget / promote-to-pr / export-to-repo /
archive during bootstrap, those are user-driven only.<vault>/<repo>/.bootstrap-state.json tracks {path: {sha256, processed_at}}. A file resurfaces if its SHA changes. To re-process
A file manually, edit it or delete its entry from the state file.
The worker handles the mark step itself; you don't need to.
Out of the box, the scan skips build dirs, plugin meta-config
(.claude/, .github/, etc.), our own outputs, and common AI-tool
Configs at root. To tune per repo, drop a .strataignore at the
Project root using gitignore syntax, see examples/.strataignore
in the plugin for a starter. .ignore (the ripgrep/fd cross-tool
Convention) is also honoured. Precedence, low → high: defaults →
.ignore → .strataignore. Negate a default with !pattern.
npx claudepluginhub gideondk/strata --plugin strataProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.