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.
Supported providers
Section titled “Supported providers”| Provider | provider value | Auth | Model selector |
|---|---|---|---|
| Anthropic | "anthropic" | OAuth (CLAUDE_CODE_OAUTH_TOKEN) or API key (ANTHROPIC_API_KEY) | claude-* |
| OpenRouter | "openrouter" | API key (OPENROUTER_API_KEY) | <vendor>/<model> |
Anthropic
Section titled “Anthropic”[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-tokento print a long-livedsk-ant-oat...token, then export it asCLAUDE_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.
Models
Section titled “Models”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.
Thinking
Section titled “Thinking”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.
Prompt caching
Section titled “Prompt caching”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.
OpenRouter
Section titled “OpenRouter”[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>.
Models
Section titled “Models”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.
Quirks
Section titled “Quirks”- OpenRouter sometimes routes the same
nameto 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).
Extra HTTP headers
Section titled “Extra HTTP headers”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"Picking a provider
Section titled “Picking a provider”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.
See also
Section titled “See also”- Manifest reference:
[model]— every key under the section. - Getting started — first-prompt walkthrough.