Rules 是 OpenCode 中最直接的行为控制机制。通过在项目中创建规则文件,你可以精确地告诉 AI 编程助手:你用什么技术栈、遵循什么编码风格、有哪些项目约定。本文将完整覆盖 AGENTS.md 规则文件、指令系统、自动提示词,以及如何通过提示词工程最大化 AI 的产出质量。
OpenCode 使用多个层级的规则文件,优先级从高到低:
| 文件 | 位置 | 优先级 | 作用 |
|------|------|--------|------|
| AGENTS.md | 项目根目录 | 最高 | 项目专属规则 |
| CLAUDE.md | 项目根目录 | 高(兼容) | 兼容 Claude Code 规则 |
| .opencode/instructions.md | 项目 .opencode 目录 | 中 | 补充指令 |
| ~/.config/opencode/AGENTS.md | 用户目录 | 低 | 全局规则 |
| 系统 Prompt | 内置 | 最低 | OpenCode 默认行为 |
多层规则会合并生效(非覆盖),后加载的规则追加到上下文。这意味着:
# 项目名称 / 概述 简要说明项目是什么。 ## 技术栈 - 前端:React 18 + TypeScript + Tailwind CSS - 后端:Go 1.22 + Gin - 数据库:PostgreSQL 16 - 缓存:Redis ## 编码规范 ### 命名约定 - React 组件使用 PascalCase:`UserProfile.tsx` - 工具函数使用 camelCase:`formatDate.ts` - 常量使用 UPPER_SNAKE_CASE:`MAX_RETRY_COUNT` - Go 中接口使用 `-er` 后缀:`Reader`、`Writer` ### TypeScript 规范 - 严格模式必须开启 - 禁止使用 `any`,优先使用 `unknown` - 导出的函数必须有 JSDoc 注释 - React 组件使用函数式组件 + Hooks ### Go 规范 - 使用 `gofmt` 格式化 - 错误处理不能忽略,必须处理或显式 `_` - context.Context 必须作为第一个参数 ## 项目结构
src/
├── components/ # 通用 UI 组件
├── features/ # 功能模块(按业务拆分)
├── hooks/ # 自定义 Hooks
├── lib/ # 工具函数库
├── pages/ # 页面组件
└── types/ # 类型定义
## 架构约定 - 状态管理使用 Zustand - API 请求统一通过 `src/lib/api.ts` 中的封装函数 - 路由使用 React Router v6 - 测试框架使用 Vitest + React Testing Library ## Git 规范 - 提交信息遵循 Conventional Commits:`feat:`、`fix:`、`refactor:` 等 - 分支命名:`feat/description`、`fix/description`、`chore/description` - 提交前必须通过 lint 和 typecheck ## 测试规范 - 所有 API 端点必须有集成测试 - React 组件必须有快照测试或行为测试 - 测试文件放在 `__tests__/` 目录或与源文件同目录的 `.test.ts` - 运行测试:`npm run test`
AGENTS.md 不仅可以描述项目规范,还可以指示 AI 在特定场景下的行为:
## AI 行为指令 ### 代码修改时 - 修改文件前先阅读文件内容 - 遵循现有的代码风格和模式 - 修改完成后运行 lint 和 typecheck - 不要引入项目中未使用的第三方库 ### 创建新文件时 - 参考同级目录下已有文件的命名和结构 - 自动添加 license header - 确保 import 顺序:React → 第三方 → 项目内 ### 安全约束 - 永远不要在任何文件中写入硬编码的密码、Token 或 Key - 使用环境变量或配置文件管理敏感信息 - 不要修改 .env 文件中的已有值
除了规则文件,掌握提示词工程技巧可以在每次对话中更精准地控制 AI 的行为。
你现在是一个资深的 React 性能优化专家。请分析这段代码的性能瓶颈...
请满足以下约束: - 不使用第三方库 - 兼容 TypeScript 5.0+ - 支持 SSR - 包体积不超过 5KB
请用以下格式回复: 1. 问题分析(3-5 句话) 2. 解决方案(代码块) 3. 注意事项(列表) 4. 替代方案(如有)
请按以下步骤执行: 1. 先分析当前代码结构 2. 确认需要修改的文件列表 3. 逐个文件进行修改 4. 最后运行测试验证
请修改这段代码,但是: - 不要改动公共 API 签名 - 不要改变返回值的结构 - 不要删除任何现有注释 - 不要引入 breaking change
在项目根目录创建 auto_prompt.md,OpenCode 会在每次会话开始时自动将其内容注入上下文。这相当于一个「自带记忆」的功能。
# auto_prompt.md ## 当前焦点 我正在开发用户认证模块的重构工作。 ## 已知问题 - 旧认证系统使用 JWT 存储在 localStorage(计划改为 httpOnly cookie) - 需要保持与旧 API 的向后兼容 ## 进行中的任务 - [ ] 实现新的 session-based 认证中间件 - [ ] 迁移现有的 JWT 验证逻辑 - [ ] 更新前端 AuthContext ## 关键决策 - 选择了 iron-session 作为 session 库 - Session 过期时间设为 7 天 - 密码加密使用 bcrypt,cost factor = 12
这样每次打开 OpenCode 时,AI 都会记住当前的工作上下文。
.opencode/instructions.md 作为 AGENTS.md 的补充,适合放置更详细的 AI 行为指南:
# Instructions ## 代码生成策略 1. 生成代码前,先搜索项目中是否已有类似实现 2. 优先复用现有组件和工具函数 3. 如果引入新依赖,先确认是否真的必要 4. 复杂逻辑添加注释,但避免冗余注释 ## 错误处理模式 - 后端:使用统一的错误响应格式 - 前端:在 API 层统一处理错误,组件层只关注业务逻辑 ## 回答风格 - 代码修改完成后,简要说明改了什么 - 不生成没有实际作用的解释性文字 - 遇到不确定的地方主动询问
以下是一个适用于 TypeScript 全栈项目的完整 AGENTS.md 模板:
# My App 全栈 SaaS 应用:React 前端 + NestJS 后端 + PostgreSQL 数据库。 ## 技术栈 - 前端:React 18, TypeScript, Tailwind CSS, TanStack Query - 后端:NestJS, Prisma ORM, PostgreSQL - 工具:Vitest, Playwright, ESLint, Prettier ## 目录约定
apps/web/ # 前端应用
apps/api/ # 后端 API
packages/shared/ # 共享类型和工具
## 代码规范 - 缩进使用 2 空格 - 字符串使用单引号 - 文件末尾留空行 - ESM import 语法 - 类型优先于 interface(除非需要合并声明) ## 提交前检查
## 常用命令
请对以下代码进行 Code Review,关注: - 逻辑正确性 - 安全漏洞(SQL 注入、XSS、CSRF) - 性能问题(N+1 查询、内存泄漏) - 可维护性(命名、结构、注释) 请按严重程度排列问题。
我遇到了以下问题: [描述问题和复现步骤] 请帮我: 1. 分析可能的原因(按可能性排序) 2. 给出排查步骤 3. 提供解决方案 先不要修改代码,只做分析。
请分析这段代码的性能瓶颈,按影响程度排列: 1. 最大的性能瓶颈是什么? 2. 如何优化?(给出代码) 3. 优化后的预期提升?
Rules 系统从简单的项目描述到复杂的 AI 行为控制,形成了多层次的指令体系:
下一篇我们将深入 OpenCode 的 MCP 服务器系统,学习如何通过 Model Context Protocol 为 AI 接入无限工具生态。