Changing exactly one thing
Most tools that put a coding agent inside their own UI end up reimplementing it. There is a narrower move: launch the real CLI, and point one URL somewhere else.
Why wrapping an agent usually goes wrong#
The obvious way to put someone else's coding agent inside your product is to speak for it: parse its output, re-render it in your panels, drive it through your own protocol. It demos well. Then the agent ships a release, its output changes shape, and your parser is wrong in a way that looks like the agent got worse. You now maintain a copy of somebody else's product, and every one of their improvements arrives as your bug.
There is a second cost that shows up later. Agents authenticate as themselves — a subscription login, an OAuth token, a device grant. A wrapper that mediates the conversation tends to also mediate the credentials, and now the user's own account is something your product holds rather than something the agent holds.
The narrower move#
Mirasim spawns the real agent CLI with its standard input and output inherited — the process you are talking to is Claude Code, or Codex, exactly as it ships. Then it changes one thing: the agent's model base URL points at a local proxy instead of the provider. That is the whole intervention.
- Forwards bodies verbatim
- It parses nothing. It does not know or care whether the body is Anthropic's wire format, OpenAI's, or something that does not exist yet — which is exactly why it keeps working with any provider and any agent version.
- Leaves your auth alone
- The default is passthrough: no API key is injected, and the agent's own login is what talks to the provider. A key is only supplied when an agent actually requires one.
- Records off the hot path
- Requests and responses are teed to disk as raw bytes. The recorder must never block, mutate or break a live session — when its bounded queue fills it drops data and counts the drops rather than slowing the agent down.
What the constraint buys you#
Because nothing is translated, the agents stay themselves. Claude Code keeps its own terminal UI and its own login; Codex keeps its. Existing sign-ins carry over — there is no second account to create, and nothing to re-authorise inside our product. Each session picks its own agent and its own model, so two panes can be running two different agents against two different providers at the same time.
It also means the raw view is real. One button switches a session between the agent's own terminal output and our rendered panels — and the terminal side is not a reconstruction, it is the bytes the agent actually wrote. When something looks wrong, that distinction is the difference between debugging the agent and debugging our reading of it.
The cost is real too, and worth stating: a router cannot smooth over differences between agents. Two agents behave differently, fail differently, and are configured differently, and we do not hide that behind a uniform façade. What we take responsibility for is where the traffic goes, what gets recorded, and what the workbench around them does — not for pretending they are the same tool.

