· Agents
Codex and ACP adapters
Realm stopped being a Claude client: a shared NDJSON JSON-RPC transport, a Codex app-server adapter, and a generic ACP adapter covering Cursor and Gemini.
One stdio transport is shared by both families. Above it sit pure mappers (Codex app-server notifications to session events, ACP session/update to the same). They are what lets the transcript be written once rather than three times.
The Codex adapter runs against a single shared app-server connection with per-thread fan-out, and never leaves a server request unanswered. Streamed text is kept when a turn is interrupted, rather than discarded with the interruption.
The ACP adapter confines its fs/* handlers to the session's working directory, and cancels a permission raised during teardown instead of leaving it dangling.
Covered by a live end-to-end check against the real CLIs, not only against fakes. An adapter that only ever meets a fixture is an adapter for the fixture.