一键导入
auto
Autonomous build loop with Karpathy ratcheting, GAN evaluator, and session chaining. Iterates story groups until all features pass or stopping criteria met.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Autonomous build loop with Karpathy ratcheting, GAN evaluator, and session chaining. Iterates story groups until all features pass or stopping criteria met.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Discover and map an existing codebase before planning or changing it.
Change the behavior of existing code — story-driven by default, or --issue N for a GitHub bug fix. Test-first, full verification, code review.
Use when a planned change touches persisted data shape — ORM models, migration files, schema definitions, serialized formats, or message contracts — in /change, /refactor, or /implement on an existing codebase. Routes schema changes through expand-contract and proves reversibility before any deploy.
Generate production code and tests for a story group using agent teams for parallel execution.
Refactor existing code for quality, performance, or maintainability. Enforces core quality principles with ratchet gate.
Generate test plan, test cases, test data fixtures, and Playwright E2E tests mapped to acceptance criteria.
| name | auto |
| description | Autonomous build loop with Karpathy ratcheting, GAN evaluator, and session chaining. Iterates story groups until all features pass or stopping criteria met. |
| argument-hint | [--mode full|lean] [--group GROUP_ID] |
| context | fork |
Autonomous build loop implementing Karpathy's ratcheting pattern with GAN-style generator-evaluator separation, agent teams for parallel execution, sprint contracts for verifiable done-criteria, self-healing with failure-driven learning, and session chaining for multi-context-window builds.
Ultracode tip: Leave ultracode off here (
/effort highor lower). This loop already orchestrates its own agent teams and generator↔evaluator fan-out against sprint contracts; ultracode's auto-workflows would double-orchestrate, fight the contracts, and burn tokens. Do the divergent thinking earlier (/brownfield,/design,/spec) with ultracode on, then turn it off before running/auto.
/auto
/auto --mode lean
/auto --group D
/auto --parallel-groups 3
/auto --sequential
--mode controls which ratchet gates are enforced. Default: full. Options: full, lean (lean skips only the per-iteration design-critic).--group resumes or targets a specific dependency group. If omitted, picks the next unfinished group from the dependency graph.--parallel-groups N enables cross-group parallelism: up to N independent dependency groups run concurrently as separate group-orchestrator subagents. Default: 3. Set 1 (or pass --sequential) to force one-group-at-a-time behavior.--sequential shorthand for --parallel-groups 1. Use when you need deterministic group ordering for debugging.Before /auto can run, the following must exist:
specs/stories/ — approved story files with acceptance criteria.specs/design/ — approved architecture artifacts including api-contracts.md and component-map.md..claude/program.md — project constraints and conventions.features.json — feature tracking file (created by /spec).specs/stories/dependency-graph.md — group ordering and dependencies.specs/stories/epics.md — epic index and story membership.claude-progress.txt — session tracking file (created by /build phase 4).If any prerequisite is missing, stop and report what is absent. Do not proceed with partial context.
Critical rule: /auto orchestrates but NEVER implements code directly.
/auto is the orchestrator. It reads state, makes decisions, spawns agents, and manages the loop./implement or direct agent spawn)./evaluate or direct agent spawn)./auto never writes application code, tests, or configuration files itself./auto is an autonomous, multi-context-window loop. These rules keep it honest and unblocked over long runs (they matter most on the most capable orchestrator models, which sustain hours-long runs):
*-grounding.json. Never report work you cannot point to; if something is not yet verified, say so explicitly. If tests failed, say so with the output; if a step was skipped, say that. This is the same groundedness discipline the pipeline enforces on artifacts, applied to the loop's own status.claude-progress.txt, features.json, and git state) — you can continue indefinitely. Do not summarize-and-hand-off or suggest a new session because tokens look low; save state to claude-progress.txt and keep going./auto is the longest-running, most token-heavy loop in the harness. Every token in the orchestrator's context window is re-sent (cache permitting) on every turn, so keep the orchestrator context lean — delegate verbose work into subagents whose context is discarded when they return.
evaluator / codebase-explorer / generator subagents — only their short verdict (PASS/FAIL + summary) returns to /auto. Never read raw test or build logs into the orchestrator directly.suppressOutput only hides it from the UI, not from the model. So bound it before it crosses the tool boundary: run verbose commands as cmd > /tmp/out.log 2>&1 then surface only what matters with tail -n 50 /tmp/out.log or grep -E 'FAIL|Error' /tmp/out.log, or have a subagent run the command and return only a summary. Never let a full build/test log stream into the orchestrator./compact (or rely on session chaining via claude-progress.txt) at the seam between dependency groups, where the summary is cheap and the prefix rebuild is amortized — never mid-implementation, which throws away a warm cache. (See SECTION 10: Session Chaining.)CLAUDE.md edits, no main-loop model swap during a run (see the Prompt Caching rules in CLAUDE.md). Model changes happen via subagents only.At the start of EVERY iteration — including the first — read these files in order:
.claude/program.md — Constraints may have changed mid-run. Re-read every iteration. Never cache..claude/state/learned-rules.md — Accumulated project rules. Inject verbatim into ALL agent prompts spawned this iteration.claude-progress.txt — Read the LAST session block (the block after the final === Session marker). Extract: current_group, groups_completed, groups_remaining, last_commit, next_action. If the file does not exist (/auto invoked standalone, without /build), create it now with a Session 0 block in the SECTION 10 format before reading.features.json — Current pass/fail state for all features. Determines what work remains.specs/stories/dependency-graph.md — Compute the current wave (Section 4B Wave Selection Algorithm). A group is "unfinished" if any of its stories' features are not passing in features.json. Respect dependency ordering: do not start a group whose upstream dependencies have failing features. With --sequential (or --parallel-groups 1), the wave is the single next unfinished group; with default --parallel-groups 3, the wave is up to 3 concurrently-ready groups.Readiness: ready. If any story is needs_breakdown, stop and request a story decomposition pass before implementation.If claude-progress.txt indicates a current_group (or current_wave) that is not yet complete, resume from there. Otherwise, compute a fresh wave per Section 4B.
Sprint contracts define the verifiable done-criteria for a group. Two-step propose-approve process using generator and evaluator agents.
Spawn generator as a subagent with this prompt:
Read stories [list IDs for this group],
specs/design/api-contracts.md,specs/design/component-map.md. Propose a sprint contract for group {ID}. Include: api_checks, playwright_checks, design_checks, architecture_checks, features list. Write the contract tosprint-contracts/{group}.json.
The generator produces a draft contract based on the story acceptance criteria and the architecture design.
Spawn evaluator as a subagent with this prompt:
Read the proposed sprint contract at
sprint-contracts/{group}.json. Review each check against the story acceptance criteria and API contracts. Add any missing checks. Remove any checks that do not trace to an acceptance criterion. Write the final contract to the same path. Also write an audit of your edits tospecs/reviews/contract-audit-{group}.json:{"group": "...", "added": [{"check": ..., "reason": ...}], "removed": [{"check": ..., "reason": ...}]}— an emptyadded/removedmeans the proposal was accepted as-is.
Rules:
contract-audit-{group}.json after negotiation and surfaces it in the progress log (and to the user at the next escalation point). A removal whose reason contradicts a story acceptance criterion is grounds to re-run negotiation once with the audit attached — this is the only permitted second cycle.Spawn the generator agent to create and manage a Claude Code agent team for the current group.
When invoking the generator from /auto, you (the orchestrator) MUST use a prompt that carries the team mandate inline — a terse one-liner like "Implement group A" leaves too much latitude and the generator will sometimes implement solo. Use this template verbatim, substituting {GROUP_ID} and the story count:
Implement group {GROUP_ID} ({N_STORIES} stories) using the mandatory parallel-team protocol from generator.md Rule 2.
You are dispatching, not implementing. Concretely:
1. Read specs/stories/ for every story in this group.
2. Read specs/design/component-map.md and build the micro-DAG (Step 2.5).
3. Spawn one Agent(subagent_type=generator) per story — in parallel for Phase 1, then Phase 2 after Phase 1 commits.
4. Do NOT call Write or Edit on production files yourself unless you are the designated integrator for a shared file in Phase 3.
5. Log every teammate spawn to .claude/state/iteration-log.md with the story ID, owned files, and phase.
6. After all teammates complete, run the validation gate (pytest, ruff, mypy/tsc, coverage) and hand off to the evaluator.
This applies for any group with N_STORIES >= 2 regardless of how small the stories look. There is no bypass — every multi-story group spawns a team.
If the group has only 1 story, use the legacy single-generator prompt instead — no team needed.
After the generator subagent returns, verify the team actually executed before trusting the result:
.claude/state/iteration-log.md — there must be one teammate-spawn entry per story in the group (minus integrators for Phase 3-only files)..claude/state/learned-rules.md (under "Process rules"), and re-dispatch with an even stricter prompt that names the violation.This verification is non-optional: the user has explicitly requested parallel agent teams for independent story clusters and silent fallback to solo execution defeats the purpose.
Before spawning teammates, the generator analyzes the component map:
Produces: / Consumes: in component map)Log the micro-DAG to iteration-log.md.
If no cross-dependencies exist, all teammates spawn in parallel (legacy behavior).
| Phase | Who | Starts When | Must Do |
|---|---|---|---|
| 1 | Teammates with no upstream deps | Immediately | Implement + commit typed interface contracts |
| 2 | Teammates consuming Phase 1 outputs | All Phase 1 teammates complete | Code against committed interface contracts |
| 3 | Integrators for shared files | All Phase 2 teammates complete | Collect declared additions, write to shared files |
Max 5 concurrent teammates per phase. Batch in groups of 5 if more.
Every teammate receives:
specs/stories/E{n}-S{n}.md)ready; otherwise do not spawn)specs/design/component-map.md).claude/state/learned-rules.md — inject verbatim).claude/skills/code-gen/SKILL.md).claude/skills/code-gen/references/api-integration-patterns.mdspecs/brownfield/code-graph.json exists: run checking-coverage-before-change on those symbols before the first edit; UNCOVERED routes through pinning-down-behavior / sprouting-instead-of-editingRoles are assigned by capability tier, not a specific model — no prompt in this harness assumes which model it is running on (see docs/prompting-standards.md → "Model-agnostic by construction").
| Role | Tier | Rationale |
|---|---|---|
/auto orchestrator | top-capability | Judgment, architectural decisions |
| Evaluator | top-capability | Skeptical verification |
| Design critic | top-capability | Subjective visual judgment |
| Generator lead | cost-efficient | Coordination, lower cost |
| Generator teammates | cost-efficient | Mechanical implementation |
| Security reviewer | top-capability | Contextual vuln reasoning + adversarial find-then-refute |
The orchestrator runs on the session model (whatever /model is set to — Opus 4.8 or Fable 5 both work). Subagent models are pinned per agent in .claude/agents/<name>.md frontmatter (model:), stamped from the cost-posture preset in project-manifest.json → execution.model_tier (default balanced):
Re-stamp after editing the manifest: node .claude/scripts/model-tier.js <preset> --apply .claude/agents. Full rationale + decision rule: docs/model-allocation.md.
Within-group teams (Section 4) parallelize stories inside one group. Cross-group parallelism parallelizes independent groups of the dependency graph. The two compose: a wave of 3 concurrent groups, each with 5 teammates, is 15 concurrent subagents at peak.
Cross-group parallelism activates when all of the following hold:
--parallel-groups N is > 1 (default 3; pass --sequential or --parallel-groups 1 to opt out).specs/stories/dependency-graph.md) declares two or more groups whose upstream dependencies are all satisfied (already-complete groups or zero upstream deps).If only one group is ready in the current wave, behave exactly as sequential /auto — no extra branches, no parent/child split. Don't pay the coordination tax when there's nothing to coordinate.
specs/stories/dependency-graph.md and features.json.G is complete when every story in G has passes: true in features.json.G is ready when every upstream group of G is complete (or G has no upstream deps).--parallel-groups N (default 3). If more groups are ready than the cap, pick the first N in dependency-graph order; the remainder fall into the next wave.Log the wave selection to .claude/state/iteration-log.md before dispatching:
=== Wave 1 (2026-05-13T12:30:00Z, parallel-groups=3) ===
Ready: [B, C, D]
Selected: [B, C, D]
Deferred: []
Each group in a wave runs on its own branch to eliminate parallel-commit conflicts on the trunk.
WAVE_BASE (e.g., main or feat/new-thing).G in the wave, the parent creates auto/group-{G} from WAVE_BASE and dispatches the group-orchestrator subagent against it.WAVE_BASE sequentially in dependency-graph order. Failed groups are NOT merged; their branches are preserved for inspection.Merge conflicts at this stage indicate a file-ownership violation (two groups touched the same file). When that happens:
.claude/state/learned-rules.md under "Process rules"./auto to re-plan with the user.If --sequential, skip branch creation entirely and commit directly to WAVE_BASE.
Concurrent group-orchestrators MUST NOT write to shared state files. The parent owns shared state and merges per-group artifacts between waves.
Parent-owned (read-write only by parent orchestrator):
claude-progress.txt.claude/state/learned-rules.mdfeatures.json (parent rolls up per-group status updates between waves)Per-group-owned (read-write only by that group's orchestrator):
.claude/state/wave-{N}/group-{G}/iteration-log.md — micro-DAG, teammate spawns, ratchet results.claude/state/wave-{N}/group-{G}/features-update.json — proposed updates to features.json for stories in G.claude/state/wave-{N}/group-{G}/learned-rule-candidates.md — candidate rules to roll up.claude/state/wave-{N}/group-{G}/sprint-contract.json — copy of the approved contract for this groupsprint-contracts/group-{G}.json — the canonical contract (each group writes only its own file)The parent creates .claude/state/wave-{N}/ before dispatch and rolls per-group artifacts up into parent-owned state between waves. Roll-up steps:
iteration-log.md section to the canonical .claude/state/iteration-log.md (preserving group tags).features-update.json into features.json (key-disjoint by story ID — no conflicts possible if file ownership held).learned-rule-candidates.md — promote the strong ones to .claude/state/learned-rules.md; discard duplicates and weak signals.claude-progress.txt with the wave summary (groups completed, stories passing, next wave preview).For each group G in the current wave, the parent spawns a subagent with this prompt template. Use Agent(subagent_type=generator) — the generator agent's instructions cover both implementation AND orchestration when given the group-orchestrator role.
You are the group-orchestrator for dependency group {G} of wave {N}.
Your scope is EXACTLY one group. Do not touch other groups, do not advance the wavefront, do not write to parent-owned state files.
Mandatory steps:
1. Read sprint-contracts/group-{G}.json. If missing, propose one (Section 3 of /auto), get evaluator approval, then proceed.
2. Switch to branch auto/group-{G} (parent has already created it from {WAVE_BASE}).
3. Run the in-group flow: micro-DAG → teammate dispatch (Rule 2 in generator.md) → ratchet gate for this group only.
4. Write per-group state to .claude/state/wave-{N}/group-{G}/ ONLY. Do not write to claude-progress.txt, learned-rules.md, or features.json directly.
5. Commit all work to auto/group-{G}. Do NOT merge — the parent handles merging after the wave.
6. Return a structured summary: { "group": "{G}", "passes": <bool>, "stories_passing": [...], "stories_failing": [...], "rule_candidates_path": "...", "iteration_log_path": "..." }
You may parallelize teammates within this group up to 5 (Rule 2 mandate). You may NOT spawn nested group-orchestrators or touch other groups.
The parent dispatches all group-orchestrators in the wave in a single message (multiple Agent tool calls in one block — Claude Code runs them concurrently). The parent then:
WAVE_BASE (sequential merges)..claude/state/iteration-log.md, advance to the next wave with the failed group still incomplete. The next wave may unlock different groups via the dependency graph; failed groups can be retried by re-running /auto --group {G} later.| Failure mode | Parent action |
|---|---|
| One group in wave fails ratchet gate | Leave branch unmerged, advance other groups, surface failure summary at end of wave |
| Group-orchestrator subagent crashes / times out | Treat as failed; do NOT auto-retry inside the same wave (avoid infinite loops); user can /auto --group {G} to retry |
| Merge conflict during roll-up | Abort merge for that group, treat as failure, record as a file-ownership-violation rule candidate |
| All groups in wave fail | Stop. Print wave summary and ask user how to proceed |
| Resource | Cap | Rationale |
|---|---|---|
| Concurrent group-orchestrators per wave | 3 (default, override with --parallel-groups N) | Below most rate limits; leaves headroom for within-group teams |
| Concurrent teammates per group-orchestrator | 5 (Section 4 mandate) | Existing within-group cap |
| Peak total subagents | 15 (3 × 5) | Safety ceiling; raise only after observing actual usage |
If --parallel-groups N > 3, accept it but emit a warning to the iteration log. The 3-default is conservative; teams with higher API throughput can raise it.
After the agent team completes, run the ratchet gate. The ratchet is monotonic: progress never regresses. Seven sub-gates, mode-dependent:
| Gate | Full | Lean |
|---|---|---|
| 1. Unit tests (pytest, vitest) | Yes | Yes |
| 2. Lint + types (ruff, mypy, tsc) | Yes | Yes |
| 3. Coverage >= baseline | Yes | Yes |
| 4. Architecture (files exist, schema validation) | Yes | Yes |
| 5. Evaluator (API + Playwright vs running Docker) | Yes | Yes |
| 6. Design critic (vision scoring, GAN loop) | Yes | No |
| 7. Security (security-reviewer, block on critical/high) | Yes | Yes |
Lean differs from Full only at Gate 6: it does not run the design-critic vision loop at all. Every other gate — including the Gate 7 security review and the Gate 5 evaluator — runs in both modes. There is no mode that skips the security gate or the evaluator; that is the whole point of the ratchet.
The Fast Lane is a per-commit optimization (not an execution mode): for a commit that introduces no production logic, skip the expensive gates 4, 5, and 6 (architecture, evaluator, design-critic). It applies to commits that ONLY contain:
Gates 1, 2, 3, and 7 still run — tests, lint/types, coverage, and the security review. The security gate is never skipped, even on the Fast Lane (it is cheap and a no-op on a docs-only diff, but a "trivial" commit that quietly touches a secret or an env file must still be caught).
Detection: take the Fast Lane only when git diff --cached --name-only shows no files with a source extension (.py/.ts/.tsx/.js/…) — i.e. only .md, config, or annotation-only changes — or the commit message starts with fix: lint, style:, or docs:. When in doubt, run the full ratchet.
This prevents the expensive evaluator from blocking trivial housekeeping changes.
For small work requested outside /auto, use /vibe instead of starting the autonomous loop. /vibe applies the same fast-lane idea at interactive scale: micro-contract, narrow edits, targeted checks, and reviewer enforcement without sprint contracts or full SDLC artifacts.
cd backend && uv run pytest -x -q && cd ..
cd frontend && npm test && cd ..
Both must pass with zero failures. The -x flag stops at first failure for fast feedback.
# Backend
uv run ruff check . && uv run mypy src/
# Frontend
npm run lint && npm run typecheck
All four commands must exit with code 0.
uv run pytest --cov=src --cov-report=term-missing -q | grep "^TOTAL" | awk '{print $NF}'
Compare the result with .claude/state/coverage-baseline.txt. The new coverage percentage must be greater than or equal to the baseline AND >= 80% (hard floor). If it drops below either threshold, the gate FAILS — even if all tests pass.
Coverage policy (ref: "AI is forcing us to write good code" by Steve Krenzel):
Spawn evaluator to verify architecture_checks from the sprint contract:
files_must_exist must be present on disk.specs/design/api-contracts.schema.json if specified.Spawn evaluator with the full sprint contract. The evaluator runs:
api_checks against the live Docker stack.playwright_checks against the running UI.The evaluator writes its report to specs/reviews/evaluator-report.md.
Spawn design-critic on every page listed in the sprint contract's design_checks. The critic screenshots each page, scores visual fidelity, and returns PASS/FAIL per check. See SECTION 9 for the full GAN loop if scores are below threshold.
Spawn the security-reviewer agent against the group's changed files. It writes specs/reviews/security-verdict.json. The gate FAILs if security-verdict.json#pass === false — i.e. any finding whose severity is in the contract's contract.security_checks.block_severities (default ["critical", "high"]). Medium/low findings are WARN/INFO and do not fail the gate. A missing verdict file is a FAIL (failure_layer: "security") — a skipped scan is never a pass. This gate does not need the Docker stack and can run concurrently with Gate 5.
Sequential mode (--sequential or wave-of-one):
git add -A && git commit -m "feat: implement group {group}"passes: true for all features in this group's sprint contract.Parallel mode (wave of ≥ 2 groups):
The above steps are split across the group-orchestrator subagent and the parent orchestrator:
Group-orchestrator (per group, runs in subagent):
git commit -m "feat: implement group {group}" auto/group-{group} (already checked out).features.json updates to .claude/state/wave-{N}/group-{group}/features-update.json and the per-group iteration-log.md and learned-rule-candidates.md. Do NOT touch parent-owned files.Parent (after all group-orchestrators in the wave return):
4. Roll-up state (Section 4B Wait + Merge Protocol): merge per-group features-update.json files into features.json, append per-group iteration-log.md sections to the canonical log, triage learned-rule-candidates.md into learned-rules.md.
5. Merge branches sequentially into WAVE_BASE in dependency-graph order (passing groups only).
6. Update parent state: append a new session block to claude-progress.txt with the wave summary; ratchet coverage-baseline.txt to the new repo-wide coverage after all merges.
7. Next wave: Return to SECTION 2 (context recovery) to compute the next wave.
Do not immediately revert. Attempt targeted self-healing first.
Attempt 1-3:
Diagnose: Invoke superpowers:systematic-debugging to analyze the failure before attempting a fix. This prevents jumping to conclusions and ensures the root cause is identified. Read the evaluator report (specs/reviews/evaluator-report.md) and, for security failures, the security verdict (specs/reviews/security-verdict.json) for specific failure details. Identify the exact check or finding that failed and the error output.
Classify the failure into one of 10 categories:
| Category | Signal | Auto-Fix Strategy |
|---|---|---|
| Lint/format | ruff/eslint error output | ruff check --fix && ruff format |
| Type error | mypy/tsc error with file:line | Fix the type annotation at the specified location |
| Test failure | pytest/vitest assertion error | Fix the production code, NOT the test |
| Import error | ImportError / ModuleNotFoundError | Fix the import path or __init__.py |
| Coverage drop | Coverage % below baseline | Add tests for the specific uncovered lines |
| API check fail | HTTP 500/404/wrong schema | Read docker compose logs backend --tail=50, identify root cause from stack trace, fix service/router |
| Playwright fail | Element not found / assertion error | Read the selector, fix the component |
| Design score low | Score below threshold | Apply the critique text, regenerate the UI |
| Docker fail | Container exit code / won't start | Read docker compose logs, fix config or deps |
| Architecture drift | Schema mismatch / missing file | Read the schema, fix the response or create the file |
| Security (BLOCK) | security-verdict.json#pass === false (critical/high finding) | Apply the finding's fix; parameterize queries, add authz/validation, remove hardcoded secrets. Re-run the security-reviewer to confirm the verdict clears |
Spawn generator to apply the targeted fix. The generator prompt must include:
specs/reviews/eval-failures-NNN.json (see evaluator agent for schema).prior_attempts: On attempt 2, include attempt 1's fix description and result. On attempt 3, include both. This prevents the generator from re-trying the same fix.Error type to fix strategy mapping:
| error_type | Strategy |
|---|---|
lint_format | Run auto-fix tools (ruff check --fix, eslint --fix) |
type_error | Fix annotation at file:line from stack trace |
import_error | Check module path, fix import statement |
key_error | Check data shape at source — log incoming data, fix accessor |
timeout | Check if service is started, increase timeout, add retry |
connection_refused | Verify service URL in config, check port mapping |
validation_error | Compare request/response against schema, fix model |
assertion_error | Read test assertion, compare expected vs actual, fix logic |
api_transient | Retry evaluator check once (code may be correct, API was flaky). If retry passes, do not count as a self-heal attempt. |
api_permanent | Fix wrapper error handling or request format |
Re-run the failed gate (not all gates — just the one that failed).
3rd failure — hard stop for this group:
specs/design/component-map.md: git checkout -- {file1} {file2} .... Never git checkout -- . — in parallel-group mode that discards other groups' in-flight work..claude/state/failures.md with group ID, failure category, all three attempt summaries.claude-progress.txt./auto is responsible for starting and stopping the application. The evaluator does NOT manage the app lifecycle.
Read verification.mode from project-manifest.json. Default: docker.
Startup:
bash init.sh before first evaluator checkBetween Groups:
docker compose up -d --build
Wait for health check before handing off to evaluator.
Teardown:
docker compose down -v
Error Context: docker compose logs --tail=50 {service_name}
Startup:
verification.local.start_commands from manifest.claude/state/process-{name}.logBetween Groups: Kill and restart processes (re-run start commands).
Teardown: Kill all background processes started by the orchestrator.
Error Context: Read from .claude/state/process-{name}.log
Startup:
verification.stub.schema_source from manifestBetween Groups: Regenerate mock server if schema has been amended (check specs/design/amendments/).
Teardown: Kill mock server process.
Error Context: Stub mismatch reports — when a request doesn't match any endpoint in the schema, log the requested path and method.
Stub mode limitations: Layer 1 checks validate request/response shapes but cannot verify business logic. Layer 2 (Playwright) skipped unless a separate frontend URL is configured.
When using --worktree flag, each worktree gets its own app instance:
project-manifest.json)After each agent team completes (before the ratchet gate):
specs/design/amendments/ for new files that were not present at the start of this iteration.api-contracts.md, component-map.md, schema files).git add specs/design/ && git commit -m "refactor: update api-contracts for {change description}"Amendments are a signal that the implementation discovered a design gap. They must be incorporated before evaluation, not deferred.
Read calibration-profile.json for all scoring and iteration parameters. Fall back to defaults if file does not exist.
| Parameter | Source | Default |
|---|---|---|
| Scoring weights | calibration-profile.json → scoring.weights | DQ=1.5, O=1.5, C=0.75, F=0.75 |
| Pass threshold | calibration-profile.json → scoring.threshold | 7 |
| Per-criterion minimum | calibration-profile.json → scoring.per_criterion_minimum | 5 |
| Max iterations | calibration-profile.json → iteration.max_iterations | 10 |
| Plateau window | calibration-profile.json → iteration.plateau_window | 3 |
| Plateau delta | calibration-profile.json → iteration.plateau_delta | 0.3 |
| Pivot on plateau | calibration-profile.json → iteration.pivot_after_plateau | true |
For each frontend page in the current group:
specs/reviews/eval-scores.json, continue to next pageAfter each iteration, check the last plateau_window weighted scores:
max(recent) - min(recent) < plateau_delta: scores have plateauedpivot_after_plateau is true: instruct generator to make a fundamental change (different palette, layout, or typography) — not incremental tweaksmax_iterations reached → log to failures.md, extract learned rule, escalate to user. Do NOT revert (ratchet gate already passed for functional checks).claude-progress.txt is the memory bridge between context windows. Each iteration appends a new session block.
=== Session {N} ===
date: {ISO 8601}
mode: {full|lean}
groups_completed: [A, B, C]
groups_remaining: [D, E, F]
current_group: D (extraction)
current_stories: [E4-S1, E4-S2]
sprint_contract: sprint-contracts/group-D.json
last_commit: {hash} "{message}"
features_passing: 47 / 203
coverage: 82%
learned_rules: 6
blocked_stories: none
next_action: Run evaluator against group D
next_action is critical. This field tells a fresh context window exactly what to do first. Be specific: "Run evaluator against group D" is good. "Continue" is not.blocked_stories if any stories failed 3 consecutive self-heal attempts. Format: [E4-S3 (import error), E5-S1 (docker fail)].OR logic with priority (check in order):
Hard stop: An architecture violation that self-healing cannot fix, OR the total iteration count exceeds 50. Stop the entire /auto run. Report status and hand off to the user.
Escalate (per-story): A story fails 3 consecutive self-heal iterations. Mark it BLOCKED. Log to failures.md. Extract learned rule. Skip to the next group. Do NOT stop the entire run.
Coverage gate: Coverage drops below the baseline AFTER a successful commit. This overrides the pass — revert the commit (git revert HEAD --no-edit), log the regression, and re-enter self-healing for coverage.
Success: All features in features.json have passes: true AND coverage >= baseline threshold. Before claiming completion, invoke superpowers:verification-before-completion to run all verification commands and confirm output. Evidence before assertions. Print:
=== BUILD COMPLETE ===
Features passing: {N}/{N}
Coverage: {X}%
Groups completed: [list]
Blocked stories: [list or "none"]
Learned rules: {count}
Total iterations: {count}
Then:
docker compose down -vREADME.md for the built application (see below)git add README.md && git commit -m "docs: add README with architecture, setup, and API reference"After the build completes, generate a README.md that describes the GENERATED APP (not the harness).
Read these files for content:
specs/brd/brd.md — project descriptionspecs/design/architecture.md — system architecturespecs/design/api-contracts.md or api-contracts.schema.json — API surfacespecs/design/component-map.md — module structureproject-manifest.json — tech stackinit.sh — setup stepsdocker-compose.yml (if exists) — services.env.example (if exists) — required environment variablesRequired sections: Project description, Architecture (diagram/layers), Tech Stack (table), Prerequisites, Quick Start (copy-paste commands), API Endpoints (table), Project Structure (directory tree), Running Tests, Environment Variables (table from .env.example), Development notes.
Rules:
/auto, agents, or the GAN loop. This is a developer README for the app..env.example exactly.Learned rules are the harness's long-term memory. They prevent the same mistake from recurring across iterations and context windows.
Extract a new rule when the same error type (by category from SECTION 6) appears 2 or more times in .claude/state/failures.md. Check after every failure entry.
Append to .claude/state/learned-rules.md:
## Rule {N}: {descriptive title}
- **Source:** Group {group}, Story {story}, Iteration {iter}
- **Impact:** {quantified damage — e.g., "test coverage dropped 18%", "deployment failed", "3 iterations wasted"}
- **Pattern:** {what went wrong — the repeated error signature}
### Mistake
{description of what happened and why it failed}
### Anti-Pattern (Avoid This)
\`\`\`{language}
{code example showing the bad pattern — actual code from the failure}
\`\`\`
### Better Approach
\`\`\`{language}
{code example showing the correct pattern — the fix that resolved it}
\`\`\`
- **Rule:** {the concrete instruction to prevent recurrence}
- **Applied in:** {list of agents/skills that must follow this rule}
Include code examples whenever the mistake involves a code pattern. For non-code mistakes (e.g., wrong deployment sequence), describe the steps instead of code blocks. Always quantify impact — agents prioritize rules with higher impact.
learned-rules.md does not exist yet, create it with a header: # Learned Rules\n\nRules extracted from failure patterns during autonomous build.\nprogram.md each iteration: Constraints can change mid-run (e.g., a human updates program.md while /auto is running). Always re-read at the start of every iteration.git checkout -- . reverts everything. After the 3rd failure, only the current group's files should be reverted. Use the file ownership list from component-map.md to scope the revert: git checkout -- {file1} {file2} ...failures.md for recurring patterns BEFORE spawning the generator. If the same error has appeared before, inject the relevant learned rule into the generator prompt proactively.