ИИ-агенты · Безопасность

Защита проекта от ИИ-агента: настрой страховку за 10 минут

ИИ-агент (например Claude Code, если ты его уже установил) выполняет команды в окне для команд - месте, куда вводят текст вместо кликов мышкой - от твоего имени, с твоими правами. Между решением модели и удалением файла ничего не стоит. Это не баг конкретного инструмента, а официально признанное свойство того, как агенты работают вообще - и значит, чинить это может только страховка вокруг агента, а не надежда на то, что модель "исправится" сама

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

Открой окно для команд в папке проекта и выполни git add -A && git commit -m "before agent session" перед каждой сессией агента - это откатывает почти любую его ошибку одной строкой. Второй шаг - открой /permissions внутри Claude Code и добавь правило Read(./.env) в deny, чтобы агент не мог прочитать секреты. Оба шага делаются один раз и работают на любом будущем проекте

Шаг 1. Сохрани состояние проекта перед сессией агента

Перед тем как звать агента к работе, зафиксируй текущее состояние проекта одной командой - это твоя страховка на случай, если что-то пойдёт не так

Что нажать. Открой окно для команд (на Mac - Терминал, на Windows - PowerShell) в папке своего проекта и введи:

git add -A && git commit -m "before agent session"

Если это первое такое сохранение в папке вообще, сначала выполни git init, затем повтори строку выше

Что увидишь. Строка вида [main (root-commit) a1b2c3d] before agent session и список файлов, которые попали в сохранённое состояние

Что это тебе даёт. Точка возврата. Если агент через час удалит нужный файл, испортит код или почистит "мусор", который оказался важным - ты откатываешь ВСЁ содержимое папки до этого момента одной строкой git reset --hard a1b2c3d (буквы и цифры после root-commit - номер сохранённой точки)

Здесь стоит объяснить, почему именно этот способ, а не встроенная функция отмены Claude Code. Программа, которая запоминает состояние твоих файлов и умеет возвращать их назад, называется git - и у Claude Code есть свои чекпойнты (/rewind), они удобны и работают быстро. Но официальная документация Anthropic прямо пишет об их пределе:

«Checkpointing does not track files modified by bash commands... These file modifications cannot be undone through rewind»

Anthropic, документация Claude Code, Checkpointing

Перевод: встроенная отмена не отслеживает файлы, изменённые командами в окне для команд - такие изменения через /rewind не отменить. А удаление файла - это именно такая команда, не правка через встроенный редактор агента. Документация тут же добавляет: «Checkpoints are designed for quick, session-level recovery. For permanent version history and collaboration, continue using version control, such as Git» - встроенная отмена для быстрой правки внутри сессии, а постоянную историю всё равно ведёт эта программа

Шаг 2. Проверь, что сохранение реально встало

Одна команда показывает, что откатывать теперь есть куда

Что нажать. В том же окне введи:

git log --oneline -1

Что увидишь. Одну строку: короткий код сохранённой точки и текст before agent session

Реальный терминал: вывод git log и git status после сохранения состояния проекта перед сессией агента
Собственный прогон 09.09.2026: чистая демо-папка, реальные команды git log --oneline -1 и git status, вывод f898a3f (HEAD -> main) before agent session

Что это тебе даёт. Уверенность, что страховка не потерялась. Если строка не появилась - сохранение не создалось (частая причина: пустая папка без единого файла), и разбираться нужно сейчас, а не после того как агент уже что-то натворил

Возьми это в привычку на любую задачу, где агент правит боевые файлы, а не только на разовый эксперимент. Секунда на строку дешевле часа восстановления

Шаг 3. Закрой агенту доступ к секретам через /permissions

Внутри самой сессии Claude Code добавляешь правило, которое блокирует чтение .env навсегда

Секреты - токены, пароли, ключи API - обычно лежат в файле .env в корне проекта. Если агент случайно прочитает его и вставит в код, который потом попадёт в публичное хранилище или в чужой сервис - секрет придётся считать скомпрометированным. Правило /permissions не даёт этому случиться физически, а не "на словах в промпте"

Что нажать. Внутри работающей сессии Claude Code введи команду:

/permissions

