Parallel Codex workers inside Claude Code — multi-agent orchestration.
Strong tool naming (verb-first: spawn, status, result, resume, cancel, list, merge, discard, wait) and comprehensive parameter schemas with Zod validation. All 9 tools have descriptions (avg 150 chars) and input schemas with typed, described parameters. Enum constraints on role/status/strategy prevent hallucination. However, output schemas are not documented in the source, responses are inferred from code logic (agentSummary function returns structured objects, but no explicit schema declaration visible). Error handling is minimal; no recovery guidance or actionable error messages. Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (WRITE, DESTRUCTIVE, READ_ONLY). Parameter descriptions are adequate but lack format/range details (e.g., timeout_seconds has no min/max guidance in description, only in code).
Cancel a running or queued agent. With force=true, kills the codex child process immediately; without force, requests graceful shutdown.
Discard an agent's worktree and branch without merging. Cleans up all associated state.
List agents filtered by role, status, issue_id, or staleness. Returns array of agent records.
Merge an agent's worktree branch back to base_ref. Supports squash, ff, and rebase strategies. Optionally keeps the worktree for further work.
Get the full last_output of an agent.
Continue a previously-completed (or failed/cancelled) agent by sending a follow-up prompt. Requires the agent to have produced a thread_id during its initial run.
Output schemas not documented. agentSummary() returns structured objects but no explicit schema declaration visible in tool registration. LLMs cannot plan downstream calls without knowing response field names and types.
Missing tool annotations. Tools have clear risk levels (spawn/resume/merge/discard are WRITE/DESTRUCTIVE; status/result/list/wait are READ_ONLY) but no readOnlyHint or destructiveHint in schema. Agents cannot distinguish safe from dangerous operations.
Parameter descriptions lack format/range guidance. timeout_seconds accepts 1-1800 (in wait) but description does not state bounds. Numeric parameters (pr_number, timeout_seconds, stale_after_seconds) lack min/max in descriptions, forcing LLMs to guess valid ranges.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2025-06-18+ | v2 |
Launch a Codex agent in the background. Returns immediately with agent_id; poll via `status`. Role picks the model, sandbox, and worktree policy. For long-running work (>60s) always prefer spawn + status polling over the synchronous 'codex' tool.
Get per-agent or all-agents status. With agent_id: single record. Without: every agent + summary counts. Includes last_output_preview (first 500 chars); use `result` for full output.
Block until one or more agents reach a terminal state (completed, failed, or cancelled). Useful for synchronizing multi-agent workflows. Returns immediately if agents are already terminal.
No error recovery guidance. Tool descriptions do not explain what to do on failure (e.g., 'If merge fails due to conflicts, call discard() and retry with a different strategy'). Error responses are not visible in source, but no recovery hints in descriptions.
Confirmation pattern missing for destructive operations. discard() and merge() with force=true can destroy work, but no dry-run or confirmation step. Agents should be able to preview changes before committing.