Skip to main content
Already using a coding-agent CLI? This is the per-harness quick reference for pointing it at Gas City. Each section gives the provider name, the env vars the harness reads (its serving-env contract), and the two permutations you’ll actually use: direct (your existing login / API key) and a custom endpoint (a proxy, Bedrock/Vertex, or an OpenAI-compatible gateway), plus how to pick the model. These are recipes. For how the pieces work — the abstract-vs-raw upstream model, harness-portable rendering, secrets, the fingerprint behavior, and every other agent knob — see Configuring an Agent. The authoritative field list is the Config Reference. Two things hold for every recipe:
  • Direct usually needs no upstream block at all. If the harness already finds its credentials in the environment (your normal login or *_API_KEY), just set provider and go — Gas City passes the ambient environment through.
  • Secrets are $VAR refs, expanded from the controller’s environment at launch — never inlined into city.toml.

At a glance

”—” under base URL means the harness has no standard base-URL env var: for a custom endpoint, supply it through the upstream’s raw env block. Model lists below are the built-in choices; override or extend a harness’s options_schema to add your own.

Native harnesses

These ship a serving-env binding, so an abstract upstream (base_url / api_key / auth_token) renders onto the harness’s env vars automatically — the same upstream works across harnesses.

Claude Code — provider = "claude"

Reads ANTHROPIC_BASE_URL and ANTHROPIC_API_KEY (or ANTHROPIC_AUTH_TOKEN for bearer-token gateways).

Codex CLI — provider = "codex"

Reads OPENAI_BASE_URL and OPENAI_API_KEY.
With no model or effort set, codex runs on the model and reasoning effort from your own Codex configuration; Gas City passes no --model or model_reasoning_effort flag. Which models are available depends on how Codex is logged in (a ChatGPT-account login serves a different set than an API key), so pin a model only when you know the account can use it.

Gemini CLI — provider = "gemini"

Reads GOOGLE_GEMINI_BASE_URL and GEMINI_API_KEY.

Kimi Code — provider = "kimi"

Reads KIMI_BASE_URL and KIMI_API_KEY.

Grok — provider = "grok"

Reads XAI_API_KEY (key only — no standard base-URL var).

Cursor Agent — provider = "cursor"

Reads CURSOR_API_KEY (cursor-agent).

Kiro — provider = "kiro"

Reads KIRO_API_KEY (kiro-cli; no model option).

GitHub Copilot — provider = "copilot"

Default path uses your GitHub account bearer (COPILOT_GITHUB_TOKEN). For a custom model provider, set COPILOT_PROVIDER_BASE_URL + COPILOT_PROVIDER_API_KEY.

Sourcegraph AMP — provider = "amp"

Reads AMP_URL and AMP_API_KEY.

OpenCode and gateways

OpenCode is a multi-provider harness — one CLI fronting many model providers, where the credential env var is provider-specific. It has no single serving-env binding, so the upstream names its own target with the per-field *_env override (see the gateway section of the main guide). Gas City ships ready-made groq and cerebras presets on top of it.

Groq — provider = "groq"

Cerebras — provider = "cerebras"

OpenCode (any provider) — provider = "opencode"


Login-based harnesses

These authenticate through their own login/device flow and read no Gas City upstream env. Set provider and run their normal login once on the box; no [upstreams] block is needed.
Antigravity also takes model and effort options (low · medium · high) and plan / accept-edits permission modes, mapped to agy’s --model, --effort, and --mode flags. Model values are agy’s stable slugs (agy models lists them):
model and effort need agy 1.1.10 or newer — older versions silently ignore both flags at launch and run on the persisted default model.
If one of these later needs a custom endpoint, give it a raw upstream env block with whatever vars its CLI documents — the same escape hatch shown for Grok above.

Next steps

  • Other agent knobs (prompt, model permission modes, transport, runtime, pools, lifecycle): Configuring an Agent.
  • Ship a harness as a reusable preset — a provider and its upstream_env binding (a pack may also declare named [upstreams] endpoint presets as a base the importing city inherits; a city’s or fragment’s own [upstreams] override the pack-provided ones): Understanding Packs · Shareable Packs.
  • Exact fields and types: Config Reference.
Last modified on October 20, 2026