Claude Code✓ 공식 문서로 확인10월 25일 수집
클로드 코드 CLAUDE.md 규칙을 프롬프트 훅으로 매번 검사하는 설정법
CLAUDE.md에 적은 규칙은 클로드가 읽고 따르려 애쓸 뿐, 지킨다는 보장이 없다. 클로드 코드(Claude Code) 훅을 type: "prompt"로 걸면 정해 둔 도구 호출마다 작은 모델이 규칙을 지켰는지 보고 막거나 통과시킨다. "커밋 메시지는 Conventional Commits 형식"처럼 셸 스크립트로 짜기 어려운 규칙에 쓴다.
- 프로젝트
.claude/settings.json에 PreToolUse 훅을 넣는다.if로 걸러 두면git commit을 칠 때만 모델을 부른다.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "prompt",
"if": "Bash(git commit *)",
"prompt": "클로드가 실행하려는 명령이다: $ARGUMENTS\n커밋 메시지가 Conventional Commits 형식(feat:, fix:, docs: 등)이 아니면 ok를 false로 하고 reason에 고칠 점을 적는다.",
"continueOnBlock": true
}
]
}
]
}
}
- 형식에 안 맞는 메시지로 커밋하려 하면 모델이
{"ok": false, "reason": "..."}를 돌려주고 호출이 막힌다.continueOnBlock이true면 그 이유가 도구 오류로 클로드에게 돌아가고, 클로드가 메시지를 고쳐 다시 커밋한다. 기본값(false)이면 턴이 끝나고 채팅에 경고 한 줄만 남는다.
prompt의 $ARGUMENTS 자리에는 훅 입력 JSON(도구 이름, 명령 등)이 들어가고, 빼먹으면 프롬프트 뒤에 붙는다. 판단은 기본으로 백그라운드 작업용 모델(haiku 별칭, ANTHROPIC_DEFAULT_HAIKU_MODEL로 바꾼다)이 맡는다. 훅마다 model 필드로 따로 정해도 된다. 시간 제한은 기본 30초다.
훅은 매번 돌아도 판단은 모델이 하니 틀릴 수 있다. .env 읽기 금지처럼 반드시 막아야 하는 규칙은 권한 deny 규칙이나 command 훅으로 둔다. if 없이 걸면 Bash를 부를 때마다 모델 호출이 하나씩 붙어 느려지고 사용량도 는다. 같은 방식을 Stop 훅에 걸면 할 일을 다 끝냈는지 확인하게 할 수 있다. 파일을 여러 번 읽어 가며 확인해야 하면 type: "agent"(실험 기능)를 쓴다.
출처