人往往会因为缺乏足够的认知而产生恐惧,实际上稍微从基础层面做一点了解就会发现,这东西并没有那么复杂。
opencode 这东西出来有一阵了,它是个开源的命令行 AI 编程 Agent。说是"命令行"其实不太准确,因为它不止一种用法。官方文档里列了好几种接口:TUI、CLI、Web、IDE,还有一种叫 Go 的订阅服务。新手第一次看容易懵——这么多选项,该用哪个?我之前在给大一新生的建议里说过,尽量用命令行。今天把为什么这件事讲一下。
opencode 的四种用法
opencode 本质上是一个后端服务加几种前端。后端都是同一个——读写文件、跑命令、调 LLM、管会话。区别在前端:你怎么跟这个后端交互。
GUI是图形界面,目前在beta版本,下载安装包,双击安装,基本上就是说的这种了。
TUI 是终端用户界面,opencode 不带任何参数运行时默认启动的就是这个。你在终端里打 opencode,弹出一个全屏的交互界面,底部有输入框,上面是 AI 的回复和它执行的命令、改的文件。这是 opencode 的"主战场",所有斜杠命令(/undo、/init、/share、/compact 这些)都在这里用。文件引用用 @,shell 命令用 ! 开头。这是最完整、最原生的用法。
而 CLI 下还可以命令行的非交互模式。opencode run "解释一下闭包" 一句话传进去,让直接给你答案,不进 TUI。
(dev) fred@MacBook GitHub % opencode run "解释一下闭包"
> build · glm-5.2
闭包是指**函数 + 其引用的外层变量**的组合体。当内部函数引用了外部函数的变量,且内部函数被返回到外部使用时,即使外部函数已执行结束,这些变量仍不会被回收,从而被"封闭"保留下来。
def make_counter():
count = 0 # 外层变量
def inner():
nonlocal count
count += 1
return count # 引用了外层变量
return inner # 返回内部函数
c = make_counter()
c() # 1
c() # 2 —— count 被闭包保留,未随 make_counter 结束而销毁
**本质**:函数对象携带了它定义时所在作用域的变量绑定(在 Python 中存在 `__closure__` 里)。
**典型用途**:状态保持、装饰器、回调、工厂函数、数据私有化(外部无法直接访问 `count`,只能通过 `inner` 操作)。
适合脚本里调用、自动化任务、或者你只想快速问个问题不想开整个界面。opencode run 支持 --model 指定模型、--agent 指定代理、--file 附加文件、--format json 输出原始 JSON 事件。它还能 --attach 连到一个正在跑的 opencode serve 后端,省掉每次冷启动的时间。这个用法不是给你日常聊天用的,是给你写自动化脚本用的。
Web 是浏览器界面。opencode web 启动一个本地服务器,自动打开浏览器,你在一个网页里跟 opencode 对话。跟 TUI 功能一样,但界面是网页不是终端。支持 mDNS 发现(局域网自动找到你的服务)、CORS 配置、基本认证密码保护。这个用法的好处是你在没有终端的环境也能用——比如你在平板上、在别人的电脑上、或者你就是不喜欢终端。你还能在另一个终端里 opencode attach 连到同一个 Web 后端,Web 和终端同时用,共享会话和状态。官方文档里提到 Windows 用户推荐从 WSL 运行 opencode web,但我之前说过,能用原生 PowerShell 就别绕 WSL,那个长路径和 RAM 限制的坑够你喝一壶的。
IDE 是编辑器集成。opencode 能跟 VS Code、Cursor、Windsurf、VSCodium 这些编辑器集成。你在编辑器的集成终端里运行 opencode,扩展自动安装。然后你用 Cmd+Esc(Mac)或 Ctrl+Esc(Windows/Linux)在分屏终端视图里打开 opencode,Cmd+Shift+Esc 新建会话。它还能自动把当前选中内容或标签页共享给 opencode,用 Cmd+Option+K 插入文件引用比如 @File#L37-42。这个用法的好处是你写代码时不用切窗口,编辑器和 AI 在一起。如果你平时就用 VS Code 写代码,这个用法最顺手。
四种用法该用哪个
这四种不是互斥的,是同一个后端的四种前端。你可以今天用 TUI 干活,明天在平板上用 Web 看进度,IDE 里写代码时用编辑器集成,或者就是喜欢 GUI 操作友好,都可以。会话是共享的,状态是共享的。
但如果你问"刚开始用哪个",我的建议很明确:用 TUI,也就是终端命令行界面。
这不是因为 TUI 功能最全——虽然它确实是。也不是因为 TUI 最快——虽然它确实快。是因为 TUI 在终端里,终端是程序员真正的工作环境,而用终端这件事本身,对大一新生来说,是一次重要的心理突破。
为什么我推荐命令行
我之前给大一新生的建议里说过,尽量用命令行,这其实不仅仅是针对 open code 这一个工具,也是针对其他的诸如 winget、pypi、conda、apt 等等。
大学和高中不一样。高中时候,老师和课程能发挥的作用是覆盖性的——你学什么、怎么学、学到什么程度,基本都有人替你安排好。大学不是。大学开始,最重要的是自主地探索和学习,老师和课程能发挥的作用其实远没有高中时候覆盖的那么多了。没人追着你学,没人替你规划好每一步。你要自己找方向、自己找工具、自己解决问题。
要探索,首先要克服恐惧。怕未知,怕陌生,怕搞砸,这些恐惧会把人困在舒适区里出不来。舒适区里的东西你已经会了,再待一万年也不会多。成长只发生在舒适区外面。
命令行对大多数刚上大学的人来说,就是那个"舒适区外面"。你看同学都在用图形界面,点点鼠标拖拖窗口,看着亲切。打开一个黑乎乎的终端,光标一闪一闪等着你输入,心里发虚——这玩意儿我万一敲错了会不会把电脑搞坏?这种恐惧是真实的,但它挡住的不是"危险",挡住的是一整片你可能很擅长的领域。
直面看上去最有挑战的东西,是很好的选择。不是因为命令行天生比图形界面好——虽然对很多编程任务它确实更高效——而是因为"敢于用命令行"这件事本身,是你从"被动接受"转向"主动探索"的第一步。你敢打开终端了,你就敢读文档了。你敢读文档了,你就敢用陌生工具了。你敢用陌生工具了,你就能解决的问题就多了一大片。
opencode 的 TUI 是个特别好的练手对象。它虽然是在终端里,但交互方式很简单——底部输入框打字,上面看回复,斜杠命令触发操作。你不用记一百个命令,记住几个常用的就行:/init 初始化项目,/undo 回滚改动,/share 分享会话,/help 看帮助。文件引用用 @,跑命令用 ! 开头。就这些。剩下的你在用的时候自然会摸到。
而 opencode 本身又是个 AI 助手,你不会的可以问它。你不知道 pathlib 怎么用,问它。你不知道正则怎么写,问它。你不知道这个报错什么意思,贴给它。它在终端里帮你跑命令、改文件、看结果。你用命令行的恐惧和"我记不住命令"的焦虑,被 AI 助手大大缓解了——你不用记住所有命令,你只要会问。
这就形成了一个正向循环:你用 TUI 越多,你对终端越熟悉。你对终端越熟悉,你越不怕命令行。你越不怕命令行,你探索的工具越多。你探索的工具越多,你能解决的问题越多。你能解决的问题越多,你的自学能力越强。大学四年下来,差距就拉开了。
如果你一开始就用 GUI 界面、 Web 界面或者 IDE 集成,你确实也能用 opencode,也能享受 AI 编程的便利。但你躲过了那个"直面终端"的心理关口。你还是在舒适区里。舒适区里当然也能干活,但你错过了一次成长的机会。
我不是说 GUI、Web 和 IDE 不好。GUI 最简单友善,Web 适合你在平板上、在不方便开终端的环境里用。IDE 集成适合你写代码时不想切窗口的场景。这些都有用。但作为大一新生第一次接触 AI 编程工具,我建议你先在终端里用 TUI,用熟了再考虑别的。先过心理这一关。
剩下的,你在用的时候自然会摸到。不要怕未知,不要沉迷于舒适区。大学四年,趁早开始探索。
参考文献
opencode 文档:https://opencode.ai/docs/zh-cn/
CycleUser