crush:基于 Charm 生态的多模型终端 AI 助手项目

Glamourous agentic coding for all 💘

分支192Tags210

Crush

Charm Crush Logo
Latest Release Build Status

你的全新编程搭子,现已登陆你常用的终端。
你的工具、代码与工作流,无缝接入你偏好的 LLM。

终端里的编程新搭档,
无缝接入你的工具、代码与工作流,全面兼容主流 LLM 模型。

Crush Demo

特性

  • 多模型: 可从众多 LLM 中选择,也可通过兼容 OpenAI 或 Anthropic 的 API 添加自定义模型
  • 灵活切换: 在会话中切换 LLM,同时保留上下文
  • 基于会话: 为每个项目维护多个工作会话和上下文
  • LSP 增强: Crush 使用 LSP 获取额外上下文,就像你平时使用的那样
  • 可扩展: 通过 MCP(http、stdio 和 sse)扩展能力
  • 随处可用: 在 macOS、Linux、Windows(PowerShell 与 WSL)、Android、FreeBSD、OpenBSD 和 NetBSD 的每个终端中均提供一流支持
  • 工业级品质: 基于 Charm 生态系统构建,驱动 25,000+ 个应用,从领先开源项目到关键业务基础设施

安装

使用包管理器:

# Homebrew
brew install charmbracelet/tap/crush

# NPM
npm install -g @charmland/crush

# Arch Linux (btw)
yay -S crush-bin

# Nix
nix run github:numtide/nix-ai-tools#crush

# FreeBSD
pkg install crush

Windows 用户:

# Winget
winget install charmbracelet.crush

# Scoop
scoop bucket add charm https://github.com/charmbracelet/scoop-bucket.git
scoop install crush
Nix (NUR)

Crush 可通过官方 Charm 的 NUR 获取,具体为 nur.repos.charmbracelet.crush,这是在 Nix 中获取 Crush 的最新方式。

你也可以通过 NUR 使用 nix-shell 试用 Crush:

# Add the NUR channel.
nix-channel --add https://github.com/nix-community/NUR/archive/main.tar.gz nur
nix-channel --update

# Get Crush in a Nix shell.
nix-shell -p '(import <nur> { pkgs = import <nixpkgs> {}; }).repos.charmbracelet.crush'

通过 NUR 使用 NixOS & Home Manager 模块

Crush 通过 NUR 提供 NixOS 和 Home Manager 模块。 你可以直接在 flake 中从 NUR 导入这些模块并使用它们。由于它能自动检测当前是 Home Manager 还是 NixOS 上下文,因此你可以用完全相同的方式导入使用 😃

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    nur.url = "github:nix-community/NUR";
  };

  outputs = { self, nixpkgs, nur, ... }: {
    nixosConfigurations.your-hostname = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        nur.modules.nixos.default
        nur.repos.charmbracelet.modules.crush
        {
          programs.crush = {
            enable = true;
            settings = {
              providers = {
                openai = {
                  id = "openai";
                  name = "OpenAI";
                  base_url = "https://api.openai.com/v1";
                  type = "openai";
                  api_key = "sk-fake123456789abcdef...";
                  models = [
                    {
                      id = "gpt-4";
                      name = "GPT-4";
                    }
                  ];
                };
              };
              lsp = {
                go = { command = "gopls"; enabled = true; };
                nix = { command = "nil"; enabled = true; };
              };
              options = {
                context_paths = [ "/etc/nixos/configuration.nix" ];
                tui = { compact_mode = true; };
                debug = false;
              };
            };
          };
        }
      ];
    };
  };
}
Debian/Ubuntu
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg
echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list
sudo apt update && sudo apt install crush
Fedora/RHEL
echo '[charm]
name=Charm
baseurl=https://repo.charm.sh/yum/
enabled=1
gpgcheck=1
gpgkey=https://repo.charm.sh/yum/gpg.key' | sudo tee /etc/yum.repos.d/charm.repo
sudo yum install crush

