v0.1.0 · MIT · self-hosted

One CLI for every coding agent.

Open-source. MIT-licensed. Isolated profiles, provider switching, token-level cost tracking, sandboxed remote sessions, web dashboard — all in one Rust binary.

  • macOS 13+
  • Linux x86_64
  • Linux aarch64
  • Rust 1.85+
  • 5 coding agents
  • 4+ providers
  • 0 SaaS dependency
  • MIT
why · the problem

Five agent CLIs. Five HOME directories. One invoice you can't read.

Claude Code wants ~/.claude. Codex wants ~/.codex. Each one assumes it owns your machine. Two projects on different Anthropic accounts? Hope you like editing environment variables. Want Claude Code to talk to MiniMax instead of Anthropic this week? Same. And nobody is telling you what the month's tokens cost until the invoice lands. Ringlet fixes that, with a unit small enough to stay out of your way: a profile.

01

One HOME per project

Each profile gets its own $HOME, credentials, history, and cache. Zero leakage between projects. Two Claude Code sessions on different providers — at the same time.

02

Move agents between providers

Point Claude Code at MiniMax. Point Droid at a self-hosted gateway. Point Codex at Groq. The agent's own config never changes — Ringlet injects the right env vars at launch.

03

Know what you're spending

Native token counting across Anthropic, OpenAI, and MiniMax. Per-profile, per-day, per-model. CSV export. Import your existing ~/.claude usage log.

04

Run agents on remote boxes

Spin up a daemon on a server, run ringlet profiles run … --remote from your laptop. PTY proxied over WebSocket. xterm.js in the browser. Sandboxed by default.

in 90 seconds

Init. Create. Run. Audit.

Four commands take you from a fresh install to a billing-clear month. ringlet init detects the agents you already have and imports any existing usage. profiles create spawns an isolated workspace. profiles run launches the agent. usage tells you what every minute cost.

  • step 1 ringlet init — detects Claude Code, Codex, Grok, Droid, OpenCode
  • step 2 ringlet profiles create claude work --provider anthropic
  • step 3 ringlet profiles run work — launches in isolation
  • step 4 ringlet usage — tokens + cost, every profile
Full quickstart →
ringlet · zsh
$ ringlet init
  ✓ Detected: claude (v2.0.5), codex (v1.4.0), grok (v0.7.1)
  ✓ Imported 18,432 events from ~/.claude/usage.jsonl
  → Stored keychain entry: ringlet/anthropic/default

$ ringlet profiles list
  NAME       AGENT       PROVIDER      LAST USED
  work       claude      anthropic     2 minutes ago
  personal   claude      minimax       yesterday
  staging    codex       openai        3 days ago

$ ringlet profiles run work
  → exec claude (PROFILE=work, HOME=~/.ringlet/profiles/work)
  → ANTHROPIC_BASE_URL=https://api.anthropic.com

$ ringlet hooks add work --on tool-use \
    --shell 'echo "$RINGLET_TOOL" >> ~/audit.log'
  ✓ Hook attached: work/tool-use → shell
supported agents

Every coding CLI worth running.

Anthropic-shaped or OpenAI-shaped, Ringlet handles the wire format and credential injection so you don't have to.

Claude Code

$claude
Anthropic-shaped

Anthropic's official coding CLI. Ringlet pipes ANTHROPIC_BASE_URL + ANTHROPIC_API_KEY at run-time per profile.

Providers:
  • anthropic
  • minimax
  • openrouter

Codex CLI

$codex
OpenAI w/ tools

OpenAI's repo-aware CLI. Ringlet injects OPENAI_API_KEY and a profile-specific cache directory.

Providers:
  • openai
  • openrouter
  • groq

Grok CLI

$grok
OpenAI w/ tools

xAI's CLI. OpenAI-compatible — same provider matrix as Codex.

Providers:
  • openai
  • openrouter
  • custom

Droid CLI

$droid
Anthropic-shaped

Factory's coding agent. Claude-shaped: works wherever Claude Code works.

