当前位置: 首页 > news >正文

第七章:自定义命令、规则与上下文

第七章:自定义命令、规则与上下文

本章讲解三类「让 OpenCode 更懂你的项目、更少重复劳动」的定制:自定义命令(Commands)规则文件(AGENTS.md / instructions)、以及 Agent Skills。它们都是纯文本、可提交进 Git、可团队共享,并且对省 Token 大有帮助——因为高质量的上下文能减少来回澄清与返工。


7.1 自定义命令(Commands)

自定义命令把「常用提示词」固化为 /命令名,在 TUI 里一键触发。它们与内置命令并列,同名时覆盖内置命令

用 Markdown 定义(推荐)

放在 .opencode/commands/(项目)或 ~/.config/opencode/commands/(全局),文件名即命令名:

---
description: 运行测试并生成覆盖率报告
agent: build
model: anthropic/claude-haiku-4-5
---运行完整测试套件并生成覆盖率报告,列出所有失败项。
聚焦失败的测试并给出修复建议。

之后在 TUI 输入 /test 即可。frontmatter 是配置,正文是发给 LLM 的模板。

用 JSON 定义

{"$schema": "https://opencode.ai/config.json","command": {"test": {"template": "运行完整测试套件并生成覆盖率报告,列出所有失败项。\n聚焦失败的测试并给出修复建议。","description": "运行测试并生成覆盖率报告","agent": "build","model": "anthropic/claude-haiku-4-5"},"component": {"template": "创建一个名为 $ARGUMENTS 的 React 组件,支持 TypeScript,包含正确的类型与基础结构。","description": "创建新组件"}}
}

命令模板的特殊语法

1)参数占位符

  • $ARGUMENTS:替换为命令后的全部参数。
  • $1 $2 $3 …:按位置取参。
---
description: 创建带内容的新文件
---在目录 $2 下创建名为 $1 的文件,内容如下:$3

调用:/create-file config.json src "{ \"key\": \"value\" }"

2)注入 Bash 输出

用 反引号包裹命令并在前面加 !(即 ! + 反引号命令反引号)把命令输出注入提示。命令在项目根目录执行:

---
description: 审查最近的改动
---最近的 git 提交:
!`git log --oneline -10`请审查这些改动并给出改进建议。

3)引用文件内容

@ 加文件名,把文件内容自动并入提示:

---
description: 审查组件
---审查 @src/components/Button.tsx 这个组件,检查性能问题并给出改进建议。

命令配置项

字段 必填 说明
template 发给 LLM 的提示模板
description TUI 中显示的描述
agent 指定执行该命令的 Agent;若是子代理则默认以子任务方式触发
subtask true 强制以子代理(子任务)方式运行,不污染主上下文
model 覆盖该命令使用的模型

subtask: true + 便宜的 model 是命令级省 Token 的黄金组合:把「跑测试并分析」「审查改动」这类重读取、重输出的任务丢进子会话用小模型完成,主会话只拿结论。


7.2 规则文件 AGENTS.md

AGENTS.md 类似 Cursor 的 rules,是注入到 LLM 上下文、用于定制其在你项目中行为的指令文件。

初始化

在 TUI 运行 /init:它扫描仓库关键文件,必要时问几个问题,然后创建/更新 AGENTS.md,聚焦未来会话最常需要的信息:

  • 构建、lint、测试命令;命令顺序与关键验证步骤;
  • 仅看文件名看不出的架构与目录结构;
  • 项目专属约定、环境怪癖、操作「坑」;
  • 对既有规则源(Cursor / Copilot rules)的引用。

若已有 AGENTS.md/init 会就地改进而非粗暴替换。建议把它提交进 Git 与团队共享。

示例

# SST v3 Monorepo 项目这是一个使用 TypeScript 的 SST v3 monorepo,用 bun workspaces 管理包。## 项目结构
- `packages/` - 所有 workspace 包(functions、core、web 等)
- `infra/` - 基础设施定义,按服务拆分(storage.ts、api.ts、web.ts)
- `sst.config.ts` - SST 主配置,使用动态导入## 代码规范
- TypeScript 开启 strict 模式
- 共享代码放 `packages/core/`,配置正确的导出
- 函数放 `packages/functions/`## Monorepo 约定
- 用 workspace 名导入共享模块:`@my-app/core/example`

多位置与优先级

AGENTS.md 可来自多个位置,用途不同:

  • 项目级:项目根 AGENTS.md,只在该目录及子目录生效,随项目共享。
  • 全局级~/.config/opencode/AGENTS.md,对所有会话生效,适合放个人规则(不入 Git)。

启动时按此顺序查找,每类「首个命中者生效」:

  1. 从当前目录向上回溯的本地文件(AGENTS.mdCLAUDE.md);
  2. 全局 ~/.config/opencode/AGENTS.md
  3. Claude Code 文件 ~/.claude/CLAUDE.md(除非禁用)。

兼容 Claude Code

从 Claude Code 迁移者可直接复用其约定作为回退:项目 CLAUDE.md(无 AGENTS.md 时)、全局 ~/.claude/CLAUDE.md、以及 ~/.claude/skills/。可用环境变量关闭:

export OPENCODE_DISABLE_CLAUDE_CODE=1          # 关闭全部 .claude 支持
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1   # 仅关闭 ~/.claude/CLAUDE.md
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1   # 仅关闭 .claude/skills

7.3 复用既有规则:instructions

