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

Команды

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

Пользовательские команды позволяют указать промпт, который будет выполняться при запуске этой команды в 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; подробнее.

Примечание

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

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