SST 团队开源的终端 AI 编程 Agent,模型无关、支持自部署,实测在 TypeScript monorepo 和 Python 服务中完成跨文件重构和测试生成。
终端正悄然成为 AI 编程代理的默认归宿。OpenCode 由 SST 团队打造,是该领域体验最成熟的选手之一。与 Cursor 或 Windsurf 不同,它不要求你离开自己的编辑器。它作为 CLI 进程运行在你的项目目录中,读取文件、写入变更、执行 shell 命令,而你只需继续使用自己惯用的编辑器编码。
我们在 TypeScript monorepo 和 Python 服务上连续两周将 OpenCode 作为主力代理,以验证这种终端优先的方式究竟是实用的默认选择,还是仅为极客用户的好奇心之作。
OpenCode 遵循与 Claude Code 和 Codex CLI 相同的代理循环:用自然语言描述目标后,代理规划一系列文件读取和 shell 命令的执行序列,向你展示计划并在批准后运行。关键差异在于它的架构设计——OpenCode 是开源的、模型无关的,既能自托管也能对接本地模型运行。
在我们的测试中,该代理清晰地处理了三个工作流:
跨文件重构。 我们要求它重命名一个在十一个组件中使用的 React hook。OpenCode 定位了所有调用点、更新了导入,并运行组件测试验证没有破坏任何东西。
测试生成。 对于测试覆盖不足的 Python 服务,它生成的 pytest 文件首次运行即编译通过。断言部分仍需人工审核,但脚手架节省了大约一小时的工作量。
依赖升级。 我们将一个停滞的 npm audit 报告丢给它。OpenCode 读取了 advisory、提升相关包的版本并运行测试套件,标记出了一个需要手动修复的破坏性变更。
OpenCode 表现最好的时候是你的项目已有快速、确定性测试的时候。代理依赖测试反馈来捕捉自己的错误。慢或flaky的测试套件会把整个循环变成漫长的等待。
Claude Code 是最直接的对比对象。两者都运行在终端、采用相同的基本循环、都能使用 Anthropic 模型。差异主要体现在控制权上。
Claude Code 是为 Anthropic 模型端到端优化的闭源二进制文件,开箱即用,但你无法查看系统提示词、无法更换规划器,也无法在不离工具的情况下路由到非 Anthropic 模型。OpenCode 则暴露了所有这些环节。你可以路由到 OpenAI、Google、DeepSeek 或本地 Ollama 模型,如果团队需要自定义行为还可以 fork 这个架构。
实际成本差异也值得关注。Claude Code 通过你的 Anthropic 账户计费,这很方便,直到 Anthropic 调整定价或遇到容量事件。OpenCode 将控制层与模型提供商分离,这样你可以将廉价任务迁移到更便宜的模型上而无需更换工具。
代价是打磨程度。Claude Code 的上下文管理和工具调用循环更加精细。在使用相同模型的并排测试中,Claude Code 通常需要更少的轮次即可完成一项任务。OpenCode 在我们为代码仓库调优了上下文文件模式后追了上来,但那个调优过程需要时间。
安装只需一条命令:一个 shell 脚本将 opencode 二进制文件放到你的路径上。配置才是花时间的地方。你需要为至少一个提供商设置 API key,还应该设置上下文文件模式,这样代理就不会浪费 token 读取生成的文件或构建产物。
我们最终建立了一个 .opencode/config.toml,排除了 node_modules、dist 和 *.min.js,同时包含了 src/**/*.ts、tests/**/*.ts 以及一个记录项目约定的 CONTEXT.md 文件。最后这一步很重要。没有它,OpenCode 会自行猜测导入别名、测试约定和格式化规则。有了它之后,第一次通过的质量明显提升。
日常使用的感觉就像与一个打字很快但需要监督的初级工程师进行结对编程。你描述任务、审查计划、在批准前阅读 diff。代理运行测试、报告失败并尝试修复。这个循环比 Cursor 的内联编辑慢,但比手工编写触及多个文件的相同代码要快。
不要在没有版本控制的仓库中运行 OpenCode。代理不会自动提交任何内容。每次变更都留在你的工作树中,一个糟糕的会话最简单恢复方式是 git checkout 或 git stash。
如果你已经生活在终端中、不想放弃自己的编辑器,并对运行哪些模型有主见,那么 OpenCode 适合你。对于有多提供商策略的团队或希望为敏感代码提供本地 LLM 选项的人来说,它特别合适。
如果追求最低摩擦的设置,或偏好编辑器内的内联 diff,请跳过它。Cursor 和 Windsurf 更适合那种工作流。OpenCode 并不试图取代它们——它试图为终端优先的开发者提供一个严肃的 Claude Code 替代方案。
Originally published at pickuma.com. Subscribe to the RSS or follow @pickuma.bsky.social for new reviews.