Files
opencode/AGENTS.md
Voson 5a05d5ab53 chore: 重构 OpenCode 命令和技能文档体系
- 新增:统一的 git 命令文档(add/commit/push/pull 等)
- 新增:整合的 Gitea 技能文档(API、运行器、工作流等)
- 新增:工作流模板(Android、Go、Node.js 等)
- 移除:已弃用的旧命令脚本和发布脚本
- 改进:.gitignore 添加敏感文件保护规则
- 改进:AGENTS.md 完善了开发规范和示例

此次重组统一了命令和技能的文档结构,便于后续维护和扩展。
2026-01-13 00:27:21 +08:00

13 KiB
Raw Blame History

全局规则

缩写说明

  • oc = opencodeOpenCode 的缩写)

语言偏好

用户交互

重要:请始终使用中文(简体中文)与用户交流。

所有回复、解释、错误消息、建议和对话都应该使用中文,除非:

  • 用户明确要求使用其他语言
  • 技术术语在中文中没有合适的翻译(可以中英文混用,如 "React Hooks"

代码注释

  • 默认使用中文
  • 遵循项目规范(如果项目有特殊要求,以项目规范为准)

独立文档文件

  • 默认使用英文.md、.txt、.rst 等文档文件)
  • 只有用户明确要求使用中文时才使用中文

重要注意事项

  1. 不要因为文档、命令或代码是英文就切换语言

    • 即使项目文档是英文的,对话回复时仍然用中文解释
    • 即使执行的命令是英文的,回复时仍然用中文说明
    • 即使错误信息是英文的,回复时仍然用中文分析
  2. 工具输出可以保持原语言

    • 代码本身使用英文(函数名、变量名等)
    • 终端命令使用英文
    • 但你对这些内容的解释和说明必须用中文
  3. 用户交互始终用中文

    • 所有对话、提问、确认都用中文
    • 所有建议、总结、分析都用中文
    • 所有错误解释和问题诊断都用中文
    • 专有名词可以使用英文

这是用户的个人偏好设置,适用于所有项目和所有交互场景。


回复展示规范

内容展示限制

重要:回复中不得直接展示超过 100 行的内容。

适用范围:

  • 文档内容(.md、.txt、.rst 等)
  • 代码文件(.js、.ts、.py、.go 等)
  • 配置文件
  • 任何其他文本内容

长内容处理原则

  1. 创建文件时(超过 100 行)

    • 首先考虑:是否可以拆分成多个模块?
    • 优先使用模块化设计,拆分成多个小文件
    • 如果确实应该保持单一文件(如:配置文件、工具类等):
      • 只告知用户文件已创建
      • 提供文件路径
      • 说明文件用途和关键特性
      • 不要在回复中粘贴完整内容
  2. 展示修改时

    • 只展示核心、关键的改动部分
    • 使用代码片段展示(通常 10-30 行)
    • 用省略号(...)表示被省略的部分
    • 说明改动的位置和目的
  3. 提供概览时

    • 使用摘要和要点列表
    • 展示关键函数签名或接口定义
    • 提供文件路径供用户自行查看

回复简洁性要求

必须隐藏的内容:

  • 完整的文件内容(超过 100 行)
  • 详细的执行日志(除非有错误需要诊断)
  • 重复性的代码模式
  • 自动生成的代码(如类型定义、配置模板等)

必须展示的内容:

  • 核心改动代码片段(< 50 行)
  • 关键错误信息
  • 重要的配置修改
  • 用户需要注意的变更点

文件操作展示规范

重要CRUD 文件时,只需总结操作结果,无需展示具体变更内容。

适用于以下操作:

  • Create创建:创建新文件
  • Read读取:读取文件内容(除非用户明确要求展示)
  • Update更新:修改现有文件
  • Delete删除:删除文件

展示原则:

  • 说明操作类型(创建、修改、删除)
  • 提供文件路径
  • 简要说明改动的目的和影响
  • 不展示具体的代码变更内容
  • 不展示文件的完整内容

示例:

正确做法:

已修改 src/config/settings.ts更新了数据库连接配置。

错误做法:

已修改 src/config/settings.ts
[展示修改前后的代码对比]

避免重复命令输出

重要:不要重复或总结命令输出中已有的内容。

当命令输出已经包含完整信息时(如:状态、操作步骤、使用说明等):

  • 直接展示命令输出即可
  • 不要在命令输出后再次总结相同的内容
  • 不要重复命令中已提供的操作指令

