Claude Code
Claude Code talks to the Anthropic Messages API. ai& exposes an Anthropic-compatible /v1/messages endpoint, so any tool-calling model in our catalog can drive the agent loop.
Two ways to wire it up:
- Session —
exportthe env vars into your current shell. Lost when you close the terminal. Good for a one-off try. - Permanent — drop the same config into
settings.json. Persists across sessions, can be scoped per project or globally.
Session (current terminal only)
Section titled “Session (current terminal only)”1. Install Claude Code
Prerequisite: Node.js 18 or newer.
npm install -g @anthropic-ai/claude-codeConfirm the install — claude --version should print a version number:
claude --version2. Set the env vars in this terminal
export ANTHROPIC_BASE_URL="https://api.aiand.com"export ANTHROPIC_AUTH_TOKEN="sk-your-aiand-api-key"export ANTHROPIC_API_KEY=""export ANTHROPIC_DEFAULT_OPUS_MODEL="zai-org/glm-5.1"export ANTHROPIC_DEFAULT_SONNET_MODEL="zai-org/glm-5.1"export ANTHROPIC_DEFAULT_HAIKU_MODEL="zai-org/glm-5.1"export CLAUDE_CODE_SUBAGENT_MODEL="zai-org/glm-5.1"3. Run Claude Code
claude1. Install Claude Code
Prerequisites:
npm install -g @anthropic-ai/claude-codeConfirm the install — claude --version should print a version number:
claude --version2. Set the env vars in this terminal
$env:ANTHROPIC_BASE_URL = "https://api.aiand.com"$env:ANTHROPIC_AUTH_TOKEN = "sk-your-aiand-api-key"$env:ANTHROPIC_API_KEY = ""$env:ANTHROPIC_DEFAULT_OPUS_MODEL = "zai-org/glm-5.1"$env:ANTHROPIC_DEFAULT_SONNET_MODEL = "zai-org/glm-5.1"$env:ANTHROPIC_DEFAULT_HAIKU_MODEL = "zai-org/glm-5.1"$env:CLAUDE_CODE_SUBAGENT_MODEL = "zai-org/glm-5.1"3. Run Claude Code
claudePermanent (settings.json)
Section titled “Permanent (settings.json)”Claude Code reads its config from a settings.json file on startup. Drop the same env block in and you never have to re-export:
{ "env": { "ANTHROPIC_BASE_URL": "https://api.aiand.com", "ANTHROPIC_AUTH_TOKEN": "sk-your-aiand-api-key", "ANTHROPIC_API_KEY": "", "ANTHROPIC_DEFAULT_OPUS_MODEL": "zai-org/glm-5.1", "ANTHROPIC_DEFAULT_SONNET_MODEL": "zai-org/glm-5.1", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "zai-org/glm-5.1", "CLAUDE_CODE_SUBAGENT_MODEL": "zai-org/glm-5.1" }}Two scopes — pick one:
- Project (
.claude/settings.local.jsonin your repo) — applies only when you runclaudefrom this repo. Git ignores*.local.jsonby Claude Code convention, so the key never gets committed. Recommended for trying ai& without touching your global setup. - Global (
~/.claude/settings.json) — applies machine-wide. Every Claude Code surface on your machine picks up the same ai& backend: theclaudeCLI in any terminal session, the Claude Code VS Code extension (the extension and CLI share this file by design), and the Claude Desktop app. Use this once ai& is your default everywhere.
The commands below safely merge the env block into the file — any existing keys you have (permissions, hooks, etc.) are preserved. They use Node, which is already on your machine since step 1 installed Claude Code via npm. Replace sk-your-aiand-api-key with your real key before running.
Project scope (recommended for first try)
Section titled “Project scope (recommended for first try)”Run from the root of your project:
mkdir -p .claude && node -e 'const fs = require("fs"), p = ".claude/settings.local.json";const d = fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, "utf8")) : {};d.env = Object.assign(d.env || {}, { ANTHROPIC_BASE_URL: "https://api.aiand.com", ANTHROPIC_AUTH_TOKEN: "sk-your-aiand-api-key", ANTHROPIC_API_KEY: "", ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5.1", ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5.1", ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5.1", CLAUDE_CODE_SUBAGENT_MODEL: "zai-org/glm-5.1"});fs.writeFileSync(p, JSON.stringify(d, null, 2));'Run from the root of your project:
New-Item -ItemType Directory -Force -Path .claude | Out-Null$script = @'const fs = require("fs"), p = ".claude/settings.local.json";const d = fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, "utf8")) : {};d.env = Object.assign(d.env || {}, { ANTHROPIC_BASE_URL: "https://api.aiand.com", ANTHROPIC_AUTH_TOKEN: "sk-your-aiand-api-key", ANTHROPIC_API_KEY: "", ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5.1", ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5.1", ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5.1", CLAUDE_CODE_SUBAGENT_MODEL: "zai-org/glm-5.1"});fs.writeFileSync(p, JSON.stringify(d, null, 2));'@node -e $scriptGlobal scope (all projects)
Section titled “Global scope (all projects)”mkdir -p ~/.claude && node -e 'const fs = require("fs"), os = require("os"), path = require("path");const p = path.join(os.homedir(), ".claude", "settings.json");const d = fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, "utf8")) : {};d.env = Object.assign(d.env || {}, { ANTHROPIC_BASE_URL: "https://api.aiand.com", ANTHROPIC_AUTH_TOKEN: "sk-your-aiand-api-key", ANTHROPIC_API_KEY: "", ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5.1", ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5.1", ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5.1", CLAUDE_CODE_SUBAGENT_MODEL: "zai-org/glm-5.1"});fs.writeFileSync(p, JSON.stringify(d, null, 2));'New-Item -ItemType Directory -Force -Path $HOME\.claude | Out-Null$script = @'const fs = require("fs"), os = require("os"), path = require("path");const p = path.join(os.homedir(), ".claude", "settings.json");const d = fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, "utf8")) : {};d.env = Object.assign(d.env || {}, { ANTHROPIC_BASE_URL: "https://api.aiand.com", ANTHROPIC_AUTH_TOKEN: "sk-your-aiand-api-key", ANTHROPIC_API_KEY: "", ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5.1", ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5.1", ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5.1", CLAUDE_CODE_SUBAGENT_MODEL: "zai-org/glm-5.1"});fs.writeFileSync(p, JSON.stringify(d, null, 2));'@node -e $scriptVerify
Section titled “Verify”Inside Claude Code, run:
/statusThe panel shows the active base URL and model. You should see https://api.aiand.com and zai-org/glm-5.1.
You can also probe the wire-level path from the shell:
curl -sS https://api.aiand.com/v1/models \ -H "Authorization: Bearer sk-your-aiand-api-key" \ | grep -o 'zai-org/glm-5.1'(Invoke-RestMethod https://api.aiand.com/v1/models ` -Headers @{ Authorization = "Bearer sk-your-aiand-api-key" }).data.id ` | Select-String "zai-org/glm-5.1"A match means the key authenticates and the model is on your org.