Skip to content

Arbitration for Claude Code, Codex, and Pi Workflows

Shared enforcement and project-context parity across Claude Code, Codex, and Pi. Tests, reviews, and security checks are real stops in any host.

A gate catching a real mistake

  1. git commit -m "add payment hash"
  2. codeArbiter pre-commit · scanning diff...
  3. H-09b BLOCKED: banned crypto, createHash("md5") on line 42.
  4. CRITICAL: MD5 is forbidden. Replace with SHA-256 (see security-controls.md).
  5. No security-gate-passed marker for the changed crypto lines. Commit rejected.
  6.  
  7. sed -i 's/createHash("md5")/createHash("sha256")/g' payment.ts
  8. /ca:commit
  9. crypto-compliance gate · reviewing changed crypto lines...
  10. SHA-256 confirmed. No banned primitives.
  11. security-gate-passed marker recorded, bound to the line digests.
  12. H-09b passed: marker matches the diff. Commit accepted.
  13. [main 3fb950c] add payment hash (sha-256)

Not a description of gates. A gate doing its job.

Three governance hosts, one shared project store. Gated lanes for every kind of work.

Lane flow: a command routes to the owning skill, clears its gate pillars, ships to version control, then opens a pull request to reach main.
Every request flows: command → route → gate → ship → pull request. Nothing skips the gate.
  1. Claude Code
  2. /plugin marketplace add arbiterForge/codeArbiter
  3. Marketplace added: codearbiter.
  4. /plugin install ca@codearbiter
  5. Installing ca@codearbiter ...
  6. Plugin installed. Hooks, commands, and agents loaded.
  7. All commands resolve under the /ca: namespace.
  8. /ca:statusline
  9. Wiring the statusline into ~/.claude/settings.json ...
  10. Statusline wired. It renders on every session.
  11. Codex (public marketplace)
  12. codex plugin marketplace add arbiterForge/codeArbiter
  13. codex plugin add ca-codex@codearbiter
  14. Review the trusted hook set in /hooks, then start a fresh thread.
  15. $ca-doctor

Get the Arbiter on Your Case

Choose Claude Code or Codex, shown here. All three governance hosts enforce the same project state. ca-pi is available as a Feature Forge preview, with real use and feedback welcome.

The codeArbiter statusline: a folder row; a git row with repo, branch, and a model pill; rate-limit percentages with reset countdowns; an arbiter row (green dot) showing stage, tasks, open questions, and overrides; and session/today token, cost, burn, and context-usage segments.
Claude Code’s optional statusline. Codex presents governance state at SessionStart.

Gates are hooks, not suggestions

Every codeArbiter gate runs at its host’s hook boundary before the tool call. The shared Python guard returns one verdict; the Claude Code and Codex adapters surface that verdict in their native hook protocols.

Prompt-layer rules still matter. They are the model’s judgment for everything a hook does not reach. Hooks are the backstop for the moment that judgment slips: a blocking gate does not ask the model to agree, it stops the call.

Every block names the gate that caught it. A BLOCKED [H-09b] line in your terminal points at an entry in the hook gates reference, with the exact condition and the exact message the hook prints.

How a gate fires

  1. A shell or write call reaches the host’s PreToolUse boundary.
  2. The matching hook runs first, against the repository’s current state.
  3. It allows the call or blocks with a BLOCKED [H-xx] message.

Who this is for

Built for

  • Teams and solo developers who want an audit trail, not a changelog written after the fact.
  • Compliance-minded adopters who need to show a control actually ran.
  • Anyone who has watched an agent commit untested code and wants that failure mode closed.
  • Brownfield repos that need governance layered on, not a rewrite.

Not built for

  • A quick throwaway script you plan to delete in an hour.
  • Anyone who finds any gate friction unacceptable, even a fixable one.
  • A repo where you do not want a .codearbiter/ state directory checked in.

Docs source map

Update the right layer

The site mixes handcrafted pages with generated reference. Edit the source that owns the page, or the next generator run will overwrite the wrong change.

Handcrafted docs

Guides, concepts, install, FAQ, and this landing page live under site/src/content/docs/. These pages are safe to tune directly.

Generated reference

Command, skill, agent, hook-gate, and changelog pages come from site/scripts/gen.ts, plugins/ca/, and site/src/curated/. Change those inputs, then regenerate.

Root context

Repo-level docs such as README.md, CHANGELOG.md, and docs/*.md stay source-of-truth material. The site should point at them or render from them, not drift into a fork.

Three ways in

Learn

Understand what a gate is and why the lane model exists before you touch a command.

Use

Get codeArbiter installed and take your first change through a gated lane.

Look up

Find the exact command, gate ID, or hook behavior you are checking against.

Turning it off is documented too: disable per-repo with one frontmatter flag, or uninstall entirely.