Перейти к содержимому

Команды

Своя команда превращает часто используемый запрос в слеш-команду. Создайте .opencode/commands/review.md — в TUI появится /review:

.opencode/commands/review.md
Review $ARGUMENTS for bugs and missing tests.
/review src/auth.ts

ZubrCode отправит Review src/auth.ts for bugs and missing tests. как обычный запрос. Встроенные команды /init (описать проект в AGENTS.md) и /review (ревью текущих изменений) уже есть — своя команда с таким именем их заменит.

Глобальные команды — в ~/.config/zubrcode/commands/, проектные — в .opencode/commands/. Обнаруживаются только .md; вложенный путь становится именем через / (.opencode/commands/team/review.md → /team/review). Старый каталог command/ тоже читается, но новые файлы кладите в commands/.

Тело Markdown — это шаблон запроса, frontmatter несёт метаданные:

.opencode/commands/review.md
---
description: Review code for correctness
agent: plan
model: zubriq/zubr-coder
---
Review $ARGUMENTS. Report bugs first.

То же определяется в JSON — в opencode.json или opencode.jsonc; там шаблон задаётся полем template:

{
"commands": {
"review": {
"description": "Review code for correctness",
"template": "Review $ARGUMENTS. Report bugs first."
}
}
}
Поле Обязательно Поведение
template только JSON шаблон запроса
description нет текст в списках команд
agent нет агент, которым выполнится команда
model нет модель провайдер/модель (можно с #вариант)
subagent нет true — в фоновой дочерней сессии; false — в текущей
subtask нет устаревший синоним subagent

В Markdown template во frontmatter не пишется — его даёт тело файла.

$ARGUMENTS — вся строка аргументов как есть; $1, $2 и далее — позиции (слова в кавычках группируются, кавычки снимаются). Самый большой номер забирает свой аргумент и всё, что после него; недостающие позиции становятся пустыми строками.

.opencode/commands/check.md
Check $1. Focus on $2.

Если в шаблоне нет ни $ARGUMENTS, ни позиций, непустые аргументы добавляются после пустой строки.

Блок !`команда` выполняется при подстановке шаблона, а его вывод вставляется в запрос:

.opencode/commands/review-diff.md
Review this diff:
!`git diff --stat && git diff`

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

.opencode/commands/history.md
Summarize these commits:
!`git log --oneline -$1`

@путь в сохранённых шаблонах не раскрывается — это обычный текст запроса. Чтобы приложить файл, добавьте его в поле ввода при вызове команды.

Команда раскрывает аргументы и блоки оболочки и отправляет готовый запрос. По умолчанию она работает в текущей сессии: указанная в agent команда переключает сессию на этого агента перед отправкой. Модель выбирается так:

  1. model команды перекрывает всё остальное.
  2. Иначе берётся модель агента команды, если она задана.
  3. Иначе остаётся модель текущей сессии.

subagent: true выполняет команду в фоновой дочерней сессии: родитель свободен и сохраняет своего агента и модель, а результат приходит ему по завершении. Если поле не указано, дочерняя сессия используется только для агентов с mode: subagent.

Файлы и JSON-команды делят один реестр: более поздний источник заменяет команду с тем же именем. Проектные команды важнее глобальных, ближние к текущей папке — дальше стоящих; своя команда может заменить и встроенную. Файлы команд перечитываются на лету: сохранение обновляет /review без перезапуска.