Skip to content

Configuration

TIP

Crush ships with a builtin crush-config skill for configuring itself. In many cases you can simply ask Crush to configure itself.

Crush runs great with no configuration. That said, if you do need or want to customize Crush, configuration can be added either local to the project itself, or globally, with the following priority:

  1. .crush.json
  2. crush.json
  3. $HOME/.config/crush/crush.json

Configuration itself is stored as a JSON object:

json
{
  "$schema": "https://charm.land/crush.json",
  "this-setting": { "this": "that" },
  "that-setting": ["ceci", "cela"]
}

As an additional note, Crush also stores ephemeral data, such as application state, in one additional location:

bash
# Unix
$HOME/.local/share/crush/crush.json

# Windows
%LOCALAPPDATA%\crush\crush.json

TIP

You can override the user and data config locations by setting:

  • CRUSH_GLOBAL_CONFIG
  • CRUSH_GLOBAL_DATA

Configuration Sections

SectionDescription
providersLLM providers and models
lspLanguage Server Protocol configurations
mcpModel Context Protocol servers
hooksUser-defined shell hooks
permissionsTool permission overrides
optionsGeneral settings (skills, tools, UI, etc.) — run crush schema

JSON Schema

Crush validates your configuration against a JSON schema. Reference the schema in your config for IDE autocompletion and validation:

json
{
  "$schema": "https://charm.land/crush.json"
}

Ignoring Files

Crush respects .gitignore files by default, but you can also create a .crushignore file to specify additional files and directories that Crush should ignore. This is useful for excluding files that you want in version control but don't want Crush to consider when providing context.

The .crushignore file uses the same syntax as .gitignore and can be placed in the root of your project or in subdirectories.