canUseTool для обработки всего остального во время выполнения.
На этой странице рассматриваются режимы разрешений и правила. Чтобы создать интерактивные потоки утверждения, где пользователи одобряют или отклоняют запросы инструментов во время выполнения, см. Обработка утверждений и ввода пользователя.
Как оцениваются разрешения
Когда Claude запрашивает инструмент, SDK проверяет разрешения в следующем порядке:1
Hooks
Сначала запустите hooks. Hook может отклонить вызов полностью или передать его дальше. Hook, который возвращает
allow, не пропускает правила deny и ask ниже; они оцениваются независимо от результата hook.2
Правила deny
Проверьте правила
deny (из disallowed_tools и settings.json). Если правило deny совпадает, инструмент блокируется, даже в режиме bypassPermissions. Записи с простым названием, такие как Bash, удаляют инструмент из контекста Claude перед началом этой оценки, поэтому на этом шаге проверяются только правила с областью действия, такие как Bash(rm *).3
Правила ask
Проверьте правила
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
Режим разрешений
Примените активный режим разрешений.
bypassPermissions одобряет всё, что достигает этого шага. acceptEdits одобряет операции с файлами. plan маршрутизирует инструменты file-edit и shell-write к вашему callback canUseTool независимо от правил allow, поэтому операции записи не могут быть автоматически одобрены во время планирования. Другие режимы проходят дальше.5
Правила allow
Проверьте правила
allow (из allowed_tools и settings.json). Если правило совпадает, инструмент одобрен.6
Callback canUseTool
Если не разрешено ни одним из вышеперечисленных, вызовите ваш callback
canUseTool для принятия решения. В режиме dontAsk этот шаг пропускается и инструмент отклоняется.canUseTool, который эта последовательность оценки никогда не может достичь, TypeScript 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: запустите пользовательский код для разрешения, отклонения или изменения запросов инструментов. См. Управление выполнением с помощью hooks.
- Callback canUseTool: запросите у пользователей утверждение во время выполнения, когда ни один из предыдущих шагов не разрешит вызов. См. Обработка утверждений и ввода пользователя.
Правила allow и deny
allowed_tools и disallowed_tools (TypeScript: allowedTools / disallowedTools) добавляют записи в списки правил allow и deny в потоке оценки выше. Правила allow влияют только на одобрение: инструмент, не указанный в allowed_tools, всё ещё доступен для Claude и переходит к режиму разрешений. Правила deny ведут себя по-разному в зависимости от того, называют ли они инструмент или определяют шаблон в пределах одного.
Правила allow принимают глобы имён инструментов только после буквального префикса
mcp__<server>__. Сегмент сервера должен быть свободен от глобов, чтобы правило называло конкретный сервер, который вы настроили: mcp__puppeteer__* соответствует каждому инструменту с сервера puppeteer, и mcp__github__get_* соответствует его инструментам get_. Неякорированная запись, такая как allowed_tools=["*"] или allowed_tools=["mcp__*"], игнорируется с предупреждением при запуске и не одобряет ничего автоматически.
Правила с областью действия для Read и Edit принимают шаблон пути. Правила Edit(path) управляют всеми встроенными инструментами, которые записывают файлы, включая Write и NotebookEdit; правило Write(path) никогда не совпадает с проверками разрешений файлов.
Используйте //path для абсолютного пути файловой системы: правило deny Edit(//secrets/**) блокирует записи в любом месте под /secrets на диске. С одной ведущей косой чертой Edit(/secrets/**) якорируется в источнике правила. Для правил, переданных через allowed_tools или disallowed_tools, это означает рабочий каталог сеанса, поэтому правило не блокирует /secrets на диске. См. Правила Read и Edit для четырёх форм якорей и того, как правила из файлов параметров разрешаются.
Для заблокированного агента объедините allowedTools с permissionMode: "dontAsk". Указанные инструменты одобрены, кроме всегда запрашиваемых инструментов в предупреждении выше; всё остальное отклоняется полностью вместо запроса:
.claude/settings.json. Эти правила читаются, когда включен источник параметра project, что происходит для параметров query() по умолчанию. Если вы явно установите setting_sources (TypeScript: settingSources), включите "project", чтобы они применялись. См. Параметры разрешений для синтаксиса правил.
Режимы разрешений
Режимы разрешений обеспечивают глобальный контроль над использованием инструментов Claude. Вы можете установить режим разрешений при вызовеquery() или изменить его динамически во время сеансов потоковой передачи.
Доступные режимы
SDK поддерживает эти режимы разрешений:Установка режима разрешений
Вы можете установить режим разрешений один раз при запуске запроса или изменить его динамически во время активного сеанса.- При запросе
- Во время потоковой передачи
Передайте
permission_mode (Python) или permissionMode (TypeScript) при создании запроса. Этот режим применяется для всего сеанса, если не изменён динамически.Детали режимов
Режим принятия редактирования (acceptEdits)
Автоматически одобряет операции с файлами, чтобы Claude мог редактировать код без запроса. Другие инструменты (например, команды Bash, которые не являются операциями с файловой системой) по-прежнему требуют обычных разрешений.
Автоматически одобренные операции:
- Редактирование файлов (инструменты Edit, Write)
- Команды файловой системы:
mkdir,touch,rm,rmdir,mv,cp,sed
additionalDirectories. Пути вне этой области и записи в защищённые пути по-прежнему запрашивают разрешение.
Используйте, когда: вы доверяете редактированию Claude и хотите более быстрой итерации, например во время прототипирования или при работе в изолированном каталоге.
Режим без запроса (dontAsk)
Преобразует любой запрос разрешения в отклонение. Инструменты, предварительно одобренные allowed_tools, правилами allow в settings.json или hook, работают нормально. Инструменты соединителя которые ваша организация установила на ask и инструменты, требующие взаимодействия с пользователем, отклоняются даже если правило allow совпадает. Всё остальное отклоняется без вызова canUseTool.
Используйте, когда: вы хотите фиксированную, явную поверхность инструментов для автономного агента и предпочитаете жёсткое отклонение молчаливому полаганию на отсутствие canUseTool.
Режим обхода разрешений (bypassPermissions)
Автоматически одобряет все использования инструментов без запросов. Hooks всё ещё выполняются и могут блокировать операции при необходимости.
Режим планирования (plan)
Claude исследует кодовую базу и создаёт план без редактирования исходных файлов. Инструменты только для чтения работают как в режиме по умолчанию. Редактирование файлов никогда не одобряется автоматически в режиме планирования, даже если правило allow совпадает. Вместо этого они запрашиваются через ваш callback canUseTool. Claude может использовать AskUserQuestion для уточнения требований перед завершением плана. См. Обработка утверждений и ввода пользователя для обработки этих запросов.
Используйте, когда: вы хотите, чтобы Claude предложил изменения без их выполнения, например при проверке кода или когда вам нужно одобрить изменения перед их внесением.
Связанные ресурсы
Для других шагов в потоке оценки разрешений:- Обработка утверждений и ввода пользователя: интерактивные запросы утверждения и уточняющие вопросы
- Руководство по hooks: запуск пользовательского кода в ключевых точках жизненного цикла агента
- Правила разрешений: декларативные правила allow/deny в
settings.json