강연·도입 문의

훅 — 정해진 길목의 자동 장치

기능 사전 책 7·8·10장 보기 → 직접 확인 2026-07-21(v2.1.216) · 업데이트 내역 확인 2026-10-08(v2.1.293)

훅은 정해진 순간이 오면 저절로 실행되는 자동 장치입니다. 복도의 자동 점등 센서처럼, 누가 지나가면 알아서 불이 켜집니다. 사람이 기억하지 않아도 회사가 규칙을 지키게 만드는 도구입니다. 말로 부탁하는 것만으로 모자란 이유는 AI가 무엇이 위험한 일인지 스스로 가려내지 못하기 때문입니다. 이 약점이 왜 생기는지는 「AI는 자기가 한 일을 스스로 판단하지 못합니다」 페이지에서 설명합니다.

훅이란 — 부탁이 아니라 장치

클로드에게 “파일을 고친 뒤에는 꼭 서식을 정리해 줘”라고 말로 부탁하면, 할 때도 있고 빠뜨릴 때도 있습니다. 훅으로 걸어 두면 그 순간마다 예외 없이 실행됩니다. 그래서 훅은 크게 세 가지 일에 씁니다.

  • 규칙 강제 — “지켜 달라”고 말하는 대신, 안 지키면 지나가지 못하게 만듭니다. 단, 막을 수 있는 길목에 걸었을 때만 그렇습니다.
  • 반복 잡무 자동화 — 매번 시키던 일을 그 길목에 아예 걸어 둡니다.
  • 기존 도구와 연결 — 알림·기록 같은 바깥 장치와 클로드 코드를 잇습니다.

길목(이벤트) 전체 지도

훅을 거는 지점 하나하나를 이벤트라고 부릅니다. 이 가이드와 책에서는 길목이라고 합니다. 그중 다섯이 자주 쓰는 길목입니다. 아래 표에 ★로 표시했고, 책 10장이 다루는 다섯도 바로 이것입니다.

길목이름실행되는 때
★ 출근할 때이름SessionStart실행되는 때세션이 시작되거나 다시 이어질 때 — 막지는 못하고, 클로드에게 필요한 글을 넣어 주는 길목
★ 일을 지시받는 순간이름UserPromptSubmit실행되는 때사장이 지시를 보낸 직후, 클로드가 처리하기 전 — 실행을 막을 수 있는 길목
★ 도구를 쓰기 직전이름PreToolUse실행되는 때클로드가 도구를 쓰기 직전 — 실행을 막을 수 있는 길목
★ 도구를 쓴 직후이름PostToolUse실행되는 때도구를 문제없이 쓴 직후
★ 보고하고 마치기 직전이름Stop실행되는 때클로드가 응답을 마쳤을 때
허락을 기다릴 때이름Notification실행되는 때클로드가 입력이나 허락을 기다리며 알림을 보낼 때
직원이 일을 마칠 때이름SubagentStop실행되는 때서브에이전트(AI 직원)가 일을 끝냈을 때
퇴근할 때이름SessionEnd실행되는 때세션이 끝날 때 — 이 길목의 훅은 1.5초 안에 끝나지 않으면 기본으로 중간에 끊깁니다. 기록 남기기처럼 오래 걸리는 일은 그 훅의 시간 제한(timeout)을 늘려 둡니다.
압축 직전이름PreCompact실행되는 때대화가 길어져 그동안 주고받은 내용(컨텍스트)을 압축하기 전
모델 바꾸기 직전이름PreModelSwitch실행되는 때모델(머리 등급)을 바꾸기 직전 — 바꾸기를 막거나 한 번 더 묻게 할 수 있는 길목
모델 바꾼 직후이름PostModelSwitch실행되는 때모델을 바꾼 직후 — 바뀐 사실을 기록으로 남기는 길목

이 밖에도 작업 폴더가 바뀔 때, 설정 파일이 바뀔 때 같은 더 세밀한 길목이 있습니다. 다만 처음에는 위의 다섯(★)만 알아도 대부분의 자동화를 만들 수 있습니다.

매처 — 같은 길목 안의 거름망

매처(matcher)는 훅이 아무 때나 실행되지 않도록 조건을 좁히는 거름망입니다. 비워 두면 그 길목을 지날 때마다 전부 실행되고, 조건을 적으면 맞을 때만 실행됩니다.

