В прошлом уроке ты запустил Claude из скрипта. Теперь — запуск, который работает без присмотра, долго и с правками файлов. Главный принцип: такой прогон делает ровно то, что ты разрешил заранее. Значит, разрешай мало, а остальное ограничивай.
Пять рамок
- Минимальные права. Режим
dontAskотклоняет всё, что потребовало бы вопроса. Разреши только папки, которые задача правит, и одну команду, которую она запускает. - Песочница. Пусть система ограничивает, что могут разрешённые команды, — и пусть прогон не стартует, если песочница недоступна.
- Лимиты.
--max-turnsограничивает ходы,--max-budget-usd— примерную стоимость. - Ворота проверки. Запрети
git commitиgit push. Результат останется в рабочем дереве, а коммитишь ты — после того как прочитал дифф. - Оценка цены. Сначала прогони маленький кусок задачи и по нему поставь лимит бюджета.
Файл рамок
Рамки удобно хранить в отдельном файле, например .claude/bounded-run.json:
{
"permissions": {
"allow": ["Edit(./src/**)", "Edit(./test/**)", "Bash(npm test *)"],
"deny": ["Agent", "Read(./.env)", "Read(./.env.*)", "Bash(git commit *)", "Bash(git push *)"]
},
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false
}
}
denyнаAgentне даёт Claude передать работу , у которого может оказаться свой режим разрешений;failIfUnavailable— не стартовать без песочницы;allowUnsandboxedCommands: false— не повторять команду вне песочницы.
Запуск
claude -p "Добавь тест для одной непокрытой функции в src/links.js" \
--setting-sources project \
--settings .claude/bounded-run.json \
--permission-mode dontAsk \
--model sonnet \
--max-turns 15 \
--max-budget-usd 2 \
--output-format json
--setting-sources project не подмешивает твои личные настройки — например, разрешение, сохранённое кнопкой «Да, и больше не спрашивать». В рамки попадает только то, что ты в них явно записал.
Когда лимит срабатывает, код выхода ненулевой, а в JSON subtype объясняет причину: error_max_turns или error_max_budget_usd. Поле total_cost_usd — оценка на стороне клиента, а не твой счёт.
Ты — ворота проверки
После прогона прочитай git status и git diff, включая сам файл рамок, сам запусти тесты и закоммить только то, что принимаешь. Для второго мнения попроси свежую сессию Claude проверить дифф в чистом контексте.
Мини-проверка
Прогон закончился с subtype success, тесты зелёные. Можно сразу пушить?
Осторожно
Защищённая папка .claude/ в режиме dontAsk недоступна для записи инструментами Claude — он не сможет ослабить собственные рамки. Но сам файл рамок ты пишешь руками: прочитай его после каждой правки так же внимательно, как код. Одна лишняя звёздочка в allow открывает больше, чем кажется.
Практика в терминале
Рамки за минуту