The coding CLIs Ringlet runs.
Out of the box, Ringlet recognises five major coding agents. Each is wired to a wire format (Anthropic-shaped or OpenAI-shaped) so Ringlet knows which env vars to inject and which usage events to count.
Claude Code
$claude Anthropic's official coding CLI. Ringlet pipes ANTHROPIC_BASE_URL + ANTHROPIC_API_KEY at run-time per profile.
anthropicminimaxopenrouter
Codex CLI
$codex OpenAI's repo-aware CLI. Ringlet injects OPENAI_API_KEY and a profile-specific cache directory.
openaiopenroutergroq
Grok CLI
$grok xAI's CLI. OpenAI-compatible — same provider matrix as Codex.
openaiopenroutercustom
Droid CLI
$droid Factory's coding agent. Claude-shaped: works wherever Claude Code works.
anthropicminimax
OpenCode
$opencode Community-driven OSS coding agent. Same Claude-shaped wire format.
anthropicminimaxopenrouter
How Ringlet binds an agent to a provider
At launch, Ringlet looks up the agent's wire format and writes the corresponding environment variables before
exec'ing the binary. The agent's own config never changes.
Anthropic-shaped agents
Claude Code, Droid, OpenCode. Ringlet sets:
HOME=~/.ringlet/profiles/
ANTHROPIC_API_KEY=
ANTHROPIC_BASE_URL=
ANTHROPIC_MODEL= # optional
Pointing Claude Code at MiniMax is just --provider minimax on create: Ringlet writes
ANTHROPIC_BASE_URL=https://api.minimax.io/anthropic and pulls the MiniMax key from the keychain.
OpenAI-shaped agents
Codex CLI, Grok CLI. Ringlet sets:
HOME=~/.ringlet/profiles/
OPENAI_API_KEY=
OPENAI_BASE_URL=
OPENAI_MODEL= # optional Adding a custom agent
Define the agent in a TOML stanza under ~/.config/ringlet/agents/<name>.toml. The registry
will pick it up on the next sync, and profiles create <name> ... just works.
name = "aider"
binary = "aider"
shape = "openai-tools"
providers = ["openai", "openrouter", "custom"]
usage-path = "~/.aider/history.json" # for ringlet import
default-key = "openai/default" What about agents Ringlet doesn't know about?
Use ringlet profiles create generic <name> --binary <path>. You lose usage parsing
(no shape-aware event reader), but isolation and provider switching still work. File an issue on
GitHub and we'll add it to the registry.