# Как настроить Claude Code перед первой задачей: 8 шагов защиты секретов

> Перед первой задачей запускай Claude Code не в настоящем проекте, а в очищенной копии без ключей и паролей. Ниже покажу, какие границы поставить и как проверить запреты.

Источник: https://vibeceh.ru/guides/claude-code-zakryt-sekrety-ot-agenta-pered-pervoj-zadachej
Автор: Сергей Мазур · опубликовано 2026-08-15

**Коротко.** Запросы `claude code настройка` и claude code setup начинаются не с кнопки запуска. Claude Code получает доступ к файлам и командам проекта, поэтому перед первой задачей подготовь тестовую копию, убери ключи и пароли, проверь разрешения и задай правила в `CLAUDE.md`. Так ты уменьшаешь область, в которой агент может случайно увидеть или изменить лишнее.

## Что Claude Code видит в проекте и почему секреты нужно закрыть?

claude code agent работает на машине пользователя и получает доступ к файловой системе, shell и сети текущего пользователя. Поэтому фраза «не читай `.env`» не создаёт границу: секрет может попасть через команду, окружение, IDE, MCP или домашнее хранилище ключей. Перед запуском агенту нужна очищенная копия проекта без настоящих секретов и production-данных.

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

Проблема не в том, что агент обязательно начнёт искать ключи. Проблема в границе. Агент может неверно понять, где заканчивается тестовая среда и начинаются реальные системы.

Anthropic описывала похожую ошибку в собственных оценках:

В каждом случае в промпте оценки Anthropic указывала Claude, что среда является симуляцией и не имеет доступа к интернету. Из-за недопонимания между нами и партнёром по оценке это оказалось не так, и доступ к интернету был.

Одной инструкции оказалось мало. Поэтому я держу простое правило: настоящий секрет не должен попадать в доступную область вообще.

Запись в `CLAUDE.md` не остановит чтение через другой канал. Убери настоящие ключи из копии проекта, а запреты используй как дополнительный рубеж.

Главная граница здесь физическая. Если credentials никогда не попали в sandbox, их нельзя извлечь из этой среды независимо от того, кто ошибся: человек, модель или атакующий код.

## Безопаснее ли запускать Claude Code локально?

Локальный запуск Claude Code не делает секреты безопасными автоматически. Агент работает с файловой системой, shell и сетью текущего пользователя, поэтому получает ту же область доступа, которую даёт операционная система и настройки запуска. Без очищенной копии, sandbox или контейнера локальная работа остаётся работой рядом с личными ключами и конфигами.

Слово «локально» отвечает только на вопрос, где запущен процесс. Оно не отвечает на вопрос, что процесс может прочитать.

Если Claude Code запущен на ноутбуке, рядом могут находиться:

- `.env` и локальные конфиги;
- `~/.ssh`;
- `~/.aws`;
- `~/.config/gh`;
- `.netrc`;
- shell-профили;
- macOS Keychain;
- OAuth-токены и другие credentials.

| Полюс риска | Что может лежать рядом |
| --- | --- |
| Файлы проекта | `.env`, локальные конфиги, credential-файлы |
| Домашняя учётная запись | `~/.ssh`, `~/.aws`, Keychain, OAuth-токены |

При разрешённом Bash команда выполняется с правами текущего пользователя.

Anthropic формулирует границу прямо:

Claude Code запускается на машине пользователя и получает доступ к его файловой системе, shell и сети.

Локальный запуск удобен для тестовой копии. Но «на своём компьютере» не значит «изолированно». Изоляцию создают отдельная директория без секретов, sandbox или контейнер. Если нужен автономный режим, я бы не запускал его в домашней рабочей директории.

## Как подготовить тестовую копию проекта без ключей и паролей?

Подготовь отдельную копию проекта, оставь в ней только код и безопасные тестовые данные, убери `.env`, ключи, credential-файлы, дампы и production-данные, а домашние каталоги с учётными данными не включай в рабочую область. После этого добавь тестовые значения, проверь состав копии и только затем запускай первую задачу Claude Code.

