y83 code / инструмент

Политики

Экран «Политики» показывает, что именно разрешено агенту: доверенные проекты, правила разрешений, политику выполнения команд и подключённые MCP-серверы — всё это хранится в ~/.codex/config.toml и управляет песочницей Codex.

раздел реестра
Codex
код
381 строк в 1 файлах
документ
21-policies.md
Раздел: Codex
Идентификатор: policies · Экран: ui/tools/PoliciesScreen.kt (381)
Снимок: 2026-10-11

1. Зачем и что это

Экран только для чтения с удалением: он показывает разобранный конфиг и позволяет убрать конкретное правило. Создание и правка политик идут через экран MCP или вручную в конфиге.

Отдельное внимание — системные значения approval_policy и sandbox_mode: они показываются отдельной карточкой «No permission prompts» и удалить их нельзя.

2. Как попасть

Хаб инструментов → секция Codex → карточка «Политики» (hub_policies_title, подпись «Права Codex и поведение песочницы», тайл — «Политики»).

Откуда ещёПуть
Мостapp_navigate с screen: "policies"

Маршрут: Screen.kt:136 ("policies" -> Screen.CodexPolicies) → MainRouter.kt:311.

Шапка — терминальная codex@policies :~$, в meta видно «N rules», текущие approval и sandbox.

3. Экран: элементы и действия

ЭлементЧто делаетГде в коде
Кнопка RefreshПеречитать конфигload()
Карточка «No permission prompts»Системные approval_policy и sandbox_modeSystemCard
Список правилСгруппирован по типуpolicyGroups(policies)
Карточка правилаТип, детали, значение, кнопка удаленияPolicyCard
Диалог удаленияПоказывает значение, спрашивает подтверждениеConfirmDeleteDialog
Пустое состояние«No saved permission rules»—
Карточка ошибкиТекст ошибки + повторErrorState

Группы и их порядок (policyGroups):

ТипЗаголовокИсточник в конфиге
projectTrusted projects[projects."<путь>"] с ключом trust_level
permissionsPermissions[permissions] (allow, deny, network)
execExec policy[exec_policy]
mcpMCP servers[mcp_servers."<имя>"] с ключом command

4. Возможности подробно

Разбор конфига

Backend парсит ~/.codex/config.toml построчно (parsePolicies):

  • пустые строки и #-комментарии пропускаются;
  • строки [секция] запоминаются как текущая секция;
  • top-level ключи (approval_policy, sandbox_mode) отдаются отдельно, не как правила;
  • секреты фильтруются: isSecretKey отбрасывает любой ключ, содержащий token, authorization, secret, apikey, api_key — чтобы токены не утекли в список на экране;
  • [permissions] переводит ключи в человеческие названия: allow → «Allowed tools», deny → «Denied tools», network → «Network access»;
  • дедупликация по короткому id (shortID = sha1 от type|section|key|value);
  • сортировка по типу, затем по деталям.

Удаление правила

DeletePolicy (DELETE /api/v1/settings/policies) ищет строку точным совпадением section/key/value. Клиент не может подсунуть произвольный путь: совпадение строгое, иначе 404 «политика не найдена».

Особые случаи:

  • системные approval_policy и sandbox_mode удалить нельзя — 400 «системные политики не удаляются»;
  • файл переписывается атомарно (atomicWriteFile через временный файл с правами 0o600);
  • после записи backend перезапускает codex app-server, чтобы новый конфиг подхватился; ошибка рестарта логируется как Warn, но не отменяет удаление.

Системные значения

Карточка «No permission prompts» показывает approval_policy и sandbox_mode. Пояснение на карточке прямо говорит: approval_policy = "never" означает, что Codex выполняет инструменты и MCP-серверы, не спрашивая разрешения.

5. Данные: БД, файлы, настройки

ЧтоГде лежитКак меняетсяКто читает
Политики~/.codex/config.tomlУдаление через backend; правка — вручную или через экран MCPCodex app-server
Права на файл0o600 после атомарной записиatomicWriteFileСистема

БД не используется: экран — тонкая проекция конфига.

6. Backend: REST/роуты

Метод и путьНазначениеОбработчик
GET /api/v1/settings/policiesпрочитать конфиг, вернуть approval_policy, sandbox_mode, список правилwg.Policies, backend/internal/handlers/webget/policies.go:39
DELETE /api/v1/settings/policiesудалить одно правило и перезапустить codexwg.DeletePolicy, там же:73

Роуты: backend/internal/api/v1/routes.go:105–106. Ответ GET также содержит path (путь к конфигу) и exists — если файла нет, policies будет пустым, но запрос вернёт 200.

7. Мост и MCP

ЧтоКакПримечание
Открыть экранapp_navigate с screen: "policies"BridgeScreenCatalog

MCP-тулов для чтения политик нет. Агент может прочитать конфиг через config/read (app-server) или через file_read в профиле /mcp.

8. Настройки, конфиг, квоты и лимиты

ПараметрЗначениеГде задаётся
Групп правил4 (project, permissions, exec, mcp)policyGroups
Права на конфиг0o600atomicWriteFile
Системные ключиapproval_policy, sandbox_modecodexConfigPath

9. Ловушки и ограничения

  • Экран только читает и удаляет. Создать или изменить значение правила здесь нельзя — это делается через экран MCP (config/value/write) или вручную в конфиге.
  • Удаление правила перезапускает codex app-server. Активные треды при этом могут прерваться — это цена применения нового конфига.
  • MCP-серверы не удаляются. Для типа mcp стоит removable: false: там показывается команда запуска, а сам сервер настраивается на экране MCP.
  • Секреты не показываются. Ключи с token, secret, apikey и подобные отфильтрованы на backend — в списке их не будет.
  • Системные политики удалить нельзя — 400 «системные политики не удаляются».
  • Правила без раздела игнорируются парсером: top-level отдаётся отдельными полями, а не карточками.
  • После удаления список перечитывается (load()), поэтому исчезнувшее правило сразу пропадает из экрана.

10. Источники правды

  • app/src/main/java/com/y83/ws/ui/tools/PoliciesScreen.kt — экран, группировка, карточки.
  • app/src/main/java/com/y83/ws/data/api/ToolsDtos.kt — CodexPolicyDto, DeletePolicyReq.
  • backend/internal/handlers/webget/policies.go — Policies, DeletePolicy, parsePolicies.
  • backend/internal/api/v1/routes.go:105–106 — роуты.
  • ~/.codex/config.toml — фактическое хранилище политик.

Источник: docs/project/hub/21-policies.md · Codex · 381 строк в 1 файлах. Страница собирается из документации проекта при сборке сайта.