不想把规则都搬进 AGENTS.md?用 instructions 引用既有文件(支持路径、glob、甚至远程 URL),它们会与 AGENTS.md 合并:

{"$schema": "https://opencode.ai/config.json","instructions": ["CONTRIBUTING.md","docs/guidelines.md",".cursor/rules/*.md","packages/*/AGENTS.md","https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
}

远程指令以 5 秒超时拉取。对 monorepo 或有共享规范的项目,用 glob(如 packages/*/AGENTS.md)比手写引用更易维护。

按需加载外部文件(省 Token 技巧)

OpenCode 不会自动解析 AGENTS.md 里的文件引用,但你可以在 AGENTS.md它「按需懒加载」,避免一次性把所有规则塞进上下文:

## 外部文件加载关键:当遇到形如 @rules/general.md 的文件引用时,用 Read 工具按需加载它们,
它们只与当前具体任务相关。- 不要预先加载所有引用——按实际需要懒加载
- 加载后将内容视为强制指令,覆盖默认行为
- 必要时递归跟随引用## 开发指南
TypeScript 风格与最佳实践:@docs/typescript-guidelines.md
React 组件架构与 hooks:@docs/react-patterns.md

这样既能模块化、复用规则,又能让 AGENTS.md 保持精简、只在需要时才消耗 Token。


7.4 Agent Skills(SKILL.md

Skills 让 OpenCode 从仓库或主目录按需发现可复用的操作流程。它们通过原生 skill 工具被「看到」,只有在需要时才加载完整内容——天然省 Token。

存放位置

每个技能一个文件夹,内含 SKILL.md。搜索位置包括:

  • 项目:.opencode/skills/<name>/SKILL.md
  • 全局:~/.config/opencode/skills/<name>/SKILL.md
  • Claude 兼容:.claude/skills/<name>/SKILL.md~/.claude/skills/<name>/SKILL.md
  • agents 兼容:.agents/skills/<name>/SKILL.md~/.agents/skills/<name>/SKILL.md

frontmatter 规范

---
name: git-release
description: 规范化的 Git 发版流程:打 tag、生成 changelog、推送 release
---执行发版时,按以下步骤……

仅识别这些字段:name(必填)、description(必填)、licensecompatibilitymetadata(字符串映射),其它字段被忽略。name 必须为 1–64 字符、小写字母数字、用单个连字符分隔、不以 - 开头或结尾、不含连续 --,且与所在目录名一致;description 为 1–1024 字符,要写得足够具体,方便 Agent 正确选用。

Skill 与「直接把所有流程写进 AGENTS.md」相比,最大优势是延迟加载:平时不占上下文,用到才加载,对长流程/多技能场景省 Token 效果明显。


7.5 小结

本章你学会了三种把项目知识注入 OpenCode 的方式:自定义命令(含参数、Bash 注入、文件引用、子任务分流)、规则文件(AGENTS.md + instructions + 懒加载技巧)、以及按需加载的 Skills。它们共同让模型「少问、少错、少返工」,本质上也是一种 Token 优化。下一章进入工具、权限与 MCP 扩展。

http://www.jsqmd.com/news/947322/

相关文章:

  • 别慌!网站突然打不开显示Error 522?手把手教你排查百度云加速与源站的连接问题
  • DeepSeek V4实测:百万上下文与MoE架构如何重构AI成本模型
  • 量子退火在最小顶点多割问题中的应用与优化
  • 仓储软件(WMS)值得推荐的选择方向 - 品牌排行榜
  • 第八章:工具、权限与 MCP 扩展
  • 用超声波传感器与Arduino制作自由形态电子秤:从测距到称重的跨界实践
  • 如何快速定位手机号码归属地:三步完成精准查询
  • AI工具链×秒杀核心链路深度耦合实践(阿里/拼多多/得物三巨头架构师联合复盘版)
  • PHP图数据结构与算法实现
  • 工单响应时效从47分钟压缩至92秒,这3个AI集成节点你绝对漏掉了
  • 利用快马平台快速构建potplayer字幕翻译工具原型
  • 百度网盘限速终结者:3分钟搞定高速下载的终极方案
  • 合规红线下的智能外呼:如何用RAG+本地化语音模型通过银保监AI外呼备案(附过审配置清单)
  • 伺服驱动器方向反转排查与设置
  • Gemma 4 9B:面向开发者的轻量级AI生产力引擎
  • 动态多重网络层间差异检验:谱嵌入与Bootstrap方法
  • OpenCode 教程目录
  • Determined:一个集成的深度学习训练平台
  • 计算机重装系统出现SYSTEM磁盘?
  • 量子上三角矩阵代数UTq(n)的构造与Hopf结构解析
  • 高端音频旋转电位器怎么选?ALPS RK14J11R000H VS TONEVEE TV14 参数PK
  • 公平k中心聚类算法:原理、优化与应用
  • 基于深度学习的文本自动摘要系统
  • 推荐一个适合维保公司的报修系统,支持多报修单位独立管理
  • 第十章:最佳实践、完整配置模板与排障
  • 手机信号满格却上不了网?一文搞懂LTE/5G的PLMN选网与漫游机制
  • PHP域名解析与CDN加速技术
  • 告别选型内耗,大模型API 采购中转成为企业 AI 降本增效新支点
  • 避坑指南:STM32F103标准库DAC配置的那些“坑”与最佳实践
  • All-in-one数据底座的价值与实践:基于Harness的解读