AmigaОбучение ИИ
Модуль 2 · Настраиваем Claude · урок 4 из 10

Режимы прав

12 мин чтения▶ есть видеоверсия

Каждое подтверждение «да, выполни команду» — это секунда вашего внимания. После десятого подтверждения вы уже не читаете, а кликаете. Режимы прав и правила разрешений существуют, чтобы убрать лишние вопросы, не отдавая контроль над тем, что действительно опасно. В этом уроке разберём, какие режимы есть, как они переключаются, как писать правила в settings.json и в каких условиях допустимо отключить проверки совсем.

Что важно понять сначала

Правила разрешений применяет Claude Code, а не модель. Инструкция в CLAUDE.md «не делай git push» влияет на то, что Claude попытается сделать. Правило deny для Bash(git push *) влияет на то, что Claude Code позволит. Первое — просьба, второе — механизм. Для всего, что нельзя допустить, используйте механизм.

Второе: режим задаёт базовый уровень, правила накладываются сверху. Запрещающие правила действуют в любом режиме, включая полный обход проверок.

Режимы

В настройках режим «спрашивать обо всём» называется default, в интерфейсе — Manual. Остальные режимы отличаются тем, что выполняется без вопроса.

Режим Что выполняется без вопроса Для чего
default (Manual) Только чтение файлов и встроенный набор безопасных команд Незнакомый код, чувствительная работа
acceptEdits Плюс правки файлов и файловые команды: mkdir, touch, mv, cp, rm, sed — только внутри рабочей папки Реализация по утверждённому плану
plan Чтение и исследование; правки исходников заблокированы до утверждения плана Исследование перед изменениями
auto Почти всё; отдельная модель-классификатор проверяет действия и блокирует подозрительные Длинные задачи с фоновым контролем
dontAsk Только то, что явно разрешено правилами; всё остальное отклоняется без вопроса CI и скрипты с жёстким списком
bypassPermissions Всё Только изолированные контейнеры и виртуалки

Даже в bypassPermissions не одобряются автоматически: инструменты с явным правилом ask, инструменты, требующие ответа человека, и удаление критичных путей вроде корня или домашней папки.

Про auto стоит сказать отдельно. На планах Pro, Max и Team это стартовый режим для интерактивных сессий: действия проверяет классификатор, а не вы, и он останавливает то, что похоже на выход за рамки задачи или обращение к незнакомой инфраструктуре. Организация может отключить этот режим настройкой disableAutoMode.

Как переключать

По ходу сессииShift+Tab. Цикл: defaultacceptEditsplan → снова default. Если сессия стартовала в auto, первое нажатие переводит в default. Режим bypassPermissions появляется в цикле только если сессия запущена с соответствующим флагом; dontAsk в цикле не бывает вовсе. Текущий режим виден в строке статуса.

При запуске — флаг --permission-mode:

bash
claude --permission-mode plan
claude --permission-mode acceptEdits
claude -p "исправь ошибки линтера" --permission-mode dontAsk --allowedTools "Bash(pnpm lint *)" "Edit"

--dangerously-skip-permissions — то же, что --permission-mode bypassPermissions.

По умолчаниюpermissions.defaultMode в файле настроек:

json
{
  "permissions": {
    "defaultMode": "plan"
  }
}

Где именно задавать, имеет значение. Значения auto и bypassPermissions из проектных файлов .claude/settings.json и .claude/settings.local.json не действуют — только из пользовательского ~/.claude/settings.json или из управляемых настроек организации. Остальные режимы можно задавать где угодно. Сделать plan стартовым для проекта, где новые люди часто ломают код, — нормальная практика.

Правила: allow, deny, ask

Правила лежат в settings.json в ключе permissions:

json
{
  "permissions": {
    "allow": [
      "Bash(pnpm run *)",
      "Bash(pnpm test *)",
      "Bash(git commit *)",
      "Read(./docs/**)"
    ],
    "deny": [
      "Bash(git push *)",
      "Read(./.env)",
      "Read(./.env.*)",
      "Edit(./src/generated/**)"
    ],
    "ask": [
      "Bash(pnpm publish *)"
    ]
  }
}

Приоритет строгий: deny побеждает всё, ask побеждает allow. Широкое deny вроде Bash(aws *) блокирует и то, что разрешено узким allow — исключения из запрета сделать нельзя.

