Почему 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: как настраивать, автоматизировать деплои, писать скрипты и строить продукты без команды разработчиков.
Подписаться →Частые вопросы
~/.claude/settings.json (тильда это ваша домашняя папка, например /Users/имя/). Проектный — .claude/settings.json внутри папки проекта. Если оба существуют — проектный имеет приоритет.deny. Например, "Bash(rm *)" в deny гарантирует что Claude Code никогда не запустит rm, даже если вы случайно об этом попросите."Bash(git push origin main)". Это разрешит только пуш в main на origin, всё остальное по-прежнему будет спрашивать подтверждение.