포스트

Claude Code hooks — 도구 실행 흐름에 셸 끼우기 (포맷·차단·알림)

settings.json의 hooks로 도구 실행 전후에 셸 스크립트를 끼워 넣는다 — 편집 후 자동 포맷, 위험한 명령 차단, 작업 완료 알림. 이벤트·구조·예제와 보안 주의점, 그리고 커스텀 명령·스킬과의 경계를 정리한다.

Claude Code hooks — 도구 실행 흐름에 셸 끼우기 (포맷·차단·알림)

관련: AI 로드맵실전 워크플로 갈래 · Claude Code 실전 워크플로에 이어지는 확장 편.

플랜·서브에이전트·헤드리스로 Claude Code를 굴리는 법에 익숙해지면, 다음은 도구 자체를 확장하는 단계다. 확장의 한 축이 hooks — 도구 실행 흐름에 셸을 끼워 넣는 장치다. (다른 축인 커스텀 슬래시 명령슬래시 명령어 사전에서 다룬다.)

hooks — 실행 흐름에 셸을 끼운다

hooks는 특정 시점에 셸 스크립트(또는 HTTP·프롬프트)를 실행하게 하는 장치다. settings.json에 정의한다.

위치범위
~/.claude/settings.json모든 프로젝트
.claude/settings.json이 프로젝트(공유, 커밋)
.claude/settings.local.json이 프로젝트(개인, gitignore)

주요 이벤트: PreToolUse·PostToolUse(도구 호출 전/후), UserPromptSubmit, Stop(응답 끝), SessionStart/SessionEnd.

구조는 이벤트 → matcher(도구 이름 매칭) → 실행할 command. 훅은 stdin으로 JSON 입력을 받고, 종료 코드로 제어한다 — exit 0은 통과, exit 2는 차단(stderr가 피드백으로 전달).

예제 1 — 편집 후 자동 포맷

Edit·Write 뒤에 포맷터를 돌린다.

1
2
3
4
5
6
7
8
9
10
11
12
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/format.sh" }
        ]
      }
    ]
  }
}

예제 2 — 작업 끝나면 데스크톱 알림

긴 작업을 걸어두고 다른 일 할 때 유용하다.

1
2
3
4
5
6
7
8
9
10
11
12
{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          { "type": "command", "command": "osascript -e 'display notification \"완료\" with title \"Claude Code\"'" }
        ]
      }
    ]
  }
}

예제 3 — 위험한 명령 차단

PreToolUse에서 stdin JSON을 검사해 exit 2로 막는다.

1
2
3
4
5
6
7
#!/bin/bash
COMMAND=$(jq -r '.tool_input.command')
if echo "$COMMAND" | grep -q 'rm -rf'; then
  echo "위험한 명령 차단됨" >&2
  exit 2   # 즉시 차단
fi
exit 0

hooks는 임의의 셸 명령을 실행한다. settings.json에 담긴 훅은 코드처럼 다뤄라 — 신뢰할 수 없는 저장소를 클론했을 때 그 프로젝트의 훅이 무엇을 실행하는지 확인하고 시작한다.

커스텀 명령·스킬과의 경계

확장의 나머지 두 조각은 hooks와 역할이 다르다.

  • 커스텀 슬래시 명령 — 반복 프롬프트를 /이름 하나로. 저장 위치·$ARGUMENTS·frontmatter(allowed-tools·model!명령/@파일 전처리까지는 슬래시 명령어 사전 › 커스텀 명령어 만들기에 정리해 두었다.
  • 스킬(.claude/skills/<이름>/SKILL.md) — 커스텀 명령과 비슷하지만, /이름으로 직접 부르는 것뿐 아니라 Claude가 작업에 맞을 때 알아서 불러온다(모델 호출 vs 사용자 호출). 보조 스크립트·템플릿을 함께 패키징할 수 있어 무거운 워크플로에 맞다.

역할로 나누면 — hooks는 “무엇을 자동으로 실행할까”(포맷·차단·알림), 커스텀 명령/스킬은 “무엇을 시킬까”(프롬프트 재사용). 셋을 합치면 Claude Code를 팀·프로젝트에 맞게 길들이는 도구가 갖춰진다. 전체 학습 경로는 AI 로드맵에서.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.