Синтаксис правила — имя инструмента и шаблон в скобках:

  • Bash(pnpm run *) — любая команда, начинающаяся с pnpm run. Пробел перед * важен: Bash(ls *) не совпадёт с lsof, а Bash(ls*) совпадёт.
  • Bash(npm run build) — только эта команда.
  • Звёздочку ставьте после подкоманды: Bash(git log *) разрешает все варианты git log, а Bash(git *) — вообще любой git, включая git push.
  • Read(./.env), Edit(./src/generated/**) — файлы. Проверяются только правила Read и Edit; писать Write(...) бесполезно, используйте Edit.
  • WebFetch(domain:docs.example.com) — запросы к домену.
  • Голое имя инструмента в deny (например, "WebFetch") убирает инструмент из контекста модели целиком.

Claude Code понимает составные команды: правило Bash(pnpm test *) не разрешит pnpm test && rm -rf dist, потому что каждая часть проверяется отдельно. Зато он снимает безобидные обёртки: timeout 30 pnpm test совпадёт с тем же правилом.

Управлять правилами удобнее через /permissions: диалог показывает все правила и файл, из которого каждое пришло. Когда вы в ответ на запрос выбираете «да, и больше не спрашивай», правило сохраняется в .claude/settings.local.json в корне репозитория.

Где лежат настройки и что важнее

Файл Область В git
Управляемые настройки организации Все пользователи; переопределить нельзя Разворачиваются централизованно
~/.claude/settings.json Все ваши проекты Нет
.claude/settings.json Проект, общий для команды Да
.claude/settings.local.json Проект, только вы Нет

Запрет на любом уровне не может быть снят на другом: deny в пользовательских настройках блокирует allow в проектных и наоборот. Команда может закоммитить в .claude/settings.json общий список: разрешить скрипты pnpm, запретить git push и чтение .env. Каждый разработчик добавит своё в локальный файл.

Пример командного файла для веб-проекта агентства:

json
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Bash(pnpm install)",
      "Bash(pnpm run *)",
      "Bash(pnpm test *)",
      "Bash(pnpm lint *)",
      "Bash(git status *)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git add *)",
      "Bash(git commit *)",
      "WebFetch(domain:nextjs.org)"
    ],
    "deny": [
      "Bash(git push *)",
      "Bash(git reset --hard *)",
      "Read(./.env)",
      "Read(./.env.*)",
      "Edit(./src/generated/**)",
      "Edit(./prisma/migrations/**)"
    ]
  }
}

Здесь Claude свободно правит код, ставит зависимости, гоняет тесты и коммитит, но не может отправить ветку, затереть историю, прочитать секреты или руками править миграции и сгенерированный код.

Когда «пропустить все проверки» допустимо

--dangerously-skip-permissions соблазнителен: никаких вопросов. Документация формулирует условие однозначно: только в изолированной среде — контейнере, виртуалке, специальной песочнице, — где Claude Code не может причинить вред, и под пользователем без прав администратора. В этом режиме Claude может писать даже в защищённые пути вроде .git и .claude.

Для сценариев «оставить на ночь» есть лучшие варианты. Режим dontAsk с точным списком allow — Claude делает ровно то, что разрешено, и молча отклоняет остальное. Режим auto — классификатор фильтрует опасное. Комбинация acceptEdits плюс allow для команд сборки и тестов покрывает почти всё, что нужно для миграции или обновления зависимостей.

Если организация хочет запретить обход совсем, есть настройка permissions.disableBypassPermissionsMode со значением "disable". Её ставят в управляемые настройки, где она не переопределяется.

Как хуки дополняют правила

Правила описывают шаблоны команд, но не могут проверить содержимое. «Разрешить rm, кроме удаления папки photos/» шаблоном не записать. Для этого есть хук PreToolUse: он видит полную команду, может её проверить скриптом и заблокировать. Хук срабатывает до проверки прав, в любом режиме, включая bypassPermissions. При этом ослабить правила хук не может: если deny совпал, вызов заблокирован независимо от решения хука. Хуки ужесточают, но не расширяют. Подробно — в следующем уроке.

Попробуйте сами

10–15 мин на рабочем месте
  1. Откройте /permissions в своём проекте и посмотрите, какие правила уже накопились в .claude/settings.local.json от кнопок «больше не спрашивай». Уберите слишком широкие (например, Bash(git *)).
  2. Составьте для проекта командный .claude/settings.json по образцу выше: разрешите команды сборки и тестов, запретите отправку в удалённый репозиторий и чтение .env. Попросите Claude сделать git push и убедитесь, что запрос отклонён.
  3. Запустите claude --permission-mode plan, попросите внести правку и посмотрите, как Claude Code блокирует редактирование до утверждения плана. Переключитесь через Shift+Tab и повторите.

Коротко

  • Правила применяет Claude Code, а не модель: CLAUDE.md — просьба, deny — механизм.
  • Режимы: default спрашивает, acceptEdits принимает правки, plan только исследует, auto доверяет классификатору, dontAsk разрешает только явное, bypassPermissions — всё.
  • Shift+Tab переключает по ходу, --permission-mode при запуске, permissions.defaultMode — по умолчанию.
  • Правила allow/deny/ask в settings.json: Bash(pnpm run *), Read(./.env), Edit(path), WebFetch(domain:...); deny побеждает всё и на любом уровне.
  • Полный обход — только в контейнере или виртуалке; для ночных прогонов лучше dontAsk с точным списком или auto.

Видеоверсия

Сценарий озвучки · 503 слова, ≈ 4 мин

Каждое подтверждение «да, выполни» — секунда вашего внимания. После десятого вы уже не читаете, а кликаете. Режимы прав нужны, чтобы убрать лишние вопросы, не отдавая контроль над тем, что действительно опасно. Разберём, какие режимы есть и как их настраивать.

Сначала главная мысль. Правила разрешений применяет Claude Code, а не модель. Строчка в файле клод-эм-дэ «не делай пуш» влияет на то, что Claude попытается сделать. Запрещающее правило влияет на то, что Claude Code позволит. Первое — просьба, второе — механизм. Для всего, что нельзя допустить, используйте механизм.

Теперь режимы. Обычный режим — в интерфейсе он называется Manual — спрашивает обо всём, кроме чтения файлов и встроенного набора безопасных команд. Режим принятия правок дополнительно принимает изменения файлов и простые файловые команды внутри рабочей папки, но по-прежнему спрашивает про остальное. Режим плана — только исследование, правки заблокированы до утверждения плана. Режим авто — почти всё выполняется, но отдельная модель-классификатор проверяет действия и блокирует подозрительные; на некоторых планах это стартовый режим. Режим «не спрашивать» — выполняется только то, что явно разрешено правилами, остальное молча отклоняется; это для скриптов и CI. И режим полного обхода — выполняется всё.

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

Правила лежат в файле сеттингс-джейсон в ключе «пермишнс». Три списка: разрешить, запретить, спрашивать. Приоритет строгий: запрет побеждает всё, «спрашивать» побеждает «разрешить». Правило — это имя инструмента и шаблон в скобках. Например, разрешить любую команду, начинающуюся с «pnpm run». Звёздочка после подкоманды: если разрешить «git» со звёздочкой, разрешится и пуш. Пробел перед звёздочкой важен: без него «ls» совпадёт и с «lsof». Для файлов — правила чтения и редактирования: запретить чтение файла с переменными окружения, запретить редактирование сгенерированного кода. Для веба — правило по домену.

Claude Code понимает составные команды. Правило для тестов не разрешит «тесты, а потом удалить папку», потому что каждая часть проверяется отдельно.

Настройки живут в нескольких файлах. Управляемые настройки организации — переопределить нельзя. Личные — для всех ваших проектов. Проектные — общие для команды, в гите. И локальные проектные — только ваши. Запрет на любом уровне нельзя снять на другом. Хорошая практика для команды: закоммитить в проектный файл разрешения на скрипты сборки, тестов и коммитов и запреты на пуш, жёсткий сброс, чтение секретов и правку миграций. Claude свободно работает с кодом, но не может отправить ветку или затереть историю.

Про полный обход проверок. Документация однозначна: только в изолированной среде — контейнере или виртуалке, где Claude Code не может причинить вред. Для ночных прогонов есть варианты лучше: режим «не спрашивать» с точным списком разрешений, режим авто с классификатором, или принятие правок плюс разрешения на сборку и тесты. Этого хватает почти для любой миграции. А если организация хочет запретить обход совсем, есть настройка, которая его отключает.

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

Отметка хранится только в вашем браузере