zazzy
Features

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 docsCLAUDE.md (session guide + hard rules), docs/WORKFLOW.md (session protocol, verify tiers, orchestration), docs/GUIDELINES.md (engineering guidelines; conventions live here, there is no separate CONVENTIONS.md), docs/DECISIONS.md (append-only ADR log seeded at D-001), docs/ROADMAP.md, and PROGRESS.md (machine handoff state).
  • Deterministic hooks (wired via .claude/settings.json) — pre-commit-gate.sh runs verify:quick and blocks the commit on failure ("CLAUDE.md is advisory; hooks are enforcement"); post-edit-check.sh lints edited files; protect-migrations.sh keeps committed migrations append-only; protect-canonical-docs.sh blocks worker branches from writing the tracking docs.
  • SessionStart bootstrapscripts/bootstrap.sh idempotently installs deps, seeds .env, brings up Postgres (docker → system → a throwaway pg-local.sh cluster), and applies migrations; it always exits 0 so it never fails a session.
  • Skillsnext-task (interactive driver), work-task (dispatched parallel worker, never merges), orchestrate (the loop's sole writer of main), wrap-phase, request-feature (design-spec intake), setup-orchestrator (arms the Routines), and autopilot-step (deprecated; redirects to orchestrate).
  • 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 scaffoldingdocs/tasks/ (the dispatch ledger with max_parallel / stop / lease controls) and docs/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:billing in bootstrap.sh and 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 stray CLAUDE.md never auto-loads in the reference repo). During generation, applyOverlay strips the .agents-template/ prefix and one .template token per basename (CLAUDE.template.mdCLAUDE.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.

On this page