DocsCoding agents

dense CLI

Use dense to put Claude Code, Codex and OpenCode through condense. You install once and log in once. dense keeps the machine signed in and injects the right base URL and credentials into each run, so there is no key swap and no per-run configuration.

dense is open source. Releases are built from tagged source on GitHub Actions. For the wiring per agent, see Connect your coding agent.

Install

Run the installer for your platform:

bashcurl -fsSL https://cli.condense.chat/unix | sh

One install covers every agent. The installer drops the dense binary on your PATH and hands off to dense setup, which logs you in. The same login and token then back Claude Code, Codex and OpenCode. You install nothing per agent. dense doesn't bundle the agents themselves: it routes the ones you already have.

Setup also offers to route the bare claude command through dense, so you keep typing claude and it goes through condense.

Binaries ship for macOS and Linux (x86_64 and aarch64) and Windows. Other platforms build from source.

Log in

Log in with a browser device flow:

bashdense login

This opens login.condense.chat with a one-time code, so you don't copy or paste a key. The token is stored under ~/.config/dense/ (%APPDATA%\dense on Windows) with owner-only permissions.

How it works

When you run dense claude, dense does the following:

  1. dense claude <args> resolves the real claude binary and runs it as a child process. Your arguments, stdin/stdout, Ctrl-C and exit code all belong to Claude Code.
  2. On the child process only, dense sets ANTHROPIC_BASE_URL=https://api.condense.chat/anthropic and injects its credentials (X-Condense-Auth-Token, X-Condense-Session-Id) through ANTHROPIC_CUSTOM_HEADERS. Your shell environment is never modified. Headers you already set there are preserved.
  3. Your existing Claude auth keeps working: ANTHROPIC_API_KEY forwards through verbatim as the upstream key.

dense persist places a thin shim ahead of the real claude on your PATH, so the bare command routes through dense. The real binary is never moved or modified. dense unpersist removes the shim instantly.

Codex and OpenCode don't need a wrapper process. Their own config points them at the same proxy, and every request carries the same headers.

Commands

Every dense command, with what it does.

dense login

Authenticates this machine with a browser device flow.

bashdense login

dense logout

Clears stored credentials.

bashdense logout

dense claude

Runs Claude Code through the proxy. Arguments pass straight through.

bashdense claude <args>

dense persist

Shims the named tools so the bare command routes through dense. With no arguments, shims all of them. Non-destructive.

bashdense persist [tools…]

dense unpersist

Removes the shims.

bashdense unpersist [tools…]

dense status

Shows the current login, endpoint and credential locations.

bashdense status

dense doctor

Verifies the install is wired correctly.

bashdense doctor

dense self update

Updates the binary in place, with a sha256-verified download from GitHub releases.

bashdense self update

dense self uninstall

Removes dense, its shims and PATH wiring. Credentials are kept.

bashdense self uninstall

Next steps

  • Connect your coding agent: set up Claude Code, Codex or OpenCode.
  • API reference: dense drives the same public API as any other client. See its base URL, authentication, per-request headers and error shapes.