destructive-guard
Блокирует деструктивные bash-команды: rm -rf, DROP TABLE, git reset --hard. Спрашивает подтверждение.
Описание
Простым языком
Некоторые команды в терминале необратимы. Удалил не ту папку — данных больше нет. AI иногда уверенно предлагает такие команды. Этот хук как красная кнопка с крышкой: команда блокируется и тебе объясняют почему.
Раньше AI мог выполнить опасную команду сам. Теперь хук перехватывает её и говорит: выполни вручную если уверен. Это даёт тебе секунду подумать.
Что делает
Хук destructive-guard перехватывает деструктивные bash-команды до их выполнения и блокирует их. rm -rf /, DROP TABLE, git reset --hard, docker system prune -a — всё это требует явного подтверждения или блокируется полностью.
AI иногда предлагает "очистить" что-то слишком агрессивно. Этот хук — страховка от команд, которые нельзя отменить.
Когда срабатывает
Триггер: PreToolUse — до выполнения Bash. Условие: команда содержит деструктивные паттерны. Действие: выход с кодом 2 блокирует выполнение.
Установка
- Добавь конфиг
PreToolUseнаBashв.claude/settings.json - Создай
~/.claude/hooks/destructive-guard.shс правамиchmod +x - Проверь: попроси AI выполнить
rm -rf ./temp— должен получить предупреждение
Конфиг settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/destructive-guard.sh"
}
]
}
]
}
}Скрипт хука
#!/bin/bash
# destructive-guard.sh — блокировка деструктивных команд
# PreToolUse: Bash
CMD="${CLAUDE_TOOL_INPUT_COMMAND:-}"
[ -z "$CMD" ] && exit 0
BLOCKED=0
if echo "$CMD" | grep -qE 'rms+(-rf?|-f?r)s+(/|~|$HOME)'; then
echo "BLOCKED [destructive-guard] rm -rf на корневом пути"
BLOCKED=1
fi
if echo "$CMD" | grep -qiE 'DROPs+(TABLE|DATABASE|SCHEMA)'; then
echo "BLOCKED [destructive-guard] DROP TABLE/DATABASE — нужен бэкап"
BLOCKED=1
fi
if echo "$CMD" | grep -qiE 'TRUNCATEs+TABLE'; then
echo "BLOCKED [destructive-guard] TRUNCATE TABLE — необратимо"
BLOCKED=1
fi
if echo "$CMD" | grep -qE 'gits+resets+--hard'; then
echo "BLOCKED [destructive-guard] git reset --hard потеряет незакоммиченные изменения"
BLOCKED=1
fi
if echo "$CMD" | grep -qE 'gits+cleans+(-fd|-df)'; then
echo "BLOCKED [destructive-guard] git clean -fd удалит неотслеживаемые файлы"
BLOCKED=1
fi
if echo "$CMD" | grep -qE 'dockers+systems+prunes+-a'; then
echo "BLOCKED [destructive-guard] docker system prune -a удалит ВСЕ образы"
BLOCKED=1
fi
if echo "$CMD" | grep -qE 'chmods+-Rs+777'; then
echo "BLOCKED [destructive-guard] chmod -R 777 опасно"
BLOCKED=1
fi
if [ "$BLOCKED" -eq 1 ]; then
echo "Если уверен — выполни команду вручную в терминале"
exit 2
fi
exit 0Примеры работы
Что пропускает
rm file.txt— удаление конкретного файлаgit reset HEAD~1— без--hard(staged изменения сохранятся)docker rmi my-image— удаление конкретного образаDROP INDEX— удаление индекса не деструктивно
Что блокирует
rm -rf /,rm -rf ~— корневые путиDROP TABLE users,DROP DATABASE prodgit reset --hard HEAD~5— потеря незакоммиченной работыdocker system prune -a --volumes— полная очисткаchmod -R 777 /var/www
Настройка под себя
- Добавь
kubectl delete namespaceдля K8s-проектов - Добавь
terraform destroyдля инфраструктурных проектов - Замени
exit 2на интерактивный вопрос для некритичных команд - Веди лог заблокированных команд для аудита
Опасные команды должны требовать усилий. Если команда необратима — пусть её выполняет человек с открытыми глазами.
> Пока нет комментариев
Связанный контент
Похожие инструменты
/pre-commit-check
Проверки перед коммитом: security scan, lint, типы, debug-код. Всё в одной команде.
Открыть →branch-guard
Блокирует прямой push в main/master. Предлагает создать PR через GitHub CLI.
Открыть →protect-secrets
Блокирует запись файлов с секретами: .env, токены, пароли, приватные ключи. Не даёт случайно закоммитить.
Открыть →security-scan
Автоматическое сканирование кода на SQL-инъекции, XSS и другие уязвимости при каждом Write/Edit.
Открыть →