sol-luna-orchestrator
This server lets an OpenAI Codex supervisor delegate bounded coding tasks to Luna workers under strict scope, compute, and verification controls, while keeping the parent in charge of architecture and final judgement.
Delegate a single task to one Luna worker with objective, acceptance criteria, verification commands, change intent, and optional automatic repair.
Delegate batches of tasks in sequential mode for dependent/shared-state work or parallel mode for isolated, independent seams in separate worktrees.
Continue an eligible task once, using an opaque continuation reference and a bounded instruction while keeping the original contract immutable.
Run a routing preflight to get cheap advisory guidance on whether delegation is structurally sound and economically sensible.
Explore repositories/APIs/docs with a read-only, disposable Luna worker that returns provenance-marked findings without implementing anything.
Enforce safety and policy through server-enforced compute limits, allowed/forbidden files, scope reconciliation, conflict detection, and authoritative verification reruns.
Keep supervision compact via text-only verified handoffs, while rich evidence and diagnostics remain available for review when things fail.
Provides tools for orchestrating OpenAI Codex agents, allowing a supervising agent to delegate bounded implementation tasks to isolated worker threads with enforced file scopes, parallel worktrees, and verification of results.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sol-luna-orchestratorDelegate fixing the failing tests in auth, payments, and search in parallel."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sol-luna-orchestrator
Bounded delegation for OpenAI Codex. Sol remains the supervisor and architect; Luna workers execute well-defined tasks and cannot delegate further. The runtime admits compute under operator policy, checks observed changes against declared scope, isolates parallel work, and independently verifies outcomes.
For each task, the supervisor can stay solo or use one worker, dependent workers in sequence, or independent workers in parallel.
Quick start
Prerequisites: Node.js 22.12 or newer and a logged-in OpenAI Codex CLI.
Any compatible parent model may supervise.
npm install -g sol-luna-orchestrator
sol-luna-orchestrator init
sol-luna-orchestrator doctorOpen Codex and work normally. It can discover the orchestrator and decide whether delegation is useful; you do not need to select workers or call MCP tools yourself. For clone installs, platform requirements, and advanced setup, see Configuration.
The most useful CLI commands are init to register or reconcile the server,
doctor to diagnose setup, status for a runtime summary, and activity for
recent orchestration activity. See Configuration for
the remaining lifecycle commands and options.
Related MCP server: Codex Gemini Delegator V2
How it works
Codex parent
|
+--> stay solo
+--> optional read-only explore or routing preflight
+--> bounded contract: scope + intent + acceptance + verification
|
+--> one Luna worker
+--> sequential workers sharing workspace state
+--> parallel workers in isolated worktrees
|
v
observed edits + authoritative verification
|
v
thin verified handoff, evidence, or next actionThe parent chooses the execution shape. A user-owned compute policy bounds the worker model, effort, count, and concurrency; adaptive routing may recommend solo, single, sequential, or parallel execution but never widens that policy. The orchestrator reconciles worker claims with observed changes and reruns the declared checks, including a final deduplicated batch check after integration. See discovery and adaptive routing for the fresh-session setup and routing guidance.
Features
Capability | What it provides |
Adaptive orchestration | Solo, single, sequential, or parallel execution, with semantic routing and operator-bounded model, effort, worker-count, and concurrency policy. |
Isolated parallel execution | Independent workers use separate worktrees, bounded concurrency, conservative integration, and conflict and scope checks; sequential tasks can share state. |
Authoritative verification | Observed changes and independently rerun checks determine trust, including final workspace verification after batch integration. |
Bounded repair and recovery | Evidence can authorize one eligible task-local repair or one bounded parallel recovery attempt, without uncontrolled retry chains. |
Continuations and next actions | Eligible work can resume under its original contract, while single-use handoffs preserve only execution authority earned from authoritative evidence. |
Context lifecycle management | Model-facing context and routine results stay compact while authoritative evidence, diagnostics, and execution lineage remain available for review. |
Read-only exploration and portable context | Optional exploration runs in a read-only disposable surface; cross-session handoffs carry informational history without importing execution authority. |
Observability and diagnostics | Structured activity, execution evidence, status, and diagnostic tooling make orchestration inspectable without exposing task prompts in the activity stream. |
MCP surface
The normal parent process registers exactly five MCP tools:
delegate_task- run one bounded task.delegate_tasks- run sequential or parallel task batches.continue_task- resume an eligible task with an explicit follow-up.routing_preflight- after cheap bounded structural inspection, classify concrete candidate leaves and ask for advisory routing guidance.explore- investigate an admitted scope without changing it.
Worker processes register no MCP tools and cannot recurse into delegation. The workflow coordinator and cross-session handoff helpers are programmatic APIs, not additional MCP tools. Cross-session handoff data is informational: it does not grant authority, retry permission, continuation rights, or a wider compute policy.
Safety
Delegated work runs under server-enforced compute policy and declared-scope controls; parallel workers use isolated worktrees, and the runtime detects and reports scope or integration conflicts. These are guardrails, not an absolute sandbox: workers write real files, and some execution runs with the operator's permissions. Read Security for the threat model and limitations.
Benchmark status
V2 is historical architecture evidence, documented in bench/RESULTS.md. Benchmark V3 used the frozen methodology and completed 36/36 valid runs against the v0.11.0 production baseline: both Solo Medium and Adaptive Medium passed all nine tasks across two repetitions, but Adaptive delegated zero workers and was slower and more expensive overall. The two-repetition result is directional, not statistically significant. It motivated the post-V3 routing corrections intended for v0.12.0; those corrections have not been evaluated by another full campaign, so no v0.12.0 performance improvement is claimed.
Documentation
Configuration - requirements, setup, policies, and platform details.
Security - threat model and trust boundaries.
Observability - activity, result surfaces, and privacy semantics.
Troubleshooting - diagnosis and recovery.
Supervisor rules - delegation, effort, contracts, and review policy.
Roadmap - future priorities and constraints.
Changelog - shipped release history.
Contributing - development and release workflow.
Contributing
Bug reports and pull requests are welcome. Start with Contributing.
License
MIT, see LICENSE.
Available Tools
5 toolscontinue_taskContinue an eligible Luna taskA
Continue ONE eligible task once in the same Luna Codex thread with an opaque single-use continuationReference and one bounded instruction. The original objective, allowedFiles, forbiddenFiles, changeIntent, acceptance, and verification contract remain immutable; no widening fields exist. Luna cannot delegate, and continuation never starts automatic repair. Verification, scope checks, and evidence reconciliation run again. handoff is default; compact/full are compatibility modes. While pending with no meaningful new state, remain silent; do not narrate waiting or polling. Report only a result, error, cancellation, timeout, or actionable state change.
| Name | Required | Description | Default |
|---|---|---|---|
| instruction | Yes | ||
| resultDetail | No | handoff | |
| continuationReference | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly. It discloses immutability of the original contract, no widening fields, no delegation, no automatic repair, re-running of verification/scope/evidence checks, resultDetail mode semantics, silence while pending, and the allowed report outcomes. This is exceptional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place, covering action, constraints, mutation semantics, verification behavior, output modes, and communication protocol. The primary action is front-loaded in the first sentence, and the rest provides necessary behavioral guardrails without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and the subtle semantics of continuation, the description is remarkably complete. It explains eligibility constraints, single-use token behavior, immutability, what will not happen, what checks rerun, mode defaults, and when to stay silent versus report. There is little an agent would need to infer on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds real semantics for the key parameters: 'opaque single-use continuationReference', 'one bounded instruction', and 'handoff is default; compact/full are compatibility modes' for resultDetail. It does not provide exhaustive per-parameter descriptions, but what it adds is meaningful and sufficient for invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Continue'), a specific resource ('ONE eligible task'), and critical constraints ('once in the same Luna Codex thread', 'opaque single-use continuationReference'). It is clearly distinguished from siblings by explicitly noting 'Luna cannot delegate', so an agent can tell it apart from delegate_task/delegate_tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the context for use: continuing an existing task in the same thread with a continuation reference. It provides exclusions such as 'Luna cannot delegate' and 'continuation never starts automatic repair', which helps differentiate from delegation and repair workflows. It does not name the exact alternative tool names, but the usage context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delegate_taskDelegate a bounded task to a Luna workerA
Delegate ONE substantial, bounded executable seam to gpt-5.6-luna; no second seam is required. Keep small, simple, or tightly coupled work solo. Tasks may be implementation, tests, bug fixing, refactoring, investigation, or chores. The parent owns architecture, decomposition, unresolved design, sequencing, interfaces, scope, acceptance, and final judgement. Luna owns scoped exploration, implementation, verification, and bounded repair; it cannot see the conversation or delegate.
Provide a self-contained objective, effortReason, acceptanceCriteria, verificationCommands, changeIntent, and honest scopes; add a concise activityLabel when safe and only repository-unavailable context. automaticRepair permits at most one conservative same-thread repair. Results include one evidence-derived failureDecision; parent owns nonautomatic actions. resultDetail=handoff is the default.
The runtime reruns declared checks and reconciles observed edits. A clean PASS returns a text-only VERIFIED_COMPLETE handoff: finish without rereading worker-owned files or rerunning passed checks unless a listed risk changes architecture. FAILED/BLOCKED, untrustworthy, discrepant, scope-violating, refused/skipped, or runtime-error results expand with evidence. Worker claims are not authoritative.
Delegate only when ownership, isolation, context, verification, latency, coordination risk, quality, and current parent-conditional credit economics beat fixed overhead; raw tokens are not credit cost and no saving is guaranteed. While pending with no meaningful new state, remain silent; do not narrate waiting or polling. Report only a result, error, cancellation, timeout, or actionable state change.
| Name | Required | Description | Default |
|---|---|---|---|
| effort | No | high | |
| context | No | ||
| objective | Yes | ||
| allowedFiles | No | ||
| changeIntent | No | required | |
| effortReason | Yes | ||
| resultDetail | No | handoff | |
| taskCategory | No | ||
| activityLabel | No | ||
| computePolicy | No | Optional per-call compute envelope. Narrows this installation's operator-owned baseline only and can never widen it. Omit to use the baseline. | |
| contextCapsule | No | ||
| forbiddenFiles | No | ||
| timeoutSeconds | No | ||
| automaticRepair | No | ||
| handoffReference | No | ||
| previousAttempts | No | ||
| routingPreflight | No | Optional advisory routing declaration. Solo advice never blocks execution; declarations gate: every surface refuses empty seams, parallel also refuses mutable sharedState, shared-core coreOverlap, or tasks > seams. "unknown" biases advice solo, never refuses. | |
| workingDirectory | No | ||
| acceptanceCriteria | Yes | ||
| verificationCommands | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden and does so thoroughly. It reveals that the worker cannot see the conversation or delegate, automaticRepair allows at most one conservative same-thread repair, the runtime reruns declared checks and reconciles edits, PASS returns a text-only VERIFIED_COMPLETE handoff, and failure/blocked results expand with evidence. It also states worker claims are not authoritative and the parent owns nonautomatic actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place for a 20-parameter delegation tool. It is front-loaded with the core contract, then proceeds through submission requirements, runtime behavior, and agent etiquette. There is no filler and no repetition of schema enums.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description explains result types, handoff behavior, failure expansion, and verification semantics well. It covers when to delegate and what the worker can and cannot do. It is slightly less complete on explicit routing among sibling tools and on a few top-level parameters, but overall it gives an agent enough to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 10%, but the description compensates for the most important parameters: it tells the agent to provide a self-contained objective, effortReason, acceptanceCriteria, verificationCommands, changeIntent, and honest scopes; it clarifies activityLabel should be concise and only for repository-unavailable context; and it explains the behavior of automaticRepair and the default resultDetail=handoff. Some parameters such as contextCapsule, previousAttempts, and timeoutSeconds are left to schema inference, which keeps this from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Delegate ONE substantial, bounded executable seam to gpt-5.6-luna.' It also distinguishes itself from sibling tools by emphasizing this is a single-seam delegation, not a multi-seam or parallel operation, and lists allowed task categories. The parent/worker ownership split further clarifies what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: 'Keep small, simple, or tightly coupled work solo' and 'Delegate only when ownership, isolation, context, verification, latency, coordination risk, quality, and current parent-conditional credit economics beat fixed overhead.' It also tells the agent to remain silent while pending and to report only meaningful state changes. This is strong operational guidance, even though it does not name sibling tools explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delegate_tasksDelegate several tasks to Luna workersA
Delegate a batch intended for two or more owned seams to gpt-5.6-luna; one task remains accepted for compatibility, but prefer delegate_task when no scheduling is needed. Use sequential for dependencies/shared workspace state and parallel only for genuinely independent disjoint declared scopes. Do not create artificial seams. At most 12 tasks are accepted and at most 3 run concurrently; the rest queue. Each task needs a self-contained contract and a concise activityLabel when a safe label exists. The parent owns architecture/interfaces and exceptional judgement; Luna owns exploration, implementation, verification, and repair. automaticRepair is one bounded task-local turn.
Parallel same-file edits prevent automatic integration. allowOverlappingScopes:true only accepts the declared overlap; it is not a write sandbox and does not permit same-file integration. integrate=false skips copying and retention follows operator policy. Partial outcomes remain visible. automaticRecovery defaults true: at most one evidence-eligible timeout continuation or exact process-exit retry; a counter alone never authorizes retry. Repair precedes recovery and neither nests. Successes, cancellation, scope/security/evidence failures, refused checks, discrepancies, and conflicts are never retried. Successful streams survive sibling failure.
After integration, deterministic code reruns the deduplicated union of declared checks in the final workspace. completionState=verified-complete means all seams, integration, and final checks passed; the default text-only handoff then tells the parent to finish without rereading files or rerunning checks. Any failure/refusal/conflict returns rich evidence for targeted diagnosis. resultDetail is one batch-level compatibility choice. More workers are not automatically cheaper; raw tokens are not credit cost and savings depend on the parent and task mix. While pending with no meaningful new state, remain silent; do not narrate waiting or polling. Report only a result, error, cancellation, timeout, or actionable state change.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| tasks | Yes | ||
| integrate | No | ||
| resultDetail | No | handoff | |
| computePolicy | No | Optional per-call compute envelope. Narrows this installation's operator-owned baseline only and can never widen it. Omit to use the baseline. | |
| routingPreflight | No | Optional advisory routing declaration. Solo advice never blocks execution; declarations gate: every surface refuses empty seams, parallel also refuses mutable sharedState, shared-core coreOverlap, or tasks > seams. "unknown" biases advice solo, never refuses. | |
| workingDirectory | No | ||
| automaticRecovery | No | ||
| allowOverlappingScopes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It goes far beyond a basic summary by specifying concurrency limits, queueing, retry rules, automaticRecovery defaults, repair scope, integration behavior, completionState semantics, and reporting etiquette. This is exceptional transparency for a complex tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and dense, but the tool is genuinely complex and nearly every sentence adds an operational constraint or decision rule. It is grouped into thematic paragraphs and front-loaded with the primary purpose, but it is still a wall of text rather than a structured, skimmable format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, absence of annotations, and absence of output schema, this description is remarkably complete. It covers selection criteria, operational limits, concurrency and queueing, integration and overlap semantics, retry and recovery behavior, failure handling, result semantics, and even reporting etiquette. An agent has enough context to decide when to call it and how to configure a valid batch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 22%, so the description must compensate, and it does. It explains the behavioral meaning of allowOverlappingScopes:true, integrate=false, resultDetail, automaticRepair, automaticRecovery, and sequential/parallel mode, which the bare schema enums do not provide. It also gives practical guidance like requiring self-contained contracts and concise activityLabels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: delegate a batch to Luna workers. It also differentiates from the sibling tool delegate_task by explaining that a single task is accepted for compatibility but delegate_task is preferred when no scheduling is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to prefer delegate_task, and gives clear rules for choosing sequential vs parallel: sequential for dependencies/shared state, parallel only for independent disjoint scopes. It also forbids artificial seams, leaving no ambiguity about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exploreExplore repository, API, or documentation with LunaA
Explicitly explore an admitted repository, API, or documentation scope with gpt-5.6-luna; fixed read-only disposable execution returns provenance-marked worker claims, runtime facts, inferences, and unknowns. Implements nothing, cannot delegate, and is never automatic.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | Yes | ||
| effort | No | high | |
| target | Yes | ||
| context | No | ||
| questions | No | ||
| effortReason | Yes | ||
| resultDetail | No | handoff | |
| activityLabel | No | ||
| computePolicy | No | Optional per-call compute envelope. Narrows this installation's operator-owned baseline only and can never widen it. Omit to use the baseline. | |
| contextCapsule | No | ||
| forbiddenFiles | No | ||
| timeoutSeconds | No | ||
| workingDirectory | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so unusually well. It discloses that execution is 'fixed read-only disposable,' that it returns 'provenance-marked worker claims, runtime facts, inferences, and unknowns,' and that it 'implements nothing, cannot delegate, and is never automatic.' This gives an agent a clear safety and side-effect profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two efficient sentences with zero filler. Purpose and scope are front-loaded, followed immediately by behavioral disclosures and exclusions. Every clause adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool — 13 parameters, nested objects, no output schema, and no annotations — so the description alone is insufficient for correct invocation. It explains the high-level behavior well but does not clarify target vs scope, effortReason requirements, resultDetail choices, computePolicy, or output structure. An agent could select the tool but would struggle to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 8%, and the description barely compensates: 'repository, API, or documentation scope' hints at target/scope, but the 13 parameters — including required effortReason — receive no meaningful explanation. The schema itself has no descriptions for most properties, so an agent lacks essential parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and object phrase: 'Explicitly explore an admitted repository, API, or documentation scope' — so an agent knows exactly what the tool acts on. It also differentiates from siblings by adding 'Implements nothing, cannot delegate, and is never automatic,' which separates it from delegate_task and routing_preflight. This goes beyond a generic restatement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening clause gives clear usage context: use this for explicit exploration of an admitted scope. The additonal exclusions — 'cannot delegate' and 'never automatic' — tell an agent when not to expect delegation or autonimous routing. Alternatives are not explicitly named, but the behavior boundaries are strong enough to guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
routing_preflightCheck cheaply whether delegating is worth itA
Cheap deterministic check of whether delegating is structurally sound and economically sensible, before any repository exploration. Declare the ownership seams you are considering and what they share; leave a field "unknown" when you do not know, which biases the advice toward solo without ever refusing. Creates no worker, batch, worktree, or thread, refuses nothing, and returns route (solo | either | delegation-plausible), the deciding signals, and structural parallel eligibility. Advisory only and never required: the parent owns sequential vs parallel, worker count, effort, and the final decision, and choosing zero workers afterwards is a normal successful outcome. either means fixed delegation overhead needs explicit justification, otherwise stay solo.
| Name | Required | Description | Default |
|---|---|---|---|
| seams | Yes | ||
| seamSize | No | unknown | |
| coreOverlap | No | unknown | |
| integration | No | unknown | |
| sharedState | No | unknown | |
| verification | No | unknown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explicitly states 'Creates no worker, batch, worktree, or thread, refuses nothing' – clearly disclosing side-effect-free behavior. It describes the return values (route, deciding signals, structural parallel eligibility) and explains how unknown inputs bias results toward solo. The advisory and non-required nature is also disclosed, giving the agent complete understanding of behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence. It then flows naturally from usage timing to input guidance to output and interpretation. It is three sentences but dense, with each clause earning its place. Slightly verbose with multiple embedded clauses, but still well-structured and avoids fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 6 parameters and no output schema, the description covers all essential aspects: what the tool does, when to use it, its side-effect-free nature, the input guidance (include seams, mark unknowns), the output format (route, deciding signals, eligibility), and how to interpret results (either requires justification). An agent has enough information to call it correctly without further lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides a high-level hint: 'Declare the ownership seams you are considering and what they share' – this loosely maps to seams and sharedState/coreOverlap. It also advises leaving fields 'unknown' when unsure. However, it does not explain the semantic meaning of seamSize, integration, or verification individually, leaving some parameters under-documented. The description adds some value but does not fully compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Cheap deterministic check of whether delegating is structurally sound and economically sensible, before any repository exploration.' This is a specific verb (check) and resource (delegating) with a clear scope and timing. It distinguishes itself from siblings like delegate_task by explicitly stating it creates no worker/batch/worktree/thread, making it clear it is a preflight rather than an execution tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states it is used 'before any repository exploration' and is 'advisory only and never required', clarifying it is a precursor to actual delegation. It also explains when the output suggests staying solo vs. delegating ('either means fixed delegation overhead needs explicit justification, otherwise stay solo'). However, it does not explicitly name sibling tools or state 'use delegate_task instead when you are ready to execute', so the contrast with alternatives is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.11.0- Changed
continue_task1 field changed- added
Input schema / properties / continuationReference / maxLengthAdded value: +128
- Changed
delegate_task1 field changed- added
Input schema / properties / handoffReferenceAdded value: +{ + "maxLength": 128, + "minLength": 1, + "type": "string" +}
- Changed
delegate_tasks1 field changed- added
Input schema / properties / tasks / items / properties / handoffReferenceAdded value: +{ + "maxLength": 128, + "minLength": 1, + "type": "string" +}
- Added
explore
4 tool updates
v0.10.0- Changed
continue_task4 fields changed- removed
Input schema / properties / continuationReference / descriptionRemoved value: -"Opaque server-lifetime reference returned on an eligible delegated result. Do not send a raw Codex thread id." - removed
Input schema / properties / instruction / descriptionRemoved value: -"One concise follow-up instruction for the same bounded task. The original objective, allowedFiles, forbiddenFiles, changeIntent, acceptance criteria, and verification commands remain fixed and are not accepted here." - added
Input schema / properties / resultDetailAdded value: +{ + "default": "handoff", + "enum": [ + "handoff", + "compact", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "additionalProperties": false, - "properties": { - "attempt": { - "description": "Attempt number for this objective, from `previousAttempts`.", - "type": "number" - }, - "changeIntent": { - "description": "Selected change intent carried into the review evidence.", - "enum": [ - "forbidden", - "optional", - "required" - ], - "type": "string" - }, - "continuationReference": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Opaque, single-use, server-lifetime reference for one explicit continuation; null when this result cannot be continued or the bound was consumed." - }, - "discrepancies": { - "description": "Concrete mismatches between claims and observed evidence. Non-empty means do not accept the result as-is.", - "items": { - "type": "string" - }, - "type": "array" - }, - "durationSeconds": { - "type": "number" - }, - "effort": { - "type": "string" - }, - "effortReason": { - "type": "string" - }, - "errors": { - "description": "Runtime errors surfaced during the turn.", - "items": { - "type": "string" - }, - "type": "array" - }, - "escalationAdvice": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "When the task did not pass, what to change before retrying — including whether raising effort is actually justified." - }, - "filesChanged": { - "description": "Union of runtime-observed and worker-claimed edits. observed: false means the runtime recorded no matching patch.", - "items": { - "additionalProperties": false, - "properties": { - "kind": { - "type": "string" - }, - "observed": { - "description": "True if the Codex runtime itself recorded this edit.", - "type": "boolean" - }, - "path": { - "type": "string" - }, - "why": { - "type": "string" - } - }, - "required": [ - "path", - "kind", - "why", - "observed" - ], - "type": "object" - }, - "type": "array" - }, - "followUps": { - "items": { - "type": "string" - }, - "type": "array" - }, - "model": { - "type": "string" - }, - "notes": { - "type": "string" - }, - "repair": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "attempted": { - "type": "boolean" - }, - "classification": { - "enum": [ - "not-requested", - "not-needed", - "local-verification", - "read-only", - "contract-or-requirement", - "scope-or-conflict", - "environment-or-tooling", - "security-or-trust-boundary", - "wider-scope" - ], - "type": "string" - }, - "failureEvidence": { - "items": { - "additionalProperties": false, - "properties": { - "command": { - "type": "string" - }, - "execution": { - "enum": [ - "argv", - "shell" - ], - "type": "string" - }, - "exitCode": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "output": { - "type": "string" - } - }, - "required": [ - "command", - "execution", - "exitCode", - "output" - ], - "type": "object" - }, - "type": "array" - }, - "reason": { - "type": "string" - }, - "requested": { - "type": "boolean" - } - }, - "required": [ - "requested", - "attempted", - "classification", - "reason", - "failureEvidence" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Bounded automatic-repair decision and the concise authoritative failure evidence supplied to the resumed worker. Null or omitted when not requested." - }, - "reviewChecklist": { - "description": "Risk-based checks the parent orchestrator must still make before accepting.", - "items": { - "type": "string" - }, - "type": "array" - }, - "scopeViolations": { - "description": "Observed edits outside allowedFiles, matching forbiddenFiles, or escaping the workspace. Non-empty requires deeper review.", - "items": { - "type": "string" - }, - "type": "array" - }, - "summary": { - "description": "Worker's summary of what it did.", - "type": "string" - }, - "trustworthy": { - "description": "False when claims conflict with observed evidence or runtime errors occurred; scrutinize the result before accepting.", - "type": "boolean" - }, - "usage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "cacheWriteInputTokens": { - "type": "number" - }, - "cachedInputTokens": { - "type": "number" - }, - "inputTokens": { - "type": "number" - }, - "outputTokens": { - "type": "number" - }, - "reasoningOutputTokens": { - "type": "number" - } - }, - "required": [ - "inputTokens", - "cachedInputTokens", - "outputTokens", - "reasoningOutputTokens" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "verdict": { - "description": "Orchestrator verdict from observed scope and configured verification; not copied from the worker's claim.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "verification": { - "description": "Verification outcomes with provenance and execution status; use orchestrator rows to determine what actually ran.", - "items": { - "additionalProperties": false, - "properties": { - "command": { - "type": "string" - }, - "execution": { - "description": "argv or shell = executed here; rejected = refused; skipped = disabled; reported = worker-only. Only successful executed rows prove a command.", - "enum": [ - "argv", - "shell", - "rejected", - "skipped", - "reported" - ], - "type": "string" - }, - "exitCode": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "output": { - "type": "string" - }, - "passed": { - "type": "boolean" - }, - "source": { - "description": "Result provenance. Orchestrator rows authoritatively record execution, refusal, or skipping; worker rows are self-reported.", - "enum": [ - "orchestrator", - "worker" - ], - "type": "string" - } - }, - "required": [ - "command", - "source", - "execution", - "exitCode", - "passed", - "output" - ], - "type": "object" - }, - "type": "array" - }, - "verificationMode": { - "description": "Execution policy in force: allowlist, off, or shell.", - "type": "string" - }, - "workerClaimedFailureCauses": { - "description": "Normalized worker-declared failure causes. This is claim evidence, not an orchestrator repair or retry classification. Current results always include it; the field is optional only for backwards-compatible consumers.", - "items": { - "enum": [ - "verification", - "requirements", - "implementation", - "environment-tooling", - "timeout", - "blocked", - "unclassified" - ], - "type": "string" - }, - "type": "array" - }, - "workerClaimedStatus": { - "description": "What the worker reported. Compare against `verdict`.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "workerThreadId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Codex thread id of the worker, for inspection; continuation uses an opaque reference." - } - }, - "required": [ - "changeIntent", - "verdict", - "workerClaimedStatus", - "trustworthy", - "workerThreadId", - "continuationReference", - "model", - "effort", - "effortReason", - "attempt", - "summary", - "notes", - "followUps", - "filesChanged", - "verification", - "verificationMode", - "scopeViolations", - "discrepancies", - "reviewChecklist", - "escalationAdvice", - "durationSeconds", - "usage", - "errors" - ], - "type": "object" -}New value: +null
- Changed
delegate_task29 fields changed- removed
Input schema / properties / acceptanceCriteria / descriptionRemoved value: -"Observable conditions that define done and can be judged from evidence." - removed
Input schema / properties / activityLabel / descriptionRemoved value: -"Optional concise, non-sensitive label for local activity views; parents should provide one for each batch task when a safe label is available (for example, 'Update auth retries'). It is persisted locally and may reveal this brief work description; omit it when that is not appropriate. Never derive it from the objective text." - removed
Input schema / properties / allowedFiles / descriptionRemoved value: -"Declared workspace-relative glob scope, checked against observed edits after the run. Empty declares no in-workspace allowlist and does not declare read-only intent; workspace confinement remains." - removed
Input schema / properties / automaticRepair / descriptionRemoved value: -"Opt in to at most one automatic repair turn when the initial result is conservatively classified as a local verification defect. The same worker thread and immutable task contract are reused. Omitted defaults to false." - removed
Input schema / properties / changeIntent / descriptionRemoved value: -"Explicit file-change expectation: forbidden means read-only and any runtime-observed edit violates the contract; optional means edits may be useful but are not required; required means the task is expected to produce an edit. Omitted defaults to required for compatibility. This is independent of allowedFiles and taskCategory." - added
Input schema / properties / computePolicyAdded value: +{ + "description": "Optional per-call compute envelope. Narrows this installation's operator-owned baseline only and can never widen it. Omit to use the baseline.", + "properties": { + "allowEffortEscalation": { + "type": "boolean" + }, + "allowStrongerFallback": { + "type": "boolean" + }, + "maxConcurrency": { + "maximum": 8, + "minimum": 1, + "type": "integer" + }, + "maxWorkersPerBatch": { + "maximum": 12, + "minimum": 1, + "type": "integer" + } + }, + "type": "object" +} - removed
Input schema / properties / context / descriptionRemoved value: -"Legacy plain-text task background. If contextCapsule is also supplied, both are sent; avoid duplication." - removed
Input schema / properties / contextCapsule / descriptionRemoved value: -"Optional structured task background the worker cannot infer. It supplements the contract and legacy context; include only useful fields, omit empty fields, never copy the parent transcript, and do not duplicate other fields." - removed
Input schema / properties / contextCapsule / properties / dependencies / descriptionRemoved value: -"Services, libraries, or internal modules the task depends on." - removed
Input schema / properties / contextCapsule / properties / interfaces / descriptionRemoved value: -"Signatures, contracts, or boundaries that must remain stable." - removed
Input schema / properties / contextCapsule / properties / invariants / descriptionRemoved value: -"Rules that must remain true." - removed
Input schema / properties / contextCapsule / properties / knownPitfalls / descriptionRemoved value: -"Task-specific mistakes or failed approaches to avoid." - removed
Input schema / properties / contextCapsule / properties / relevantContext / descriptionRemoved value: -"Task background the worker cannot infer from the repository." - removed
Input schema / properties / contextCapsule / properties / upstreamDecisions / descriptionRemoved value: -"Architecture or design decisions already settled by the parent orchestrator." - removed
Input schema / properties / effort / descriptionRemoved value: -"Worker reasoning effort: medium = mechanical; high = bounded work needing judgement (routine default); xhigh = subtle, cross-cutting, or unclear cause; max = genuinely hard. Rate this task's difficulty, not project importance." - removed
Input schema / properties / effortReason / descriptionRemoved value: -"One sentence justifying the effort from this task's difficulty." - removed
Input schema / properties / forbiddenFiles / descriptionRemoved value: -"Workspace-relative globs observed edits must not match. Checked after the run and takes precedence over allowedFiles." - removed
Input schema / properties / objective / descriptionRemoved value: -"One bounded executable task. Make the what, why, and expected outcome self-contained because the worker cannot see the conversation." - removed
Input schema / properties / previousAttempts / descriptionRemoved value: -"Prior FAILED or BLOCKED attempts at this objective, so a retry can avoid repeating them and the result can report its attempt number." - removed
Input schema / properties / previousAttempts / items / properties / whatWentWrong / descriptionRemoved value: -"Why the earlier attempt did not succeed, in one sentence." - changed
Input schema / properties / resultDetail / defaultPrevious value: -"full"New value: +"handoff" - removed
Input schema / properties / resultDetail / descriptionRemoved value: -"Choose compact routinely; it removes only successful verification output. Use full when that output is needed. The schema default remains full for backwards compatibility; failed, refused, and skipped output is retained." - changed
Input schema / properties / resultDetail / enumPrevious value: -[ - "full", - "compact" -]New value: +[ + "handoff", + "compact", + "full" +] - added
Input schema / properties / routingPreflightAdded value: +{ + "description": "Optional advisory routing declaration. Solo advice never blocks execution; declarations gate: every surface refuses empty seams, parallel also refuses mutable sharedState, shared-core coreOverlap, or tasks > seams. \"unknown\" biases advice solo, never refuses.", + "properties": { + "coreOverlap": { + "default": "unknown", + "enum": [ + "disjoint", + "shared-core", + "unknown" + ], + "type": "string" + }, + "integration": { + "default": "unknown", + "enum": [ + "mechanical", + "architectural", + "unknown" + ], + "type": "string" + }, + "seamSize": { + "default": "unknown", + "enum": [ + "small", + "substantial", + "unknown" + ], + "type": "string" + }, + "seams": { + "items": { + "maxLength": 48, + "minLength": 1, + "type": "string" + }, + "maxItems": 12, + "type": "array" + }, + "sharedState": { + "default": "unknown", + "enum": [ + "none", + "read-only", + "mutable", + "unknown" + ], + "type": "string" + }, + "verification": { + "default": "unknown", + "enum": [ + "per-seam", + "shared-only", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "seams" + ], + "type": "object" +} - removed
Input schema / properties / taskCategory / descriptionRemoved value: -"Kind of executable work; it does not determine effort." - removed
Input schema / properties / timeoutSeconds / descriptionRemoved value: -"Optional per-turn wall-clock budget; otherwise uses the configured default (normally 1800 seconds)." - removed
Input schema / properties / verificationCommands / descriptionRemoved value: -"Targeted deterministic checks that prove the bounded task; use a full suite only when the task genuinely requires it. The worker runs and reports them, and the orchestrator independently processes each under the configured policy. Executed orchestrator rows are authoritative, while refused or skipped rows prove nothing. Default allowlist mode refuses shell syntax." - removed
Input schema / properties / workingDirectory / descriptionRemoved value: -"Absolute worker directory; defaults to the orchestrator's current directory." - changed
Output schema / (root)Previous value: -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "additionalProperties": false, - "properties": { - "attempt": { - "description": "Attempt number for this objective, from `previousAttempts`.", - "type": "number" - }, - "changeIntent": { - "description": "Selected change intent carried into the review evidence.", - "enum": [ - "forbidden", - "optional", - "required" - ], - "type": "string" - }, - "continuationReference": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Opaque, single-use, server-lifetime reference for one explicit continuation; null when this result cannot be continued or the bound was consumed." - }, - "discrepancies": { - "description": "Concrete mismatches between claims and observed evidence. Non-empty means do not accept the result as-is.", - "items": { - "type": "string" - }, - "type": "array" - }, - "durationSeconds": { - "type": "number" - }, - "effort": { - "type": "string" - }, - "effortReason": { - "type": "string" - }, - "errors": { - "description": "Runtime errors surfaced during the turn.", - "items": { - "type": "string" - }, - "type": "array" - }, - "escalationAdvice": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "When the task did not pass, what to change before retrying — including whether raising effort is actually justified." - }, - "filesChanged": { - "description": "Union of runtime-observed and worker-claimed edits. observed: false means the runtime recorded no matching patch.", - "items": { - "additionalProperties": false, - "properties": { - "kind": { - "type": "string" - }, - "observed": { - "description": "True if the Codex runtime itself recorded this edit.", - "type": "boolean" - }, - "path": { - "type": "string" - }, - "why": { - "type": "string" - } - }, - "required": [ - "path", - "kind", - "why", - "observed" - ], - "type": "object" - }, - "type": "array" - }, - "followUps": { - "items": { - "type": "string" - }, - "type": "array" - }, - "model": { - "type": "string" - }, - "notes": { - "type": "string" - }, - "repair": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "attempted": { - "type": "boolean" - }, - "classification": { - "enum": [ - "not-requested", - "not-needed", - "local-verification", - "read-only", - "contract-or-requirement", - "scope-or-conflict", - "environment-or-tooling", - "security-or-trust-boundary", - "wider-scope" - ], - "type": "string" - }, - "failureEvidence": { - "items": { - "additionalProperties": false, - "properties": { - "command": { - "type": "string" - }, - "execution": { - "enum": [ - "argv", - "shell" - ], - "type": "string" - }, - "exitCode": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "output": { - "type": "string" - } - }, - "required": [ - "command", - "execution", - "exitCode", - "output" - ], - "type": "object" - }, - "type": "array" - }, - "reason": { - "type": "string" - }, - "requested": { - "type": "boolean" - } - }, - "required": [ - "requested", - "attempted", - "classification", - "reason", - "failureEvidence" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Bounded automatic-repair decision and the concise authoritative failure evidence supplied to the resumed worker. Null or omitted when not requested." - }, - "reviewChecklist": { - "description": "Risk-based checks the parent orchestrator must still make before accepting.", - "items": { - "type": "string" - }, - "type": "array" - }, - "scopeViolations": { - "description": "Observed edits outside allowedFiles, matching forbiddenFiles, or escaping the workspace. Non-empty requires deeper review.", - "items": { - "type": "string" - }, - "type": "array" - }, - "summary": { - "description": "Worker's summary of what it did.", - "type": "string" - }, - "trustworthy": { - "description": "False when claims conflict with observed evidence or runtime errors occurred; scrutinize the result before accepting.", - "type": "boolean" - }, - "usage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "cacheWriteInputTokens": { - "type": "number" - }, - "cachedInputTokens": { - "type": "number" - }, - "inputTokens": { - "type": "number" - }, - "outputTokens": { - "type": "number" - }, - "reasoningOutputTokens": { - "type": "number" - } - }, - "required": [ - "inputTokens", - "cachedInputTokens", - "outputTokens", - "reasoningOutputTokens" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "verdict": { - "description": "Orchestrator verdict from observed scope and configured verification; not copied from the worker's claim.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "verification": { - "description": "Verification outcomes with provenance and execution status; use orchestrator rows to determine what actually ran.", - "items": { - "additionalProperties": false, - "properties": { - "command": { - "type": "string" - }, - "execution": { - "description": "argv or shell = executed here; rejected = refused; skipped = disabled; reported = worker-only. Only successful executed rows prove a command.", - "enum": [ - "argv", - "shell", - "rejected", - "skipped", - "reported" - ], - "type": "string" - }, - "exitCode": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "output": { - "type": "string" - }, - "passed": { - "type": "boolean" - }, - "source": { - "description": "Result provenance. Orchestrator rows authoritatively record execution, refusal, or skipping; worker rows are self-reported.", - "enum": [ - "orchestrator", - "worker" - ], - "type": "string" - } - }, - "required": [ - "command", - "source", - "execution", - "exitCode", - "passed", - "output" - ], - "type": "object" - }, - "type": "array" - }, - "verificationMode": { - "description": "Execution policy in force: allowlist, off, or shell.", - "type": "string" - }, - "workerClaimedFailureCauses": { - "description": "Normalized worker-declared failure causes. This is claim evidence, not an orchestrator repair or retry classification. Current results always include it; the field is optional only for backwards-compatible consumers.", - "items": { - "enum": [ - "verification", - "requirements", - "implementation", - "environment-tooling", - "timeout", - "blocked", - "unclassified" - ], - "type": "string" - }, - "type": "array" - }, - "workerClaimedStatus": { - "description": "What the worker reported. Compare against `verdict`.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "workerThreadId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Codex thread id of the worker, for inspection; continuation uses an opaque reference." - } - }, - "required": [ - "changeIntent", - "verdict", - "workerClaimedStatus", - "trustworthy", - "workerThreadId", - "continuationReference", - "model", - "effort", - "effortReason", - "attempt", - "summary", - "notes", - "followUps", - "filesChanged", - "verification", - "verificationMode", - "scopeViolations", - "discrepancies", - "reviewChecklist", - "escalationAdvice", - "durationSeconds", - "usage", - "errors" - ], - "type": "object" -}New value: +null
- Changed
delegate_tasks34 fields changed- removed
Input schema / properties / allowOverlappingScopes / descriptionRemoved value: -"Parallel only: this call-level escape hatch permits potentially overlapping declared scopes. Actual same-file edits still prevent automatic integration." - added
Input schema / properties / automaticRecoveryAdded value: +{ + "default": true, + "type": "boolean" +} - added
Input schema / properties / computePolicyAdded value: +{ + "description": "Optional per-call compute envelope. Narrows this installation's operator-owned baseline only and can never widen it. Omit to use the baseline.", + "properties": { + "allowEffortEscalation": { + "type": "boolean" + }, + "allowStrongerFallback": { + "type": "boolean" + }, + "maxConcurrency": { + "maximum": 8, + "minimum": 1, + "type": "integer" + }, + "maxWorkersPerBatch": { + "maximum": 12, + "minimum": 1, + "type": "integer" + } + }, + "type": "object" +} - removed
Input schema / properties / integrate / descriptionRemoved value: -"Parallel only: copy completed worker edits back when observed changed files do not collide. Set false to leave changes in worktrees for review." - removed
Input schema / properties / mode / descriptionRemoved value: -"sequential = dependent or shared-workspace tasks run in order; parallel = independent tasks run in isolated git worktrees and may be copied back only when integration is enabled and observed changed files do not collide." - changed
Input schema / properties / resultDetail / defaultPrevious value: -"full"New value: +"handoff" - removed
Input schema / properties / resultDetail / descriptionRemoved value: -"Batch-level result detail applied uniformly to every returned task result; it is not a per-task field. Compact removes only successful verification output, while the schema default remains full for backwards compatibility." - changed
Input schema / properties / resultDetail / enumPrevious value: -[ - "full", - "compact" -]New value: +[ + "handoff", + "compact", + "full" +] - added
Input schema / properties / routingPreflightAdded value: +{ + "description": "Optional advisory routing declaration. Solo advice never blocks execution; declarations gate: every surface refuses empty seams, parallel also refuses mutable sharedState, shared-core coreOverlap, or tasks > seams. \"unknown\" biases advice solo, never refuses.", + "properties": { + "coreOverlap": { + "default": "unknown", + "enum": [ + "disjoint", + "shared-core", + "unknown" + ], + "type": "string" + }, + "integration": { + "default": "unknown", + "enum": [ + "mechanical", + "architectural", + "unknown" + ], + "type": "string" + }, + "seamSize": { + "default": "unknown", + "enum": [ + "small", + "substantial", + "unknown" + ], + "type": "string" + }, + "seams": { + "items": { + "maxLength": 48, + "minLength": 1, + "type": "string" + }, + "maxItems": 12, + "type": "array" + }, + "sharedState": { + "default": "unknown", + "enum": [ + "none", + "read-only", + "mutable", + "unknown" + ], + "type": "string" + }, + "verification": { + "default": "unknown", + "enum": [ + "per-seam", + "shared-only", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "seams" + ], + "type": "object" +} - removed
Input schema / properties / tasks / descriptionRemoved value: -"Task contracts; this API is intended for multiple meaningful tasks but accepts one or more and at most 12 tasks. A one-task batch remains accepted for compatibility; prefer delegate_task for a single task. Batch size is not concurrency: sequential mode runs one at a time, while parallel mode runs at most 3 workers at once and queues the rest. Parallel tasks need disjoint scopes unless this call sets allowOverlappingScopes:true; actual same-file edits still prevent automatic integration. Provide each task an optional concise, non-sensitive activityLabel when one is safe; labels are explicit only and never derived from objective text." - removed
Input schema / properties / tasks / items / properties / acceptanceCriteria / descriptionRemoved value: -"Observable conditions that define done and can be judged from evidence." - removed
Input schema / properties / tasks / items / properties / activityLabel / descriptionRemoved value: -"Optional concise, non-sensitive label for local activity views; parents should provide one for each batch task when a safe label is available (for example, 'Update auth retries'). It is persisted locally and may reveal this brief work description; omit it when that is not appropriate. Never derive it from the objective text." - removed
Input schema / properties / tasks / items / properties / allowedFiles / descriptionRemoved value: -"Declared workspace-relative glob scope, checked against observed edits after the run. Empty declares no in-workspace allowlist and does not declare read-only intent; workspace confinement remains." - removed
Input schema / properties / tasks / items / properties / automaticRepair / descriptionRemoved value: -"Opt in to at most one automatic repair turn when the initial result is conservatively classified as a local verification defect. The same worker thread and immutable task contract are reused. Omitted defaults to false." - removed
Input schema / properties / tasks / items / properties / changeIntent / descriptionRemoved value: -"Explicit file-change expectation: forbidden means read-only and any runtime-observed edit violates the contract; optional means edits may be useful but are not required; required means the task is expected to produce an edit. Omitted defaults to required for compatibility. This is independent of allowedFiles and taskCategory." - removed
Input schema / properties / tasks / items / properties / context / descriptionRemoved value: -"Legacy plain-text task background. If contextCapsule is also supplied, both are sent; avoid duplication." - removed
Input schema / properties / tasks / items / properties / contextCapsule / descriptionRemoved value: -"Optional structured task background the worker cannot infer. It supplements the contract and legacy context; include only useful fields, omit empty fields, never copy the parent transcript, and do not duplicate other fields." - removed
Input schema / properties / tasks / items / properties / contextCapsule / properties / dependencies / descriptionRemoved value: -"Services, libraries, or internal modules the task depends on." - removed
Input schema / properties / tasks / items / properties / contextCapsule / properties / interfaces / descriptionRemoved value: -"Signatures, contracts, or boundaries that must remain stable." - removed
Input schema / properties / tasks / items / properties / contextCapsule / properties / invariants / descriptionRemoved value: -"Rules that must remain true." - removed
Input schema / properties / tasks / items / properties / contextCapsule / properties / knownPitfalls / descriptionRemoved value: -"Task-specific mistakes or failed approaches to avoid." - removed
Input schema / properties / tasks / items / properties / contextCapsule / properties / relevantContext / descriptionRemoved value: -"Task background the worker cannot infer from the repository." - removed
Input schema / properties / tasks / items / properties / contextCapsule / properties / upstreamDecisions / descriptionRemoved value: -"Architecture or design decisions already settled by the parent orchestrator." - removed
Input schema / properties / tasks / items / properties / effort / descriptionRemoved value: -"Worker reasoning effort: medium = mechanical; high = bounded work needing judgement (routine default); xhigh = subtle, cross-cutting, or unclear cause; max = genuinely hard. Rate this task's difficulty, not project importance." - removed
Input schema / properties / tasks / items / properties / effortReason / descriptionRemoved value: -"One sentence justifying the effort from this task's difficulty." - removed
Input schema / properties / tasks / items / properties / forbiddenFiles / descriptionRemoved value: -"Workspace-relative globs observed edits must not match. Checked after the run and takes precedence over allowedFiles." - removed
Input schema / properties / tasks / items / properties / objective / descriptionRemoved value: -"One bounded executable task. Make the what, why, and expected outcome self-contained because the worker cannot see the conversation." - removed
Input schema / properties / tasks / items / properties / previousAttempts / descriptionRemoved value: -"Prior FAILED or BLOCKED attempts at this objective, so a retry can avoid repeating them and the result can report its attempt number." - removed
Input schema / properties / tasks / items / properties / previousAttempts / items / properties / whatWentWrong / descriptionRemoved value: -"Why the earlier attempt did not succeed, in one sentence." - removed
Input schema / properties / tasks / items / properties / taskCategory / descriptionRemoved value: -"Kind of executable work; it does not determine effort." - removed
Input schema / properties / tasks / items / properties / timeoutSeconds / descriptionRemoved value: -"Optional per-turn wall-clock budget; otherwise uses the configured default (normally 1800 seconds)." - removed
Input schema / properties / tasks / items / properties / verificationCommands / descriptionRemoved value: -"Targeted deterministic checks that prove the bounded task; use a full suite only when the task genuinely requires it. The worker runs and reports them, and the orchestrator independently processes each under the configured policy. Executed orchestrator rows are authoritative, while refused or skipped rows prove nothing. Default allowlist mode refuses shell syntax." - removed
Input schema / properties / workingDirectory / descriptionRemoved value: -"Absolute path. Defaults to the orchestrator's working directory." - changed
Output schema / (root)Previous value: -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "additionalProperties": false, - "properties": { - "batchId": { - "type": "string" - }, - "durationSeconds": { - "type": "number" - }, - "failed": { - "type": "number" - }, - "integrated": { - "description": "Whether completed worker edits are now present in the requested workspace.", - "type": "boolean" - }, - "integrationConflicts": { - "description": "Parallel integration only: files more than one worker actually changed. Non-empty means nothing was integrated and you must merge them yourself. Sequential shared-workspace batches return an empty array.", - "items": { - "additionalProperties": false, - "properties": { - "path": { - "type": "string" - }, - "tasks": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "path", - "tasks" - ], - "type": "object" - }, - "type": "array" - }, - "integrationSummary": { - "type": "string" - }, - "maxParallel": { - "type": "number" - }, - "mode": { - "enum": [ - "parallel", - "sequential" - ], - "type": "string" - }, - "passed": { - "type": "number" - }, - "reviewChecklist": { - "description": "Batch-level integration and risk checks the parent orchestrator must still make.", - "items": { - "type": "string" - }, - "type": "array" - }, - "scopeConflicts": { - "description": "Declared scopes that could match the same files.", - "items": { - "type": "string" - }, - "type": "array" - }, - "taskCount": { - "type": "number" - }, - "tasks": { - "items": { - "additionalProperties": false, - "properties": { - "changedFiles": { - "description": "Workspace-relative paths this task changed.", - "items": { - "type": "string" - }, - "type": "array" - }, - "diff": { - "description": "Unified diff from the task's worktree.", - "type": "string" - }, - "effort": { - "type": "string" - }, - "effortReason": { - "type": "string" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "objective": { - "type": "string" - }, - "result": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "attempt": { - "description": "Attempt number for this objective, from `previousAttempts`.", - "type": "number" - }, - "changeIntent": { - "description": "Selected change intent carried into the review evidence.", - "enum": [ - "forbidden", - "optional", - "required" - ], - "type": "string" - }, - "continuationReference": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Opaque, single-use, server-lifetime reference for one explicit continuation; null when this result cannot be continued or the bound was consumed." - }, - "discrepancies": { - "description": "Concrete mismatches between claims and observed evidence. Non-empty means do not accept the result as-is.", - "items": { - "type": "string" - }, - "type": "array" - }, - "durationSeconds": { - "type": "number" - }, - "effort": { - "type": "string" - }, - "effortReason": { - "type": "string" - }, - "errors": { - "description": "Runtime errors surfaced during the turn.", - "items": { - "type": "string" - }, - "type": "array" - }, - "escalationAdvice": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "When the task did not pass, what to change before retrying — including whether raising effort is actually justified." - }, - "filesChanged": { - "description": "Union of runtime-observed and worker-claimed edits. observed: false means the runtime recorded no matching patch.", - "items": { - "additionalProperties": false, - "properties": { - "kind": { - "type": "string" - }, - "observed": { - "description": "True if the Codex runtime itself recorded this edit.", - "type": "boolean" - }, - "path": { - "type": "string" - }, - "why": { - "type": "string" - } - }, - "required": [ - "path", - "kind", - "why", - "observed" - ], - "type": "object" - }, - "type": "array" - }, - "followUps": { - "items": { - "type": "string" - }, - "type": "array" - }, - "model": { - "type": "string" - }, - "notes": { - "type": "string" - }, - "repair": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "attempted": { - "type": "boolean" - }, - "classification": { - "enum": [ - "not-requested", - "not-needed", - "local-verification", - "read-only", - "contract-or-requirement", - "scope-or-conflict", - "environment-or-tooling", - "security-or-trust-boundary", - "wider-scope" - ], - "type": "string" - }, - "failureEvidence": { - "items": { - "additionalProperties": false, - "properties": { - "command": { - "type": "string" - }, - "execution": { - "enum": [ - "argv", - "shell" - ], - "type": "string" - }, - "exitCode": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "output": { - "type": "string" - } - }, - "required": [ - "command", - "execution", - "exitCode", - "output" - ], - "type": "object" - }, - "type": "array" - }, - "reason": { - "type": "string" - }, - "requested": { - "type": "boolean" - } - }, - "required": [ - "requested", - "attempted", - "classification", - "reason", - "failureEvidence" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Bounded automatic-repair decision and the concise authoritative failure evidence supplied to the resumed worker. Null or omitted when not requested." - }, - "reviewChecklist": { - "description": "Risk-based checks the parent orchestrator must still make before accepting.", - "items": { - "type": "string" - }, - "type": "array" - }, - "scopeViolations": { - "description": "Observed edits outside allowedFiles, matching forbiddenFiles, or escaping the workspace. Non-empty requires deeper review.", - "items": { - "type": "string" - }, - "type": "array" - }, - "summary": { - "description": "Worker's summary of what it did.", - "type": "string" - }, - "trustworthy": { - "description": "False when claims conflict with observed evidence or runtime errors occurred; scrutinize the result before accepting.", - "type": "boolean" - }, - "usage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "cacheWriteInputTokens": { - "type": "number" - }, - "cachedInputTokens": { - "type": "number" - }, - "inputTokens": { - "type": "number" - }, - "outputTokens": { - "type": "number" - }, - "reasoningOutputTokens": { - "type": "number" - } - }, - "required": [ - "inputTokens", - "cachedInputTokens", - "outputTokens", - "reasoningOutputTokens" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "verdict": { - "description": "Orchestrator verdict from observed scope and configured verification; not copied from the worker's claim.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "verification": { - "description": "Verification outcomes with provenance and execution status; use orchestrator rows to determine what actually ran.", - "items": { - "additionalProperties": false, - "properties": { - "command": { - "type": "string" - }, - "execution": { - "description": "argv or shell = executed here; rejected = refused; skipped = disabled; reported = worker-only. Only successful executed rows prove a command.", - "enum": [ - "argv", - "shell", - "rejected", - "skipped", - "reported" - ], - "type": "string" - }, - "exitCode": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "output": { - "type": "string" - }, - "passed": { - "type": "boolean" - }, - "source": { - "description": "Result provenance. Orchestrator rows authoritatively record execution, refusal, or skipping; worker rows are self-reported.", - "enum": [ - "orchestrator", - "worker" - ], - "type": "string" - } - }, - "required": [ - "command", - "source", - "execution", - "exitCode", - "passed", - "output" - ], - "type": "object" - }, - "type": "array" - }, - "verificationMode": { - "description": "Execution policy in force: allowlist, off, or shell.", - "type": "string" - }, - "workerClaimedFailureCauses": { - "description": "Normalized worker-declared failure causes. This is claim evidence, not an orchestrator repair or retry classification. Current results always include it; the field is optional only for backwards-compatible consumers.", - "items": { - "enum": [ - "verification", - "requirements", - "implementation", - "environment-tooling", - "timeout", - "blocked", - "unclassified" - ], - "type": "string" - }, - "type": "array" - }, - "workerClaimedStatus": { - "description": "What the worker reported. Compare against `verdict`.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "workerThreadId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Codex thread id of the worker, for inspection; continuation uses an opaque reference." - } - }, - "required": [ - "changeIntent", - "verdict", - "workerClaimedStatus", - "trustworthy", - "workerThreadId", - "continuationReference", - "model", - "effort", - "effortReason", - "attempt", - "summary", - "notes", - "followUps", - "filesChanged", - "verification", - "verificationMode", - "scopeViolations", - "discrepancies", - "reviewChecklist", - "escalationAdvice", - "durationSeconds", - "usage", - "errors" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Single-task result at the batch's requested resultDetail, or null if the task never ran." - }, - "state": { - "enum": [ - "queued", - "running", - "completed", - "failed", - "timedOut", - "cancelled" - ], - "type": "string" - }, - "taskId": { - "description": "Identifier used in logs, worktree paths, and conflicts.", - "type": "string" - }, - "warnings": { - "items": { - "type": "string" - }, - "type": "array" - }, - "worktreePath": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Set when the worktree was kept for inspection; null when cleaned up." - } - }, - "required": [ - "taskId", - "state", - "objective", - "effort", - "effortReason", - "result", - "changedFiles", - "worktreePath", - "error", - "warnings" - ], - "type": "object" - }, - "type": "array" - }, - "warnings": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "batchId", - "mode", - "maxParallel", - "taskCount", - "passed", - "failed", - "durationSeconds", - "tasks", - "scopeConflicts", - "integrationConflicts", - "integrated", - "integrationSummary", - "warnings", - "reviewChecklist" - ], - "type": "object" -}New value: +null
- Added
routing_preflight
3 tool updates
v0.9.0- Added
continue_task - Changed
delegate_task11 fields changed- changed
Input schema / properties / activityLabel / descriptionPrevious value: -"Optional concise label for local activity views; keep it short and useful (for example, 'Update auth retries'). It is persisted locally and may reveal this brief work description; omit it when that is not appropriate."New value: +"Optional concise, non-sensitive label for local activity views; parents should provide one for each batch task when a safe label is available (for example, 'Update auth retries'). It is persisted locally and may reveal this brief work description; omit it when that is not appropriate. Never derive it from the objective text." - changed
Input schema / properties / allowedFiles / descriptionPrevious value: -"Declared workspace-relative glob scope, checked against observed edits after the run. Empty declares no in-workspace allowlist; workspace confinement remains."New value: +"Declared workspace-relative glob scope, checked against observed edits after the run. Empty declares no in-workspace allowlist and does not declare read-only intent; workspace confinement remains." - added
Input schema / properties / automaticRepairAdded value: +{ + "default": false, + "description": "Opt in to at most one automatic repair turn when the initial result is conservatively classified as a local verification defect. The same worker thread and immutable task contract are reused. Omitted defaults to false.", + "type": "boolean" +} - added
Input schema / properties / changeIntentAdded value: +{ + "default": "required", + "description": "Explicit file-change expectation: forbidden means read-only and any runtime-observed edit violates the contract; optional means edits may be useful but are not required; required means the task is expected to produce an edit. Omitted defaults to required for compatibility. This is independent of allowedFiles and taskCategory.", + "enum": [ + "forbidden", + "optional", + "required" + ], + "type": "string" +} - added
Output schema / properties / changeIntentAdded value: +{ + "description": "Selected change intent carried into the review evidence.", + "enum": [ + "forbidden", + "optional", + "required" + ], + "type": "string" +} - added
Output schema / properties / continuationReferenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Opaque, single-use, server-lifetime reference for one explicit continuation; null when this result cannot be continued or the bound was consumed." +} - added
Output schema / properties / repairAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "attempted": { + "type": "boolean" + }, + "classification": { + "enum": [ + "not-requested", + "not-needed", + "local-verification", + "read-only", + "contract-or-requirement", + "scope-or-conflict", + "environment-or-tooling", + "security-or-trust-boundary", + "wider-scope" + ], + "type": "string" + }, + "failureEvidence": { + "items": { + "additionalProperties": false, + "properties": { + "command": { + "type": "string" + }, + "execution": { + "enum": [ + "argv", + "shell" + ], + "type": "string" + }, + "exitCode": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "output": { + "type": "string" + } + }, + "required": [ + "command", + "execution", + "exitCode", + "output" + ], + "type": "object" + }, + "type": "array" + }, + "reason": { + "type": "string" + }, + "requested": { + "type": "boolean" + } + }, + "required": [ + "requested", + "attempted", + "classification", + "reason", + "failureEvidence" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Bounded automatic-repair decision and the concise authoritative failure evidence supplied to the resumed worker. Null or omitted when not requested." +} - changed
Output schema / properties / usage / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "cachedInputTokens": { - "type": "number" - }, - "inputTokens": { - "type": "number" - }, - "outputTokens": { - "type": "number" - }, - "reasoningOutputTokens": { - "type": "number" - } - }, - "required": [ - "inputTokens", - "cachedInputTokens", - "outputTokens", - "reasoningOutputTokens" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "cacheWriteInputTokens": { + "type": "number" + }, + "cachedInputTokens": { + "type": "number" + }, + "inputTokens": { + "type": "number" + }, + "outputTokens": { + "type": "number" + }, + "reasoningOutputTokens": { + "type": "number" + } + }, + "required": [ + "inputTokens", + "cachedInputTokens", + "outputTokens", + "reasoningOutputTokens" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / workerClaimedFailureCausesAdded value: +{ + "description": "Normalized worker-declared failure causes. This is claim evidence, not an orchestrator repair or retry classification. Current results always include it; the field is optional only for backwards-compatible consumers.", + "items": { + "enum": [ + "verification", + "requirements", + "implementation", + "environment-tooling", + "timeout", + "blocked", + "unclassified" + ], + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / workerThreadId / descriptionPrevious value: -"Codex thread id of the worker, for inspecting or resuming it."New value: +"Codex thread id of the worker, for inspection; continuation uses an opaque reference." - changed
Output schema / requiredPrevious value: -[ - "verdict", - "workerClaimedStatus", - "trustworthy", - "workerThreadId", - "model", - "effort", - "effortReason", - "attempt", - "summary", - "notes", - "followUps", - "filesChanged", - "verification", - "verificationMode", - "scopeViolations", - "discrepancies", - "reviewChecklist", - "escalationAdvice", - "durationSeconds", - "usage", - "errors" -]New value: +[ + "changeIntent", + "verdict", + "workerClaimedStatus", + "trustworthy", + "workerThreadId", + "continuationReference", + "model", + "effort", + "effortReason", + "attempt", + "summary", + "notes", + "followUps", + "filesChanged", + "verification", + "verificationMode", + "scopeViolations", + "discrepancies", + "reviewChecklist", + "escalationAdvice", + "durationSeconds", + "usage", + "errors" +]
- Changed
delegate_tasks10 fields changed- changed
Input schema / properties / allowOverlappingScopes / descriptionPrevious value: -"Parallel only: permit potentially overlapping declared scopes. Actual same-file edits still prevent automatic integration."New value: +"Parallel only: this call-level escape hatch permits potentially overlapping declared scopes. Actual same-file edits still prevent automatic integration." - changed
Input schema / properties / resultDetail / descriptionPrevious value: -"Choose compact routinely; it removes only successful verification output. Use full when that output is needed. The schema default remains full for backwards compatibility; failed, refused, and skipped output is retained."New value: +"Batch-level result detail applied uniformly to every returned task result; it is not a per-task field. Compact removes only successful verification output, while the schema default remains full for backwards compatibility." - changed
Input schema / properties / tasks / descriptionPrevious value: -"Task contracts; a batch accepts at most 12 tasks. Batch size is not concurrency: sequential mode runs one at a time, while parallel mode runs at most 3 workers at once and queues the rest. Parallel tasks need disjoint scopes unless overlap is explicitly allowed."New value: +"Task contracts; this API is intended for multiple meaningful tasks but accepts one or more and at most 12 tasks. A one-task batch remains accepted for compatibility; prefer delegate_task for a single task. Batch size is not concurrency: sequential mode runs one at a time, while parallel mode runs at most 3 workers at once and queues the rest. Parallel tasks need disjoint scopes unless this call sets allowOverlappingScopes:true; actual same-file edits still prevent automatic integration. Provide each task an optional concise, non-sensitive activityLabel when one is safe; labels are explicit only and never derived from objective text." - changed
Input schema / properties / tasks / items / properties / activityLabel / descriptionPrevious value: -"Optional concise label for local activity views; keep it short and useful (for example, 'Update auth retries'). It is persisted locally and may reveal this brief work description; omit it when that is not appropriate."New value: +"Optional concise, non-sensitive label for local activity views; parents should provide one for each batch task when a safe label is available (for example, 'Update auth retries'). It is persisted locally and may reveal this brief work description; omit it when that is not appropriate. Never derive it from the objective text." - changed
Input schema / properties / tasks / items / properties / allowedFiles / descriptionPrevious value: -"Declared workspace-relative glob scope, checked against observed edits after the run. Empty declares no in-workspace allowlist; workspace confinement remains."New value: +"Declared workspace-relative glob scope, checked against observed edits after the run. Empty declares no in-workspace allowlist and does not declare read-only intent; workspace confinement remains." - added
Input schema / properties / tasks / items / properties / automaticRepairAdded value: +{ + "default": false, + "description": "Opt in to at most one automatic repair turn when the initial result is conservatively classified as a local verification defect. The same worker thread and immutable task contract are reused. Omitted defaults to false.", + "type": "boolean" +} - added
Input schema / properties / tasks / items / properties / changeIntentAdded value: +{ + "default": "required", + "description": "Explicit file-change expectation: forbidden means read-only and any runtime-observed edit violates the contract; optional means edits may be useful but are not required; required means the task is expected to produce an edit. Omitted defaults to required for compatibility. This is independent of allowedFiles and taskCategory.", + "enum": [ + "forbidden", + "optional", + "required" + ], + "type": "string" +} - changed
Output schema / properties / integrationConflicts / descriptionPrevious value: -"Files more than one worker actually changed. Non-empty means nothing was integrated and you must merge them yourself."New value: +"Parallel integration only: files more than one worker actually changed. Non-empty means nothing was integrated and you must merge them yourself. Sequential shared-workspace batches return an empty array." - changed
Output schema / properties / tasks / items / properties / result / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "attempt": { - "description": "Attempt number for this objective, from `previousAttempts`.", - "type": "number" - }, - "discrepancies": { - "description": "Concrete mismatches between claims and observed evidence. Non-empty means do not accept the result as-is.", - "items": { - "type": "string" - }, - "type": "array" - }, - "durationSeconds": { - "type": "number" - }, - "effort": { - "type": "string" - }, - "effortReason": { - "type": "string" - }, - "errors": { - "description": "Runtime errors surfaced during the turn.", - "items": { - "type": "string" - }, - "type": "array" - }, - "escalationAdvice": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "When the task did not pass, what to change before retrying — including whether raising effort is actually justified." - }, - "filesChanged": { - "description": "Union of runtime-observed and worker-claimed edits. observed: false means the runtime recorded no matching patch.", - "items": { - "additionalProperties": false, - "properties": { - "kind": { - "type": "string" - }, - "observed": { - "description": "True if the Codex runtime itself recorded this edit.", - "type": "boolean" - }, - "path": { - "type": "string" - }, - "why": { - "type": "string" - } - }, - "required": [ - "path", - "kind", - "why", - "observed" - ], - "type": "object" - }, - "type": "array" - }, - "followUps": { - "items": { - "type": "string" - }, - "type": "array" - }, - "model": { - "type": "string" - }, - "notes": { - "type": "string" - }, - "reviewChecklist": { - "description": "Risk-based checks the parent orchestrator must still make before accepting.", - "items": { - "type": "string" - }, - "type": "array" - }, - "scopeViolations": { - "description": "Observed edits outside allowedFiles, matching forbiddenFiles, or escaping the workspace. Non-empty requires deeper review.", - "items": { - "type": "string" - }, - "type": "array" - }, - "summary": { - "description": "Worker's summary of what it did.", - "type": "string" - }, - "trustworthy": { - "description": "False when claims conflict with observed evidence or runtime errors occurred; scrutinize the result before accepting.", - "type": "boolean" - }, - "usage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "cachedInputTokens": { - "type": "number" - }, - "inputTokens": { - "type": "number" - }, - "outputTokens": { - "type": "number" - }, - "reasoningOutputTokens": { - "type": "number" - } - }, - "required": [ - "inputTokens", - "cachedInputTokens", - "outputTokens", - "reasoningOutputTokens" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "verdict": { - "description": "Orchestrator verdict from observed scope and configured verification; not copied from the worker's claim.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "verification": { - "description": "Verification outcomes with provenance and execution status; use orchestrator rows to determine what actually ran.", - "items": { - "additionalProperties": false, - "properties": { - "command": { - "type": "string" - }, - "execution": { - "description": "argv or shell = executed here; rejected = refused; skipped = disabled; reported = worker-only. Only successful executed rows prove a command.", - "enum": [ - "argv", - "shell", - "rejected", - "skipped", - "reported" - ], - "type": "string" - }, - "exitCode": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "output": { - "type": "string" - }, - "passed": { - "type": "boolean" - }, - "source": { - "description": "Result provenance. Orchestrator rows authoritatively record execution, refusal, or skipping; worker rows are self-reported.", - "enum": [ - "orchestrator", - "worker" - ], - "type": "string" - } - }, - "required": [ - "command", - "source", - "execution", - "exitCode", - "passed", - "output" - ], - "type": "object" - }, - "type": "array" - }, - "verificationMode": { - "description": "Execution policy in force: allowlist, off, or shell.", - "type": "string" - }, - "workerClaimedStatus": { - "description": "What the worker reported. Compare against `verdict`.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "workerThreadId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Codex thread id of the worker, for inspecting or resuming it." - } - }, - "required": [ - "verdict", - "workerClaimedStatus", - "trustworthy", - "workerThreadId", - "model", - "effort", - "effortReason", - "attempt", - "summary", - "notes", - "followUps", - "filesChanged", - "verification", - "verificationMode", - "scopeViolations", - "discrepancies", - "reviewChecklist", - "escalationAdvice", - "durationSeconds", - "usage", - "errors" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "attempt": { + "description": "Attempt number for this objective, from `previousAttempts`.", + "type": "number" + }, + "changeIntent": { + "description": "Selected change intent carried into the review evidence.", + "enum": [ + "forbidden", + "optional", + "required" + ], + "type": "string" + }, + "continuationReference": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Opaque, single-use, server-lifetime reference for one explicit continuation; null when this result cannot be continued or the bound was consumed." + }, + "discrepancies": { + "description": "Concrete mismatches between claims and observed evidence. Non-empty means do not accept the result as-is.", + "items": { + "type": "string" + }, + "type": "array" + }, + "durationSeconds": { + "type": "number" + }, + "effort": { + "type": "string" + }, + "effortReason": { + "type": "string" + }, + "errors": { + "description": "Runtime errors surfaced during the turn.", + "items": { + "type": "string" + }, + "type": "array" + }, + "escalationAdvice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "When the task did not pass, what to change before retrying — including whether raising effort is actually justified." + }, + "filesChanged": { + "description": "Union of runtime-observed and worker-claimed edits. observed: false means the runtime recorded no matching patch.", + "items": { + "additionalProperties": false, + "properties": { + "kind": { + "type": "string" + }, + "observed": { + "description": "True if the Codex runtime itself recorded this edit.", + "type": "boolean" + }, + "path": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "required": [ + "path", + "kind", + "why", + "observed" + ], + "type": "object" + }, + "type": "array" + }, + "followUps": { + "items": { + "type": "string" + }, + "type": "array" + }, + "model": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "repair": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "attempted": { + "type": "boolean" + }, + "classification": { + "enum": [ + "not-requested", + "not-needed", + "local-verification", + "read-only", + "contract-or-requirement", + "scope-or-conflict", + "environment-or-tooling", + "security-or-trust-boundary", + "wider-scope" + ], + "type": "string" + }, + "failureEvidence": { + "items": { + "additionalProperties": false, + "properties": { + "command": { + "type": "string" + }, + "execution": { + "enum": [ + "argv", + "shell" + ], + "type": "string" + }, + "exitCode": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "output": { + "type": "string" + } + }, + "required": [ + "command", + "execution", + "exitCode", + "output" + ], + "type": "object" + }, + "type": "array" + }, + "reason": { + "type": "string" + }, + "requested": { + "type": "boolean" + } + }, + "required": [ + "requested", + "attempted", + "classification", + "reason", + "failureEvidence" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Bounded automatic-repair decision and the concise authoritative failure evidence supplied to the resumed worker. Null or omitted when not requested." + }, + "reviewChecklist": { + "description": "Risk-based checks the parent orchestrator must still make before accepting.", + "items": { + "type": "string" + }, + "type": "array" + }, + "scopeViolations": { + "description": "Observed edits outside allowedFiles, matching forbiddenFiles, or escaping the workspace. Non-empty requires deeper review.", + "items": { + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Worker's summary of what it did.", + "type": "string" + }, + "trustworthy": { + "description": "False when claims conflict with observed evidence or runtime errors occurred; scrutinize the result before accepting.", + "type": "boolean" + }, + "usage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "cacheWriteInputTokens": { + "type": "number" + }, + "cachedInputTokens": { + "type": "number" + }, + "inputTokens": { + "type": "number" + }, + "outputTokens": { + "type": "number" + }, + "reasoningOutputTokens": { + "type": "number" + } + }, + "required": [ + "inputTokens", + "cachedInputTokens", + "outputTokens", + "reasoningOutputTokens" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "verdict": { + "description": "Orchestrator verdict from observed scope and configured verification; not copied from the worker's claim.", + "enum": [ + "PASS", + "BLOCKED", + "FAILED" + ], + "type": "string" + }, + "verification": { + "description": "Verification outcomes with provenance and execution status; use orchestrator rows to determine what actually ran.", + "items": { + "additionalProperties": false, + "properties": { + "command": { + "type": "string" + }, + "execution": { + "description": "argv or shell = executed here; rejected = refused; skipped = disabled; reported = worker-only. Only successful executed rows prove a command.", + "enum": [ + "argv", + "shell", + "rejected", + "skipped", + "reported" + ], + "type": "string" + }, + "exitCode": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "output": { + "type": "string" + }, + "passed": { + "type": "boolean" + }, + "source": { + "description": "Result provenance. Orchestrator rows authoritatively record execution, refusal, or skipping; worker rows are self-reported.", + "enum": [ + "orchestrator", + "worker" + ], + "type": "string" + } + }, + "required": [ + "command", + "source", + "execution", + "exitCode", + "passed", + "output" + ], + "type": "object" + }, + "type": "array" + }, + "verificationMode": { + "description": "Execution policy in force: allowlist, off, or shell.", + "type": "string" + }, + "workerClaimedFailureCauses": { + "description": "Normalized worker-declared failure causes. This is claim evidence, not an orchestrator repair or retry classification. Current results always include it; the field is optional only for backwards-compatible consumers.", + "items": { + "enum": [ + "verification", + "requirements", + "implementation", + "environment-tooling", + "timeout", + "blocked", + "unclassified" + ], + "type": "string" + }, + "type": "array" + }, + "workerClaimedStatus": { + "description": "What the worker reported. Compare against `verdict`.", + "enum": [ + "PASS", + "BLOCKED", + "FAILED" + ], + "type": "string" + }, + "workerThreadId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Codex thread id of the worker, for inspection; continuation uses an opaque reference." + } + }, + "required": [ + "changeIntent", + "verdict", + "workerClaimedStatus", + "trustworthy", + "workerThreadId", + "continuationReference", + "model", + "effort", + "effortReason", + "attempt", + "summary", + "notes", + "followUps", + "filesChanged", + "verification", + "verificationMode", + "scopeViolations", + "discrepancies", + "reviewChecklist", + "escalationAdvice", + "durationSeconds", + "usage", + "errors" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / tasks / items / properties / result / descriptionPrevious value: -"Single-task result at the requested resultDetail, or null if the task never ran."New value: +"Single-task result at the batch's requested resultDetail, or null if the task never ran."
2 tool updates
v0.8.0- Changed
delegate_task24 fields changed- changed
Input schema / properties / acceptanceCriteria / descriptionPrevious value: -"Observable, checkable conditions that define done — something you can confirm by reading the diff or running a command."New value: +"Observable conditions that define done and can be judged from evidence." - added
Input schema / properties / activityLabelAdded value: +{ + "description": "Optional concise label for local activity views; keep it short and useful (for example, 'Update auth retries'). It is persisted locally and may reveal this brief work description; omit it when that is not appropriate.", + "maxLength": 80, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / allowedFiles / descriptionPrevious value: -"Glob patterns the worker may create or modify (e.g. 'src/auth/**'). Empty means unrestricted, which is discouraged. Enforced after the run."New value: +"Declared workspace-relative glob scope, checked against observed edits after the run. Empty declares no in-workspace allowlist; workspace confinement remains." - changed
Input schema / properties / context / descriptionPrevious value: -"Background the worker cannot infer from the repo: prior decisions, constraints, gotchas, relevant files."New value: +"Legacy plain-text task background. If contextCapsule is also supplied, both are sent; avoid duplication." - added
Input schema / properties / contextCapsuleAdded value: +{ + "description": "Optional structured task background the worker cannot infer. It supplements the contract and legacy context; include only useful fields, omit empty fields, never copy the parent transcript, and do not duplicate other fields.", + "properties": { + "dependencies": { + "description": "Services, libraries, or internal modules the task depends on.", + "type": "string" + }, + "interfaces": { + "description": "Signatures, contracts, or boundaries that must remain stable.", + "type": "string" + }, + "invariants": { + "description": "Rules that must remain true.", + "type": "string" + }, + "knownPitfalls": { + "description": "Task-specific mistakes or failed approaches to avoid.", + "type": "string" + }, + "relevantContext": { + "description": "Task background the worker cannot infer from the repository.", + "type": "string" + }, + "upstreamDecisions": { + "description": "Architecture or design decisions already settled by the parent orchestrator.", + "type": "string" + } + }, + "type": "object" +} - changed
Input schema / properties / effort / descriptionPrevious value: -"Reasoning effort for the worker. medium = mechanical, high = default for real implementation work, xhigh = subtle or cross-cutting, max = genuinely hard problems only. Rate the DELEGATED TASK's own difficulty, never the parent project's importance."New value: +"Worker reasoning effort: medium = mechanical; high = bounded work needing judgement (routine default); xhigh = subtle, cross-cutting, or unclear cause; max = genuinely hard. Rate this task's difficulty, not project importance." - changed
Input schema / properties / effortReason / descriptionPrevious value: -"One sentence justifying the effort in terms of this task's difficulty. Required so effort selection stays deliberate."New value: +"One sentence justifying the effort from this task's difficulty." - changed
Input schema / properties / forbiddenFiles / descriptionPrevious value: -"Glob patterns the worker must not touch (e.g. 'package.json'). Takes precedence over allowedFiles. Forbid the test files when tests are the verification."New value: +"Workspace-relative globs observed edits must not match. Checked after the run and takes precedence over allowedFiles." - changed
Input schema / properties / objective / descriptionPrevious value: -"Single bounded implementation task, written so a worker with no access to your conversation can execute it. State the what and the why."New value: +"One bounded executable task. Make the what, why, and expected outcome self-contained because the worker cannot see the conversation." - changed
Input schema / properties / previousAttempts / descriptionPrevious value: -"Escalation history for this same objective. Supply it when re-delegating after a FAILED or BLOCKED result: the worker sees what already failed, and the orchestrator reports the attempt number back to you."New value: +"Prior FAILED or BLOCKED attempts at this objective, so a retry can avoid repeating them and the result can report its attempt number." - added
Input schema / properties / resultDetailAdded value: +{ + "default": "full", + "description": "Choose compact routinely; it removes only successful verification output. Use full when that output is needed. The schema default remains full for backwards compatibility; failed, refused, and skipped output is retained.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - changed
Input schema / properties / taskCategory / descriptionPrevious value: -"Shape of the work. 'investigation' and 'bugfix' more often justify xhigh; 'chore' and 'tests' rarely do."New value: +"Kind of executable work; it does not determine effort." - changed
Input schema / properties / timeoutSeconds / descriptionPrevious value: -"Wall-clock budget for the worker turn. Defaults to 1800."New value: +"Optional per-turn wall-clock budget; otherwise uses the configured default (normally 1800 seconds)." - changed
Input schema / properties / verificationCommands / descriptionPrevious value: -"Shell-free commands proving the work (e.g. 'npm test', 'pytest -q'). The worker runs them AND the orchestrator independently re-runs them after the worker exits; the orchestrator's exit codes are authoritative. Only allowlisted executables run, and pipes/redirects/&&/; are refused."New value: +"Targeted deterministic checks that prove the bounded task; use a full suite only when the task genuinely requires it. The worker runs and reports them, and the orchestrator independently processes each under the configured policy. Executed orchestrator rows are authoritative, while refused or skipped rows prove nothing. Default allowlist mode refuses shell syntax." - changed
Input schema / properties / workingDirectory / descriptionPrevious value: -"Absolute path the worker operates in. Defaults to the orchestrator's current working directory."New value: +"Absolute worker directory; defaults to the orchestrator's current directory." - changed
Output schema / properties / discrepancies / descriptionPrevious value: -"Concrete mismatches between the worker's claims and observed reality. Non-empty means do not accept the result as-is."New value: +"Concrete mismatches between claims and observed evidence. Non-empty means do not accept the result as-is." - changed
Output schema / properties / filesChanged / descriptionPrevious value: -"Union of edits observed by the Codex runtime and edits the worker claimed. `observed: false` means the runtime saw no such patch."New value: +"Union of runtime-observed and worker-claimed edits. observed: false means the runtime recorded no matching patch." - changed
Output schema / properties / reviewChecklist / descriptionPrevious value: -"What you, Sol, must still check yourself before accepting."New value: +"Risk-based checks the parent orchestrator must still make before accepting." - changed
Output schema / properties / scopeViolations / descriptionPrevious value: -"Files touched outside allowedFiles, inside forbiddenFiles, or outside the workspace."New value: +"Observed edits outside allowedFiles, matching forbiddenFiles, or escaping the workspace. Non-empty requires deeper review." - changed
Output schema / properties / trustworthy / descriptionPrevious value: -"False when the worker's claim conflicts with observed evidence. False demands a careful diff review before accepting anything."New value: +"False when claims conflict with observed evidence or runtime errors occurred; scrutinize the result before accepting." - changed
Output schema / properties / verdict / descriptionPrevious value: -"Orchestrator's verdict, derived from independently re-run verification and scope checks — NOT copied from the worker's claim."New value: +"Orchestrator verdict from observed scope and configured verification; not copied from the worker's claim." - changed
Output schema / properties / verification / descriptionPrevious value: -"Verification outcomes. Prefer `source: orchestrator` rows."New value: +"Verification outcomes with provenance and execution status; use orchestrator rows to determine what actually ran." - changed
Output schema / properties / verification / items / properties / execution / descriptionPrevious value: -"How the orchestrator ran it. `argv` = no shell (normal). `rejected` = refused by policy and NOT run. `skipped` = verification disabled. `reported` = the worker's own claim, not executed here. Only argv/shell rows prove anything."New value: +"argv or shell = executed here; rejected = refused; skipped = disabled; reported = worker-only. Only successful executed rows prove a command." - changed
Output schema / properties / verification / items / properties / source / descriptionPrevious value: -"`orchestrator` results are ground truth."New value: +"Result provenance. Orchestrator rows authoritatively record execution, refusal, or skipping; worker rows are self-reported."
- Changed
delegate_tasks23 fields changed- changed
Input schema / properties / allowOverlappingScopes / descriptionPrevious value: -"Run in parallel even when two tasks could touch the same files. Off by default because the result then depends on which worker finishes last."New value: +"Parallel only: permit potentially overlapping declared scopes. Actual same-file edits still prevent automatic integration." - changed
Input schema / properties / integrate / descriptionPrevious value: -"Parallel mode only. Copy each worker's changes back into the workspace when no two workers touched the same file. Set false to review the worktrees yourself before anything moves."New value: +"Parallel only: copy completed worker edits back when observed changed files do not collide. Set false to leave changes in worktrees for review." - changed
Input schema / properties / mode / descriptionPrevious value: -"parallel = tasks are independent; each runs in its own git worktree and results are integrated afterwards. sequential = tasks may depend on each other; they share the workspace and run one at a time, so a later task sees the earlier one's changes."New value: +"sequential = dependent or shared-workspace tasks run in order; parallel = independent tasks run in isolated git worktrees and may be copied back only when integration is enabled and observed changed files do not collide." - added
Input schema / properties / resultDetailAdded value: +{ + "default": "full", + "description": "Choose compact routinely; it removes only successful verification output. Use full when that output is needed. The schema default remains full for backwards compatibility; failed, refused, and skipped output is retained.", + "enum": [ + "full", + "compact" + ], + "type": "string" +} - changed
Input schema / properties / tasks / descriptionPrevious value: -"Task contracts. For parallel mode give each a disjoint allowedFiles scope; overlapping scopes are rejected unless you opt in."New value: +"Task contracts; a batch accepts at most 12 tasks. Batch size is not concurrency: sequential mode runs one at a time, while parallel mode runs at most 3 workers at once and queues the rest. Parallel tasks need disjoint scopes unless overlap is explicitly allowed." - changed
Input schema / properties / tasks / items / properties / acceptanceCriteria / descriptionPrevious value: -"Observable, checkable conditions that define done — something you can confirm by reading the diff or running a command."New value: +"Observable conditions that define done and can be judged from evidence." - added
Input schema / properties / tasks / items / properties / activityLabelAdded value: +{ + "description": "Optional concise label for local activity views; keep it short and useful (for example, 'Update auth retries'). It is persisted locally and may reveal this brief work description; omit it when that is not appropriate.", + "maxLength": 80, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / tasks / items / properties / allowedFiles / descriptionPrevious value: -"Glob patterns the worker may create or modify (e.g. 'src/auth/**'). Empty means unrestricted, which is discouraged. Enforced after the run."New value: +"Declared workspace-relative glob scope, checked against observed edits after the run. Empty declares no in-workspace allowlist; workspace confinement remains." - changed
Input schema / properties / tasks / items / properties / context / descriptionPrevious value: -"Background the worker cannot infer from the repo: prior decisions, constraints, gotchas, relevant files."New value: +"Legacy plain-text task background. If contextCapsule is also supplied, both are sent; avoid duplication." - added
Input schema / properties / tasks / items / properties / contextCapsuleAdded value: +{ + "description": "Optional structured task background the worker cannot infer. It supplements the contract and legacy context; include only useful fields, omit empty fields, never copy the parent transcript, and do not duplicate other fields.", + "properties": { + "dependencies": { + "description": "Services, libraries, or internal modules the task depends on.", + "type": "string" + }, + "interfaces": { + "description": "Signatures, contracts, or boundaries that must remain stable.", + "type": "string" + }, + "invariants": { + "description": "Rules that must remain true.", + "type": "string" + }, + "knownPitfalls": { + "description": "Task-specific mistakes or failed approaches to avoid.", + "type": "string" + }, + "relevantContext": { + "description": "Task background the worker cannot infer from the repository.", + "type": "string" + }, + "upstreamDecisions": { + "description": "Architecture or design decisions already settled by the parent orchestrator.", + "type": "string" + } + }, + "type": "object" +} - changed
Input schema / properties / tasks / items / properties / effort / descriptionPrevious value: -"Reasoning effort for the worker. medium = mechanical, high = default for real implementation work, xhigh = subtle or cross-cutting, max = genuinely hard problems only. Rate the DELEGATED TASK's own difficulty, never the parent project's importance."New value: +"Worker reasoning effort: medium = mechanical; high = bounded work needing judgement (routine default); xhigh = subtle, cross-cutting, or unclear cause; max = genuinely hard. Rate this task's difficulty, not project importance." - changed
Input schema / properties / tasks / items / properties / effortReason / descriptionPrevious value: -"One sentence justifying the effort in terms of this task's difficulty. Required so effort selection stays deliberate."New value: +"One sentence justifying the effort from this task's difficulty." - changed
Input schema / properties / tasks / items / properties / forbiddenFiles / descriptionPrevious value: -"Glob patterns the worker must not touch (e.g. 'package.json'). Takes precedence over allowedFiles. Forbid the test files when tests are the verification."New value: +"Workspace-relative globs observed edits must not match. Checked after the run and takes precedence over allowedFiles." - changed
Input schema / properties / tasks / items / properties / objective / descriptionPrevious value: -"Single bounded implementation task, written so a worker with no access to your conversation can execute it. State the what and the why."New value: +"One bounded executable task. Make the what, why, and expected outcome self-contained because the worker cannot see the conversation." - changed
Input schema / properties / tasks / items / properties / previousAttempts / descriptionPrevious value: -"Escalation history for this same objective. Supply it when re-delegating after a FAILED or BLOCKED result: the worker sees what already failed, and the orchestrator reports the attempt number back to you."New value: +"Prior FAILED or BLOCKED attempts at this objective, so a retry can avoid repeating them and the result can report its attempt number." - changed
Input schema / properties / tasks / items / properties / taskCategory / descriptionPrevious value: -"Shape of the work. 'investigation' and 'bugfix' more often justify xhigh; 'chore' and 'tests' rarely do."New value: +"Kind of executable work; it does not determine effort." - changed
Input schema / properties / tasks / items / properties / timeoutSeconds / descriptionPrevious value: -"Wall-clock budget for the worker turn. Defaults to 1800."New value: +"Optional per-turn wall-clock budget; otherwise uses the configured default (normally 1800 seconds)." - changed
Input schema / properties / tasks / items / properties / verificationCommands / descriptionPrevious value: -"Shell-free commands proving the work (e.g. 'npm test', 'pytest -q'). The worker runs them AND the orchestrator independently re-runs them after the worker exits; the orchestrator's exit codes are authoritative. Only allowlisted executables run, and pipes/redirects/&&/; are refused."New value: +"Targeted deterministic checks that prove the bounded task; use a full suite only when the task genuinely requires it. The worker runs and reports them, and the orchestrator independently processes each under the configured policy. Executed orchestrator rows are authoritative, while refused or skipped rows prove nothing. Default allowlist mode refuses shell syntax." - added
Input schema / properties / tasks / maxItemsAdded value: +12 - changed
Output schema / properties / integrated / descriptionPrevious value: -"Whether worker changes are now present in the workspace."New value: +"Whether completed worker edits are now present in the requested workspace." - added
Output schema / properties / reviewChecklist / descriptionAdded value: +"Batch-level integration and risk checks the parent orchestrator must still make." - changed
Output schema / properties / tasks / items / properties / result / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "attempt": { - "description": "Attempt number for this objective, from `previousAttempts`.", - "type": "number" - }, - "discrepancies": { - "description": "Concrete mismatches between the worker's claims and observed reality. Non-empty means do not accept the result as-is.", - "items": { - "type": "string" - }, - "type": "array" - }, - "durationSeconds": { - "type": "number" - }, - "effort": { - "type": "string" - }, - "effortReason": { - "type": "string" - }, - "errors": { - "description": "Runtime errors surfaced during the turn.", - "items": { - "type": "string" - }, - "type": "array" - }, - "escalationAdvice": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "When the task did not pass, what to change before retrying — including whether raising effort is actually justified." - }, - "filesChanged": { - "description": "Union of edits observed by the Codex runtime and edits the worker claimed. `observed: false` means the runtime saw no such patch.", - "items": { - "additionalProperties": false, - "properties": { - "kind": { - "type": "string" - }, - "observed": { - "description": "True if the Codex runtime itself recorded this edit.", - "type": "boolean" - }, - "path": { - "type": "string" - }, - "why": { - "type": "string" - } - }, - "required": [ - "path", - "kind", - "why", - "observed" - ], - "type": "object" - }, - "type": "array" - }, - "followUps": { - "items": { - "type": "string" - }, - "type": "array" - }, - "model": { - "type": "string" - }, - "notes": { - "type": "string" - }, - "reviewChecklist": { - "description": "What you, Sol, must still check yourself before accepting.", - "items": { - "type": "string" - }, - "type": "array" - }, - "scopeViolations": { - "description": "Files touched outside allowedFiles, inside forbiddenFiles, or outside the workspace.", - "items": { - "type": "string" - }, - "type": "array" - }, - "summary": { - "description": "Worker's summary of what it did.", - "type": "string" - }, - "trustworthy": { - "description": "False when the worker's claim conflicts with observed evidence. False demands a careful diff review before accepting anything.", - "type": "boolean" - }, - "usage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "cachedInputTokens": { - "type": "number" - }, - "inputTokens": { - "type": "number" - }, - "outputTokens": { - "type": "number" - }, - "reasoningOutputTokens": { - "type": "number" - } - }, - "required": [ - "inputTokens", - "cachedInputTokens", - "outputTokens", - "reasoningOutputTokens" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "verdict": { - "description": "Orchestrator's verdict, derived from independently re-run verification and scope checks — NOT copied from the worker's claim.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "verification": { - "description": "Verification outcomes. Prefer `source: orchestrator` rows.", - "items": { - "additionalProperties": false, - "properties": { - "command": { - "type": "string" - }, - "execution": { - "description": "How the orchestrator ran it. `argv` = no shell (normal). `rejected` = refused by policy and NOT run. `skipped` = verification disabled. `reported` = the worker's own claim, not executed here. Only argv/shell rows prove anything.", - "enum": [ - "argv", - "shell", - "rejected", - "skipped", - "reported" - ], - "type": "string" - }, - "exitCode": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "output": { - "type": "string" - }, - "passed": { - "type": "boolean" - }, - "source": { - "description": "`orchestrator` results are ground truth.", - "enum": [ - "orchestrator", - "worker" - ], - "type": "string" - } - }, - "required": [ - "command", - "source", - "execution", - "exitCode", - "passed", - "output" - ], - "type": "object" - }, - "type": "array" - }, - "verificationMode": { - "description": "Execution policy in force: allowlist, off, or shell.", - "type": "string" - }, - "workerClaimedStatus": { - "description": "What the worker reported. Compare against `verdict`.", - "enum": [ - "PASS", - "BLOCKED", - "FAILED" - ], - "type": "string" - }, - "workerThreadId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Codex thread id of the worker, for inspecting or resuming it." - } - }, - "required": [ - "verdict", - "workerClaimedStatus", - "trustworthy", - "workerThreadId", - "model", - "effort", - "effortReason", - "attempt", - "summary", - "notes", - "followUps", - "filesChanged", - "verification", - "verificationMode", - "scopeViolations", - "discrepancies", - "reviewChecklist", - "escalationAdvice", - "durationSeconds", - "usage", - "errors" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "attempt": { + "description": "Attempt number for this objective, from `previousAttempts`.", + "type": "number" + }, + "discrepancies": { + "description": "Concrete mismatches between claims and observed evidence. Non-empty means do not accept the result as-is.", + "items": { + "type": "string" + }, + "type": "array" + }, + "durationSeconds": { + "type": "number" + }, + "effort": { + "type": "string" + }, + "effortReason": { + "type": "string" + }, + "errors": { + "description": "Runtime errors surfaced during the turn.", + "items": { + "type": "string" + }, + "type": "array" + }, + "escalationAdvice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "When the task did not pass, what to change before retrying — including whether raising effort is actually justified." + }, + "filesChanged": { + "description": "Union of runtime-observed and worker-claimed edits. observed: false means the runtime recorded no matching patch.", + "items": { + "additionalProperties": false, + "properties": { + "kind": { + "type": "string" + }, + "observed": { + "description": "True if the Codex runtime itself recorded this edit.", + "type": "boolean" + }, + "path": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "required": [ + "path", + "kind", + "why", + "observed" + ], + "type": "object" + }, + "type": "array" + }, + "followUps": { + "items": { + "type": "string" + }, + "type": "array" + }, + "model": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "reviewChecklist": { + "description": "Risk-based checks the parent orchestrator must still make before accepting.", + "items": { + "type": "string" + }, + "type": "array" + }, + "scopeViolations": { + "description": "Observed edits outside allowedFiles, matching forbiddenFiles, or escaping the workspace. Non-empty requires deeper review.", + "items": { + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Worker's summary of what it did.", + "type": "string" + }, + "trustworthy": { + "description": "False when claims conflict with observed evidence or runtime errors occurred; scrutinize the result before accepting.", + "type": "boolean" + }, + "usage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "cachedInputTokens": { + "type": "number" + }, + "inputTokens": { + "type": "number" + }, + "outputTokens": { + "type": "number" + }, + "reasoningOutputTokens": { + "type": "number" + } + }, + "required": [ + "inputTokens", + "cachedInputTokens", + "outputTokens", + "reasoningOutputTokens" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "verdict": { + "description": "Orchestrator verdict from observed scope and configured verification; not copied from the worker's claim.", + "enum": [ + "PASS", + "BLOCKED", + "FAILED" + ], + "type": "string" + }, + "verification": { + "description": "Verification outcomes with provenance and execution status; use orchestrator rows to determine what actually ran.", + "items": { + "additionalProperties": false, + "properties": { + "command": { + "type": "string" + }, + "execution": { + "description": "argv or shell = executed here; rejected = refused; skipped = disabled; reported = worker-only. Only successful executed rows prove a command.", + "enum": [ + "argv", + "shell", + "rejected", + "skipped", + "reported" + ], + "type": "string" + }, + "exitCode": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "output": { + "type": "string" + }, + "passed": { + "type": "boolean" + }, + "source": { + "description": "Result provenance. Orchestrator rows authoritatively record execution, refusal, or skipping; worker rows are self-reported.", + "enum": [ + "orchestrator", + "worker" + ], + "type": "string" + } + }, + "required": [ + "command", + "source", + "execution", + "exitCode", + "passed", + "output" + ], + "type": "object" + }, + "type": "array" + }, + "verificationMode": { + "description": "Execution policy in force: allowlist, off, or shell.", + "type": "string" + }, + "workerClaimedStatus": { + "description": "What the worker reported. Compare against `verdict`.", + "enum": [ + "PASS", + "BLOCKED", + "FAILED" + ], + "type": "string" + }, + "workerThreadId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Codex thread id of the worker, for inspecting or resuming it." + } + }, + "required": [ + "verdict", + "workerClaimedStatus", + "trustworthy", + "workerThreadId", + "model", + "effort", + "effortReason", + "attempt", + "summary", + "notes", + "followUps", + "filesChanged", + "verification", + "verificationMode", + "scopeViolations", + "discrepancies", + "reviewChecklist", + "escalationAdvice", + "durationSeconds", + "usage", + "errors" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / tasks / items / properties / result / descriptionPrevious value: -"Full single-task result, or null if the task never ran."New value: +"Single-task result at the requested resultDetail, or null if the task never ran."
2 tool updates
v0.5.1- First observed
delegate_task - First observed
delegate_tasks
TDQS
Scored across 5 tools
The single, batch, continuation, preflight, and exploration tools have distinct purposes, but delegate_task and delegate_tasks overlap at the single-task boundary; the descriptions explicitly resolve this by directing single tasks to delegate_task.
Most names follow snake_case verb_object style (delegate_task, deegate_tasks, continue_task), but routing_preflight is noun-leading and explore is a bare verb, breaking the otherwise predictable pattern.
Five tools cover the core orchestration surface without redundancy: single delegation, batch delegation, continuation, preflight routing, and read-only exploration. The count feels intentionally scoped and appropriate.
Core lifecycle operations are covered: delegate, batch, continue, preflight, and explore. Minor gaps exist such as no explicit status/cancel/list tooling, but the parent-owned model makes these nonessential and workable.
Maintenance
Related MCP Connectors
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
An MCP server that gives your AI access to the source code and docs of all public github repos
ArcAgent MCP server for bounty discovery, workspace execution, and verified coding submissions.
Related MCP Servers
- AlicenseAqualityCmaintenanceA local MCP server that lets Claude delegate scoped work to Codex with structured results and guardrails, supporting planning, code review, build, reverse engineering, and long-running background tasks.11MIT
- AlicenseAqualityBmaintenanceAn MCP server that lets OpenAI Codex delegate tasks to Google Gemini agents as isolated background workers, with Git worktree isolation, loop detection, and security boundary enforcement.71MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that lets Codex supervise Claude Code or DeepSeek Harness as workers in isolated Git worktrees, with a bridge_run/bridge_respond/bridge_apply workflow for task delegation and safe cherry-pick integration.2 npmMIT
- AlicenseAqualityCmaintenanceAn MCP server that splits coding work between ChatGPT web (planning, review) and Codex CLI (implementation), enabling agentic workflows over a local repo with risk-gated execution and safety rails.423MIT