“工欲善其事,必先利其器”

OpenCode vs Claude Code 的优势


无闪烁模式(no-flash mode)

传统模式下,每次增加对话 Claude Code 会全量刷新整个历史记录,导致终端一直闪烁。这是因为 Claude 内部实现效率较低,每次全部拉取会导致刷新速度跟不上终端刷新速度。

启用方式

.claude 目录的 settings 文件中添加一行:

NO_FLASH=1
特性 说明
内置虚拟滚轮 Claude Code 自己实现了类似 Vim 的屏幕滚动功能,不再依赖终端原生滚动
滚动控制 支持鼠标滚轮、Page Up/Page Down,滚动速度可独立调节
简化的运行概要 显示"编辑了X个文件,增加了X行,删除了X行",点击可展开详情
鼠标点击支持 点击可回到当前轮对话位置,底部有快捷按钮回到最底部
内容预览 可以看到每轮对话的问题和结果,不会被中间的编辑详情淹没

关闭无闪烁模式

如果想恢复到传统终端滚动模式,可以运行:

tui default     # 恢复传统模式
tui screen      # 切换到最新模式

控制台输出模式

Ctrl+O 的三层展开

新版无闪烁模式下,Ctrl+O 需要按三次才能看到完整内容:

按压次数 显示效果
第1次 展开第一层:显示简化的运行概要
第2次 展开第二层:显示完整的工具调用和输出
第3次 完全收起:回到最精简的显示模式

Focus 模式(新版本更新)

最新版本简化了 Ctrl+O 的逻辑:

  • Ctrl+O 按一次直接进入详细模式
  • 再按一次直接退出
  • 想找中间的"一层展开"效果?输入 focus 命令来开关:
    • 输入 focus → 关闭 focus 模式,中间层就出现了
    • 再输入 focus → 重新开启 focus 模式

Ctrl+O 内的 Vim 操作

Ctrl+O 展开的界面中按 V 键,可以打开整个对话记录:

  • 方便复制特定段落
  • 支持 Vim 快捷键(HJKL 移动、DW 删除等)
  • 可以快速搜索和定位

终端原生滚动切换

