Several model families, one set of rules, and a routing table that evidence rewrites.
How I run Claude, Codex, Gemini, a local model and Jev as one estate: how they share rules, how work is routed between them, and where it's headed. Companion to governed agent operations, which covers the gates every lane ends in.
Every model needs the same rules: what may leave the machine, how secrets are handled, what counts as done. Today they live in a file only Claude reads. There are three ways to share them, and they stack.
flowchart LR
share_V[("Vault: canonical rules, in git")] --> share_CMD["Global CLAUDE.md"]
share_CMD --> share_CL["<b>Claude Code</b>"]
share_O1["Option 1: copy the shared rules<br/>to Codex's global AGENTS.md"] --> share_CX["<b>Codex</b>"]
share_O2["Option 2: Codex falls back<br/>to each repo's CLAUDE.md"] --> share_CX
share_RP[("Repo CLAUDE.md files")] --> share_O2
share_RP --> share_CL
share_O3["Option 3: one AGENTS.md in the vault,<br/>linked for Codex, imported by CLAUDE.md"] --> share_CX
share_O3 --> share_CL
share_V --> share_O3
class share_V,share_RP store
class share_CMD,share_O1,share_O2,share_O3 rail
class share_CL,share_CX core
classDef core fill:#EAF2FB,stroke:#1667b8,stroke-width:1.5px,color:#16324f
classDef rail fill:#FFFFFF,stroke:#1667b8,stroke-width:1.2px,stroke-dasharray:5 4,color:#16324f
classDef gate fill:#0e7a4e,stroke:#0e7a4e,stroke-width:1.5px,color:#FFFFFF
classDef check fill:#F2FAF6,stroke:#0e7a4e,stroke-width:1.5px,color:#16324f
classDef store fill:#FFFFFF,stroke:#5b7288,stroke-width:1.2px,color:#16324fOption 1 now, because no model should run without the publishing and secrets rules. Option 2 on trial, with a log of every time Codex trips on a Claude-only instruction. Option 3 the first time the copies disagree. The single source lives in the git-backed vault, since Codex's own folder isn't backed up.
A packet carries its destination; a prompt doesn't. Routing work across models is always two steps: classify the request, then forward it. The forwarding table is the easy part. The classifier has an accuracy number, and when it's wrong nothing errors. The wrong model just answers, fluently.
flowchart TB
route_R["Request"] --> route_D{"Where may this data go?"}
route_D -- "private" --> route_P{"Task shape"}
route_D -- "public, or code I'd publish" --> route_T{"Task shape"}
route_P -- "judgment, writing, rules, ops" --> route_CL["<b>Claude Code</b>"]
route_P -- "short offline draft" --> route_OL["Local model on CPU"]
route_T -- "design, writing, or unclear" --> route_CL
route_T -- "specified build with a test" --> route_CX["<b>Codex</b>"]
route_T -- "bulk or parallel mechanical" --> route_CC["Codex cloud tasks"]
route_T -- "free third opinion" --> route_AG["Antigravity free tier"]
route_T -- "classify, rank, dedupe" --> route_J["<b>Jev</b><br/>typed judgments"]
route_T -- "fits nothing" --> route_ESC["Claude plus a person:<br/>escalate, don't guess"]
route_CX --> route_X["Cross-family review"]
route_CL --> route_X
route_X --> route_G{{"<b>Gates</b><br/>review squad, human release,<br/>sandbox"}}
class route_CL,route_OL,route_CX,route_CC,route_AG,route_J core
class route_X check
class route_ESC rail
class route_G gate
classDef core fill:#EAF2FB,stroke:#1667b8,stroke-width:1.5px,color:#16324f
classDef rail fill:#FFFFFF,stroke:#1667b8,stroke-width:1.2px,stroke-dasharray:5 4,color:#16324f
classDef gate fill:#0e7a4e,stroke:#0e7a4e,stroke-width:1.5px,color:#FFFFFF
classDef check fill:#F2FAF6,stroke:#0e7a4e,stroke-width:1.5px,color:#16324f
classDef store fill:#FFFFFF,stroke:#5b7288,stroke-width:1.2px,color:#16324fSensitivity, then task, then cost. Every lane ends in the same gates, drawn in full on governed agent operations.
Model names change every few months, and prompt patches tuned to one model over-correct on the next. So the endgame is an estate where models are interchangeable workers, and everything durable lives in planes no vendor owns.
flowchart TB
end_LAW["<b>Behavior plane</b><br/>one AGENTS.md, skills in a shared format"] --> end_W
end_MEM["<b>Truth plane</b><br/>the notes vault, served to any model"] --> end_W
end_GATE{{"<b>Guarantee plane</b><br/>review squad, human release,<br/>sandboxes, hooks"}} --> end_W
end_W["<b>Work plane</b><br/>Claude, Codex, Gemini, local model, Jev"] --> end_OUT[("Changes, drafts, decisions")]
end_OUT --> end_EV["<b>Evals</b><br/>planted-flaw suites across model families"]
end_EV --> end_RT["Routing table rewritten<br/>from measured results"]
end_RT --> end_W
end_OUT --> end_GATE
class end_LAW,end_MEM rail
class end_W core
class end_GATE gate
class end_EV,end_RT check
class end_OUT store
classDef core fill:#EAF2FB,stroke:#1667b8,stroke-width:1.5px,color:#16324f
classDef rail fill:#FFFFFF,stroke:#1667b8,stroke-width:1.2px,stroke-dasharray:5 4,color:#16324f
classDef gate fill:#0e7a4e,stroke:#0e7a4e,stroke-width:1.5px,color:#FFFFFF
classDef check fill:#F2FAF6,stroke:#0e7a4e,stroke-width:1.5px,color:#16324f
classDef store fill:#FFFFFF,stroke:#5b7288,stroke-width:1.2px,color:#16324fRules, memory, gates and evals are plain files in git. They outlast any vendor, and they let a new model earn trust in a week instead of a quarter. Codex, Antigravity and the local model were installed and tested 2026-10-22.