From agent-harness
Autonomous multi-agent sprint: Planner decomposes spec → Generators implement in parallel via Agent Teams → Evaluator verifies against acceptance criteria → iterates up to 3 times. Use when spec requires 3+ distinct tasks or multi-step implementation across files or domains. Do NOT use for: single-file edits, quick bug fixes, or tasks completable in one context window.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agent-harness:sprint [product spec — 1 to 4 sentences describing what to build][product spec — 1 to 4 sentences describing what to build]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
For ambiguous specs (vague verbs, missing acceptance criteria, multiple
For ambiguous specs (vague verbs, missing acceptance criteria, multiple
possible interpretations), enter plan mode before invoking /sprint:
Esc then P (Claude Code default) or your terminal's
plan-mode keybinding to enterThis is a recommendation, not a requirement. Crisp specs (single
concrete deliverable, clear acceptance) can skip plan mode and run
/sprint directly.
${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/config-schema.md —
routing config, schema v3 (auto-lifts v1 / v2)${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/sprint-contract.schema.md —
artifact schema for sprint-meta / plan / progress / eval files${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/planner.md — Planner
role prompt (Phase 2)${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/generator.md —
Generator role prompt (Phase 3)${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/evaluator.md —
Evaluator role prompt (Phase 5)${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/handoff-schema.md —
inter-phase handoff schema$ARGUMENTS
If arguments are empty: ask the user for a spec before proceeding.
Read configuration in this order; the first existing file wins for any given field, and later sources only fill in missing fields. Built-in defaults backfill anything nobody set.
./.claude/agent-harness.local.json — project-level override~/.claude/agent-harness.json — user-level${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/config-schema.md)For each Read attempt, treat ENOENT (file not found) as {} — never
error on missing config.
config-schema.md § Migration documents the lift rules. Briefly:
version: 3.{engine, model}. If
engine == "claude", take the model field; if engine is codex
or auggie, ABORT and tell the user to re-run /agent-harness:init
(v0.6.0 dropped multi-host support).Write the lifted v3 back to the same path so subsequent reads are fast.
{planner_model} — substituted into Phase 2b{evaluator_model} — substituted into Phase 5b{generator_routing_table} — a 4-row markdown table built from
models.generator.{code,write,research,collect} with columns
type | model | when to use. Use the schema doc text:
code — implementing features, fixing bugs, writing testswrite — long-form text, documentation, structured reportsresearch — synthesizing multiple sources, connecting conceptscollect — fetching data, format conversion, file discoveryBuilt-in defaults (no config file): every role uses sonnet. Safe
across every tier and API plan — /sprint runs without model-access
errors.
Print this hint when running with built-in defaults (no config file at any layer):
"Using safe defaults (all Sonnet). Planner quality is better with Opus — run /agent-harness:init to upgrade if you have Opus access."
Plan-mode tip — print on Phase 0 finish (always):
"Tip: ambiguous spec? Plan mode often catches mis-understandings before the workspace is created."
If {planner_model} resolves to a model the user lacks access to
(e.g. opus without Opus subscription), Phase 2's subagent spawn
will fail at first turn. Recover by re-running /agent-harness:init
and selecting an accessible preset.
Create the sprint workspace directory: .sprint/<timestamp>/
where <timestamp> is the current UTC time in format YYYYMMDD-HHmmss.
If .sprint/ is not already listed in .gitignore, append the line .sprint/ to .gitignore.
Write .sprint/<timestamp>/sprint-meta.json:
{
"iteration": 1,
"max_iterations": 3,
"status": "running",
"started_at": "<ISO timestamp>",
"spec": "<$ARGUMENTS verbatim>",
"workspace": ".sprint/<timestamp>"
}
All subsequent sprint files go inside .sprint/<timestamp>/. Reference this path as {workspace} in later phases.
Step 2a: Read these files and hold their full text in memory:
${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/planner.md → PLANNER_CONTENT${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/handoff-schema.md → SCHEMA_CONTENTStep 2b: Spawn a subagent (model: {planner_model}) with a prompt assembled from these parts in order:
{PLANNER_CONTENT — paste full text}
---
## Handoff Schema (reference)
{SCHEMA_CONTENT — paste full text}
---
## Resolved Model Routing Table (assigned by orchestrator for this sprint)
{generator_routing_table — paste the 4-row table built in Phase 0; columns are type | model | when to use}
---
## Your Assignment
SPEC: {$ARGUMENTS verbatim}
WORKSPACE: {workspace}
Write `{workspace}/sprint-plan.md` following the sprint-plan.md schema exactly.
Use the Resolved Model Routing Table above to assign each task's `model` field
based on its `type`.
After writing the file, output exactly: PLANNER DONE
Wait for the subagent to complete before proceeding.
Read {workspace}/sprint-plan.md. Verify it exists and contains both parallel_batch and sequential_tasks sections.
If the file is missing or malformed: stop and report to user — do not continue with a broken plan.
Read {workspace}/sprint-plan.md to extract parallel_batch and sequential_tasks.
Step 3a: Read these files and hold their full text in memory:
${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/generator.md → GENERATOR_CONTENT${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/handoff-schema.md → SCHEMA_CONTENT (reuse from Phase 2 if still available)For every Generator subagent, build the prompt using this template:
{GENERATOR_CONTENT — paste full text}
---
## Handoff Schema (reference)
{SCHEMA_CONTENT — paste full text}
---
## Sprint Plan
{sprint-plan.md full content}
---
## Your Assignment
TASK_ID: {task-id}
WORKSPACE: {workspace}/
Find your TASK_ID in the Sprint Plan above and implement it.
Write your output to `{workspace}/sprint-progress/{task-id}.md` following the sprint-progress schema.
Step 3b: Check Agent Teams availability:
echo $CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS
For each task ID in parallel_batch, spawn a teammate simultaneously in a single message (one Agent tool call per task, all in the same turn).
Wait for ALL teammates to complete before proceeding.
For each task ID in parallel_batch, spawn a subagent sequentially — one task at a time, wait for each to finish.
Note in output: "Agent Teams not available — parallel_batch running sequentially."
For each task ID in sequential_tasks (in listed order):
Read all {workspace}/sprint-progress/*.md files.
Write {workspace}/sprint-progress-summary.md listing each task ID, status (DONE/BLOCKED), and one-sentence summary.
Step 5a: Read these files and hold their full text in memory:
${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/evaluator.md → EVALUATOR_CONTENT${CLAUDE_PLUGIN_ROOT}/skills/sprint/references/handoff-schema.md → SCHEMA_CONTENT{workspace}/sprint-plan.md → PLAN_CONTENT{workspace}/sprint-progress-summary.md → SUMMARY_CONTENT{workspace}/sprint-progress/*.md → PROGRESS_FILES (labelled by task ID)Step 5b: Spawn a subagent (model: {evaluator_model}) with a prompt assembled from these parts:
{EVALUATOR_CONTENT — paste full text}
---
## Handoff Schema (reference)
{SCHEMA_CONTENT — paste full text}
---
## Sprint Artifacts
### sprint-plan.md
{PLAN_CONTENT}
### sprint-progress-summary.md
{SUMMARY_CONTENT}
### Progress Files
{Each PROGRESS_FILES entry, labelled with its task ID}
---
## Your Assignment
WORKSPACE: {workspace}/
Write `{workspace}/sprint-eval.md` following the sprint-eval.md schema exactly.
After writing the file, output exactly: EVALUATOR DONE
Wait for the subagent to complete.
Read {workspace}/sprint-eval.md.
Read {workspace}/sprint-meta.json fresh (do not rely on in-memory state from earlier phases).
{workspace}/sprint-meta.json → status: "done"iteration < max_iterations:{workspace}/sprint-meta.json → iterationretry_tasks from {workspace}/sprint-eval.md{workspace}/sprint-plan.md → move retry_tasks into a new parallel_batch (if no deps) or sequential_tasks{workspace}/sprint-eval.md content to each Generator prompt so they know what failed and whyiteration >= max_iterations:{workspace}/sprint-meta.json → status: "blocked"After Phase 6 reports done, if sprint-plan.md Interpretation lists any
"out-of-orchestrator scope" items the user expects performed (e.g. "push to
GitHub when done", "open in browser"), the orchestrator handles them with a
destructive-action gate:
Classify each item:
For destructive items:
For non-destructive items: execute directly.
Reference: .claude/rules/ai-collaboration.md Push-to-main Workflow defines
per-repo push policy; this gate is the orchestrator-level guard above it.
Sprint complete — Iteration 1
Built:
TASK-001 Login page with email/password fields PASS
TASK-002 Google OAuth button and callback route PASS
TASK-003 Session persistence (7-day cookie) PASS
Files changed: 6 files, +312 lines
Workspace: .sprint/20260427-143022/
~/.claude/agent-harness.json (user-level) and ./.claude/agent-harness.local.json (project override). Missing config falls back to all-Sonnet — safe across every tier, but Planner quality is better with Opus/agent-harness:init and pick full-access to upgrade Planner to Opus. Without that, /sprint still works on Sonnet, just with slightly lower planning quality.sprint/<timestamp>/ — all handoff files live there, not in the project rootsprint-plan.md content in their prompt — they do not need separate Read access to itparallel_batch runs sequentially — note this in output but do not abort the sprintgit push during any active sprintsprint-plan.md (missing parallel_batch or sequential_tasks): stop and report to user rather than continuingsprint-meta.json is the source of truth for iteration count — always read it fresh at the start of Phase 6, never use a cached valuesprint-plan.md AND the failed sprint-eval.md so they know exactly what failed and why.sprint/ is gitignored — sprint artifacts are local-only by default; do not commit themdo not overwrite existing files in <path> in the spec"references/sprint-contract.schema.md (artifact schema). v0.4.x – v0.5.x experimented with multi-host (Codex / Auggie) but those tracks were rolled back in v0.6.0 — references/engine-flag-matrix.md, references/cross-host-deployment.md, and references/model-registry.md were removed along with the adapters/ and templates/ directories.npx claudepluginhub bouob/claude-plugins --plugin agent-harnessCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.