features

Everything Ringlet does, in one page.

Skim the four pillars, jump to the feature you came for. Every section has a working command you can paste.

Profile isolation

A Ringlet profile is a long-lived bundle of (agent, provider, credentials, conversation history). Each one gets its own HOME directory, populated with whatever the agent expects to find there. Two Claude Code profiles never see each other's ~/.claude/conversations; two Codex profiles never share a cache. Switching contexts is ringlet profiles run other-project.

terminal
# Two Claude Code profiles on different Anthropic accounts:
ringlet profiles create claude work     --provider anthropic --key-alias work
ringlet profiles create claude personal --provider anthropic --key-alias personal

# They live side by side:
ls ~/.ringlet/profiles
# work  personal

# Run them in two terminals — they share nothing.
ringlet profiles run work     # terminal A
ringlet profiles run personal # terminal B

Provider switching

Each profile names a provider. At launch, Ringlet sets the correct base URL and API key environment variables for the agent it's about to run. The agent itself never knows it's been re-pointed.

terminal
# Same Claude Code, different providers per profile:
ringlet profiles set work     --provider anthropic
ringlet profiles set personal --provider minimax
ringlet profiles set fast     --provider openrouter --model anthropic/claude-3.5-haiku

# Verify:
ringlet profiles run fast --dry-run
# → exec claude
#   HOME=~/.ringlet/profiles/fast
#   ANTHROPIC_BASE_URL=https://openrouter.ai/api/v1
#   ANTHROPIC_API_KEY=*** (keychain)
#   ANTHROPIC_MODEL=anthropic/claude-3.5-haiku

Cost tracking

Ringlet parses the token-usage events each provider streams back (Anthropic, OpenAI, and MiniMax all expose input/output token counts) and writes them to a per-profile SQLite ledger with timestamps, model name, and provider. Aggregation lives in one CLI command.

terminal
ringlet usage
# PROFILE     AGENT        PROVIDER    TOKENS         COST
# work        claude       anthropic   1.21M / 340K   $8.41
# personal    claude       minimax     2.83M / 820K   $0.92
# staging     codex        openai      0.45M / 90K    $1.40
# ─────────────────────────────────────────────────────────
# TOTAL                                                $10.73

ringlet usage --since 2026-05-01 --export csv > may.csv
ringlet usage --profile work --by-day

Event hooks

Subscribe shell commands or webhooks to lifecycle events: agent start, agent stop, tool use, notification, cost-threshold-crossed. Audit trail, Slack ping, CI-style guardrail — pick your shape.

terminal
# Audit every tool use to a file:
ringlet hooks add work --on tool-use \
  --shell 'echo "$(date -u) $RINGLET_PROFILE $RINGLET_TOOL" >> ~/audit.log'

# Page Slack when a profile crosses $10/day:
ringlet hooks add work --on cost-threshold --threshold 10 \
  --webhook 'https://hooks.slack.com/services/...'

# Reject 'rm -rf' from a tool call before the agent sees it execute:
ringlet hooks add work --on pre-tool-use --filter 'rm -rf' --action deny

Remote terminal sessions

Run the daemon on a server you SSH to, then launch agents on the server from your laptop. The PTY is proxied over an authenticated WebSocket. The agent runs inside bwrap (Linux) or sandbox-exec (macOS) with a read-only system root and an explicit workspace mount.

server
ringlet daemon --stay-alive --listen 0.0.0.0:8765
laptop
ringlet profiles run work --remote dev-box.internal:8765
# Or via browser:
# → https://dev-box.internal:8765 (xterm.js dashboard)

Web dashboard + desktop app

The daemon ships a Vue 3 + xterm.js dashboard at http://127.0.0.1:8765. It manages profiles, renders usage analytics, and lets you launch agent sessions from the browser. There's also a native Tauri wrapper (ringlet-app) if you'd rather not keep a browser tab.

Keychain credential storage

API keys go in the OS-native credential store via the Rust keyring crate: macOS Keychain (Security.framework), GNOME Keyring or KWallet (Secret Service API), Windows Credential Manager. If you opt out (e.g. on a headless server), keys go in ~/.config/ringlet/credentials.toml with mode 0600.

Registry

Ringlet caches an offline-capable index of supported agents and providers (GitHub-hosted JSON, signed). New agent CLIs and providers ship without a Ringlet upgrade — sync the registry and a new entry shows up.

terminal
ringlet registry sync
ringlet registry list --kind agents
ringlet registry list --kind providers

Scripting (Rhai)

Hooks support inline shell, file paths, and Rhai scripts — a small embedded scripting language. Useful when you want richer logic than a shell one-liner but don't want to write a real plugin yet.

~/.config/ringlet/hooks/audit.rhai
fn on_tool_use(ctx) {
  if ctx.tool == "bash" && ctx.input.contains("rm -rf") {
    return deny("Refusing destructive shell.");
  }
  log_to_file("/tmp/ringlet-audit.log", `${ctx.profile} ${ctx.tool}`);
}
install

Try the feature surface that fits your day.

Profiles is the gateway feature. Cost tracking is the one that pays for itself in a week. Hooks is the one engineering teams build their guardrails on.