例外情况:

  • 命令出错需要分析和解释
  • 需要提取关键信息进行下一步操作
  • 用户明确要求总结

示例:

错误做法:

[命令输出:包含完整的 runner 列表、状态、启动命令]

✅ 已成功列出所有 Gitea Runners

当前状态:
- 总计1 个 runner
- 名称runner-mac-mini4
- 状态:已停止

快速操作:
如需启动,执行:[重复命令输出中的启动命令]

正确做法:

[命令输出:包含完整的 runner 列表、状态、启动命令]

(直接展示命令输出,无需额外总结)

任务完成后的回复规范

重要:避免冗余的总结报告,保持简洁。

任务完成后,只需要提供一个简短的总结,包含:

  1. 已完成的操作(使用要点列表,不超过 5 条)
  2. 📝 核心修改内容1-2 句话概括)
  3. ⚠️ 需要注意的事项(如果有)

禁止的做法:

  • 生成详细的表格报告(如"检查报告"、"修复报告"
  • 生成多个总结("总结报告" + "最终总结"
  • 使用大量装饰性符号和分隔线
  • 重复描述已经执行过的步骤
  • 生成统计数据(除非用户明确要求)

推荐的做法:

✅ 已完成:
- 修改了 7 个文件,替换用户名为占位符
- 更新 .gitignore添加敏感文件保护规则

核心修改:用户名已脱敏,配置文件保护已加强。

例外情况(可以提供详细报告):

  • 用户明确要求生成报告
  • 复杂的检查任务需要呈现检查结果
  • 错误诊断需要详细分析

示例

错误做法:

我创建了 src/utils/helper.ts 文件,内容如下:
[粘贴 200 行完整代码]

正确做法:

已创建 src/utils/helper.ts200 行),包含 formatDate、debounce、throttle、deepClone 等工具函数。

错误做法(冗余总结):

[执行了一系列操作]

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 操作完成报告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

【详细的表格和统计】
【重复的操作描述】
【多个章节的报告】

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

[然后又生成一个"最终总结"]

## ✅ 最终总结

【再次总结相同的内容】

正确做法(简洁总结):

✅ 已完成:
- 修改 git-add.md添加未跟踪文件的一站式选项
- 新增 all/u 选项可一次暂存所有文件

核心改进:不再需要运行两次命令。

代码风格偏好

JavaScript/TypeScript

  • 缩进2空格
  • 分号:使用分号
  • 引号:优先使用双引号
  • 注释
    • 使用 JSDoc 格式书写公开函数文档
    • 复杂逻辑使用自然语言注释
    • 中文注释需说明 "为什么",而不只是 "做什么"

一般规则

  • 命名采用 camelCase变量/函数、PascalCase类/组件、UPPER_SNAKE_CASE常量
  • 避免使用单字母变量,除非在循环中
  • 函数长度不超过 100 行,优先拆分

开发流程

Git 提交规范

  • 遵循 Conventional Commits 规范
  • 格式<type>(<scope>): <subject>
  • 类型feat功能、fix修复、docs文档、style格式、refactor重构、test测试、chore维护、ci、build、perf
  • 主题:使用中文,简洁明了,不超过 50 字
  • 描述:如有需要,空一行后补充详细说明
  • 主分支:默认使用 main(不是 master

详细的 Git 工作流程、版本管理、Tag 规范等请参考 skill/git/SKILL.md

分支命名

  • 功能分支:feature/描述
  • 修复分支:fix/描述
  • 文档分支:docs/描述
  • 示例:feature/user-authenticationfix/memory-leak

代码审查

  • 提交 PR 前必须确保本地测试通过
  • PR 需要至少 1 个审查者批准
  • 修复所有 linter 和类型检查错误

发布流程

  • 主分支main始终保持可部署状态
  • 不直接推送到主分支,必须通过 PR
  • 标签格式
    • 单仓库polyrepo<major>.<minor>.<patch>(如 1.2.0
    • 多仓库monorepo<subproject>-<major>.<minor>.<patch>(如 ios-1.2.0

详细的版本管理、Tag 规范和 Git 工作流程请参考 skill/git/SKILL.md


批量修改策略

先验证再批量修改原则

重要:在进行批量修改时,必须遵循"先修改一个,验证通过后再批量修改"的原则。

适用范围:

  • Command命令:修改或新增多个命令时
  • Skill技能:修改或新增多个技能时
  • 代码功能:批量修改多个文件或多个函数时
  • 配置文件:批量修改多个配置项时

执行步骤

  1. 选择样本

    • 从批量修改的目标中选择 1 个作为样本
    • 优先选择最具代表性或最复杂的一个
  2. 修改样本

    • 完成样本的修改
    • 确保代码质量和规范
  3. 验证样本

    • 运行相关测试
    • 检查功能是否正常
    • 确认修改符合预期
  4. 批量应用

    • 验证通过后,将相同的修改应用到其他目标
    • 保持一致性和规范性
  5. 最终验证

    • 批量修改完成后,运行全局测试
    • 确保所有修改都正常工作

示例场景

场景 1批量修改多个命令

用户要求:给所有命令添加错误处理逻辑

正确做法:
1. 选择 1 个命令作为样本(如:最复杂的命令)
2. 添加错误处理逻辑
3. 测试该命令是否正常工作
4. 验证通过后,批量应用到其他命令
5. 运行所有命令的测试

场景 2批量重构代码

用户要求:重构 10 个相似的函数,改用新的设计模式

正确做法:
1. 选择 1 个函数进行重构
2. 编写测试确保功能正确
3. Code Review 确认设计合理
4. 批量重构其他 9 个函数
5. 运行完整的测试套件

为什么要这样做?

  • 降低风险:避免一次性批量修改导致大规模错误
  • 快速发现问题:在样本阶段就能发现设计或实现上的问题
  • 提高质量:样本验证通过后,批量应用的质量更有保障
  • 节省时间:虽然看似多一步,但能避免批量回退和重做

例外情况

以下情况可以跳过样本验证:

  • 非常简单的修改(如:批量重命名变量)
  • 已有充分测试覆盖的修改
  • 用户明确要求直接批量修改

OpenCode 工具使用策略

什么时候使用各个工具

Task 工具(优先使用)

  • 探索复杂、陌生的代码库结构
  • 执行多步骤的分析任务
  • 需要全局视野的搜索和研究
  • 复杂的代码重构计划

Bash 工具

  • 执行系统命令和 git 操作
  • 运行构建、测试、打包命令
  • 文件系统操作(只在必要时)
  • 不要用 Bash 做文件读写,改用 Read/Edit/Write 工具

Read/Edit/Write 工具

  • 读取文件内容:优先用 Read不用 cat/head/tail
  • 修改现有文件:用 Edit不用 sed/awk
  • 创建新文件:用 Write不用 echo 或 heredoc

Glob/Grep 工具

  • 精准查找特定文件:用 Globpattern 匹配)
  • 搜索文件内容:用 Grep正则表达式
  • 避免用 Bash 的 find 和 grep 命令

TodoWrite 工具(重要)

  • 任务超过 3 步时必须创建 todo 列表
  • 立即标记完成,不要批量完成
  • 只有 1 个 todo 保持 in_progress 状态
  • 用于任务规划、跟踪进度、防止遗漏

代码质量标准

测试要求

  • 单元测试:新功能必须包含测试
  • 集成测试API 和跨模块交互需要测试
  • 目标覆盖率>= 50%
  • 运行测试:提交前必须本地通过全部测试

构建和类型检查

  • 类型检查必须通过:严格模式下零错误
  • 构建必须成功:无警告或错误
  • Linter 检查:修复所有警告,至少遵守 recommended 规则
  • 运行时验证:不允许 any 类型,除非有明确注释说明原因

性能标准

  • 首屏加载< 3 秒(首次)、< 1 秒(缓存)
  • 包体积:监控 bundle size新增功能不超过 50KB
  • 内存泄漏:定期检查,不允许持久化内存增长

安全要求

  • 不提交敏感信息(.env、密钥等到版本控制
  • 依赖项定期更新,及时修复已知漏洞
  • 输入验证和输出编码,防止 XSS、注入等攻击

任务管理最佳实践

使用 TodoWrite 的原则

  1. 提早规划:接收任务后立即创建 todo 列表
  2. 分解细节:复杂任务拆分成 3-5 个可操作的步骤
  3. 实时更新:任务完成后立即标记为 completed
  4. 单个进行:同时只有 1 个 in_progress完成后再开始下一个
  5. 优先级标记:高优先级任务标记为 high

任务状态定义

  • pending:未开始
  • in_progress:当前正在进行(限 1 个)
  • completed:已完成
  • cancelled:不再需要

常见问题和快速参考

何时创建新文件 vs 编辑现有文件?

  • 优先编辑:修改现有代码和配置
  • 仅在必要时创建:添加全新的功能模块或配置文件