Prism configures fourteen coding agents with one click. That is not a marketing number — it is fourteen separate configuration writers, because no two agents agree on where configuration lives or what shape it takes.
This is the full list, what Prism writes for each, and which clients you still configure by hand.
The one-click list
| Agent | Model config Prism writes | MCP entry |
|---|---|---|
| Claude Code | ~/.claude/settings.json — six env keys | ~/.claude.json |
| Codex Desktop & CLI | ~/.codex/config.toml + codex_catalog.json | ~/.codex/config.toml (TOML) |
| Factory Droid | ~/.factory/settings.json — customModels | ~/.factory/mcp.json |
| OpenCode | ~/.config/opencode/opencode.json — two providers | ~/.config/opencode/opencode.json |
| ZCode | ~/.zcode/v2/config.json | ~/.zcode/cli/config.json |
| Zed | settings.json — one provider, per-model capabilities | settings.json — context_servers |
| Oh My Pi (OMP) | ~/.omp/agent/models.yml | ~/.omp/agent/mcp.json |
| Grok Build | ~/.grok/config.toml — [model.prism-*] sections | ~/.grok/config.toml (TOML) |
| Pi | ~/.pi/agent/settings.json + models.json | ~/.pi/agent/mcp.json |
| Kimi Code | ~/.kimi-code/config.toml | ~/.kimi-code/mcp.json |
| Prime Agent | ~/.prime/agent/settings.json | ~/.prime/agent/settings.json |
| Empryo | Empryo config.json (keychain-backed key) | Empryo config.json |
| Hermes | ~/.hermes/config.yaml — marked YAML region | ~/.hermes/config.yaml |
| DeepSeek Harness | profile cordis.patch.yml under $DSH_HOME | home-level cordis.patch.yml |
"One click" means the Agents tab has a Setup button and Prism writes the file. It does not mean every agent is equally well served by a config file, which is where the interesting differences live.
Why the list is so long
An agent that accepts a base URL and a key is trivial to support. Most of these are not that, and each one needed its own writer for a specific reason.
Agents that fight back
Claude Code re-syncs on every Prism startup because Claude Code's own file watcher rewrites settings.json. Prism watches and reapplies. This is why "Claude Code is talking to Anthropic again" is usually fixed by restarting Prism rather than by re-running Setup.
Zed stores its configuration as JSONC with comments. JSON has no comment syntax, so rewriting the file loses them — Prism keeps a backup before it touches anything. Worth knowing if you have carefully annotated settings.
Empryo keeps credentials in the OS keychain and refuses inline keys entirely, so Prism's setup cannot finish the job alone. One command does it:
empryo --set-key prism prism
Agents with two providers, not one
OpenCode, Pi, OMP and Prime Agent all need two provider entries: one speaking the OpenAI-compatible Chat Completions protocol and one speaking Responses. This is not redundancy — the protocol is chosen per model, and those clients declare it per provider, so a single entry cannot serve both. Their configs end up with prism and prism-responses side by side.
Kimi Code needs the same pair plus a per-model alias block, because it addresses models through a sanitised name rather than the provider's own model id.
Agents where writing the obvious file would be wrong
DeepSeek Harness is the sharpest example. It migrates settings.yaml into each profile's cordis.patch.yml on startup and renames the original settings.yaml.imported. A writer that edited settings.yaml would silently do nothing. Prism merges route rows directly into the profile patch file at the correct indentation instead, with compat.supportsDeveloperRole: false and maxTokensField: max_tokens set on the chat route, which is what makes those models behave the same as they do elsewhere.
Hermes keeps providers and MCP servers in one YAML file, so Prism maintains marker-delimited regions and can remove one without disturbing the other. Codex gets two managed blocks — a provider block and a catalog pointer — plus a generated codex_catalog.jsonholding context windows, reasoning levels and auto-compaction thresholds. Prism deliberately does not set Codex's top-level model key, so which model Codex starts with stays your choice.
Clients you configure by hand
Four more clients are documented and supported, but cannot be automated — either because they have no config file Prism should own, or because they must not be redirected.
| Client | Why manual | What you set |
|---|---|---|
| Cursor | Base URL override lives in its own settings UI | Override the OpenAI base URL to http://127.0.0.1:11434/v1 |
| Claude Desktop | Cannot be pointed at a custom model provider | MCP only, via a stdio bridge entry |
| OpenAI SDK | It is a library, not an installed app | base_url and api_key in your client code |
| Any Ollama-compatible client | Prism serves the same API shape on port 11434 | The base URL — no key needed on the local route |
Claude Desktop is worth calling out: it only launches stdio MCP servers, so Prism's Streamable HTTP gateway is reached through a small bridge command. Every server you enabled in Prism becomes available in one entry, and no upstream MCP credential ever reaches Claude Desktop.
How to check it is working
The Stats tab breaks down traffic by client, which turns "did the integration take?" into a one-glance question. Detection reads the User-Agent and maps known agents; a client can label itself explicitly by sending X-Client-Name, which takes priority over User-Agent matching.
curl http://127.0.0.1:11434/health
# {"status":"ok"}
curl http://127.0.0.1:11434/v1/models
# the model list agents see - unauthenticated on the local routeIf a client appears as "Unknown" in the breakdown, it is still working — detection simply did not recognise it. If it does not appear at all, the request never reached Prism, which is a configuration problem in the client rather than in the integration.
Adding an agent that is not on the list
Any client that accepts a custom OpenAI-compatible endpoint works manually with two values: base URL http://127.0.0.1:11434/v1 and any non-empty key, since the local route accepts prism. Clients that speak Anthropic Messages use http://127.0.0.1:11434 with no path suffix, and send the same token as ANTHROPIC_AUTH_TOKEN.
/v1/messages is Anthropic-shaped; /v1/chat/completions and /v1/responses are OpenAI-shaped. There is no /api/chat route — Prism is a proxy in front of your providers, not an Ollama server.