Getting started
Install.
The baseline is a repository overlay materialized by npx @friedbotstudio/create-baseline <target>. Four sentinel paths land in the target project; nothing else is touched. Node 18.17 or later is the only hard requirement.
§ I
Requirements
Everything the baseline needs from your environment before it can install. Two of the rows below are optional.
| Requirement | Why |
|---|---|
| Node ≥ 18.17 | The CLI uses node:util.parseArgs with strict mode, available from this version. |
npx on $PATH | The canonical invocation. npm exec @friedbotstudio/create-baseline works too. |
| A target directory | An existing project root, or an empty directory you intend to populate. The CLI does not mkdir for you. |
| Git (optional) | Without git, the workflow ends at /archive. Phase 11 auto-excepts, including /grant-commit, the ship-pair sub-step changelog at 11.5, and commit at 11. See /swarm-dispatch for the worktree-isolation case. |
| Java (optional) | Required only if you want PlantUML diagrams rendered at /spec-render time. The install fetches a 19 MB sha-pinned jar; you supply the JVM. See CLI · PlantUML jar. |
§ II
One command
From the parent of your target, or anywhere with npx available:
# preview without writing anything
$ npx @friedbotstudio/create-baseline ./my-project --dry-run
# the real thing
$ npx @friedbotstudio/create-baseline ./my-project
# → Installed manifest version 1 to /Users/you/code/my-project.
# → Pin via "@friedbotstudio/create-baseline@<exact-version>" in your bootstrap docs.
The first run takes 5 to 30 seconds, dominated by the PlantUML jar fetch (~19 MB, sha256-pinned). Subsequent runs reuse the cached jar.
The baseline changes between releases. Teams sharing a repository should pin to a specific @friedbotstudio/create-baseline@<version> so every install of the repo gets the same hooks, skills, and constitution. Running npx @friedbotstudio/create-baseline upgrade ./project at a newer version reconciles the target against the new template; in a TTY each customised file becomes an interactive prompt, and in CI the prior batch-merge semantics apply (see CLI · Modes).
§ III
What lands
Four sentinel paths plus a small set of vendored bins. Nothing else in your project is touched. The CLI refuses to run if any sentinel is already present, unless you pass --force or use the upgrade subcommand.
| Path | Role |
|---|---|
| .claude/ | 22 hooks, 36 skills, 5 consent commands, 1 subagent, memory schemas, project.json, settings.json. |
| CLAUDE.md | In-session constitution. Binds Claude's behavior in this repository. |
| .mcp.json | The three baseline MCP servers: context7, plantuml, playwright. |
| docs/init/seed.md | Genesis prompt. The governing specification of the baseline. |
| .claude/bin/LICENSE, NOTICE | Apache 2.0 license + provenance for the side-fetched PlantUML jar. |
| .claude/bin/plantuml.jar | Side-fetched at install time, sha256-pinned, ~19 MB. Skipped if plantuml is already on $PATH. |
| .claude/.baseline-manifest.json | The hash table the CLI writes after install. Used by the upgrade subcommand to do a three-way reconcile on the next install. |
If your project has an existing .mcp.json, the install performs an additive merge: the three baseline servers are added (or refreshed); your user-added servers are preserved byte-for-byte. See CLI · .mcp.json merge semantics.
The CLI itself ships one pinned runtime dependency, @clack/prompts, which supplies the prompt primitives behind the branded TTY flows. Everything else it needs is Node stdlib and the contents of the npm tarball; the dependency stays in the CLI and never lands in your project.
§ IV
After install
The baseline runs in project-agnostic mode immediately. Hooks are active. test_runner and lint_runner emit guidance only until tailored.
-
Open the project in Claude Code. The
SessionStarthook injects the memory index. Claude greets you with the project-agnostic banner. -
Run
/init-project. Claude scouts the codebase, runs the recommender, proposes a tailoredproject.json(test command, lint command, TDD source globs, destructive patterns, optional MCP servers and skills, optional stack skills forswarm-worker), and writes it after you approve. Theconfiguredflag flips totrue. -
Restart Claude Code. The session re-reads
project.json; the runner hooks switch from guide mode to enforcement. -
Run your first
/triage "<request>". Or/harnessto drive the full intake-to-commit pipeline.
Until /init-project runs, you can still use every phase. You just won't have stack-specific tailoring. Project-agnostic mode is a sanctioned operating state, not a partial install.
§ V
Recover from a bad install
Three paths back to a clean baseline. Each is read-and-write safe: the CLI never silently overwrites user customizations.
| Situation | Command | Effect |
|---|---|---|
| Half-installed baseline | npx @friedbotstudio/create-baseline ./project --force |
Refuses unless you type overwrite. Replaces every baseline file except .claude/project.json (preserved). |
| Upgrade to a newer baseline | npx @friedbotstudio/create-baseline upgrade ./project |
Three-way merge against the last install's manifest. In a TTY, each customised file becomes a keep-mine / take-theirs / abort prompt. In CI, untouched files refresh, customizations are preserved (exit 3 if any), and removed-upstream files prune when you had not touched them. |
| Suspect drift | npx @friedbotstudio/create-baseline doctor ./project |
Read-only. Reports matched / customized / missing / added. Exit 0 if clean, 1 if any baseline file is missing, 2 if no manifest is present. |
For the full semantics of each mode, every flag, every exit code, and the doctor drift report categories, see the CLI reference.