![Кот смотрит на карточки с тремя шагами очистки тестовой копии проекта.](https://s3.regru.cloud/crossmark/statejnik/images/guides/claude-code-zakryt-sekrety-ot-agenta-pered-pervoj-zadachej/kadr-1.webp)

Точные команды копирования для Windows, macOS и Linux здесь не привожу: в фактуре нет проверенного варианта для всех трёх систем. Сделай копию через привычный файловый менеджер или имеющийся у тебя способ, но не смешивай её с настоящей рабочей директорией.

Скопируй исходники в новую директорию, которая не содержит домашние ключи и другие проекты.

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

Убери `.env`, `.env.*`, приватные ключи, credential-файлы, локальные конфиги, дампы, выгрузки и production-данные.

Не оставляй рядом с копией `~/.ssh`, `~/.aws`, `.netrc`, `.config/gh` и другие домашние хранилища. Они не становятся безопасными только потому, что код лежит в папке с названием `test`.

Добавь безопасные тестовые значения там, где приложение не запускается без конфигурации.

Тестовое значение должно быть искусственным. Не вставляй настоящий API key, пароль, OAuth-токен или production-адрес. Если приложение требует доступ к сервису, используй тестовую среду и тестовые токены с минимальными правами.

Добавь чувствительные пути в `.gitignore`, чтобы случайно не отправить их в историю.

`.gitignore` решает задачу Git. Он не скрывает файл от Claude Code, если файл физически лежит в рабочей области.

Просмотри дерево файлов до запуска агента.

Ищи не только `.env`. Проверь расширения `.pem`, `.key`, credential-файлы, архивы, дампы, логи, выгрузки и приватные конфиги. Отдельно проверь, не открыты ли такие файлы в IDE.

Закрой вкладки с `.env`, ключами и токенами, не выделяй из них строки и не копируй вывод терминала в чат.

IDE может передать выделенный текст в контекст Claude Code даже при запрете чтения самого файла. Поэтому чистой файловой копии мало, если редактор уже держит секрет перед агентом.

Создай `.claude/settings.local.json` или другой файл настроек с `permissions.deny`, затем проверь его искусственным секретом.

   ```json Claude Code settings
   {
     "permissions": {
       "deny": [
         "Read(./.env)",
         "Read(./.env.*)",
         "Read(./secrets/**)",
         "Read(./config/credentials.json)",
         "Read(./build)"  // авторское дополнение: в официальном примере этой строки нет
       ]
     }
   }
   ```

Этот пример взят из документации Claude Code. В фактуре есть отчёты о проблемах с `./` и совпадением путей, поэтому не считай файл рабочим без проверки на конкретной версии.

Сначала попроси агента описать структуру очищенной копии без изменения файлов.

   

После этого искусственно проверь запрет. Создай в очищенной копии тестовый `.env` со значением вроде `APP_ENV=dev`. Затем проверь, что Claude не читает файл через встроенный `Read` и не получает значение через окружение. Команды `env`, `printenv` и `echo $APP_ENV` упоминаются в фактуре как направления проверки, но не как полностью подтверждённый сценарий для каждой системы.

Отдельно проверяй историю сессии. Подтверждённой команды, которая доказывает отсутствие секрета в истории, в фактуре нет. Поэтому не отправляй настоящие значения в запросы и не вставляй их в терминал во время проверки.

Между чистой копией и рабочим проектом держи физическую границу. Не делай одну общую тестовую директорию, где лежат и очищенный код, и домашние ключи.

Тема статьи связана с практикумом напрямую: там такую связку собирают руками вместо одного чтения. Отдельно проходишь границы доступа, контекст и проверку результата.

## Какие настройки Claude Code запрещают доступ к секретам?

Для запрета чувствительных путей используй `permissions.deny` в `.claude/settings.local.json` или `.claude/settings.json`. Покрывай `.env`, `secrets/**`, credential-файлы и другие реальные категории проекта. Правила идут в порядке `deny -> ask -> allow`, а ограничения `Read` и `Edit` действуют только на встроенные файловые инструменты, не затрагивая любой Bash, MCP или IDE-канал.

![Мужчина закрывает лицо лапонью рядом с путями файлов, которые нужно запретить.](https://s3.regru.cloud/crossmark/statejnik/images/guides/claude-code-zakryt-sekrety-ot-agenta-pered-pervoj-zadachej/kadr-2.webp)

Официальная документация предлагает `permissions.deny` вместо устаревшего `ignorePatterns`:

Чтобы запретить Claude Code доступ к файлам с чувствительной информацией, например API-ключами, секретами и файлами окружения, используй настройку `permissions.deny` в файле `.claude/settings.json`.

Минимальные категории такие:

- `.env` и `.env.*`;
- `secrets/**`;
- `config/credentials.json`;
- приватные ключи;
- локальные конфиги;
- дампы и production-данные;
- домашние каталоги с credentials.

В фактуре есть примеры для `Read`, а также рекомендация учитывать `Edit`, `Write`, `Bash`, `Grep` и `Glob`. Но нельзя превращать этот список в обещание полной изоляции. `Read(./.env)` блокирует встроенный Read, но не обязательно блокирует `cat .env` через Bash.

Порядок правил такой:

1. `deny` - жёстко запрещает совпавшее действие;
2. `ask` - просит подтверждение;
3. `allow` - разрешает без дополнительного подтверждения.

Первое совпадение побеждает. Секреты закрывай через `deny`; `ask` оставь для действий, которые требуют ручной проверки.

С синтаксисом путей есть отдельная ловушка. В issue официального репозитория пользователь сообщил, что `./` может совпадать не с корнем проекта, а с буквальным путём. Другой отчёт описывает ситуацию, когда deny вообще не сработал. Я бы не копировал правило вслепую. Создай искусственный секрет, проверь совпадение и только потом считай настройку рабочей.

## Что написать в `CLAUDE.md`, а что он не защитит?

`CLAUDE.md` задаёт правила работы с проектом, но не создаёт технический запрет. Напиши в нём, какие каталоги не трогать, какие команды не запускать и когда останавливаться. Настоящую защиту дают очищенная копия, `permissions.deny`, sandbox и ограниченная сеть. Инструкция полезна как напоминание, но не заменяет границы файловой системы.

В `CLAUDE.md` можно зафиксировать намерение:

```markdown CLAUDE.md
# Правила работы в тестовой копии

- Работай только с файлами текущей тестовой копии.
- Не читай и не меняй .env, .env.*, secrets/**, credentials и приватные ключи.
- Не обращайся к домашним каталогам с учётными данными.
- Не запускай Bash без отдельного подтверждения.
- Перед изменением файлов сначала опиши план.
- После изменения покажи результат проверки.
```

Это делает задачу понятнее для модели. Но текстовая инструкция не остановит чтение через другой канал. В полевом отчёте описан случай, когда даже явная просьба не читать `.env` не помешала Claude иногда читать или менять файл.

`CLAUDE.md` задаёт правила работы с проектом. Для истории изменений есть `.gitignore`, а технический запрет обеспечивает deny. Главным слоем всё равно остаётся отсутствие настоящих секретов. Я бы держал все четыре слоя рядом.

## Как настроить разрешения Claude Code перед первой задачей?

Перед первой задачей оставь подтверждение команд включённым и разрешай только конкретные действия, которые нужны для проверки. Не разрешай весь Bash и не запускай `--dangerously-skip-permissions` в настоящей рабочей директории. Подтверждение остаётся человеческим контролем, но не заменяет очищенную копию, границы файловой системы и изоляцию сети.

Claude Code оценивает правила в порядке `deny -> ask -> allow`. Это позволяет сначала закрыть секретные пути, затем оставить опасные действия на подтверждении, а безопасные разрешить отдельно.

Для первой задачи я бы действовал так:

1. Запретил чтение и изменение категорий с секретами.
2. Оставил Bash под подтверждением.
3. Не выдавал общий `Bash(*)`.
4. Не подключал MCP-инструменты без необходимости.
5. Запустил короткую проверку в очищенной копии.
6. Остановился, если команда обращается к домашней директории, окружению или сети.

Запрос подтверждения не означает, что команда безопасна. Ты можешь не понять длинную shell-команду, устать от постоянных вопросов или подтвердить действие автоматически. Anthropic прямо называет такой подход подверженным ошибкам.

Для автономной работы Anthropic описывает два пути: встроенный sandbox или флаг `--dangerously-skip-permissions`. Второй отключает подтверждения и не даёт защиты. Даже sandbox не стоит воспринимать как замену проверке инфраструктуры.

`--dangerously-skip-permissions` не создаёт изоляцию. В настоящем проекте он оставляет агенту возможность действовать без человеческого вопроса, поэтому сначала убери секреты и ограничь среду.

Отдельно ограничивай сеть. Anthropic описывает sandbox как две границы: изоляцию файловой системы и изоляцию сети. Одна без другой оставляет путь к проблеме: без сетевого ограничения скомпрометированный агент может отправить чувствительный файл, а без файловой изоляции может выйти за пределы sandbox.

## Почему запрет на `.env` может не сработать?

Запрет на `.env` может не сработать из-за неверного синтаксиса пути, загрузки переменных при старте, обхода через Bash, MCP, IDE или hook. Даже рабочий `Read` deny действует только для конкретного инструмента, не охватывая весь компьютер. Проверяй искусственный секрет несколькими каналами и не делай вывод о защите по наличию одной строки в настройках.

![Кот проверяет искусственный секрет через три канала доступа.](https://s3.regru.cloud/crossmark/statejnik/images/guides/claude-code-zakryt-sekrety-ot-agenta-pered-pervoj-zadachej/kadr-3.webp)

Вот основные точки отказа.

**Неверный путь.** Запись `Read(./.env)` выглядит как путь от корня проекта, но в issue официального репозитория описано другое совпадение. Не считай шаблон доказанным без теста на текущей версии.

**Окружение процесса.** В отдельном отчёте Claude Code загружал и экспортировал `.env` при старте даже при запрете чтения. Значит, файл мог не пройти через Read, но значение уже оказалось доступно процессу.

**Bash.** Документация прямо разводит встроенный Read и shell. `Read(./.env)` не блокирует `cat .env` в Bash. Та же проблема касается команд, которые ищут строки или печатают окружение.

**Grep и Glob.** Полевое исследование сообщает, что Bash, Grep и Glob могут обходить файловые deny-правила. Не делай вид, что запрет одного инструмента накрывает остальные.

**MCP.** Подключённый MCP-инструмент может иметь собственный путь чтения. В исследовании приведён пример, где deny для встроенного Read не блокировал MCP-чтение файла.

**IDE.** Открытый `.env` или выделенный фрагмент может попасть в контекст через расширение IDE. В этом случае Claude не обязан был читать файл сам.

**Hooks.** [PreToolUse-хук](/guides/huki-ostanovit-opasnye-izmeneniya-claude-code) может выглядеть настроенным, но не запускаться. В issue пользователь сообщил о проблеме с вызовом PreToolUse и PostToolUse. Хук нужно проверять логом, а не считать включённым по наличию файла.

**Домашние хранилища.** При полном Bash-доступе процесс работает с правами текущего пользователя. В полевом отчёте описан поиск OAuth-токена в macOS Keychain после того, как токен не нашёлся в файлах.

Проверка искусственным секретом должна быть отдельным сценарием:

1. Положи в тестовую копию значение, которое нигде больше не используется.
2. Проверь отказ встроенного чтения.
3. Проверь, что значение не появилось в окружении.
4. Проверь команды Bash, Grep и Glob.
5. Не открывай файл в IDE и не выделяй его содержимое.
6. Если подключён MCP, проверь его отдельно.
7. Для hook проверь появление строки в логе.

Не используй настоящий ключ для такого теста. Искусственный секрет проверяет механизм, а не устойчивость реальной инфраструктуры.

## Вопросы и ответы

Подтверждено, что Claude Code умеет работать с Git, коммитить и отправлять код в GitHub; опасные действия закрываются [узкими разрешениями](/guides/claude-code-zakryt-put-k-opasnym-github-deystviyam). Отдельной фактуры о безопасном подключении Git именно к очищенной копии нет. Для этой статьи безопасная граница остаётся прежней: сначала отдельная копия без секретов, затем работа агента.

В фактуре подтверждены файлы, shell-команды, сеть, инструкции из файлов, результаты инструментов, IDE-контекст, MCP и hooks. Полного перечня всех источников контекста нет. Поэтому считай [контекст](/concepts/kontekst) шире, чем содержимое открытого файла: туда может попасть вывод команды, выделенный текст или результат внешнего инструмента.

Подтверждены встроенные инструменты чтения и изменения файлов, Bash, Grep, Glob, Task, а также [MCP-инструменты](/concepts/mcp) при подключении. Полного списка tools и детальной матрицы разрешений в фактуре нет. Для настройки закрывай не только Read, но и каналы, через которые содержимое может быть найдено или выведено.

В фактуре нет подтверждённого ответа о доступе Claude Code к браузеру и данным браузера. Не переноси правила для файлов на браузерный контекст. Если IDE, MCP или другой подключённый инструмент передаёт данные в сессию, проверяй этот канал отдельно.

Подтверждено, что разрешения управляют действиями инструментов, а sandbox ограничивает Bash за пределами заданных границ. Отдельного описания настройки tasks и дочерних агентов нет. Не выдавай широкие разрешения дочерним процессам и сначала проверяй их в очищенной копии.

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

Подтверждены удалённые сценарии и self-hosted окружения, где собственные машины или контейнеры становятся местом запуска сессий Claude Code. Подробной модели рисков remote-работы нет. Переноси в удалённую среду те же границы: очищенная копия, deny, sandbox и ограниченная сеть.

Фактура подтверждает сценарии self-hosted и работу Claude Code на собственных машинах или контейнерах, но не даёт инструкции по очистке VPS. Не считай VPS безопасным по умолчанию. Удали `.env`, ключи, дампы и production-данные из доступной копии до запуска агента.

Полного списка PowerShell-команд в фактуре нет. Подтверждён общий риск Bash и shell: агент может выполнять команды с правами текущего пользователя. Поэтому не разрешай весь PowerShell или весь Bash без проверки, а опасные команды оставляй под подтверждением и запускай в изолированной копии.

При разрешениях Claude Code может читать и менять файлы, запускать shell-команды и дочерние процессы, работать с сетью, Git, IDE и подключёнными MCP-инструментами. Полного перечня действий без контроля нет. Флаг `--dangerously-skip-permissions` отключает подтверждения и не даёт защиты.

Локальная работа удобна, но сама по себе не создаёт изоляцию. Claude Code получает доступ к файловой системе, shell и сети текущего пользователя. Без очищенной копии, sandbox или контейнера локальный запуск может находиться рядом с домашними ключами, Keychain и конфигами.

Для первой задачи достаточно ограничить работу очищенной копией и не давать доступ к настоящим секретам. Отдельного точного описания минимально необходимого доступа в фактуре нет. Разрешай только инструменты и команды, которые нужны для конкретной проверки, а Bash, сеть и MCP оставляй под контролем.

- [How we contain Claude across products - Anthropic Engineering](https://www.anthropic.com/engineering/how-we-contain-claude)
- [Claude Code sandboxing - Anthropic Engineering](https://www.anthropic.com/engineering/claude-code-sandboxing)
- [Settings - Claude Code Docs](https://code.claude.com/docs/en/settings)
- [Permissions - Claude Code Docs](https://code.claude.com/docs/en/permissions)
- [Investigating three real-world incidents in our cybersecurity evaluations - Anthropic](https://www.anthropic.com/news/investigating-incidents-cybersecurity-evals)
- [Issue #6699: deny permissions in settings.json are not enforced](https://github.com/anthropics/claude-code/issues/6699)
- [Issue #5935: incorrect use of ./ in permissions examples](https://github.com/anthropics/claude-code/issues/5935)
- [Issue #5616: Claude Code loads and exports .env on startup](https://github.com/anthropics/claude-code/issues/5616)
- [Issue #6305: PreToolUse and PostToolUse hooks](https://github.com/anthropics/claude-code/issues/6305?timeline_page=1)
- [Claude Code Deny Rules Not Enforced - Theory Delta](https://theorydelta.com/findings/claude-code-deny-rules-not-enforced/)
- [Remember to deny Claude from reading your .env - Reddit](https://www.reddit.com/r/ClaudeCode/comments/1tseg1c/remember_to_deny_claude_from_reading_your_env/)
- [Claude Code can access .env through the IDE - Reddit](https://www.reddit.com/r/ClaudeCode/comments/1tea15l/claude_code_can_access_env_file_through_the_ide/)
- [Did you know that Claude Code has full access to your macOS Keychain? - Reddit](https://www.reddit.com/r/ClaudeCode/comments/1rgesbf/did_you_know_that_claude_code_has_full_access_to/)
