Glamourous agentic coding for all 💘
当前访问频次受限,请登录后继续访问
Crush
你的全新编程搭子,现已登陆你常用的终端。
你的工具、代码与工作流,无缝接入你偏好的 LLM。
终端里的编程新搭档,
无缝接入你的工具、代码与工作流,全面兼容主流 LLM 模型。
特性
- 多模型: 可从众多 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
或者,直接下载:
或者直接用 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 的更多信息。
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 兼容模型仓库,欢迎你的贡献。
配置
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_CONFIGCRUSH_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 |
贡献
请参阅贡献指南。
你怎么看?
我们很乐意听听你对于这个项目的想法。需要帮助?我们帮你。可以在以下渠道找到我们:
许可证
Charm 旗下项目。
Charm热爱开源 • Charm loves open source
