К содержимому
Действия

Разрешения

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

Начиная с v1.1.1, устаревшая логическая конфигурация tools устарела и была объединена с permission. Старая конфигурация tools по-прежнему поддерживается для обеспечения обратной совместимости.


Каждое правило разрешения разрешается в одно из:

  • "allow" — запуск без одобрения
  • "ask" — запрос на одобрение
  • "deny" — заблокировать действие

Вы можете устанавливать разрешения глобально (с помощью *) и переопределять определенные инструменты.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "*": "ask",
    "bash": "allow",
    "edit": "deny"
  }
}

Вы также можете установить все разрешения одновременно:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": "allow"
}

Для большинства разрешений вы можете использовать объект для применения различных действий на основе входных данных инструмента.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "npm *": "allow",
      "rm *": "deny",
      "grep *": "allow"
    },
    "edit": {
      "*": "deny",
      "packages/web/src/content/docs/*.mdx": "allow"
    }
  }
}

Правила оцениваются по шаблону, при этом выигрывает последнее совпадающее правило. Обычно сначала ставится универсальное правило "*", а после него — более конкретные правила.

В шаблонах разрешений используется простое сопоставление с подстановочными знаками:

  • * соответствует нулю или более любого символа.
  • ? соответствует ровно одному символу
  • Все остальные символы совпадают буквально

Вы можете использовать ~ или $HOME в начале шаблона для ссылки на ваш домашний каталог. Это особенно полезно для правил external_directory.

  • ~/projects/* -> /Users/username/projects/*
  • $HOME/projects/* -> /Users/username/projects/*
  • ~ -> /Users/username

Используйте external_directory, чтобы разрешить вызовы инструментов, затрагивающие пути за пределами рабочего каталога, в котором был запущен opencode. Это применимо к любому инструменту, который принимает путь в качестве входных данных (например, read, edit, glob, grep и многие команды bash).

Расширение дома (например, ~/...) влияет только на запись шаблона. Он не делает внешний путь частью текущего рабочего пространства, поэтому пути за пределами рабочего каталога все равно должны быть разрешены через external_directory.

Например, это позволяет получить доступ ко всему, что находится под ~/projects/personal/:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    }
  }
}

Любой каталог, разрешенный здесь, наследует те же настройки по умолчанию, что и текущая рабочая область. Поскольку для read по умолчанию установлено значение allow, чтение также разрешено для записей под external_directory, если оно не переопределено. Добавьте явные правила, когда инструмент должен быть ограничен в этих путях, например, блокировать редактирование при сохранении чтения:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    },
    "edit": {
      "~/projects/personal/**": "deny"
    }
  }
}

Держите список сосредоточенным на доверенных путях и добавляйте дополнительные правила разрешения или запрета по мере необходимости для других инструментов (например, bash).


Разрешения opencode привязаны к имени инструмента, а также к нескольким мерам безопасности:

  • read — чтение файла (соответствует пути к файлу)
  • edit — все модификации файлов (охватывает edit, write, patch)
  • glob — подстановка файла (соответствует шаблону подстановки)
  • grep — поиск по контенту (соответствует шаблону регулярного выражения)
  • bash — запуск shell-команд (соответствует проанализированным командам, например git status --porcelain)
  • task — запуск субагентов (соответствует типу субагента)
  • skill — загрузка навыка (соответствует названию навыка)
  • lsp — выполнение запросов LSP (в настоящее время не детализированных)
  • webfetch — получение URL-адреса (соответствует URL-адресу)
  • websearch — поиск в сети (соответствует запросу)
  • external_directory — срабатывает, когда инструмент касается путей за пределами рабочего каталога проекта.
  • doom_loop — срабатывает, когда один и тот же вызов инструмента повторяется 3 раза с одинаковым вводом.

Если вы ничего не укажете, opencode запустится с разрешенных значений по умолчанию:

  • Большинство разрешений по умолчанию имеют значение "allow".
  • doom_loop и external_directory по умолчанию равны "ask".
  • read — это "allow", но файлы .env по умолчанию запрещены:
opencode.json
{
  "permission": {
    "read": {
      "*": "allow",
      "*.env": "deny",
      "*.env.*": "deny",
      "*.env.example": "allow"
    }
  }
}

Когда opencode запрашивает одобрение, пользовательский интерфейс предлагает три результата:

  • once — утвердить только этот запрос
  • always — одобрять будущие запросы, соответствующие предложенным шаблонам (до конца текущего сеанса opencode).
  • reject — отклонить запрос

Набор шаблонов, которые одобрит always, предоставляется инструментом (например, разрешения bash обычно включают в белый список безопасный префикс команды, такой как git status*).


Вы можете переопределить разрешения для каждого агента. Разрешения агента объединяются с глобальной конфигурацией, и правила агента имеют приоритет. Подробнее о разрешениях агента.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "git commit *": "deny",
      "git push *": "deny",
      "grep *": "allow"
    }
  },
  "agent": {
    "build": {
      "permission": {
        "bash": {
          "*": "ask",
          "git *": "allow",
          "git commit *": "ask",
          "git push *": "deny",
          "grep *": "allow"
        }
      }
    }
  }
}

Вы также можете настроить разрешения агента в Markdown:

~/.config/opencode/agents/review.md
---
description: Code review without edits
mode: subagent
permission:
  edit: deny
  bash: ask
  webfetch: deny
---

Only analyze code and suggest changes.