예를 들어 도구 길목에서 매처를 Edit|Write로 적으면, 파일을 고치는 도구(Edit)나 새로 쓰는 도구(Write)에만 반응합니다. 세로줄(|)은 “또는”이라는 뜻입니다. 무엇을 거르는지는 길목마다 다릅니다.

길목매처가 거르는 기준예시 값
PreToolUse·PostToolUse매처가 거르는 기준도구 이름예시 값Bash, Edit|Write
SessionStart매처가 거르는 기준세션이 시작된 방식예시 값startup(새로 켬), resume(이어서), compact(압축 직후)
Notification매처가 거르는 기준알림 종류예시 값permission_prompt, idle_prompt
SessionEnd매처가 거르는 기준세션이 끝난 이유예시 값clear, logout
주의 매처는 대소문자를 구분합니다. edit라고 적으면 Edit 도구에 반응하지 않습니다. 훅이 실행되지 않을 때 가장 먼저 의심해 볼 곳입니다.

거는 법 — 말로 시킵니다

훅도 말로 겁니다. 걸기 전에 먼저 보여 달라고 함께 말하는 것이 요령입니다.

# 클로드 코드 입력창에
세션을 시작할 때마다 인수인계서를 읽는 훅을 걸어 줘. 걸기 전에 먼저 보여 줘.

훅의 실제 내용은 settings.json 파일 안에 적힙니다.

훅을 걸기 전 설정 파일 내용을 먼저 보여 주고 허락을 묻는 화면 — SessionStart 훅
훅을 거는 순간(실제 화면) — 설정 파일에 적힐 내용을 빠짐없이 보여 주고 허락을 묻습니다. 세션을 시작할 때 회사의 두뇌를 자동으로 펼치는 훅입니다.

어느 설정 파일에 넣느냐에 따라 훅의 적용 범위가 달라집니다.

위치적용 범위공유
~/.claude/settings.json적용 범위내 모든 프로젝트(전역)공유안 됨 — 내 컴퓨터에만
.claude/settings.json적용 범위해당 프로젝트 하나공유됨 — 저장소에 함께 올릴 수 있음
.claude/settings.local.json적용 범위해당 프로젝트 하나공유안 됨 — 나만 씀
요령 /hooks를 입력하면 등록된 훅 목록이 보입니다. 이 화면은 보기 전용이라 고칠 수는 없습니다. 이미 hooks 항목이 있는 파일이면 통째로 덮어쓰지 말고 새 훅을 기존 훅 옆에 나란히 추가합니다. 이 일도 클로드에게 말로 시키면 됩니다. 모든 훅을 잠시 꺼 두려면 설정 파일에 "disableAllHooks": true를 넣습니다. 이 값을 넣으면 내가 설치한 플러그인 모드(mod)와 직접 만든 상태표시줄도 함께 멈춥니다.

훅이 클로드와 대화하는 법

훅은 실행되고 끝나는 데 그치지 않고 결과를 클로드에게 되돌려 줄 수 있습니다. 가장 간단한 방식은 종료 코드입니다. 훅으로 걸어 둔 명령은 일을 끝내면서 숫자 하나를 남기는데, 그 숫자가 몇이냐에 따라 다음 동작이 정해집니다.

종료 코드의미
0이상 없음, 통과. 일부 길목에서는 훅이 출력한 글이 클로드의 컨텍스트에 더해집니다.
2작업을 막음(막을 수 있는 길목에서만). 오류 메시지로 적은 이유를 클로드가 받아, 왜 막혔는지 알고 다른 방법을 찾습니다.
그 외작업은 진행되지만 화면에 훅 오류 표시가 남습니다.

더 꼼꼼하게 다루고 싶으면 종료 코드는 0으로 두고, 대신 JSON(컴퓨터끼리 주고받는, 서식이 정해진 쪽지)을 출력하는 방법도 있습니다. 예를 들어 PreToolUse 훅은 도구 사용을 막으면서 “이유는 이렇다”라고 클로드에게 직접 알릴 수 있습니다. 다만 두 방식을 섞으면 안 됩니다. 종료 코드 2로 막을 때는 JSON 출력이 무시되기 때문입니다.

