~/.claude/, git, текстовый редактор. Точные номера версий, в которых доступны конкретные ключи settings.json, — сверьтесь с документацией.
bash.~/.claude/.git установлен и настроен (git config --get user.email возвращает значение).Что сделать: проверьте, что установлено и где лежат файлы конфигурации.
claude --version
ls -la ~/.claude/settings.json .claude/settings.json .claude/settings.local.json 2>&1
git config --get user.email
Зачем: Claude Code читает настройки из трёх уровней — пользовательский ~/.claude/settings.json, проектный .claude/settings.json и локальный .claude/settings.local.json (его обычно не коммитят). Более конкретный уровень перекрывает общий, поэтому важно знать, какой файл существует у вас: править несуществующий бессмысленно.
Как проверить: ls выведет пути существующих файлов или No such file or directory — последнее значит, что файл нужно создать. Если ни одного файла нет, создайте пользовательский:
mkdir -p ~/.claude && cp /dev/null ~/.claude/settings.json
cp ~/.claude/settings.json ~/.claude/settings.json.bak
Пример: вывод git config --get user.email вида ivan.petrov@company.ru — это ровно та строка, которая попадёт в поле Author каждого коммита, сделанного агентом. Если там личный адрес, его и увидит любой, кто откроет git log.
Что сделать: посмотрите, какие инструменты выданы Claude Code сейчас, и какие сетевые вызовы он реально делает.
env | grep -E 'ANTHROPIC|CLAUDE'
cat ~/.claude/settings.json
Внутри запущенной сессии проверьте список разрешений командой /permissions — она показывает действующие правила allow/ask/deny.
Зачем: у Claude Code есть инструменты с выходом в сеть — WebFetch (загрузка страницы по URL и её разбор моделью), WebSearch (поиск) и Bash, через который агент может выполнить curl, wget, ssh. Плюс MCP-серверы (внешние плагины-инструменты, которые вы подключаете сами) со своим сетевым доступом. Пока вы не видите список, вы не знаете, что именно блокировать.
Как проверить: /permissions выводит таблицу правил. Пустой список deny означает, что сетевые инструменты не ограничены ничем, кроме запроса подтверждения.
Пример: в выводе env строка ANTHROPIC_BASE_URL=https://api.anthropic.com — значит, запросы к модели идут на официальный эндпоинт. Если там сторонний адрес (прокси, реселлер), весь ваш код уходит через него — этот параметр надо осознанно подтвердить или убрать.

Что сделать: внесите правила в ~/.claude/settings.json.
{
"permissions": {
"deny": [
"WebFetch",
"WebSearch",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(nc:*)",
"Bash(ssh:*)",
"Bash(scp:*)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./**/*.pem)"
],
"ask": [
"Bash(git push:*)"
]
},
"env": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"DISABLE_TELEMETRY": "1",
"DISABLE_ERROR_REPORTING": "1"
},
"includeCoAuthoredBy": false
}
Зачем: каждая строка закрывает свой канал.
| Что уходит | Через что | Чем закрывается |
|---|---|---|
| Содержимое файлов на сторонний сайт | `WebFetch`, `Bash(curl:*)` | `permissions.deny` |
| Поисковые запросы (фрагменты кода в них) | `WebSearch` | `permissions.deny` |
| Секреты из `.env` в контекст модели | `Read` | `Read(./.env)` в `deny` |
| Метрики использования и отчёты об ошибках | встроенная телеметрия | `DISABLE_TELEMETRY`, `DISABLE_ERROR_REPORTING` |
| Личный email в истории git | строка `Co-Authored-By` | `includeCoAuthoredBy: false` |
Bash(curl:*) — правило с двоеточием означает «команда curl с любыми аргументами»; звёздочка тут обязательна. includeCoAuthoredBy: false убирает из сообщения коммита подпись соавтора, но не меняет поле Author — его берёт из git config.
Поэтому отдельно поправьте авторство, если не хотите светить личный адрес:
git config --global user.email "<ваш-noreply@users.noreply.github.com>"
git config --global user.name "<Ваше Имя>"
Как проверить: файл остаётся валидным JSON и правила подхватились.
python3 -m json.tool ~/.claude/settings.json > /dev/null && echo "JSON OK"
Пример: JSON OK — синтаксис верный. Запятая после последнего элемента массива даст Expecting property name enclosed in double quotes — это самая частая поломка, из-за которой настройки молча не применяются.
Для полного отказа от внешнего трафика есть более радикальный вариант — направить Claude Code на локальную модель через OpenAI-совместимый API: см. как подключить локальную модель к Claude Code. А если настройку нужно раскатать на всю команду, а не на свою машину, используйте managed-настройки из гайда Claude Code для команды — они имеют приоритет над пользовательскими.

