
灿海星图指南--Crush:OpenCode继任者上手,Bubble Tea/Gum/Huh/Lip Gloss四件套原生集成
go install 报错的那一下午,我才意识到 OpenCode 归档后,Charm 团队不是打了个补丁——是把整个 CLI 工具链塞进去了。
本文是一篇实操指南。已核实 GitHub 仓库存在。
核心操作
安装
go install github.com/charmbracelet/crush@latest
需要 Go 1.22+。如果不满足,先去 go.dev 升级。不用 Go 的可以直接从 Release 页面 下载二进制。
配置
新建 ~/.config/crush/config.toml,把下面的 API Key 和模型名换成你自己的:
[models]
default = "claude-4-sonnet"
[providers.openai]
api_key = "sk-..."
models = ["gpt-4.1", "gpt-4.1-mini", "o4-mini", "o3"]
[providers.anthropic]
api_key = "sk-ant-..."
models = ["claude-4-sonnet", "claude-4-opus", "claude-4-haiku"]
[providers.openrouter]
api_key = "sk-or-..."
models = ["anthropic/claude-4-sonnet", "google/gemini-2.5-pro"]
[providers.deepseek]
api_key = "sk-..."
models = ["deepseek-chat", "deepseek-reasoner"]
[ui]
theme = "charm"
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
models.default | string | 是 | 默认模型 ID,需在某个 provider 的 models 列表中已声明 |
providers.<name>.api_key | string | 条件必填 | Copilot 免费额度模式下可不填 |
providers.<name>.models | array | 是 | 该厂商可用的模型 ID 列表 |
ui.theme | string | 否 | 可选 charm、dracula、nord、tokyo-night |
用 gum 做启动包装
Crush 内置了 Charm 工具链。写个脚本在启动前选模型:
#!/bin/bash
model=$(gum choose "claude-4-sonnet" "gpt-4.1" "deepseek-chat")
crush --model "$model" "$@"
保存为 cc,放 $PATH 里,以后 cc 启动直接选模型。
多配置文件按项目隔离
crush --config ~/.config/crush/work.toml # 工作项目用 Claude
crush --config ~/.config/crush/side.toml # 个人项目用 DeepSeek
每个 .toml 格式同上,只改 default 和 api_key。
踩坑实录
| 现象 | 原因 | 解决 |
|---|---|---|
go install 报兼容性错误 | Go 版本低于 1.22 | go version 确认后升级 |
| API Key 不生效 | 首次运行不会自动迁移 OpenCode 配置 | 手动编辑 ~/.config/crush/config.toml |
| 非 OpenAI/Anthropic 厂商不知道怎么配 | 官方文档只列了这两种的例子 | openrouter / deepseek 字段结构一致,照搬即可 |
default 模型切换不生效 | 模型名拼写错误或未在 models 列表声明 | 逐字对照 default 和 models 数组 |
常见疑问
Q1:Crush 能上生产吗?
不建议。Charm 没打 v1.0 标签,API 和配置随时变。如果你需要一个每天靠得住的工具,先用 Claude Code 或 Codex,等 Crush 稳了再切。
Q2:OpenCode 配置能直接迁移吗?
不完全兼容。仓库路径、命令行入口、模型提供商配置格式都变了。需要手动对照文档重写。Copilot 免费额度的接入方式保留了,但授权流程可能不同。
Q3:既然同一拨人,为什么改名不直接更新 OpenCode?
Charm 在 OpenCode 基础上做了大量重构——从单体改成了 Bubble Tea/Gum/Huh/Lip Gloss 的工具链集成。代码变动太大,强行在原仓库迭代会破坏已有用户的使用体验。新名字新仓库是最干净的方式。
我为什么不用 Claude Code 替代
三个理由。
第一,模型自由度。 Claude Code 绑死 Anthropic。Crush 支持 8 种模型——你可以早上用 DeepSeek 省钱,下午切 Claude Opus 攻坚。对于同时在跑多个项目的开发者,这个灵活性就是几百块的 API 差价。
第二,Go 生态。 Crash 是 Go 写的,单二进制分发。不需要装 Python、不需要装 Node。我有一台服务器只装了 Go 工具链,跑 Crush 毫无压力。Claude Code 是 Node 写的——意味着你得装 npm、搞 node_modules 版本冲突。
第三,Charm 全家桶。 如果你已经在用 Gum(交互脚本)、Huh(表单)、Lip Gloss(终端样式),Crush 不是孤立的工具——它是 Charm 生态的一个节点。用 gum 写启动脚本、用 huh 做配置向导、用 lipgloss 调终端主题——这些事 Claude Code 做不到。
但话说回来——如果你需要一个已经验证过的、每天出活的编程助手,Claude Code 更稳。Crush 还在早期。我现在的策略是:新项目用 Claude Code 搭骨架,探索性工作用 Crush 同时跑多个模型对比。
本文数据来源于 GitHub 公开仓库(charmbracelet/crush),截至 2026 年 6 月 30 日。