canUseTool для обработки всего остального во время выполнения.
Как оцениваются разрешения
Когда Claude запрашивает инструмент, SDK проверяет разрешения в следующем порядке:1
Hooks
Сначала запустите hooks. Hook может отклонить вызов полностью или пропустить его дальше. Hook, который возвращает
allow, не пропускает правила deny и ask ниже; они оцениваются независимо от результата hook. Hook PreToolUse с allow также не может одобрить удаление rm или rmdir, нацеленное на критический путь. О том, что делает такой allow в режиме планирования, см. Hook approvals in plan mode.2
Deny rules
Проверьте правила
deny (из disallowed_tools и settings.json). Если правило deny совпадает, инструмент блокируется, даже в режиме bypassPermissions. Правила deny с простым названием, такие как Bash, удаляют инструмент из контекста Claude перед началом этой оценки, поэтому на этом шаге проверяются только правила с областью действия, такие как Bash(rm *).3
Ask rules
Проверьте правила
ask из settings.json. Если правило ask совпадает, вызов передается в ваш callback canUseTool для подтверждения, даже в режиме bypassPermissions.Инструменты, требующие взаимодействия с пользователем, ведут себя так же: AskUserQuestion и MCP инструменты, сервер которых устанавливает _meta["anthropic/requiresUserInteraction"], всегда передаются в callback, даже когда совпадает правило allow. В режиме dontAsk оба случая отклоняются вместо этого, потому что этот режим никогда не запрашивает. Аннотация MCP требует Claude Code v2.1.199 или позже.Инструменты claude.ai connector, для которых ваша организация установила ask, также покидают поток на этом шаге. Каждый вызов передается в callback, даже в режиме bypassPermissions и даже когда совпадает правило allow. Callback получает причину Your organization requires approval for this tool. В режиме dontAsk вызов отклоняется вместо этого, потому что этот режим никогда не запрашивает.4
Permission mode
Примените активный режим разрешений:
- В режиме
bypassPermissionsClaude Code одобряет все, что достигает этого шага, кроме удаленийrmиrmdir, нацеленных на критический путь, которые передаются вместо этого. - В режиме
acceptEditsClaude Code одобряет операции с файлами, перечисленные в разделе Accept edits mode. - В режиме
planClaude Code отправляет инструменты редактирования файлов и записи в shell в ваш callbackcanUseToolнезависимо от правил allow, поэтому операции записи не могут быть автоматически одобрены при планировании. - В других режимах запрос передается дальше.
5
Allow rules
Проверьте правила
allow (из allowed_tools и settings.json). Если правило совпадает, инструмент одобряется. Вызов, который инструмент одобряет самостоятельно, также разрешается на этом шаге без необходимости в правиле: например, чтение файла в ваших рабочих каталогах или команда Bash только для чтения.Удаления rm и rmdir, нацеленные на критический путь, никогда не одобряются правилом allow. Достигают ли они вашего callback, зависит от режима разрешений: например, в сессии Agent SDK в режиме auto Claude Code отклоняет их по умолчанию без вызова. Таблица режима Critical paths перечисляет, что каждый режим с ними делает.Правило allow не одобряет чтение из сетевого пути.6
canUseTool callback
Если ни один из вышеперечисленных шагов не разрешил вызов, вызовите ваш callback
canUseTool для принятия решения. В режиме dontAsk этот шаг пропускается и инструмент отклоняется.В TypeScript SDK, если вы установите permissionPrompts: 'none', ваш callback не вызывается на этом шаге. Hook PermissionRequest все еще получает возможность принять решение, и если он этого не делает, Claude Code отклоняет вызов. Опция требует Claude Code v2.1.259 или позже.canUseTool в конфигурацию, где TypeScript SDK ожидает, что порядок оценки автоматически одобрит вызовы перед консультацией callback, SDK выдает предупреждение процесса Node.js один раз при построении запроса. Код предупреждения — CLAUDE_SDK_CAN_USE_TOOL_SHADOWED. Две конфигурации вызывают его:
permissionMode: 'bypassPermissions', который автоматически одобряет каждый вызов, достигающий шага режима разрешений, кроме действий, которые ни один режим не одобряет автоматически- Каждая запись
allowedToolsбез спецификатора, такая как"Read", которая автоматически одобряет весь этот инструмент перед консультацией callback, кроме действий, которые ни один режим не одобряет автоматически и чтения из сетевых путей
Bash(ls *), и режим acceptEdits не вызывают его, и правила allow из файлов настроек не видны для проверки.
Слушайте с помощью process.on('warning', ...) и сопоставьте код для логирования или подавления его. Чтобы контролировать каждый вызов инструмента независимо от режима и правил, используйте вместо этого hook PreToolUse.
Эта страница сосредоточена на правилах allow и deny и режимах разрешений. Для других шагов:
- Hooks: запустите пользовательский код для разрешения, отклонения или изменения запросов инструментов. См. Control execution with hooks.
- canUseTool callback: запросите у пользователей одобрение во время выполнения, когда ни один более ранний шаг не разрешит вызов. См. Handle approvals and user input.
Правила разрешения и запрета
allowed_tools и disallowed_tools (TypeScript: allowedTools / disallowedTools) добавляют записи в списки правил разрешения и запрета в потоке оценки выше. Если вы назовете один из инструментов отслеживания задач в allowed_tools, Claude Code также включает сеанс. Любой другой инструмент, не указанный в allowed_tools, по-прежнему доступен Claude, и вызов к нему, требующий одобрения, переходит в режим разрешений. Правила запрета ведут себя по-разному в зависимости от того, называют ли они инструмент или определяют шаблон в пределах одного.
Правила разрешения принимают глобы имен инструментов только после буквального префикса
mcp__<server>__. Сегмент сервера должен быть свободен от глобов, чтобы правило называло конкретный сервер, который вы настроили: mcp__puppeteer__* соответствует каждому инструменту с сервера puppeteer, а mcp__github__get_* соответствует его инструментам get_. Неякорированная запись, такая как allowed_tools=["*"] или allowed_tools=["mcp__*"], игнорируется с предупреждением при запуске и не одобряет ничего автоматически.
Правила с областью действия для Read и Edit принимают шаблон пути. Правила Edit(path) управляют всеми встроенными инструментами, которые записывают файлы, включая Write и NotebookEdit; правило Write(path) никогда не совпадает с проверками разрешений файлов.
Используйте //path для абсолютного пути файловой системы: правило запрета Edit(//secrets/**) блокирует записи в любом месте под /secrets на диске. С одной ведущей косой чертой Edit(/secrets/**) якорируется в источнике правила. Для правил, переданных через allowed_tools или disallowed_tools, это означает рабочий каталог сеанса, поэтому правило не блокирует /secrets на диске. См. Правила Read и Edit для четырех форм якорей и того, как правила из файлов параметров разрешаются.
Для заблокированного агента объедините allowedTools с permissionMode: "dontAsk":
default, выполняются независимо от того, указаны ли они в списке, такие как команды Bash только для чтения, инструменты, такие как Agent, которые не спрашивают перед запуском, и чтение файлов в ваших рабочих каталогах. Чтобы полностью удалить инструмент из запроса, добавьте его простое имя в disallowedTools.
Вы также можете настроить правила разрешения, запрета и запроса декларативно в .claude/settings.json. Эти правила читаются, когда источник параметра project включен, что он есть для параметров query() по умолчанию. Если вы явно установите setting_sources (TypeScript: settingSources), включите "project", чтобы они применялись. См. Параметры разрешений для синтаксиса правил.
Режимы разрешений
Режимы разрешений обеспечивают глобальный контроль над тем, как Claude использует инструменты. Вы можете установить режим разрешений при вызовеquery() или изменить его динамически во время сеансов потоковой передачи.
Если вы не установите режим, Claude Code выбирает начальный режим разрешений по правилам в Какой режим начинается в сеансе:
permissions.defaultModeиз файлов параметров сеанса, когда он применяется- В противном случае встроенное значение по умолчанию, которое может быть режимом auto
Bash, как описано в Как режим auto оценивает действия. Если ваше приложение полагается на режим default или на такое правило, передайте default явно.
До TypeScript Agent SDK v0.3.286 пропуск permissionMode был эквивалентен передаче default.
Доступные режимы
SDK поддерживает эти режимы разрешений:Установка режима разрешений
Вы можете установить режим разрешений один раз при запуске запроса или изменить его динамически во время активного сеанса.- При запросе
- Во время потоковой передачи
Передайте
permission_mode (Python) или permissionMode (TypeScript) при создании запроса.Детали режимов
Режим принятия редактирования (acceptEdits)
Автоматически одобряет операции с файлами, чтобы Claude мог редактировать код без запроса. Другие инструменты (такие как команды Bash, которые не являются операциями с файловой системой) по-прежнему требуют обычных разрешений.
Автоматически одобренные операции:
- Редактирование файлов (инструменты Edit, Write)
- Команды файловой системы:
mkdir,touch,rm,rmdir,mv,cp,sed
additionalDirectories. В режиме acceptEdits Claude Code не одобряет запрос автоматически, когда Claude:
- Работает с путем вне этой области
- Записывает в защищенный путь
- Удаляет критический путь с помощью
rmилиrmdir
Режим не спрашивать (dontAsk)
Преобразует любой запрос разрешения в отклонение без вызова canUseTool. Инструменты, предварительно одобренные allowed_tools, правилами разрешения в settings.json или хуком, выполняются нормально, как и вызовы, не требующие одобрения в режиме default, такие как чтение файлов внутри рабочих каталогов и вызовы Agent. Инструменты коннектора, установленные вашей организацией на ask, инструменты, требующие взаимодействия с пользователем, чтение из сетевых путей и удаления rm и rmdir, нацеленные на критический путь, отклоняются, даже когда правило разрешения совпадает. Разрешение хука PreToolUse также не снимает запрет ни на удаление критического пути, ни на чтение из сетевого пути.
Используйте когда: вы хотите фиксированную, явную поверхность инструментов для headless агента и предпочитаете жесткое отклонение молчаливому полаганию на отсутствие canUseTool.
Режим обхода разрешений (bypassPermissions)
Автоматически одобряет использование инструментов без запроса, за исключением случаев, перечисленных в предупреждении ниже. Hooks по-прежнему выполняются и могут блокировать операции при необходимости. На Linux и macOS Claude Code отказывается запускаться в этом режиме от имени root или под sudo вне признанной песочницы, и запрос завершается ошибкой перед первым ходом.
Режим планирования (plan)
Claude исследует кодовую базу и создает план без редактирования исходных файлов. Инструменты только для чтения выполняются так же, как в режиме разрешений default.
Редактирование файлов никогда не одобряется автоматически в режиме планирования, даже когда правило разрешения совпадает или хук PreToolUse возвращает allow. Вместо этого они запрашиваются через ваш обратный вызов canUseTool. В Claude Code v2.1.212 или более поздней версии команды оболочки, которые изменяют файлы, такие как touch и rm, достигают вашего обратного вызова canUseTool таким же образом.
В TypeScript SDK, если вы установите allowDangerouslySkipPermissions: true вместе с permissionMode: 'plan', редактирование файлов и команды оболочки, которые изменяют файлы, по-прежнему достигают вашего обратного вызова canUseTool. Опция позволяет вам позже переключиться на bypassPermissions с помощью setPermissionMode().
Claude может использовать AskUserQuestion для уточнения требований перед финализацией плана. См. Обработка одобрений и ввода пользователя для обработки этих запросов.
Используйте когда: вы хотите, чтобы Claude предложил изменения без их выполнения, например при проверке кода или когда вам нужно одобрить изменения перед их внесением.
Авторежим (auto)
Модель-классификатор проверяет действия, такие как команды оболочки и сетевые запросы, перед их выполнением и разрешает или блокирует каждое проверяемое действие. О моделях и провайдерах, которые требуются для авторежима, и о порядке, в котором он оценивает действия, см. Устранение запросов разрешений с помощью авторежима.
Если вы переключаете сессию, находящуюся в авторежиме, на модель, которую авторежим не поддерживает, с помощью set_model(), setModel() или applyFlagSettings(), сессия переходит в режим default:
- Что вы увидите: сообщение
systemс подтипомstatusиpermissionMode, установленным в"default", которое TypeScript SDK типизирует какSDKStatusMessage. С этого момента вызовы, требующие подтверждения и не соответствующие никакому правилу разрешения, достигают вашего обратного вызоваcanUseTool. - Чтобы вернуться в авторежим: переключитесь на поддерживаемую модель, затем вызовите
set_permission_mode("auto")илиsetPermissionMode("auto"). Если вы переключите модель обратно без этого вызова, сессия останется в режимеdefault. Пока активна неподдерживаемая модель, вызов завершается ошибкойCannot set permission mode to auto: auto mode unavailable for this model.
default после вызова set_model(), setModel() или applyFlagSettings() требует Claude Code v2.1.299 или более поздней версии.
Связанные ресурсы
Для других этапов потока оценки разрешений:- Обработка одобрений и ввода пользователя: интерактивные подсказки одобрения и уточняющие вопросы
- Руководство hooks: запуск пользовательского кода в ключевых точках жизненного цикла агента
- Правила разрешений: декларативные правила разрешения/запрета в
settings.json