Today we’re publishing the first public release of Ringlet, the open-source orchestrator for AI coding agents. It’s at 0.1.0 — the core feature set is real, tested, and in daily use; we expect to be at 1.0 by the end of the year.
If you’ve been juggling Claude Code, Codex CLI, Grok CLI, Droid, or OpenCode across multiple projects and accounts, this is the tool we wish we’d had when we started doing the same.
What it does, in one paragraph
Ringlet manages the agent CLIs you already use. Each profile is a bundle of (agent + provider + credentials + HOME), and ringlet profiles run <name> launches the agent with the right environment. Two profiles never share state. Cost is tracked across all of them. The whole thing is a single Rust binary; everything else — web dashboard, Tauri app, remote sessions — is built on top of the same profile abstraction.
For the why and the longer pitch, read What is Ringlet.
What ships at 0.1.0
The feature surface is intentionally small. Each item below is documented, tested, and in daily use by us:
- Profile isolation. Per-profile HOME, credentials, conversation history, and config. Two Claude Code profiles never see each other’s
~/.claude/conversationsor MCP registrations. Deep dive. - Multi-agent support. Five coding CLIs out of the box: Claude Code, Codex CLI, Grok CLI, Droid CLI, OpenCode. Agents page.
- Provider switching. Anthropic, OpenAI, MiniMax, OpenRouter, plus any OpenAI-compatible gateway via TOML. Bind any agent to any compatible provider — the agent’s own config never changes. Providers page.
- Cost tracking. Token + dollar accounting in a per-profile SQLite ledger.
ringlet usageaggregates across agents and providers. CSV export. Cost tracking guide. - Event hooks. Shell or webhook on
pre-tool-use,tool-use,stop,notify,cost-threshold,daily-rollup. Hooks guide. - Sandboxed remote sessions. Run the daemon on a dev box; access the agent’s PTY from your laptop’s browser. Sessions exec inside
bwrap(Linux) orsandbox-exec(macOS). Remote sessions, Sandboxing. - Web dashboard. Vue 3 + xterm.js, served by the daemon at
http://127.0.0.1:8765. Bearer-token auth, localhost-only by default. - Desktop app. Tauri-packaged build of the dashboard. Same UI, no browser tab.
- Keychain-backed credentials. macOS Keychain, GNOME Keyring / KWallet, Windows Credential Manager. File-backed fallback for headless systems. Keychain article.
- Rhai scripting. Hooks can be inline shell, file paths, or Rhai scripts.
- Registry sync. GitHub-hosted JSON index of supported agents and providers. Add new ones without a Ringlet upgrade.
- Import existing logs.
ringlet import claude(andcodex,opencode) backfills usage history.
Why now, why this shape
We’ve spent the last six months running every major coding agent CLI we could find. The thing none of them solved was what happens when you have more than one. The first weekend with three of them installed, the dotdirectories started fighting and the cost dashboards in each lab’s portal stopped matching.
The repeated answer we kept giving ourselves — a per-project direnv, a wrapper script, a fresh terminal tab — was a band-aid on what’s clearly a missing layer. So we built the layer. The agent stack in 2026 is the long-form version of that argument.
The single-Rust-binary shape is intentional. We want this to feel like git or jq — a small dependency that does one job and gets out of the way. No daemon you need to operate (the daemon is optional, used only for the web UI and remote sessions). No service to keep alive. No SaaS to subscribe to.
What’s missing
- Team-tier features. Shared profiles synced across teammates, centralised provider policy, role-based access, signed audit logs. These need a server side. We’re prioritising based on early-access requests at teams@neullabs.com.
- Windows. The credential-store code works on Windows. Remote PTY needs more polish. macOS and Linux are first-class today.
- More agents. Aider, Goose, Gemini CLI — the registry shape supports them, we just haven’t bundled them yet. PRs welcome.
- More providers. Same. We ship the four we use; OpenAI-compatible covers most of the rest.
- A formal plugin SDK. Rhai scripting gets you most of the way for hooks; a real SDK is on the roadmap.
Try it
curl -fsSL https://raw.githubusercontent.com/neul-labs/ringlet/main/install.sh | sh
ringlet init
Full install guide walks through the first two profiles.
Where we’d love feedback
- The provider TOML schema is going to need extending; if your favourite gateway doesn’t fit cleanly, file an issue.
- Cost estimation accuracy. The price table is good but not perfect for non-Anthropic / non-OpenAI providers. If you see drift > 5% versus invoice, please send the data.
- Naming. We’ve gone back and forth on “profiles” vs “workspaces” vs “contexts.” Profile won. If you think it shouldn’t have, the issue tracker exists.
- The team-tier shape. We don’t want to ship a hosted dashboard for the sake of it. If you have a team and Ringlet is in your stack, email us and tell us what’s missing.
Thanks
To the dozen-plus engineers who tried 0.0.x and broke it in helpful ways. To the lab teams whose CLIs Ringlet wraps — none of this would matter if the underlying agents weren’t great. To the open-source crates we lean on (keyring, axum, tokio, bwrap, nng, xterm.js, tauri, astro, and many more).
Ringlet is MIT-licensed. github.com/neul-labs/ringlet. Pull requests welcome.