codex-in-claude v0.15.0
A status-signal and diff-gather-hardening release. codex_status learns to report an
administrative spend block, codex_job_status/codex_job_list expose a finished job's
success/failure without a fetch, the diff-gather paths gain consistency and bounded-memory
guarantees across every review scope, and several capability-discovery contracts are corrected to
match what they advertise. Tracked Codex is bumped to 0.145. The agent-visible surface changed
(result fingerprint codex-in-claude/0.1/schema-49 → schema-56, and the persisted
RESULT_FORMAT 4 → 6), so pre-1.0 this is a minor release; clients that cache by fingerprint
re-fetch the contract. Every change is backward-compatible — no tool, field, or error code was
removed or retyped.
Added
-
codex_statusreports an administrative spend block (#359). codex 0.145 added
spendControlReachedto the app-server's rate-limit snapshot — a spend control the backend
enforces, distinct from a quota window: no reset clears it.rate_limitnow carries
spend_control_reached(true|false|null) andrate_limit.statusgains the value
blocked, which outranks every window-derived verdict because its remedy is not waiting; it
reportslimiting_window: nulland anotesaying a reset will not clear it. The tri-state is
load-bearing —nullis notfalse, and a null never downgrades a healthy window reading to
unknown(which would reintroduce the permanent-unknownfailure #321 removed). The bundled
collaborating-with-codexskill gains the matching rule:blockedis the one non-advisory
rate-limit state — refuse the paid call rather than deferring it. Bumps the persisted
result-format (RESULT_FORMAT5→6) for the new status value; not breaking. -
result_okon job status and list entries (#335).codex_job_statusand each
codex_job_listentry now carryresult_ok— a finished job's producer-declared outcome
(true= success,false= a stored error envelope,null= running, unclassifiable, or a
record finalized before this field) — so a stored failure can be triaged without a per-job fetch.
It reports the outcome recorded when the result was written and does not guarantee the payload
is still readable across releases.codex_capabilitiesgains an
async_lifecycle.result_ok_fieldentry for structural discovery. Backward-compatible output
addition; not breaking.
Changed
-
Diff-gather git reads are now counted in bounded memory (#331, #350, #351, #353). The
untracked-file listing, the tracked-diff--numstatsummary, and the untracked-count stderr read
— all reached on the defaultcodex_review_changesand freecodex_dry_runpaths — previously
materialized whole git outputs unbounded in the workspace's changed-file count. They now stream
through a single shared bounded runner, so a pathological workspace can neither exhaust server
memory nor stall a review past its deadline, and a latent stderr deadlock is removed. The same
work fixed a real corruption bug: a carriage return in a git-produced filename was rewritten by
Python's universal-newline translation before the NUL-splitter saw it, silently omitting one file
while still counting it as included — a quiet coverage-contract violation (#353). Reported counts
and error vocabulary are unchanged, so nofingerprintchange. -
Every egress caveat now discloses that user-global Codex skills auto-load (#358). Skills under
$CODEX_HOME/skills/(default~/.codex/skills/) are discovered from outside the workspace
and their bodies can reach OpenAI on any active call, despite--ignore-user-config— pre-existing
behavior (verified againstcodex-cli 0.144.1and0.145.0), not new. The disclosure is
corrected across the server instructions, all six tool descriptions and their capability entries,
codex_capabilities' negative scope,README.md,SECURITY.md,COMPATIBILITY.md,
cli_contract.py, and thecollaborating-with-codexskill. A reword of covered descriptions, so
it bumps thefingerprint; not breaking — the contract only ever promisedignore-config
drops$CODEX_HOME/config.toml, never that all$CODEX_HOMEcontent stays local. -
Tracked Codex version bumped to
0.145(#361).SUPPORTED_VERSIONSnow tracks(0, 145);
the CLI contract, help snapshots, andKNOWN_MODEL_SLUGSfallback are verified against
codex-cli 0.145.0, which required no code change — help text, sandbox values, drift/auth
signatures, and reasoning-effort handling are all intact, and the app-server schema diff is
additive-only for the surface this plugin consumes. Advisory only: an untracked version warns in
codex_statusbut never blocks, and theCODEX_IN_CLAUDE_SUPPORTED_VERSIONSoverride still
applies. No agent-visible surface change, so nofingerprintbump.
Fixed
-
Diff gathers are now consistency-checked and atomic across every review scope (#336, #355). A
gather runs its context summary and the transmitted diff as separate git invocations, so a
concurrent edit or ref move between them could make the summary and the reviewed patch describe
different content whilecoverage.statusstill reported"complete".working_treereviews now
bracket that window with a best-effort porcelain state token; on a mismatch they set a new
tree_changed_during_gathervalue oncoverage.omission_reasons, degrading coverage topartial
and (via the #319 rules) apassverdict tounknown. It is a consistency caveat, not a claim
that specific content was omitted, and it does not trip on a content-only re-edit — socomplete
is documented as no longer proof the tree held still.branchandcommitreviews now resolve
their refs to immutable commit object IDs once, up front, so the summary and diff cannot split
under a mid-gather commit/reset/checkout; an unborn HEAD fails closed, a concurrent HEAD move is
disclosed via the same token, and acommit=<annotated-tag>review peels the tag to its commit.
WidensCoverageOmissionReasonand bumps the persisted result-format (RESULT_FORMAT4→5,
since an older closed-schema reader could reject the new enum value); not breaking. -
Capability-discovery contracts corrected to match what they advertise (#337, #370, #372, #373).
Severalcodex_capabilitiesand error-envelope contracts were narrower or staler than their
promise.fingerprint_coverssaid any change in a covered category bumps thefingerprintbut
silently excluded release-identity fields (serverInfo.version, the capabilitiesversion); it
now carries a description disclosing the carve-out in both directions, so a caching client can
trust that an unchangedfingerprintmeans an unchanged contract. Thecodex_capabilitiestool
description advertised only two of the fiveinclude_schemastokens (the parameter schema
already listed all five), hiding the resource-blind route toparameter-contracts. And
invalid_argumentsomittedallowed_valuesfor a rejectedlist[Literal]element — the one
parameter shape the domain resolver did not read — on the very field whose repair hint says to use
those values. Theinclude_schemastoken set is additionally drift-proofed against its runtime
payload by an exact-equality test. Wording and coverage corrections that widen what is documented
and weaken no guarantee — thefingerprintbump is for thefingerprint_coversand tool-
description changes (theallowed_valuesfix is per-call envelope data, no discovered surface);
not breaking. -
invalid_reasoning_effortgives the local pre-spend guard a provenance-specific repair (#332).
The code is emitted from two paths: the Codex backend rejecting a sent effort (table repair
correct_arguments+codex_models, correct there) and the local pre-spend guard refusing a
hostile resolved value before any subprocess (zero spend). The guard previously inherited the
backend repair, misdirecting an agent that branches onerror.repairto a uselesscodex_models
call. It now emits a provenance-specific repair with no tool:correct_configwhen the
invalid value is the resolvedCODEX_IN_CLAUDE_REASONING_EFFORTdefault,correct_argumentswhen
it is an explicit per-call argument. Bumps thefingerprintfor the corrected parameter contract;
not breaking (correct_configis already a publishedRepairStep).