Codex headless orchestration: MCP tools (review/implement/probe), profiles, and agent skills for review, implementation, computer-use, and built-in codex MCP.
Three tools with complete input schemas and descriptions, but descriptions are verbose (200+ chars) and lack LLM-optimized clarity. Tool names follow verb_noun pattern (codex_headless_*) but are generic and don't clearly distinguish review vs implement vs probe intent. Parameters are well-typed with enums and defaults, but descriptions bury key constraints in prose. Output schemas are not documented. Error handling is mentioned but not detailed in tool definitions.
Codex implementation via codex exec (workspace-write; default --ephemeral). Default profile implement (gpt-5.6-luna, xhigh). Pass profile=engineer for gpt-5.6-sol high. Optional brief (typed change/files/writeScope/…). Optional ephemeral=false + resumeThreadId for exec resume. Optional persistentSessionKey for opt-in app-server reuse (not combined with resumeThreadId). Write-scope validation reported only when structured changed_files parse reliably — never enforced/rolled back. Legacy prompt-only calls unchanged.
Codex probe via codex exec --profile probe (read-only; default --ephemeral). Lightweight agent for exploration, analysis, and structured queries. Optional brief (typed change/files/writeScope/…). Optional ephemeral=false + resumeThreadId for exec resume. Optional persistentSessionKey for opt-in app-server reuse (not combined with resumeThreadId). Write-scope validation reported only when structured changed_files parse reliably — never enforced/rolled back. Legacy prompt-only calls unchanged.
Read-only Codex review via codex exec --profile review (default --ephemeral) --ignore-user-config --ignore-rules (gpt-5.6-sol, high; no global MCP/rules). Use review_uncommitted/review_base for built-in diff review, or prompt for custom scope. Set structured=true for reviewer-verdict JSON schema. JSONL capture + usage telemetry on by default.
Tool names lack action clarity. 'codex_headless_review', 'codex_headless_implement', 'codex_headless_probe' are domain-specific but do not convey intent (read-only vs destructive) at a glance. LLMs must read full descriptions to distinguish them.
Descriptions are verbose (200+ chars) and bury key constraints in prose. E.g., 'structured=true for reviewer-verdict JSON schema' is buried in a 300+ char description. Should be: 'Review code with Codex. Returns structured JSON verdict when structured=true.' Constraints belong in parameter descriptions, not tool description.
Output schemas are not documented. Tool definitions describe inputs but do not specify what fields are returned (e.g., does review return 'verdict', 'issues', 'score'?). LLMs cannot plan downstream calls without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2025-06-18+ | v2 |
Parameter descriptions are inconsistent in detail. 'prompt' is described as 'Self-contained Codex prompt' (generic); 'structured' is described with schema reference (specific). Standardize: every parameter should state format, constraints, and when to use it.
Error handling is not documented in tool definitions. Tool descriptions mention 'usage telemetry' and 'JSONL capture' but do not explain what errors can occur, how to recover, or what the LLM should do if a call fails.