force-push-blocker — хук для Claude Code: что делает и как установить
Блокирует попытки Claude Code отправить изменения в Git с флагами принудительной перезаписи истории.
npx claude-code-templates@latest --hook security/force-push-blockerЧто делает force-push-blocker
Хук перехватывает вызовы инструмента Bash перед их исполнением через событие PreToolUse. Внутри настроены фильтры по шаблонам команд: скрипт ловит вызовы вида git push *--force* и git push *-f*. Это предотвращает перезапись удалённой ветки при неосторожных действиях агента.
Когда условие совпадает, хук возвращает JSON с решением deny и причиной блокировки. Команда не выполняется, а история репозитория остаётся целой.
Правило отсекает не только прямой --force, но также короткий ключ -f и вариант --force-with-lease. Если в проекте действительно понадобится переписать удалённую ветку, запускать такую команду придётся вручную в своём терминале.
Какие задачи решает
- заблокировать случайный git push --force от агента
- защитить удалённые ветки от перезаписи истории через git push -f
- остановить отправку правок с флагом --force-with-lease через PreToolUse
Примеры запросов агенту
- Попробуй выполнить git push --force в origin main
- Сделай git push -f в текущую ветку
- Отправь ветку с флагом --force-with-lease
Как установить force-push-blocker
1Через claude-code-templates
npx claude-code-templates@latest --hook security/force-push-blocker2Вручную: положить файлы
.claude/settings.jsonБлок hooks: событие (PreToolUse, PostToolUse, Stop…) → команда. Личные — ~/.claude/settings.json
По шагам, с командами для каждой платформы: Хуки Claude Code: что это, где настраивать и как запретить опасную команду
Вопросы о force-push-blocker
Как установить force-push-blocker в Claude Code?
Выполните команду npx claude-code-templates@latest --hook security/force-push-blocker, либо добавьте конфигурацию хука в файл .claude/settings.json.
Что делает force-push-blocker?
Он проверяет вызовы терминала на стадии PreToolUse и отклоняет запуск команды git push, если в ней указаны флаги принудительной отправки.
Какие варианты флагов отслеживает хук?
Шаблоны перехватывают флаги --force, --force-with-lease и короткий флаг -f.
Исходный текст
force-push-blocker.json · MIT
{
"description": "Block git force push commands using the if condition for efficient filtering. Prevents accidental force pushes that can overwrite remote history. Covers --force, --force-with-lease, and the -f shorthand.",
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"if": "Bash(git push *--force*)",
"command": "echo '{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"deny\",\"permissionDecisionReason\":\"Force push is blocked by hook\"}}'"
},
{
"type": "command",
"if": "Bash(git push *-f*)",
"command": "echo '{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"deny\",\"permissionDecisionReason\":\"Force push (-f) is blocked by hook\"}}'"
}
]
}
]
}
}
© davila7 · MIT · davila7/claude-code-templates