snag / docs

Snag · bring your own key

Setting up providers

Snag talks to a model provider with your API key, read from the environment — nothing is proxied through a Snag service. Three adapters are supported today; the default is Anthropic, so for most people step one is a single export.

Supported adapters

default

anthropic

Default model
claude-sonnet-4-6
Key env
ANTHROPIC_API_KEY
Base URL
api.anthropic.com/v1
openai

openai

Default model
none — set --model
Key env
OPENAI_API_KEY
Base URL
api.openai.com/v1
openrouter

openrouter

Default model
none — vendor/model slug
Key env
OPENROUTER_API_KEY
Base URL
openrouter.ai/api/v1

1 · Provide a key

The key is resolved as SNAG_API_KEY → the active adapter's own env var. Set whichever you prefer:

export ANTHROPIC_API_KEY=sk-ant-...     # default provider
export OPENAI_API_KEY=sk-...            # used with --adapter openai
export OPENROUTER_API_KEY=sk-or-...     # used with --adapter openrouter

# …or a single key for whichever adapter is active:
export SNAG_API_KEY=...
SNAG_API_KEY, if set, is used for every adapter (it's consulted before the per-adapter var). To hold several providers at once — e.g. to compare them — leave SNAG_API_KEY unset and set each adapter's own key.

2 · Choose a provider per run

Override the provider/model per run — precedence is flag › SNAG_* env › default:

# Anthropic is the default — no flags needed
snag map prd.md

# OpenAI (model is required — there's no OpenAI default)
snag map prd.md --adapter openai --model gpt-5.4-mini

# OpenRouter (model is a vendor/model slug)
snag map prd.md --adapter openrouter --model anthropic/claude-sonnet-4-5

# …or persist for the session:
export SNAG_ADAPTER=openai SNAG_MODEL=gpt-5.4-mini

Note: OpenAI reasoning models (gpt-5.x / o-series) reject an explicit temperature, so --temperature is ignored for them.

Custom endpoints

Point an adapter at a custom or compatible endpoint — a proxy, gateway, or self-host. The base URL resolves the same way the key does: a generic override first, then the active adapter's own variable, then the built-in default.

VariableWhat it does
SNAG_API_URL Base URL for the active adapter; wins over the per-adapter variable. Stamped into meta.apiUrl.
ANTHROPIC_API_URL
OPENAI_API_URL
OPENROUTER_API_URL
Per-adapter base URL (used when SNAG_API_URL is unset) — the URL counterpart of the per-adapter keys, so several providers can hold distinct endpoints at once.
# Generic — applies to whichever adapter is active:
export SNAG_API_URL=https://my-gateway.example.com/v1

# …or per-adapter, to hold several at once (leave SNAG_API_URL unset):
export ANTHROPIC_API_URL=https://anthropic-gw.example.com/v1
export OPENAI_API_URL=https://openai-gw.example.com/v1
export OPENROUTER_API_URL=https://openrouter-gw.example.com/v1
Same shape as the keys: if SNAG_API_URL is set it applies to every adapter, so for a per-provider setup leave it unset and set each adapter's own <ADAPTER>_API_URL.

Provider label

VariableWhat it does
SNAG_PROVIDER_NAME A vendor label stamped into the map's meta.providerName (observability only — the engine can't infer the vendor from adapter + base URL alone).
export SNAG_PROVIDER_NAME=OpenRouter
Looking for every flag and variable? See the full CLI reference.