codex-in-claude v0.14.0
A discovery-slimming and sync-timeout release. The tools/list catalog gets lighter and a new
codex://params resource becomes the single home for the full parameter contracts, the sync tools
steer long-running work to their _async variants at selection time, and the built-in sync
timeout_seconds default rises from 180 to 300. The agent-visible surface changed (result
fingerprint codex-in-claude/0.1/schema-46 → schema-49), 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://paramsresource andparameter-contractscapabilities fold-in (#333). A new
read-only resource serves the full lifecycle/validation semantics for parameters whose
tools/listdescription is a compressed summary, backed by a single-source
PARAMETER_CONTRACTSregistry so the inline summary and the resource body cannot drift.
codex_capabilities(include_schemas=["parameter-contracts"])embeds the same document for
resource-blind clients. Its content is guarded by the newparameter_contracts
FINGERPRINT_COVERScategory and the manifest snapshot.
Changed
-
Slimmed the
tools/listcatalog (#333). MCP inlines each parameter description into every
tool's schema, so a long shared description repeats on the wire. Theidempotency_keyand
reasoning_effortinline descriptions are compressed to their selection-, safety-, and
spend-critical facts (the full lifecycle/validation detail moves tocodex://params),
workspace_root/isolationare tightened, and the sync/async tool docstrings are slimmed —
reducing the serializedtoolscatalog by ~6% (~85.2 KB → ~80.2 KB, snapshot measure) with
no weakened guarantee: a table-driven per-tool freeze test asserts every egress/security
guarantee (raw-input, files-read, auto-loadedAGENTS.md/.agents/skills, isolation, best-
effort redaction, delegate no-network, review diff-redaction) still ships inline. This bumps the
resultfingerprintbut is not breaking; the deeper≤60 KBtarget requires opaquing the output
schemas (tracked separately). -
Sync tools steer long-running work to their
_asyncvariants, and the default sync
timeout_secondsrises from 180 to 300 (#338, #341). Two changes to how the synchronous tools
handle work that can outlast a foreground call:- The
codex_consult/codex_review_changes/codex_delegatedescriptions, their_async
counterparts, all sixcodex_capabilitiesuse_whenentries, and the serverinstructions
block now name the shapes that can exceed the synchronous deadline — a high-reasoning-effort or
broad repo-grounded consult, a multi-file or whole-branch review, or a substantial
implementation task — and recommend the matching_asynctool, so the steer reaches the agent
at tool-selection time instead of only in the post-timeout repair, after the paid run was
already lost. - The built-in default sync
timeout_secondsrises from 180 to 300: a sync call that omits
timeout_secondsnow waits up to 300s before terminating. The 10–600s clamp and the
CODEX_IN_CLAUDE_TIMEOUT_SECONDSoperator override are unchanged, and a caller wanting the
prior deadline can passtimeout_seconds=180. 300 is the smallest round value that recovers the
mid-tier consult/review runs observed exceeding the old 180s cap; the destructive >~420s cliff
stays the domain of the_asyncvariants (separate 1800s job deadline), so the raise reduces
the frequency of mid-tier sync timeouts rather than removing the cliff. A longer sync deadline
only helps a client whose own foreground window is at least the server deadline; a client with a
short window already backgrounds long sync calls, and thetimeout_seconds/env override remains
the escape hatch either way.
The
collaborating-with-codexskill routing and the/codex:consult|review|delegatecommand
prompts carry the same steer. Wording and default-value changes that narrow no input and weaken no
guarantee — the deadline was already documented as overridable — so they move the result
fingerprintbut are not breaking. Acodex_dry_runsize advisory remains tracked separately
(#342). - The
-
Internal: the stripped git-subprocess environment is now built by a single
gitdiff._base_git_env()helper shared across_core(previously duplicated at five
call sites), so the hardening posture cannot drift between them.
Fixed
- Untracked-file handling now honors the user's global gitignore (#330). The git
subprocesses that enumerate untracked files run with a HOME-stripped environment
(deliberate hardening — no user hooks/fsmonitor/attributes), which also prevented git
from resolving the user's global excludes (core.excludesFilefrom global config,
or the default~/.config/git/ignore/$XDG_CONFIG_HOME/git/ignore). As a result a
globally-ignored file (e.g. a~/.config/git/ignore-listed.claude/settings.local.json)
was misclassified as untracked: it inflated theuntracked_files_detected/
delegate-planuntrackedcounts, and underuntracked="include"its contents were
gathered and sent to OpenAI, contrary to the documented "non-ignored untracked files"
contract. The effectivecore.excludesFileis now resolved from the server's own
environment (mirroring git's own precedence, including a repo-local override) and passed
explicitly as-c core.excludesFile=<path>to only the untracked-enumeration calls, so
the global ignore layer is honored without restoringHOME(no other global config
becomes readable). The resolver drops inheritedGIT_DIR-family variables so a stray
GIT_DIRcannot anchor resolution to another repo, andGIT_CONFIG(which only
git confighonors) so it mirrors whatls-filesactually reads. Repo-local
(.gitignore,.git/info/exclude) and local/systemcore.excludesFilelayers with
ordinary absolute or relative paths were already honored; a~-containing local/system
core.excludesFilepreviously failed to expand under the HOME-stripped child (a fatal
error) and now resolves too, since the value is~-expanded in the server. Behavior-only
fix restoring the already-documented meaning — no change to the agent-visible schema or
descriptions, so the resultfingerprintis unchanged.