Что сделать: прогоните три проверки — сеть, телеметрия, коммит.
claude -p "Открой https://example.com и перескажи первую строку"
Зачем: это живой тест блокировки. Флаг -p (print mode) выполняет один запрос без интерактивной сессии, поэтому отказ видно сразу и воспроизводимо.
Как проверить: ожидаемый результат — отказ, а не текст страницы. Claude Code сообщит, что использование WebFetch запрещено настройками; формулировка зависит от версии — сверьтесь с документацией. Если вместо отказа пришёл пересказ Example Domain, правило не применилось: проверьте, в тот ли файл вы писали и нет ли перекрывающего .claude/settings.local.json.
Второй тест — коммит:
git commit --allow-empty -m "test privacy"
git log -1 --format='%an <%ae>%n%b'
git reset --hard HEAD~1
Ожидаемо: в поле автора — адрес из git config, в теле коммита нет строки Co-Authored-By: Claude. Третья команда откатывает тестовый коммит.
Чек-лист приёмки:
/permissions показывает WebFetch и WebSearch в списке denyhttps://example.com отклонёнgit log -1 не содержит личного email и подписи соавтораenv | grep DISABLE_TELEMETRY внутри сессии возвращает 1python3 -m json.tool ~/.claude/settings.json не выдаёт ошибокПроблема. Агент вместо ответа пишет, что инструмент запрещён
Permission to use WebFetch has been denied.deny — это штатное поведение, но вы ждали, что агент просто «сходит» на один доверенный домен."WebFetch" из deny и добавьте белый список в allow:"allow": ["WebFetch(domain:docs.anthropic.com)"]
Правило WebFetch(domain:<домен>) разрешает загрузку только с указанного хоста; остальные остаются заблокированными.
Проблема. После включения приватности падают тесты
Permission to use Read has been denied. при попытке прочитать .envRead(./.env), а тестовому прогону нужны переменные окружения из этого файла.Read не нужен:set -a && . ./.env && set +a && npm test
Ключи попадут в процесс, но не в контекст модели и не в историю переписки.
Проблема. В истории git остался рабочий email
Author: Ivan Petrov <ivan.petrov@company.ru>includeCoAuthoredBy: false убирает только строку соавтора; поле Author формирует git из user.email на момент коммита.git config user.email "<ваш-noreply@users.noreply.github.com>"
git commit --amend --reset-author --no-edit
Уже запушенные коммиты так не исправить — там нужен git filter-repo, и это отдельная операция с согласованием в команде.
Сетевые инструменты, телеметрия и подпись в коммитах закрываются одним файлом ~/.claude/settings.json, а проверяются тремя командами из Шага 3. Дальше имеет смысл разобраться, что провайдер делает с уже отправленными данными — см. как отключить обучение на своих данных в ChatGPT, Claude и Gemini.
Передаёт ли Claude Code мой код на сторонние сайты по умолчанию?
Запросы к модели идут на эндпоинт из ANTHROPIC_BASE_URL. Отдельно существует риск через инструменты с выходом в сеть (WebFetch, Bash(curl:*)) и через MCP-серверы, которые вы подключили сами — их список и поведение сверьте с документацией.
Достаточно ли выставить DISABLE_TELEMETRY=1?
Нет. Эта переменная выключает метрики использования, но не запрещает агенту загружать страницы. Нужны ещё правила permissions.deny на WebFetch/WebSearch и сетевые команды в Bash.
Где настройки имеют наименьший приоритет?
Пользовательский ~/.claude/settings.json. Проектный .claude/settings.json и managed-конфиг перекрывают его, поэтому правило, добавленное в проект, может отменить ваш запрет — проверяйте /permissions внутри рабочей папки.
Можно ли вообще убрать внешний трафик?
Да, если направить клиент на локальную модель через ANTHROPIC_BASE_URL — тогда запросы не покидают вашу машину. Ограничения и рабочие конфиги — в гайде по локальной модели.