codex:resume / codex-rescue burned 27% of weekly limit (71%→98%) over ~12h with zero forward progress
Summary
Invoked /codex:review (which forwards to the codex:codex-rescue subagent → codex-companion.mjs task ... --resume-last) on a finished plan. The run spun for ~12 hours and consumed roughly 27 percentage points of my weekly Claude Code usage (71% → 98%), without taking a single forward step on the work. When I returned, the orchestrator was still showing Codex review… (27s · ↓ 85.4k tokens · still thinking) — i.e. the review never produced a verdict, never wrote a finding, never edited a file. The plan it was reviewing was not modified between when codex started and when I killed it.
The screenshot attached shows the state I returned to. Note the bottom status bar: 5h:88% 7d:96% — i.e. weekly cap is on the verge of exhausting purely from this stalled codex:rescue invocation continuing to call out.
Repro context
- Plugin:
codex@openai-codexv1.0.3 (the OpenAI-published Codex companion plugin) - Subagent:
codex:codex-rescue(defined inplugins/codex/agents/codex-rescue.md) - Command path:
/codex:review→ forwards tonode \"\${CLAUDE_PLUGIN_ROOT}/scripts/codex-companion.mjs\" task ... --resume-last - Trigger: explicit
/codex:reviewinvocation against a finished planning doc (5 markdown files, ~80 KB total) - Claude Code: Opus 4.7 (1M context), v2.1.119
- OS: macOS Darwin 25.4.0
What I'd expect
A review subagent that delegates to an external runtime should either:
- Stream incremental findings to the parent so the loop can be detected, OR
- Hard-cap on wall-clock / token spend / no-progress watchdog, OR
- Surface a clear failure when the underlying Codex CLI hangs
What actually happens: the --resume-last mode appears to keep the polling loop alive indefinitely against a Codex session that's stuck in \"still thinking\". The wrapper has no upper bound, so it silently incinerates Claude Code quota while doing nothing.
Asks
- Default
--resume-lastto off for/codex:review(treat it as fresh per invocation). - Add a watchdog: if Codex emits no finding within N minutes, kill the wrapper and surface an error to the orchestrator.
- Surface running token / wall-clock cost into the parent transcript so the user can intervene before the weekly cap blows.
- Document the failure mode in the codex plugin README — there's currently no warning that a stuck Codex session can drain Claude Code quota for hours.
Mitigation I've taken locally
Disabled the codex plugin manifest (mv plugin.json plugin.json.disabled-2026-04-28) so it no longer loads. Will not re-enable until this is addressed.
Screenshot
Attaching screenshot via web UI after issue creation (gh CLI does not support binary gist upload). Shows the orchestrator stuck on Codex review… (27s · still thinking) with weekly usage at 7d:96%.
This issue has 6 comments on GitHub. Read the full discussion on GitHub ↗