或者,直接下载:

  • 可获取 Debian 和 RPM 格式的 软件包
  • 可获取适用于 Linux、macOS、Windows、FreeBSD、OpenBSD 和 NetBSD 的 二进制文件

或者直接用 Go 安装:

go install github.com/charmbracelet/crush@latest

在 illumos(OpenIndiana、OmniOS)上,上述命令可原样运行。只有原生 OS 通知在其中不可用;基于终端的通知(OSC)和 终端铃声仍然可用。在 Oracle Solaris 上,添加 -tags sqlite3_dotlk,使 本地数据库使用 dot-file 锁:

go install -tags sqlite3_dotlk github.com/charmbracelet/crush@latest

Warning

使用 Crush 时,效率可能会提升;首次打开该应用时, 你甚至可能遭遇 nerd snipe。如果症状持续,请加入 Slack 或 Discord,来 nerd snipe 我们其他人吧。

快速开始

最快的上手方式是:在模型选择器中选择一个 Hyper 模型。 按照步骤完成身份验证,即可开始使用。

Hyper 由 Charm 提供,是 Crush 的官方提供商。它采用订阅制, 提供免费套餐,并针对 Crush 进行了优化。它注重隐私, 具备零数据留存(ZDR),并旨在符合 GDPR。了解 Hyper 的更多信息。

Charm Hyper

API 密钥

你也可以使用 Crush 搭配许多其他提供商,例如 Anthropic、OpenAI、 Gemini、OpenRouter 等。按下 ctrl+l 打开模型选择器, 选择你需要的提供商,并粘贴你的 API 密钥。

当然,你也可以为偏好的提供商设置环境变量:

环境变量 提供商
HYPER_API_KEY Charm Hyper
ANTHROPIC_API_KEY Anthropic
OPENAI_API_KEY OpenAI
VERCEL_API_KEY Vercel AI 网关
GEMINI_API_KEY Google Gemini
ZAI_API_KEY Z.ai
MINIMAX_API_KEY MiniMax
SYNTHETIC_API_KEY Synthetic
HF_TOKEN Hugging Face 推理服务
CEREBRAS_API_KEY Cerebras
OPENROUTER_API_KEY OpenRouter
IONET_API_KEY io.net
ALIBABA_SINGAPORE_API_KEY Alibaba(新加坡)
ALIBABA_US_API_KEY Alibaba(美国)
GROQ_API_KEY Groq
AVIAN_API_KEY Avian
OPENCODE_API_KEY OpenCode Zen & Go
VERTEXAI_PROJECT Google Cloud VertexAI(Gemini)
VERTEXAI_LOCATION Google Cloud VertexAI(Gemini)
AWS_ACCESS_KEY_ID Amazon Bedrock(Claude)
AWS_SECRET_ACCESS_KEY Amazon Bedrock(Claude)
AWS_REGION Amazon Bedrock(Claude)
AWS_PROFILE Amazon Bedrock(自定义配置文件)
AWS_BEARER_TOKEN_BEDROCK Amazon Bedrock
AZURE_OPENAI_API_ENDPOINT Azure OpenAI 模型
AZURE_OPENAI_API_KEY Azure OpenAI 模型(使用 Entra ID 时可选)
AZURE_OPENAI_API_VERSION Azure OpenAI 模型
MOONSHOT_API_KEY Moonshot

另外请注意,Crush 几乎支持任意提供商,包括 本地模型。更多信息,请参见下文 自定义提供商。

顺便一提

是否有你希望在 Crush 中看到的提供商?是否有某个现有模型需要更新?

Crush 的默认模型列表由 Catwalk 维护,这是一个社区支持、开源的 Crush 兼容模型仓库,欢迎你的贡献。

Catwalk Badge

配置

Tip

Crush 自带一个用于配置自身的内置技能。大多数情况下, 你只需告诉它想要配置什么,它便能完成配置。

