Agent development tooling
Claude Code project setup — session docs, verify-gate hooks, skills.
Agent tooling is the odd one out: it ships no app runtime code. It is the
Claude Code project setup — session docs, deterministic git hooks, a set of
skills, a spec-reviewer subagent, and the optional autopilot/orchestration loop —
packaged as a template directory that the CLI materializes into the generated
project's .claude/, docs/, scripts/, and root CLAUDE.md.
Optional feature
Agent tooling is optional (core: false, requires: []). It is orthogonal to
every app feature — it composes with nothing at runtime and has no dependents.
What it does
- Session docs —
CLAUDE.md(session guide + hard rules),docs/WORKFLOW.md(session protocol, verify tiers, orchestration),docs/GUIDELINES.md(engineering guidelines; conventions live here, there is no separateCONVENTIONS.md),docs/DECISIONS.md(append-only ADR log seeded atD-001),docs/ROADMAP.md, andPROGRESS.md(machine handoff state). - Deterministic hooks (wired via
.claude/settings.json) —pre-commit-gate.shrunsverify:quickand blocks the commit on failure ("CLAUDE.md is advisory; hooks are enforcement");post-edit-check.shlints edited files;protect-migrations.shkeeps committed migrations append-only;protect-canonical-docs.shblocks worker branches from writing the tracking docs. - SessionStart bootstrap —
scripts/bootstrap.shidempotently installs deps, seeds.env, brings up Postgres (docker → system → a throwawaypg-local.shcluster), and applies migrations; it always exits 0 so it never fails a session. - Skills —
next-task(interactive driver),work-task(dispatched parallel worker, never merges),orchestrate(the loop's sole writer ofmain),wrap-phase,request-feature(design-spec intake),setup-orchestrator(arms the Routines), andautopilot-step(deprecated; redirects toorchestrate). - spec-reviewer subagent — a fresh-context reviewer that grades a branch diff against the task's intent and the guidelines, run before every PR.
- Orchestration scaffolding —
docs/tasks/(the dispatch ledger withmax_parallel/stop/leasecontrols) anddocs/decisions/pending/for the optional autopilot loop.
Models it adds
None. This feature contributes no Prisma schema, no tables, no tRPC routers, and no API surface. Its docs describe the host app's modeling conventions, but the feature itself adds zero runtime code.
Env it needs
None at app runtime (env: []). The optional orchestration loop's poke tokens
($<APP>_ORCHESTRATOR_TOKEN / $<APP>_WORKER_TOKEN) are explicitly
automation-infra secrets set only in the Routines' environment — they never go in
.env.example or the app's env module and are never read by the running app.
Composition
requires: []— orthogonal to every app feature; it can be selected or pruned independently of auth, orgs, billing, and the rest.- Marker awareness — the templates carry
@feature:<name>marker regions (e.g.@feature:billinginbootstrap.shand the session docs) so that pruning tailors the shipped docs and scripts to the features actually generated. This is doc/script tailoring, not a runtime dependency. - How the CLI materializes it — the tree ships under one inert umbrella
directory (
.agents-template/, so a strayCLAUDE.mdnever auto-loads in the reference repo). During generation,applyOverlaystrips the.agents-template/prefix and one.templatetoken per basename (CLAUDE.template.md→CLAUDE.md,.agents-template/.claude/settings.json→.claude/settings.json, …), then removes the emptied umbrella dir; a destination collision throws loudly (D-069 / D-070). - Dependents — none.
What pruning removes
Leaving agent tooling out deletes the entire apps/web/.agents-template/
directory during the prune step. The generated project then ships without any
Claude Code tooling — no CLAUDE.md, no session docs, no .claude/settings.json,
no skills, no spec-reviewer, no bootstrap or git hooks, and no autopilot loop.
Because prune runs before the overlay, applyOverlay simply finds nothing and
no-ops. App runtime is entirely unaffected — the tooling never touched runtime
code.