Agents
Providers & logins
Connect Claude Code, Codex, Cursor, OpenCode, OpenRouter and DeepSeek, keep their CLIs current, and run chats on more than one login.
Codz has no model of its own. It runs the coding agents you already use, on your own accounts and plans: four command-line agents that keep their own logins, and two model providers you connect with a key.
Unless a section says otherwise, the settings here are in Settings ▸ Models & providers. Open Settings with ⌘,.
The six providers
| Provider | What Codz runs | How you sign in |
|---|---|---|
| Claude Code | The claude CLI | The CLI’s own login, claude auth login |
| Codex | The codex CLI | The CLI’s own login, codex login |
| Cursor | The cursor-agent CLI | The CLI’s own login, cursor-agent login |
| OpenCode | The opencode CLI | The providers you connected with opencode auth login |
| OpenRouter | Codz’s own agent, on the OpenRouter model you pick | Your OpenRouter account, connected in Codz |
| DeepSeek (Preview) | The DeepSeek Harness runtime, dsh-jsonrpc-agent | A DeepSeek API key you paste in Codz |
Codz doesn’t hold the four CLIs’ logins: each CLI keeps its own where it always has. The keys you give Codz, for OpenRouter, DeepSeek or a second Cursor login, are kept in this Mac’s Keychain and never sent to Codz’s servers. Every chat runs on your own account and counts against that provider’s plan or billing.
Provider status
The first group, Provider status, has a row for each provider:
- CLI ready, with the version and where Codz found the CLI, or CLI missing.
- For OpenRouter, Connected or Not connected. For DeepSeek, CLI missing, Key missing or Ready.
- Update available when a newer release is out. Claude Code, Codex and Cursor get an Update button. Update needed means Codz needs a newer version than the one installed.
To look again for CLIs, open Settings ▸ General and click Check now next to Re-run environment check, or run codz doctor in Terminal (see Commands).
How Codz finds a CLI
Codz uses the first copy it finds, in this order:
- A version you installed from Codz (see Install and update).
/usr/local/bin,/opt/homebrew/bin,~/.local/bin,~/.npm-global/bin,~/.bun/binand/usr/bin, then the rest of the app’sPATH.- Where the provider’s own installer puts it:
~/.opencode/binfor OpenCode, and Codex’s standalone install in~/.codex. - A copy that comes with an app: the Cursor CLI the Cursor app keeps up to date, and the Codex CLI inside ChatGPT.app.
Codz opened from the Finder doesn’t read your shell’s startup files, so a folder added to PATH only in ~/.zshrc isn’t searched. While a provider is missing, Codz looks again each time you come back to the app.
Set up a missing provider
When a chat’s provider isn’t ready, a card above the composer says what is missing. Your draft stays where it is.
- Set up Claude (or Codex, or Cursor): the CLI wasn’t found. Install Claude installs it from Codz; see below.
- Set up OpenCode, or DeepSeek without its runtime: Setup guide opens the install instructions, at opencode.ai or the DeepSeek Harness repository.
- Connect OpenRouter or Connect DeepSeek: the account or key is missing. Add it in Settings ▸ Models & providers, as described below.
Check again looks for the provider once more, and Choose model opens the model picker so you can run the chat on another provider instead.
Install and update
Codz can install and update Claude Code, Codex and Cursor for you. It downloads the provider’s official installer, installs the CLI into a folder of its own and checks the version it reports. Your own installation, your PATH and your package manager are left alone, and new turns use the new version.
- Install Claude (and the others) on the setup card installs the latest release.
- Update in Provider status installs the newest release when one is out.
- Local CLI versions shows each of the three with the version in use and where it is. Update installs the latest, Choose version… switches between Existing installation and the versions Codz installed, and Restore previous goes back to the one before. For Cursor, Choose version… also offers the versions Cursor kept on this Mac, marked Retained on Mac.
- When a Codex model needs a newer CLI, the turn stops with Codex needs an update and an Update Codex… button.
Codz won’t replace a CLI while one of its chats is working; the button says “Wait for the running Claude task to finish.” To know what is current, Codz asks codz.com once a day; the request doesn’t include your account or the versions you have installed.
Sign in
Claude Code and Codex. The provider’s accounts group starts with a CLI login row showing Signed in or Not signed in, as the CLI itself reports it. Sign in runs the CLI’s own login and finishes in your browser; the row shows Finish in your browser and Cancel until you do.
Cursor and OpenCode. Sign in with the CLI in Terminal: cursor-agent login or opencode auth login. Codz can’t read their sign-in status, so their rows don’t show one.
OpenRouter
To connect your OpenRouter account:
- In the OpenRouter group, click Connect OpenRouter.
- Sign in on openrouter.ai in the browser tab that opens, and approve the request.
- Back in Codz, the Account row shows the key it connected with.
If a browser sign-in doesn’t work, create a key at openrouter.ai/keys and click Paste key… on the API key row instead.
Once you’re connected:
- Spend on this key shows what the key has spent, and its limit if you set one. Free tier means the account has bought no credits, which paid models need.
- Models counts the models you can pick. Only models that can use tools are listed. Refresh reloads the list.
- Default model takes a full OpenRouter id, such as
anthropic/claude-sonnet-5. Leave it blank to pick a model in each chat. - Disconnect makes Codz forget the key. It stays active on your OpenRouter account until you delete it at openrouter.ai/keys.
OpenRouter chats are billed to your OpenRouter account. For these chats Codz runs the agent itself: the model reads files, edits them and runs commands through Codz, and each edit and command waits for your approval unless the chat is set to Full auto.
DeepSeek
DeepSeek is a preview, and needs two things:
- The DeepSeek Harness JSON-RPC runtime,
dsh-jsonrpc-agent, installed from the DeepSeek Harness repository. The Runtime row shows where Codz found it. - An API key from platform.deepseek.com/api_keys, saved with Paste key… on the Paste key row. Codz doesn’t use a DeepSeek CLI login.
The key is handed only to the DeepSeek Harness process a chat runs, and requests are billed to your DeepSeek account. A blank Default model uses deepseek-v4-flash. DeepSeek joins Settings ▸ Default models once both parts are in place.
More than one login
Claude Code, Codex, OpenCode and Cursor can each run chats on several logins, such as a work account and a personal one. Each has an accounts group, such as Claude accounts: the CLI’s own login first, then the ones you add.
- Click Add account… on the Add Claude account row (for Cursor, Add API key…).
- Give it a name for yourself, such as “Work”, and click Add.
- Sign in from its row. Claude Code and Codex finish in your browser; for OpenCode, Sign in… runs
opencode auth loginin Terminal.
An added Claude Code, Codex or OpenCode login lives in a folder of its own, where its chats keep their transcripts. For Claude Code and Codex the folder starts with a copy of the CLI’s settings, never its login. A second Cursor login is a user API key from the Cursor dashboard, because the CLI’s browser login can’t be duplicated. Codz keeps the key in the Keychain and never shows it again.
- Use for new chats makes a login the default for new chats; it then shows Default for new chats.
- In a chat, the model picker shows an Account row once its provider has a second login. Each login lists its plan limit where Codz can read one, and says whether it has this chat or starts a new context, carrying the conversation over as in a handoff.
- The model chip in the composer names the account after the effort.
- Remove asks first. For a folder-based login you can keep its folder to sign back in later, or delete it. Chats on a removed login go back to the CLI’s own login and start a new context.
Codex reports plan limits for each login. Claude Code’s plan meters describe the CLI’s own login only.
When a login stops working
When Claude Code or Codex can’t use its login, the turn stops and says why where it stopped, such as “Your Claude login expired. Sign in again to continue.” A banner above the composer carries the fix:
- Click Sign In. Codz runs the CLI’s login, and the banner asks you to finish signing in in your browser.
- Once you’re signed in, the banner says “You’re signed in to Claude again”. Click Try Again to resend the message that stopped.
- When Claude Code couldn’t refresh its login because another Claude Code process was refreshing it, the banner offers Try Again instead. This usually clears within a minute.
- When the CLI already reports that you’re signed out, the banner appears before you send, since the turn would stop at its first request.
- With more than one login, the notice names the one that failed, such as “Claude · Work”.
Cursor and OpenCode sign-in failures, and credentials Codz doesn’t manage (Bedrock or Vertex, an ANTHROPIC_API_KEY set outside Codz, or an organization that turned off subscription access), show the provider’s own error instead, with no Sign In button. Fix those in the CLI itself.
Provider settings
Each CLI provider has a group of its own settings:
| Group | Settings |
|---|---|
| Claude | Default model, Effort, Prompt suggestions, Safe mode, Show chats in Claude Desktop, Claude in Chrome, Bypass permissions |
| Codex | Default model, Config profile, Reasoning effort, Ephemeral sessions |
| Cursor | Default model |
| OpenCode | Default model |
- A blank Default model leaves the choice to the CLI. Models & loadout explains how these defaults meet the loadout.
- Safe mode turns off CLAUDE.md, skills, plugins, hooks, MCP servers and other customizations, for troubleshooting.
- Show chats in Claude Desktop adds each Claude chat to Claude Desktop’s sidebar after its first turn. It is off by default, because Claude comes to the front when a chat is added.
- Bypass permissions lets Claude run commands without asking. See Modes & approvals.
- Continue in Claude (and the others) opens the provider’s own app, for the settings that live there.
- Configuration on disk opens each CLI’s configuration folder:
~/.claude,~/.codex,~/Library/Application Support/Cursor/Userand~/.config/opencode. - New models lists newly announced Claude Code, Codex and Cursor models, and whether your installed CLI lists them yet: Listed by provider, Announced, Rolling out or Update required, with a Source link.
Troubleshooting
A model in the picker is dimmed with “The claude CLI isn’t installed.” Codz can’t find that CLI. Install it (see Set up a missing provider), or check where it lives against How Codz finds a CLI.
“Codz can’t unlock the saved key on this build of the app.” Codz can no longer read the OpenRouter or DeepSeek key it saved. Click Reconnect for OpenRouter, or paste the DeepSeek key again. Nothing was sent anywhere.
The OpenRouter sign-in fails. “Codz could not open a local port to finish the sign-in” and “The sign-in timed out” both leave you disconnected; try again, or paste a key from openrouter.ai/keys.
An install or update fails. The sheet says why: the installer couldn’t be downloaded, didn’t finish, or installed a CLI that didn’t report the expected version. Your existing installation is untouched.
A Codex account says Same ChatGPT login. Both Codex logins are signed in to one ChatGPT account, so they share one allowance. Sign in again on that row with a different account.
A Cursor account’s API key is missing from the Keychain. The row says Key missing. Paste the key again on that account’s row.