Crush 无需任何配置即可出色运行。话虽如此,如果你需要或希望 自定义 Crush,可以借助 crushrc 来实现。

一个 crushrc 不过是包含若干 Crush 专属内置命令的 Bash。它很像 一个 .bashrc,只不过是为你的 Crush 而设。由于 Crush 拥有原生内置的 Bash 解释器,基于 Bash 的配置在所有平台上都表现一致,包括 Windows。

例如:

# Add Ollama.
provider add ollama --type ollama --base-url "http://localhost:11434/v1"

# Register a model on Ollama.
model add ollama/llama3.3 --name "Llama 3.3" --context-window 128000

# Auto-approve some tools.
permissions allow view edit

# Include some other file on a specific machine.
if [[ $HOSTNAME == "babysquid" ]]; then
    source ~/my-stuff/babysquid.sh
fi

# Add an MCP server, with a GitHub API token stored in 1Password.
mcp add github \
  --type http \
  --url "https://api.github.com/mcp/" \
  --header Authorization "Bearer $(op read 'op://my-secret-key')"

配置可以添加在项目本地,也可以全局添加, 优先级如下:

优先级 Unix-like Windows
1 ./.crushrc .\.crushrc
2 ./crushrc .\crushrc
3 ~/.config/crush/crushrc %USERPROFILE%\.config\crush\crushrc

(Crush 遵循 XDG Base Directory Specification,因此你的路径 可能因 XDG_CONFIG_HOME 的值而异。诸如 ~/.local/share/crush 和 %LOCALAPPDATA%\crush 等数据目录仅包含 JSON 状态;Crush 不会从这些目录中执行 crushrc。)

旧版 JSON 格式怎么办?它仍受支持,但应视为 已弃用。详见:配置文档。

Tip

你可以通过设置以下内容来覆盖用户和数据配置位置:

  • CRUSH_GLOBAL_CONFIG
  • CRUSH_GLOBAL_DATA

另外需要注意的是,Crush 还会在一个额外位置存储临时数据,例如应用 状态。这是状态数据,不应手动编辑,也不应被视为配置。

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

# Windows
%LOCALAPPDATA%\crush\crush.json

安全说明

crushrc 和 crush.json 都是受信任的代码;crushrc 会在完整 shell 中运行,crush.json 中的任何 $(...) 都会在加载时执行。请勿在配置未经审查的目录中启动 Crush,也不要随意从互联网 source 文件到你的配置中。

环境变量

顶层 env 字段会在启动时设置环境变量,在配置提供商之前。对于影响提供商认证(例如 AWS SDK credential chain)的变量,这非常有用,这样你无需将 crush 命令包裹在 shell 脚本中,也无需在你的 shell 配置文件中导出它们:

{
  "$schema": "https://charm.land/crush.json",
  "env": {
    "AWS_PROFILE": "my-sso-profile"
  }
}

值支持与其他配置字段相同的 $VAR 和 $(command) 展开,因此可以引用现有环境变量,或执行 shell 命令来获取某个值。

主题

Crush 内置了配色主题。

切换主题

使用 ctrl+p 打开命令面板,选择 主题,并浏览列表。随着你浏览,界面会实时预览每个主题;按 enter 确认选择,按 esc 取消并还原。

编辑主题

打开 主题,高亮需要自定义的主题,然后按 ctrl+e。输入时会实时预览更改。按 enter 或 ctrl+s 保存,按 esc 取消并还原。用户主题会全局保存在 Crush 配置目录下的 themes/ 中。

你也可以在配置中通过 active_theme 直接选择主题:

{
  "$schema": "https://charm.land/crush.json",
  "options": {
    "tui": {
      "active_theme": "gruvbox-dark"
    }
  }
}

自定义主题调色板以 JSON 文件形式存储在全局主题目录中。 例如,~/.config/crush/themes/my-theme.json:

{
  "base": "gruvbox-dark",
  "primary": "#ff6b6b",
  "bg_base": "#1a1a2e"
}

