All agent CLIs
Crush in NeuroSquad

Crush,on a canvas of its own

Run Crush in as many cards as you like, each the real `crush` TUI in its own terminal. Crush reports its state — working, blocked, idle — straight to its card, arrows give it browsers, terminals and notes, and every card resumes its own session after a restart.

Official sitegithub.com/charmbracelet/crush
  • The real crush TUI, your own providers
  • Your Crush config is never written
  • Free, for Windows 10 and 11
Status channel

It knows when Crush is done — and when it’s asking

Crush’s hooks have a single event, before a tool runs. But Crush also reports its agent state to the herdr terminal multiplexer — and NeuroSquad plays herdr for every Crush card.

workingstate
Working

working on the first output of a run. The card’s icon spins and the Squad card counts it as working. Only the coordinator’s runs count; sub-agents don’t move it.

blockedstate
Needs you

blocked on a permission request. The card reads the pending call from Crush’s database and the toast says Crush needs your permission: bash — rm -rf dist.

idlestate
Finished

idle when the run completes, is cancelled or fails. The next queued prompt goes out, the journal gets the answer, and a toast says it’s done.

Its questions, too

Crush’s question tool isn’t a herdr state, so while a turn runs the card checks Crush’s database once a second: an open question reads Crush is asking: Tabs or spaces?.

Nobody else can forge it

Each card’s pane id carries a signature of this app run; a report without it is dropped.

On Windows, too

Crush reports over a Unix socket, which Node can’t listen on under Windows — so a small PowerShell listener takes it. Without one, the card falls back to watching the terminal.

Watch it work

Three things Crush does in NeuroSquad

Replicas of the app, played step by step. When Crush asks for permission, the answer is yours.

Crush fixes a failing test through the connected terminal, stops on its permission dialog before deleting a folder, and finishes — the journal writes itself.

Everything it gets

Everything Crush can do in NeuroSquad

Crush gets nearly everything Claude Code does. Here is all of it — including where Crush works differently, and what can’t be done.

  • 01

    Knows its state

    Crush’s own status reports tell the card every turn, so nothing is guessed.

  • Finished and waiting are different

    With HERDR_ENV set, Crush reports working, blocked and idle, each with its session id. NeuroSquad listens for every card — exact turn starts, permission waits and ends.

    Docs: Finished and waiting are different
  • A notification that says what it needs

    The toast names the pending call — Crush needs your permission: bash — rm -rf dist — or the question Crush asks. One per agent; a waiting one stays until you answer.

    Docs: A notification that says what it needs
  • Cancelled and failed runs end

    Escape twice cancels a run in Crush; idle follows and the card marks it finished, with Crush still running. A run that fails ends the same way.

    Docs: Cancelled and failed runs end
  • Picks up where it left off

    Crush mints its own session ids — a card can’t choose one. Every report carries the id, so the next launch is crush --session <id>.

    Docs: Picks up where it left off
  • The Squad status card

    Every AI agent of the workspace on one card, with its model — or your Crush config’s large model before the first turn.

    Docs: The Squad status card
  • 02

    Works through the canvas

    An arrow from the card is a set of tools, reached over NeuroSquad’s MCP server.

  • Arrows are tools

    An arrow to a browser, terminal, note or another agent lets Crush use mcp_neurosquad_browser_*, terminal_*, note_* or agent_* — pre-approved by a PreToolUse hook, so NeuroSquad’s own tools never prompt.

    Docs: Arrows are tools
  • New arrows: listed up front

    Crush 0.92 never hears that a server’s tool list changed. So every built-in tool is listed from the start and the arrows decide at call time. New skill and installed-server arrows apply on the card’s next start.

    Docs: New arrows: listed up front
  • Canvas mode

    bash, job_output, job_kill, download, fetch, agentic_fetch and sourcegraph are left out of Crush’s tools altogether — not denied, absent — so --yolo can’t bring them back.

    Docs: Canvas mode
  • MCP servers from the registry

    Installed servers come as a second server with no pre-approval: Crush shows its own permission dialog before every call.

    Docs: MCP servers from the registry
  • Skills from skills.sh

    An arrow to a skill card gives Crush skill_load with each skill and when to use it, from the card’s next start.

    Docs: Skills from skills.sh
  • 03

    Built for long runs

    Context, Summarize Session, rate limits and a running journal — handled on the card.

  • Context meter

    The latest request’s prompt tokens from Crush’s database; the window from the card’s config, your configs or Crush’s provider list. The ring turns amber from 80%.

    Docs: Context meter
  • Compact is Summarize Session

    The card’s Compact button opens Crush’s command palette and runs Summarize Session for you.

    Docs: Compact is Summarize Session
  • Continues after a rate limit

    A turn that ends on a quota or rate-limit error shows the limit on the card; when the provider names a reset, the card counts down and sends “continue”.

    Docs: Continues after a rate limit
  • Prompt queue

    Line up the next messages: each goes out when Crush reports idle — never in a pause mid-thought.

    Docs: Prompt queue
  • Journal and hand-off

    Crush’s last reply is read from the card’s crush.db: the journal note, a hand-off to a fresh agent, agent_wait, custom cards and Telegram all get Crush’s real answer.

    Docs: Journal and hand-off
  • 04

    Works in a team

    Each card has its own Crush data folder, so any number of them share a project.

  • A data folder per card

    Crush locks its data folder, so two cards in one project couldn’t both run on .crush/. Each card gets its own, holding its config layer and its sessions — none of your Crush files are written.

    Docs: A data folder per card
  • Isolated worktrees

    Give an agent its own git worktree, so parallel agents never edit the same files. The data folder follows the card, not the folder.

    Docs: Isolated worktrees
  • Add a reviewer

    One click starts an agent on a different CLI in the same worktree, with a prompt to review without editing. Crush can be that reviewer too.

    Docs: Add a reviewer
  • Dangerous mode, per card

    For a run you trust, a card starts Crush with --yolo: no permission dialogs. Off by default; canvas mode still holds.

    Docs: Dangerous mode, per card
  • Instructions

    Crush reads AGENTS.md, CRUSH.md and CLAUDE.md itself, and NeuroSquad’s session instructions arrive in its system prompt from the MCP server.

    Docs: Instructions
  • 05

    Cost, control and access

    What it spends, what it may spend, which model it runs on, and how you reach it.

  • Cost and requests — no tokens

    Each card’s cost is Crush’s own total, sub-agents included, and every model request is counted. Crush overwrites its token counters on each request, so per-request tokens can’t be known — the column shows a dash, not a guess.

    Docs: Cost and requests — no tokens
  • Budget brake

    A limit per workspace. Past it, each Crush gets Escape twice — the run is cancelled, Crush keeps running (Ctrl+C would open its quit dialog) — and automatic prompts stop.

    Docs: Budget brake
  • OpenRouter models

    Crush’s built-in openrouter provider in the card’s own config, with the key from a variable only that card sees and NeuroSquad’s attribution headers.

    Docs: OpenRouter models
  • From your phone

    Scan a QR code and the whole canvas opens in the phone’s browser: read Crush’s TUI, answer its dialog, send the next prompt.

    Docs: From your phone
  • Installed by the wizard

    The setup wizard can install Crush for you (npm install -g @charmland/crush). NeuroSquad runs its crush.exe directly, not through the npm shim.

    Docs: Installed by the wizard
