"Claude한테 매번 '코드 저장했어, 이제 포맷 확인해줘'라고 말해야 하나?" 그럴 필요 없습니다. 훅을 설정해두면 Claude가 알아서 합니다.
훅이 뭔가요?
훅(Hooks)은 특정 이벤트가 발생할 때 자동으로 실행되는 셸 명령어입니다.
예를 들어:
- Claude가 파일을 수정하면 → 자동으로 lint 실행
- Claude가 응답을 마치면 → 자동으로 테스트 실행
- 대화를 시작하면 → 자동으로 현재 Git 상태 확인
이 모든 걸 매번 요청하지 않아도 자동으로 처리됩니다.
어떤 이벤트가 있나요?
어떻게 설정하나요?
~/.claude/settings.json 파일에 작성합니다.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "npx eslint --fix $CLAUDE_FILE_PATHS"
}
]
}
]
}
}
파일 수정(Write, Edit)이 일어날 때마다 ESLint가 자동으로 실행됩니다.
실전 설정 예시
파일 저장 후 자동 포맷:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write $CLAUDE_FILE_PATHS 2>/dev/null || true"
}
]
}
]
}
}
응답 완료 후 테스트 자동 실행:
{
"hooks": {
"Stop": [
{
"matcher": ".*",
"hooks": [
{
"type": "command",
"command": "npm test --passWithNoTests 2>&1 | tail -5"
}
]
}
]
}
}
주의할 점
훅은 자동으로 실행되기 때문에, 처음에는 가볍고 안전한 명령어만 써보는 게 좋습니다. 실패해도 Claude 대화 자체는 계속 진행되지만, 훅이 무한루프에 빠지거나 의도치 않은 파일을 수정하는 경우가 생길 수 있어요.
처음에는 echo로 로그만 찍어보면서 어떻게 동작하는지 확인하고, 익숙해지면 실제 자동화 명령어로 바꾸는 걸 권장합니다.