通过设置 active_theme 为 my-theme,或在 Themes 对话框中选择它。

内置主题

主题 名称
Charmtone Pantera charmtone-panther(默认)
Gruvbox Dark gruvbox-dark

LSPs

Crush 能够借助 LSPs 获取更多上下文,以辅助其决策,正如你平时所做的那样。LSPs 可以按以下方式手动添加:

# crushrc

lsp add go --command "gopls" --env "GOTOOLCHAIN go1.24.5"
lsp add typescript --command "typescript-language-server" --args --stdio
lsp add nix --command "nil"

MCPs

Crush 也支持通过三种传输类型使用 Model Context Protocol (MCP) 服务器:stdio 用于命令行服务器,http 用于 HTTP 端点,sse 用于 Server-Sent Events。

# crushrc

# Add a local MCP server that runs a Node.js script.
mcp add filesystem --command node --args /path/to/mcp-server.js \
  --timeout 10 --disabled-tools some-tool-name --env NODE_ENV production

# Add a GitHub MCP server that uses an API token.
mcp add github --type http --url https://api.github.com/mcp/ \
  --timeout 10 --header Authorization "Bearer $GH_PAT" \
  --disabled-tools create_issue --disabled-tools create_pull_request

# Add a streaming MCP server that uses SSE.
mcp add streaming-service --type sse --url "https://example.com/mcp/sse" \
  --timeout 10 --header API-Key "$API_KEY"

MCP OAuth

若 HTTP 或 SSE 类型的 MCP 服务器需要 OAuth,可使用 Crush 内置的授权码流程,替代静态 Authorization 请求头。只需设置 "oauth": true 即可启用:

{
  "mcp": {
    "linear": {
      "type": "http",
      "url": "https://mcp.linear.app/mcp",
      "oauth": true
    }
  }
}
预注册客户端

部分服务器(GitHub、Slack)不支持动态客户端注册。 对于此类服务器,请向服务提供方注册一个 OAuth 应用, 并直接提供凭据。所有值均支持 Shell 展开:

{
  "mcp": {
    "github": {
      "type": "http",
      "url": "https://api.github.com/mcp/",
      "oauth": true,
      "oauth_client_id": "Iv1.abc123def456",
      "oauth_client_secret": "$GITHUB_MCP_SECRET",
      "oauth_callback_port": 40704
    }
  }
}

当 oauth_client_id 已设置时,Crush 会跳过动态客户端注册,并以指定客户端的身份进行认证。省略时,Crush 会自动尝试动态注册(适用于 Linear、Notion 以及其他支持 RFC 7591 的服务器)。

无会话服务器

有些 HTTP MCP 服务器是无会话的——它们从不签发 Mcp-Session-Id,并且会拒绝 Crush 为列表变更通知而打开的 subscriptions/listen 流,否则连接会中断。Crush 会自动识别已知的无会话服务器(GitHub MCP、api.githubcopilot.com/mcp),因此这些服务器无需额外配置。

对于其他无会话服务器,请显式使用 "sessionless": true 标记它们(或在 crushrc 中使用 --sessionless true);将其设为 false 可强制自动识别的 URL 使用默认行为。代价是,无会话服务器不会推送实时的工具/提示/资源列表变更通知。

钩子

Crush 已初步支持钩子。详情见钩子指南。

跨客户端共享工作区

当 Crush 连接到共享后端时(例如两个 TUI 与同一个 crush serve 通信),客户端会按解析后的 --cwd 归入 工作区。使用相同 --cwd 的两个客户端会加入同一个底层工作区,因此它们共享会话列表、消息历史、权限队列、LSP 和 MCP 状态。

加入是隐式的:将第二个客户端指向相同工作目录时,它会附加到现有工作区。不过,每次新启动默认都会在自己的全新会话中开始。若要继续另一个客户端已经打开的会话,请使用会话管理器(会话选择器)并选择它。会话会在那里显示两个信号:

  • IsBusy 在该会话的 agent 回合进行中时会被置位。
  • AttachedClients 报告当前有多少客户端正在查看它。

