smart-commit — хук для Claude Code: автокоммиты после правок
Хук Claude, который сам коммитит изменённый файл после Edit или Write. Пригодится, если не хочется вручную собирать историю git.
npx claude-code-templates@latest --hook git-workflow/smart-commitЧто делает smart-commit
smart-commit вешается на события PostToolUse для инструментов Edit и Write. После того как Claude изменил файл, хук проверяет, что вы внутри git-репозитория, добавляет файл в индекс и делает коммит. Для правок сообщение собирается из имени файла и объёма изменений: до 10 строк — minor, до 50 — moderate, дальше — major. Для новых файлов сообщение проще: Add new file и имя.
Внутри — две shell-команды в .claude/settings.json, без внешних зависимостей и скриптов. Всё держится на git add, git diff --cached --numstat и git commit. Если файл не менялся или коммит не проходит, хук молча выходит, ошибку вы не увидите.
Главное ограничение: коммит делается на каждый изменённый файл сразу после правки. В репозитории с частыми мелкими правками история быстро зарастает однотипными записями, а осмысленное сообщение вы не пишете. Это повод сначала прогнать хук на отдельной ветке.
Какие задачи решает
- зафиксировать правку файла в git без ручного коммита
- получить историю изменений по ходу работы агента
- отделить мелкие правки от крупных по числу строк
- закоммитить только что созданный файл
- не забыть про git, пока идёт сессия в Claude
Примеры запросов агенту
- Поправь
src/api/client.jsи оставь коммит на smart-commit - Создай
docs/setup.md— хук закоммитит его сам - Проверь, что после правки файла появился новый коммит в
git log
Как установить smart-commit
1Через claude-code-templates
npx claude-code-templates@latest --hook git-workflow/smart-commit2Вручную: положить файлы
.claude/settings.jsonБлок hooks: событие (PreToolUse, PostToolUse, Stop…) → команда. Личные — ~/.claude/settings.json
По шагам, с командами для каждой платформы: Хуки Claude Code: что это, где настраивать и как запретить опасную команду
Из того же набора205
Весь набор →Похожие
Рядом в каталоге
Всё по теме «Git и GitHub» →Вопросы о smart-commit
Как установить smart-commit в Claude?
Выполните npx claude-code-templates@latest --hook git-workflow/smart-commit, затем проверьте запись в .claude/settings.json.
Что делает smart-commit?
После Edit или Write добавляет изменённый файл в индекс и коммитит его. Сообщение зависит от числа изменённых строк или от того, что файл новый.
Когда хук не сработает?
Вне git-репозитория, при пустом CLAUDE_TOOL_FILE_PATH и когда в файле нет изменений. Ошибки коммита подавляются, поэтому проверяйте git log.
Исходный текст
smart-commit.json · MIT
{
"description": "Intelligent git commit creation with automatic message generation and validation. Creates meaningful commits based on file changes.",
"hooks": {
"PostToolUse": [
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"command": "if git rev-parse --git-dir >/dev/null 2>&1 && [[ -n \"$CLAUDE_TOOL_FILE_PATH\" ]]; then git add \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null; CHANGED_LINES=$(git diff --cached --numstat \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null | awk '{print $1+$2}'); if [[ $CHANGED_LINES -gt 0 ]]; then FILENAME=$(basename \"$CLAUDE_TOOL_FILE_PATH\"); if [[ $CHANGED_LINES -lt 10 ]]; then SIZE=\"minor\"; elif [[ $CHANGED_LINES -lt 50 ]]; then SIZE=\"moderate\"; else SIZE=\"major\"; fi; MSG=\"Update $FILENAME: $SIZE changes ($CHANGED_LINES lines)\"; git commit -m \"$MSG\" \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null || true; fi; fi"
}
]
},
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "if git rev-parse --git-dir >/dev/null 2>&1 && [[ -n \"$CLAUDE_TOOL_FILE_PATH\" ]]; then git add \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null; FILENAME=$(basename \"$CLAUDE_TOOL_FILE_PATH\"); git commit -m \"Add new file: $FILENAME\" \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null || true; fi"
}
]
}
]
}
}
© davila7 · MIT · davila7/claude-code-templates