Pick a provider per profile.
Four first-party APIs plus anything OpenAI-compatible. Bind any agent to any provider — the agent doesn't know. Token accounting stays consistent across all of them.
Native APIs Ringlet ships with
-
anthropicapi.anthropic.comClaude Sonnet · Opus · Haiku
Default for Claude Code, Droid, and OpenCode profiles.
-
openaiapi.openai.comGPT-5 · GPT-4o · o-series
Default for Codex CLI. Also routable from Grok via /v1/chat/completions shape.
-
minimaxapi.minimax.ioMiniMax-Text-01 · M2
OpenAI-compatible. Useful as a cost-tier fallback for Claude-shaped agents.
Any gateway with the OpenAI shape
-
openrouteropenrouter.ai/api/v1300+ models, one key
Pin a slug per profile; Ringlet still tracks tokens locally.
-
groqapi.groq.com/openai/v1Llama 3.3 · Qwen · Whisper
OpenAI-compatible. Cheap, fast inference for tool-light agents.
-
customany base URLanything OpenAI- or Anthropic-shaped
Add your own provider via a TOML stanza — registry pick-up on next sync.
Adding a custom provider
Drop a TOML file in ~/.config/ringlet/providers/. Ringlet picks it up on next registry sync;
the new name shows up in profiles create … --provider <name>.
Anthropic-compatible (Claude wire format)
name = "my-gateway"
shape = "anthropic"
endpoint = "https://gateway.example.com/anthropic"
key-env = "MY_GATEWAY_KEY"
default-model = "anthropic/claude-3.5-sonnet" OpenAI-compatible
name = "together"
shape = "openai"
endpoint = "https://api.together.xyz/v1"
key-env = "TOGETHER_API_KEY"
default-model = "meta-llama/Llama-3.3-70B-Instruct-Turbo" Bring-your-own model picker
Each profile can pin a model name that overrides the provider's default. For OpenAI-compatible providers
this is the OpenAI model string; for Anthropic-shaped it's the Anthropic model.
ringlet profiles set fast --model claude-3-5-haiku-20241022
ringlet profiles set deep --model claude-opus-4-20250514 Cost-aware routing (preview)
For more dynamic routing — "send tool-heavy requests to Anthropic, send small completions to Groq" — Ringlet can attach an ultrallm proxy in front of any profile. Rules are TOML.
[[rule]]
match = { tool-use = true }
to = "anthropic"
[[rule]]
match = { input-tokens-lt = 2000 }
to = "groq"
# fallback
[default]
to = "anthropic" What about LiteLLM and OpenRouter as Ringlet providers?
Both work great as Ringlet providers — they're downstream of Ringlet, not alternatives. Add LiteLLM as a custom OpenAI-shaped provider pointing at your LiteLLM proxy's URL. Add OpenRouter the same way (it's already in the first-party list, no TOML needed). Ringlet handles the agent + isolation + cost-tracking side; LiteLLM/OpenRouter handle the model-routing side.