Skip to content

Provider backends

The [model] section of seal.toml picks an LLM provider and a model. Each backend has its own auth shape, model selector format, and quirks documented below.

Providerprovider valueAuthModel selector
Anthropic"anthropic"OAuth (CLAUDE_CODE_OAUTH_TOKEN) or API key (ANTHROPIC_API_KEY)claude-*
OpenRouter"openrouter"API key (OPENROUTER_API_KEY)<vendor>/<model>
[model]
provider = "anthropic"
name = "claude-sonnet-4-6"

Two paths. Pick whichever fits the credentials you already have — OAuth via a Claude subscription is the least-friction option for most users:

  • OAuth (Claude subscription) — from a machine that has Claude Code installed, run claude setup-token to print a long-lived sk-ant-oat... token, then export it as CLAUDE_CODE_OAUTH_TOKEN. Seal picks up the env var on launch. The token follows the same auth path Claude Code uses, so it works against the same subscription tier. Full instructions: code.claude.com/docs/en/authentication#generate-a-long-lived-token.
  • API key — set ANTHROPIC_API_KEY=sk-ant-api... in the environment. Standard for self-hosted or pay-per-token use against the Anthropic API.

Precedence when more than one is set: CLAUDE_CODE_OAUTH_TOKEN (Anthropic OAuth, the sk-ant-oat... shape) wins, then ANTHROPIC_API_KEY (works for both sk-ant-api... keys and sk-ant-oat... tokens), then the macOS keychain Claude-Code-credentials entry (if Claude Code is signed in), then ~/.claude/.credentials.json.

The name field accepts any model the Anthropic models API returns. Common picks:

  • claude-opus-4-7 — the long-running flagship, best for hard reasoning.
  • claude-sonnet-4-6 — the everyday default, balanced quality/cost.
  • claude-haiku-4-5 — fast and cheap, good for small focused tasks.

max_tokens auto-detects from the model’s advertised ceiling if omitted. Override explicitly if you want to cap below the model’s max.

Anthropic’s extended-thinking mode is enabled by default — the [model] thinking defaults to "adaptive", which lets the model decide when to think. Set thinking = "manual" + thinking_budget = <tokens> for a fixed budget, or thinking = "disabled" to turn it off entirely.

The effort knob picks the thinking-effort level (low / medium / high / xhigh / max). Opus 4.7 defaults to xhigh; older / non-supporting models default to high. max is Opus-4.6+ only — other models 400 on it.

Anthropic’s prompt cache is on by default with the 5-minute ephemeral TTL. No manifest knob — the daemon attaches cache_control to the right segments automatically. The 1-hour beta tier is opt-in via a per-request beta header; reach out if your usage warrants it.

[model]
provider = "openrouter"
name = "anthropic/claude-sonnet-4-6"

Set OPENROUTER_API_KEY=sk-or-... in the environment. OpenRouter’s keys are dashboard-issued; the format is sk-or-v1-<random>.

OpenRouter fronts a heterogeneous set of providers under a unified API. The name field uses the <vendor>/<model> shape: anthropic/claude-sonnet-4-6, openai/gpt-5, google/gemini-2.5-pro, etc. See openrouter.ai/models for the full list.

max_tokens auto-detects per model from OpenRouter’s metadata API; explicit overrides are clamped to the provider’s advertised ceiling.

  • OpenRouter sometimes routes the same name to different actual providers depending on availability — usually fine for development, occasionally surfaces as latency or token-count drift between sessions.
  • Streaming and tool-call schemas are normalized by OpenRouter; you don’t usually notice provider-side differences. If you do, route directly via that provider’s native backend (Anthropic above; others as they ship).

Some OpenRouter features (rate-limit hints, model fallback) need request-level HTTP headers. [model] headers merges any key/value pairs into every LLM request:

[model]
provider = "openrouter"
name = "anthropic/claude-sonnet-4-6"
[model.headers]
"HTTP-Referer" = "https://my-app.example.com"
"X-Title" = "my-app"

For most users on launch day:

  • Already have a Claude subscription → Anthropic + OAuth.
  • Pay-as-you-go on a single provider → that provider’s native backend (Anthropic ships today; OpenAI lands at launch).
  • Want one key to access many providers → OpenRouter. Slightly higher overhead, but one bill.

The choice doesn’t lock you in — seal.toml is per-project, so different projects can target different providers.