subagent-read-only-guard — хук для Claude Code: обзор и установка
Хук PreToolUse запрещает субагентам Claude Code менять файлы и выполнять небезопасные команды в терминале.
npx claude-code-templates@latest --hook security/subagent-read-only-guardЧто делает subagent-read-only-guard
Скрипт проверяет поле agent_id, которое Claude Code добавляет только во вызовы от субагентов. Если запрос пришёл от субагента, хук сразу отклоняет вызовы инструментов Edit, Write, MultiEdit, NotebookEdit и PowerShell. Основного диалога эти правила не касаются.
Команды в Bash и Monitor сверяются со списком безопасных утилит: ls, cat, grep, rg, find, jq, sort, cd и чтения в git. Любое перенаправление в файл, запуск подоболочек, раскрытие переменных вроде $VAR, префиксы окружения или флаг git -c вызывают отказ. Ошибки парсинга скрипт тоже трактует как запрет.
Хук не защищает от вызовов через инструменты MCP и не блокирует чтение файлов с секретами вроде .env, поэтому для них нужна отдельная защита.
Какие задачи решает
- запретить субагентам редактировать и перезаписывать исходный код
- ограничить команды в Bash списком безопасных утилит вроде
grepиls - заблокировать запуск PowerShell и перенаправление вывода в файлы
- исключить случайную модификацию репозитория при фоновом поиске
Примеры запросов агенту
- Запусти субагента, чтобы он изучил структуру модулей в папке
src/ - Проверь историю коммитов через субагента и найди, когда изменился конфиг
- Найди все вызовы устаревшего API во всех подпроектах через субагентов
Как установить subagent-read-only-guard
1Через claude-code-templates
npx claude-code-templates@latest --hook security/subagent-read-only-guard2Вручную: положить файлы
.claude/settings.jsonБлок hooks: событие (PreToolUse, PostToolUse, Stop…) → команда. Личные — ~/.claude/settings.json
По шагам, с командами для каждой платформы: Хуки Claude Code: что это, где настраивать и как запретить опасную команду
Вопросы о subagent-read-only-guard
Как установить subagent-read-only-guard в Claude Code?
Выполните команду npx claude-code-templates@latest --hook security/subagent-read-only-guard. Шаблон скопирует скрипт .claude/hooks/subagent-read-only-guard.py и пропишет хук PreToolUse в .claude/settings.json.
Зачем нужен хук subagent-read-only-guard?
Он гарантирует режим только для чтения для вспомогательных субагентов, запрещая им править код и запускать изменяющие команды. При этом главный сеанс сохраняет полный доступ к инструментам редактирования.
Что не перехватывает этот хук?
Защита не распространяется на вызовы сторонних MCP-серверов. Также хук не запрещает субагентам читать конфиги с секретами вроде .env, поэтому автор рекомендует совмещать его с правилом env-file-protection.
Исходный текст
subagent-read-only-guard.json · MIT
{
"description": "Enforces read-only subagents. A PreToolUse hook denies Edit, Write, MultiEdit, NotebookEdit and PowerShell, and any Bash or Monitor command that is not read-only, when the call comes from a subagent (detected by the agent_id field Claude Code adds only inside subagents; tested on Claude Code 2.1.296). Shell commands pass only when every command is a bare program from a short read-only allowlist (ls, cat, grep, rg, find, jq, sort, sed -n 'N,Mp', cd, git log/diff/status/show/blame/branch/tag and similar) without the options that make it write or run other programs, including abbreviated long options. Redirection to files, command substitution, shell expansion ($VAR, {a,b}), subshells, env-var prefixes, git -c and anything the guard cannot classify are denied, including its own errors. The main conversation is never affected. Not covered: MCP tools, and git diff/blame running diff or textconv drivers already configured in the repo. Reading secrets (.env, printenv) is still allowed, so pair it with env-file-protection. Pairs with the hooks/subagents-explore-only setting, which tells subagents up front that they are exploration-only.",
"supportingFiles": [
{
"source": "subagent-read-only-guard.py",
"destination": ".claude/hooks/subagent-read-only-guard.py",
"executable": true
}
],
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write|MultiEdit|NotebookEdit|PowerShell|Bash|Monitor",
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/subagent-read-only-guard.py"
}
]
}
]
}
}
© davila7 · MIT · davila7/claude-code-templates