Anthropic поставила жесткую цифру на проблему, которую уже чувствует каждый активный пользователь Claude Code: пользователи одобряли около 93% запросов на разрешения, а компания говорит, что внимание падает по мере накопления таких запросов (Anthropic). Это усталость от подтверждений, и она превращает “человека в контуре” в “человека, который держит Enter.”
Неправильная реакция — запустить --dangerously-skip-permissions на своем ноутбуке и надеяться, что модель будет вести себя прилично. Правильная реакция — скучная инженерия безопасности: посадить Claude Code в dev container, дать ему только репозиторий, ограничить исходящий трафик, политикой отключить режим обхода и использовать auto mode только там, где он действительно поддерживается.
В этом гайде — рабочая конфигурация, которую можно добавить в репозиторий уже сегодня. Еще здесь разбирается текущий спор в сообществе: разработчики хотят, чтобы агенты были автономнее, но не хотят невидимых ограничителей и черных ящиков, которые шарятся по файлам. Практический ответ — не “доверяйте Claude сильнее.” А “сделайте радиус поражения настолько маленьким, чтобы автономность стала приемлемой.”

На самом деле спор идет о наблюдаемости и радиусе поражения
Тред на Hacker News вокруг “Anthropic tries to hide Claude’s AI actions” — это не просто театр жалоб. Один комментатор точно сформулировал страх разработчиков: если агент начинает открывать устаревшие конфиги или ползать по нерелевантным файлам, оператор должен узнать об этом достаточно быстро, чтобы остановить его (Hacker News). Другой тред про запуск Claude Code “dangerously” сошелся на той же практической схеме: пусть агент работает свободно, но только внутри песочницы с ограниченным доступом к файлам и сети (Hacker News).
Собственный инженерный пост Anthropic приходит к тому же выводу. Он делит защиты на окружение, модель и внешний контент. Окружение — это та часть, которую вы можете сделать детерминированной. Если учетные данные никогда не попадают в песочницу, Claude не сможет их эксфильтрировать — неважно, причина в prompt injection, чрезмерной инициативе модели или плохой пользовательской инструкции (Anthropic).
Auto mode хорошо сюда ложится, но это не магия. Anthropic говорит, что auto mode использует отдельный классификатор для проверки действий перед запуском, а документация называет его research preview, а не заменой ревью для чувствительных операций (Claude Code docs). Это важное различие. Auto mode уменьшает количество запросов. Контейнеры уменьшают последствия.
Вот позиция, которую я рекомендую командам:
| Режим | Используйте для | Не используйте для |
|---|---|---|
plan | незнакомых репозиториев, рискованных изменений | долгих правок без присмотра |
acceptEdits | обычной разработки фич | деплоев, секретов, изменений инфраструктуры |
auto | изолированных dev containers с контролем исходящего трафика | production-систем или неизвестных репозиториев |
bypassPermissions | только одноразовых VM | ноутбуков разработчиков |
В документации Anthropic сказано, что auto mode требует Claude Code v2.1.83 или новее. В Anthropic API среди поддерживаемых моделей указаны Claude Opus 4.6 или новее и Sonnet 4.6. Для Bedrock, Vertex AI и Microsoft Foundry документация перечисляет только Opus 4.7 и Opus 4.8 для auto mode (Claude Code docs).
Соберите Dev Container
Создайте в репозитории три файла:
.devcontainer/
devcontainer.json
Dockerfile
managed-settings.json
Начните с .devcontainer/devcontainer.json:
{
"name": "claude-code-safe",
"build": {
"dockerfile": "Dockerfile"
},
"remoteUser": "node",
"mounts": [
"source=claude-code-config-${devcontainerId},target=/home/node/.claude,type=volume"
],
"runArgs": [
"--cap-add=NET_ADMIN",
"--cap-add=NET_RAW"
],
"containerEnv": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"DISABLE_AUTOUPDATER": "1",
"ANTHROPIC_BASE_URL": "https://api.onehop.ai/anthropic",
"ANTHROPIC_API_KEY": "${localEnv:ONEHOP_API_KEY}"
},
"postCreateCommand": "sudo /usr/local/bin/init-firewall.sh"
}
Документация Anthropic по dev container рекомендует запускать Claude Code внутри контейнера, чтобы команды выполнялись не на хосте, а изменения при этом все равно появлялись в смонтированном репозитории (Claude Code docs). Там же предупреждают: не монтируйте секреты хоста вроде ~/.ssh или файлов с облачными учетными данными. Следуйте этому совету. Если Claude нужен GitHub-токен в рамках репозитория, передайте короткоживущий токен через окружение. Не bind-mount весь домашний каталог просто потому, что так удобно.
Теперь Dockerfile:
FROM mcr.microsoft.com/devcontainers/javascript-node:22
RUN npm install -g @anthropic-ai/claude-code@latest
COPY managed-settings.json /etc/claude-code/managed-settings.json
COPY init-firewall.sh /usr/local/bin/init-firewall.sh
RUN chmod +x /usr/local/bin/init-firewall.sh
Документация Anthropic также предлагает Dev Container Feature, но установка через Dockerfile упрощает командное понимание политики и версионирования. Если нужна воспроизводимость, закрепите @anthropic-ai/claude-code на конкретной версии и оставьте DISABLE_AUTOUPDATER=1.
Заблокируйте права до включения Auto Mode
Создайте .devcontainer/managed-settings.json:
{
"permissions": {
"defaultMode": "auto",
"disableBypassPermissionsMode": "disable",
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(./config/credentials.json)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(git push *)",
"Bash(kubectl *)",
"Bash(terraform apply *)",
"WebFetch(domain:169.254.169.254)"
],
"ask": [
"Bash(npm publish *)",
"Bash(docker push *)",
"Bash(gh release *)"
],
"allow": [
"Bash(npm install)",
"Bash(npm test *)",
"Bash(npm run lint *)",
"Bash(git diff *)",
"Bash(git status *)"
]
},
"autoMode": {
"environment": {
"trustedDomains": [
"registry.npmjs.org",
"github.com"
]
}
}
}
Здесь две детали действительно работают.
Во-первых, disableBypassPermissionsMode блокирует bypassPermissions и отключает флаг --dangerously-skip-permissions, когда это enforced through managed settings. Anthropic документирует именно этот контроль в справочнике настроек (Claude Code docs).
Во-вторых, deny-правила все еще важны в auto mode. Anthropic говорит, что auto mode блокирует действия, которые выходят за рамки запроса, нацелены на нераспознанную инфраструктуру или выглядят как навязанные вредоносным контентом, но не стоит отдавать политику вашей команды на аутсорс классификатору. Если никто не должен запускать terraform apply из агентской сессии, закодируйте это deny-правилом.
Одна оговорка: policy, управляемая из репозитория, может быть изменена любым, кто может редактировать репозиторий. В документации Anthropic сказано, что /etc/claude-code/managed-settings.json имеет высокий приоритет внутри Linux, но для политики, которую разработчики не смогут обойти редактированием файлов репозитория, используйте server-managed settings или MDM (Claude Code docs). Для стартап-команды политика в репозитории все равно хорошая базовая линия. Для enterprise-раскатки на этом останавливаться нельзя.

