原创专题
OpenCode 自定义命令:用位置参数写一个可复用的评审提示
把重复提示写成 .opencode/commands 下的 Markdown 文件,用 $1、$2 传参,并在运行前检查参数个数与注入内容。
同一类提示反复手打,措辞会逐渐漂移。本文目标是做一个 /review-file 命令:接收文件路径和关注点,让评审提示每次保持同一结构。前提是你能在项目里创建 .opencode/commands 目录。这里依据官方命令页写出文件,并离线检查了 frontmatter、占位符和 JSON 等价写法;没有安装或运行 OpenCode,也没有调用任何模型。
操作与验收顺序
确定命令位置
项目内用 .opencode/commands,全局用 ~/.config/opencode/commands,文件名就是命令名。[1]
写模板与参数
frontmatter 写 description,正文是模板,用 $1、$2 取参数。[1]
运行前检查
核对参数个数、引号和会被注入的内容,再在 TUI 里调用。[1]
先写下命令的输入和输出
原创练习:命令名 review-file,输入两个值,即文件路径和关注点,例如 docs/setup.md 与 accuracy;输出是不超过 5 条的评审意见,每条引用原文并说明怎样核实。先把这两个输入列成表,再动手写文件。官方页说明,项目命令放在 .opencode/commands/,全局命令放在 ~/.config/opencode/commands/,Markdown 文件名就是命令名,所以 review-file.md 对应 /review-file。[1]
frontmatter 与模板
文件顶部用 --- 包住 frontmatter,这里只写 description,输入 / 时 TUI 会显示它;正文是发给模型的模板:Review the file $1 with a focus on $2,再要求最多 5 条、逐条引用原文、不要提出对其他文件的修改。agent、model、subtask 都是可选项:不写 agent 就沿用当前 agent,想让命令使用独立上下文再看 subtask。官方页没有说明提示词里的“不要修改”能否限制工具权限,把它当作请求,不当作权限边界。[1]
参数、引号与缺参数
$1、$2 按位置取值;$ARGUMENTS 是整段参数,适合一句自由文本,两个相互独立的字段更适合位置参数。官方示例用双引号包住第三个参数,$3 得到引号内的整段内容,所以含空格的值要加双引号。文档没有说明缺少参数时 $2 会变成什么,也没有说明 $1 后面能否接 @ 文件引用,这两点按未验证处理:运行前自己数一遍参数,不够就不要发送。[1]
运行前后的检查与停止条件
离线检查了三件事:frontmatter 能被 YAML 解析且有 description;用本地拆分函数复现官方的 $1/$2/$3 示例(该函数只对照了这一个示例),再代入 docs/setup.md 与 accuracy;等价的 opencode 配置中 command.review-file.template 与 Markdown 正文逐字一致。首次在 TUI 调用时,核对发出的提示里没有残留的 $1 或 $2,意见不超过 5 条。若模板用感叹号加反引号注入 Shell 输出,按官方说明该输出会成为提示的一部分,不要用于会打印密钥的命令。以上都没有启动 OpenCode,也不说明评审质量。[1]
本文来源
本站原创整理;官方说明与编辑建议分别标注。