opencode 的四种用法与为什么我推荐命令行

人往往会因为缺乏足够的认知而产生恐惧,实际上稍微从基础层面做一点了解就会发现,这东西并没有那么复杂。

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/

Category
Tagcloud
Translate Ollama LlamaFactory Data Science Photography GIS Nonlinear Filtering Photo Tool ML Bayesian LLM Education School Network Tools Lens Poem CLI Book OpenWebUI ChromeBook GameTheory Rotation Linux PVE Game University QGIS Parenting opencode Mac Ubuntu Pyenv VibeCoding Kivy OSX-KVM CUDA Attitude Windows Python Scholar Junck Turing Data Memory Imbalance Qwen3 Architecture FckZhiHu Earth Science Math Web Communicate Computability Science Hackintosh Life VirtualMachine Hadoop RTL-SDR Learn Code Generation GPT-OSS Brent History IDE Cognition Algorithm Optimization PHD Thinking TUI Camera GlumPy Golden Section Discuss Microscope OPC Coding Traffic Psychology Geology Fibonacci Visualization Hack Code IMU AI C Story Mathematical Modeling Job Search Hardware Filtering Signal Processing Radio Learning Programming
Apps