| name | orchestration-benchmark |
| description | Run the pre-registered solo-vs-coordinated A/B benchmark: three arms (solo session, current orchestration, delegation-only sweep) over the same task matrix at matched verification rigor, measuring dollar cost, token band shift, quality, rework, and wall-clock. Use when the user asks "is orchestration worth it", "benchmark the pipeline against a solo run", "measure delegation value", "orchestration benchmark", or wants the crossover threshold below which a solo session beats delegation. |
| argument-hint | [--task-class <trivial|standard|complex>] [--runs <n>] [--dry-run] |
| user-invocable | true |
| allowed-tools | Read, Grep, Glob, Write, Bash(python3 *, jq *, date *, mkdir *, ls *, tail *, cat *,
command -v claude) |
Orchestration Benchmark (#1095)
Role: orchestrator. This command dispatches benchmark runs and aggregates
their results — it never performs the benchmark tasks itself and never edits
the code under test.
You have been invoked with the /orchestration-benchmark command.
Not /benchmark. /benchmark measures runtime performance of web
pages (Core Web Vitals, resource sizes, load times). This skill measures
orchestration value: whether the dev-team pipeline's delegation earns
its overhead against a solo session on the same task at the same rigor.
Different subject, different instruments, different report.
Orchestrator constraints
- Matched rigor is non-negotiable. Every arm runs the identical task
with identical acceptance checks. An arm may not skip or weaken
verification — a cheap worker that reads less and passes weaker checks is
a different product, not a cheaper version of the same one. A run that
weakened its checks is a rigor violation: discard it, do not average it in.
- The protocol is pre-registered. The decision rule below is fixed
before the first run. Do not adjust thresholds, arms, or the task matrix
after seeing results — report against the rule as written.
- Never report a single run. Report median + spread per arm per task
class. A difference smaller than the spread is a null result.
- Write results to files. Per-run records and the final report go to
files; present only the summary tables and verdict in chat.
- Be concise. Tables and short sentences; no narration of each run.
Parse Arguments
Arguments: $ARGUMENTS
--task-class <trivial|standard|complex>: Run only one task-matrix class
(bucket names from knowledge/task-size-classifier.md). Default: all three.
--runs <n>: Runs per arm per task class (default: 5). Fewer than 5 makes
the result exploratory, not decidable — say so in the report and do not
apply the decision rule to it.
--dry-run: Print the run plan — interleaved schedule, selected fixtures,
each arm's agents' declared model:/effort: frontmatter, and a cost
estimate — without dispatching anything.
Arms (3, matched rigor)
| Arm | Configuration |
|---|
| A — Solo | Single session, no subagent dispatch; the session model does all reading and all work itself. |
| B — Current orchestration | The dev-team pipeline exactly as shipped. |
| C — Delegation-only sweep | Arm B plus the #1093 sweep rule: the orchestrator never reads beyond classification-sized probes; all bulk reading goes to low-band workers with scoped briefs per the #1092 batching rules. |
All three arms run the identical task with identical acceptance checks (the
fixture's eval assertions). See constraint 1: unequal rigor invalidates the
run.
Task matrix
Sample across the knowledge/task-size-classifier.md buckets
(trivial | standard | complex) — one task class per bucket:
| Class | Bucket | Example | Expectation |
|---|
| Small single-file | trivial | One-file bug fix from an eval fixture | Expected worst case for delegation |
| Medium few-file | standard | Feature slice touching 3–5 files | Near the predicted crossover |
| Large sweep-heavy | complex | /code-review over a 20+ file diff; repo-wide audit | Expected best case for delegation |
Reuse existing /agent-eval fixtures under evals/fixtures/ wherever
possible; add fixtures only where a class has none.
Repetitions and isolation
- ≥5 runs per arm per task class (see
--runs). Report median + spread
(min/max or IQR) — never a single run. A difference smaller than the spread
is a null result.
- Isolation via
/headless-run (skills/headless-run/SKILL.md): each run
dispatches through
skills/headless-run/scripts/isolated_dispatch.py — fresh session id,
clean HOME and config dir, scrubbed env — so runs are independent and no
parent-session identity or state carries over.
- Cache parity: interleave arm order — A, B, C, A, B, C, … Never batch
all runs of one arm together; batching gives later arms warmer caches.
- Model pinning: record the exact model ID(s) per run. All arms dispatch
the same agents, each resolved by the harness from its own
model:/
effort: frontmatter (ADR 0026) — record that frontmatter before the
first run and include it in the report. If any dispatched agent's
frontmatter changes mid-experiment, abort and restart; do not mix runs
across frontmatter versions.
Metrics (instrument named per metric)
| Metric | Instrument |
|---|
| Dollar cost & tokens by model/thread | python3 ${CLAUDE_PLUGIN_ROOT}/hooks/lib/cost_meter.py report --transcript <path> |
| Tokens moved to low band (mechanism check) | The cost meter's by_model / by_thread split from the same report |
| Quality | The fixture's eval assertions — identical across arms |
| Rework | Fix-loop iterations; .claude/metrics/review-value.jsonl where review checkpoints ran |
| Wall-clock | Harness transcript timestamps |
Mechanism check (mandatory)
Arm C's cost reduction must be produced by the claimed mechanism. If Arm C's
cost drops but reading tokens did not shift to low-band subagent threads
(the cost meter's by_model/by_thread split shows the movement), treat the
result as a rigor violation, not a win — the savings came from reading
less, not from delegating the reading.
Decision rule (pre-registered — fixed before the first run)
Apply per task class:
- Adopt C over B only if all three hold:
- median cost reduction ≥ 25%;
- no quality regression — every run passes the fixture's acceptance
checks;
- the mechanism check passes.
- Retain B over A only if B beats A on cost or quality. If A
dominates B on a class, report it — that finding feeds
/harness-audit — do not suppress it.
- Crossover output: report the task-size threshold below which A/B
beats C. That number feeds the #1093 sweep rule.
Threats to validity
Each of these must be explicitly addressed in the report — not silently
skipped:
- Unmatched rigor — an arm passed weaker checks; the comparison is void.
- Fixed-overhead asymmetry — orchestration pays a constant dispatch tax
that dominates small tasks and vanishes on large ones.
- Cache warmth — runs batched by arm give later arms warmer caches;
interleaving (above) is the control, state whether it held.
- Model drift — a dispatched agent's
model:/effort: frontmatter or an underlying model changed
mid-experiment; the abort/restart rule (above) is the control.
- Fixture overfitting — the crossover threshold generalizes only as far
as the task matrix; say so wherever the threshold is quoted.
Report
Write the report to .dev-team-reports/orchestration-benchmark-<date>.md.
For the header block and closing Provenance section, follow
knowledge/report-template.md; the sections below are this skill's own
body.
Body sections, in order:
- Per-class results — one table per task class: median + spread per arm
for each metric (cost, tokens by band, quality pass rate, rework,
wall-clock).
- Crossover threshold — the task-size threshold below which A/B beats
C, with the fixture-overfitting caveat attached.
- Decision-rule outcomes — per class: adopt/retain verdicts against the
pre-registered rule, including the mechanism-check result.
- Threats to validity — all five items above, each with how this run
addressed it.
- Run log — each dispatched agent's declared
model:/effort:
frontmatter, exact model IDs per run, interleaved schedule as executed,
discarded runs and why.
Relationship to other tooling
/benchmark is runtime-performance-only (web pages); this skill
measures orchestration value. They share nothing but the name shape.
/headless-run is the isolation mechanism for every dispatched run;
/agent-eval fixtures supply the tasks and acceptance checks;
/cost-report and hooks/lib/cost_meter.py are the cost instruments;
each agent's model:/effort: frontmatter is the model-pinning source of
truth (ADR 0026); /harness-audit consumes any "A dominates B" finding.
- Instrumentation flip belongs to the run, not to this skill. After the
first full documented protocol run (#1099), the instrumentation list in
plugins/dev-team/CLAUDE.md moves "efficiency gains" from Not yet to
Instrumented, naming this skill as the instrument. Shipping this skill
does not perform that flip.