非零的 AttachedClients(通常与 IsBusy 同时出现)表示该会话正在另一个客户端上“进行中”,加入后会实时镜像该视图。

第一个创建工作区的客户端会固定其进程级标志。尤其,--yolo 和 --debug 遵循先到为准规则:之后以不同取值到达相同 --cwd 的客户端不会改变正在运行的工作区。会输出一行调试日志以记录不匹配,工作区也会保留创建时使用的标志。

只要至少一个客户端对其保持 SSE 事件流打开,工作区就会持续存在。当最后一个流断开时,工作区会被拆除。在 POST /v1/workspaces 之后会有一个短暂的宽限期,以便已创建工作区但尚未打开事件流的客户端不会在接入之前被回收。

全局上下文文件

Crush 会自动包含两个文件,用于存放跨项目说明。你可以将其视为系统提示词的个人补充。

  • ~/.config/crush/CRUSH.md:仅适用于 Crush 的规则,可能会让其他智能体编程工具感到困惑。如果你只使用 Crush,只需编辑这一个文件即可。
  • ~/.config/AGENTS.md:通用说明,其他编程工具也可能读取。请勿在此处提及 Crush 特有的功能或工作流。只有当你使用多个智能体编程工具,并希望在这些工具之间共享说明时,才需要关注这个文件。

你可以通过 option global-context-path 自定义这些路径。重复执行该命令可添加多个路径:

# Load a single markdown file.
option global-context-path "~/path/to/custom/context/file.md"

# Recursively load all Markdown files in the folder.
option global-context-path "/full/path/to/folder/of/files/"

忽略文件

Crush 默认遵循 .gitignore 文件,但你也可以创建 .crushignore 文件,用于指定 Crush 应额外忽略的文件和目录。当你希望某些文件保留在版本控制中,但 Crush 在提供上下文时不将其纳入考虑时,这样做非常有用。

.crushignore 文件使用与 .gitignore 相同的语法,可以放在项目根目录或子目录中。

允许工具

默认情况下,Crush 在运行工具调用前会请求你的授权。如果你愿意,也可以允许工具在无需请求权限的情况下执行。请谨慎使用。

permissions allow view ls grep edit mcp_context7_get-library-doc

禁用内置工具

你也可以拒绝工具,从而完全将其对智能体隐藏:

permissions deny bash sourcegraph

如需禁用 MCP 服务器提供的工具,请参阅 MCP 配置章节。

人生只有一次

你还可以通过使用 --yolo 参数运行 Crush,完全跳过所有权限确认。请格外谨慎地使用此功能。

禁用 Skills

你可以完全阻止 Crush 使用某些 Skills。被禁用的 Skills 对 agent 不可见,包括内置 Skills 和从磁盘发现的 Skills。

option disable-skill crush-config

Agent Skills

Crush 支持 Agent Skills 开放标准,可通过可复用的技能包扩展 Agent 能力。技能是包含 SKILL.md 文件的文件夹,其中记录了指令,Crush 可按需发现并激活。

我们查找技能的全局路径包括:

  • $CRUSH_SKILLS_DIR
  • $XDG_CONFIG_HOME/agents/skills 或 ~/.config/agents/skills/
  • $XDG_CONFIG_HOME/crush/skills 或 ~/.config/crush/skills/
  • ~/.agents/skills/
  • ~/.claude/skills/
  • 在 Windows 上,我们 也 会查找
    • %LOCALAPPDATA%\agents\skills\ 或 %USERPROFILE%\AppData\Local\agents\skills\
    • %LOCALAPPDATA%\crush\skills\ 或 %USERPROFILE%\AppData\Local\crush\skills\
  • 通过 options.skills_paths 配置的额外路径

