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.

VendorWhat runsProtocolNotes
Grokthe local Grok CLI, grok agent stdioACP over stdioYour Grok plan
Claudethe local Claude Code CLIACP over stdioYour Claude plan
Codexthe local Codex CLIACP, plus an App Server when the CLI has oneThe App Server adds native history and capability discovery
Cursorcursor-agent, the Cursor CLIACP over stdioNeeds the Cursor Agent CLI, not the editor app. Your Cursor login.
Customan HTTP endpoint you nameAnthropic Messages or OpenAI Chat CompletionsHosted, 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:

VendorVariablePoints at
CodexCODEX_PATHthe installed Codex CLI
CodexCODEX_ACP_BINan ACP bridge other than the bundled @agentclientprotocol/codex-acp
ClaudeCLAUDE_CODE_EXECUTABLEthe installed Claude Code CLI
ClaudeCLAUDE_ACP_BINan ACP bridge other than the bundled @agentclientprotocol/claude-agent-acp
CursorCURSOR_ACP_BINa 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.