Orchestrate a swarm of Claude Code agents with a local brain that learns from you.
$ npx -y skills add mercurialsolo/claudectl --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
What's inside
~6 MB binary (full features, Homebrew bottle). Sub-50ms startup. Zero config required.
Website | Demo | Blog: Why a local brain? | Releases
Run claudectl --brain-stats impact to see your numbers:
ββββββββββββββββββββββββββββββββββββββββββββββββββ
β IMPACT SCORECARD β
β 1200 decisions tracked β
β βββββββββββββββββββββββββββββββββββββββββββββββββ£
β Auto-handled 71% β
β ββββββββββββββββββββββββββββ 847/1200 β
β β
β Brain accuracy 96.2% β
β ββββββββββββββββββββββββββββ 1154/1200 β
β β
β Coverage vs static rules 2.9x β
β brain ββββββββββββββββββββββββββββ 100% β
β rules ββββββββββββββββββββββββββββ 34% β
β β
β Dangerous ops blocked 12 Time saved 42m β
β 2 critical | 10 high-risk | 847 auto x 3s β
β β
β Learning: correction rate 8.4% β 2.1% (-6pp) β
ββββββββββββββββββββββββββββββββββββββββββββββββββ
brew install mercurialsolo/tap/claudectl # Homebrew (macOS / Linux)
cargo install claudectl # Cargo (any platform)
Both produce the same ~6 MB binary with bus/coord/relay/hive enabled β claudectl bus, coord, relay, and hive work out of the box. For the minimal ~3.5 MB sync-only build, opt out with cargo install claudectl --no-default-features --features hive.
Building from source (Cargo) requires rustc 1.88+. Older toolchains fail with an opaque transitive-dependency error before the build starts β run rustup update stable first. The Homebrew bottle ships prebuilt and has no toolchain requirement.
curl -fsSL https://raw.githubusercontent.com/mercurialsolo/claudectl/main/install.sh | sh
nix run github:mercurialsolo/claudectl
git clone https://github.com/mercurialsolo/claudectl.git && cd claudectl && cargo install --path .
claudectl demo # Guided first-value tour β no live sessions needed
claudectl init # Onboarding wizard (budget, brain, hooks, bus, skills)
claudectl doctor # Verify install + runtime health (β checklist)
claudectl # Live dashboard β see all sessions at a glance
claudectl --brain # Enable local LLM auto-pilot
After brew upgrade claudectl, run claudectl init --upgrade to re-sync hook entries, plugin files, and DB migrations to the new binary. claudectl doctor's plugin version row will tell you when this is needed.
The init wizard walks five phases β weekly budget, local-LLM brain detection, Claude Code hook install, agent-bus role, and curated skill suggestions. Plugin files (slash commands, supervisor agent, bus MCP server registration) are embedded in the binary and written to ~/.claude/plugins/claudectl/ automatically β no repo clone. Run claudectl doctor to verify every piece is wired up, or claudectl init --check for the drift report against the onboarding marker.
The brain observes all your sessions and makes real-time decisions:
ollama pull gemma4:e4b && ollama serve # One-time setup
claudectl --brain # Advisory mode (default)
claudectl --brain --auto-run # Auto mode: brain executes without asking
claudectl --mode auto # Or toggle mid-session (Ctrl+b in TUI)
Works with any OpenAI-compatible endpoint: ollama, llama.cpp, vLLM, LM Studio.
The brain learns from everything you do β not just brain-involved decisions, but every manual approve, reject, rule execution, and conflict resolution. All data stays on your machine.
| Level | What it learns | Example |
|---|---|---|
| Conditional preferences | Context-dependent rules via decision tree splits | approve [Bash] "git push" when cost<$5 (n=8) |
| Outcome tracking | Correlates decisions to detect "approved but broke" | Downweights false-positive approvals |
| Temporal patterns | Behavioral sequences and time-of-day behavior | After 3+ errors: user usually denies |
| Per-project models | Separate preferences per project | [Read] always approve in frontend, usually deny in infra |
| Adaptive thresholds | Per-tool confidence requirements based on accuracy | 90%+ accurate on Read = auto-execute at 0.5 confidence |
To leave the brain unattended you need to trust and audit it. Every decision now carries a "why" β the source (rule, few-shot, or LLM), the confidence, and the past examples that informed it β surfaced inline in --brain-query output and the Brain Review panel.
claudectl --brain-review # Triage decisions; press [c] to correct-and-learn in one keystroke
claudectl --brain-export # Export the decision timeline as Markdown (paste into a PR)
claudectl --brain-export json --project acme # β¦or JSON, filtered to one project (or --pid <n>)
A one-key correct-and-learn in the review view records the right answer as canonical training material, so the next similar decision improves.
The brain automatically detects friction patterns and suggests workflow improvements:
claudectl --brain --insights on # Enable auto-generation (every 10 decisions)
claudectl --brain --insights # View current insights
Detects: friction patterns, error loops, context blowouts, missing rules, accuracy gaps, cost trends. Only new insights are surfaced β the system tracks what you've already seen. Use /auto-insights in the Claude Code plugin.
Integrates the brain directly into Claude Code sessions β no TUI required.
| Component | What it does |
|---|---|
| Brain gate hook | Queries the brain before every Bash/Write/Edit call |
/brain on|off|auto | Toggle brain mode mid-session (or Ctrl+b in TUI) |
/sessions | Show all active sessions with status, cost, health |
/spend | Cost breakdown by project and time window |
/brain-stats | Brain learning metrics and accuracy |
/auto-insights | Auto-generated workflow insights |
/inbox | Drain pending agent-bus messages addressed to this session's role |
/role <name> | Set this session's agent-bus role, e.g. /role frontend or /role tester (auto-detects pid) |
Run the full autonomous stack without a TUI. Attach a dashboard from another terminal.
claudectl --headless --brain --auto-run # Human-readable events
claudectl --headless --brain --auto-run --json # Structured JSON events
What runs in headless mode:
The TUI dashboard can run alongside -- both share state via the coordination SQLite store, brain decision logs, and session discovery.
# Background daemon
nohup claudectl --headless --brain --auto-run > ~/.claudectl/autopilot.jsonl 2>&1 &
# Attach dashboard in another terminal
claudectl
Multi-agent coordination for parallel coding sessions. Prevents duplicate work, manages ownership, and routes context between agents.
Enabled by default. For the minimal sync-only build, use cargo build --no-default-features --features hive.
# Ownership leases β prevent two agents from editing the same file
claudectl coord claim --session sess_1 --path src/app.rs --mode exclusive
claudectl coord release lease_123
# Handoffs β structured context transfer between sessions
claudectl coord handoff --from sess_1 --to sess_2 --task task_1 --summary 'Fix path normalization'
# Interrupts β typed cross-agent signals with delivery modes
claudectl coord raise --type pause --target sess_1 --reason 'lease conflict'
claudectl coord ack intr_123
# Memory β validated patterns promoted from brain decisions
claudectl coord promote --project myproject
claudectl coord context --session sess_1 # Preview injected context
# Inspection
claudectl coord leases # Active ownership leases
claudectl coord interrupts # Pending interrupts
claudectl coord events # Event audit log
claudectl coord metrics # Coordination health metrics
claudectl coord eval # Run 10 eval scenarios
claudectl coord adapters # Registered agent adapters
The coordination layer stores state in a local SQLite database (~/.claudectl/coord/coord.db) and injects compact context into the brain's prompt before every decision.
A durable directory + mailbox that exposes the running swarm as an MCP server. Agents discover each other (list_agents), look up their own role (whoami), publish directed messages, and drain their inbox at turn boundaries. Phases 1β4 of the design spec are shipped.
Enabled by default. Pulls in rmcp + a current-thread Tokio runtime, which is why the default binary is ~6 MB; the no-async-runtime invariant is deliberately relaxed for the bus feature path. For the minimal sync-only build (~3.5 MB), use cargo build --no-default-features --features hive.
# Bind durable role addresses to working directories
claudectl bus role bind planner ~/work/proj-plan
claudectl bus role bind impl ~/work/proj-impl
claudectl bus role list
# Directed send + drain
claudectl bus send impl "review the auth diff" --from planner --priority high
( cd ~/work/proj-impl && claudectl bus inbox )
# Resolve which role this cwd is
claudectl bus whoami
# Run the MCP server on stdio (this is what the Claude Code plugin invokes)
claudectl bus stdio
The Claude Code plugin registers the bus as an MCP server (claude-plugin/.mcp.json) and ships two slash commands: /inbox (drain mailbox) and /role <name> (e.g. /role frontend, /role tester β set this session's role). Bindings are PID-keyed when made through the TUI's Ctrl+R or /role; cwd-keyed for the legacy claudectl bus role bind <name> <cwd> flow. The resolver prefers a PID match over cwd-inference, which disambiguates "two sessions in one worktree".
Mailboxes live in ~/.claudectl/bus/bus.db (SQLite WAL). Message bodies are sanitized at the boundary β a leading / is neutralized so a queued message cannot smuggle a slash command into the recipient.
Full guide: Agent Bus β wire-up, role binding, sending and receiving messages, worked plannerβimplementer example, where state lives, uninstall.
Flow guards (hop limit, per-role rate limit, reserved-role ACL) and the supervisor for long-horizon role persistence are shipped. Pub/sub subscribe + claim protocol and the TUI bus view are still in flight. See AGENT_BUS.md for the per-phase status table.
Durable, verified task lifecycles on top of the bus. Where the agent bus answers "how do I talk to the swarm?", the supervisor answers "how do I trust the swarm to run unattended overnight?" Submit a task, it lands in a SQLite ledger; the reconciler assigns it via mailbox (or spawns a session if no role is set); declared verifiers (run / brain / agent) gate the move to DONE; a dead session triggers Resume with a recovery prompt that carries autopsy findings forward; health-check signals (stalled, retry loop) become first-class transitions instead of dashboard warnings.
# One-shot inline submission
claudectl supervisor submit \
--name "auth-middleware" \
--cwd ~/work/services \
--prompt "Add JWT middleware to all API routes" \
--role backend --budget-usd 3.00
# Batch submission from a TOML file
claudectl supervisor run tasks.toml --dry-run # preview
claudectl supervisor run tasks.toml # commit
# Inspect fleet state
claudectl supervisor status
claudectl supervisor status --state RUNNING
claudectl supervisor logs <task_id> # full transition log + verifier history
# Lifecycle controls
claudectl supervisor cancel <task_id> # idempotent move to CANCELLED
claudectl supervisor drain # stop issuing new assignments
claudectl supervisor undrain # resume
A tasks.toml block carrying every supported field β including the three verifier kinds:
[[task]]
name = "auth-middleware"
role = "backend"
cwd = "./services"
prompt = "Add JWT auth middleware to all API routes"
model = "sonnet"
budget_usd = 3.00
max_retries = 2
timeout_min = 45
[[task.verify]]
run = "cargo test --all-targets" # exit code is the verdict
[[task.verify]]
brain = "Review the diff for auth-coverage gaps. PASS or FAIL with reasons."
# routed to the local brain β free
[[task.verify]]
agent = "Adversarial review: find a request that bypasses the middleware."
model = "haiku" # headless claude -p, own budget
budget_usd = 0.25
Tasks are submittable three ways: this CLI, a task.created bus message addressed to the supervisor role, or the submit_task MCP tool from inside a Claude Code session. All three land as the same SQLite row.
Three load-bearing properties from the design spec:
~/.claudectl/coord/coord.db. The ledger is the source of truth.PASS / FAIL: marker is treated as FAIL. RFC Β§5 calls this the verifier-is-the-gradient principle: every FAIL output becomes the retry prompt the next attempt sees.Metrics (team observability): claudectl supervisor metrics 0.0.0.0:9464 serves a Prometheus /metrics endpoint (claudectl_tasks_by_state, claudectl_fleet_cost_usd_total, claudectl_retries_total, claudectl_verifier_pass_rate) that Grafana or Datadog scrape with no claudectl-specific glue. Each scrape reads the coord DB fresh (WAL), so it runs safely alongside the reconciler. A ready dashboard and the full recipe live in docs/team-observability.md.
Policy as code (team guardrails): commit a .claudectl/policy.toml to the repo and its [deny] commands/tools are enforced by the brain gate at the highest precedence β a developer can't soften them by editing local config. Scaffold with claudectl --policy init, inspect with claudectl --policy. See docs/policy-as-code.md.
The brain distills your decisions into shareable knowledge. Connect instances across machines to build a convergent hive mind.
# Hive knowledge is built-in β view what the brain has learned
claudectl hive status
claudectl hive knowledge
claudectl hive distill # Condense archive into curriculum
# Relay for cross-machine networking is enabled by default
claudectl relay invite # Generate an invite code
claudectl relay join YEK-AGA-YHK-QAA-BM # Join from another machine
claudectl relay discover # Scan LAN for nearby instances
# Start coordinator with HTTP API for multi-machine dashboard
claudectl relay serve --http-port 9876 --auth-token secret
# Remote sessions appear in the TUI as [worker-id] project-name
# GET /api/sessions returns the unified view across all workers
Knowledge categories (best practices, techniques, workflow patterns) propagate automatically. Personal patterns (time-of-day habits, cost tolerance) stay local. You control what's shared:
[hive]
share_categories = ["best_practice", "technique"]
exclude_tools = ["Write"]
max_units = 500
max_prompt_units = 20
See the full Relay & Hive Mind guide.
Run coordinated tasks with dependency ordering, retries, and cross-session data routing:
{
"tasks": [
{ "name": "auth", "cwd": "./backend", "prompt": "Add JWT auth middleware" },
{ "name": "tests", "cwd": "./backend", "prompt": "Update API tests. Previous: {{auth.stdout}}", "depends_on": ["auth"] },
{ "name": "docs", "cwd": "./docs", "prompt": "Document the new auth flow", "depends_on": ["auth"] }
]
}
claudectl --run tasks.json --parallel
claudectl --decompose "Add auth, write tests, update docs" # Auto-split into parallel tasks
Continuously checks each session and surfaces problems in the dashboard:
/compact at 50% context, before the 80/90% thresholdsclaudectl --budget 5 --kill-on-budget # Auto-kill at $5
claudectl --notify # Desktop notifications on blocks
claudectl --stats --since 24h # Aggregated cost statistics
[[rules]]
name = "approve-cargo"
match_tool = ["Bash"]
match_command = ["cargo"]
action = "approve"
[[rules]]
name = "deny-rm-rf"
match_command = ["rm -rf"]
action = "deny"
[[rules]]
name = "kill-runaway"
match_cost_above = 20.0
action = "terminate"
Rules support matching by tool, command, project, cost, and error state. Deny rules always take precedence.
When you step away, claudectl can run pre-configured low-risk tasks. A morning report summarizes what happened.
Auto-restart sessions on context saturation with checkpoint + summary handoff.
Press R on any session for a highlight reel GIF (edits, commands, errors β idle time stripped). Or claudectl --record demo.gif for the full dashboard.
claudectl --new --cwd ./backend --prompt "Add auth" or press n in the dashboard.
--filter-status NeedsInput, --focus attention, --search "project", --watch for streaming.
| Quick Start | Install, init, first dashboard |
| Reference | All flags, keybindings, modes |
| Configuration | Config files, hooks, rules |
| Relay & Hive Mind | Connect instances, share knowledge |
| Terminal Support | Compatibility matrix |
| Troubleshooting | Common issues and FAQ |
| Contributing | Setup and guidelines |
| Changelog | Release history |
MIT
.github/
RELEASE_TEMPLATE.md
workflows/
ci.yml
docs.yml
issue-release-notify.yml
release.yml
.gitignore
AGENTS.md
assets/
logo.png
logo.svg
logo@2x.png
blog/
local-brain-architecture.md
posts.md
Cargo.toml
CHANGELOG.md
claude-demo.gif
claude-plugin/
.claude-plugin/
plugin.json
.mcp.json
agents/
supervisor.md
commands/
auto-insights.md
brain-stats.md
brain.md
inbox.md
role.md
sessions.md
spend.md
hooks/
hooks.json
scripts/
brain-gate.sh
budget-check.sh
inbox-drain.sh
outcome-record.sh
session-briefing.sh
skills/
session-monitoring/
SKILL.md
CLAUDE.md
claudectl.gif
crates/
claudectl-core/
Cargo.toml
src/
config.rs
discovery.rs
forecast.rs
health.rs
helpers.rs
history.rs
hooks.rs
launch.rs
lib.rs
logger.rs
models.rs
monitor.rs
process.rs
rules.rs
runtime.rs
session.rs
skills.rs
terminals/
apple.rs
ghostty.rs
gnome_terminal.rs
iterm2.rs
kitty.rs
mod.rs
tmux.rs
warp.rs
wezterm.rs
windows_terminal.rs
theme.rs
transcript.rs
claudectl-tui/
Cargo.toml
src/
app/
actions.rs
demo.rs
filters.rs
input.rs
mod.rs
overlays.rs
update.rs
demo.rs
lib.rs
recorder.rs
session_recorder.rs
ui/
demo_tour.rs
detail.rs
help.rs
mod.rs
peers.rs
skills.rs
status_bar.rs
supervisor.rs
table.rs
demo.cast
demo.gif
docs/
AGENT_BUS.md
agent-bus.md
assets/
claudectl-demo-hero.gif
claudectl-demo-skills.gif
github-social-preview.png
configuration.md
contributing.md
grafana/
claudectl-fleet.json
hive-storage.md
index-old.html
index.md
llms.txt
policy-as-code.md
quickstart.md
reference.md
relay-and-hive.md
relay-discovery.md
relay.md
styles.css
stylesheets/
extra.css
team-observability.md
terminal-support.md
troubleshooting.md
examples/
tasks/
dependency-chain.toml
fan-out.toml
verify-then-merge.toml
flake.nix
install.sh
LAUNCH_POSTS.md
LICENSE
mkdocs.yml
packaging/
aur/
claudectl-bin/
.SRCINFO
PKGBUILD
README.md
homebrew-core/
claudectl.rb
README.md
nixpkgs/
README.md
README.md
scripts/
record-demos.sh
render-aur-bin-files.sh
render-homebrew-formula.sh
src/
brain/
brain_screen.rs
agents.rs
audit.rs
autopsy.rs
baseline.rs
briefing.rs
client.rs
context.rs
decisions.rs
detectors.rs
diff_digest.rs
engine.rs
evals.rs
garden.rs
health.rs
heuristic.rs
insights.rs
mailbox.rs
metrics/
accuracy.rs
approvals.rs
mod.rs
perf.rs
mod.rs
outcomes.rs
pref_store.rs
preferences.rs
prompts.rs
retrieval.rs
review.rs
risk.rs
sequences.rs
bus/
cli.rs
mcp.rs
mod.rs
policy.rs
rate_limit.rs
roles.rs
stop_hook.rs
store.rs
suggest.rs
commands.rs
config.rs
coord/
actuator.rs
adapter_claude.rs
adapter_codex.rs
adapter.rs
cli.rs
evals.rs
events.rs
exporter.rs
hook_events.rs
injection.rs
interrupt_bus.rs
metrics.rs
mod.rs
pr.rs
promotion.rs
resume.rs
session_policy.rs
store.rs
supervisor_cli.rs
supervisor.rs
tasks.rs
types.rs
verify.rs
doctor.rs
hive/
accept.rs
archive.rs
cli/
effectiveness.rs
mod.rs
onboarding.rs
share.rs
convergence.rs
discovery.rs
distiller.rs
effectiveness.rs
exposure.rs
feedback.rs
gossip.rs
injection.rs
merger.rs
mod.rs
store.rs
trust.rs
ingest.rs
init/
hooks.rs
marker.rs
mod.rs
nudge.rs
phases.rs
plugin_assets.rs
prompt.rs
state.rs
lib.rs
main.rs
orchestrator.rs
relay/
cli.rs
crypto.rs
delegation.rs
http.rs
invite.rs
lan.rs
listener.rs
mesh.rs
mod.rs
peer.rs
protocol.rs
worker.rs
runtime/
actions.rs
brain_driver.rs
brain_review.rs
brain.rs
bus.rs
coord.rs
hive.rs
mod.rs
orchestrator.rs
sessions.rs
team_policy.rs
tests/
fixtures/
legacy-transcript-line.json
real-transcript-line.json
integration_tests.rs
unit_tests.rsFAQ
claudectl is a Claude Code plugin with 1 hand-picked skill for automation work, indexed on Flowy. Install it with the command on its page. It includes session-monitoring. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.