Sub-agent dispatch reference
Source: metyatech/skill-sub-agent-dispatch.
To update this skill, edit the repository and push. The agent
MUST NOT edit the installed copy.
This skill contains reference data and detailed procedures for
dispatching sub-agents. The always-loaded invariants for sub-agent
dispatch (agents-mcp tooling, ai-quota, mode, decision framework,
verification deliverable format, cost discipline, execution
discipline, lifecycle) live in the sub-agent-dispatch rule
module. Spawning prompt requirements and delegated-agent
obligations live in the delegation rule module. Approval rules
live in the approval-gates rule module.
Dispatch workflow
- Receive the user's request.
- Decompose into discrete work items. Track them.
- Classify each item using the Decision framework defined in
the
sub-agent-dispatch rule.
- Dispatch all independent items in parallel.
- Report to the user: what was dispatched, what is pending.
Return control immediately.
- On every subsequent user message, the agent MUST call
Status(wait=false) first and report any state changes
before addressing the user's new request.
- When all sub-agents are done and review gates pass, the agent
MUST summarize results and proceed to next steps.
Cross-agent invocation (agents-mcp)
agents-mcp is the metyatech MCP server that works uniformly
from Claude Code, Codex, Gemini CLI, and other agent CLIs.
One-time setup
See README.md for platform-specific installation commands.
Dispatching a task
Use agents-mcp to spawn sub-agents with these parameters:
prompt — the full self-contained task description.
agent_type — target agent (claude, codex, copilot).
The agent MUST NOT use gemini (see Gemini section below).
model — explicit model string from the Model Inventory
(e.g., "claude-sonnet-4-6").
effort — optional reasoning effort. Set from the Model
Inventory; omit when not needed.
mode: 'edit' — REQUIRED for implementation agents.
Monitoring
After spawning agents, return to the user immediately. Use
background or non-blocking monitoring to be notified when agents
finish. agents-mcp wait and Status(wait=true) both poll until
completion or timeout.
If agents-mcp is not configured
Stop and report the limitation to the user. The agent MUST NOT
simulate or substitute the work itself.
Verification prompt templates
Implementation-agent template
Delegated mode. Implement approved scope only.
Return exactly: (1) Restated AC, (2) AC->evidence with exact commands/manual steps + PASS/FAIL/NOT RUN, (3) Files changed, (4) Assumptions/uncertainties, (5) Risks/rollback notes.
If spec/behavior text changed: cite file + section and summarize behavior delta.
Run applicable tests/verification and include exact commands and outputs summary.
Review-agent template
Delegated mode reviewer. Do not implement; review only.
Original requirements: [paste original AC/spec here]
Implementation output: [paste implementation agent's report here]
Note: tests were written by an agent and may confirm implementation behavior rather than spec intent.
Return: explicit PASS or FAIL, reasons, spec alignment (does the implementation meet the original requirements, not just the tests?), AC coverage gaps, and any ambiguous points.
Reject if evidence format is incomplete, outcomes are unsupported, or implementation deviates from original spec.
Spec-change protocol
- If behavior or spec text changes, the implementation agent MUST
cite where it changed (file + section heading) and MUST
summarize the behavior delta.
- The reviewer MUST explicitly confirm spec alignment and list
any ambiguous points requiring follow-up.
Reviewer model selection
- For Standard tier reviews when verification fails: use
claude-haiku-4-5-20251001.
- For Heavy tier reviews and release/production changes: use
claude-sonnet-4-6 with medium effort.
Error handling
- If a sub-agent fails, call
Status and treat
agents[].errors and agents[].diagnostics.tail_errors as the
primary failure reason.
- Open raw logs only when needed via
agents[].diagnostics.log_paths.stdout (e.g., tail the file).
Do not manually hunt logs.
Model inventory and routing
Last reviewed: 2026-02-27. Update this section when models
change.
Tier definitions
- Free — trivial lookups, simple Q&A, straightforward
single-file edits. Copilot only.
- Light — mechanical transforms, formatting, simple
implementations, quick clarifications.
- Standard — general implementation, code review, multi-file
changes, most development work.
- Heavy — architecture decisions, safety-critical code,
complex multi-step reasoning.
- Large Context — tasks requiring more than 200k token input.
- Bulk/Idle — automated compliance checks, repetitive
transforms across repos. Prefer lowest-cost agents.
Classify each task into a tier, then pick an agent with available
quota and select the ★ preferred model for that tier. Fall back
to other models in the same tier when the preferred model's
agent has no quota.
Claude
| Tier |
Model |
Effort |
Notes |
| Light |
claude-haiku-4-5-20251001 |
— |
Effort not supported; SWE-bench 73% |
| Standard |
claude-sonnet-4-6 |
medium |
★ Default; SWE-bench 80% |
| Heavy |
claude-opus-4-6 |
high |
SWE-bench 81%; max effort for hardest tasks |
Codex
| Tier |
Model |
Effort |
Notes |
| Light |
gpt-5.1-codex-mini |
medium |
medium/high only |
| Standard |
gpt-5.3-codex |
medium |
★ Latest flagship; SWE-bench Pro 57% |
| Standard |
gpt-5.2-codex |
medium |
Previous gen; SWE-bench Pro 56% |
| Standard |
gpt-5.2 |
medium |
General-purpose; best non-codex reasoning; SWE-bench 80% |
| Heavy |
gpt-5.3-codex |
xhigh |
★ Best codex at max effort |
| Heavy |
gpt-5.1-codex-max |
xhigh |
Extended reasoning; context compaction |
| Heavy |
gpt-5.2-codex |
xhigh |
Alternative |
| Heavy |
gpt-5.2 |
xhigh |
General reasoning fallback |
Gemini sub-agent reliability
⚠ The gemini agent type MUST NOT be used for sub-agent
delegation. Gemini CLI agents fail with HTTP 429 "No capacity
available" server errors too frequently to be reliable, even
for single unattended tasks. Gemini CLI MAY be used
interactively when invoked directly by the user. For
large-context work, use Copilot with the gemini-3-pro
model instead.
| Tier |
Model |
Effort |
Notes |
| Light |
gemini-3-flash-preview |
— |
SWE-bench 78% |
| Standard |
gemini-3-pro-preview |
— |
★ 1M token context; SWE-bench 76% (interactive only) |
| Large Context |
gemini-3-pro-preview |
— |
>200k token tasks; 1M context (interactive only) |
Aider (BYOK)
Aider uses external API keys. Cost is per-token from the
provider (no subscription). Best for bulk/idle tasks with cheap
API models.
| Tier |
Model |
Provider |
Notes |
| Bulk/Idle |
deepseek/deepseek-chat |
DeepSeek |
★ $0.07-$0.27/MTok input; SWE-bench 73% |
| Bulk/Idle |
deepseek/deepseek-reasoner |
DeepSeek |
$1.30/Aider task |
| Light |
claude-3-5-haiku-20241022 |
Anthropic |
Same as Claude Haiku |
| Standard |
claude-sonnet-4-6-20261022 |
Anthropic |
Same as Claude Sonnet |
Configure via DEEPSEEK_API_KEY or ANTHROPIC_API_KEY. Aider is
not yet integrated into agent-runner (tracked task).
Copilot
Copilot charges different quota per model. Prefer lower-multiplier
models when task complexity allows. Effort is not configurable
(ignored).
| Tier |
Model |
Quota |
Notes |
| Free |
gpt-5-mini |
0x |
★ SWE-bench ~70% |
| Free |
gpt-4.1 |
0x |
1M context; SWE-bench 55% |
| Light |
claude-haiku-4-5 |
0.33x |
★ SWE-bench 73% |
| Light |
gpt-5.1-codex-mini |
0.33x |
Mechanical transforms |
| Standard |
claude-sonnet-4-6 |
1x |
★ Default; SWE-bench 80% |
| Standard |
gpt-5.3-codex |
1x |
Latest codex flagship |
| Standard |
gpt-5.2 |
1x |
Best general reasoning |
| Standard |
gpt-5.2-codex |
1x |
Agentic coding |
| Standard |
gpt-5.1-codex-max |
1x |
Extended reasoning |
| Standard |
claude-sonnet-4-5 |
1x |
SWE-bench 77%; prefer 4.6 |
| Standard |
gpt-5.1-codex |
1x |
SWE-bench 77% |
| Standard |
gpt-5.1 |
1x |
General purpose; SWE-bench ~76% |
| Standard |
gemini-3-pro |
1x |
1M context; SWE-bench 76% |
| Standard |
claude-sonnet-4 |
1x |
Legacy; last choice |
| Heavy |
claude-opus-4-6 |
3x |
★ SWE-bench 81% |
| Heavy |
claude-opus-4-5 |
3x |
SWE-bench 81%; prefer 4.6 |
| — |
claude-opus-4-6 fast |
30x |
Avoid; excessive quota cost |
Routing principles
- Active sub-agent types are
claude, codex, copilot. The
gemini agent type MUST NOT be spawned (see Gemini section
above). All active agent types operate on independent
flat-rate subscriptions. Route by model quality, quota
conservation, and quota distribution.
- All agents can execute code, modify files, and perform
multi-step tasks. Route by model quality and quota, not by
execution capability.
- Spread work across agents to maximize total throughput.
- For large-context tasks (>200k tokens), prefer Copilot with
the
gemini-3-pro model. Do NOT use the gemini agent type.
- For trivial tasks, prefer Copilot free-tier models (0x quota)
before consuming other agents' quota.
- When multiple agents can handle a task equally well, prefer
the one with the most remaining quota.
Cost-efficiency priority
- Prefer flat-rate (subscription) agents over pay-per-token
agents when quota is available.
- Idle/bulk tasks MUST NOT consume premium quota. Route to:
Copilot 0x → Aider+DeepSeek → Amazon Q.
- Reserve premium quota for interactive use. Usage gates enforce
minimum 70% remaining for Claude and Codex 5-hour windows.
- Sonnet 4.6 is the workhorse. Default to Sonnet; escalate
to Opus for Heavy tier or when strict rule compliance failures
occur. Use
medium effort for both — research shows higher
effort degrades instruction-following on multi-constraint rule
sets (arXiv:2505.11423).
Quota fallback logic
If the primary agent has no remaining quota:
- Query quota for all agents via
ai-quota.
- Select any agent with available quota that has a model at
the required tier.
- For Copilot fallback, prefer lower-multiplier models to
conserve quota.
- For Standard tier with no subscription quota: fall back to
Aider + DeepSeek (pay-per-token, ~$1/task).
- If the fallback model is significantly less capable, note
the degradation in the dispatch report.
- If no agent has quota and no pay-per-token fallback is
available, queue the task and report the block immediately.
Do not drop silently.
Routing decision sequence
- Classify the task tier (Free / Light / Standard / Heavy /
Large Context / Bulk/Idle).
- For Free tier: dispatch to Copilot with a 0x model. Skip
quota check.
- For Bulk/Idle tier: dispatch to Copilot 0x → Aider+DeepSeek
→ Amazon Q (in that order). Skip premium agents and do not
use the Gemini agent type.
- For other tiers: check quota for all agents via
ai-quota.
- Pick the agent with available quota at the required tier;
prefer the agent with the most remaining quota when multiple
qualify.
- Set
agent_type, model, and effort from the tables above
(omit effort when column shows —).
- If primary choice has no quota: apply fallback logic.
- Include the chosen agent, model, tier, and effort in the
dispatch report.
Notable models (not in current routing)
These models are not yet accessible via supported agent CLIs but
are worth monitoring:
| Model |
Provider |
Strength |
Access |
| Kimi K2.5 |
Moonshot AI |
IFEval SOTA 94.0 |
API only; no CLI |
| Grok 4.20 |
xAI |
4-agent council; 2M context |
xAI API only |
| Qwen 3.5 |
Alibaba |
IFEval 92.6 |
API only |
| GLM-4.7 |
Zhipu AI |
Dual-judge highest score |
API only |
Platform-specific workarounds
- On platforms with policy-blocked file deletion commands (e.g.,
Codex on Windows), see the Codex-specific workarounds in the
command-execution rule module.
1---2name: sub-agent-dispatch3description: Reference data and procedures for dispatching sub-agents in parallel: model inventory tables, agents-mcp parameter details, verification prompt templates, routing decision sequence, quota fallback logic, and platform-specific workarounds. Use when actually dispatching sub-agents and you need the full model inventory or detailed procedures. Triggers on: 'dispatch', 'orchestrate', 'sub-agent', 'agents-mcp', 'model inventory', 'route'.4---5<!-- markdownlint-disable MD013 -->67# Sub-agent dispatch reference89> **Source:** [metyatech/skill-sub-agent-dispatch](https://github.com/metyatech/skill-sub-agent-dispatch).10> To update this skill, edit the repository and push. The agent11> MUST NOT edit the installed copy.1213This skill contains reference data and detailed procedures for14dispatching sub-agents. The always-loaded invariants for sub-agent15dispatch (agents-mcp tooling, ai-quota, mode, decision framework,16verification deliverable format, cost discipline, execution17discipline, lifecycle) live in the `sub-agent-dispatch` rule18module. Spawning prompt requirements and delegated-agent19obligations live in the `delegation` rule module. Approval rules20live in the `approval-gates` rule module.2122## Dispatch workflow23241. Receive the user's request.252. Decompose into discrete work items. Track them.263. Classify each item using the Decision framework defined in27 the `sub-agent-dispatch` rule.284. Dispatch all independent items in parallel.295. Report to the user: what was dispatched, what is pending.30 Return control immediately.316. On every subsequent user message, the agent MUST call32 `Status(wait=false)` first and report any state changes33 before addressing the user's new request.347. When all sub-agents are done and review gates pass, the agent35 MUST summarize results and proceed to next steps.3637## Cross-agent invocation (agents-mcp)3839`agents-mcp` is the metyatech MCP server that works uniformly40from Claude Code, Codex, Gemini CLI, and other agent CLIs.4142### One-time setup4344See README.md for platform-specific installation commands.4546### Dispatching a task4748Use agents-mcp to spawn sub-agents with these parameters:4950- `prompt` — the full self-contained task description.51- `agent_type` — target agent (`claude`, `codex`, `copilot`).52 The agent MUST NOT use `gemini` (see Gemini section below).53- `model` — explicit model string from the Model Inventory54 (e.g., `"claude-sonnet-4-6"`).55- `effort` — optional reasoning effort. Set from the Model56 Inventory; omit when not needed.57- `mode: 'edit'` — REQUIRED for implementation agents.5859### Monitoring6061After spawning agents, return to the user immediately. Use62background or non-blocking monitoring to be notified when agents63finish. `agents-mcp wait` and `Status(wait=true)` both poll until64completion or timeout.6566### If agents-mcp is not configured6768Stop and report the limitation to the user. The agent MUST NOT69simulate or substitute the work itself.7071## Verification prompt templates7273### Implementation-agent template7475```text76Delegated mode. Implement approved scope only.77Return exactly: (1) Restated AC, (2) AC->evidence with exact commands/manual steps + PASS/FAIL/NOT RUN, (3) Files changed, (4) Assumptions/uncertainties, (5) Risks/rollback notes.78If spec/behavior text changed: cite file + section and summarize behavior delta.79Run applicable tests/verification and include exact commands and outputs summary.80```8182### Review-agent template8384```text85Delegated mode reviewer. Do not implement; review only.86Original requirements: [paste original AC/spec here]87Implementation output: [paste implementation agent's report here]88Note: tests were written by an agent and may confirm implementation behavior rather than spec intent.89Return: explicit PASS or FAIL, reasons, spec alignment (does the implementation meet the original requirements, not just the tests?), AC coverage gaps, and any ambiguous points.90Reject if evidence format is incomplete, outcomes are unsupported, or implementation deviates from original spec.91```9293### Spec-change protocol9495- If behavior or spec text changes, the implementation agent MUST96 cite where it changed (file + section heading) and MUST97 summarize the behavior delta.98- The reviewer MUST explicitly confirm spec alignment and list99 any ambiguous points requiring follow-up.100101## Reviewer model selection102103- For Standard tier reviews when verification fails: use104 `claude-haiku-4-5-20251001`.105- For Heavy tier reviews and release/production changes: use106 `claude-sonnet-4-6` with `medium` effort.107108## Error handling109110- If a sub-agent fails, call `Status` and treat111 `agents[].errors` and `agents[].diagnostics.tail_errors` as the112 primary failure reason.113- Open raw logs only when needed via114 `agents[].diagnostics.log_paths.stdout` (e.g., tail the file).115 Do not manually hunt logs.116117## Model inventory and routing118119**Last reviewed: 2026-02-27.** Update this section when models120change.121122### Tier definitions123124- **Free** — trivial lookups, simple Q&A, straightforward125 single-file edits. Copilot only.126- **Light** — mechanical transforms, formatting, simple127 implementations, quick clarifications.128- **Standard** — general implementation, code review, multi-file129 changes, most development work.130- **Heavy** — architecture decisions, safety-critical code,131 complex multi-step reasoning.132- **Large Context** — tasks requiring more than 200k token input.133- **Bulk/Idle** — automated compliance checks, repetitive134 transforms across repos. Prefer lowest-cost agents.135136Classify each task into a tier, then pick an agent with available137quota and select the ★ preferred model for that tier. Fall back138to other models in the same tier when the preferred model's139agent has no quota.140141### Claude142143| Tier | Model | Effort | Notes |144| --- | --- | --- | --- |145| Light | claude-haiku-4-5-20251001 | — | Effort not supported; SWE-bench 73% |146| Standard | claude-sonnet-4-6 | medium | ★ Default; SWE-bench 80% |147| Heavy | claude-opus-4-6 | high | SWE-bench 81%; `max` effort for hardest tasks |148149### Codex150151| Tier | Model | Effort | Notes |152| --- | --- | --- | --- |153| Light | gpt-5.1-codex-mini | medium | `medium`/`high` only |154| Standard | gpt-5.3-codex | medium | ★ Latest flagship; SWE-bench Pro 57% |155| Standard | gpt-5.2-codex | medium | Previous gen; SWE-bench Pro 56% |156| Standard | gpt-5.2 | medium | General-purpose; best non-codex reasoning; SWE-bench 80% |157| Heavy | gpt-5.3-codex | xhigh | ★ Best codex at max effort |158| Heavy | gpt-5.1-codex-max | xhigh | Extended reasoning; context compaction |159| Heavy | gpt-5.2-codex | xhigh | Alternative |160| Heavy | gpt-5.2 | xhigh | General reasoning fallback |161162### Gemini sub-agent reliability163164> **⚠ The `gemini` agent type MUST NOT be used for sub-agent165> delegation.** Gemini CLI agents fail with HTTP 429 "No capacity166> available" server errors too frequently to be reliable, even167> for single unattended tasks. Gemini CLI MAY be used168> interactively when invoked directly by the user. For169> large-context work, use **Copilot with the `gemini-3-pro`170> model** instead.171172| Tier | Model | Effort | Notes |173| --- | --- | --- | --- |174| Light | gemini-3-flash-preview | — | SWE-bench 78% |175| Standard | gemini-3-pro-preview | — | ★ 1M token context; SWE-bench 76% (interactive only) |176| Large Context | gemini-3-pro-preview | — | >200k token tasks; 1M context (interactive only) |177178### Aider (BYOK)179180Aider uses external API keys. Cost is per-token from the181provider (no subscription). Best for bulk/idle tasks with cheap182API models.183184| Tier | Model | Provider | Notes |185| --- | --- | --- | --- |186| Bulk/Idle | deepseek/deepseek-chat | DeepSeek | ★ $0.07-$0.27/MTok input; SWE-bench 73% |187| Bulk/Idle | deepseek/deepseek-reasoner | DeepSeek | $1.30/Aider task |188| Light | claude-3-5-haiku-20241022 | Anthropic | Same as Claude Haiku |189| Standard | claude-sonnet-4-6-20261022 | Anthropic | Same as Claude Sonnet |190191Configure via `DEEPSEEK_API_KEY` or `ANTHROPIC_API_KEY`. Aider is192not yet integrated into agent-runner (tracked task).193194### Copilot195196Copilot charges different quota per model. Prefer lower-multiplier197models when task complexity allows. Effort is not configurable198(ignored).199200| Tier | Model | Quota | Notes |201| --- | --- | --- | --- |202| Free | gpt-5-mini | 0x | ★ SWE-bench ~70% |203| Free | gpt-4.1 | 0x | 1M context; SWE-bench 55% |204| Light | claude-haiku-4-5 | 0.33x | ★ SWE-bench 73% |205| Light | gpt-5.1-codex-mini | 0.33x | Mechanical transforms |206| Standard | claude-sonnet-4-6 | 1x | ★ Default; SWE-bench 80% |207| Standard | gpt-5.3-codex | 1x | Latest codex flagship |208| Standard | gpt-5.2 | 1x | Best general reasoning |209| Standard | gpt-5.2-codex | 1x | Agentic coding |210| Standard | gpt-5.1-codex-max | 1x | Extended reasoning |211| Standard | claude-sonnet-4-5 | 1x | SWE-bench 77%; prefer 4.6 |212| Standard | gpt-5.1-codex | 1x | SWE-bench 77% |213| Standard | gpt-5.1 | 1x | General purpose; SWE-bench ~76% |214| Standard | gemini-3-pro | 1x | 1M context; SWE-bench 76% |215| Standard | claude-sonnet-4 | 1x | Legacy; last choice |216| Heavy | claude-opus-4-6 | 3x | ★ SWE-bench 81% |217| Heavy | claude-opus-4-5 | 3x | SWE-bench 81%; prefer 4.6 |218| — | claude-opus-4-6 fast | 30x | Avoid; excessive quota cost |219220### Routing principles221222- Active sub-agent types are `claude`, `codex`, `copilot`. The223 `gemini` agent type MUST NOT be spawned (see Gemini section224 above). All active agent types operate on independent225 flat-rate subscriptions. Route by model quality, quota226 conservation, and quota distribution.227- All agents can execute code, modify files, and perform228 multi-step tasks. Route by model quality and quota, not by229 execution capability.230- Spread work across agents to maximize total throughput.231- For large-context tasks (>200k tokens), prefer Copilot with232 the `gemini-3-pro` model. Do NOT use the `gemini` agent type.233- For trivial tasks, prefer Copilot free-tier models (0x quota)234 before consuming other agents' quota.235- When multiple agents can handle a task equally well, prefer236 the one with the most remaining quota.237238### Cost-efficiency priority239240- Prefer flat-rate (subscription) agents over pay-per-token241 agents when quota is available.242- Idle/bulk tasks MUST NOT consume premium quota. Route to:243 Copilot 0x → Aider+DeepSeek → Amazon Q.244- Reserve premium quota for interactive use. Usage gates enforce245 minimum 70% remaining for Claude and Codex 5-hour windows.246- **Sonnet 4.6 is the workhorse.** Default to Sonnet; escalate247 to Opus for Heavy tier or when strict rule compliance failures248 occur. Use `medium` effort for both — research shows higher249 effort degrades instruction-following on multi-constraint rule250 sets (arXiv:2505.11423).251252### Quota fallback logic253254If the primary agent has no remaining quota:2552561. Query quota for all agents via `ai-quota`.2572. Select any agent with available quota that has a model at258 the required tier.2593. For Copilot fallback, prefer lower-multiplier models to260 conserve quota.2614. For Standard tier with no subscription quota: fall back to262 Aider + DeepSeek (pay-per-token, ~$1/task).2635. If the fallback model is significantly less capable, note264 the degradation in the dispatch report.2656. If no agent has quota and no pay-per-token fallback is266 available, queue the task and report the block immediately.267 Do not drop silently.268269### Routing decision sequence2702711. Classify the task tier (Free / Light / Standard / Heavy /272 Large Context / Bulk/Idle).2732. For Free tier: dispatch to Copilot with a 0x model. Skip274 quota check.2753. For Bulk/Idle tier: dispatch to Copilot 0x → Aider+DeepSeek276 → Amazon Q (in that order). Skip premium agents and do not277 use the Gemini agent type.2784. For other tiers: check quota for all agents via `ai-quota`.2795. Pick the agent with available quota at the required tier;280 prefer the agent with the most remaining quota when multiple281 qualify.2826. Set `agent_type`, `model`, and `effort` from the tables above283 (omit `effort` when column shows —).2847. If primary choice has no quota: apply fallback logic.2858. Include the chosen agent, model, tier, and effort in the286 dispatch report.287288### Notable models (not in current routing)289290These models are not yet accessible via supported agent CLIs but291are worth monitoring:292293| Model | Provider | Strength | Access |294| --- | --- | --- | --- |295| Kimi K2.5 | Moonshot AI | IFEval SOTA 94.0 | API only; no CLI |296| Grok 4.20 | xAI | 4-agent council; 2M context | xAI API only |297| Qwen 3.5 | Alibaba | IFEval 92.6 | API only |298| GLM-4.7 | Zhipu AI | Dual-judge highest score | API only |299300## Platform-specific workarounds301302- On platforms with policy-blocked file deletion commands (e.g.,303 Codex on Windows), see the Codex-specific workarounds in the304 `command-execution` rule module.