Meta: small UX patches to make `codex exec` cleaner for downstream harnesses (cdx exo)

Open 💬 0 comments Opened May 10, 2026 by team-wcv

Context

A downstream Codex wrapper called cdx exo (https://github.com/team-wcv/CliTools, exo-tui.mjs and friends) embeds a custom Ink/React TUI that drives codex exec and codex app-server over JSON-RPC for cluster-aware local model serving. Building it surfaced a handful of small \"papercut\" issues in the upstream codex harness — things the TUI currently works around with stderr regexes or ad-hoc client-side filtering, but which would be cleaner to fix at the source so other harnesses benefit.

This meta-issue tracks the seven patches we extracted from the cdx exo workarounds and filed individually. Each is small, scoped, and most ship with a reference branch on a fork. None depend on each other; they can be triaged independently.

Patches

| # | Title | Issue | Reference branch | Status |
| - | ----- | ----- | ---------------- | ------ |
| 1 | Add codex exec --quiet to drop the header chrome | #22047 | team-wcv/codex@feat/exec-quiet-flag | Closed not_planned; maintainer suggested --json instead. We replied with the wrapper-vs-parser context; happy to drop or revisit. |
| 2 | Gate benign rate-limit telemetry behind notifications.rate_limit_telemetry | #22054 | team-wcv/codex@feat/rate-limit-telemetry-gate | Open, awaiting triage. |
| 3 | Demote failed to record rollout items from error! to warn! | #22055 | team-wcv/codex@feat/rollout-persistence-log-demote | Open, awaiting triage. |
| 4 | Collapse MCP startup notifications into a single mcpServer/startupStatus/completed summary | #22059 | team-wcv/codex@feat/mcp-startup-notifications-collapse | Open, awaiting triage. |
| 5 | Local-provider reasoning-summary heuristic + per-model model_overrides | #22061 | team-wcv/codex@feat/local-provider-reasoning-summaries | Open, awaiting triage. |
| 6 | model_providers.<name>.discovery_url for cluster-aware base-URL refresh | #22063 | team-wcv/codex@feat/provider-discovery-url | Open, awaiting triage. |
| 7 | codex exec resume <missing-uuid> falls back to thread/start instead of erroring | #22064 | team-wcv/codex@feat/thread-resume-fallback | Open, awaiting triage. |

Why each one matters (one line each)

  • #22047 — wrappers that pass-through human-readable codex output need to suppress the config banner. Closed; documented the wrapper use case for context.
  • #22054 — rate-limit telemetry is benign for users that never hit a limit; routes a notification per turn and shows up as noise.
  • #22055 — transient rollout-persistence races during shutdown spam scary ERROR lines that aren't actionable.
  • #22059 — N MCP servers ⇒ N+ startup notifications during steady-state startup; one aggregate readiness summary is enough.
  • #22061 — local providers that ship reasoning models (DeepSeek-R1, QwQ, etc.) silently drop reasoning-summary support unless users hand-edit a global flag.
  • #22063 — multi-host inference clusters need to refresh the active node's base URL without restarting codex.
  • #22064codex exec resume <uuid> after a pruned rollout / wrong \$CODEX_HOME surfaces a confusing error string instead of just starting a new thread.

Bigger picture

The cdx exo TUI's existence is mostly about cluster-aware local model serving and inline UX shortcuts that aren't a fit for upstream codex (e.g. live cluster topology, model-catalog overlay, in-process status badges). What I'd like out of this batch is just to remove the surface-level noise and config papercuts that force harnesses to filter stderr or hand-edit configs.

Happy to:

  • split anything that's too coarse-grained.
  • drop patches you don't want.
  • iterate on any of the reference branches based on feedback.
  • coordinate landing if multiple patches touch shared protocol/config surface.

I noticed docs/contributing.md says external contributions are by invitation; that's why each patch is in an issue with a reference branch rather than a PR. If any of these are wanted, very happy to open the corresponding PR(s).

View original on GitHub ↗