从 IDE 智能提示,到 Copilot 行内补全,到 Chat 式问答,再到今天的 Code Agent——AI 在工程师工作流里的位置越来越靠近"决策端",而不只是"执行端"。每一代的飞跃都不是"补全更准",而是 AI 主动承担的范围更大:从一个词、一行、一段,到整个任务。
走到第 4 阶段(Code Agent)之后,你的角色变了。
过去你是写代码的人,AI 是辅助工具;现在 AI 是干活的人,你是派活、定边界、审产出的"项目经理"。这不是修辞——它是工作方式的彻底重组。
很多人第一次启动 OpenCode 会愣一下:"咦?怎么是终端里的东西?我的 IDE 呢?"
这很正常。Code Agent 这一代工具刻意选择"住在终端",不绑定任何 IDE——因为它不是来"补全你的代码"的,它是来"替你完成任务"的。它需要直接调用 shell、跑命令、读写文件,终端是最自然的栖息地。
OpenCode 默认是 Build 模式——可以读写文件、运行命令,全套工具都开着。这是日常干活的模式。
按 Shift+Tab 可以在 Build 模式 和 Plan 模式之间切换——它只能读、不能写:可以分析代码、出方案、回答问题,但所有"改文件、跑命令"的工具都被禁用。
Plan 模式适用场景:
Shift+Tab 切到 Plan 模式。这是比"嘴上告诉 AI 不要写代码"更可靠的安全护栏——因为是在工具层禁止,不是模型自觉。
即便在 Build 模式下,它要写文件、跑命令之前默认也会停下来让你确认("这个文件要改成这样,OK 吗?")。这是新手的安全模式。
熟练之后可以切到 YOLO 模式(You Only Live Once),全自动批准。它的好处是任务长链路时不用你每一步都点 yes,效率高很多;代价是一旦它跑偏了,等你发现时损失可能已经发生。
什么时候开 YOLO:
OpenCode 的 YOLO 不是一个独立的开关,而是通过 permission 配置实现的。在 opencode.json(项目级放在仓库根目录、全局级放在 ~/.config/opencode/opencode.json)里设置:
{
"permission": "allow"
}
这一行就把所有工具默认改成"无需确认直接执行"。如果想细粒度控制——比如允许大部分但禁止某些高危操作——可以用对象形式:
{
"permission": {
"*": "allow",
"edit": "ask",
"bash": { "rm -rf *": "deny" }
}
}
三种状态:allow 直接跑、ask 弹确认、deny 拦死。配置生效后 TUI 会显示 △ YOLO mode 提示,给你一个视觉锚点知道现在没护栏了。
opencode.json,主仓里依然走默认确认模式。
/new。
AGENTS.md 是放在项目根目录的一份 Markdown 文档,OpenCode 启动时会自动读取,把里面的内容当成"项目背景"。可以理解为:给新来的实习生准备的入职手册。
它解决的问题:默认情况下 AI 进入你的项目相当于一个"什么都不知道、需要自己翻代码摸索的新人",写 AGENTS.md 等于告诉它"项目是干嘛的、技术栈、关键命令、不能碰的地方"——后续所有对话都站在这个基础上。
示例模板(只是为了让大家直观感受 AGENTS.md 大概长什么样,不是最佳实践,每个项目应该根据实际情况自由裁剪、增补):
# 项目概览
本项目是 XX 系统的 [前端/后端/算法] 模块,主要负责 ……
## 技术栈
- 语言:Java 17 / TypeScript 5.x / Python 3.11
- 框架:Spring Boot 3 / React 18 / FastAPI
- 构建:Maven / pnpm / poetry
- 测试:JUnit 5 / Vitest / pytest
## 关键目录
- `src/...` 业务代码
- `test/...` 测试代码
- `docs/` 设计文档
- `scripts/` 脚本
## 常用命令
- 跑测试:`mvn test`
- 启动本地服务:`npm run dev`
- 代码风格检查:`npm run lint`
## 编码规范
- 业务异常用 BusinessException,不直接抛 RuntimeException
- React 组件按 feature 组织,不按 type
- Python 算法模块要保留 `# pylint: disable=...` 的明确理由
## 注意事项(重要!)
- `legacy/` 目录正在迁移中,改之前先问我
- 数据库 schema 变更必须走 Flyway,不要直接改表
- 任何涉及 `payment` 包的改动都要加单元测试覆盖
很多人第一次用 OpenCode 就交一个功能开发任务,结果产出一团糟,从此放弃。这是最大的误用。
建议第一个任务:让它读你的项目,输出一份理解。先按 Shift+Tab 切到 Plan 模式(这一步它就动不了文件了,零风险),然后给它这样一道题:
读一下 src/order 这个模块,告诉我:
1. 它的对外接口是什么?入口在哪几个文件?
2. 主要依赖了哪些其他模块?
3. 哪些部分看起来有技术债 / 你觉得可读性差?
不要修改任何文件,只输出报告。
为什么从这种任务开始:
跑完这一题后,你大概会有 3 个意外发现:
练完"读",再上"写"。第一次写代码的任务,建议挑这种:
派活时,这几件事说清楚能少很多返工:
跑完之后也别忘了检查:
上手之后,最常做的其实就这几件事:先让 AI 出 plan、把上下文给足、用测试把关。这一章拆开讲讲具体怎么做。
直接对 AI 说"加一个用户登录功能",等同于第一天上班的实习生什么都不问就上手改项目。永远先让它出方案,方案对了再让它写代码——多花 5 分钟讨论 plan,能省下更多的时间去回退。
第一段:让它出方案,不让它写代码
任务:给 /api/order/create 加幂等保护。
现在不要写代码。先输出一份实施方案:
1. 你对需求的理解(用一句话复述)
2. 准备做的具体步骤(编号列)
3. 涉及哪些文件 / 模块
4. 你看到的风险点 / 不确定的地方
第二段:你审过 plan,确认/调整后再放它去做
方案 OK,按这个执行。
模型再强,它没看到的东西它就是瞎编。"它应该能自己找到吧" 这种期待,是把任务搞砸的最常见原因。Prompt 写得多漂亮,都不如把正确的资料喂到它面前。
✗ 模糊:
给工单模块加个新接口
✓ 明确:
先读这 3 个文件再开始:
·src/main/java/com/x/order/OrderController.java
·src/main/java/com/x/order/OrderService.java
·docs/order-domain.md
读完告诉我你对现有架构的理解,我确认后再继续。
它不知道你昨天会上跟架构师吵了什么——把结论输出成文件,作为项目的一部分保存下来:
约束:
· 必须用 PostgreSQL,不要用 MySQL 语法
· 异常体系:业务异常用 BusinessException,不直接抛 RuntimeException
· 日志用 SLF4J,不用 System.out
· 前端组件用 shadcn/ui,不要引入新的 UI 库
不要碰:
·legacy/目录正在迁移
·payment/包的改动需要单独评审,本次不碰
· 不要修改任何*.proto文件
@文件路径 引用文件"麻烦改一下登录"——AI 改了 → "你这改得不对" → AI 又改 → "还是不对" → 你来回 10 轮疲惫不堪。
根因:你的验收标准在你脑子里,AI 看不见。
解药:所有任务的验收标准,能写成测试就写成测试。机器验收 0 歧义。
任务:实现 calculateDiscount(orderAmount, vipLevel) 函数。
执行顺序:
1. 先在 calculate_discount.test.ts 写测试用例(覆盖 vipLevel 0-3 + orderAmount 边界)
2. 让我审过测试 OK 后,再去实现
3. 实现完跑测试直到全绿
任务:修复 xxx,状态机在并发下错乱的 bug。
约束:
- 不要修改任何测试代码
- 跑完后必须 mvn test -Dtest=OrderStateMachineTest 全绿
- 修复方案在动手前先 plan 给我看
项目目前测试覆盖很差。这次任务:xxx
请你先写一个 acceptance test 作为这次改动的"验收闸门",
能跑通才算成功。
3.2 讲的是喂进去的上下文要信噪比高。这一节是另一面:AI 自己跑命令拿到的输出,往往噪音比信号多。
一条 git status 在中型项目里能吐 200 多行;npm install 一跑刷屏几千行进度条;docker ps 表头边框占了一半宽度——这些对 AI 几乎没有信息量的字符,全都按 token 计费、还挤占有限的上下文窗口。窗口被噪音填满,真正重要的代码片段、文档、约束就被挤出去了,模型的判断质量直接下滑。
解药:在命令的输出回到 AI 之前,先压一道。这就是 RTK(Rust Token Killer)做的事——一个 Rust 写的 CLI 代理,拦截 git / cargo / docker / npm / pytest / aws 等 100+ 常用命令,用过滤、聚合、截断、去重四种策略把输出压到原来的 10%–40%,典型场景下省 60%–90% 的 token。
装好后会注入一个 OpenCode 的 hook,把 AI 跑的命令透明地改写一遍:
AI 想跑: git status
hook 改写: rtk git status ← 你和 AI 看到的还是 git 的输出,但被 RTK 过滤过
开销: < 10ms
人手动跑命令时也一样——rtk gain 能告诉你截至目前帮你省了多少 token。
三步搞定,全程不需要管理员权限。
① 下载并解压
下载 rtk-x86_64-pc-windows-msvc.zip(3.7 MB),解压到 %LOCALAPPDATA%\rtk(或任何你喜欢的目录)。
② 配置环境变量(PowerShell 一次性跑完)
# 把 rtk.exe 所在目录加到用户 PATH
[Environment]::SetEnvironmentVariable(
"Path",
"$env:Path;$env:LOCALAPPDATA\rtk",
"User")
# 关掉遥测(内网建议)
[Environment]::SetEnvironmentVariable(
"RTK_TELEMETRY_DISABLED", "1", "User")
③ 给 OpenCode 装 hook
重开一个 PowerShell(让新 PATH 生效),然后跑:
rtk --version # 应输出 rtk 0.38.0
rtk init -g --opencode # 给 OpenCode 装全局 hook
完事。下次在 OpenCode 里跑命令,输出会自动经 RTK 过滤。rtk gain 看节省统计——下面这张就是用一段时间后的真实数据。
rtk lint eslint 单条命令省到 99% 是常态——尾部噪音越多的命令,RTK 收益越夸张前面说的那些技巧,说到底都靠你每次都想起来——想起来让 AI 先 plan、想起来喂上下文、想起来写验收标准。Skill 就是把这些容易忘的事打包好,让 AI 自己触发,不用你再操心。
前一章我们讲了"日常的几个小技巧"(Plan / Context / 测试)。你可能已经发现一个问题:这些技巧每次都要你手动执行——每次都要记得让 AI 出 plan、每次都要喂资料、每次都要明确验收标准。
Skill 就是把这些"该做但容易忘的动作"打包成一个可复用、可自动触发的能力包。
可以理解为 Skill 是给 AI 装的专项技能。例如:
tdd skill:自动让 AI 走"先写测试 → 让我审 → 再写实现"的流程code-review skill:自动让 AI 用一份固定的 checklist 来 review diffresume-design skill:自动让 AI 用统一的版式生成简历Skill 的本质是一份带触发条件的指令包:当用户的请求匹配某种意图("帮我写简历"),AI 自动应用这个 skill 里写好的工作流。它跟你直接在每次 prompt 里手写规则的区别是——它一次配置、永久受益。
OpenCode 的 skill 体系比 Claude Code 的 plugin 简单——本质就是一些带 YAML frontmatter 的 markdown 文件,放到约定的目录里就生效。
| 路径 | 作用域 |
|---|---|
~/.config/opencode/skills/ | 全局——你所有项目都能用 |
<项目根>/.opencode/skills/ | 项目级——只对当前项目生效,可以提交到 git 让团队共享 |
方式 1——直接放 markdown 文件:拿到 skill 的 .md 文件(开源仓库基本都是这种格式),扔到上面任一目录即可。
# 全局装一个 skill
mkdir -p ~/.config/opencode/skills
cp path/to/some-skill.md ~/.config/opencode/skills/
方式 2——通过 skills.sh 安装:Vercel 维护的 skill 注册中心,相当于 skill 界的 npm。在网站上能浏览、搜索社区 skill,按"全部 / 24h 热门 / 总热门"排序看安装量榜单,点进去能看到每个 skill 的详情和安装命令——找到想要的,复制一行就装:
npx skills add <owner/repo>
它支持 20+ 种 agent 工具(Claude Code、Cursor、Cline、Copilot…… 不只是 OpenCode)
/new 开新一段,输一句应该触发该 skill 的话——观察它是否按 skill 里写的工作流响应。如果没触发,最常见的原因是 frontmatter 的 description 写得太模糊,模型没匹配到意图。
它不是零散 skill 的拼盘,而是一套把软件工程最佳实践编码进 AI 工作流的系统。从需求澄清、架构设计、TDD 开发、代码审查到分支收尾,每个环节都有对应的 skill 把关。
| 阶段 | Skill | 作用 |
|---|---|---|
| 1 | brainstorming | 写代码前通过苏格拉底式提问帮你梳理真正需求 |
| 2 | using-git-worktrees | 在新分支创建隔离工作空间,避免污染主代码 |
| 3 | writing-plans | 把大任务拆成 2-5 分钟能完成的小步骤,含具体文件路径和验证标准 |
| 4 | subagent-driven-development | 为每个小任务派发子代理,分工完成并互相审查 |
| 5 | test-driven-development | 强制红-绿-重构循环:先写失败测试 → 写最小代码 → 看测试通过 |
| 6 | requesting-code-review | 对照计划审查产出,关键问题阻止继续 |
| 7 | finishing-a-development-branch | 验证测试、提供合并/PR/丢弃选项、清理工作树 |
编辑 opencode.json(项目级放仓库根目录,全局级放 ~/.config/opencode/opencode.json),把 superpowers 加进 plugin 数组:
{
"plugin": ["superpowers@git+https://github.com/obra/superpowers.git"]
}
重启 OpenCode,插件管理器会自动拉取并安装。完了之后随便起一段对话问它"tell me about your superpowers",能正常回答就装好了。
superpowers 的命中频率很高,但它本身非常耗时——brainstorming、plan、TDD 循环、代码审查一套下来,即使是个小改动走这一套流程下来也要很久。建议装完后把触发方式改成手动,只在真正需要完整工程流程时再启用,至于怎么改,直接交给 OpenCode 就好:
你 review 一份代码、调试一个 bug、写一份 README——这些事老程序员有套路,新人或 AI 没有。Waza 把这些套路打包:
| Skill | 触发场景 | 它会做什么 |
|---|---|---|
/think | 复杂判断时 | 强制 AI 先列假设、列证据、列反对意见再出结论 |
/design | 写新功能前 | 走"目标 → 约束 → 方案 → 取舍"的设计走查 |
/check | 改完代码后 | 用 checklist 自审(边界、错误处理、命名…) |
/hunt | 查 bug 时 | 二分定位 + 写最小复现 |
/write | 写文档/注释时 | 走严格的"读者画像 → 信息密度 → 删冗余" |
/read | 读不熟的代码时 | 按"入口 → 数据流 → 边界" 的读法 |
/learn | 接触新技术时 | 强制走"5 个小实验 → 一份总结" |
/health | 项目健康度自检 | 跑出可读性/复杂度/重复度报告 |
/design skill 触发时的走查流程
/write skill 调用过程
/write skill 输出的成品亮点:每个 skill 只做一件事、触发条件明确,名字短好记。设计哲学是"克制"——给目标和约束,剩下交给 AI。
# OpenCode(全局安装到 ~/.config/opencode/skills/)
npx skills add tw93/Waza -a -g -y
让 AI 写文档/做 PPT 时,输出经常长得像后台 dashboard——版式杂乱、字号乱跳、配色刺眼。Kami 是一套版式约束系统,给 AI 一份"印刷品级别"的设计准则。
它能做什么:用统一的版式输出 6 类文档(一页纸 / 长文档 / 信件 / 作品集 / 简历 / 幻灯片),有专门的中英双语模板。统一墨蓝主色、衬线层级、留白节奏。
典型场景:你说"帮我写一份简历"或"输出一页纸的项目总结"——Kami 自动触发,不需要你说"用 Kami"。
# OpenCode(全局安装)
npx skills add tw93/Kami -a -g -y
项目大了之后,让 AI "读一下 auth 模块"等于让它在几百个文件里 grep 关键词——找得到片段,抓不住关联。模块间的隐性依赖、跨层调用、设计 rationale 散落在注释和文档里,AI 很容易漏掉。
Graphify 把代码、文档、SQL schema、基础设施配置转成一张可查询的知识图谱,让 AI 用"图谱导航"代替"文件搜索"。
/graphify . 扫描项目,生成可交互的 HTML 图谱 + Markdown 报告 + JSON 数据# WHY:、# HACK:、docstring 等注释抽成独立节点,不再埋没在代码里/graphify query "auth flow 是怎么走到数据库的?"
# 安装 CLI
pip install graphifyy && graphify install --platform opencode
# 使用:在项目根目录执行
/graphify .
graphify-out/ 目录提交到 git,团队共享同一份图谱。配合 graphify hook install 在每次 commit 后自动增量更新,新人打开项目就能问 AI"这个接口影响了哪些模块"。
知道有 superpowers/Waza/Kami 之后,你迟早会想"我能不能给我们项目写一个内部 skill"。
一个最小 skill 长这样(只是一份带元数据的 Markdown):
---
name: backend-pr-checklist
description: 提交后端 PR 前的自检 checklist。当用户说"准备提 PR"或类似意图时触发。
---
# Backend PR Checklist
按以下顺序自检:
1. 单测是否覆盖关键路径?
2. 异常体系是否符合规范(BusinessException)?
3. 数据库变更是否走 Flyway?
4. 是否有 TODO 残留?
5. ……
把这种 markdown 文件放到 skill 目录(OpenCode 是 .opencode/skills/ 或 ~/.config/opencode/skills/,参考 4.2 节),就能像内置 skill 一样被触发。
挑了一组对建立"派 AI"工作直觉最有效的入门资料。Code Agent 生态变化很快,常翻常新。
照着走一遍,你就完整跑过一遍 Code Agent 的工作流——从装好工具,到完成一次"读项目 + 改 bug"的完整循环。
/init,生成 AGENTS.md 草稿/new 开新一段几个最常用的命令和快捷键,具体以 /help 为准。
| 操作 | 作用 |
|---|---|
/init | 让 OpenCode 扫一遍项目,自动生成一份 AGENTS.md 草稿 |
/new | 清空当前对话上下文,开新一段——任务结束就清,避免污染 |
/compact | 压缩当前会话历史——上下文窗口快满时自动总结,保留关键信息继续对话 |
/sessions | 列出 / 切换历史会话,能看到每段对话当时干了什么、改了什么 |
/undo | 撤销 AI 上一步对文件的改动——发现它把代码改坏了,第一反应是 /undo,比手动 git 还方便 |
/redo | 恢复上一步被撤销的改动——/undo 手滑了可以救回来 |
/exit | 退出 |
@文件路径 | 在 prompt 里直接引用文件——输 @ 会自动补全文件名,比让它自己去找快得多 |
Shift + Tab | 在 Build 模式 ⇄ Plan 模式 之间切换 |
Esc | 中断当前任务——看到它跑偏了立刻按,别犹豫 |