Connect a harness

Point Claude Code, Codex, OpenClaw, Hermes or any compatible client at the proxy.

First complete installation and garcon setup on this machine. Setup starts the proxy; the configuration below connects your harness to it. Repeat this connection step on every machine, even when they share a Supabase project.

The Settings view of the dashboard generates every snippet below for a chosen harness, provider and account. The account is only a label the proxy records; use the login the harness actually signs in with so usage lines up with the right subscription. Replace me@example.com.

Claude Code

environment
ANTHROPIC_BASE_URL=http://127.0.0.1:4141/claude/me@example.com \
_CLAUDE_CODE_ASSUME_FIRST_PARTY_BASE_URL=1 claude

Claude Code appends /v1/messages itself. The second variable keeps subscription (claude.ai) login working through a non-Anthropic host.

Codex

~/.codex/config.toml
model_provider = "garcon"

[model_providers.garcon]
name = "OpenAI"
base_url = "http://127.0.0.1:4141/codex/me@example.com/backend-api/codex"
wire_api = "responses"
requires_openai_auth = true

Codex needs its own provider entry because the built-in one ignores base URL overrides under a ChatGPT login; a custom provider also uses plain HTTP instead of websockets, which is what lets the proxy read usage. Only model calls are routed; plugin, app and usage-limit traffic goes to chatgpt.com directly.

OpenClaw

~/.openclaw/openclaw.json
{
  models: {
    mode: "merge",
    providers: {
      anthropic:  { baseUrl: "http://127.0.0.1:4141/openclaw/me@example.com/anthropic" },
      openai:     { baseUrl: "http://127.0.0.1:4141/openclaw/me@example.com/openai/v1" },
      openrouter: { baseUrl: "http://127.0.0.1:4141/openclaw/me@example.com/openrouter/api/v1" },
    },
  },
}

Each adapter appends its own endpoint path. The openai-codex (ChatGPT OAuth) provider uses …/openclaw/me@example.com/chatgpt/backend-api. Keys stay in OpenClaw; the proxy forwards Authorization and x-api-key untouched.

Hermes

~/.hermes/config.yaml
providers:
  openrouter:
    base_url: http://127.0.0.1:4141/hermes/me@example.com/openrouter/api/v1
  anthropic:
    base_url: http://127.0.0.1:4141/hermes/me@example.com/anthropic
  openai:
    base_url: http://127.0.0.1:4141/hermes/me@example.com/openai/v1

Hermes appends /chat/completions or /v1/messages itself and asks for stream_options.include_usage, which is what lets the proxy see token counts.

Anything else

Use http://127.0.0.1:4141/<name>/<account>/<provider> plus whatever path prefix the client's SDK expects (/v1 for OpenAI SDKs, /api/v1 for OpenRouter). Rows are tagged with that name and the dashboard lists it alongside the known harnesses. OpenAI-compatible clients only report tokens on streamed replies when they send stream_options: {"include_usage": true}.

Verify your first request

Keep a copy of your original configuration so you can restore it before uninstalling Garcon. Restart the harness after applying its generated configuration.

Verify any of these with one short call (claude -p hi, codex exec hi) and a new row in the Logs view or at /api/usage.

If no row appears, run garcon doctor, confirm that the harness is using the local URL, and check Logs with all filters cleared. Doctor checks the proxy and reports whether any local requests have been recorded; it does not change harness configuration. See installation troubleshooting.