Русский
Документация
Команды

Команды

Создавайте пользовательские команды для повторяющихся задач.

Пользовательские команды позволяют указать промпт, который вы хотите выполнить при запуске этой команды в TUI.

/my-command

Пользовательские команды дополняют встроенные команды, такие как /init, /undo, /redo, /share, /help. Подробнее.


Создание файлов команд

Создавайте markdown-файлы в директории commands/, чтобы определять пользовательские команды.

Создайте .opencode/commands/test.md:

.opencode/commands/test.md
---
description: Run tests with coverage
agent: build
model: anthropic/claude-3-5-sonnet-20241022
---
 
Run the full test suite with coverage report and show any failures.
Focus on the failing tests and suggest fixes.

Frontmatter определяет свойства команды. Содержимое становится шаблоном.

Используйте команду, введя /, а затем имя команды.

"/test"

Настройка

Вы можете добавлять пользовательские команды через конфигурацию OpenCode или создавая markdown-файлы в директории commands/.


JSON

Используйте опцию command в вашей конфигурации OpenCode:

opencode.jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "command": {
    // This becomes the name of the command
    "test": {
      // This is the prompt that will be sent to the LLM
      "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
      // This is shown as the description in the TUI
      "description": "Run tests with coverage",
      "agent": "build",
      "model": "anthropic/claude-3-5-sonnet-20241022"
    }
  }
}

Теперь вы можете запустить эту команду в TUI:

/test

Markdown

Вы также можете определять команды с помощью markdown-файлов. Размещайте их в:

  • Глобально: ~/.config/opencode/commands/
  • Для проекта: .opencode/commands/
~/.config/opencode/commands/test.md
---
description: Run tests with coverage
agent: build
model: anthropic/claude-3-5-sonnet-20241022
---
 
Run the full test suite with coverage report and show any failures.
Focus on the failing tests and suggest fixes.

Имя markdown-файла становится именем команды. Например, test.md позволяет запустить:

/test

Настройка промпта

Промпты для пользовательских команд поддерживают несколько специальных плейсхолдеров и синтаксис.


Аргументы

Передавайте аргументы командам с помощью плейсхолдера $ARGUMENTS.

.opencode/commands/component.md
---
description: Create a new component
---
 
Create a new React component named $ARGUMENTS with TypeScript support.
Include proper typing and basic structure.

Запустите команду с аргументами:

/component Button

И $ARGUMENTS будет заменён на Button.

Вы также можете обращаться к отдельным аргументам с помощью позиционных параметров:

  • $1 - Первый аргумент
  • $2 - Второй аргумент
  • $3 - Третий аргумент
  • И так далее...

Например:

.opencode/commands/create-file.md
---
description: Create a new file with content
---
 
Create a file named $1 in the directory $2
with the following content: $3

Запустите команду:

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

Это заменяет:

  • $1 на config.json
  • $2 на src
  • $3 на { "key": "value" }

Вывод shell

Используйте !command, чтобы внедрить вывод bash-команды в ваш промпт.

Например, чтобы создать пользовательскую команду, которая анализирует покрытие тестами:

.opencode/commands/analyze-coverage.md
---
description: Analyze test coverage
---
 
Here are the current test results:
!`npm test`
 
Based on these results, suggest improvements to increase coverage.

Или чтобы просмотреть недавние изменения:

.opencode/commands/review-changes.md
---
description: Review recent changes
---
 
Recent git commits:
!`git log --oneline -10`
 
Review these changes and suggest any improvements.

Команды выполняются в корневой директории вашего проекта, и их вывод становится частью промпта.


Ссылки на файлы

Включайте файлы в вашу команду, используя @, а затем имя файла.

.opencode/commands/review-component.md
---
description: Review component
---
 
Review the component in @src/components/Button.tsx.
Check for performance issues and suggest improvements.

Содержимое файла автоматически включается в промпт.


Параметры

Рассмотрим параметры конфигурации подробнее.


Template

Параметр template определяет промпт, который будет отправлен LLM при выполнении команды.

opencode.json
{
  "command": {
    "test": {
      "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes."
    }
  }
}

Это обязательный параметр конфигурации.


Description

Используйте параметр description, чтобы дать краткое описание того, что делает команда.

opencode.json
{
  "command": {
    "test": {
      "description": "Run tests with coverage"
    }
  }
}

Это отображается как описание в TUI, когда вы вводите команду.


Agent

Используйте конфигурацию agent, чтобы опционально указать, какой агент должен выполнять эту команду. Если это субагент, команда по умолчанию вызовет субагента. Чтобы отключить это поведение, установите subtask в false.

opencode.json
{
  "command": {
    "review": {
      "agent": "plan"
    }
  }
}

Это необязательный параметр конфигурации. Если не указан, по умолчанию используется ваш текущий агент.


Subtask

Используйте булево значение subtask, чтобы принудительно заставить команду вызвать субагента. Это полезно, если вы хотите, чтобы команда не загрязняла ваш основной контекст, и заставит агента действовать как субагент, даже если в конфигурации агента для mode установлено значение primary.

opencode.json
{
  "command": {
    "analyze": {
      "subtask": true
    }
  }
}

Это необязательный параметр конфигурации.


Model

Используйте конфигурацию model, чтобы переопределить модель по умолчанию для этой команды.

opencode.json
{
  "command": {
    "analyze": {
      "model": "anthropic/claude-3-5-sonnet-20241022"
    }
  }
}

Это необязательный параметр конфигурации.


Встроенные

opencode включает несколько встроенных команд, таких как /init, /undo, /redo, /share, /help; подробнее.

Примечание: Пользовательские команды могут переопределять встроенные команды.

Если вы определите пользовательскую команду с тем же именем, она переопределит встроенную команду.