C.W.K.
Stream
Lesson 08 of 13 · published

Hooks — Deterministic 라이프사이클 제어

~22 min · hooks, automation, pre-tool-use, post-tool-use

Level 0🌱 입문자
0 XP0/70 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

AI 의 약속과 네 보장이 만나는 곳

Hook 은 라이프사이클 이벤트에서 발화하는 사용자 정의 명령어, HTTP endpoint, LLM prompt 야: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PermissionRequest, Stop, 그리고 다스쯤 더. 모델 준수는 통계적인데 그 자리에 deterministic 제어를 박는 거지.

모든 팀 인생 바꾸는 두 이벤트: PreToolUse 가 도구 호출 차단 가능 (exit code 2 + stderr → 도구 취소, 모델이 이유 봄). PostToolUse 는 성공 후 실행 — auto-format, type-check, run-affected-tests 에 완벽.

Hook 타입: command 는 셸 (stdin 으로 JSON, exit code 가 흐름 제어), http 는 URL 에 POST (Slack 알림, 감사 로그), prompt 는 Claude 자기에게 결정 요청 (판단 필요한 권한 게이트에 좋음).

Code

Auto-format on every Edit / Write·json
// .claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "description": "Format and type-check TypeScript on save",
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'F=$FILEPATH; if [[ $F == *.ts || $F == *.tsx ]]; then npx prettier --write \"$F\" && npx tsc --noEmit; fi'"
          }
        ]
      }
    ]
  }
}
Block writes to protected paths·bash
#!/bin/bash
# .claude/hooks/protect-files.sh
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

PROTECTED=(".env" ".env.production" "secrets/" ".pem" "id_rsa")

for p in "${PROTECTED[@]}"; do
  if [[ "$FILE" == *"$p"* ]]; then
    echo "Blocked: $FILE matches protected pattern '$p'" >&2
    exit 2
  fi
done
exit 0

# Wired in settings.json:
# "PreToolUse": [{"matcher":"Edit|Write","hooks":[{"type":"command",
#  "command":"bash .claude/hooks/protect-files.sh"}]}]

External links

Exercise

모든 Edit / Write 에 프로젝트 formatter 돌리는 PostToolUse hook 추가. 일부러 못생긴 edit 시켜서 파일 자동 정리되는지 확인. 보너스: .env 에 write 차단하는 PreToolUse hook 추가.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.