Skip to content

Crush

Crush is an open-source terminal AI coding agent from Charm. It has a polished TUI, multi-model switching, LSP integration, and MCP server support. Configured via crush.json.

Prerequisites

ItemRequirement
Node.jslatest LTS
Crushlatest
WRouterA working sk- token

Install

bash
npm install -g @charmland/crush

# macOS also via Homebrew
brew install charmbracelet/tap/crush

crush --version

Configure

Config path:

  • Linux / macOS: ~/.config/crush/crush.json
  • Windows: %USERPROFILE%\.config\crush\crush.json

If it doesn't exist, create it with:

json
{
  "$schema": "https://charm.land/crush.json",
  "providers": {
    "wrouter": {
      "type": "openai-compat",
      "base_url": "https://wrouter.ai/v1",
      "api_key": "$WROUTER_API_KEY",
      "models": [
        {
          "id": "claude-sonnet-4-6",
          "name": "Claude Sonnet 4.6",
          "context_window": 200000,
          "default_max_tokens": 32768,
          "can_reason": true
        },
        {
          "id": "gemini-2.5-flash",
          "name": "Gemini 2.5 Flash",
          "context_window": 1000000,
          "default_max_tokens": 32768,
          "can_reason": false
        }
      ]
    }
  }
}

Field notes:

FieldNote
typeMust be openai-compat
base_urlMust end in /v1
api_keyUse $WROUTER_API_KEY to read from env, not plaintext
models[].idMust match WRouter's model ID exactly

Set the API key

bash
# macOS / Linux
export WROUTER_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Windows PowerShell
$env:WROUTER_API_KEY="sk-xxxx..."

Verify

bash
crush

In the TUI's model picker, switch to a WRouter model and prompt.

Known limitations

  • Crush's can_reason flag only affects UI hints; actual reasoning behavior depends on the upstream model.
  • LSP and MCP servers are configured separately from the provider block; see Crush's docs.