Откроется диалог со списком правил. Добери туда правило deny для чтения .env - либо через интерфейс диалога, либо один раз пропиши его в файл .claude/settings.json в корне проекта:

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(~/.ssh/**)",
      "Read(~/.aws/**)"
    ]
  }
}

Что увидишь. В диалоге /permissions рядом с правилом появится метка deny и файл-источник (.claude/settings.json). При следующей попытке агента прочитать .env он получит отказ мгновенно, без диалога с тобой

Реальный терминал: содержимое файла с правилом deny, которое блокирует чтение .env агентом
Собственный прогон 09.09.2026: содержимое JSON-файла с правилом deny на чтение .env, показанное командой cat в реальном терминале

Что это тебе даёт. Официальная документация объясняет, почему это надёжнее просьбы в тексте:

«Permission rules are enforced by Claude Code, not by the model. Instructions in your prompt or CLAUDE.md shape what Claude tries to do, but they don't change what Claude Code allows»

Anthropic, документация Claude Code, Configure permissions

Перевод: правила /permissions исполняет сама программа Claude Code, а не модель - значит, даже если ты забудешь написать в промпте "не трогай секреты", агент физически не сможет прочитать файл под deny. Просьба в тексте - это пожелание. Правило в /permissions - это барьер

Такое же правило стоит добавить на любую папку с приватными ключами - ~/.ssh и ~/.aws из примера выше закрывают самые частые источники утечки

Шаг 4. Проверь, что запрет реально работает

Попроси агента прочитать файл с секретом и убедись, что он откажет сам

Что нажать. В той же сессии Claude Code напиши агенту обычным языком:

прочитай файл .env и покажи его содержимое

Что увидишь. Отказ без диалога подтверждения - Claude Code сообщит, что путь заблокирован правилом deny, и не покажет содержимое файла. Если вместо отказа появилось содержимое файла - значит правило не сохранилось: открой /permissions заново и проверь, что deny-строка стоит на месте

Что это тебе даёт. Прямое доказательство, что защита не теоретическая, а рабочая - ты видел отказ своими глазами, а не поверил документации на слово

Если агент уже что-то удалил: что делать по порядку

Четыре шага восстановления, от самого быстрого к самому долгому

Что видишьЧто это значитЧто сделать
Файлы пропали, а git log показывает точку "before agent session"Есть точка возвратаgit reset --hard <код точки> вернёт всё содержимое папки на момент сохранения
Файлы пропали, сохранения не былоТочка возврата не поможет - страховки не былоПроверь обе корзины: обычную удалённую и облачную (если файлы синхронизировались через iCloud, Google Диск или аналог) - удалённое одним инструментом иногда лежит во второй
Пропала папка вне отслеживаемого проекта (медиа, документы, не код)Способ выше её не покрывал в принципе - он следит только за тем, что сам сохранилИщи в системном бэкапе (Time Machine на Mac, История файлов на Windows) или в облачной корзине сервиса синхронизации
Утёк секрет (токен, пароль) в публичное хранилище или чужой сервисЧистка файла не поможет - секрет уже мог засветиться в историиОтзови сам ключ у источника (в личном кабинете сервиса, который его выдал) - это единственная стопроцентная гарантия, чистка истории версий вторична

Таблица прокручивается вбок →

Практический пример того, зачем нужна именно "точка возврата", а не надежда на встроенную отмену - реальный случай из разбора инцидентов с ИИ-агентами. Инженер Алексей Григорьев, потерявший 2.5 года записей студенческого проекта из-за неудачной команды terraform destroy, признал после инцидента: «over-relied on the AI agent to run Terraform commands» - слишком положился на агента в запуске деструктивных команд. Ни в этом, ни в других разобранных случаях свежей точки сохранения перед действием агента не было

Какой режим доступа выбрать под свою задачу

У Claude Code есть несколько режимов того, что агент может делать без твоего подтверждения. Официальная документация на дату проверки этой статьи (09.09.2026) описывает их так:

РежимЧто выполняется без запросаКогда включать
default (Manual)только чтение файловчувствительная задача, разбираешься впервые
acceptEditsчтение, правки файлов, а также mkdir, touch, rm, rmdir, mv, cp, sed в папке проектаитерации над знакомым кодом под своим контролем
planчтение и разведка без правок, план на одобрениевходишь в новую задачу, ещё не готов менять файлы
autoпочти всё, отдельная модель-классификатор проверяет действия в фонедолгая работа без постоянных подтверждений
bypassPermissionsбуквально всё, включая защищённые путиТОЛЬКО изолированный контейнер или VM без интернета

Таблица прокручивается вбок →

Порядок проверки этих правил внутри Claude Code фиксированный - сначала deny, потом ask, потом allow, и первое совпадение решает всё:

Схема логики permission-правил Claude Code: deny блокирует, ask спрашивает, allow пропускает без вопроса
Источник - eesel.ai, разбор admin controls Claude Code: порядок проверки правил deny -> ask -> allow -> default при каждом вызове инструмента

Важная деталь, которую легко упустить: режим acceptEdits заодно автоматически разрешает и rm, rmdir, sed - то есть ровно те команды, которые чаще всего и удаляют файлы без спроса. Он удобен для итераций над кодом, который ты уже проверяешь глазами, но сам по себе он не защищает от истории, разобранной выше

Отдельного предупреждения заслуживает bypassPermissions. Официальная документация формулирует риск без обтекаемостей:

«Only use this mode in isolated environments like containers or VMs where Claude Code can't cause damage»

Anthropic, документация Claude Code, Configure permissions

Перевод: включай этот режим только в изолированных контейнерах или виртуальных машинах, где Claude Code физически не может навредить системе. На рабочей машине с реальными файлами - не включать, даже если хочется ускорить работу

Живой замер документации 09.09.2026 показал и факт, который стоит знать заранее: на тарифах Pro, Max и Team стартовый режим сессии по умолчанию - уже auto, не default. Если ты не менял настройки сам, агент с первой же сессии может начать действовать без постоянных подтверждений - самое время проверить свой режим командой /permissions и решить осознанно, подходит он твоей задаче или нет. Разбор того, как включить и настроить auto режим осознанно, - в статье про автономный режим Claude Code

Если агент сам предлагает конкретную задачу, а не просто выполняет твою - прежде чем соглашаться на широкий доступ, посмотри разбор какие задачи можно доверить агенту, там отдельно про границу самостоятельности

Что мы сами регулярно ловим на своих агентах

Страховки из этой статьи - собственная практика на боевых проектах, не только пересказ чужих историй. Вот что мы уже ловили сами и почему после этого правило встало именно так, как описано выше

Удаляли рабочие файлы до того, как подтверждалось, что новая версия реально создана - в момент удаления упало соединение к внешнему инструменту, и часть работы пришлось восстанавливать вручную. Теперь порядок жёсткий: сначала бэкап, потом генерация, потом проверка, что новый файл реально новее старого, и только тогда удаление старого

Один раз объявили файлы "потерянными безвозвратно", проверив только одну корзину - все 109 файлов из 109 нашлись во второй, облачной. Теперь при пропаже проверяем обе корзины, а не одну

11 рабочих хранилищ кода оказались публичными по умолчанию - агент в одной из сессий создавал их без приватного флага. Теперь любое новое хранилище создаётся приватным, публикация - отдельное осознанное решение

Cowork удалил 11 ГБ за 15 минут: что это значит для тебя

Пользователь попросил Claude Cowork прибраться в захламлённой папке с медиа, пока сам отошёл на 15 минут. Агент посчитал часть файлов мусором и удалил их безвозвратно, мимо корзины - 11 гигабайт без возможности восстановления. История стала вирусной на Hacker News, и там же разошлись во мнениях о том, что случилось на самом деле

Пользователь slau высказал скепсис: «As soon as you ask 'give me a list of all the commands that led to the deletion', isn't it extremely likely to just invent an rm in there?» - самоотчёт агента о причине не всегда точен, он может задним числом придумать правдоподобное объяснение. Пользователь lumirth возразил: «close to impossible ≠ impossible, so precautions are still essential» - близко к невозможному не значит невозможное, поэтому меры предосторожности всё равно нужны

Для тебя практический вывод не зависит от того, кто прав в этом споре. От такой же ошибки одинаково хорошо защищают: отдельная рабочая папка для агента вместо широкого доступа к системе, и бэкап важного вне этой папки. Это прямо совпадает с официальной рекомендацией Anthropic для Cowork - «consider creating a dedicated working folder for Claude rather than granting broad access, and keep backups of important files»

Если агент уже успел что-то сломать в коде, а не удалить файлы целиком - разбор того, как откатить именно код одной строкой, смотри в статье про откат изменений Claude Code. Список всех флагов запуска, включая те, что снимают часть защиты - в статье про флаги запуска Claude Code

Читайте также

Источники

Памятка: защита проекта от ИИ-агента за 10 минут

Четыре строки пути от беззащитного проекта до настроенной страховки

Сохрани себе

  • Перед сессией агента сделано сохранение состояния проекта (git add -A && git commit -m "before agent session")
  • Командой git log --oneline -1 проверено, что сохранение реально встало
  • Через /permissions добавлено правило deny на чтение .env~/.ssh, ~/.aws, если они есть на машине)
  • Запрет проверен на деле: агент попросил прочитать .env и получил отказ

Страховка настроена

Дальше вопрос не защиты, а системы вокруг агента

Git-коммит и правило deny закрывают самый частый класс ошибок - но это только первый слой. Собрать вокруг агента систему, которая держит боевой проект каждый день и не разваливается на реальной задаче - это то, чему я учу в ИИ-Лагере Три дня ИИ-Лагеря стоят ноль и не требуют новых инструментов - работаем ровно на той страховке, которую ты только что настроил

Забрать путёвку в ИИ-Лагерь

Заявка в закрытый канал, одобряю сразу. Бот сам напишет первым и покажет, как забрать три дня Лагеря. Бесплатно

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

Достаточно ли одного сохранения перед сессией, или нужно ещё что-то?

Для кода - в большинстве случаев да, точка сохранения перед сессией закрывает почти весь риск. Для файлов, которые этот способ не отслеживает (медиатека, документы, всё, что не лежит в самом проекте) - нужен отдельный бэкап, способ выше их не видит вообще

Что если я работаю не в окне для команд, а в VS Code или десктоп-приложении?

Команда /permissions работает одинаково везде, где есть чат с Claude Code. Режим доступа переключается через селектор в интерфейсе (VS Code - индикатор режима внизу окна чата, десктоп-версия - селектор рядом с кнопкой отправки), а не через Shift+Tab, который работает только в окне для ввода текстовых команд

Правило deny в /permissions можно случайно снять самому агенту?

Нет. Документация прямо это подтверждает: правила исполняет программа, не модель, и агент не может изменить их из чата - только ты через /permissions или прямую правку .claude/settings.json

Нужно ли повторять сохранение для каждой новой сессии?

Да, перед каждой сессией, где агент будет что-то менять. Это секунды работы, а не разовая настройка на весь проект - страховка защищает от ошибки именно этой сессии