раздел 02

Claude Code: режимы и settings.json

В Claude Code разрешениями управляют на двух уровнях: быстрые режимы прямо в сессии и точная настройка через файл settings.json.

Четыре режима по Shift+Tab

Клавиша Shift+Tab переключает режим по кругу. Текущий режим виден в строке ввода.

Обычный режим
Агент спрашивает перед правками файлов и перед запуском команд. Поведение по умолчанию.
Auto-accept edits
Параметр acceptEdits: агент сам применяет правки файлов, но команды в терминале всё равно спрашивает.
Plan mode
Только чтение: агент изучает код и составляет план, но ничего не меняет и не запускает.
Bypass permissions
Запуск без подтверждений вообще. Только в изолированной среде, см. предупреждение ниже.

Bypass-режим включается отдельно - запуском с флагом --dangerously-skip-permissions. Само название флага намекает: это «опасно пропустить разрешения».

Как выглядит запрос в чате

Когда агент хочет выполнить команду, он спрашивает примерно так: Allow Claude to run <команда>? с вариантами:

  • Yes - разрешить один раз;
  • Yes, and don't ask again for ... - разрешить и больше не спрашивать про похожее (фактически добавляет правило в allow);
  • No - отклонить.

Правки файлов агент показывает диффом с кнопками Accept и Reject.

Тонкая настройка: settings.json

Под капотом режимов лежат правила. Их задают в файле настроек:

  • .claude/settings.json - в корне проекта (правила для этого проекта, можно коммитить в репозиторий команды);
  • ~/.claude/settings.json - глобальный, для всех проектов на вашей машине.

Внутри - блок permissions с тремя массивами: allow, ask, deny. Правила пишутся как имя инструмента и, при необходимости, шаблон в скобках:

{
  "permissions": {
    "allow": [
      "Bash(npm run test:*)",
      "Bash(npm run build)",
      "Read(./src/**)",
      "Edit"
    ],
    "ask": [
      "WebFetch"
    ],
    "deny": [
      "Bash(rm -rf:*)",
      "Bash(git push:*)",
      "Read(./.env)",
      "Read(./.env.*)"
    ]
  }
}

Как это читается:

allow
Авто-разрешено без вопроса. Здесь: тесты, сборка, чтение исходников, правки файлов.
ask
Всегда спрашивать перед выполнением. Здесь: загрузка из сети.
deny
Запрещено всегда, даже в bypass. Здесь: rm -rf, push, чтение .env.

Шаблоны вроде Bash(npm run test:*) означают «любая команда, начинающаяся с npm run test». Read(./src/**) - чтение любых файлов внутри src. Edit без скобок - правки файлов в целом.

Команда /permissions и хуки

Команда /permissions прямо в сессии открывает текущие правила и позволяет их посмотреть и отредактировать - не лазая в файл руками.

Для продвинутых сценариев есть хуки. Хук PreToolUse срабатывает перед выполнением инструмента и может программно разрешить или заблокировать действие по своей логике - например, запретить любые команды, трогающие определённую папку.

Рекомендации

1
Начинайте в обычном режиме или plan
Дайте агенту показать, что он понимает задачу, прежде чем отдавать автономию.
2
Включайте acceptEdits на понятной задаче
Когда правки предсказуемы, auto-accept edits экономит время. Команды всё равно остаются под контролем.
3
Частое и безопасное - в allow
Тесты, сборка, линтер. Чтобы не подтверждать одно и то же по сто раз.
4
Опасное - в deny
rm -rf, чтение .env, push в main. Так оно не выполнится даже случайно.
5
Не используйте bypass на машине с секретами
Только изолированная среда без доступа к проду и ключам.