Local stdio MCP bridge for native Codex sessions.
Strong schema definitions with proper JSON Schema validation, comprehensive parameter constraints (minLength, maxLength, enums), and tool annotations present. Descriptions are detailed and domain-specific, explaining Codex semantics clearly. However, descriptions exceed the 200-char baseline for LLM optimization (many 300-500+ chars), and output schemas are not documented in the tool definitions. Error handling guidance is embedded in descriptions but not formalized. Tool naming follows verb_noun convention well (codex_turn, codex_observe, codex_steer). All 10 tools have explicit schemas and descriptions visible in src/tools.ts.
Read the current Bridge process status, app-server state, and runtime supervision status.
Read a supervisor checkpoint document for a thread, if one exists.
Create or update a supervisor checkpoint document for a thread.
Interrupt an active in-progress turn. This is a mutating request; if acknowledgement times out, outcome is UNKNOWN and the request was possibly accepted. Observe before retrying.
Read one current model/list page directly from Codex app-server. Results are bounded and sanitized, cursors are opaque, hidden models are omitted unless include_hidden is true, and the Bridge keeps no model catalog cache or current-model registry.
GPT is the supervisor; Bridge provides transport, control, and evidence; native Codex executes. Default auto consumes only the delivered delta using a bounded per-connection/thread cursor, suppresses agent/token noise, and adds only related bounded raw evidence on anomalies; it never replays whole history. Explicit supervision forces low noise and raw is for debugging/evidence. An explicit cursor selects independent manual compatibility semantics. Fixed delta_summary fields are changes/commands/validation/pending/unresolved/next; command exit evidence is not an acceptance judgment. Cursor loss, restart, or unavailable live state requires supervisor re-anchoring from checkpoint if used and native thread evidence. Read bounded incremental sanitized Bridge runtime events, pending requests, and terminal output for a thread. Optional wait_ms performs one bounded event-driven wait only when the live turn is active and the current snapshot has nothing useful; it is not polling or stall detection. After Bridge process loss, auto returns unreconstructable live state and requires re-anchoring without replay; only explicit manual cursor reads retain degraded persistent thread/read fallback. A long interval with no new command or output can still mean Codex is actively reasoning; absence of new command activity alone is not evidence of a stall. When actively supervising an in-progress turn, use repeated bounded-wait observe calls until terminal unless the user explicitly pauses or stops; do not end supervision merely because one snapshot is inProgress.
Output schemas not documented. Tool definitions declare inputSchema but no outputSchema or return type documentation. LLMs cannot plan downstream tool calls or extract required fields without knowing response structure.
Descriptions exceed LLM-optimized length (200 chars baseline). codex_turn description is 500+ chars, codex_observe is 800+ chars. Verbose descriptions waste tokens and bury key selection criteria. Should be 50-200 chars with dependency hints in separate fields.
Error handling not formalized. Descriptions mention 'outcome is UNKNOWN' and 'observe before retrying' but no structured error response schema or error classification (retryable/user-fixable/fatal). Agents cannot programmatically determine recovery strategy.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Respond to a pending request from Codex, such as approval requests or user input requests. This is a mutating request; if acknowledgement times out, outcome is UNKNOWN and the request was possibly accepted. Observe before retrying.
Steer an active in-progress turn with new user text. Steer is a mutating request; if acknowledgement times out, outcome is UNKNOWN and the request was possibly accepted. Observe before retrying.
List or search persistent local Codex threads through thread/list, or read one thread through thread/read. This does not reconstruct live Bridge events.
Start a persistent Codex thread and turn, or resume an existing thread and start a turn. Prefer continuing the same native thread when its context remains useful, but a fresh thread is allowed; thread_id is not a permanent task identity. Explicit model or effort overrides are validated against a fresh model/list catalog without caching. Effort alone is checked only against efforts advertised somewhere in that catalog; the Bridge does not infer the current thread model, so app-server remains authoritative for current-model compatibility. Returns as soon as turn/start is accepted; ordinary supervision calls codex_observe with thread_id and optional wait_ms, omitting cursor. event_cursor remains an advanced manual cursor, not an automatic-session acknowledgement. Observe separately for events and completion. If an already-sent mutating acknowledgement times out, the outcome is UNKNOWN and the request was possibly accepted; observe/read before any retry, and never directly retry it.
bridge_status and checkpoint tools lack detailed descriptions. bridge_status is 60 chars ('Read the current Bridge process status, app-server state, and runtime supervision status.'), minimal context for when/why to call. checkpoint_read/update similarly sparse.
No pagination or result-limit documentation in output. codex_threads and codex_models accept limit/cursor but response structure (total count, next_cursor format, max items) not documented. Agents cannot plan pagination strategy.