본문으로 건너뛰기

© 2026 Molayo

r/ClaudeAI분석2026. 06. 23. 00:28

CLAUDE.md에 규칙을 쓰는 대신 훅(Hooks)을 쓰기 시작했습니다. 이제 규칙이 제대로 작동합니다.

요약

CLAUDE.md의 텍스트 기반 규칙 대신 Claude Code의 훅(Hooks) 기능을 사용하여 명령 실행을 강제하는 방법을 설명합니다. 훅은 모델의 판단에 의존하지 않고 쉘 명령으로 실행되어 보안 및 워크플로우 준수를 보장합니다.

핵심 포인트

  • CLAUDE.md 규칙은 프롬프트 기반의 제안일 뿐 완벽한 보장이 아님
  • 훅(Hooks)은 settings.json에 등록된 쉘 명령으로 모델 외부에서 강제 실행됨
  • PreToolUse 훅을 통해 도구 실행 전 명령을 검사하고 차단 가능
  • 의도는 프롬프트로, 강제성은 훅(Hooks)으로 구현하는 것이 핵심

몇 달 동안 제 CLAUDE.md에는 규칙 목록이 들어 있었습니다. '배포 스크립트를 절대 실행하지 마세요', 'migrations 폴더를 건드리지 마세요', '커밋하기 전에 항상 포맷터를 실행하세요' 같은 것들이었죠. 대부분의 경우 잘 작동했지만, 그것이 문제였습니다. '대부분의 경우'는 보장이 아니며, 제가 주의를 기울이지 않을 때 놓치는 부분들이 나타났습니다.

CLAUDE.md에 있는 모든 것은 제안(suggestion)입니다. 그것은 프롬프트(prompt)에 포함되며, 컨디션이 좋은 날에는 모델이 이를 준수합니다. 하지만 컨텍스트 윈도우(context window)가 가득 차고, 여러 단계의 서브 에이전트(subagents)가 깊게 들어간 긴 세션에서는, 그 규칙은 주의를 끌기 위해 경쟁하는 또 하나의 줄에 불과하며 때때로 패배합니다. 95%의 확률로 유지되는 규칙은 규칙이 아닙니다. 그것은 기본값(default)일 뿐입니다.

훅(Hooks)은 Claude Code에서 협상을 하지 않는 부분입니다. 훅은 settings.json에 등록하는 쉘 명령(shell command)으로, 루프의 특정 시점에 실행되며 모델 외부에서 코드로 실행됩니다. 모델은 실행 여부를 결정하지 않습니다. Claude Code는 매번 이를 실행합니다.

PreToolUse는 제 작업 방식을 바꾼 핵심입니다. 이는 도구(tool)가 실행되기 전에 실행되며, 실행될 정확한 Bash 명령을 포함한 전체 호출을 JSON 형태로 stdin을 통해 전달받습니다. 사용자의 훅이 이를 검사하고 'exit 2'를 내보낼지 또는 'deny'를 반환할지 결정하면, 호출은 절대 일어나지 않습니다. 모델은 차단되었다는 사실을 전달받고 그에 맞춰 적응합니다. 따라서 "배포 스크립트를 절대 실행하지 마세요"라는 문구는 더 이상 정중한 문장이 아니라, 해당 명령과 일치하면 강제로 중단시키는 몇 줄의 Bash 코드가 되었습니다. 이는 잊히거나 가득 찬 윈도우 속에서 묻히지 않으며, 매처(matcher)를 통해 Bash로 범위를 제한하므로 Edit(편집) 작업에는 절대 영향을 주지 않습니다.

프롬프트(Prompts)는 의도를 표현하는 곳입니다. 강제(Enforcement)는 그것을 보장하는 곳이며, 이는 모델의 협조 여부와 상관없이 실행되는 코드여야 합니다. CLAUDE.md는 당신이 일어나기를 원하는 일을 말합니다. 훅은 일어나는 것이 허용되는 일을 결정합니다. 절대 틀려서는 안 되는 몇 가지 사항들에 대해서는, 규칙으로 쓰기를 멈추고 훅으로 작성하십시오.

출처: Claude Code — Hooks reference (events, PreToolUse blocking, exit code 2 / permissionDecision deny) · Claude Code — Get started with hooks
submitted by /u/bit_forge007
[link] [comments]

AI 자동 생성 콘텐츠

본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0