Approval policy и sandbox отвечают на разные вопросы, и путать их - корень многих ошибок. Sandbox отвечает "может ли команда технически сделать это внутри текущей границы". Approval policy отвечает "когда Codex должен остановиться перед действием и спросить". Первое - о физической возможности, второе - о моменте контроля. Одно не заменяет другое: строгий sandbox без разумной политики подтверждений оставляет агента без остановок там, где человек нужен, и наоборот.
Политику подтверждений задают явно, и у неё есть несколько режимов с разным поведением. untrusted автоматически выполняет ограниченный доверенный набор команд, а прочие требуют подтверждения. on-request работает внутри sandbox и запрашивает подтверждение при выходе за границу. never не показывает prompt'ов вовсе: действие либо проходит по политике, либо терпит неудачу. Выбор режима - это выбор того, как часто и на чём именно агент останавливается, чтобы спросить.
Полезно один раз увидеть базовую настройку рядом. Ниже - approval_policy со значением on-request и approvals_reviewer, задающий, кто рассматривает запрос: user или auto_review. К этой форме возвращаются, настраивая, когда именно работа должна прерваться на решение человека. Значение по умолчанию стоит выбирать под контекст: интерактивная локальная работа и неинтерактивный CI требуют разной частоты остановок, и одна политика редко подходит обоим одинаково.
Auto-review - это отдельный механизм рассмотрения, и о его границах важно знать точно. Он не расширяет sandbox: reviewer рассматривает только те действия, которые уже требуют подтверждения, а не открывает новые возможности. При этом сбой разбора и сбой политики закрываются безопасно - в сторону запрета, а не разрешения. Плата за auto_review - дополнительные вызовы модели и расход: рассмотрение стоит токенов, поэтому его включают там, где оно действительно окупается контролем.
Полезно один раз увидеть и гранулярную форму политики. Ниже - объект approval_policy с отдельными переключателями: подтверждение выхода из sandbox, правил, MCP-элиситаций, запроса разрешений и вызова skill. Гранулярность позволяет разрешать или автоматически отклонять конкретные классы действий по отдельности, а не одним грубым режимом. К этой форме возвращаются, когда нужно тонко развести, что проходит само, что спрашивает, а что отклоняется без вопроса.
Гранулярная политика полезна ровно тем, что делает границу явной и объяснимой. Вместо "агент вроде бы спрашивает про опасное" вы получаете конкретный список: вот это требует подтверждения, а это отклоняется автоматически. Такую политику легче ревьюить и труднее случайно ослабить, потому что каждый класс действий назван отдельно. Но и цена ясности - в том, что каждый переключатель нужно понять: разрешая класс действий, вы отвечаете за то, что он открывает.
| Policy | Поведение |
|---|---|
| untrusted | Авто-выполняет ограниченный trusted set; прочее - prompt |
| on-request | Работает внутри sandbox, запрашивает выход за границу |
| never | Без prompt'ов; действие проходит по policy или падает |
| Granular | Отдельно allow/auto-reject по классам действий |
Связка sandbox и approvals работает только вместе, и это стоит держать в голове. Sandbox задаёт физический потолок возможного, approvals - моменты, где человек вмешивается внутри этого потолка. Одобрение действия не расширяет sandbox, а отказ в подтверждении не делает команду технически невозможной - это разные плоскости. Безопасность рождается из их композиции: узкая техническая граница плюс осмысленные точки остановки, а не один из двух механизмов, выкрученный на максимум.
Типичные провалы вокруг approvals предсказуемы. Спутать sandbox и approval policy и ждать от одного того, что даёт другое. Поставить never в интерактиве и лишиться остановок там, где нужен человек. Решить, что auto_review расширяет sandbox или заменяет проверку, - хотя он лишь рассматривает то, что и так требует approval. И включить reviewer, не учтя его расход. Разводите техническую границу и момент остановки, выбирайте режим под контекст и помните: одобрение не расширяет sandbox.
approval_policy = "on-request"
approvals_reviewer = "user"
# Альтернатива для eligible approvals (не расширяет sandbox):
# approvals_reviewer = "auto_review" # добавляет model calls и usage
# Гранулярная форма:
approval_policy = { granular = {
sandbox_approval = true, rules = true, mcp_elicitations = true,
request_permissions = false, skill_approval = false
} }