Ctrl+O 模式下,按左方括号 [ 可以切换到终端原生滚动(如果你的终端滚动功能更好)。 Kitty 的滚动比较一般,按住 Shift 滚动手感不佳,所以使用 Claude 内置滚动。


输入与交互技巧

Ctrl+S 暂存输入

当你在输入一段复杂指令时突然需要先做别的事情(比如切换模型、提交任务、调用技能):

  1. Ctrl+S → 当前输入被推到上面
  2. 执行临时任务
  3. 执行完毕后,下面可以继续之前的输入

BTW 一次性提问

在 Claude 思考工作时可以直接提问,不打断当前状态:

  • 问题不会进入上下文,不会浪费注意力
  • 用完自动 rewind,相当于一次性的临时问题
  • 适合问一些不相关的辅助问题

使用场景:比如 Claude 在工作时你突然想问"这个图片是关于什么的",直接 BTW 问,不用担心影响主流程。

自然语言执行命令

不需要记住复杂命令格式,直接说自然语言让 Claude 转换:

# 比如要删除 MCP
> 我想把 xxx MCP 删掉
→ Claude 会自动生成对应命令并执行

Ctrl+V 粘贴图像

可以直接粘贴截图让 Claude 分析:

# 粘贴 UI 截图后说
> 模仿这个 UI
→ Claude 会识别截图并尝试复现

直接复制 Claude Code 官网的截图,让 Claude 做出暗黑版 UI,Claude 甚至会自动识别用户使用的终端主题色


文件操作与编辑

Ctrl+G 用编辑器编辑提示词

当提示词很长时,可以调用编辑器来编辑:

# 需要先设置环境变量
export EDITOR=nvim    # 用 Neovim 编辑
export EDITOR=code    # 用 VS Code 编辑

然后按 Ctrl+G 打开编辑器,编辑完成后退出,内容会自动填充到提示词。

撤销操作

  • rewind → 只回退对话,代码修改保留
  • rewind --restore → 回退对话的同时撤销代码修改

命令执行与调试

感叹号直接运行 bash 命令

在对话中直接运行命令,输出结果会自动作为上下文:

# 直接在输入前加 !
! ls

错误就地修复

如果命令执行报错,直接说 fix

  • Claude 能看到之前的错误输出,不需要手动粘贴
  • 可以就地帮你修复问题
# 故意引入错误后
> fix
→ Claude 看到报错信息,直接修复

离线运行与自动化

离线命令执行(-p 参数)

不需要进入交互界面,直接执行命令:

# 直接 commit
claude -p commit

# 可以让 Claude 在后台运行任务
claude -p "make commit"

创建定时任务(log 技能)

可以设置周期性任务,比如每 5 分钟检查系统状态:

# 告诉 Claude
> 每隔 5 分钟汇报一次 CPU 用量和内存使用情况

# Claude 会创建 cron 任务
# 配合 tmux 使用效果更好,关闭终端任务会终止

延时执行(schedule 技能)

设置在某个时间执行任务:

# 现在是 15:42,告诉他
> 16 点的时候帮我运行那个哔哩哔哩弹幕机

→ Claude 会找到对应的项目,16:00 时自动执行

取消定时任务

> cancel the scheduled task

技能(Skill)系统

为什么用 Skill 而不用 MCP

对比 MCP Skill
上下文占用 几千 token 几十 token
调用方式 始终加载 按需调用
推荐 未来属于 Skill -

创建 Skill

让 Claude 根据当前对话自动生成:

# 对话中完成一个任务后说
> 把这个转化为技能

→ Claude 会:
1. 询问技能名称
2. 询问目标描述
3. 询问成功条件
4. 询问触发条件(比如用户说什么时触发)
5. 设置参数(如果有)
6. 选择安装位置(全局/当前仓库)

Skill 的触发机制

Skill 通过 description 字段描述触发条件:

description: this skill is used when user says "scrape the web" 
              or semantically similar phrases

当用户提到相关关键词时,Claude 会自动想起并调用对应 Skill。

Skill 加载机制

  • Skill 可以包含子文件夹,通过相对路径引用
  • 可以引用 MCP 设置
  • 实现按需加载:只读取当前对话需要的子文档
  • Skill 的 .md 文件内容会通过 skill 工具加载进上下文

Skill 与 Hook 的配合

有些 Skill 触发条件很模糊(比如"建造 3D 模型时"),不适合用 Hook 硬匹配,适合用语义识别

但有些场景模式很明确(比如启动后台任务),用 Hook 可以在特定行为发生时强制注入提示:

# 启动后台任务后,Hook 自动插入缓存技能提示
→ Claude 即使忘记也会被提示想起来

工作区与分支管理

Work Tree 功能

不污染主仓库,在独立工作区工作:

# 启动时指定工作区
claude -w test

# 或者在对话中说
> I want to work on a new feature
→ Claude 会在 .claude/worktrees/test 创建副本

# 完成工作后
> merge back to main
→ 自动合并到主目录

实际工作流

  1. 在主目录启动 Claude
  2. 让它去 worktree 开发新功能
  3. 主仓库代码不受影响
  4. 功能完成后让它 merge back
  5. 如果想保留独立分支,claude -w branchname

模型选择与配置

模型 特点
Opus 上下文召回能力强,200K 版本和普通版本同价,不会遗忘早期设定
Sonnet 动不动就压缩上下文,信息容易丢失
Gemini 上下文太长时会降智,指令太多会健忘

强烈建议使用 Opus:很久以前设定的规则,Opus 还能记得并主动询问确认。Sonnet 做着做着可能就忘了之前说好的设定。

必开配置

# 思考深度
affort: hi 或 max
# 关闭动态思考:每个问题都让他思考,不要让他偷懒

# 每次都使用全量思考,虽然会慢一点贵一点
# 但 Max 用不完的(UP 主是 20 倍 Max)
# 如果是 5 倍,直接全用 Sonnet 也很难用完

Permission 设置

建议 bypass_permission: true,Claude 执行命令时不询问,除非涉及配置修改。用户可以看着命令执行,确保安全。


Hook系统

settings 里配置脚本,当 Claude 执行命令时触发:

  • 可以在命令执行前注入提示
  • 可以纠正错误用法
  • 完全自动化,不需要用户干预

示例:强制使用 UV 而非 pip

// 在 settings 中配置一个 5 秒延迟的 hook
// 当检测到 Claude 试图调用 pip 命令时触发

// 检测逻辑包括:
// - 纯 pip 命令
// - 管道中的 pip
// - pip3
// - 各种变体

效果

# 你让 Claude 演示用 pip 安装
> demonstrate using pip install xxx

→ Hook 检测到 pip,插入纠正指令
→ Claude 改用 UV 或按需使用 pip(带跳过注释)

Hook 适用场景

  • 硬匹配:模式明确,比如检测特定命令的执行
  • 强制提醒:防止 Claude 在特定情况下忘记规则

与 Rule 的区别

方法 场景 效果
规则(Rule) 智商高的模型(Opus 4.7+)能记住 写在 .md 里,用自然语言描述
Hook 低智商模型(Gemini 等)容易健忘 程序化检测,发现问题立即纠正

Gemini 评价很低,认为它太蠢,规则写太多会降智,用 Hook 机械化检测更好


代码审查技能

AI Slope Review 技能

检测常见的 AI 生成代码问题:

1. 风格不一致
  • 代码换行规范不统一
  • 与周围上下文风格不符
2. 防御性编程过度
  • 用 catch-all 异常捕获掩盖问题
  • 降低调试效率,影响可维护性
3. 类型转换滥用
  • 明明已经是相同类型还要转来转去
4. 不解决根本问题
  • 上游出问题,中游和下游不断打补丁
  • 应该直接解决源头
5. 死代码
  • 复制一份代码改一点,原来的不删除
  • 没有任何地方调用
6. 硬编码数字
  • 每步硬编码序号,未来加任务会冲突
7. 文档换行问题
  • 前面都换行,突然一段拉满
8. 命名规范
  • 检查 .cc 是否是 C++ 后缀

配置示例

# 让 Claude 编辑后必须重读
# Hook 配置:在编辑/写入文件后触发

# 检查周围 30 行是否正确
# 如果正确不汇报,如果有问题汇报并修复
# 同时引用 cloud.md 的规范

缓存优化策略

Anthropic 缓存机制

访问模式 价格 说明
首次访问(冷启动) 1.25x Token 转换向量化成本
缓存命中(5分钟内) 0.1x 只有读取成本
5 分钟后再次访问 1.25x 缓存失效

自动刷新策略

为了保持缓存命中,设置每 5 分钟刷新一次:

# 通过 hook 确保 Claude 在有后台任务时自动刷新缓存

计算:50 分钟内刷新 10 次共花费 1.0x,优于一次性 1.25x。


一键安装配置

配置包

git clone <仓库地址>
# 会覆盖你的 .claude 配置
# 对话记录在 .git 目录不会被覆盖
# 自己的 skill 会排除掉

⚠️ 警告:会覆盖现有配置,建议先备份。

主要配置内容

  • 默认 Python 开发环境配置
  • 预设的 Hook 和 Skill
  • 自定义主题色
  • 缓存策略优化

附录

内容 说明
Claude 官网也是 Claude 做的 让 Claude 模仿官网 UI
高天也提到过类似问题 关于上下文压缩导致信息丢失
  1. 新开对话,频繁换话题时开新对话,模型更容易专注
  2. 重要结论沉淀,写到 .md 文件里,不要只存在对话上下文
  3. 合理使用 Hook,对低智商模型用 Hook 强制纠正,对高智商模型用 Rule
  4. Opus + Max不要心疼,用 Max 可以当"写轮眼"用
  5. Skill 替代 MCP,按需加载,节省上下文
  6. Work Tree:多任务并行时隔离环境
  7. 定期备份配置:一键安装会覆盖

前文: 黑神话悟空专栏

Hook

一、为什么 CLAUDE.md 规则不靠谱?

模型同时能可靠遵循的指令数量有限(大约 100 条)。当执行复杂任务时,代码本身可能占据 80 条指令的"脑容量",只剩 20 条给全局规则,导致选择性遗忘

1.2 上下文的局域性效应

  • 越早出现的指令越容易被遗忘
  • 当讨论当前话题时,距离较远的信息会被模型视为"垃圾信息"自动忽略
  • 上下文结构:
系统提示 → 系统工具 → CLAUDE.md规则文件 → 技能文件(几KB) → 当前对话
     ↑                                                    ↑
  最容易被遗忘                                    最新的位置,模型记得最清楚
  • 即使没有触发任何命令,规则文件也会占用上下文 token
  • 规则过多会导致"左右脑互搏"(互相冲突的指令),使模型智商下降

二、Hook 的原理

Hook 是 Claude Code 的注入机制,在特定时机将自定义消息插入到模型的最新上下文中:

触发时机 → [Hook消息注入点] → 模型响应

为什么 Hook 比规则文件更可靠?

  1. 注入位置最新:直接插入到当前对话的最末尾
  2. 按需加载:只在使用时才加载,不浪费 token
  3. 实时阻断:在命令执行前/后立即触发

三、Hook 的四种类型

3.1 PreToolUse(工具调用前)

劫持 browsereadwriteedit 等工具调用,发生在命令执行之前。

拦截型示例
# ~/.claude/commands/block-dev-null hook
---
description: "拦截 2>/dev/null 和 2>&1 的错误屏蔽行为"
hooks:
  - name: block-dev-null
    when: "preToolUse"
    tools: ["Bash"]
    prompt: |
      你刚刚试图执行以下命令:

      {{command}}

      这条命令使用了 2>/dev/null 或 2>&1 来屏蔽错误输出。这是不良实践,会隐藏重要的诊断信息。

      请重新构造一个不带错误屏蔽的命令。如果确实需要绕过错误,请添加注释 `# bypass`。
绕过机制(bypass)
# bypass 允许用户主动选择忽略警告
# 在命令后添加 # bypass 即可通过
curl https://example.com 2>/dev/null  # bypass

为什么需要 bypass?

  • 假阳性问题:RM 开头的命令不一定都是删除(如 rmdirrn
  • 假阴性漏洞:可以用 base64 编码、脚本文件等方式绕过检测
  • 设计Hook 是兜底提醒,不是强制禁令。强制封锁会导致模型想出更多绕过方法
提醒型示例
# ~/.claude/commands/use-uv hook
---
description: "提醒使用 UV 替代 pip"
hooks:
  - name: use-uv
    when: "postToolUse"
    tools: ["Bash"]
    prompt: |
      💡 提示:建议使用 `uv run` 替代 `pip` 运行 Python 脚本。

      示例:
      uv run python script.py

      pip 在很多情况下无法正确识别虚拟环境,导致包找不到或版本冲突。
强制型 vs 提醒型对比
类型 行为 场景
强制型(PreToolUse) 直接返回错误,阻止执行 不可逆操作(删除文件、系统更改)
提醒型(PostToolUse) 放行命令,事后附加提示 体验优化(运行慢、找不到包但不破坏性)

3.2 PostToolUse(工具调用后)

在命令执行完成后注入提示,不阻断执行。

hooks:
  - name: uv-reminder
    when: "postToolUse"
    tools: ["Bash"]
    prompt: |
      💡 请记住:推荐使用 `uv run` 替代直接运行 pip/python。

      如果你刚刚使用了 pip 或 python,直接换成 uv run 可能更稳定。

3.3 UserPromptSubmit(用户提交问题时)

在用户发送消息后自动附加信息

# ~/.claude/commands/system-info hook
---
description: "自动附加系统状态信息"
hooks:
  - name: system-info
    when: "userPromptSubmit"
    prompt: |
      当前环境信息:

      时间:{{current_time}}
      Git 状态:
      {{gitStatus}}

      系统负载:{{systemLoad}}
实际效果
用户: touch newfile.txt
Hook 自动附加: Git 状态:?? newfile.txt
附加内容的两种方式
# 方式一:追加到上下文(不阻断)
prompt: |
  当前 Git 状态:
  {{gitStatus}}

# 方式二:重写用户输入(阻断)
prompt: "{{ctx}}"  # 打印上下文并输出到 stderr 触发阻断

3.4 Stop(回答结束时)

在模型生成完回复后触发,用于自动化操作(如自动精简长回复)。

# ~/.claude/commands/tldr hook
---
description: "自动精简长回复"
hooks:
  - name: tldr
    when: "stop"
    prompt: |
      你的回复太长了。请用 TLDR 格式重新总结,保留核心要点。
Stop Hook 的防无限循环机制

Claude Code 内置了双重保护

  1. 如果当前回复已经是 TLDR,跳过
  2. 如果上一轮已触发过 Stop Hook,跳过
// 内部逻辑示意
if (isAlreadyTLDR(response)) return;        // 第一重保护
if (previousTurnTriggered(thisHook)) return; // 第二重保护

四、Hook + Skill:强制触发技能

技能文件(.claude/commands/*.mdc)可能被埋在大量上下文中,模型容易忘记调用。

解决:劫持 write/edit 操作

# ~/.claude/commands/force-frontend-design hook
---
description: "强制调用前端设计技能"
hooks:
  - name: force-frontend-design
    when: "preToolUse"
    tools: ["Write", "Edit"]
    prompt: |
      你正要写入或编辑文件。

      请先调用 `frontend-design` 技能获取设计指导,然后再执行操作。

      使用 /skill frontend-design 加载技能。
配合效果

模型意图写入 index.html
Hook 劫持,提示加载 frontend-design 技能
→ 模型加载技能
→ 模型参考技能中的设计规范生成页面
→ 输出符合"AI 审美"要求的页面


Hook 配置

示例 1:多层级 Bash 防护

# ~/.claude/commands/bash-guard hook
---
description: "Bash 命令多层防护"
hooks:
  # 第一层:拦截危险操作
  - name: block-dangerous
    when: "preToolUse"
    tools: ["Bash"]
    if: "command contains 'rm -rf' or command contains 'sudo rm'"
    prompt: |
      ⚠️ 检测到危险删除操作!

      命令:{{command}}

      请解释为什么要执行此操作,或重新构造更安全的命令。
      如需强制执行,请添加 `# bypass` 注释。

  # 第二层:提醒最佳实践
  - name: best-practices
    when: "postToolUse"
    tools: ["Bash"]
    if: "command contains 'pip install' or command contains 'python'"
    prompt: |
      💡 建议使用 `uv` 替代 pip:

      uv pip install <package>
      # 或
      uv run python script.py

示例 2:自动环境感知

# ~/.claude/commands/env-awareness hook
---
description: "自动附加环境上下文"
hooks:
  - name: git-context
    when: "userPromptSubmit"
    prompt: |
      📊 当前 Git 上下文:

      {{gitStatus}}

  - name: recent-changes
    when: "userPromptSubmit"
    prompt: |
      📝 最近的更改:
      {{fileModified}}

附录

类型 命令 位置
创建 hook /hook <name> ~/.claude/commands/<name>.hook.md
创建技能 /skill <name> ~/.claude/commands/<name>.mdc
查看所有 hook /hooks -
  1. Hook 是兜底,不是禁令,强制封锁会导致模型想出绕过方法
  2. 按需加载,只在需要时注入,避免污染上下文
  3. 保留 bypass 通道,允许用户主动承担风险
  4. 分场景选择类型
    • 不可逆操作 → PreToolUse 强制拦截
    • 体验优化 → PostToolUse 事后提醒
    • 上下文补充 → UserPromptSubmit
    • 自动化操作 → Stop Hook
  5. Hook 与 Skill 配合用 Hook 强制触发技能,提高触发率
  • Claude Code 安装文档:https://code.claude.com/docs/en/overview

OpenCode Skills + 提示词配置


1.1 为什么从 Claude Code 转向 OpenCode

之前使用 Claude Code,现在改用 OpenCode 作为 AI 编程工具。

原因

  • OpenCode 是开源的,可深度定制
  • Claude Code 是闭源,有诸多限制
痛点 解决方案
AI 权力太大,会破坏系统 testing-safe-protocol skill:给 AI 打"思想钢印"
权力太小,老要确认,无法离开电脑 智能权限检测:本地文件操作自动执行
AI 写代码有幻觉/ bug tdd-workflow skill:测试驱动开发
任务太长,上下文压缩导致失忆 层层转包的代理框架 + 断点续传

2. OpenCode 相比 Claude Code 的优势

2.1 模型选择自由

OpenCode 优势:
- 可任意选择任何有 API Key 的模型
- 官方提供免费版模型(限速但可用)
- 运行时可随时切换模型,无需重启

Claude Code 的限制:

  • 需要通过环境变量锁定模型
  • 切换模型必须重启

2.2 智能的 bellash 权限检测

OpenCode 的权限检测逻辑:

否 仅本地文件

命令执行请求

是否涉及项目外文件?

请求权限

直接执行

Claude Code 的问题:

  • 任何操作都询问权限(即使只是本地文件修改)
  • 一旦同意就变成"什么都同意"模式
  • 无法区分本地和全局操作

对比

操作 Claude Code OpenCode
make dearEP -A(项目内) 全部询问 直接执行
在桌面创建文件 全部询问 请求权限
修改项目内文件 全部询问 直接执行

3. Skills 配置

3.1 配置文件仓库

https://github.com/archibate/dotfiles-opencode

3.2 testing-safe-protocol

用途:严格限制 AI 的操作范围,防止破坏系统

文件操作限制:
- 涉及文件系统写入时,只允许在当前项目文件夹下操作
- 不允许写到项目外

网络监听限制:
- 只允许在本地监听端口
- 不允许监听全网,否则容易被攻击

效果

  • AI 不会再在根目录创建垃圾文件
  • 不会擅自在系统全局安装软件
  • 如果需要安装系统级软件,会明确请求用户确认

3.3 tdd-workflow

测试驱动开发(TDD),解决 AI 容易幻觉、写错代码的问题

写测试

写实现

测试通过?

修复代码

任务完成

规则 说明
先写测试后写实现 必须先通过所有测试才能说完成
覆盖所有边界情况 测试用例要完整
模块解耦独立运行 每个模块能独立运行,放在自己的单元测试里
提前测试 尽早发现问题,不要拖到集成测试阶段

为什么 TDD 最适合 AI 编程

  • 不要求 AI 一次性写对所有代码(人类也做不到)
  • 通过自己测试自己的代码,逐渐发现问题
  • 最后能自己把 bug 修复干净,就是好 AI

使用:在 TDD 开发时必须读取 tdd-workflow 文件

3.4 brain-storm

类型:主 agent,分析需求、制定计划、协调执行

工作流程

用户提出需求

架构设计分析

网上搜索现成解决方案

澄清需求,创建任务列表

用户确认任务列表

派给子代理执行

用户中途可不管

任务自动完成

特点

  • 自动澄清用户需求
  • 自动探索各种实现方案
  • 自动创建 test.md 任务清单
  • 任务会写得很清楚,最后验证测试是否可靠
  • 支持断点续传:重启后从最后一个未完成任务继续

4. 代理框架设计

4.1 三层代理架构

用户

头脑风暴主 Agent

xq 子代理

worker 执行任务

完成子任务

层级 名称 职责
第1层 brain-storm 需求澄清、任务规划、调用子代理
第2层 xq 读取 test.md,按任务执行
第3层 worker 实际执行任务,使用 skills

4.2 为什么用多层代理

问题:如果把所有任务塞在一个 agent 的上下文里:

  • 上下文太大,延迟高
  • 费用高(按 token 计费)

解决:层层转包,每个 worker 只处理当前任务

4.3 任务执行机制

断点续传

每次启动时:
1. 读取最后一个未完成任务
2. 从该任务继续执行

进度追踪

  • worker 完成后会更新/创建 progress.md
  • 下次启动时读取 progress.md 了解进度
  • 追加写入,不覆盖之前内容

git 提交规则

  • 使用固定格式生成 commit message
  • 先执行 git add -A --dry-run 检查
  • 自动创建/更新 .gitignore
  • 不会把二进制文件加进去

5. Docker 容器化安全方案

5.1 docom(Docker Orchestrator)

创建隔离的 Docker 虚拟环境,防止 AI 破坏宿主机

5.2 配置方法

# 安装 docom
# 链接到 local bin
ln -s /path/to/docom ~/local/bin/docom

# 执行命令
docom run opencode

5.3 隔离机制

Docker 容器内只有以下路径有效:
- 当前项目路径
- OpenCode 配置文件路径

效果

  • AI再怎么操作,只破坏项目本身
  • 不会破坏整个电脑
  • 项目有 git 提交,不 push 就不会造成不可逆破坏

5.4 何时需要 docom

当前配置下(已启用 testing-safe-protocol):

  • AI 不会破坏项目外文件
  • 不会擅自在系统安装软件
  • 可以放心在本机运行,不需要 docom

如果需要更高级别的安全隔离,再启用 docom。


6. 与 AI 对话技巧

6.1 不要给 AI 添加偏见

错误示例

用户内心:我想实现 X 功能,正确做法是 Y
用户行为:问"如何用 Z 方法实现 X"
→ AI 给出 Z 方法的离谱方案
→ 用户真的去做了 Z
→ 浪费大量时间

正确做法

直接问:我想实现 X 功能,应该怎么做?
→ 如果 Y 是正确做法,AI 会直接告诉你
→ 如果用户不确定,可以补充:"我想到用 Z 方法,不知道对不对"
→ AI 可以判断 Z 是不是正确的

6.2 先分析再设硬指标

错误示例

"把这个函数优化到 1 秒以内"
→ AI 可能欺骗你,或者把函数改成有 bug 的版本
→ 硬指标导致 AI 乱来

正确做法

"分析一下这个函数有没有优化空间"
"分析为什么这个函数在某种条件下快,某种条件下慢"
→ AI 可以基于上下文给出准确建议

6.3 强制 AI 读取文档

问题:AI 很懒,不会自动找文档
解决:使用 @ 强制引用文档
例如:
@ read guidelines.md
@ read tdd-workflow.md

原理:强制 @ 会把文档内容贴到上下文,不管 AI 读不读都会包含

文档类型区分

  • 对话内容 = 短期记忆(很快失效)
  • 文档内容 = 长期记忆(可延续)

6.4 不要在提示词里写废话

反面教材(某些插件的提示词):

"为什么你是西西福斯"
"古希腊典故"
"古罗马古希腊"
...(大量篇幅)
"你要做什么"(一笔带过)

正确做法:直接告诉 AI 要做什么,不解释为什么

6.5 不要解释为什么要做一件事

错误示例

"我要把 X 变成单例模式,因为我的场景是..."
→ AI 记住了这些背景知识,下次却不记得
→ 浪费 token

正确做法

直接说:把 X 改成单例模式。

例外:如果需要 AI 评估想法,可以专门开一个评估对话:

"我打算把 X 改成单例模式,你觉得这样好不好?"
(提醒他不要编辑,只是在问问题)

6.6 让 AI 脑补计划,而不是自己列细节

工作流程

1. 用户说明目标
2. AI 脑补出实现方案(包括用户没想到的细节)
3. 用户确认计划是否正确
4. 确认后执行

优点

  • AI 脑补速度比打字快得多
  • 用户只需要在候选方案中选择
  • 类似于拼音输入法:打拼音 → 选候选词

OpenCode 内置操作

  • Tab:切换到 plan 模式
  • Shift+Tab:回到 build 模式

6.7 自己写代码,让 AI 审核

策略

  • 自己写代码(速度本来就快)
  • 写完后让 AI 审核
  • AI 审核比自己肉眼检查高效得多

AI 能发现的常见问题

  • 变量命名错误
  • 缺少 return 语句
  • 类型未定义
  • 逻辑错误

6.8 不同任务用不同上下文

错误做法

把所有信息塞在一个对话里,越裹越长
→ 上下文太长,AI 只看到一小部分

正确做法

新任务 → 新建对话
把信息写到文档里
用 @ 引用文档

7. 自定义配置与快捷工具

7.1 agents.md 基础配置

# OpenCode agent 提示词配置

## 基础规则
- 必须用中文回复
- 使用 uv 运行 python,不用 pip
- 可以执行多行指令
- 新项目用 4 空格缩进
- 代码和注释用英文

## 样式规则
- 如果目录下已有项目,先探索代码风格
- 服从现有项目的风格

7.2 中文回复 vs 英文代码

类型 语言 原因
AI 回复 中文 用户读起来方便
代码和注释 英文 用户可能需要自己编辑,改中文要切换输入法

7.3 commit 自动生成

功能:在 fish shell 中设置 alias

# 每次改动文件后,输入 commit 自动:
1. AI 生成 commit message
2. git add -A --dry-run
3. git commit

效果:不再需要自己想 commit message,直接自动生成并提交

7.4 I3wm 窗口管理工具

brain.dump(想法记录)

用途:开发过程中突然想到的事情可以快速记录

快捷键:配置 I3 窗口绑定 braint stack

使用流程

1. 工作中突然有想法
2. 按快捷键打开 brain dump
3. 记录想法
4. 继续手头工作
5. 之后查看截图形态的记录
6. 决定是否用 AI 进一步处理

好处

  • 不会忘记随机想法
  • 可以记录屏幕状态,方便回顾
  • 适合想法太多的场景
timer(计时器)

用途:工作计时

# 开始计时
work start

# 查看已用时间
按快捷键查看

# 删除计时器
删除记录

8. 配置文件仓库

目录结构

dotfiles-opencode/
├── .config/
│   └── opencode/
│       ├── agents.md           # 主 agent 配置
│       ├── skills/
│       │   ├── testing-safe-protocol.md
│       │   ├── tdd-workflow.md
│       │   └── ...
│       └── ...
├── bin/
│   ├── docom                   # Docker 编排器
│   ├── commit                  # 自动 commit 脚本
│   └── ...
└── README.md

安装步骤

  1. 安装 OpenCode
  2. 克隆配置文件仓库
  3. 按仓库中的说明配置

附录

概念 说明
bellash OpenCode 的命令执行权限检测机制
testing-safe-protocol 防止 AI 破坏系统的 skill
tdd-workflow 测试驱动开发的 skill
brain-storm 主 agent,负责需求分析和任务规划
xq 子 agent,负责按任务列表执行
worker 第三层代理,实际执行任务
docom Docker 编排器,创建隔离环境
brain dump I3wm 中的想法记录工具
  1. 智能权限管理:OpenCode 自动区分本地和全局操作,减少不必要的确认
  2. TDD + 测试安全协议:从根本上解决 AI 幻觉和系统破坏问题
  3. 三层代理架构:实现长时间任务的断点续传,同时控制成本
  4. 对话技巧:不要添加偏见、先分析后决策、强制文档读取
  5. 开发工具链:commit 自动生成、brain dump 想法记录、timer 计时器
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