Docs02 of 14
Connect the vendors you pay for
Each vendor runs through its own CLI, under the login you already hold. Nothing pools.
How a vendor connects
Vendor CLIs are not bundled. Install the one you use, sign in to it as you normally do, and the desk runs it as its own process under that login. Settings → LLMs → Add bot opens Add a bot, which lists what the desk can see — Local Grok Build, Local Claude Code, Local Codex, Local Cursor Agent — each with a state: Ready on the desk, Installed — sign in with agent login, Needs auth, or Not found.
| Vendor | What runs | Protocol | Notes |
|---|---|---|---|
| Grok | the local Grok CLI, grok agent stdio | ACP over stdio | Your Grok plan |
| Claude | the local Claude Code CLI | ACP over stdio | Your Claude plan |
| Codex | the local Codex CLI | ACP, plus an App Server when the CLI has one | The App Server adds native history and capability discovery |
| Cursor | cursor-agent, the Cursor CLI | ACP over stdio | Needs the Cursor Agent CLI, not the editor app. Your Cursor login. |
| Custom | an HTTP endpoint you name | Anthropic Messages or OpenAI Chat Completions | Hosted, or on your own machine |
Each vendor runs under its own login. Subscriptions, context, tools and sandboxes are never pooled, proxied, or shared between vendors.
If a CLI lives somewhere unusual
The desk finds the vendor CLIs on its own. If yours is somewhere it does not look, these environment variables point at it:
| Vendor | Variable | Points at |
|---|---|---|
| Codex | CODEX_PATH | the installed Codex CLI |
| Codex | CODEX_ACP_BIN | an ACP bridge other than the bundled @agentclientprotocol/codex-acp |
| Claude | CLAUDE_CODE_EXECUTABLE | the installed Claude Code CLI |
| Claude | CLAUDE_ACP_BIN | an ACP bridge other than the bundled @agentclientprotocol/claude-agent-acp |
| Cursor | CURSOR_ACP_BIN | a Cursor agent binary other than agent acp |
Custom bots: your own keys and local models
Add a bot → Your own. Give it a Bot name, a Provider (Anthropic Messages or OpenAI Chat Completions), the Base URL, and the API key. Set the Context window, and pick a colour. Test the API before Create — the test asks the endpoint which models it serves; tick the ones you want under Models on this key. The default model is always approved.
- One key is one bot and one leftover ring, however many models it offers. Usage still breaks the tokens out per model.
- Any chat on that bot can pick between the ticked models.
- The key is stored only on this computer, in the OS credential store — Keychain on macOS, DPAPI on Windows. If that store is unavailable, the desk refuses to save it at all.
- A local model on your own machine is a custom bot with a local URL. Routing can prefer it: Allow local models — it costs nothing and never leaves the machine.
- Custom OpenAI-compatible support targets Chat Completions. The Responses API and Azure deployment routing are not implemented.
OpenClaw and Hermes
OpenClaw and Hermes are harnesses, not vendors. Settings → LLMs shows whether each runtime is installed. A plan can grant them for one wave, or you can name openclaw/main or hermes/<profile>; those tasks join the lineup. They get no Usage ring, and delete, rename, credentials and elevate stay blocked. Settings → LLMs → Install MCP writes a restricted Workhorse server into OpenClaw's mcp.servers (and Hermes's mcp_servers if Hermes is installed) so those apps can list, read and ask chats, and spawn a Workhorse worker on a chat you pick. No token is stored.