Skip to content

Claude Code + Codex

Shared enforcement and project-context parity across Claude Code and Codex

Section titled “Shared enforcement and project-context parity across Claude Code and Codex”

Documentation launch: 2026-07-12. This page announces the verified 2026-07-11 Codex support result while retaining the public-marketplace smoke test as a release gate.

Of codeArbiter’s four sibling plugins, this page covers two: ca for Claude Code and ca-codex for OpenAI Codex (see Pi for the third governance host, currently a Feature Forge preview with real use and feedback welcome, and ca-sandbox for the non-governance infrastructure plugin). Both activate from the same .codearbiter/CONTEXT.md, enforce the same project rules, and read and write the same checked-in .codearbiter/ state. One person can alternate between hosts, or two people can use different hosts in the same repository, without creating parallel governance state.

Parity here has a precise boundary. The enforcement decisions and project context are shared. The host interfaces are not identical, and this page lists those intentional differences rather than hiding them behind a broader claim.

The promotion test ran on Windows with Codex CLI 0.144.1 and ca-codex 0.2.4. This is a dated verification record, not a promise that future doctor versions will always contain the same number of checks.

CheckObserved result
Hook reviewThe ca-codex hook set was reviewed and trusted through /hooks.
Session activationThe SessionStart hook completed and injected the codeArbiter persona and startup state.
Static doctor$ca-doctor reported 9 OK, 0 WARN, 0 FAIL for that verification run.
Live enforcementThe doctor probe attempted git add --all --dry-run; PreToolUse blocked it with [H-03] and surfaced the exact feedback.

The detailed repository ledger is docs/parity.md. The reproducible live procedure is docs/codex-parity-testing.md. Those files remain the canonical technical record; this page is the public summary.

CI and local verification cover the seams that a one-time live run cannot:

  • the pinned Codex 0.144.1 package schema and marketplace shape;
  • native Codex payload adaptation for shell and apply_patch tool calls;
  • the complete hook guard matrix;
  • Windows, macOS, and Linux interpreter-launch shapes through the cold-install matrix;
  • deterministic generation of both host surfaces from core/surface/;
  • byte-identical vendoring of the shared Python hook core into both plugins;
  • dual-host initialization against one store; and
  • controlled concurrent append-only audit writes with host attribution and no lost records.

The live and CI evidence complement each other. CI proves deterministic parity for equivalent payloads; the live run proves Codex actually discovers, trusts, invokes, and honors the installed hooks.

Core fan-out: one shared source, core/pysrc plus core/surface, is deterministically generated by sync-core.py and build-surface.py into three host plugins — ca for Claude Code, ca-codex for Codex, and ca-pi for Pi. A CI byte-identity check gates every fan-out edge.
One source, generated into three host plugins; a CI byte-identity check gates every fan-out edge.

Commit .codearbiter/ with the repository. It contains project context, plans, decisions, task and question boards, and append-only audit records. Neither plugin copies that state into a host-owned directory.

When Claude Code and Codex open the same checkout, they see the same maturity stage, open work, ADRs, and audit history. A second user on another checkout receives that state through normal Git collaboration. Initialization is idempotent: the second host observes the existing store instead of creating another one.

The parity claims above cover alternating hosts or different checkouts. Two people driving Claude Code and Codex against the same working tree at the same time are a narrower case, and the supported bar for it is ADR-0012: dual-host concurrency is accepted at parity with same-host concurrency, not stronger than it. Concretely:

  • Safe: the append-only audit writes (overrides.log, gate-events.log) — each line now carries host attribution, and concurrent writers do not lose records.
  • Not hardened, and not new to dual-host: the task board (open-tasks.md) and the dev-marker file are mutated with a lock-free read-modify-write. Two sessions racing the same mutation — for example, both flipping the same task, or both entering/exiting /ca:dev — can drop an update or clobber the marker, exactly as two concurrent Claude Code sessions on one checkout already can. This is pre-existing, host-agnostic concurrency debt, not a Codex-specific gap.

Practical guidance: treat simultaneous mutating lanes (commit-gate, task-board writes, /ca:dev entry/exit) on one checkout as a race regardless of host mix, and sequence them. Read-only lanes (/ca:review, /ca:checkpoint, /ca:status) and append-only audit writes are safe to run concurrently. This is the same discipline using-git-worktrees recommends for parallel agent work inside one session; it applies equally to two people sharing one tree.

The public GitHub-slug Codex commands are available now:

codex plugin marketplace add arbiterForge/codeArbiter
codex plugin add ca-codex@codearbiter

To develop against an unpublished checkout, use a local clone:

Terminal window
git clone https://github.com/arbiterForge/codeArbiter
cd codeArbiter
codex plugin marketplace add .
codex plugin add ca-codex@codearbiter

Open /hooks, review and trust the ca-codex handlers, then start a fresh thread. In the target repository run $ca-init to opt in and $ca-doctor to prove the live gate. The expected healthy probe is a PreToolUse block containing [H-03].

On 2026-07-12, a clean isolated Codex home completed the public marketplace add, installed and discovered ca-codex 0.2.4 from release v2.8.13, removed the plugin, and confirmed its final absence. That closes the public-installation gate with the same GitHub-slug commands shown above.

SurfaceClaude CodeCodex
Entry commands/ca:<name>$ca-<name>
Plugincaca-codex
Hook approvalClaude Code plugin trust flowReview through /hooks; start a fresh thread after approval
Project stateShared .codearbiter/ storeThe same shared .codearbiter/ store
Blocking resultShared guard exits 2 at the Claude hook boundaryCodex adapter converts the same verdict to structured decision:block
StatuslineAvailableNo Codex statusline surface; startup state carries governance status
Transcript pruningClaude transcript-pruning engine availableNo transcript pruning; the host-neutral audit-staleness warning remains
Governed-file Read hookAvailable on Claude’s Read toolNo Codex Read hook; reads happen through shell, while write-time notices remain
Reviewer rolesPlugin agents can be dispatchedRoles execute inline until Codex agent packaging reaches its later milestone

These differences are host capabilities and packaging choices. They do not create a second project context, weaken the blocking shell/write gates, or split the audit trail.