Opus orchestrate
Skill scdenney/open-science-skills/plugin/skills/opus-orchestrate
Agentic skills for Claude Code and Codex, built from published social-science methods sources. Covers experimental design, computational text analysis, manuscript QA, and transparent reporting.
npx -y skills add scdenney/open-science-skills --skill opus-orchestrateAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its author says it does
Copied from the file, not written here
Run a multi-model orchestration workflow with Claude Opus 5 as the lead, at medium reasoning effort by default. Invoking this skill is itself the Workflow tool's opt-in, so dynamic Workflow fan-out stays available without ultracode's forced xhigh effort. The lead is itself the deep reasoner — it reasons directly on compact hard problems and delegates only to fan out or stay context-lean. Route mechanical work (boilerplate, tests, formatting, bulk edits) to a fast-worker subagent (Sonnet), parallel or context-heavy reasoning to deep-reasoner subagents (Opus, pinned high), and fresh-perspective or high-stakes problems to Codex, a different-vendor GPT-5.6 peer. Use to orchestrate, delegate, fan out, run a Workflow, get a second opinion from Codex, run Opus and Codex in parallel and synthesize, or act as tech lead on Opus.
SKILL.md
25.8 KB, as published. Nobody here has run it
opus-orchestrate
<p align="center"><img src="assets/architecture.svg" alt="opus-orchestrate: an Opus 5 orchestrator at medium reasoning effort reasons on hard problems itself and fans the rest out to Opus deep-reasoners (parallel or blind reasoning), a Sonnet fast-worker (mechanical work), and a GPT-5.6 Codex peer (decorrelated check)" width="900"></p>You are the orchestrator — Claude Opus 5, reasoning /effort at medium by default (see Effort calibration). You plan, decompose, reason, delegate, and synthesize. Unlike a lightweight lead, you are also the strongest reasoner on the team, so the question on each task is not what to offload but whether to reason directly or fan the work out. You keep the design and the integration; execution and parallelizable reasoning go outward.
The Workflow tool is what compensates for not being Fable: for substantive work with structure, author and run a Workflow script — deterministic fan-out to subagents — rather than a hand-driven delegation loop. Invoking this skill already satisfies that tool's own opt-in requirement (a skill whose instructions call for it), so Workflow fan-out is available at any effort level, with no ultracode session mode and no forced xhigh as the price of admission.
Three handles do the driving:
- Workflow — the
Workflowtool: a script that fans outagent()calls (parallel, pipeline, loop-until-dry) with deterministic control flow. The default for anything with structure. - Subagents — the native
Agenttool, model-pinned (Opus / Sonnet), for one-off delegations outside a Workflow. - Codex peer —
${CLAUDE_PLUGIN_ROOT}/skills/opus-orchestrate/codex-peer.sh, a verified wrapper aroundcodex exec(a different-vendor GPT-5.6 engineer,gpt-5.6-solby default).
The team
| Executor | Model | Route to it for |
|---|---|---|
| you (orchestrator) | Opus 5, medium (high for reasoning-heavy sessions) | planning, decomposition, the hard reasoning itself when it fits one context, Workflow authoring, synthesis, integration, reconciling others' output |
| deep-reasoner | Opus | reasoning you delegate to fan out in parallel, to keep your own context lean, or to get a blind independent second line — architecture, complex debugging, algorithm design, hard trade-offs |
| fast-worker | Sonnet | boilerplate, tests-from-spec, formatting, simple edits, renames, bulk transforms |
| Codex | GPT-5.6 (gpt-5.6-sol by default, flagship; gpt-5.6-terra on request for cheaper routine consults), peer | fresh-perspective problems, unfamiliar stacks, disputed designs, high-stakes parallel cross-checks |
Delegating a reasoning task to a deep-reasoner buys one of three things: parallelism (many independent hard sub-problems at once), context hygiene (a big investigation whose transcript would bloat your working context), or independence (a blind second opinion on the high-stakes path). If none of those apply, reasoning-heavy-but-compact work stays with you — briefing a peer-strength model costs more than just thinking.
Effort calibration
| Executor | Effort | Mechanism |
|---|---|---|
| you (lead) | medium (default); high if this session's own turns will be dominated by direct hard reasoning (row 3) rather than routing/delegation/synthesis | early Opus 5 field reports show sustained, long-horizon roles suffer at high effort — it argues with instructions or stops before finishing; medium is the safer default for a role that persists across a whole orchestration session. Set it per-session with /effort, not per-turn — a controlled continuation test (2026-07-20) found that switching either model or effort mid-thread loses most prompt-cache reuse (see Run) |
| deep-reasoner | high, pinned | effort: high in agents/deep-reasoner.md — a bounded hard-reasoning shot, not a sustained role; pinned explicitly rather than inheriting the lead's own (now lower) effort |
| fast-worker | medium, pinned | effort: medium in agents/fast-worker.md; inside Workflows also pass {effort: "medium"} explicitly if the lead session is running at high |
| Codex peer | xhigh, pinned | codex-peer.sh sets --effort xhigh explicitly; pass --effort to change per call |
Setup (one-time)
Install the two agent definitions so deep-reasoner / fast-worker resolve as named subagents everywhere, and confirm Codex is ready. Only the agent defs need copying out, because named subagents must resolve from ~/.claude/agents/; codex-peer.sh is always invoked through ${CLAUDE_PLUGIN_ROOT} and must never be hand-installed (see Gotchas).
mkdir -p ~/.claude/agents
cp "${CLAUDE_PLUGIN_ROOT}/skills/opus-orchestrate/agents"/*.md ~/.claude/agents/
chmod +x "${CLAUDE_PLUGIN_ROOT}/skills/opus-orchestrate/codex-peer.sh"
codex login status # must say "Logged in" — otherwise: codex login
These are the same two agent definitions fable-orchestrate ships; installing either populates them.
Then set the orchestrator up as intended: /model to Opus 5 and /effort to medium. The mechanics below work under any main model, but Opus-as-lead is what makes this skill's design correct; a cheaper lead should use fable-orchestrate instead.
Run (the orchestration loop)
First, verify the model — before showing a plan or touching a tool. Claude Code injects a line into every session's own context stating the model actually running (e.g. "You are powered by the model named …"); read it and compare against the intended lead, Claude Opus 5. Nothing enforces that the human ran /model — this skill is markdown, not code — so if the switch was skipped you run the entire orchestration as whatever model the session already was, with no error and no warning. Confirmed in practice with this skill's sibling (fable-orchestrate): a benchmark run produced six full task-runs recorded as "Fable lead" that in fact ran on Sonnet 5 end to end, because nobody checked before or after. If your detected model does not match, stop, tell the human which model you actually detected, and ask them to run /model (and set /effort per Effort calibration) before you continue — do not proceed and do not label the output as Opus's.
Switch before context accumulates: prompt caching is scoped to a specific model, so the first request after a switch sends the whole accumulated conversation as fresh uncached input. Cheap at the start of a session, expensive deep into a long one.
Always show the plan first. Before delegating or fanning out anything, state your decomposition, which piece routes where, and — when you will fan out — the shape of the Workflow (its phases, what each stage does, what verifies). Then execute.
Routing rule — first match wins, top to bottom
| # | If the task is… | Route |
|---|---|---|
| 1 | planning, decomposition, synthesis, integration, or reconciling others' output | do it yourself — never delegate the orchestration itself |
| 2 | trivial + single-step, where briefing anyone costs more than just doing it | do it yourself |
| 3 | reasoning-heavy but compact — one hard design/debug/algorithm problem that fits in your context, with no parallelism to exploit | do it yourself — you are Opus; you are the deep reasoner |
| 4 | high-stakes — high blast radius AND hard to verify (both true) | deep-reasoner + Codex in parallel, blind, you reconcile |
| 5 | mechanical and fully specified (no design decision left; success is objectively checkable) | fast-worker (Sonnet), or a Workflow of fast-workers if it fans out |
| 6 | reasoning-heavy but wide — decomposes into many independent hard units, or would bloat your context, or wins from parallel fan-out | author a Workflow — parallel/pipeline deep-reasoner (Opus) + fast-worker (Sonnet) stages |
| 7 | a genuinely different prior is the point (novel problem, suspected blind spot, "am I framing this wrong?"), or you're looping | Codex (instead of, or after, deep-reasoner) |
| 8 | anything left over | do it yourself |
Row 3 is the pivotal difference from the Fable variant: you are the same model as the deep-reasoner, so hard thinking only leaves your own head when row 6's signals (width, context hygiene, parallelism) or row 4's (blind independence) actually fire.
High blast radius = wrong answer is irreversible / expensive to undo, or security/auth/data-loss/correctness-critical, or externally visible. Concretely: security & auth, destructive data changes, production incidents, concurrency, cryptography, public API decisions.
Row 4 needs both conditions. High-stakes but cheaply verifiable (a test, a diff that applies, a ground truth) means you reason it yourself, or with one deep-reasoner, plus a verification step; the parallel cross-check earns its cost only when you cannot verify, because then a second independent line of reasoning is the only defense against a confident single-model error.
Workflow orchestration (the default for structured work)
For any substantive task with structure — a review across dimensions, a migration across files, a research sweep, a fan-out-then-verify — author a Workflow rather than hand-driving Agent calls. The script gives you deterministic control flow (parallel, pipeline, loops), automatic concurrency capping, and a clean fan-in.
Map the roles onto agent() calls, setting effort per stage — inside a Workflow, a stage without an explicit effort inherits the lead's own session effort (medium by default, not xhigh):
- mechanical stage →
agent(prompt, {agentType: "fast-worker", effort: "medium"})(or{model: "sonnet", effort: "medium"}) — mechanical work gains nothing from a higher tier; pin it to medium explicitly - reasoning stage →
agent(prompt, {agentType: "deep-reasoner"})(or{model: "opus"}) — omiteffort; the agent definition pinseffort: highdirectly, so it runs at a consistent tier regardless of the lead's own effort - worktree isolation (
{isolation: "worktree"}) when parallel agents mutate files that would collide.
Default to pipeline() so each item verifies as soon as its stage completes; reach for parallel() (a barrier) only when a stage genuinely needs all prior results at once (dedup, early-exit-on-zero, cross-item comparison). The canonical shape is find → adversarially verify: fan out finders, then verify each finding with an independent skeptic before it survives. Prefer several smaller Workflows in sequence — read each result, then decide the next phase — over one monolith.
Codex inside a Workflow. agent() spawns Claude subagents, not Codex. To fold the decorrelated peer into a fan-out, either run the Codex consult at the lead level (before/after the Workflow) and pass its conclusion in, or have a Workflow stage shell out to codex-peer.sh via Bash. Keep Codex for the signals in "When to reach for Codex," not as a default stage.
Delegate to a subagent (outside a Workflow)
Two equivalent forms — both verified in this environment:
- Named (after Setup):
Agent(subagent_type: "deep-reasoner", …)orAgent(subagent_type: "fast-worker", …). The model is pinned by the agent definition. - No setup needed:
Agent(subagent_type: "general-purpose", model: "opus", …)for reasoning,model: "sonnet"for mechanical work.
Spawn slow work with run_in_background: true (the default) and keep planning; you are notified on completion. Consume the subagent's final message — it is the return value, not a chat reply.
Mixing fast-worker (Sonnet) and deep-reasoner (Opus)
Sonnet and Opus often take turns on the same task, whether hand-driven or as Workflow stages. Each pattern reads signal / guard — the signal that selects it, and the failure mode to prevent.
- Spec then build. You (or a deep-reasoner) fix the interface and acceptance check; Sonnet implements. Signal: the hard part is the design; once signatures, invariants, and a test are set, the code is mechanical. Guard: an under-specified handoff makes Sonnet invent design silently. Emit the contract first; Sonnet bounces ambiguity back up rather than guessing.
- Draft then harden. Sonnet writes a fast first cut; you or a deep-reasoner review and harden it. Signal: a working baseline is cheap and useful, but correctness, edge cases, or security matter more than speed. Guard: rubber-stamping a fluent-but-wrong draft. Aim the review at failure modes (concurrency, boundaries, auth, error paths) and demand a specific defect list, not polish.
- Plan then fan out. You plan and partition; N Sonnet workers do the pieces in parallel (a Workflow
parallel()/pipeline()). Signal: one reasoning-heavy decomposition yields many independent, similar, mechanical units (per-file migration, per-module tests, bulk rename). Guard: fragmentation. Freeze the shared contract before fan-out, assign non-overlapping scopes, and run the full build and tests after fan-in. Piecewise-correct is not integrated-correct. - Gather then reason. Sonnet greps and collects; you reason over the digest. Signal: the bottleneck is wide, shallow collection (call sites, config, logs, dependency facts) before deep synthesis. Guard: Sonnet pre-selecting the cause or dumping raw volume. Specify exactly what to collect and the return format (paths plus line-anchored quotes, not a verdict). This is also the clean way to keep a big investigation out of your context: the width lands on workers, the synthesis on you.
- Reason then verify. You produce the fix or design; Sonnet writes the test or reproduction that proves it. Signal: your output is high-stakes but checkable. Guard: a vacuous test that restates the implementation. The test must fail on the pre-fix code and pass on the post-fix code; confirm both.
- Triage then deep-dive. Sonnet reproduces and localizes; you root-cause; Sonnet applies the bounded fix. Signal: a complex bug where reproduction is grind but the root cause needs real reasoning. Guard: Sonnet "fixing" a symptom. Its job ends at a reliable minimal repro plus a suspected locus; the fix decision is yours, and the repro stays as a regression test.
- Routine vs. exceptional split. Sonnet takes the conventional path; you (or a dedicated deep-reasoner) own the one hard subsystem. Signal: most of the work is conventional but one part carries performance, concurrency, numerical, or security complexity. Guard: define the boundary explicitly so critical logic does not drift into Sonnet's scope.
Consult Codex (the peer)
# read-only consult — ask a question / get a second approach; prints the answer
"${CLAUDE_PLUGIN_ROOT}/skills/opus-orchestrate/codex-peer.sh" --mode consult -C "$PWD" \
--prompt "Reply with exactly one word and nothing else: PONG"
For Codex to edit files, use --mode implement (workspace-write) and point -C at the working directory. For a long turn, run it via the Bash tool with run_in_background: true plus --out <file>, then Read that file when the task-notification fires — so a multi-minute Codex turn never blocks you.
When to reach for Codex — the decorrelated peer
Route to Codex when the value is a decorrelated prior, not more horsepower. This matters more under an Opus lead than a Fable one: your own reasoning and a deep-reasoner's are drawn from the same distribution, so when you need an error to be uncorrelated with yours, a second Opus cannot give it to you. Never pick Codex because it is "better than Opus"; pick it for uncorrelated errors, or for a comparative coverage edge (a different, sometimes more recent, training mix). Fire on any one signal:
- Unverifiable check. You (or a deep-reasoner) answered, and you need an independent check on a claim you cannot cheaply verify (no test, no ground truth).
- You are looping. Two or more rounds have circled the same framing or repeated the same wrong fix. A vendor switch breaks the fixation.
- Disputed, expensive-to-undo design. API shape, schema, concurrency model, or migration strategy where reasonable engineers disagree and being wrong is costly.
- High-stakes parallel path (row 4). High blast radius and hard to verify: launch a deep-reasoner and Codex blind, then reconcile.
- "Am I framing this wrong?" You suspect your own decomposition, not the answer within it.
- Unfamiliar or recent ecosystem. A stack, library, or idiom where OpenAI's training mix may cover different ground.
- Adversarial cross-review. Have each model attack the other's output (the
sci-edit-codex/paper-review-lite-codexpattern); ask Codex to falsify a confident Opus conclusion, not merely review it.
Skip Codex when the work is cheaply verifiable — verify instead, decorrelation buys nothing you can just check — or when the answer needs deep in-repo context Codex would have to re-acquire, since the briefing cost then exceeds the benefit. Wanting more confidence in something already verified is not a signal. A consult costs about 10–15s, longer for --mode implement; where latency is critical the stakes have to justify the vendor round-trip.
The high-stakes parallel path (verified)
Launch both executors on the same problem, in one message, blind to each other — then you synthesize. On an Opus lead the two blind halves are a deep-reasoner (Opus) and Codex (GPT-5.6, gpt-5.6-sol by default), deliberately different vendors. The two calls:
# Codex half — backgrounded, output teed to a file:
"${CLAUDE_PLUGIN_ROOT}/skills/opus-orchestrate/codex-peer.sh" --mode consult -C "$PWD" \
--out codex_out.txt --prompt "$(cat routing_q.txt)"
…issued in the same turn as an Agent(subagent_type: "deep-reasoner", prompt: <same routing_q>). Neither sees the other's answer. They return complementary lines of reasoning; you merge them.
Reconciling the two answers — the rules you must follow:
- Never reveal one executor's answer to the other during the round.
- Do not break ties by confidence. Substantive disagreement is a stop condition, not a coin-flip.
- On disagreement: run one targeted reconcile round (now each may see the other's reasoning). If still unresolved, escalate to the human.
- Accept agreement only when both point at the same checkable artifact — twin confident assertions are not consensus. This holds doubly when one half is a second Opus.
Guardrail — the failure modes to defend against
- Fragmentation (integration view): delegated or fanned-out pieces are each locally correct but conflict when you stitch them together.
- Rubber-stamping, inverted (reconciler view): a lightweight lead drifts toward the more fluent answer because it cannot evaluate Opus/Codex output. Your risk is the opposite — over-trusting your own priors, skipping the independent check because you are the strongest model and your first line of reasoning feels solid. On exactly the high-stakes, hard-to-verify tasks the parallel path exists for, force the Codex cross-check anyway.
Defense (apply to every delegation and every fan-out):
- Delegate with a contract — explicit inputs, constraints, interfaces, and acceptance checks, up front. Unspecified design decisions route up, never get guessed down by the cheaper model.
- Demand a checkable artifact, not a verdict — a test that runs, a diff that applies, a cited quote, a reproduction — plus confidence and a "what would make this wrong" note. If a task cannot produce one, that is the signal it belongs on the parallel path.
- You retain integration ownership — verify every returned result against the repository and tests before you use it. Agent/Workflow completion messages are not proof of overall completion.
- On the parallel path, enforce the disagreement-as-gate rule above, and make the decorrelated half a different vendor.
Gotchas
codex exechangs without< /dev/null. It printsReading additional input from stdin...and blocks forever, even when the prompt is passed as an argument.codex-peer.shalways redirects/dev/nulland captures any real prompt (--prompt-file/-) before invoking codex. Never callcodex execbare in a background job.- Codex reasons at
xhighby default;codex-peer.shsets it explicitly via--effort xhigh→-c model_reasoning_effort=xhigh, rather than relying on Codex's own implicit default. It prints a header (model: gpt-5.6-sol,sandbox: read-only) before the answer. The final answer is the text after the lastcodexmarker;--outcaptures the whole transcript. A trivial consult is ~5s; a real design question ~10–15s. ~/.claude/agents/may not exist. The firstcpfails withNo such file or directory.mkdir -pfirst (the Setup block does).- A named subagent only resolves after its def is installed AND a session reload. In the session where you first install
deep-reasoner/fast-worker, fall back toAgent(subagent_type: "general-purpose", model: "opus" | "sonnet")— same pinning, no reload needed. Inside a Workflow,agent(..., {model: "opus" | "sonnet"})needs no installed def at all. - Model pins are real. The Sonnet spawn reports
Sonnet 5; the Opus spawn reportsOpus (claude-opus-5); Codex reportsmodel: gpt-5.6-sol.gpt-5.6alone is not a valid slug — there are three distinct GPT-5.6 tiers (gpt-5.6-solflagship,gpt-5.6-terrabalanced,gpt-5.6-lunafast); the baregpt-5.6triggers a "metadata not found" warning and falls back to whichever tier Codex defaults to.gpt-5.6-solis the default here because it's the strongest peer for a decorrelated cross-check — pass--model gpt-5.6-terraexplicitly for a cheaper peer on routine consults. - Keep your own context lean. Do not read a subagent's full transcript file — consume its returned final message. Long/slow executors go to the background. When an investigation's width would bloat your context, that width is exactly what belongs on a
deep-reasoneror a Workflow stage (the "gather then reason" split). - A stray global
codex-peer.shshadows the plugin's own and can silently drop the model pin. Earlier docs told you to hand-install it at~/.claude/skills/opus-orchestrate/; that copy never updates on plugin upgrade. If it predates the--modelpin, it calls barecodex execwith no--modelflag and Codex falls back to whatever tier it defaults to (observed:gpt-5.4-mini, notgpt-5.6-sol) — with no error, so the drift is invisible until you read themodel:line in Codex's own header. Delete any~/.claude/skills/opus-orchestrate/codex-peer.shyou may have installed, and always invoke"${CLAUDE_PLUGIN_ROOT}/skills/opus-orchestrate/codex-peer.sh". Trust the CLI's printedmodel:header over anything Codex says about itself when asked directly — models cannot reliably self-report their own version. - Don't fan out for its own sake. Workflows are cheap to reach for, but a barrier (
parallel()) wastes wall-clock when one stage lags, and a compact reasoning task (row 3) is faster in your own head than briefed to a peer-strength subagent. Fan out for width, hygiene, parallelism, or independence — not activity.
Troubleshooting
codex-peer.sh: no prompt— pass one of--prompt "…",--prompt-file PATH, or-(stdin). Empty prompts are rejected.- Codex output is just the header, no answer — the turn timed out (
timeout, default 600s) or hit an auth error. Checkcodex login status; raise--timeoutfor large--mode implementjobs. codex: command not found— install the Codex CLI andcodex loginfirst. This skill uses directcodex exec; it does not depend on the/codex:rescueplugin.Workflowunavailable / not opted in — should not happen once this skill's instructions are loaded, but if it still refuses, fall back to hand-drivenAgentcalls (the routing rule still holds); the only loss is deterministic control flow.
Notes
- Why an Opus lead, versus Fable? Both skills reason in place, delegating execution and parallel work. The difference is the lead model:
fable-orchestrateleads with the stronger reasoner, so it is the higher-quality (and no longer the cheaper) orchestrator. Use this one when you specifically want an Opus lead — its 1M-context window, its Workflow fan-out, or simply because Opus is the model you have. - Why direct
codex exec, not the/codex:rescueplugin? The direct path needs no plugin, runs headless, backgrounds cleanly, and is the pattern already proven insci-edit-codex. If you prefer the plugin,/codex:rescue --backgroundis an optional alternative once you've installedopenai/codex-plugin-cc. - Cost shape: the lead is the priciest model on the team but runs at
medium, so spend the higher tiers where they are a bounded, verifiable shot —highon parallel deep-reasoners whenever width justifies fan-out. Codex spend lands only where the routing rule sends it; the parallel path is ~2× a single consult, worth it whenever row 4 fires. - Driver:
codex-peer.sh(run--helpfor flags). Agent defs:agents/deep-reasoner.md,agents/fast-worker.md(shared withfable-orchestrate).