Ограничьте исходящий трафик небольшим allowlist
Добавьте .devcontainer/init-firewall.sh:
#!/usr/bin/env bash
set -euo pipefail
ALLOWED_HOSTS=(
api.onehop.ai
api.anthropic.com
claude.ai
platform.claude.com
registry.npmjs.org
github.com
raw.githubusercontent.com
)
iptables -P OUTPUT DROP
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
for host in "${ALLOWED_HOSTS[@]}"; do
for ip in $(getent ahostsv4 "$host" | awk '{print $1}' | sort -u); do
iptables -A OUTPUT -p tcp -d "$ip" --dport 443 -j ACCEPT
done
done
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
Это намеренно простая схема. Она резолвит разрешенные имена хостов при старте и разрешает TCP 443 на эти IP. Для production-grade контроля поставьте контейнер за прокси и логируйте каждый запрос. Но даже это базовое deny-by-default правило лучше, чем позволять автономному coding agent разговаривать со всем интернетом.
Сетевые документы Anthropic перечисляют нужные домены вроде api.anthropic.com, claude.ai, platform.claude.com, downloads.claude.ai, storage.googleapis.com и raw.githubusercontent.com, в зависимости от пути установки и авторизации (Claude Code docs). Если вы устанавливаете через npm и отключаете автообновления, download-домены во время выполнения могут не понадобиться. Держите список узким, а домены добавляйте только когда сборки падают по понятной причине.
Запустите:
export ONEHOP_API_KEY=oh_your_key_here
code .
# VS Code: Dev Containers: Rebuild and Reopen in Container
claude --permission-mode auto
Внутри контейнера проверьте:
whoami
claude --version
curl -I https://api.onehop.ai
curl -I https://example.com
Запрос к OneHop должен пройти. Запрос к example.com должен упасть, если вы не добавили его.
Маршрутизируйте Claude Fable 5 через OneHop
Anthropic выпустила Claude Fable 5 и Claude Mythos 5 9 июня 2026 года: Fable 5 стоит $10 за миллион входных токенов и $50 за миллион выходных токенов, то есть меньше половины цены Mythos Preview (Anthropic). OneHop указывает Claude Fable 5 как anthropic/claude-fable-5: официальная цена показана как $10/M input и $50/M output, а цена OneHop — $3/M input и $15/M output, плюс $10 бесплатного кредита для новых пользователей без обязательной карты (OneHop).
Текущая операционная заметка: на странице OneHop Fable 5 сказано, что модель временно недоступна, хотя все еще находится в списке. Оставьте конфиг на месте, но рассчитывайте использовать его, когда у вашего аккаунта и региона появится доступ.
Для прямого вызова Anthropic Messages через OneHop используйте Anthropic-совместимый endpoint, который OneHop публикует для этой модели:
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.onehop.ai/anthropic",
api_key="oh_your_key_here",
)
message = client.messages.create(
model="anthropic/claude-fable-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Summarize this repo's test strategy."}],
)
print(message.content[0].text)
Если ваше приложение уже использует OpenAI-совместимый gateway OneHop, однострочная смена base URL такая:
client = OpenAI(base_url="https://api.onehop.ai/v1", api_key="oh_your_key_here")
Именно для Claude Code используйте Anthropic-совместимый base URL в ANTHROPIC_BASE_URL, потому что Claude Code говорит на Anthropic Messages API. Страница модели Fable 5 в OneHop сейчас указывает Anthropic Messages как доступный по адресу https://api.onehop.ai/anthropic, тогда как OpenAI Chat Completions для этой модели помечен как неподдерживаемый (OneHop).