Providers:
  • anthropic
  • minimax

OpenCode

$opencode
Anthropic-shaped

Community-driven OSS coding agent. Same Claude-shaped wire format.

Providers:
  • anthropic
  • minimax
  • openrouter
providers

Four first-party providers. Anything OpenAI-compatible.

Bind a profile to any of these — Ringlet still tracks tokens locally, regardless of where the request goes.

first-party

Native APIs Ringlet ships with

  • anthropic api.anthropic.com

    Claude Sonnet · Opus · Haiku

    Default for Claude Code, Droid, and OpenCode profiles.

  • openai api.openai.com

    GPT-5 · GPT-4o · o-series

    Default for Codex CLI. Also routable from Grok via /v1/chat/completions shape.

  • minimax api.minimax.io

    MiniMax-Text-01 · M2

    OpenAI-compatible. Useful as a cost-tier fallback for Claude-shaped agents.

openai-compatible

Any gateway with the OpenAI shape

  • openrouter openrouter.ai/api/v1

    300+ models, one key

    Pin a slug per profile; Ringlet still tracks tokens locally.

  • groq api.groq.com/openai/v1

    Llama 3.3 · Qwen · Whisper

    OpenAI-compatible. Cheap, fast inference for tool-light agents.

  • custom any base URL

    anything OpenAI- or Anthropic-shaped

    Add your own provider via a TOML stanza — registry pick-up on next sync.

how it stacks up

The agent-orchestration tier nobody else covers.

Multi-agent runners (Claude Squad, Conductor) and LLM gateways (LiteLLM, OpenRouter) are great. Ringlet sits one level above — managing the agent CLI, its credentials, and its provider in one unit.

Capability ringlet Claude Squad Conductor LiteLLM OpenRouter
Manages multiple agent CLIs Claude Code, Codex, Grok, Droid, OpenCode Claude Code, Codex, Gemini, Aider Claude Code + Codex LLM proxy, not an agent manager model marketplace, not an agent manager
Isolated HOME / config per profile Separate $HOME, history, credentials git-worktree isolation only git-worktree isolation only
Per-profile provider switching Bind any agent to any provider Agent's default provider only Agent's default provider only Central routing rules Hosted marketplace
Token + cost accounting Cross-agent, cross-provider, local Per-task Per-key budgets Hosted dashboard
Keychain-backed credentials macOS Keychain · GNOME Keyring · WinCred Plain env vars Plain env vars Env vars or vault API key in env
Browser-accessible remote sessions WebSocket PTY · sandboxed Local terminal only Local Mac app
Sandboxed execution bwrap (Linux) · sandbox-exec (macOS) Inherits shell git-worktree only
Event hooks (tool use / stop / notify) Shell or webhook on any event Pre/post-call callbacks
Self-hosted Single binary, no daemon ops Local TUI Local Mac app Docker / Python Hosted only
License MIT AGPL-3.0 Source-available MIT proprietary SaaS
install

One curl. One binary.

Ringlet is a single Rust binary. Install pulls down the right build for your OS and architecture, drops it in ~/.local/bin, and runs ringlet init. Under a minute, start to finish.

Install →
terminal
curl -fsSL https://raw.githubusercontent.com/neul-labs/ringlet/main/install.sh | sh
ringlet init
terminal · alternative
# Or via Cargo
cargo install ringlet

# Or via Homebrew (coming)
brew install neul-labs/tap/ringlet
faq

Frequently asked

Ringlet is an open-source (MIT) CLI and daemon that orchestrates multiple AI coding agents — Claude Code, Codex CLI, Grok CLI, Droid, and OpenCode — behind isolated profiles. Each profile has its own HOME directory, credentials, conversation history, and provider binding. A single command (`ringlet profiles run my-project`) launches the right agent with the right model on the right credentials, with usage and cost tracked across all of them.

ship it

Stop hand-editing env vars between projects.

Ringlet is open source under MIT. One Rust binary, runs on your laptop or your server, ships with a web dashboard and a desktop app. Built for engineers who use more than one coding agent.