命令 (Commands)

为重复性任务创建自定义命令
自定义命令允许您指定在 TUI(终端界面)中执行该命令时要运行的提示词(Prompt)。
/my-command
自定义命令是除内置命令(如 /init/undo/redo/share/help)之外的补充。

创建命令文件

您可以在 command/ 目录下创建 Markdown 文件来定义自定义命令。
例如,创建 .opencode/command/test.md
.opencode/command/test.md
---
description: 运行带覆盖率的测试
agent: build
model: anthropic/claude-3-5-sonnet-20241022
---

运行完整的测试套件及覆盖率报告,并显示任何失败项。
专注于失败的测试并建议修复方案。
  • Frontmatter 定义了命令的属性。
  • 内容部分 则是命令的模板。
  • 使用时,在 TUI 中输入 / 后跟命令名称即可,例如 /test

配置方式

您可以通过 OpenCode 配置文件或在 command/ 目录中创建 Markdown 文件来添加自定义命令。

JSON 方式

opencode.jsonc 中使用 command 选项:
{
  "$schema": "https://opencode.ai/config.json",
  "command": {
    "test": {
      "template": "运行完整的测试套件及覆盖率报告,并显示任何失败项。\\n专注于失败的测试并建议修复方案。",
      "description": "运行带覆盖率的测试",
      "agent": "build",
      "model": "anthropic/claude-3-5-sonnet-20241022"
    }
  }
}

Markdown 方式

将文件放置在以下位置:
  • 全局配置: ~/.config/opencode/command/
  • 项目特定配置: .opencode/command/
文件名即为命令名(例如 test.md 对应的命令是 /test)。

提示词配置 (Prompt config)

自定义命令的提示词支持多种特殊占位符和语法:

参数 (Arguments)

使用 $ARGUMENTS 占位符向命令传递参数。
  • 示例模板: 创建一个名为 $ARGUMENTS 的 React 组件。
  • 执行: /component Button -> $ARGUMENTS 会被替换为 Button
  • 位置参数: 也可以使用 $1$2$3 等访问单个参数。

Shell 输出 (Shell output)

使用 ! 脚本命令 将 Bash 命令的输出注入到提示词中。
  • 示例:
这是目前的测试结果:
!`npm test`
根据这些结果建议改进方案。
命令在项目根目录下运行,其输出会成为提示词的一部分。

文件引用 (File references)

使用 @ 后跟文件名将文件内容包含在命令中。
  • 示例: 请审查 @src/components/Button.tsx 中的组件。

配置选项 (Options)

  • Template (必需): 执行命令时发送给 LLM 的提示词模板。
  • Description: 在 TUI 中输入命令时显示的简短说明。
  • Agent: 指定执行此命令的代理(可选)。如果是子代理,默认会触发子代理调用。
  • Subtask: 布尔值。设置为 true 可强制该命令作为子任务运行,避免污染主上下文。
  • Model: 覆盖此命令默认使用的模型。

内置命令 (Built-in)

OpenCode 包含 /init/undo/redo/share/help 等内置命令。
[!NOTE] 自定义命令可以覆盖内置命令。如果您定义了一个同名的自定义命令,它将优先运行。