几乎没有人需要离开 Crush,而这正是 Crush 替代方案页面最有用的结论。 Crush 是 Charm 的终端编码代理——不是名称相同但毫无关系的 Rust shell 和编程语言 liljencrantz/crush,也不是占据裸搜索词 "crush ai" 的任何陪伴聊天应用。Charm 的 Crush 仍在活跃开发:GitHub API 于 2026 年 9 月 21 日报告 charmbracelet/crush 未归档,且拥有超过 28,000 个 star;同一天发布了 v0.96.1。因此,这里的“替代方案”实际上对应六种不同的退出原因,其中三种根本不需要更换客户端。
先确定哪一种情况属于你。然后阅读迁移账本,因为切换成本并不在大多数人预期的地方。
先看退出原因,而不是候选名单
| 你为什么要寻找 | 需要更换客户端吗? | 真正能解决它的办法 |
|---|---|---|
| Charm Hyper 不销售你想要的模型系列 | 否 | 注册你自己的端点。Crush 将自定义 provider 记录为普通配置内置项,并未对其附加计划要求;README 称 Hyper 是最快的入门方式,而不是必需项 |
| 你希望关闭遥测 | 否 | Crush 默认记录匿名化使用指标,并记录了两种退出方式:CRUSH_DISABLE_METRICS=1,以及它会遵守 DO_NOT_TRACK=1 |
| 你的组织要求工具使用 OSI 批准的许可证 | 是 | Crush 使用 FSL-1.1-MIT,GitHub 报告为 NOASSERTION。OpenCode 和 OpenHands 使用 MIT;goose 和 Codex CLI 使用 Apache-2.0 |
| 你不希望配置文件执行代码 | 是 | Crush 自己的文档写道:“两种格式都是受信任的代码:它们会在 UI 出现之前以你的 shell 权限运行。”OpenCode 的 opencode.json 是数据 |
| 你需要终端之外的使用界面 | 是 | OpenCode 文档说明,可以通过 opencode web 启动浏览器 UI,并提供适用于 VS Code 及其分支的 IDE 扩展。OpenHands 将自己描述为“用于软件工程代理的开源平台”,并提供 GUI、CLI 和 SDK,因此当终端聊天循环不是你想要的形式时,应考虑它 |
| 你想要固定月费,而不是按 token 计量 | 可能不行 | Hyper 发布了 $20/月的订阅;OpenCode Go 为 $10/月,而 Crush 将 OpenCode 作为内置 provider 提供。Go 自己的已验证客户端表没有列出 Crush,本页面也没有任何证据表明支持与否——请自行测试 |
该表的来源,均于 2026 年 9 月 21 日核查:用于自定义 provider 和指标的 Crush README,用于受信任代码警告的 docs/config/README.md,用于订阅价格的 hyper.charm.land,用于其价格信息的 OpenCode Go,以及用于非终端界面的 OpenCode web 和 IDE 页面。关于 Crush 文档的一条实用说明:charm.land/crush 返回 200,但其完整正文只是一个 199 字节的 meta refresh,指向该仓库,因此 README 和 docs/config/README.md 是一手文档。由 Mintlify 托管的 Crush 文档镜像仍在教授已弃用的 crush.json 格式;该页面带有“Claim this site”横幅,并非 Charm 的页面。
候选名单:如今实际使用的名称
其中三个项目最近迁移了组织,因此大多数已发布的比较仍使用错误的仓库。
| 项目 | 2026 年 9 月 21 日的状态 | 许可证 | 最新版本 |
|---|---|---|---|
| OpenCode (Anomaly) | 活跃。原为 sst/opencode;该路径现在解析到 anomalyco/opencode | MIT | v1.18.31,2026 年 9 月 14 日 |
| goose (AAIF) | 活跃。原为 block/goose;该项目于 2026 年 4 月 7 日宣布迁移至 Linux Foundation 旗下的 Agentic AI Foundation | Apache-2.0 | v1.51.0,2026 年 9 月 17 日 |
| OpenHands | 活跃。原为 All-Hands-AI/OpenHands;主页现在是 openhands.dev | MIT | v1.20.0,2026 年 9 月 17 日 |
| Codex CLI | 活跃 | Apache-2.0 | rust-v0.155.1,2026 年 9 月 18 日 |
| Claude Code | 活跃,但不是开源项目:其 LICENSE.md 保留所有权利,并规定使用须遵守 Anthropic's Commercial Terms of Service | 专有软件;GitHub 未检测到 SPDX 许可证 | 本文未作比较 |
| Aider | 未归档,但已停滞:最后一次提交到 main 是 2026 年 5 月 22 日;有 1,379 个未解决问题 | Apache-2.0 | v0.86.0,日期为 2025 年 8 月 9 日;PyPI aider-chat 0.86.2,日期为 2026 年 2 月 12 日 |
| Gemini CLI | 仓库仍在发布版本(v0.60.0,2026 年 9 月 15 日),但其项目官网称,对于免费层级和 Google One 用户,该 CLI 已于 2026 年 6 月 18 日被 Antigravity CLI 取代 | Apache-2.0 | v0.60.0,2026 年 9 月 15 日 |
仓库状态、许可证和发布版本通过 GitHub API 读取,时间为 2026 年 9 月 21 日。Gemini CLI 行的范围严格按照其来源所述,没有扩大:该仓库显然仍在发布版本,且未找到 Google 官方域名上的公告来佐证替代通知。至于 Crush 与 OpenCode 的比较本身——权限默认值、许可证细节、双钱包拆分——请参阅 Crush 与 OpenCode 对比,此处不再摘要。
各客户端允许配置自有端点的位置
这张表决定某个候选方案对你而言是否具有可行性。同一个网关在这五个客户端中有四种不同的写法,其中一个根本无法接受普通的 chat-completions 端点。
| 客户端 | 端点放在哪里 | URL 的写法 | 需要了解的限制 |
|---|---|---|---|
| Crush | provider add <id> --type openai-compat --base-url … --api-key …,然后执行 model add | 包含 /v1。Charm 自己的示例写作 https://api.deepseek.com/v1 | 端点本身没有限制。使用 openai-compat,不要使用 openai——README 说明,openai“应在通过 OpenAI 代理或路由请求时使用” |
| OpenCode | opencode.json,即一个包含 "npm": "@ai-sdk/openai-compatible" 和 options.baseURL 的 provider 块 | 包含 /v1 | 端点本身没有限制。根据线路格式选择软件包:其文档对 /v1/chat/completions 使用 @ai-sdk/openai-compatible,对 /v1/responses 使用 @ai-sdk/openai。另外,同一份文档说明,baseURL 可以设置在任何 provider 上,而示例会覆盖内置的 anthropic provider |
| Claude Code | ANTHROPIC_BASE_URL,以及一个凭证变量 | 裸 origin,不带路径。 文档示例是 https://llm-gateway.example.com;客户端会附加 /v1/messages | 凭证变量决定请求头——ANTHROPIC_AUTH_TOKEN 发送 Authorization: Bearer,ANTHROPIC_API_KEY 发送 x-api-key,使用错误的变量会返回 401。桌面应用既不读取这个变量,也不读取 settings.json |
| goose | OPENAI_API_KEY 加上 OPENAI_HOST 和 OPENAI_BASE_PATH,或使用专用的自定义 provider | 分为两部分。 OPENAI_HOST 是不带尾部路径的根地址;OPENAI_BASE_PATH 默认为 v1/chat/completions | 其文档说明:404 通常意味着 OPENAI_BASE_PATH 对你的端点而言是错误的,而 401 表示密钥未加载 |
| Codex CLI | [model_providers.<id>] 位于 config.toml | base_url 加上 wire_api | 硬性限制。 在 config.schema.json 中,WireApi 定义只有一个枚举值,即 "responses"。仅支持 chat-completions 的端点没有有效的线路协议。openai、ollama 和 lmstudio 也是内置 ID,Codex 的 provider 源代码称内置 provider “通常不可覆盖” |
Crush 和 goose 的内容逐字读取自 Crush README 及 goose 的 provider 文档,时间为 2026 年 9 月 21 日;Codex 枚举来自 config.schema.json,内置 ID 来自 model-provider-info,两者均位于 main,并于同日获取;Claude Code 的信息来自其网关连接页面;OpenCode 的信息来自其 provider 文档。有两点值得记住:之所以存在基础 URL 参考,是因为/v1差异是这些客户端之间迁移时常见的错误配置;Anthropic 的网关概览说明,它“不认可、维护或审计第三方网关产品,也不支持通过任何网关将 Claude Code 路由到非 Claude 模型”。Kunavo 发布了使用 wire_api = "responses" 的 Codex 配置——参见 适用于 Codex 的最佳 API——但已发布的配置不等于测试结果。
迁移账本:哪些会迁移,哪些不会
令人意外的是,可移植资产才是昂贵的,而人们担心的却是那些用完即弃的资产。
| 资产 | 会迁移吗? | 详情 |
|---|---|---|
| 智能体技能 | 会,保持不变 | Crush 的全局 skill 路径包括 ~/.claude/skills/ 和 ~/.agents/skills/;对于单个项目,它会读取 .agents/skills、.crush/skills、.claude/skills 和 .cursor/skills。OpenCode 也会读取 ~/.claude/skills/。文件夹相同,无需转换 |
| 跨工具项目规则 | 是 | Crush 将 ~/.config/AGENTS.md 加载为共享文件,将 ~/.config/crush/CRUSH.md 加载为仅供 Crush 使用的文件。OpenCode 先读取 AGENTS.md,然后是 ~/.config/opencode/AGENTS.md,再然后是 ~/.claude/CLAUDE.md。任何 Crush 专属内容都会按设计保留在 CRUSH.md 中 |
| 你的 API 密钥 | 是 | 它属于端点,而不是客户端。同一个密钥可以同时供 Crush、OpenCode 和 goose 使用,让你比较它们 |
| MCP 和 LSP 服务器 | 功能支持,但语法不同 | 两个客户端都支持它们,但声明需要重写。这是复制并调整格式的工作,而不是重新架构 |
| 提供商配置 | 没有转换器 | crushrc 是包含 Crush 内置命令的 Bash;opencode.json 是数据文件。需要手动重写,每个项目或每台机器一次 |
| 会话历史 | 否 | Crush 的 session 命令会注册 list、show、last、delete 和 rename——没有 export 或 import 子命令。状态存储在 ~/.local/share/crush(Unix)或 %LOCALAPPDATA%\crush(Windows)中 |
| 屏幕上显示的费用读数 | 不,而且它从来都不是账单 | 对于手动注册的 Crush provider,该数值是根据你输入的 --price-input 和 --price-output 数字进行算术计算得出的;对于内置 provider,该数值来自 Catwalk。两者都不会读取你的账户 |
内容读取自 main 分支上的 Crush README、docs/config/README.md 和 internal/cmd/session.go,以及 OpenCode 的规则文档,时间均为 2026 年 9 月 21 日。有一个歧义被保留下来,而不是凭空猜测:Crush 自己的文件对于会话状态的存储方式存在分歧,因此本页面只列出位置,不指定存储引擎。
回滚。 将候选客户端安装在 Crush 旁边,而不是替代 Crush。保留 crushrc 不变,让新客户端指向同一个端点,并在两者上各运行一个有边界的任务。Skills 和 AGENTS.md 从共享路径读取,因此无需重新配置客户端即可使用它们;要切回只需再次运行 crush。开始前唯一需要决定的是:你是否在意会留下的会话历史——因为它是唯一没有迁移路径的资产。
无论哪个客户端胜出,一个会话需要多少钱
这些客户端都不会为自身收费。Crush、OpenCode、goose、Codex CLI 和 Aider 都可以免费下载;你支付的是在所配置端点产生的模型 token 费用。因此,客户端选择不会改变你的账单——真正改变账单的是钱包,这也是 Crush 用户最终寻找替代方案的真正原因。
下面的数字是用于说明的 token 算术,不是测得的任务成本,也不是账单上限。假设 large 槽位的一次会话发送200,000 个未缓存输入 token并接收15,000 个输出 token。这个比例是为了比较而作的假设,并非对你的仓库进行的测量。费率是实时的Kunavo 目录每百万 token 价格。
| 模型 | 每 1M 个令牌的输入 / 输出 | 该会话的预计成本 |
|---|---|---|
| Claude Haiku 4.5 | $0.70 / $3.50 | $0.192 |
| GPT-5.6 Terra | $0.70 / $4.20 | $0.203 |
| Claude Sonnet 5 | $1.40 / $7.00 | $0.385 |
还有一项 Crush 特有的费用,任何迁移后都值得检查。Crush 固定使用两个槽位:model large 和 model small。在 Crush 位于 main 的源代码中(internal/agent/agent.go,读取于 2026 年 9 月 21 日),small 槽位生成会话标题并支持内置的 agentic fetch 工具,而对话摘要使用 large 模型。标题生成每个会话只进行一次简短调用;除非该槽位使用推理模型,否则输出上限为 40 个 token——因此 small 槽位本身从设计上就很便宜,而 fetch 工具可能使费用累积。为便于衡量,假设一次会话中 small 槽位产生任意的40,000 个输入 token 和 3,000 个输出 token流量——这个数字是为了让模型可比,而不是对 Crush 的测量。在 Claude Haiku 4.5 上,估算费用为 $0.038;如果指向 Claude Sonnet 5,则为 $0.077,约为 2 倍的 Claude Haiku 4.5 费用。无论最终选择哪个客户端,都要检查它是否有便宜模型槽位,以及其中实际配置了什么。
为了说明钱包问题为何会出现:Charm Hyper 的公共模型端点于 2026 年 9 月 21 日返回了23 个模型,其中没有 Claude、GPT-5 或 GPT-6 系列模型,也没有 Gemini 模型。其发布的计划包括 Free 层级,价格为“$0 /month”,包含“100 Hypercredits per month”;以及 Subscription,价格为“$20 /month”,包含“250 Hypercredits, refreshing daily”;预付套餐则为 $5 购买 100 个、$10 购买 200 个、$20 购买 400 个 credits。页面称“Prepaid Hypercredits never expire”,同一页面还称“1 Hypercredit is currently 5¢”。这两条信息无法相互推导出月度额度,且页面没有发布消耗规则,因此本指南仅引用这些字符串,不对其进行算术计算。
Kunavo 的目录金额是计费下限,而不是上限:上游报告费用时,账单取目录成本与上游成本乘以适用加价两者中的较大值。缓存费用和外部工具不在本示例范围内。最低充值金额为$10 的预付余额——这是资金最低限额,不是任务费用或订阅费用。请参阅 billing details。Kunavo 不提供 embedding、text-to-speech 或 speech-to-text 模型,因此任何需要这些调用的客户端功能都会使用其自己的账户调用外部 provider。
选择之前需要了解的两个诚实提醒
首先,Kunavo 并不是唯一撰写 Crush 相关内容的 API 供应商,任何暗示只有 Kunavo 这样做的页面都可以核查,而且是错误的。Z.AI、DeepSeek 和 Vercel 都发布了官方的 Crush 配置页面。需要了解的是,2026 年 9 月 21 日阅读这些页面时,Z.AI 和 DeepSeek 都发布了手写的已弃用的 crush.json代码块,而 Vercel 的页面将配置指向 ~/.config/crush/crush.json——Crush 自己的文档则说明,crush.json“是原始格式,现已弃用”,新的选项只会进入基于 Bash 的配置。DeepSeek 的代码块还将 base_url 设置为 https://api.deepseek.com,没有包含 Charm 自己的 DeepSeek 示例所带的 /v1 后缀。如果你从 token 供应商的页面复制配置,请先对照 README 检查。
其次,“列出的最低费率”和“完成任务的最低成本”是两种不同的说法,价格表中只有前者。选择能够完成工作的最低价模型,同时确保其审查工作量在你可接受的范围内,然后与 provider 账户记录的账本核对——不要与终端读数核对,因为对于手动注册的 provider,终端读数只是根据你亲自输入的数字计算得出的。
尝试一个
如果你继续使用 Crush,只更换钱包,Crush integration guide 包含完整的 crushrc。如果你要迁移,OpenCode 和 goose 的设置页面涵盖了两个最常见的目的地。Kunavo 未对这些客户端中的任何一个进行运行时测试——这些页面记录的是各客户端针对 Kunavo 发布端点的官方配置,而不是兼容性结果。保留一条可用路径,运行一个有边界的任务,并在迁移日常使用的客户端之前,读取账户实际记录的费用。准备为密钥充值时,Create a Kunavo account。
还在比较更远的选项?OpenCode alternatives 和 Claude Code alternatives 从另一侧执行相同的决策树,而 the OpenAI-compatible API reference 介绍了大多数这些客户端所依赖的端点约定。
常见问题
Crush CLI 的替代方案有哪些?
人们实际会在这些终端代理之间迁移:Anomaly 的 OpenCode(MIT,位于 opencode.ai)、goose(Apache-2.0,目前由 Linux Foundation 下的 Agentic AI Foundation 管理)、OpenAI 的 Codex CLI(Apache-2.0)、Anthropic 的 Claude Code(不是开源软件:其 LICENSE.md 保留所有权利,并要求使用遵守 Anthropic Commercial Terms of Service)、Google 的 Gemini CLI(Apache-2.0)和 Aider(Apache-2.0,但已停滞)。OpenHands 是一个例外:它将自己描述为面向软件工程代理的开源平台,并提供 GUI、CLI 和 SDK,而不是终端聊天循环。在比较它们之前要注意一个陷阱:github.com/opencode-ai/opencode 上已归档的仓库根本不是替代方案——其 README 自己说明该项目后来以 Crush 的名称继续,因此那个 OpenCode 是 Crush 的旧名称。仓库事实于 2026 年 9 月 21 日检查。
Crush CLI 是被放弃还是停止维护了?
不是。2026 年 9 月 21 日,GitHub API 报告 charmbracelet/crush 的 archived 为 false,拥有超过 28,000 个 star,创建于 2025 年 5 月 21 日,并于当天发布了 v0.96.1;npm 软件包 @charmland/crush 几分钟后也发布了 0.96.1。如果你是因为搜索结果暗示项目已经停止而来到这里,可能的原因是它与后来成为 Crush 的已归档 Go 仓库重名,或者与 github.com/liljencrantz/crush 重名;后者是无关的命令行 Shell 和编程语言。这两者都不能说明 Charm 的代理项目情况。
如果 Charm 没有销售某个模型,我是否需要使用其他客户端?
不需要。Crush 将自定义提供商作为正式支持的使用方式写入文档,其文档没有对此附加任何套餐要求:provider add 用于注册端点,model add 用于注册每个 ID,而 Charm 自己的示例同时涵盖 OpenAI 兼容端点和 Anthropic 兼容端点。README 将 Hyper 称为最快的上手方式,而不是必需条件。这一点很重要,因为 Hyper 的公开目录于 2026 年 9 月 21 日返回了 23 个模型,其中没有 Claude、GPT-5 或 GPT-6 系列模型,也没有 Gemini 模型——因此,想要使用这些模型系列,是更换付费对象的理由,而不是更换客户端的理由。
切换终端编程代理时,实际会迁移哪些内容?
Agent Skills 无需转换即可迁移,因为多个客户端读取相同的目录:Crush 文档列出的技能路径包括 ~/.claude/skills/,以及项目中的 .claude/skills 和 .cursor/skills;OpenCode 也读取 ~/.claude/skills/。跨工具的项目规则通过 AGENTS.md 迁移——Crush 将 ~/.config/AGENTS.md 作为共享文件加载,将 ~/.config/crush/CRUSH.md 作为仅供 Crush 使用的文件;OpenCode 优先读取 AGENTS.md,并回退到 CLAUDE.md。你的 API 密钥可以迁移,因为它属于端点而非客户端。不能迁移的是提供商配置,不同格式之间没有转换器;会话历史也不能迁移:Crush 的 session 命令注册 list、show、last、delete 和 rename,但没有 export 或 import 子命令。已于 2026 年 9 月 21 日检查。
Crush 的 small 模型槽位会产生费用吗?
会,费用不高,但了解费用花在哪里很重要。Crush 固定使用两个模型槽位:large 和 small。在 Crush 的源代码中,small 槽位用于生成会话标题,并支持内置的 agentic fetch 工具;对话摘要使用 large 模型,而不是 small 模型。标题生成每个会话只进行一次简短调用;除非该槽位使用推理模型,否则输出上限为 40 个 token。因此,small 槽位从设计上就很便宜——迁移后需要检查的只是其中确实配置了便宜的模型,而不是你为 large 槽位选择的昂贵模型。读取自 main 分支的 internal/agent/agent.go,时间为 2026 年 9 月 21 日。
Crush CLI 是开源的吗?
不属于 OSI 批准的许可证范围;这是唯一一个确实会迫使你更换客户端的退出原因。Crush 的 LICENSE.md 标题为 Functional Source License, Version 1.1, MIT Future License,简称 FSL-1.1-MIT,版权归 2025-2026 Charmbracelet, Inc. 所有;GitHub 的许可证 API 将其报告为 NOASSERTION,而不是已识别的 SPDX 标识符。如果你所在组织的政策要求开发工具使用 OSI 批准的许可证,OpenCode 使用 MIT,goose 和 Codex CLI 使用 Apache-2.0,OpenHands 使用 MIT。Claude Code 在这一点上不是替代方案——其 LICENSE.md 保留所有权利,并规定使用须遵守 Anthropic's Commercial Terms of Service;GitHub 未检测到该仓库的 SPDX 许可证。
我可以在不放弃当前配置的情况下尝试替代方案吗?
可以,而且回滚成本低于大多数切换,因为两个昂贵资产是共享的,而不是需要迁移的。将候选客户端与 Crush 并行安装,指向同一个端点,保留现有配置,然后在两者上运行同一个有边界的任务。Skills 和 AGENTS.md 从共享路径读取,因此无需重新配置客户端即可使用它们。尝试其他客户端不会卸载 Crush 中的任何内容;如果你切回 Crush,那个从未编辑过的 crushrc 仍然存在。
从旧的榜单文章中选择时,应该避免哪个替代方案?
避免任何仍把 Aider 称为新鲜推荐的建议,也避免使用已迁移仓库名称的建议。Aider 并未归档,但其最新 GitHub 发布版本是 v0.86.0,日期为 2025 年 8 月 9 日;其最新 PyPI 构建版本 aider-chat 0.86.2 于 2026 年 2 月 12 日上传;其 main 分支最后一次提交是在 2026 年 5 月 22 日,并且有 1,379 个未解决问题——应将其视为存在维护风险的选项,而不是新鲜推荐。除此之外,sst/opencode 现在解析到 anomalyco/opencode,向 Agentic AI Foundation 捐赠后 block/goose 解析到 aaif-goose/goose,All-Hands-AI/OpenHands 解析到 OpenHands/OpenHands。使用旧名称的榜单文章写于这些迁移之前,其他方面也可能已经过时。
核查时间为 2026 年 9 月 21 日:通过 GitHub API 核查 Crush、OpenCode、goose、OpenHands、Codex、Aider 以及无关的 liljencrantz/crush 的仓库状态、许可证和最新发布版本;核查 main 分支上的 Crush README、docs/config/README.md、internal/cmd/session.go 和 internal/agent/agent.go,以及 @charmland/crush 的 npm 记录;核查 charm.land/crush、hyper.charm.land 及其模型端点;核查 Codex config.schema.json 的通信协议定义及其 model-provider-info 源代码;核查 goose 的提供商文档及其 2026 年 4 月 7 日的迁移公告。Claude Code 的 LICENSE.md 和网关页面、OpenCode 的提供商、规则、网页端和 IDE 文档、OpenCode Go 的价格、Gemini CLI 的替代通知,以及 Z.AI、DeepSeek 和 Vercel 的 Crush 配置页面,均于同一天从这些供应商自己的页面获取。Kunavo token 费率读取自实时目录。本页面未对任何客户端与 Kunavo 端点进行运行时测试,也未作出任何基准或性能声明。