Agents
Each agent has its own idea of how a provider is configured, so alc translates one provider list into whatever the agent you are launching expects. This page is what it sets, agent by agent.
Every agent also runs on one codex login through the Codex
bridge; alc --codex <agent> is the same command
throughout, so it is not repeated below. The Antigravity
CLI is the one that works differently there: it keeps
its own Google login and gains the Codex models next to its own (On the Codex
login). That Google login serves every other agent in
turn (alc --agy <agent>).
Claude Code
claude — install · accepts an
Anthropic-compatible endpoint; any other API through alc's bridge (Any
provider, any agent).
Claude Code gets a settings file (--settings) holding the endpoint, the model
variables and the picker, and fetches its credential through apiKeyHelper from
a hash-pinned alc executable with --runtime <id> claude-credential. Old unscoped
helper calls retain legacy behavior. On Claude Code's own login the login answers
and the file carries the endpoint and model. See Background
sessions.
An Ollama profile gets more — see Local models.
alc claude
alc --openrouter claude
Codex CLI
codex — install · accepts the
OpenAI Responses API; a Chat Completions or Anthropic-only provider through
alc's bridge, as model_providers.alc_bridge.
alc sets --model and, when configured, --config model_reasoning_effort=<level>. A non-Codex provider also gets a full
model_providers.<id>.* override (base_url, wire_api=responses,
requires_openai_auth=false) and, when it needs a key, env_key plus
ALC_PROVIDER_API_KEY. An Ollama profile gets --oss --local-provider ollama
instead.
Codex CLI is the one agent that never goes through the bridge: a codex-kind
profile runs it directly on your native login.
alc codex
alc --openrouter codex
OpenCode
opencode — install · accepts any
API-compatible provider.
alc sets an inline OPENCODE_CONFIG_CONTENT JSON variable, writing no file,
naming the model as <provider-id>/<model>. The provider id is the kind name
for Anthropic, OpenAI, OpenRouter and Ollama profiles, and alc-<profile> for
every other kind.
A full provider.<id> object goes into the same JSON: always for Ollama,
vLLM, llama.cpp, custom and the newer presets; for the first four only when the base URL
has been pointed away from that kind's default. options.apiKey appears only
when the profile needs a key, so a default Ollama profile gets none.
alc opencode
alc --zai opencode
Pi
pi — install (npm install -g @earendil-works/pi-coding-agent) · accepts Anthropic, OpenAI or
OpenAI-compatible.
alc merges an alc-<profile> entry into
$PI_CODING_AGENT_DIR/models.json (default ~/.pi/agent/models.json) and
passes --provider, --model and, with an effort configured, --thinking.
The merge is additive: alc only ever writes keys named alc-*, the write is
atomic, and a models.json that fails to parse makes alc refuse rather than
replace it. An anthropic profile with no stored key skips the merge entirely
and launches with --provider anthropic, so Pi uses its own subscription
login.
alc pi
alc --minimax pi
Copilot CLI
copilot — install
· accepts OpenAI- or Anthropic-compatible.
alc sets COPILOT_PROVIDER_TYPE, COPILOT_PROVIDER_BASE_URL,
COPILOT_PROVIDER_API_KEY (skipped for keyless providers) and
COPILOT_MODEL. Pure BYOK: no file is written and no GitHub Copilot login is
needed.
alc copilot
alc --deepseek copilot
Goose
goose — install · accepts OpenAI- or
Anthropic-compatible.
alc sets GOOSE_PROVIDER, GOOSE_MODEL, an optional GOOSE_FAST_MODEL, and
the BYOK variables that provider needs: OPENROUTER_API_KEY, OLLAMA_HOST,
ANTHROPIC_API_KEY (plus ANTHROPIC_HOST when it differs from goose's
default), or the OPENAI_* set.
With no arguments of your own, alc appends goose's interactive session
subcommand; pass your own and they are forwarded exactly as given.
alc goose
alc --groq goose
Qwen Code
qwen — install · accepts OpenAI-,
Anthropic- or Gemini-compatible.
alc sets --auth-type <anthropic|openai|gemini> and --model, plus the
matching environment: ANTHROPIC_*, GEMINI_API_KEY for the google kind,
or OPENAI_*.
alc qwen
alc --xai qwen
Kimi Code CLI
kimi — install · accepts OpenAI-
or Anthropic-compatible.
alc reads your existing config (~/.kimi/config.toml, or ALC_KIMI_CONFIG),
merges in providers.alc-<profile>, models.alc-<profile> and
default_model, and writes the merged result to a new temp file (mode 0600)
passed as --config-file. Your real config is never written to, and the temp
file is deleted when Kimi exits, so the key touches disk only for the life of
that process. Passing your own --config-file disables all of this.
alc kimi
alc --moonshot kimi
Antigravity CLI (agy)
agy — Google's Antigravity CLI · runs on its own Google login, which also
serves every other agent, and on the Codex login or any API provider through
alc's bridge.
agy signs in to Google itself, so alc has no endpoint, key or config file to
hand it and touches none of agy's credentials. It runs on the antigravity
profile the starter configuration ships, and alc sets only --model from that
profile and, when the profile names one, --effort. agy's efforts are low,
medium, high, xhigh and max; a profile set to ultra launches on max,
with a note saying so. A --model or --effort of your own after alc agy is
forwarded as is, and alc then sends none of its own. agy lists wire ids only,
so a bare family id on the profile (claude-opus-5-5, which the other agents'
bridge reads too) reaches agy as the wire id for the profile's effort.
alc agy
alc agy --model gemini-3.8-flash-low
alc models --agy
The starting model is claude-opus-5-5-high, with no effort set, so agy uses
its own default. alc models --agy lists what agy models reports, kept for a
day (--refresh asks again), with a bundled list when agy cannot be asked,
and marks an id no model family serves (not bridgeable): agy may run it, the
other agents cannot. The Model row of an antigravity profile in alc config
steps through the same list.
A config.toml from an older alc has no antigravity profile; alc agy then
names the fix, alc config upsert antigravity --kind antigravity.
The same login serves every other agent through alc's bridge:
alc --agy claude, alc --agy opencode, and so on. See
Providers for what alc borrows and what agy still
owns.
On the Codex login
alc --codex agy starts alc's bridge and points agy's CLOUD_CODE_URL at it.
The bridge adds the Codex models to agy's own model list, one entry per
reasoning effort (gpt-6.1-sol-high): agy's /model picker shows them as
GPT-6.1-Sol · Codex, with agy's own effort slider from low to max, and
Codex's ultra runs as max. Turns on a Codex model go to your codex login.
Everything else agy asks — its own Gemini, Claude and GPT-OSS models, login
checks, quota, and helper turns such as titles and checkpoints — is relayed to
Google unchanged, with the token agy itself sent; alc reads and keeps no agy
credential. agy therefore still needs its own Google sign-in, and /model
switches between Codex and Google models mid-session.
alc --codex agy # starts on the codex profile's model and effort
alc --codex agy --model gemini-3.8-flash-low # a --model of your own wins
The session starts on the codex profile's model at its effort, passed as
--model gpt-6.1-sol-<effort>. Turns on a Codex model are recorded as agent
agy on the codex profile, so alc usage and alc tps count
them. Any other provider with an API reaches agy the same way, through the
bridge's translation (Any provider, any
agent): alc --openrouter agy adds the
profile's model to agy's picker, tagged with the profile name.
Direct API metrics
alc --metrics <agent> opts into observation at supported alc-managed endpoint
seams. It preserves the native SDK, protocol, model, arguments, and upstream
authentication. Durable Claude observation uses a sealed-helper credential on
the local hop, not the raw vendor key. Ordinary direct launches without the flag
remain unchanged. Codex translation-bridge traffic is already observed
automatically. Native Codex CLI login traffic is not bridge traffic.
| Agent | Supported direct observation seam |
|---|---|
| Claude Code | alc's API-key settings/helper and Anthropic endpoint; an authenticated durable host and AEAD-sealed route/instance-bound surrogate support background restarts. Native login, keyless endpoints, or an overridden helper/endpoint/auth setting are refused. |
| Codex CLI | alc-generated HTTP Responses provider configuration, requiring an explicit passthrough --config model_providers.alc_<profile-normalized>.supports_websockets=false (profile hyphens become underscores); missing/true is refused. WebSockets are not observed or force-disabled; ordinary no-metrics launches are unchanged. Native login and native Ollama integration are refused. |
| OpenCode | The selected alc-managed provider's inline endpoint/configuration, not a custom provider/config override. |
| Copilot CLI | alc's Anthropic- or OpenAI-compatible BYOK environment. |
| Qwen Code | alc's Anthropic/OpenAI branches, not the Google/Gemini integration. |
| Goose | alc's Anthropic/OpenAI branches, not native OpenRouter/Ollama integrations. OpenAI split endpoints containing query/fragment are refused for metrics; ordinary launches are unchanged. |
| Kimi Code CLI | The endpoint in alc's generated temporary provider config, not a user config/model/provider override. |
| Pi | Unavailable for direct launches: its endpoint is in a persistent shared models.json, which alc will not point at an ephemeral observer. |
| Antigravity CLI | Unavailable: agy runs on its own login. Other agents on that login, and agy's Codex turns under alc --codex agy, are observed by alc's bridge automatically. |
Native OAuth/login and explicit endpoint/helper/config/provider overrides
outside these seams are not silently intercepted; explicit --metrics fails
with a reason when unsafe or unsupported. --dry-run only describes the plan,
starts no listener, and writes nothing. Claude's helper authenticates the host
using the owner-only runtime bridge.observer-key, registers digests only, and seals the
local credential; the host restores the upstream key/header only on fixed-endpoint
dispatch. Old surrogates receive 401 after a restart; rerun the helper.
forward-observer-v2 verifies actual host capability, not a version string.
New launches use their own generation host while old hosts continue serving
old sessions; no stop/relaunch of those sessions is required.
Local requests still use loopback HTTP, not TLS. Trust local processes: the Claude surrogate protects the raw key, not plaintext request bodies at a hijacked port. Other agents' ephemeral routes do not promise sealed credentials. Read Usage for timing basis, cost, and coverage limits.
Binary overrides
Point any agent at a specific binary instead of resolving it from PATH:
| Agent | Override env |
|---|---|
| Claude Code | ALC_CLAUDE_BIN |
| Codex CLI | ALC_CODEX_BIN |
| OpenCode | ALC_OPENCODE_BIN |
| Pi | ALC_PI_BIN |
| Copilot CLI | ALC_COPILOT_BIN |
| Goose | ALC_GOOSE_BIN |
| Qwen Code | ALC_QWEN_BIN |
| Kimi Code CLI | ALC_KIMI_BIN |
| Antigravity CLI | ALC_AGY_BIN |