Claude Code умеет сам запускать команды и править файлы — это сила и риск одновременно. Разберём, как выставить агенту границы: что разрешить без вопросов, что запретить наглухо и почему bypass-режим — не для рабочей машины.
Claude Code — это агент в терминале: он не просто советует, а действует. Читает файлы, запускает команды, правит код, делает коммиты. Ровно поэтому к нему нужен тот же подход, что к новому сотруднику с доступом к боевым системам: дать ровно столько прав, сколько нужно для работы, и ни граммом больше. Права (permissions) в Claude Code — это и есть механизм таких границ.
Что узнаешь из гайда
Часть 1 · Зачем
Главное
Права — это список разрешённых и запрещённых действий для агента. Без них Claude на каждый чих спрашивает подтверждение (раздражает), а с неправильной настройкой может сделать необратимое. Цель — золотая середина: рутину разрешить, опасное запретить.
По умолчанию Claude Code ведёт себя осторожно: перед запуском команды или правкой файла он спрашивает разрешение. Это безопасно, но на практике быстро бесит — ты двадцатый раз за час подтверждаешь npm run test. Хочется, чтобы безопасную рутину агент делал сам, а вот на опасное — спрашивал или вовсе не лез. Именно для этого баланса и нужны права.
Расшифруем термины. Tool (инструмент) — это то, чем агент действует: Bash (команды в терминале), Read (чтение файлов), Edit и Write (правка и запись), WebFetch (запросы в интернет) и другие. Permission (право) — правило, которое говорит, можно ли агенту пользоваться этим инструментом и в какой области. Настройка прав — это, по сути, договор: «вот это делай сам, вот это спрашивай, вот это не трогай».
Если ты только осваиваешься с агентом и боишься дать лишнего — начни с безопасного воркфлоу через гит. Тогда любую ошибку агента легко откатить. Как именно — в гайде про безопасную работу через Git.
Часть 2 · Правила
Главное
allow — делать без вопроса, ask — спрашивать каждый раз, deny — запрещено наглухо. Правило указывает инструмент и его область в скобках, например Bash(npm run test:*).
Правила живут в файле settings.json. Самый наглядный способ понять формат — посмотреть на готовый пример. Вот разумная стартовая настройка для веб-проекта:
{
"permissions": {
// allow — агент делает сам, без подтверждения
"allow": [
"Bash(npm run test:*)", // любые npm-тесты
"Bash(npm run lint)", // линтер
"Bash(git status)", // безопасные git-команды
"Bash(git diff:*)",
"Read", // читать файлы можно везде
"Edit" // и править код
],
// ask — агент спросит разрешение каждый раз
"ask": [
"Bash(git push:*)", // пуш — только с подтверждения
"Bash(npm install:*)" // ставить пакеты — спросить
],
// deny — запрещено наглухо, даже если попросишь
"deny": [
"Read(./.env)", // не читать секреты
"Read(./.env.*)",
"Bash(rm -rf:*)" // не удалять рекурсивно
]
}
}Разберём синтаксис. Bash(npm run test:*) — это инструмент Bash, область — команды, начинающиеся с npm run test; * в конце значит «и всё, что после». Read(./.env) — инструмент Read, область — конкретный файл с секретами. Голый Read без скобок означает «инструмент целиком, без ограничения области».
Проще всего управлять правилами не руками в JSON, а прямо из чата командой /permissions (у неё есть алиас /allowed-tools). Она открывает интерактивное окно: видно правила по уровням, можно добавить и убрать, посмотреть рабочие директории. Когда агент спрашивает разрешение на действие, ты можешь сразу выбрать «разрешить навсегда» — и правило само улетит в allow.
Важно
deny всегда сильнее allow. Если одно и то же действие попало и в разрешённые, и в запрещённые (хоть на разных уровнях настроек) — победит запрет. Это сделано нарочно: запрет нельзя случайно «перебить» разрешением, поэтому критичные deny-правила держатся железно.
Часть 3 · Запреты
Главное
Правило одно: всё необратимое и всё, что касается продакшена и секретов, подтверждает человек. Это удаление файлов, push в main, миграции боевой базы и чтение ключей.
Список того, что стоит положить в deny или хотя бы оставить в ask, короткий и его легко запомнить:
| Действие | Почему опасно | Куда класть |
|---|---|---|
rm -rf, массовое удаление | Необратимо, можно снести проект | deny |
| push в main / прод-ветку | Выкатит непроверенный код в работу | ask |
| Миграции боевой БД | Меняет схему живых данных | deny / ask |
Чтение .env, ключей, токенов | Секреты утекут в контекст и логи | deny |
curl с записью, внешние API | Неконтролируемые сетевые действия | ask |
Дай агенту делать рутину сам, но необратимое всегда оставляй за человеком.
Отдельно про секреты. Даже если ты доверяешь агенту, чтение .env — плохая идея: содержимое попадёт в контекст модели и может засветиться в логах или истории. Безопаснее держать Read(./.env) и подобное в deny на уровне проекта, чтобы это правило ехало в гит и защищало всю команду, а не только тебя.
Пример из жизни
Частая история: агент чинит баг, видит «лишние» файлы сборки и решает «прибраться» через rm -rf. Если правило в deny — он просто не сможет, даже если очень захочет. Поэтому запрет на удаление ставят один раз и не снимают.
Часть 4 · Режимы
Главное
Кроме точечных правил, у Claude Code есть общие режимы доступа. Они задают поведение целиком: от «спрашивай почти всё» до «не спрашивай ничего». Переключаются на лету через Shift+Tab.
Режим — это профиль строгости поверх твоих правил. Основных четыре:
| Режим | Что делает | Когда |
|---|---|---|
default | Спрашивает по твоим правилам — база | Обычная работа |
acceptEdits | Авто-принимает правки файлов | Доверяешь правкам, гонишь итерации |
plan | Только исследует, ничего не меняет | Сначала план — потом код |
bypassPermissions | Не спрашивает вообще ничего | Только в песочнице |
Режим plan — самый безопасный: агент читает код и строит план, но не трогает файлы, пока ты не утвердишь. Про него отдельный разбор — гайд про план-режим. Режим acceptEdits снимает вопросы только на правки файлов, но команды в терминале по-прежнему под контролем правил — это разумный компромисс для скорости.
Коротко
Часть 5 · Риски
Главное
Bypass отключает все запросы на подтверждение. Агент делает что угодно сам. На рабочей машине это опасно: одна ошибка — и нет диалога, который бы её остановил. Место bypass — изолированная песочница.
Включается bypass флагом при запуске. Само название флага намекает, что разработчики Claude Code считают этот режим рискованным:
# Полный bypass: агент НЕ спрашивает ни о чём
claude --dangerously-skip-permissions
# То же самое явно через режим
claude --permission-mode bypassPermissionsВ чём конкретно риск. В обычном режиме опасную команду останавливает диалог «выполнить? да/нет» — у тебя есть секунда подумать. В bypass этого диалога нет вообще. Если модель неверно поняла задачу и решила rm -rf не ту папку или сделать git push --force — она это сделает молча и мгновенно. Откатывать будешь уже по факту, если вообще получится.
Когда НЕ включать bypass
Никогда — на машине с твоими боевыми проектами, доступом к продакшену, секретами и важными данными. Bypass оправдан только в изолированном окружении: Docker-контейнер, одноразовая виртуалка, CI-раннер — там, где терять нечего и всё пересоздаётся. Если сомневаешься, нужен ли тебе bypass, — значит, не нужен.
Здоровая альтернатива скорости без потери контроля — режим acceptEdits плюс продуманные allow-правила на свою рутину. Так агент летит по безопасным действиям сам, но необратимое по-прежнему спрашивает. А чтобы любую ошибку можно было откатить — работай через гит-ветки и чекпойнты, об этом гайд про память и откат сессий.
Коротко
settings.json или через /permissions.rm, push в main, .env) — всегда через человека.Вопросы
Права настраиваются правилами allow, ask и deny в файле settings.json (личном ~/.claude/settings.json или проектном .claude/settings.json) либо интерактивно командой /permissions. Правило задаёт инструмент и его область — например Bash(npm run test:*) или Read(./.env). Allow разрешает без вопроса, ask спрашивает каждый раз, deny запрещает наглухо. Это способ один раз задать границы агенту, чтобы он не дёргал тебя на безопасных командах и не трогал опасные.
Без подтверждения опасно разрешать удаление файлов (rm -rf), push в main, применение миграций к боевой базе, чтение секретов (.env, ключи, токены) и сетевые запросы с записью. Эти действия кладут в deny или оставляют в ask, чтобы агент спрашивал. Логика простая: всё необратимое и всё, что касается продакшена и секретов, человек подтверждает руками.
Bypass-режим (флаг --dangerously-skip-permissions, он же --permission-mode bypassPermissions) отключает все запросы на подтверждение — агент выполняет любые команды сам, без единого вопроса. Это удобно в изолированной песочнице, но опасно на рабочей машине: одна ошибочная команда rm или git push уже не остановится диалогом. Включать его стоит только в контейнере или одноразовой VM, где не жалко потерять данные.
Настройки прав живут в settings.json на трёх уровнях: личный ~/.claude/settings.json (для всех твоих проектов), проектный .claude/settings.json (едет в гит с командой) и локальный .claude/settings.local.json (только твой, в гит не идёт). Правила deny всегда сильнее allow: если действие запрещено хоть на одном уровне — оно запрещено. Это даёт командные границы в гите плюс личные поверх них.
Читать дальше
Прикладной материал, разборы и рабочие приёмы — то, чем пользуюсь сам, без воды. Залетай, там самое полезное.
Зайти в Telegram