除此之外,我们 还会 从以下相对路径加载项目中的技能:

  • .agents/skills
  • .crush/skills
  • .claude/skills
  • .cursor/skills

或在你的配置中明确指定技能目录:

option skill-path "$HOME/squid-skills" "./other-skills"

您可以从 anthropics/skills 获取示例技能并快速上手:

# Unix
mkdir -p ~/.config/crush/skills
cd ~/.config/crush/skills
git clone https://github.com/anthropics/skills.git _temp
mv _temp/skills/* . && rm -rf _temp
# Windows (PowerShell)
mkdir -Force "$env:LOCALAPPDATA\crush\skills"
cd "$env:LOCALAPPDATA\crush\skills"
git clone https://github.com/anthropics/skills.git _temp
mv _temp/skills/* . ; rm -r -force _temp

用户可调用 Skills

Skills 可以配置为命令,并通过命令面板 (ctrl+p)调用。在 skill 的 YAML frontmatter 中添加 user-invocable: true:

---
name: my-hot-skill
description: A skill that can be invoked as a command.
user-invocable: true
---

可由用户调用的技能会以 user: 或 project: 前缀显示在命令面板中:

  • 来自全局目录的技能显示为 user:skill-name
  • 来自项目目录的技能显示为 project:skill-name

调用后,该技能的指令会载入对话上下文。

若要防止模型自动触发某个技能(同时仍允许用户调用),请添加 disable-model-invocation: true:

---
name: my-skill
description: Only invocable by users, not the model.
user-invocable: true
disable-model-invocation: true
---

带有 disable-model-invocation 的技能不会出现在模型的可用技能列表中,但用户仍可手动调用。

桌面通知

Crush 会在工具调用需要授权 以及智能体完成其回合时发送桌面通知。这些通知仅在终端窗口未获得焦点 _并且_终端支持上报焦点状态时才会发送。

# Choose auto, native, osc, bell, or disabled.
option notifications disabled

auto 在本地使用原生通知,并在受支持时通过 SSH 使用 OSC 通知。

初始化

当你初始化项目时,Crush 会分析代码库,并创建一个上下文文件,帮助它在后续会话中更高效地工作。默认情况下,该文件名为 AGENTS.md,但你可以通过 initialize-as 选项自定义其名称和位置:

# crushrc
option initialize-as AGENTS.md

这在你希望采用不同的命名约定,或想把文件放到特定目录(例如 CRUSH.md 或 docs/LLMs.md)时很有用。Crush 会在文件中填入与该项目相关的上下文,例如初始化过程中发现的构建命令、代码模式和约定。

署名设置

默认情况下,Crush 会向它创建的 Git 提交和拉取请求添加署名信息。你可以通过 option 命令自定义这一行为:

option attribution-trailer-style co-authored-by
option attribution-generated-with true
  • trailer_style: 控制添加到提交信息中的署名 trailer (默认:assisted-by)
    • assisted-by: 添加 Assisted-by: Crush:[ModelID],如该规范中所示
    • co-authored-by: 添加 Co-Authored-By: Crush <crush@charm.land>
    • none: 不添加署名 trailer
  • generated_with: 当为 true(默认)时,会在提交信息和 PR 描述中添加 💘 Generated with Crush 行

自定义提供商

Crush 支持针对 OpenAI 兼容和 Anthropic 兼容 API 的自定义提供商配置。

Note

注意,我们为 OpenAI 支持两种“类型”。请务必选择正确的类型,以获得最佳体验!

  • 当通过 OpenAI 代理或路由请求时,应使用 openai。
  • 当使用具有 OpenAI 兼容 API 的非 OpenAI 提供商时,应使用 openai-compat。

OpenAI 兼容 API

以下是 Deepseek 的示例配置,它使用 OpenAI 兼容 API。别忘了在环境中设置 DEEPSEEK_API_KEY。

provider add deepseek --type openai-compat \
  --base-url "https://api.deepseek.com/v1" \
  --api-key "$DEEPSEEK_API_KEY"

model add deepseek/deepseek-chat \
  --name "Deepseek V3" \
  --context-window 64000 \
  --default-max-tokens 5000 \
  --price-input 0.27 \
  --price-output 1.1 \
  --price-cache-create 1.1 \
  --price-cache-hit 0.07

Anthropic 兼容 API

自定义 Anthropic 兼容提供商遵循以下格式:

provider add custom-anthropic \
  --type anthropic \
  --base-url "https://api.anthropic.com/v1" \
  --api-key "$ANTHROPIC_API_KEY" \
  --extra-header anthropic-version 2023-06-01

model add custom-anthropic/claude-sonnet-4-20250514 \
  --name "Claude Sonnet 4" \
  --context-window 200000 \
  --default-max-tokens 50000 \
  --can-reason true \
  --supports-images true \
  --price-input 3 \
  --price-output 15 \
  --price-cache-create 3.75 \
  --price-cache-hit 0.3

Amazon Bedrock

Crush 目前支持通过 Bedrock 运行 Anthropic 模型,缓存已禁用。

当 Crush 能够找到 AWS 凭据时,Bedrock 提供商就会显示。你可以使用以下两种方式之一进行身份验证:

API 密钥。 将 AWS_BEARER_TOKEN_BEDROCK 设置为 Bedrock API 密钥。这是最简单的方式,且不会在会话中途过期。

AWS 凭据链(SSO、配置文件、访问密钥)。 使用 aws configure 或 aws configure sso 按常规方式配置 AWS。Crush 会采用 AWS SDK 凭据链解析出的任意凭据,包括 AWS_PROFILE、AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY 或 SSO 会话。若要选择特定配置文件,可在 shell 中设置 AWS_PROFILE(AWS_PROFILE=myprofile crush),或在顶层 env 配置中设置。

如果你通过 AWS SSO 进行身份验证,会话会定期过期。请将 aws_auth_refresh 设置为用于刷新会话的命令。当 Bedrock 返回凭据错误时,Crush 会执行该命令,然后就地重试请求(不会产生重复消息,也无需手动重启):

{
  "$schema": "https://charm.land/crush.json",
  "env": {
    "AWS_PROFILE": "my-sso-profile"
  },
  "providers": {
    "bedrock": {
      "aws_auth_refresh": "aws sso login --profile my-sso-profile"
    },
    "bedrock-europe": {
      "aws_auth_refresh": "aws sso login --profile my-eu-sso-profile"
    }
  }
}
  • aws_auth_refresh — 当 AWS 凭据过期时运行的 shell 命令(例如:aws sso login)

Vertex AI Platform

当设置 VERTEXAI_PROJECT 和 VERTEXAI_LOCATION 后,Vertex AI 会出现在可用提供商列表中。你还需要完成身份验证:

$ gcloud auth application-default login

要将特定模型添加到配置中,请按以下方式配置:

# crushrc — authentication still comes from gcloud and the VERTEXAI_* env vars.
provider add vertexai --type google-vertex

model add vertexai/claude-sonnet-4@20250514 \
  --name "VertexAI Sonnet 4" \
  --context-window 200000 \
  --default-max-tokens 50000 \
  --can-reason true \
  --supports-images true \
  --price-input 3 \
  --price-output 15 \
  --price-cache-create 3.75 \
  --price-cache-hit 0.3

本地模型

Crush 可以自动从本地服务提供方发现模型。添加一个自定义服务提供方,将 type 设置为 llamacpp、omlx、lmstudio、litellm 或 ollama,并省略模型列表。Crush 会自动填充模型列表。

# Piece of cake.
provider add ollama \
  --name Ollama \
  --type ollama \
  --base-url "http://localhost:11434/v1/"

对于 llama.cpp(llama-server),请指向服务器基础 URL:

provider add llamacpp \
  --name "llama.cpp" \
  --type llamacpp \
  --base-url "http://localhost:2222"

手动模型配置

你仍然可以显式列出模型。用户定义的模型始终优先于自动发现的模型,且你设置的任何字段都不会被自动发现覆盖。如果任意 openai-compat 提供商的模型列表为空,或者你传入 "discover_models": true,自动发现将会运行,并将发现的模型与你手动配置的模型合并。

# crushrc
provider add ollama \
  --name Ollama \
  --type ollama \
  --base-url "http://localhost:11434/v1/" \
  --discover-models true

model add ollama/qwen3:30b \
  --name "Qwen 3 30B" \
  --context-window 256000 \
  --default-max-tokens 20000

--discover-models true 标志会将发现的模型与上方配置的模型合并; 当出现冲突时,显式指定的模型字段优先生效。

日志

有时你需要查看日志。幸运的是,Crush 会记录各种各样的 内容。日志会存储在项目相对路径 ./.crush/logs/crush.log 中。

CLI 中还包含一些辅助命令,方便你查看最近的日志:

# Print the last 1000 lines
crush logs

# Print the last 500 lines
crush logs --tail 500

# Follow logs in real time
crush logs --follow

想要更多日志?使用 --debug 参数运行 crush,或在你的 crushrc 中启用它:

# crushrc
option debug true
option debug-lsp true

提供商自动更新

默认情况下,Crush 会自动从 Catwalk 检查最新最全的提供商与模型列表,Catwalk 是 Crush 的开源提供商数据库。这意味着,当有新的提供商和模型可用,或模型元数据发生变化时,Crush 会自动更新你的本地配置。

自定义提供商目录

你也可以覆盖 Catwalk 的默认 URL(用于测试,例如使用 fork)。

你可以通过设置 CATWALK_URL 环境变量来实现(例如 export CATWALK_URL=http://localhost:8000)。

禁用提供商自动更新

对于网络访问受限的用户,或偏好离线隔离环境工作的用户,这可能不是所需行为,该功能可以禁用。

要在 crushrc 中禁用提供商自动更新:

option provider-auto-update false

或设置 CRUSH_DISABLE_PROVIDER_AUTO_UPDATE 环境变量:

export CRUSH_DISABLE_PROVIDER_AUTO_UPDATE=1

手动更新 providers

可以使用 crush update-providers 命令手动更新 providers:

# Update providers remotely from Catwalk.
crush update-providers

# Update providers from a custom Catwalk base URL.
crush update-providers https://example.com/

# Update providers from a local file.
crush update-providers /path/to/local-providers.json

# Reset providers to the embedded version, embedded at crush at build time.
crush update-providers embedded

# For more info:
crush update-providers --help

指标

Crush 会记录假名化使用指标(与设备特定的哈希值关联), 维护者可据此确定开发与支持优先级。这些指标 仅包含使用元数据;提示和响应绝不会 被收集。

具体收集内容的详细信息见源代码(此处 和此处)。

你可以随时通过设置以下环境变量, 选择退出指标收集:

export CRUSH_DISABLE_METRICS=1

Crush 也遵循 DO_NOT_TRACK 约定,可通过 export DO_NOT_TRACK=1 开启。

常见问题

为什么剪贴板复制和粘贴无法正常工作?

在类 Unix 环境中,可能需要安装额外的工具。

环境 工具
Windows 原生支持
macOS 原生支持
Linux/BSD + Wayland wl-copy 和 wl-paste
Linux/BSD + X11 xclip 或 xsel

贡献

请参阅贡献指南。

你怎么看?

我们很乐意听听你对于这个项目的想法。需要帮助?我们帮你。可以在以下渠道找到我们:

许可证

FSL-1.1-MIT


Charm 旗下项目。

Charm 标志

Charm热爱开源 • Charm loves open source

项目介绍

您钟爱的终端专属魅力AI编码助手 💘【此简介由AI生成】

定制我的领域
14728.58 K2.32 K访问 GitHub