Перейти к содержанию

Полномочия

Слой полномочий — надстройка над правами инструментов. Право в нём выражается грантом «действие × цель» с эффектом «Разрешить», «Спросить» или «Запретить». Полномочия приходят контентом — пакетами расширений, — а не задаются вручную в интерфейсе.

Слой отвечает на вопрос «кому что можно через агента»: какие действия роли допустимы на каких целях. Он работает поверх обычных прав и режимов сессии, а не вместо них.

Слой только сужает права

Полномочия не могут разрешить то, что запрещено правами инструментов. Если правило прав говорит «запрет», грант «Разрешить» ничего не меняет: остаётся самый строгий из двух ответов.

Три режима

Режим Что происходит Когда нужен
Выключен слой не участвует в решениях по умолчанию
«Только журнал» решение считается и пишется в журнал, но не применяется миграция: видно, что изменится
«Принуждение» решение применяется к вызову инструмента рабочий режим

Включение

Режим задаётся только конфигурацией инстанса — переключателя в интерфейсе нет:

authority:
  enabled: true    # слой включён
  shadow: true     # true — «только журнал», false — принуждение

Те же значения — переменными окружения:

SYNTH_AUTHORITY_ENABLED=true
SYNTH_AUTHORITY_SHADOW=true

По умолчанию слой выключен. При включении он стартует в режиме «только журнал»: это безопасный первый шаг, при котором ничего не блокируется.

Изменения — после перезапуска

Политика читается снимком при старте инстанса. Правка конфигурации, установка пакета с новыми грантами и перевод в «Принуждение» действуют только после перезапуска: в текущем процессе остаётся прежний снимок.

Правила принуждения

  • Запрет сильнее разрешения. Если хотя бы один источник говорит «Запретить», действие не выполняется.
  • Нет гранта — нет права. Неизвестное действие или цель трактуются как отказ, а не как разрешение по умолчанию.
  • «Спросить» не снимается. Режим YOLO отключает подтверждения прав, но не требование полномочий: подтверждение всё равно запрашивается.
  • Субагент не получает больше родителя. Наследование идёт сверху вниз, как и у обычных прав.

Раздел «Полномочия» в админке

Настройки → Администрирование → «Полномочия» — раздел только для чтения. Он показывает, что действует сейчас, но не меняет политику:

  • Режим слоя — ожидаемое состояние: «Принуждение», «Только журнал» или «Выключен».
  • Политика инстанса — общие правила, пришедшие с контентом.
  • Роли и гранты — по каждой роли: домен, гранты с бейджами эффекта «Разрешить / Спросить / Запретить» и источник, то есть пакет, который их поставил.
  • Привязки агентов — какие роли закреплены за агентом и каков его потолок.

Откуда берутся полномочия

Роли, гранты и привязки — это контент. Их поставляет пакет расширения вместе с агентами, скиллами, MCP-серверами и пайплайнами: администратор подтверждает установку пакета, а не собирает политику вручную.

Поэтому в интерфейсе нет форм «добавить грант»: ручная правка разошлась бы с пакетом при следующем обновлении. Нужного гранта нет — значит, его должен принести пакет.

Типичный сценарий миграции

  1. Включите слой в режиме «только журнал»: authority.enabled: true, authority.shadow: true.
  2. Перезапустите инстанс и поработайте как обычно.
  3. Посмотрите журнал решений: что было бы запрещено и где потребовалось бы подтверждение.
  4. Выдайте недостающие гранты — пакетом расширения, а не правкой файлов.
  5. Перезапустите инстанс, чтобы новый контент попал в снимок политики.
  6. Переведите слой в «Принуждение»: authority.shadow: false — и снова перезапустите.

Ограничения

  • Только конфигурация. Runtime-настроек и API для смены режима нет.
  • Раздел только для чтения. Интерфейс показывает состояние, но не управляет им.
  • Снимок при старте. Новые гранты и роли видны после перезапуска.
  • Роли сред — в планах. Часть возможностей слоя, связанная со средами, пока не реализована.

Что дальше