Claude Code не спрашивал разрешения: как настроить
ДК
Дмитрий Коновалов
Написать
Главная/Блог/Claude Code
Claude Code · 7 мин

Как настроить разрешения Claude Code и убрать постоянные нажатия Allow

Каждый раз нажимать Allow на git push, vercel deploy и curl надоедает быстро. Рассказываю как один раз настроить settings.json — и Claude Code будет работать автономно без прерываний.

Почему Claude Code спрашивает разрешение на каждую команду

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

Звучит разумно, но на практике если вы работаете с git, деплоите на Vercel, запускаете скрипты — диалог Allow вылезает каждые 30 секунд. Это разрушает поток работы и превращает вайбкодинг в клик-фест.

Решение — файл settings.json, в котором вы явно прописываете какие команды Claude Code может выполнять без вашего подтверждения.

Два уровня настроек: проектный и глобальный

В Claude Code есть два места где можно прописать разрешения:

Проектный settings.json — файл внутри конкретного проекта. Применяется только когда Claude Code запущен из этой папки:

ваш-проект/
└── .claude/
    └── settings.json

Глобальный settings.json — файл в домашней папке пользователя. Применяется ко всем проектам:

~/.claude/settings.json

Если оба файла существуют — проектный имеет приоритет. Это удобно: в глобальном можно разрешить базовые команды (git, curl), а в проектном добавить специфику конкретного проекта (например, команды деплоя).

Формат permissions.allow

Структура файла простая:

{
  "permissions": {
    "allow": [
      "Bash(команда *)",
      "Bash(другая команда *)"
    ],
    "deny": []
  }
}

Паттерны в allow могут быть трёх видов:

Точное совпадение — разрешает только эту конкретную команду:

"Bash(git status)"

С wildcard * — разрешает команду с любыми аргументами. Важно: пробел перед звёздочкой обязателен:

"Bash(git push *)"

Широкий wildcard — разрешает весь инструмент целиком:

"Bash(vercel *)"

Чем шире паттерн — тем больше разрешено. Используйте широкие паттерны только для инструментов, которым доверяете.

Готовый конфиг для типичного проекта с деплоем

Если вы работаете с git, Vercel, npm и запускаете Python/Node скрипты — вот конфиг который закрывает 95% диалогов Allow. Создайте файл .claude/settings.json в корне проекта:

{
  "permissions": {
    "allow": [
      "Bash(git add *)",
      "Bash(git commit *)",
      "Bash(git push *)",
      "Bash(git pull *)",
      "Bash(git rebase *)",
      "Bash(git checkout *)",
      "Bash(git stash *)",
      "Bash(git merge *)",
      "Bash(vercel *)",
      "Bash(curl -s *)",
      "Bash(curl -sL *)",
      "Bash(curl -sI *)",
      "Bash(gh workflow run *)",
      "Bash(gh run rerun *)",
      "Bash(npm run *)",
      "Bash(npm install *)",
      "Bash(pip3 install *)",
      "Bash(open *)",
      "Bash(mkdir -p *)",
      "Bash(cp *)",
      "Bash(rsync *)"
    ]
  }
}

Создать файл можно прямо из Claude Code — просто попросите его: «создай .claude/settings.json с разрешениями для git, vercel и npm».

Глобальный конфиг — один раз для всех проектов

Если хотите настроить один раз и забыть — создайте глобальный файл ~/.claude/settings.json. Он применится ко всем проектам автоматически.

Откройте терминал и создайте файл:

mkdir -p ~/.claude
nano ~/.claude/settings.json

Вставьте содержимое (то же что выше) и сохраните. Теперь во всех проектах Claude Code будет работать без прерываний на эти команды.

Проверить что файл создан правильно:

cat ~/.claude/settings.json

Что НЕ стоит разрешать — список опасных паттернов

Не все команды одинаково безопасны. Вот что я бы не стал добавлять в allow:

Bash(rm *) или Bash(rm -rf *) — удаление файлов без подтверждения. Если Claude Code случайно снесёт нужную папку — вы не успеете остановить.

Bash(sudo *) — команды с правами администратора. Слишком широко.