주의 훅은 규칙을 더 조일 수는 있어도 느슨하게 풀지는 못합니다. PreToolUse 훅이 막은 작업은 권한 확인을 건너뛰는 모드에서도 차단됩니다. 반대로 훅이 “허용하라”고 해도 권한 설정의 막기 규칙(deny)까지 무시하지는 못합니다. 막기 규칙이 항상 먼저입니다.

판단이 필요한 길목엔 프롬프트 훅

지금까지 본 훅은 “이 문구가 있으면 막아라”처럼 규칙이 명확할 때 씁니다. 그런데 “요청한 일이 정말 다 끝났는가?”처럼 판단이 필요한 길목도 있습니다. 이럴 때는 훅의 종류를 적는 칸(type)에 command 대신 prompt를 적습니다. command는 정해진 명령어를 실행하는 종류이고, prompt는 판단을 클로드 모델에게 맡기는 종류입니다. 그러면 모델이 그 길목에서 직접 예·아니요를 정합니다.

대표 사례가 Stop 길목입니다. 클로드가 응답을 끝내려 할 때 “모든 일이 정말 끝났는지” 모델에게 되묻고, 아직이라고 판단되면 계속 일하게 만듭니다. 우리 회사도 마칠 때 보고 형식을 지켰는지 이 길목에서 자동 점검합니다. 파일을 열어 보거나 명령을 실행해 확인해야 하는 더 복잡한 판단에는 type을 agent(직접 열어 보고 실행해 보며 판단하는 종류)로 지정하는 방식도 있습니다. 다만 아직 실험 단계라, 안정적으로 돌아야 하는 작업에는 명령어 훅을 권합니다.

바로 쓰는 레시피 네 가지

전부 말로 시킵니다. 각 레시피의 문장을 그대로 입력창에 넣어도 됩니다.

① 기다릴 때 알림 — 클로드가 허락이나 입력을 기다릴 때 화면에 알림을 띄웁니다. 터미널을 계속 지켜보지 않아도 됩니다. 처음 걸어 보기에 가장 좋은 훅입니다.

# 클로드 코드 입력창에
네가 내 허락이나 입력을 기다릴 때마다 화면에 알림을 띄우는 훅을
Notification 길목에 걸어 줘. 걸기 전에 먼저 보여 줘.

이 훅이 설정 파일에 실제로 적히는 모습은 다음과 같습니다. 직접 쓸 일은 드물지만, 클로드가 보여 줄 때 읽을 줄 알면 안심하고 허락할 수 있습니다.

# ~/.claude/settings.json 안 (macOS 알림 예)
"hooks": {
  "Notification": [
    { "matcher": "",
      "hooks": [ { "type": "command",
        "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'" } ] }
  ]
}
막히면 — 윈도우에서 알림 훅을 걸었는데 알림이 안 뜰 때 가장 흔한 원인 — 위 예시의 osascript는 맥 전용 명령입니다. 윈도우에서는 그 줄이 실행되지 못하고, 훅은 오류 한 줄 없이 조용히 지나갑니다. 등록은 멀쩡한데 아무 일도 안 일어나는 상태가 됩니다.
지금 해 볼 것 — 클로드 입력창에 “이 알림 훅을 내 컴퓨터에서 되는 명령으로 바꿔 줘. 어떤 운영체제인지 먼저 확인하고, 바꾼 내용을 걸기 전에 보여 줘”라고 시키십시오. 바꾼 뒤에는 /hooks로 등록을 확인하고 세션을 새로 열어 실제로 알림이 뜨는지 눈으로 봅니다.
그래도 안 되면 — 매처·종료 코드 같은 말이 낯설어 막힌 것이라면 이 페이지 위쪽의 「매처 — 같은 길목 안의 거름망」과 「훅이 클로드와 대화하는 법」을 다시 보십시오. 그 밖의 낯선 말은 용어 한 줄 사전에 있습니다. 훅 자체를 잠시 접어 두고 싶으면 “그 훅 빼 줘” 한마디로 지우고, 다른 증상은 「이럴 때는?」 페이지에서 찾으면 됩니다.

