A local-first, provider-aware coding agent for the terminal.
Conduit began as a Go port of Claude Code. It still keeps that compatibility where it matters: Claude OAuth, Anthropic wire format, the familiar tool surface, project memory, sessions, plugins, and MCP. It has also grown into its own agent runtime: Conduit-owned config, multi-account switching, role-based model assignment, OpenAI-compatible providers such as Gemini, and local/MCP-backed models can all live in one TUI.
The goal is simple: keep the Claude Code ergonomics, make the runtime fast and hackable, and let you choose where each kind of work runs.
| Claude Code | conduit | |
|---|---|---|
| Cold start | ~800ms | <30ms |
| Idle memory | ~200MB | <80MB |
| Binary size | ~206MB | ~30MB |
| Dependencies | Node.js + Bun runtime | None (static binary) |
| Multi-account | Restart required | /account panel, live switch |
| Providers | Claude-focused | Claude subscription, Anthropic API, OpenAI-compatible, local MCP |
| Role routing | Single active model | Default, main, background, planning, implement |
| Token savings | External rtk subprocess |
In-process RTK filter |
- Full Claude Code parity — see
PARITY.mdfor the current audited feature matrix - Provider-aware routing — assign models per role from
/models - OpenAI-compatible providers — use API-key providers such as Gemini through a local credential alias
- Local model support — route turns to MCP-backed local providers, including model servers on another machine
- Streaming SSE — real-time token-by-token output with cost tracking
- Auto-compact — context window managed automatically; manual
/compact - Thinking mode — extended reasoning via
/effort low|normal|high|max - Fast mode —
/fasttoggles Haiku for faster/cheaper turns - Coordinator mode — Claude as orchestrator managing parallel sub-agents
- Council mode — multi-model debate across N configured providers; parallel critique rounds with synthesis, convergence detection, member roles, and peer voting
- Exponential backoff — automatic retry on 429 with jitter
| Tool | What it does |
|---|---|
BashTool |
Run shell commands with RTK token compression |
FileReadTool |
Read files with line-range support |
FileWriteTool |
Write files with diff preview |
FileEditTool |
Surgical edits by exact string replacement |
GrepTool |
Regex search across files |
GlobTool |
File discovery by pattern |
AgentTool |
Spawn sub-agents for parallel work |
WebFetchTool |
Fetch URLs with content extraction |
WebSearchTool |
Web search via Anthropic's native search API |
NotebookEditTool |
Edit Jupyter notebooks cell by cell |
REPLTool |
Subprocess code execution for JavaScript, Python, and Bash snippets |
TodoWriteTool |
Structured task tracking |
TaskCreate/Get/List/Update/Stop |
Sub-agent task lifecycle |
EnterPlanMode / ExitPlanMode |
Propose-only mode (no file edits) |
EnterWorktree / ExitWorktree |
Git worktree switching |
AskUserQuestion |
Pause for user input mid-turn |
ConfigTool |
Read/write conduit settings |
MCPTool |
Call any MCP server tool |
ListMcpResources / ReadMcpResource |
MCP resource access |
SkillTool |
Execute installed skills |
SleepTool |
Pause between actions |
LSPTool |
Language server queries: hover, definition, references, diagnostics |
ToolSearchTool |
Search available tools by name or description |
SyntheticOutputTool |
Inject synthetic tool results (coordinator signalling) |
- stdio, HTTP, SSE transports — connect any MCP server
- Conduit-owned MCP config —
~/.conduit/mcp.jsonoverlays imported Claude MCP settings - Plugin system — install from marketplace (
claude-plugins-official), enable/disable plugins, and manage plugin MCP servers - Resource listing and reading —
ListMcpResources,ReadMcpResource - MCP panel —
/mcpopens full browser with per-server tool lists and reconnect - Plugin panel —
/pluginbrowses marketplace, manages installed plugins
- CLAUDE.md loading — walks from cwd to root, injects as system blocks
@includedirectives — compose CLAUDE.md files across directories- Auto-memory — summarises conversations to
MEMORY.md; injected on next session - Memory scanning —
/memory scanfinds stale or contradicted facts - Relevant memory search — surfaces related memories by keyword on session start
- Bubble Tea v2 — native Shift+Enter via Kitty keyboard protocol
- Full GFM markdown — tables, task lists, strikethrough, blockquotes, code blocks with syntax
- Light and dark themes —
/themepicker with 6 built-in palettes (dark, light, daltonized variants, ANSI variants), custom theme support - Output styles —
/output-stylefor different response modes (default,Explanatory,Learning; plugins can add more) - Custom keybindings —
~/.conduit/keybindings.jsonremaps actions, with Claude keybindings imported as fallback - Status bar — provider, model, mode, context %, cost, and rate-limit indicator
- Coordinator footer — live sub-agent progress during multi-agent runs
- Platform keychain storage — macOS Keychain, Linux libsecret, Windows Credential Manager via
go-keyring /accountpanel — add, switch, remove, and delete accounts without restarting- Conduit-owned account registry — account metadata lives in
~/.conduit/conduit.json; credentials stay in the keychain - Provider registry — Claude subscription, Anthropic API, OpenAI-compatible, and MCP providers can be assigned to roles
- Provider context windows — custom providers can set
contextWindow; OpenAI-compatible streams request usage metadata when the server supports it - Role presets — default, main, background, planning, and implement roles make it easy to run expensive work on one model and smaller work somewhere else
- Provider account OAuth plan — see docs/provider-account-oauth-plan.md for the Copilot and ChatGPT/Codex account-provider design
- Provider account wire checks — see PROVIDER_COMPATIBILITY.md and run
make wirefor Copilot and ChatGPT/Codex drift guards
Conduit ships with RTK (Rust Token Killer) ported to Go as a zero-overhead in-process filter. Every BashTool result is passed through the filter before being sent to the model.
Typical savings:
git status→ 90% reductioncargo test→ 85% (test failures only)npm install→ 80%eslint→ 75%
View your savings: type /rtk gain inside the TUI.
- PreToolUse / PostToolUse / SessionStart / Stop — shell, HTTP, prompt, and agent hooks
- Async hooks — PostToolUse hooks run in background without blocking the next turn
- Desktop notifications — notify on turn complete (macOS native + Linux
notify-send)
- JSONL transcripts — every session saved to
~/.conduit/projects/<path>/<id>.jsonl, with existing Claude history imported on resume /resume— fuzzy-search all past sessions, load with full history/search— search across all session transcripts for a term- Cost persistence — accumulated cost tracked per-session, shown in
/status - Session recording —
/recordcaptures terminal output in asciicast v2 format
brew install icehunter/tap/conduitgo install github.com/icehunter/conduit/cmd/conduit@latestDownload from Releases for your platform:
curl -L https://github.com/icehunter/conduit/releases/latest/download/conduit-darwin-arm64 -o conduit
chmod +x conduit
mv conduit /usr/local/bin/git clone https://github.com/icehunter/conduit
cd conduit
make build
# binary at ./conduit# Start an interactive session
conduit
# Sign in with your Claude Max / Teams subscription (inside the TUI)
/login
# Assign providers/models by role
/models
# Configure accounts, providers, plugins, stats, and usage
/config
# One-shot prompt (no TUI)
conduit --print "explain this codebase"
# Continue last session
conduit --continue
# Resume a specific session
conduit --resume <session-id>| Command | Description |
|---|---|
/help |
List all commands |
/commands |
Open the slash command picker |
/model |
Switch model (claude-opus-4-7, claude-sonnet-4-6, …) |
/models |
Open the role-aware provider/model picker |
/fast |
Toggle fast mode (⚡ badge in status bar) |
/effort <level> |
Set thinking budget: low / normal / high / max |
/compact |
Summarise and compress conversation history |
/clear |
Clear conversation and start fresh |
/plan |
Enter plan mode — Claude proposes, doesn't edit |
/council <question> |
Run a multi-model debate regardless of current mode |
/council-history |
List past debate transcripts for this project |
/permissions |
Manage tool permission mode |
/account |
Add, switch, or remove accounts |
/login |
Sign in to Claude |
/logout |
Sign out current account |
/config |
Full settings panel (Status · Config · Stats · Usage · Accounts · Providers) |
/status |
Current model, mode, session, cost, context usage |
/theme |
Switch colour theme |
/output-style |
Switch output formatting style |
/mcp |
Browse MCP servers and their tools |
/plugin |
Browse and manage plugins |
/memory |
View, search, and scan MEMORY.md |
/resume |
Load a past session |
/search <term> |
Search all session transcripts |
/record |
Start / stop session recording (asciicast v2) |
/files |
Files read or written this session |
/diff |
Git diff of files edited this session |
/context |
Current context window usage breakdown |
/color |
Toggle ANSI colour output on/off |
/rename |
Set a title for the current session |
/rewind <n> |
Roll back the last n turns (default 1) |
/commit |
Create a git commit with a generated message |
/cost |
Token and cost breakdown |
/usage |
Rate limit quota and burn rate |
/toggle-usage |
Toggle Claude plan usage footer and background fetching |
/stats |
Per-tool usage counts |
/session |
Session ID, path, message count, duration |
/tasks |
Active sub-agent tasks |
/agents |
Active sub-agents |
/thinkback |
Show last thinking blocks |
/copy |
Copy last assistant response to clipboard |
/rtk |
RTK token-savings commands |
/doctor |
Diagnose: auth, MCP connectivity, settings |
/keybindings |
Show active keybinding map |
/buddy |
Meet your companion |
/coordinator |
Toggle coordinator mode |
/hooks |
Manage PreToolUse / PostToolUse hooks |
/init |
Create a CLAUDE.md for this project |
/review |
Compact and summarise what was done |
/exit |
Quit |
~/.conduit/conduit.json — Conduit's primary user-global settings file, managed via /config or edited directly. On first run, Conduit can import compatible Claude settings from ~/.claude/settings.json; project-local settings in .claude/ and .conduit/ still layer on top, with .conduit/settings.local.json winning last.
Key settings:
{
"model": "claude-sonnet-4-6",
"permissions": {
"defaultMode": "default",
"allow": ["Bash(git status:*)"]
},
"theme": "dark",
"outputStyle": "default",
"env": {
"MY_TOKEN": "..."
}
}Place a CLAUDE.md in any directory — conduit reads from the file's directory up to the repo root and your home directory, injecting each as a system context block. Use @path/to/file inside to include another file inline.
~/.conduit/keybindings.json:
{
"compact": ["ctrl+k"],
"command:clear": ["ctrl+l"],
"submit": ["enter"]
}// ~/.conduit/conduit.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "BashTool",
"hooks": [{ "type": "command", "command": "echo pre-bash" }]
}
],
"PostToolUse": [
{
"matcher": "*",
"hooks": [{ "type": "command", "command": "notify.sh", "async": true }]
}
]
}
}Hook types: command (shell), http (POST JSON to URL), prompt (inject result as context), agent (spawn sub-agent).
// ~/.conduit/mcp.json
{
"mcpServers": {
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"]
},
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}Built-in themes (matching Claude Code's palette set):
| Name | Description |
|---|---|
dark |
Default dark theme |
light |
Light theme |
dark-daltonized |
Dark with colour-blindness-friendly palette (alias: dark-accessible) |
light-daltonized |
Light with colour-blindness-friendly palette (alias: light-accessible) |
dark-ansi |
Dark using terminal's 16 ANSI colours |
light-ansi |
Light using terminal's 16 ANSI colours |
Switch with /theme, or set "theme": "dark-ansi" in settings.json.
Custom themes can be defined under "themes" in settings.json:
{
"themes": {
"my-theme": {
"primary": "#c0caf5",
"secondary": "#565f89",
"accent": "#7aa2f7",
"background": "#1a1b26"
}
}
}Conduit ships with RTK (Rust Token Killer) — originally a Rust CLI by rtk-ai — ported to Go and fused directly into the process. It intercepts BashTool results before they reach the model and applies command-aware compression rules.
Inside the TUI:
/rtk gain # cumulative savings across all sessions
/rtk discover # scan transcripts for missed compression opportunities
RTK covers 70 command patterns including: git, cargo, npm/yarn/pnpm, pytest, eslint, dotnet, aws CLI, ls, and structured log output.
/coordinator
Enables coordinator mode: Claude acts as an orchestrator that spawns sub-agents via AgentTool. Sub-agents run in parallel, each with their own tool context and history. The coordinator footer in the status bar shows live agent progress.
Requirements: Go 1.26
make build # builds to ./conduit
make test # go test ./...
make test-race # go test -race ./...
make lint # golangci-lint runConduit maintains wire compatibility with Claude Code: Anthropic OAuth, API headers and billing block, plugin format (commands, skills, hooks, agents), MCP protocol, and the tool surface the model expects. Claude-compatible settings can be imported or layered for projects, while Conduit-owned user state lives under ~/.conduit.
Features intentionally not implemented (Claude-internal or bridge-dependent):
- VS Code / JetBrains bridge — use real Claude Code for IDE integration
- Remote agents / ULTRAPLAN — Anthropic-hosted, bridge-dependent
- Voice recording — requires cgo + platform audio
- Team swarm (SendMessageTool, TeamCreateTool) — Anthropic teammate mailbox
- GrowthBook / KAIROS — Anthropic-internal
Reference map: PARITY.md
MIT — see LICENSE.
Conduit is an independent project and is not affiliated with or endorsed by Anthropic. Claude® is a trademark of Anthropic, PBC.
