conventional-commit
Проверяет формат коммит-сообщения: feat/fix/refactor/docs/test/chore. Блокирует нестандартные коммиты.
Описание
Простым языком
Коммит — это сохранение изменений в истории проекта. К нему пишут описание что сделано. Если описывать как попало — через месяц история выглядит как мусор: "fix", "изменил", "WIP". Этот хук заставляет писать по формату.
Раньше AI писал коммиты как ему вздумается. Теперь хук блокирует коммит без правильного формата и подсказывает как надо. Выглядит как: feat: добавить авторизацию или fix: исправить кнопку.
Что делает
Хук conventional-commit проверяет каждое коммит-сообщение на соответствие спецификации Conventional Commits. Только feat:, fix:, refactor:, docs:, test:, chore: — ничего другого. Случайные "WIP", "fix bug", "изменения" не пройдут.
Стандартные коммиты важны не только для красоты: они дают возможность автогенерации CHANGELOG, семантического версионирования и понятной истории проекта.
Когда срабатывает
Триггер: PreToolUse — до выполнения Bash с git commit. Условие: команда содержит git commit -m. Действие: проверка regex, блокировка при несоответствии.
Установка
- Добавь конфиг
PreToolUseнаBashв.claude/settings.json - Создай
~/.claude/hooks/conventional-commit.shс правамиchmod +x - Проверь: попроси AI сделать коммит с сообщением "fix bug" — должен получить ошибку
Конфиг settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/conventional-commit.sh"
}
]
}
]
}
}Скрипт хука
#!/bin/bash
# conventional-commit.sh — проверка формата коммит-сообщения
# PreToolUse: Bash
CMD="${CLAUDE_TOOL_INPUT_COMMAND:-}"
if ! echo "$CMD" | grep -qE 'gits+commit'; then
exit 0
fi
MSG=$(echo "$CMD" | grep -oP '(?<=-m ")[^"]+' | head -1)
if [ -z "$MSG" ]; then
exit 0
fi
TYPES="feat|fix|refactor|docs|test|chore|style|perf|ci|build|revert"
if ! echo "$MSG" | grep -qP "^(${TYPES})(([a-zA-Z0-9-]+))?!?: .{3,}"; then
echo "BLOCKED [conventional-commit] Неверный формат коммита"
echo ""
echo "Ожидаемый формат: тип: описание"
echo "Разрешённые типы: feat fix refactor docs test chore style perf ci build revert"
echo ""
echo "Примеры:"
echo " feat: добавить авторизацию через Telegram"
echo " fix(auth): исправить валидацию JWT токена"
exit 2
fi
echo "OK [conventional-commit] Формат корректен"
exit 0Примеры работы
Что пропускает
feat: добавить авторизацию через Telegram— корректный форматfix(auth): исправить валидацию JWT— с scope в скобкахrefactor!: переписать API— breaking change с!chore: обновить зависимости— рутинные задачи
Что блокирует
- "fix bug" — нет типа с двоеточием
- "WIP" — незавершённая работа в коммите
- "изменения" — неинформативное сообщение
- "update: что-то" — тип
updateне разрешён
Настройка под себя
- Добавь
hotfix|securityв переменнуюTYPES - Убери типы которые команда не использует
- Настрой минимальную длину описания (сейчас 3 символа)
- Добавь проверку максимальной длины строки (рекомендуется 72 символа)
История git — это документация проекта. Conventional Commits делают её читаемой через год, не только через день.
> Пока нет комментариев
Связанный контент
Похожие инструменты
/typecheck
Проверка типов: tsc для TypeScript, pyright для Python. Показывает ошибки с пояснениями.
Открыть →/autoformat
Форматирование кода: Prettier для JS/TS, ruff для Python. Весь проект или конкретные файлы.
Открыть →/cleanup
Удаление debug-кода: console.log, debugger, print(), закомментированный код. Чистка перед коммитом.
Открыть →/code-review
Запуск ревью кода через субагента code-reviewer. Проверяет DRY, KISS, безопасность, именование.
Открыть →