At a glance

Who’s waiting, and what it cost

Two cards that answer the questions you ask most when several Crush agents run at once.

The Squad status card

Every agent of the workspace with its status, model and turn time. The ones waiting on you come first, with what Crush asks.

  • coupon-fixCrushclaude-sonnet-4.5Crush needs your permission: bash — rm -rf distNeeds you2:34
  • api-migrationCrushclaude-sonnet-4.5Move routes to the new clientWorking9:33
  • lint-setupCrushopenrouter/autoCrush is asking: Tabs or spaces?Needs you1:17
  • docs-passCrushopenrouter/autoUpdate the READMEFinished5 min. ago

Usage & cost

Read from each card’s own `crush.db`. Cost and requests are exact and add up to the total — tokens aren’t shown, because Crush doesn’t keep them per request.

AgentTokensCost
coupon-fix—$2.33
api-migration—$1.41
docs-pass—$0.18
Total—$3.92
Exact to the picodollar; rounded only on screen.Each row includes the sub-agents its session started.
Under the hood

The real Crush, plus its own folder

NeuroSquad starts the same `crush` you run yourself, in a real terminal in the card. This is everything it adds:

What NeuroSquad adds to the command
❯ crush
--data-dir <this card’s folder>every launchthe card’s own data folder: its config layer and sessions
--session <its session id>later launchesthe same conversation after a restart
HERDR_ENV=1 HERDR_SOCKET_PATH=… HERDR_PANE_ID=<card>.<signature>every launchCrush’s state, reported to this card only
<data dir>/crush.json → mcp.neurosquad, mcp.ns-connectedevery launchNeuroSquad’s MCP servers, merged last over your configs
hooks.PreToolUse ^mcp_neurosquad_ → {"decision":"allow"}every launchNeuroSquad’s own tools pre-approved; installed servers still ask
CRUSH_CLIENT_SERVER=every launchnever routed through a shared Crush server
options.disabled_tools: bash, job_output, job_kill, download, fetch, agentic_fetch, sourcegraphcanvas modeshell and web tools removed; the canvas’s cards instead
--yolodangerous modeskip permission dialogs

No secrets on disk

The config names $NEUROSQUAD_MCP_TOKEN; Crush expands it from the card’s environment.

Opens straight on the prompt

A fresh data folder would open on Crush’s “initialise this project?” screen and swallow the first prompt, so it’s pre-answered. AGENTS.md is read either way.

Found where you installed it

A release crush.exe (winget, scoop, go install) first, then the npm package’s binary, run directly.

FAQ

Crush in NeuroSquad, answered

Give Crush a canvas

Free for Windows 10 and 11. Your code, your providers and your costs stay on your machine.