Открытый гайд · ИИ-офис

Безопасность и праваClaude Code

Claude Code умеет сам запускать команды и править файлы — это сила и риск одновременно. Разберём, как выставить агенту границы: что разрешить без вопросов, что запретить наглухо и почему bypass-режим — не для рабочей машины.

@kir.player
~12 минут
июнь 2026

Claude Code — это агент в терминале: он не просто советует, а действует. Читает файлы, запускает команды, правит код, делает коммиты. Ровно поэтому к нему нужен тот же подход, что к новому сотруднику с доступом к боевым системам: дать ровно столько прав, сколько нужно для работы, и ни граммом больше. Права (permissions) в Claude Code — это и есть механизм таких границ.

Что узнаешь из гайда

  • Как работают три типа правил — allow, ask, deny — и где они лежат
  • Что безопасно разрешить, а что всегда оставлять на подтверждение
  • Что никогда не давать агенту без человека: rm, push в main, секреты
  • Режимы доступа: default, acceptEdits, plan, bypassPermissions
  • Чем реально опасен bypass-режим и когда он всё-таки уместен

Часть 1 · Зачем

Почему агенту нужны границы

Главное

Права — это список разрешённых и запрещённых действий для агента. Без них Claude на каждый чих спрашивает подтверждение (раздражает), а с неправильной настройкой может сделать необратимое. Цель — золотая середина: рутину разрешить, опасное запретить.

По умолчанию Claude Code ведёт себя осторожно: перед запуском команды или правкой файла он спрашивает разрешение. Это безопасно, но на практике быстро бесит — ты двадцатый раз за час подтверждаешь npm run test. Хочется, чтобы безопасную рутину агент делал сам, а вот на опасное — спрашивал или вовсе не лез. Именно для этого баланса и нужны права.

Расшифруем термины. Tool (инструмент) — это то, чем агент действует: Bash (команды в терминале), Read (чтение файлов), Edit и Write (правка и запись), WebFetch (запросы в интернет) и другие. Permission (право) — правило, которое говорит, можно ли агенту пользоваться этим инструментом и в какой области. Настройка прав — это, по сути, договор: «вот это делай сам, вот это спрашивай, вот это не трогай».

Если ты только осваиваешься с агентом и боишься дать лишнего — начни с безопасного воркфлоу через гит. Тогда любую ошибку агента легко откатить. Как именно — в гайде про безопасную работу через Git.


Часть 2 · Правила

Три типа правил: allow, ask, deny

Главное

allow — делать без вопроса, ask — спрашивать каждый раз, deny — запрещено наглухо. Правило указывает инструмент и его область в скобках, например Bash(npm run test:*).

Правила живут в файле settings.json. Самый наглядный способ понять формат — посмотреть на готовый пример. Вот разумная стартовая настройка для веб-проекта:

.claude/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 снимает вопросы только на правки файлов, но команды в терминале по-прежнему под контролем правил — это разумный компромисс для скорости.

Коротко

  • default — рабочая база, спрашивает по правилам.
  • plan — исследует и планирует, файлы не трогает.
  • acceptEdits — авто-правки, но команды под контролем.
  • bypassPermissions — без вопросов вообще, только песочница.

Часть 5 · Риски

Bypass-режим: чем опасен и когда уместен

Главное

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-правила на свою рутину. Так агент летит по безопасным действиям сам, но необратимое по-прежнему спрашивает. А чтобы любую ошибку можно было откатить — работай через гит-ветки и чекпойнты, об этом гайд про память и откат сессий.

Коротко

  • Права — это allow / ask / deny в settings.json или через /permissions.
  • Необратимое и секреты (rm, push в main, .env) — всегда через человека.
  • deny сильнее allow; bypass — только в песочнице, не на рабочей машине.

Вопросы

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

Как настроить права Claude Code?

Права настраиваются правилами allow, ask и deny в файле settings.json (личном ~/.claude/settings.json или проектном .claude/settings.json) либо интерактивно командой /permissions. Правило задаёт инструмент и его область — например Bash(npm run test:*) или Read(./.env). Allow разрешает без вопроса, ask спрашивает каждый раз, deny запрещает наглухо. Это способ один раз задать границы агенту, чтобы он не дёргал тебя на безопасных командах и не трогал опасные.

Что нельзя давать агенту Claude Code без подтверждения?

Без подтверждения опасно разрешать удаление файлов (rm -rf), push в main, применение миграций к боевой базе, чтение секретов (.env, ключи, токены) и сетевые запросы с записью. Эти действия кладут в deny или оставляют в ask, чтобы агент спрашивал. Логика простая: всё необратимое и всё, что касается продакшена и секретов, человек подтверждает руками.

Чем опасен режим bypass permissions в Claude Code?

Bypass-режим (флаг --dangerously-skip-permissions, он же --permission-mode bypassPermissions) отключает все запросы на подтверждение — агент выполняет любые команды сам, без единого вопроса. Это удобно в изолированной песочнице, но опасно на рабочей машине: одна ошибочная команда rm или git push уже не остановится диалогом. Включать его стоит только в контейнере или одноразовой VM, где не жалко потерять данные.

Где лежат настройки прав Claude Code и какие приоритетнее?

Настройки прав живут в settings.json на трёх уровнях: личный ~/.claude/settings.json (для всех твоих проектов), проектный .claude/settings.json (едет в гит с командой) и локальный .claude/settings.local.json (только твой, в гит не идёт). Правила deny всегда сильнее allow: если действие запрещено хоть на одном уровне — оно запрещено. Это даёт командные границы в гите плюс личные поверх них.

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

Соседние гайды

Telegram про вайбкодинг и ИИ

Прикладной материал, разборы и рабочие приёмы — то, чем пользуюсь сам, без воды. Залетай, там самое полезное.

Зайти в Telegram