② 민감 파일 보호 — .env(비밀번호나 API 키가 담긴 파일) 같은 파일은 도구를 쓰기 직전(PreToolUse) 길목에서 막습니다. 막을 때 이유를 함께 적어 두는 것이 요령입니다. 위 표에서 본 대로, 클로드가 그 이유를 읽고 다른 방법을 찾기 때문입니다.

# 클로드 코드 입력창에
.env 파일은 네가 절대 고치지 못하게 PreToolUse 길목에서 막는 훅을 걸어 줘.
막을 때는 이유를 함께 남기게 해 줘.

③ 압축 뒤 규칙 다시 넣기 — 대화가 길어지면 클로드 코드가 내용을 요약해 공간을 비웁니다. 이것을 압축이라고 합니다. 이때 중요한 규칙이 흐려질 수 있습니다. SessionStart 길목에 compact 매처를 걸면, 압축이 끝날 때마다 꼭 기억할 내용이 자동으로 다시 들어갑니다. 훅이 출력한 글이 그대로 클로드의 컨텍스트에 더해지는 특징을 이용한 것입니다.

# 클로드 코드 입력창에
대화가 압축된 직후마다 우리 회사 핵심 규칙을 다시 알려 주는 훅을
SessionStart 길목에 compact 매처로 걸어 줘.

④ 세션 시작 때 인수인계 읽기 — 앞의 “거는 법”에서 본 훅이 바로 이것입니다. 매일 아침 출근한 직원이 전날 업무 일지를 먼저 펴게 만드는 셈입니다. 우리 회사도 세션 첫머리에 진행 일지를 자동으로 읽는 훅으로 아침 인수인계를 대신합니다.

★작동 확인·끄기 — “걸었다”와 “돈다”는 다릅니다

훅은 자동이라 어긋나도 오류 한 줄 없이 조용히 지나갑니다. 그래서 걸고 나면 반드시 시험합니다.

  1. “지금 걸려 있는 훅 목록 보여 줘”로 등록을 확인합니다.
  2. 세션을 새로 열어 실제로 작동하는지 눈으로 확인합니다.
  3. 작동하지 않으면 — “그 훅이 왜 안 도는지 봐 줘.”
  4. 끄기는 — “그 훅 빼 줘.”

우리 회사도 “걸었다”와 “돈다”가 달랐던 적이 여러 번 있습니다. 시험까지가 거는 일입니다. 훅이 뜻대로 움직이지 않을 때는 세 가지를 차례로 봅니다.

  • 훅이 실행되지 않음 — /hooks로 올바른 길목 아래에 등록됐는지, 매처의 도구 이름이 대소문자까지 정확한지 봅니다.
  • 고쳤는데 목록에 안 보임 — JSON 형식이 올바른지 클로드에게 봐 달라고 시킵니다. 끝에 쉼표를 남기거나 주석을 넣으면 오류가 납니다. 그래도 안 보이면 세션을 다시 시작합니다.
  • Stop 훅이 계속 막음 — Stop 훅이 응답을 자꾸 막으면 같은 자리를 맴돌게 됩니다. 이때는 클로드 코드가 같은 곳을 다시 지나는 것을 알아채고, 어느 지점부터는 훅이 막아도 따르지 않고 넘어갑니다. 무한 반복에 빠지지 않게 하는 안전장치입니다.

출근할 때·일을 지시받는 순간·도구를 쓰기 직전·퇴근할 때 길목의 훅이 실행되는 동안에는, 클로드가 일하는 중임을 알리는 입력창 위 진행 표시에 그 사실과 걸린 시간이 뜹니다. 출근할 때 길목의 훅이 오래 걸려 내 지시가 기다리고 있으면 Esc로 그 지시를 취소할 수 있습니다.

주의 훅은 내 컴퓨터에서 명령어를 그대로 실행합니다. 잘못 만든 훅이나 남이 만든 훅을 살펴보지 않고 가져오면 원치 않는 동작이 벌어질 수 있습니다. 내용을 이해한 뒤에 쓰고, 걸기 전에 반드시 먼저 보여 달라고 하십시오.
참고한 자료 — 클로드 코드 공식 안내의 “훅” 장. 이 페이지는 우리 회사가 실제로 일하며 쓰는 방식을 적은 것이며, 위에 적힌 날짜에 공식 안내와 맞춰 보았습니다.