Bash(python3 *) — любой Python скрипт. Лучше указать конкретный: Bash(python3 scripts/*).

Bash(ssh *) — SSH подключения. Лучше разрешать конкретный хост.

Общее правило: чем конкретнее паттерн — тем лучше. Bash(git push origin main) безопаснее чем Bash(git *).

🤖

Больше про Claude Code — в канале

Разбираю реальные сценарии использования Claude Code: как настраивать, автоматизировать деплои, писать скрипты и строить продукты без команды разработчиков.

Подписаться →
Дмитрий Коновалов
Дмитрий Коновалов
CMO с 10-летним опытом. Строю комьюнити AI-маркетологов в России. Делюсь реальными кейсами внедрения нейросетей в маркетинг в Telegram @dima_konovalov_edtech.

Режимы разрешений: accept edits, plan mode и bypass

Кроме файла настроек у Claude Code есть режимы работы, которые переключаются на лету клавишей Shift+Tab прямо в диалоге. Это самый быстрый способ перестать жать Allow, если лезть в JSON не хочется.

Normal — режим по умолчанию: спрашивает подтверждение на каждое изменение файла и каждую команду, кроме тех, что перечислены в permissions.allow.

Accept edits — правки файлов применяются без вопросов, но команды в терминале по-прежнему требуют подтверждения. Рабочий компромисс длядлинных сессий рефакторинга: файлы под git, откатить не проблема, а вот запуск скриптов остаётся под контролем.

Plan mode — Claude Code ничего не меняет вообще, только исследует проект и предлагает план. Полезен, когда нужно сначала понять, что вообще будет сделано.

Режим виден в статусной строке внизу окна. Он живёт в рамках одной сессии: перезапустили claude — вернулись в normal. Если хотите, чтобы поведение сохранялось между запусками, это уже про settings.json из разделов выше.

Флаг --dangerously-skip-permissions: когда можно и чем рискуете

Есть способ отключить запрос разрешений полностью — запустить Claude Code с флагом:

claude --dangerously-skip-permissions

В этом режиме не будет ни одного подтверждения: ни на правку файлов, ни на команды в терминале, ни на удаление. Название флага не случайно содержит слово dangerously — это ровно то, чем оно выглядит.

Когда это оправданно: изолированная песочница, контейнер или временная копия проекта, где нечего терять; длинная автономная задача, которую вы запускаете осознанно и потом проверяете результат по git diff.

Когда так делать не стоит: рабочий проект без коммита, каталог с ключами и .env, домашняя директория, продакшен-сервер по SSH. Одна неудачно составленная команда rm — и восстанавливать будет нечего.

Практическое правилоЕсли перед запуском вы не можете за 10 секунд ответить, как откатите изменения, — флаг не ваш. Настройте permissions.allow под конкретные команды, это займёт пять минут и закроет 90% прерываний.

permissions.deny: запретить точечно вместо «разрешить всё»

Обратная сторона allow — блок deny. Он работает жёстче: команда из deny не будет выполнена, даже если вы подтвердите её вручную. Это страховка от собственной невнимательности, когда рука уже автоматически жмёт Enter.

{
  "permissions": {
    "allow": [
      "Bash(git *)",
      "Bash(npm run *)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(sudo *)",
      "Read(.env)",
      "Read(**/*.key)"
    ]
  }
}

Обратите внимание на две последние строки: deny умеет закрывать не только команды, но и чтение файлов. Запретив Read(.env), вы гарантируете, что содержимое файла с ключами не попадёт в контекст модели — даже если попросить об этом напрямую.

Комбинация «широкий allow + узкий deny» работает лучше, чем попытка перечислить все безопасные команды: разрешаете рабочие инструменты целиком, а точечно закрываете то, что не должно выполняться никогда.

Что делать, если настройки не применились

Самая частая причина — Claude Code читает настройки при старте сессии. Отредактировали файл в соседнем окне, а текущая сессия работает со старой конфигурацией. Выйдите из claude и запустите заново.

Вторая причина — синтаксическая ошибка в JSON: лишняя запятая после последнего элемента массива, кавычки-ёлочки вместо прямых, забытая скобка. Проверить можно одной командой:

python3 -m json.tool ~/.claude/settings.json

Если файл валиден, команда напечатает его содержимое; если нет — покажет строку с ошибкой.

Третья причина — паттерн не совпадает с реальной командой. Разрешение Bash(git push) не покроет git push origin main: нужна звёздочка — Bash(git push *). Проще всего посмотреть, какую именно команду Claude Code просит подтвердить, и скопировать её начало в паттерн.

Частые вопросы

Где находится файл settings.json?
Глобальный — ~/.claude/settings.json (тильда это ваша домашняя папка, например /Users/имя/). Проектный — .claude/settings.json внутри папки проекта. Если оба существуют — проектный имеет приоритет.
Изменения применяются сразу или нужно перезапускать Claude Code?
Claude Code читает settings.json при каждом запуске сессии. Если вы изменили файл во время работы — нужно начать новый чат (новую сессию), изменения применятся сразу.
Можно ли запретить Claude Code выполнять определённые команды?
Да, для этого есть секция deny. Например, "Bash(rm *)" в deny гарантирует что Claude Code никогда не запустит rm, даже если вы случайно об этом попросите.
Как разрешить только конкретный git remote или ветку?
Используйте точный паттерн: "Bash(git push origin main)". Это разрешит только пуш в main на origin, всё остальное по-прежнему будет спрашивать подтверждение.
ДК

Внедряйте нейросети в маркетинг вместе с нами

В комьюнити 400+ маркетологов делятся кейсами и туториалами по Claude Code, Яндекс.Директ, автоматизации и другим инструментам.

Вступить бесплатно

Читайте дальше