From claude-code-harness
Team execution mode — backward-compatible alias for harness-work with team orchestration. Composer/composer 2.5 maps to the cursor backend.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-code-harness:breezing [all|N-M|--codex|--cursor|--reviewer-only|--parallel N|--no-commit|--no-discuss|--auto-mode][all|N-M|--codex|--cursor|--reviewer-only|--parallel N|--no-commit|--no-discuss|--auto-mode]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
> **Backward-compatible alias**: runs `harness-work` in team execution mode.
Backward-compatible alias: runs
harness-workin team execution mode.
The enemy is verbosity, not progress reporting. At startup, state the execution plan concisely, then begin execution. Readable progress reports are welcome. Only verbose repetition and empty preambles are prohibited.
In the first response, show what and in what order before entering tool execution:
🚀 cursor / composer-2.5-fast / feat/hah-11-golden-rule-lint / Reviewer
Next:
1. resolve backend/model
2. delegate diff review to composer (read-only)
3. summarize the verdict in 3-5 lines → update Plans.md
1 banner line (🚀 <backend> / <model> / <branch> / <task>) + 2-4 plan lines. Emit within 1 second, then go straight to Step 1.
✓ backend=cursor / model=composer-2.5-fast)Violation example (verbose):
× "composer 2.5 mode" = delegate to Composer on the cursor backend, right? (rephrasing the interpretation)
× "Since the Reviewer stalled last time, escaping to another path makes sense" (3+ lines of recap)
× "Let me check the usage" → bash → "we can call it" (empty preamble + rephrasing the same fact twice)
Good example (concise + explicit plan):
🚀 cursor / composer-2.5-fast / feat/hah-11-golden-rule-lint / Reviewer
Next: resolve backend → delegate diff review to composer (read-only) → summarize verdict
/breezing # ask for the scope (claude backend)
/breezing all # run all tasks to completion (claude backend)
/breezing 3-6 # run tasks 3-6 to completion
/breezing --codex all # delegate all tasks to the Codex CLI
/breezing --cursor # cursor backend lean path (--no-discuss all by default)
/breezing --cursor --reviewer-only # delegate only the Reviewer to cursor (Worker already done via another path)
/breezing composer 2.5 all # natural-language trigger: treated as cursor backend
/breezing --parallel 2 all # run all tasks to completion with 2-way parallelism
/breezing --no-discuss all # run all tasks to completion, skipping plan discussion
/breezing --auto-mode all # try the Auto Mode rollout in a compatible parent session
| Option | Description | Default |
|---|---|---|
all | target all incomplete tasks | - |
N or N-M | task number/range | - |
--codex | delegate implementation to the Codex CLI | false |
--cursor | cursor backend lean path (equivalent to HARNESS_IMPL_BACKEND=cursor). Skips Worker intervention / self_review / the sprint-contract 3-stage chain / Phase 0, and starts startup → delegation within 3 seconds | false |
--reviewer-only | delegate only the Reviewer to an independent path (assumes Worker implementation is already done). Combine with --cursor to escape to Composer | false |
--parallel N | number of parallel Implementers | auto |
--no-commit | suppress auto-commit | false |
--no-discuss | skip plan discussion | true by default with --cursor |
--auto-mode | explicitly enable the Harness-side Auto Mode rollout. Different from --enable-auto-mode, which became unnecessary in CC 2.1.111 | false |
composer / Composer with / composer 2.5 / composer mode are formally treated as triggers for the cursor backend.
This is intent equivalent to --cursor; the Lead resolves the backend via resolve-impl-backend.sh.
When resolving, pass --backend cursor as an explicit override so it takes priority over env / project / user file / default.
| Example input | Interpretation | Execution path |
|---|---|---|
with composer 2.5 | cursor backend | Lead → cursor-companion.sh task --write --workspace <wt> |
everything with composer | cursor backend | Lead → cursor-companion.sh task --write --workspace <wt> |
composer mode | cursor backend | Lead → cursor-companion.sh task --write --workspace <wt> |
composer is not an additional agent spawned inside the Claude Worker.
Following the non-claude backend topology, the Lead calls cursor-companion.sh directly without inserting a Worker agent.
CC 2.1.111 note: On Opus 4.7, you can literally use
/effort xhigh. Use the built-in/ultrareviewadditionally only on explicit request; it does not replace the default review.
Long-session recommendation (CC 2.1.108+): When a session is expected to exceed 30 minutes, after resolving the plugin bundle root, run
bash "${HARNESS_PLUGIN_ROOT}/scripts/enable-1h-cache.sh"to opt into the 1-hour prompt cache. This script appendsexport ENABLE_PROMPT_CACHING_1H=1toenv.local(idempotent). With the default 5-minute TTL cache, cache misses accumulate over a breezing session exceeding 1 hour and input token cost can be up to 12x, so explicitly opt in for long-running team execution. Codex CLI child processes (scripts/codex-companion.sh task --write, etc.) usually readENABLE_PROMPT_CACHING_1Hvia env inheritance, but whenCLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1is enabled, a shell wrapper that explicitly keeps the export is needed. For details seedocs/long-running-harness.md.
This skill delegates to harness-work. Run harness-work with the following settings:
harness-work as-is--auto-mode is accepted as a rollout flag for a compatible parent sessionadvisor-request.v1harness-work| Feature | harness-work | breezing (this skill) |
|---|---|---|
| Parallel means | auto-split per needed count | role separation of Lead/Worker/Reviewer |
| Lead's role | coordinate + implement | delegate (coordination only) |
| Review | Lead self-review | independent Reviewer |
| Default scope | the next task | everything |
| Role | Agent Type | Mode | Responsibility |
|---|---|---|---|
| Lead | (self) | - | coordinate, direct, distribute tasks |
| Worker ×N | claude-code-harness:worker | bypassPermissions (current) / Auto Mode (follow-up)* | implement |
| Advisor | claude-code-harness:advisor | read-only | direction advice (PLAN / CORRECTION / STOP) |
| Reviewer | claude-code-harness:reviewer | bypassPermissions (current) / Auto Mode (follow-up)* | independent review |
*When the parent session or frontmatter is
bypassPermissions, that takes priority. Since the distribution template still usesbypassPermissions, Auto Mode is a follow-up rollout target, not the default behavior.
--codex)A mode that delegates all implementation to the Codex CLI via the official plugin codex-plugin-cc:
# Task delegation (writable)
bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write "task content"
# Via stdin (for large prompts)
CODEX_PROMPT=$(mktemp /tmp/codex-prompt-XXXXXX.md)
# write out the task content
cat "$CODEX_PROMPT" | bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write
rm -f "$CODEX_PROMPT"
When HARNESS_IMPL_BACKEND=cursor (set with bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" cursor),
cursor becomes the default worker backend without a per-run flag. The review / advisor roles stay fixed to Opus.
For the authoritative source of backend selection (precedence, role-scope, self_review skip, cursor banner),
see "Execution Backend Selection" in harness-work.
The Cursor Backend Fast Path below is a separate axis that enables an equivalent lean path via a per-run flag (--cursor); read it together with this section.
--cursor / lean mode)Enabled when --cursor is specified, or when env HARNESS_IMPL_BACKEND=cursor. The Lead calls cursor-companion.sh directly without inserting the Worker layer (Phase 85 SSOT, the Topology section of .claude/rules/cursor-cli-only.md).
| Step | Reason for removal | Seconds saved |
|---|---|---|
claude-code-harness:worker agent spawn | the cursor backend has no Worker intervention | 5-30s |
| self_review 5-item gate | worker-report.v1 is not generated on cursor, so it is unnecessary | 10-60s × retry |
| sprint-contract 3-stage chain (generate→enrich→ensure) | no contract needed if no Worker contract is needed | 2-5s × N |
| Phase 0 Q1-Q3 interactive | --no-discuss all by default (the Lead reads Plans/Depends directly) | 15-30s |
| Effort scoring | no ultrathink injection needed on the cursor backend | 0.5-1s × N |
| Plans.md re-parse (per task) | in-session cache (short-circuited by mtime+hash) | 3-8s |
In total, shortens the time to start the first task's cursor delegation from a baseline of 15-35s to a target of 3-7s.
🚀 cursor / <model> / <branch> / <task> + 2-4 steps coming up, 5 lines total max, within 1 second)git branch --show-current + cat VERSION + Plans.md tail + cursor-agent --versionbash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" + bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field modelbash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task --write --workspace <wt> "<task>"cc:done [hash]--cursor --reviewer-only) — read = leanA lean path for when the Worker implementation is already done (finished via another path = claude / Codex) and you want only the Reviewer run on an independent path (Composer). Since it is a read-only delegation, no worktree, no cherry-pick, no Lead diff review:
🚀 cursor / composer-2.5-fast / review + "Next: delegate diff review to composer → summarize verdict"bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task "diff review: <base_ref>..HEAD" — add neither --write nor --workspace
--mode ask (hard read-only stop) when --write is unspecified (the workspace guard of cursor-companion.sh fires only with --write)dual_review.cursor_verdictcc:done [hash]Removable in read mode: dedicated .git worktree / Lead diff review / cherry-pick / worker-report.v1 / self_review 5 items.
Must keep even in read mode: .cursorignore / egress allowlist (*.cursor.sh) / permissions.json (best-effort). For details see the "Read mode delegation (lean path)" section of .claude/rules/cursor-cli-only.md.
Uses:
Cursor is still internal-compatible tier (promoted in Phase 87 / PR #174). The supported public claim remains gated until the CI-gated workflow smoke is satisfied. The --cursor lean path does not promote the support tier.
Bootstrap route: .cursor/AGENTS.md + .cursor-plugin/plugin.json.
Verification:
bash tests/test-cursor-adapter-candidate.sh
bash tests/test-support-claim-wording.sh
breezing [scope] [--codex] [--parallel N] [--no-discuss] [--auto-mode]
│
↓ Load harness-work with team mode
│
Phase 0: Planning Discussion (skipped with --no-discuss)
Phase A: Pre-delegate (team initialization)
Phase B: Delegate (Worker implements + Advisor when needed + Reviewer reviews)
Phase C: Post-delegate (integration verification + Plans.md update + commit)
The Worker does not add generic subagents. When in doubt, it returns only a structured-JSON consultation request, and the Lead calls the advisor.
advisor-request.v1advisor-response.v1Consultation conditions align with loop / solo.
needs-spike / security-sensitive / state-migration)PIVOT_REQUIRED due to a plateautrigger_hash only once. The max consultations per task is 3The Lead outputs progress in the following format each time a Worker completes a task:
📊 Progress: Task {completed}/{total} done — "{task_subject}"
Output example:
📊 Progress: Task 1/5 done — "add failure re-ticketing to harness-work"
📊 Progress: Task 2/5 done — "add --snapshot to harness-sync"
📊 Progress: Task 3/5 done — "add a progress feed to breezing"
Design intent: breezing often runs for a long time. Make it possible to tell at a glance "how far it has progressed" when the user glances at the terminal. The task-completed.sh hook outputs equivalent info via systemMessage, complementing the Lead's output.
In Codex 0.123.0's realtime handoff, a background agent receives transcript deltas and can explicitly stay silent when unnecessary.
Breezing's progress feed aligns with this premise, narrowing notifications to "work milestones."
What to report:
REQUEST_CHANGESPLAN / CORRECTION / STOPAPPROVE / REQUEST_CHANGESWhat may stay silent:
Keep the frequency to "once per task completion" as the baseline. Rather than adding heartbeats for reassurance, split the responsibility into status / log / drift detection. However, do not make the following silence targets: an unanswered Advisor request, an undelivered Reviewer result, or a warning just before a plateau.
When monitoring a long-running command, use the Monitor tool rather than polling (periodically reading the tail of a file with Read). Monitor delivers each stdout line of a background process to the Lead as an incremental notification, so you can grasp the situation with lower latency and lower token consumption than polling.
Application examples:
go test ./... -vgh run watchnpm run build --watch / vite build --watchcodex-companion.sh status <job-id>docker-compose logs -f / kubectl logs -fCriteria for choosing:
| Target | Use Monitor? | Reason |
|---|---|---|
| Completion monitoring of an Agent (Worker / Reviewer) | No | the Agent layer notifies completion itself |
A shell process thrown with run_in_background: true | Recommended | each stdout line can be picked up via incremental notification |
A short one-shot command (running go test once) | No | a normal Bash tool execution is enough |
| Long-running tail / watch / stream commands | Recommended | more efficient than polling |
Typical pattern in the Breezing Lead:
Lead:
Task(Worker1, ...) ← waiting for Agent completion (Monitor not needed)
Task(Worker2, ...) ← same
Bash(run_in_background, "gh run watch --exit-status")
Monitor(tailCommand="...") ← detect CI failure immediately → instruct the Worker to fix
This lets the Lead speed up its "Worker done → detect CI failure → instruct fix" reaction.
Even in Breezing mode, review follows the unified policy of Codex exec first → internal Reviewer fallback.
For details see the "Review Loop" section of harness-work.
worker-report.v1 (self_review 5 items) to the Leadself_review[].verified and evidence. If even one is verified:false or evidence:"", it does not spawn the Reviewer and auto-sends back to the Worker (up to 2 times within the same session, escalate on the 3rd)MAX_REVIEWS times. MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3)cc:完了 [{hash}]After all tasks are complete, the Lead generates a rich completion report with the following steps:
git log --oneline {base_ref}..HEADgit diff --stat {base_ref}..HEADcc:TODO / cc:WIP tasks from Plans.mdharness-workThe generator is the Lead, not the Worker or a hook. The Lead reads git + Plans.md in Phase C and generates it.
Before running all tasks, confirm the plan's soundness with the following 3 questions.
All are skipped when --no-discuss is specified.
Q1. Scope check:
"I will run {{N}} tasks. Is the scope appropriate?"
When there are too many, propose narrowing by priority (Required > Recommended > Optional).
Q2. Dependency check (only when Plans.md has a Depends column):
"Task {{X}} depends on {{Y}}. Is the execution order correct?"
Read the Depends column and show the dependency chain. Error on a circular dependency.
Q3. Risk flag (only when there is a [needs-spike] task):
"Task {{Z}} is [needs-spike]. Spike it first?"
When there is an incomplete-spike [needs-spike] task, confirm whether to run the spike first.
If all 3 questions are fine, proceed to Phase A (designed to finish in 30 seconds total).
Auto-inject the Reviewer's universal gotchas accumulated within the same /breezing launch at the top of the next Worker's briefing. Valid only within the same session (discarded at session end; not written to session-memory).
# Initialize the Lead process's in-memory array at the start of Phase A
universal_violations = [] # List[str] — accumulated within this session
# Just before spawning a Worker in Phase B, inject at the top of the briefing:
def build_worker_briefing(task, contract_path):
header = ""
if universal_violations:
header = (
"🚨 universal violations already detected in this session (do not recur):\n"
+ "\n".join(f"- {v}" for v in universal_violations)
+ "\n\n"
)
return header + f"Task: {task.content}\nDoD: {task.DoD}\ncontract_path: {contract_path}\nmode: breezing"
# After the Reviewer returns review-result.v1, the Lead extracts only scope="universal" and accumulates:
for update in reviewer_result.memory_updates:
# Backward compat: a string is treated as task-specific → ignore
if isinstance(update, str):
continue
if update.get("scope") == "universal":
universal_violations.append(update["text"])
Policy: to avoid over-engineering, do not persist to session-memory or decisions.md. Just keep it in the Lead process's in-memory array and discard it at the end of the /breezing session (the policy of issue #87's body).
When Plans.md has a Depends column (v2 format), run tasks according to the dependency graph:
- first. If there are multiple independent tasks, parallel spawn is possibleNote: each task's "Worker done → review → cherry-pick" is sequential. Only the Worker-spawn part of independent tasks (Depends is
-) can be parallelized.
On Codex, use native subagents.
The representative control surface is spawn_agent, wait, send_input, resume_agent, close_agent.
Claude Code vs Codex communication APIs (SSOT: the API mapping table in
team-composition.md):
- Claude Code: instruct the Worker to fix with
SendMessage(to: agentId, message: "...")- Codex: resume the Worker with
resume_agent(agent_id)→ send instructions withsend_input(agent_id, "...")The harness-work pseudo-code is written in Claude Code syntax. In a Codex environment, read it as the above.
harness-work — from a single task to team execution (the body)harness-sync — progress syncharness-review — code review (auto-launched within breezing)npx claudepluginhub globalnail/claude-code-harnessCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.