文档
Crush
Crush 是 Charm 的终端编码代理,并非同名的 Rust shell。它的配置采用 Bash,因此要将它指向另一个端点,只需添加一个提供商,设置类型、基础 URL 和密钥。
Crush 的配置是 Bash — 在 crushrc 中添加一行 `provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1"`,即可让 Charm 的终端代理使用 Claude 与 GPT。
# A crushrc is Bash, not a settings file. Everything here is executed.
provider add kunavo \
--type openai-compat \
--base-url "https://api.kunavo.com/v1" \
--api-key "${KUNAVO_API_KEY:?set KUNAVO_API_KEY}"
model add kunavo/claude-sonnet-5 \
--name "Claude Sonnet 5" \
--context-window 1000000 \
--default-max-tokens 32000 \
--price-input 1.4 \
--price-output 7
model add kunavo/claude-haiku-4-5 \
--name "Claude Haiku 4.5" \
--context-window 200000 \
--default-max-tokens 16000 \
--price-input 0.7 \
--price-output 3.5
model large kunavo/claude-sonnet-5
model small kunavo/claude-haiku-4-5/v1 后缀。Crush 自己记录的 OpenAI 兼容示例使用 --base-url "https://api.deepseek.com/v1",Anthropic 兼容示例也以相同后缀结尾——因此这是客户端的约定,而非猜测。省略该后缀会导致 404,而不是身份验证错误。--type openai-compat,而不是 openai。README 明确区分:openai 用于通过 OpenAI 代理或路由请求,openai-compat 用于提供 OpenAI 兼容 API 的非 OpenAI 提供商。Kunavo 属于第二种情况。crushrc 是包含 Crush 内置功能的 Bash;Crush 自己提醒它属于受信任代码,会在完整的 shell 中运行。这也是它的优势:--api-key "$(op read ...)" 可让密钥不必写入文件。旧版 crush.json 仍可加载,但 README 将其标记为已弃用,因此请使用 crushrc 进行配置。sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 Crush 设置页面。分步操作
- 在
/app/keys创建密钥并复制——它只显示一次。将其导出为KUNAVO_API_KEY,或者直接在配置中从密码管理器读取。 - 将上面的配置块放入
~/.config/crush/crushrc。Crush 会依次读取./.crushrc、./crushrc,然后读取全局配置,因此项目可以覆盖机器级设置——克隆下来的仓库也可以自带配置文件。 - 启动
crush,然后按ctrl+l打开模型选择器。上面的model large和model small行已经固定了两个槽位,因此模型选择器用于切换,而非初始设置。 - 如果不想手动注册 id:当
openai-compat提供商的模型列表为空或传入--discover-models true时,就会运行自动发现。Kunavo 会响应GET /v1/models,因此列表会自动填充;发生冲突时,你自己设置的model add字段优先。 - 先运行一项范围明确的任务,然后查看账户在
/app/billing记录的费用。终端显示的数字只是根据你填写的--price-*数值进行的计算;账本记录的才是实际账单。
已于 2026年9月21日 对照 Crush 的自定义提供商章节 检查。第三方设置会发生变化;如果这里的字段名称不再与你看到的内容一致,应以该页面为准,而不是本页。
调试客户端前先验证
一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 JSON,则相同的基础 URL 和密钥可以在 Crush 中使用。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."字段中应填写哪个模型 ID
每个文本模型都可通过模型 ID 访问——实时列表见 GET /v1/models,包含价格的目录见模型页面。费率单位为每 1M token 的美元,格式为输入 / 输出。
| 模型 ID | Kunavo 输入 / 输出 | 它在 Crush 中的位置 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 日常编码和编辑使用的 model large 槽位 |
claude-haiku-4-5 | $0.70 / $3.50 | Crush 会频繁调用 model small 槽位,用于生成标题和摘要 |
claude-opus-5 | $3.50 / $17.50 | 当错误计划代价高昂时,切换到 model large 进行重构 |
gpt-5-6-terra | $0.70 / $4.20 | 使用同一密钥获取另一模型系列的第二种意见,只需再添加一个模型 |
常见问题
如何在 Crush CLI 中添加自定义 API 提供商?
将其写入 crushrc,这是包含 Crush 内置功能的 Bash 脚本。一行命令即可注册端点——provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1" --api-key "$KUNAVO_API_KEY"——每个 id 再使用一条 model add 命令,注册你要调用的模型,并填写 Crush 用于屏幕估算的显示名称、上下文窗口和每百万 token 价格。Crush 会依次读取 ./.crushrc、./crushrc 和 ~/.config/crush/crushrc,因此同一个配置块既可用于项目,也可用于整台机器。
Crush 的基础 URL 末尾需要加 /v1 吗?
需要。Crush 自己的自定义提供商示例对两种类型都写有该后缀:OpenAI 兼容情况下使用 https://api.deepseek.com/v1,Anthropic 兼容情况下使用 https://api.anthropic.com/v1。Kunavo 密钥对应的值是 https://api.kunavo.com/v1。这与 Claude Code 相反;Claude Code 的 ANTHROPIC_BASE_URL 使用不带路径的源站地址,因为该客户端会自行追加路径——同一个网关,两种写法;遗漏 /v1 会返回 404,而不是 401。
应该使用 --type openai 还是 --type openai-compat?
任何第三方网关都应使用 openai-compat。Crush 的 README 规定,openai 用于通过 OpenAI 本身代理或路由请求;对于提供 OpenAI 兼容 API 的非 OpenAI 提供商,则应使用 openai-compat。类型还会决定线格式之外的行为:当 openai-compat 提供商的模型列表为空时,会自动发现模型。Crush 还支持用于 Anthropic 兼容端点的 --type anthropic,该类型需要使用 --extra-header anthropic-version 2023-06-01。
crush.json 仍然是存放此配置的正确位置吗?
不是。crush.json 是原始格式;Crush 自己的文档现在将其标记为已弃用,并说明不会再为其添加新功能;当前格式是 crushrc。请注意,两者都会被执行,而非解析——crushrc 会在完整的 shell 中运行,crush.json 中的任何 $(...) 都会在加载时展开——因此文档会警告,不要在尚未阅读其配置的目录中启动 Crush;这也解释了为何可以直接在配置中从密码管理器获取密钥。
为什么 Crush 显示的费用与实际扣费不同?
因为这两个数字的来源不同、含义也不同。对于手动注册的提供商,屏幕上的估算值是根据你在 model add 中输入的 --price-input 和 --price-output 数值计算的;对于内置提供商,估算值来自 Crush 的外部提供商目录 Catwalk。两者都不会读取你的账户。--price-* 标志中的数值写错会导致显示错误,但不会影响实际扣费。请通过 /app/billing 中的账本核对实际费用。
Crush 能否通过自定义提供商使用 Claude 或 GPT 模型?
可以,Crush 没有任何限制。引导设置会推荐使用官方提供商 Charm Hyper,但自定义提供商也是文档明确支持的一等途径,没有套餐限制;模型 ID 会在端点处解析,而不是在客户端中解析。因此,在 openai-compat 提供商中使用 Claude ID 正是预期的组合:类型指的是传输协议,而不是供应商。