renzrollon/interlock/bootstrap
Claude Code and agent skill by renzrollon/interlock
- community
Checking that the SKILL.md file is still in the repository.
Onboard a brownfield project into OpenSpec — analyze the existing codebase with parallel explorer agents, write an initial architecture document, then generate one spec per discovered feature describing what is already built. Use when adopting spec-driven development on a repo that has code but no specs.
Install
npx vskill@latest install renzrollon/interlock/bootstrapSKILL.md
Document what a codebase already is, in OpenSpec form, so that every later change has something to change from.
This is archaeology, not design. Every spec you write describes behavior that exists in the code today. If you cannot point at the code that implements a requirement, it does not belong in the spec.
| Flag | Effect | |
|---|---|---|
--quick | Sequential, single-context. For small repos (< ~50 source files). | |
--scope <path> | Restrict the whole run to a subdirectory. | |
| (none) | Full parallel run. |
0. Pre-flight
If it does not print a version, stop here, before openspec init, before interlock-graph build, before spawning any explorer or writing any file — even when openspec/config.yaml already exists, because the specs this skill writes are only done once openspec validate passes.
command not found(or the shell's equivalent): the CLI is missing. Say so in one line, then runinterlock openspec provision, which installs the pinned OpenSpec into the plugin's own data directory, and probeopenspec --versionagain. If provisioning exits non-zero, quote its first line and stop; a sandbox-refused write means one run of the same command outside the sandbox. The user's own route staysnpm install --location=global @fission-ai/openspec@1.15.0, or the project's own package manager if it pins openspec.- A bare
interlockorinterlock-graphthat answerscommand not foundmeans this session predates the plugin. Until a new session, runnode "${CLAUDE_PLUGIN_ROOT}/cli/interlock"(or…/cli/interlock-graph) instead; those calls match no allow rule, so each asks for approval. - Any other error: the CLI is installed but does not run. Do not call it missing and do not offer the install line. Quote its error; the usual cause is a Node.js older than OpenSpec's floor, 20.19.0.
Either way, point at interlock doctor for the full preflight. Do not install or upgrade anything yourself, except by running interlock openspec provision, and do not hand-write openspec/config.yaml or openspec/specs/ — the CLI owns those formats.
A graph failure is not a stop. Bootstrap works without it — docs and OpenSpec indexing still happen — so print the banner, carry it to the final report, and continue with degraded expectations: the explorers grep instead of following edges, and they are slower for it.
A partial graph is not a failure, and not a whole graph either. interlock-graph build exits 0 when it meets a path it cannot read: it skips the path, names it on stderr as GRAPH SKIPPED UNREADABLE: <path> (<code>), and ends its summary line in skipped=<n>. The exit code alone no longer tells you the graph is complete. The explorers still follow edges, but nothing about a skipped path is in the graph, so tell them which paths those were and have them Read or grep there instead of trusting an empty result.
nodes=0 is the ordinary case for a repo the graph doesn't structurally index (Go, Rust, Java, Ruby — structural indexing covers JavaScript/TypeScript, Python, shell, C# (.cs, .csproj) and Bicep (.bicep)). Say which reason applied — an unsupported language, or a tree that could not be read — rather than presenting either as a defect.
When the build did produce a graph, read `.claude/graph/GRAPH_REPORT.md` before spawning anything. Its hub nodes and module boundaries tell the explorers where to look, so they don't rediscover the tree from scratch.
Then check whether openspec/specs/ already has content. If it does:
"This project already has N specs. Bootstrap will ADD specs for undocumented features but will never overwrite an existing one. Continue?"
1. DISCOVER — parallel exploration
Spawn five explorer subagents via the Agent tool (subagent_type: "Explore"), or run them in sequence under --quick. Each returns structured JSON.
Before writing the prompts, establish the stack. Read the dependency manifest (package.json, pyproject.toml, go.mod, Cargo.toml, pom.xml, Gemfile, …) and the top-level layout. Then phrase each prompt in that stack's vocabulary. The categories below are universal; examples in your head are illustrative only — replace them with the frameworks this repo actually uses. Asking a Go service about React hooks wastes a whole agent.
Shared skeleton — fill {role}, {task}, {schema} from the table:
| Role | Task | JSON schema | |
|---|---|---|---|
| Structure Mapper | Map layout. Prefer GRAPH_REPORT modules/hubs, then verify on disk. Report organization (feature/layer/hybrid), entry points and routes, naming conventions, key config files, monorepo yes/no. | { organization, entryPoints[], conventions[], configFiles[], monorepo } | |
| Dependency & Data Model Analyzer | Prefer interlock-graph query / path. Report third-party deps by role, internal layer imports, persistence schema/models, entity relationships, outbound integrations. | { dependencies[], internalLayers[], dataModels[], entityRelationships[], integrations[] } | |
| Pattern Extractor | Recurring composition (components/handlers/services), state/lifecycle, errors, auth, data fetch/mutate, testing, code style. | { compositionPatterns[], stateManagement, errorHandling, auth, dataFlow, testing, codeStyle } | |
| Interface Scanner | External surface: endpoints and protocol, mutations, schemas/validators, public exports/SDK, realtime/streaming, CLI. | { endpoints[], mutations[], schemas[], publicExports[], realtime[], cli[] } | |
| Infrastructure & Config Reader | Build/task-runner entry points, env vars referenced in code, CI/CD, deploy target, lint/format, typecheck/static analysis. | { buildSystem, tasks[], envVars[], cicd, deployment, linting, staticAnalysis } |
Cap: 8 agents in this phase.
2. SYNTHESIZE — the architecture document
One synthesis pass reads all five outputs and writes openspec/initial-architecture.md:
Tag every design decision with its confidence. An [INFERRED] decision that turns out wrong is recoverable; one presented as fact is not.
3. IDENTIFY FEATURES — boundary detection
From the synthesis, pick the units that each deserve a spec:
- Entry-point based — each major route group, command, or consumer
- Domain based — each data model with a full lifecycle
- Capability based — cross-cutting concerns (auth, observability, error handling)
- Module based — feature directories and barrel exports
Present the list for confirmation before generating:
4. SPEC GENERATION — one agent per feature
For each confirmed feature, spawn a subagent (cap: 12).
You are writing an OpenSpec spec for an existing feature. Document what IS built, not what SHOULD be.Feature:{name}. Architecture context:{relevant section}. Source files:{paths}.Read the implementation. Write requirements in the repo's OpenSpec spec format, each one traceable to code. Where behavior is genuinely unclear, mark it rather than guessing.
Write to openspec/specs/<feature>/spec.md. Never overwrite an existing spec file. If one exists, skip it and report the skip.
Then validate:
5. UPDATE PROJECT CONTEXT
Fill in the project context in openspec/config.yaml with what was discovered — stack, architecture summary, conventions, domain — so later openspec instructions calls carry it. Merge into the existing file; never clobber unrelated keys a user has set.
6. REPORT
- Any
GRAPH UNAVAILABLE: <reason> — explorers fall back to grep and will be slowerbanner from pre-flight, repeated verbatim. AGRAPH PARTIALbanner is repeated verbatim too, followed by the paths the build named asGRAPH SKIPPED UNREADABLE. If the graph built whole, say so in one line instead — a report that mentions none of these reads like a graph-backed run that never happened. - Architecture doc path and what it covers
- Specs created, and specs skipped because they already existed
- Features deliberately not specced, with the reason
openspec validate --specsresult- Corpus-persistence posture (below)
- Suggested next step:
/interlock:docs-digestto build the agent prose primer
Corpus-persistence posture
This is the one moment the repository is looked at before any run has written to it, so raise the question now: will its run corpora be kept?
Observe the current state with git's own matcher — do not read or parse .gitignore. Its semantics include negation, directory-only trailing slashes, nested files, .git/info/exclude and the user's global excludes file, and a hand-rolled match gets some of those wrong:
Exit 0 means the path is excluded, 1 means it is tracked territory.
Report each of the three separately — never collapse them into one verdict. A split state, where one is excluded and the others are not, is the case most likely to be unintentional, and collapsing hides exactly that.
State the recommendation as conditional, never as a verdict about this repository. Nothing you can observe tells you whether the repo will run /interlock:ship against its own product, so say which posture fits which intent and let the reader choose:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/bootstrap/SKILL.md
Popularity
- Repository stars
- 47
- Repository forks
- 6
- 7-day trend score
- 19
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/renzrollon/interlock/bootstrap)