Операционная модель: меньше доверяйте, быстрее ship
Лучший сетап Claude Code — не самый разрешающий. Лучший — тот, где ошибки дешевы.
Используйте режим plan, когда Claude исследует новую кодовую базу. Переключайтесь на auto только после того, как задача ограничена. Держите bypassPermissions отключенным политикой. Запрещайте чтение секретов. Запрещайте деплои, push в защищенные ветки, облачные мутации и metadata endpoints. Помещайте агента в непривилегированный dev container. По умолчанию блокируйте исходящий трафик. Проверяйте diff перед merge.
Это может звучать медленнее, чем YOLO mode. На практике это быстрее, потому что никому не приходится нянчиться с 40 тривиальными запросами или гадать, не разрешило ли очередное подтверждение модели утащить токен. Собственный пост Anthropic про containment говорит, что эталонный dev container существует для того, чтобы Claude Code мог работать без присмотра и без подтверждения каждого действия (Anthropic). Недостающая часть — командная политика.
Если хотите самый короткий путь попробовать Fable-класс coding work без пересборки provider stack, маршрутизируйте через Claude Fable 5 on OneHop. Новые аккаунты могут начать с $10 бесплатно. Смена base URL — легкая часть. Настоящий выигрыш — сочетать ее с контейнером, который делает автономность достаточно безопасной, чтобы ей пользоваться.