skip to content
Everything else

Tools

Everything else

Any tool with a base-URL field takes the same three values and lands on Conifer. Each section below gives the wiring for one tool and the one setting that commonly goes wrong.

FieldValue
Base URLhttps://api.conifer.build/v1
API key$CONIFER_API_KEY
Modelan id from the catalog

Tools that speak only the Anthropic wire drop the /v1 suffix.

opencode

~/.config/opencode/opencode.json
{
  "provider": {
    "conifer": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Conifer",
      "options": {
        "baseURL": "https://api.conifer.build/v1",
        "apiKey": "{env:CONIFER_API_KEY}"
      },
      "models": {
        "claude-haiku-4-5": {},
        "claude-fable-5": {},
        "gpt-5.5": { "options": { "reasoningEffort": "none" } }
      }
    }
  }
}
terminal
opencode run --model conifer/claude-haiku-4-5 "add error handling to fetchUser"

The reasoningEffort line keeps reasoning off on gpt-5.5. opencode sends its tool set on every turn, and that model family will not take function tools with reasoning on. Claude ids need nothing extra. opencode’s prompt caching applies to them and the cache reads show on the receipt.

Pi

~/.pi/agent/models.json
{
  "providers": {
    "conifer": {
      "baseUrl": "https://api.conifer.build/v1",
      "api": "openai-completions",
      "apiKey": "!printenv CONIFER_API_KEY",
      "models": [
        { "id": "claude-haiku-4-5", "name": "Claude Haiku (Conifer)", "contextWindow": 200000, "maxTokens": 32000 }
      ]
    }
  }
}

The ! in apiKey tells Pi to run printenv CONIFER_API_KEY and use what it prints, so the key stays in your environment and out of the file. It works on Pi 1.x and on the older 0.x releases alike, which a plain $CONIFER_API_KEY does not. The Pi page has the details. Then run it.

terminal
pi --provider conifer --model claude-haiku-4-5 "review this diff for races"

Aider

terminal
export OPENAI_API_BASE=https://api.conifer.build/v1
export OPENAI_API_KEY=$CONIFER_API_KEY
aider --model openai/claude-haiku-4-5

The openai/ prefix tells Aider which client to use. The rest of the id is the catalog model.

Continue and any base-URL field

Enter the three values from the table above wherever the tool keeps its provider settings. The key is yours, so the tool bills to your Conifer account and every turn gets a receipt. An agent loop needs tools, so check caps on the catalog before pointing a tool at an unfamiliar id. A tool that speaks only the Anthropic wire follows the Claude Code page. Cursor and VS Code have their own pages.

OpenClaw & droid

Install each one the upstream way. OpenClaw and droid speak the Anthropic wire, so point them at https://api.conifer.build with no /v1, put your key in the apiKey field and name a claude-* id from the catalog. Both send a large tool preamble, so pick a model with a context window of at least 8,750 tokens for OpenClaw and 13,500 for droid.

openclaw.json
{
  "models": { "providers": { "conifer": {
    "baseUrl": "https://api.conifer.build",
    "apiKey": "sk-conifer-…",
    "api": "anthropic-messages",
    "models": [{ "id": "claude-haiku-4-5", "name": "Conifer", "contextWindow": 200000, "maxTokens": 8192 }]
  } } },
  "agents": { "defaults": { "model": { "primary": "conifer/claude-haiku-4-5" } } }
}

OpenClaw needs Node 22.19 or newer. Set contextWindow to the model’s window from the catalog.

conifer-droid-settings.json
{
  "customModels": [
    {
      "provider": "anthropic",
      "baseUrl": "https://api.conifer.build",
      "apiKey": "sk-conifer-…",
      "model": "claude-haiku-4-5",
      "displayName": "Conifer"
    }
  ],
  "model": "custom:Conifer-0"
}

Launch droid as droid --settings /path/to/conifer-droid-settings.json. The model value custom:Conifer-0 selects the first customModels entry by display name and index, so it changes if you rename the entry.

Conductor, cmux & Zed

Wrappers launch the same binaries, so they need the same two values, put where each wrapper reads them.

Conductor: Settings, Env
ANTHROPIC_BASE_URL=https://api.conifer.build
ANTHROPIC_AUTH_TOKEN=sk-conifer-…

In Conductor, leave ANTHROPIC_API_KEY unset both in Conductor and in the shell that launches it, or Claude Code may go to Anthropic directly. Codex sessions read ~/.codex/config.toml, so the Codex page covers them.

~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.conifer.build",
    "ANTHROPIC_AUTH_TOKEN": "sk-conifer-…"
  }
}

cmux strips ANTHROPIC_* variables when it spawns an agent, so put the endpoint in Claude Code’s own settings file instead. That block applies machine-wide and stores the key in plaintext. Delete it to undo both.

settings.json
{
  "language_models": {
    "anthropic_compatible": {
      "Conifer": {
        "api_url": "https://api.conifer.build",
        "available_models": [
          { "name": "claude-haiku-4-5", "display_name": "Claude Haiku (Conifer)", "max_tokens": 200000, "max_output_tokens": 32000 }
        ]
      }
    },
    "openai_compatible": {
      "conifer": {
        "api_url": "https://api.conifer.build/v1",
        "available_models": [
          { "name": "gpt-5.5", "display_name": "GPT-5.5 (Conifer)", "max_tokens": 1050000 }
        ]
      }
    }
  }
}

In Zed the key does not go in the file. Enter it in the Agent Panel’s provider settings, or export it, since a provider named conifer reads CONIFER_API_KEY. Copy max_tokens from the catalog, because Zed budgets context by the number you write. A tool with no environment settings, no config file and no base-URL field has no path yet. Antigravity is in that state today.

Prove the redirect

terminal
curl -sI https://api.conifer.build/v1/models \
  -H "Authorization: Bearer $CONIFER_API_KEY" | head -1   # HTTP/2 200 = key and route are live

Then run one live turn. Every response from Conifer carries an x-conifer-request-id header and, on a buffered call, the cost. If a turn comes back without them, the tool went to the provider directly and not through Conifer.