만약 Claude Code를 자주 사용한다면, 원치 않는 것보다 'load-bearing'이라는 단어를 더 많이 읽었을 것입니다. 이 외에도 'You're absolutely right'나 'delve' 같은 표현도 마찬가지입니다. 상위 이슈(anthropics/claude-code#53454)는 120개 이상의 추천을 받았으며, 댓글 작성자들은 컨텍스트가 길어지고 모델이 새 버전으로 나올수록 이 문제가 더 자주 발생한다고 측정했습니다. CLAUDE.md에 'load-bearing'을 절대 말하지 않도록 명시하는 것만으로는 효과를 보기 어렵습니다.
지침(Instructions)보다 훅(Hook)이 작동하는 이유
Claude Code는 고정된 지점(fixed points)에서 사용자의 훅을 실행합니다. Stop 훅은 Claude가 자신의 턴을 끝내기 직전에 실행됩니다. 만약 Claude가 {"decision":"block","reason":"..."}를 출력하더라도, Claude는 계속 진행하며 이 이유(reason)를 피드백으로 읽어들입니다. 반면, 코드로 2로 종료하는 PostToolUse 훅은 Write 또는 Edit 작업 후 그 표준 에러 스트림(stderr)을 다시 Claude에게 전송합니다.
따라서 모델이 규칙을 기억할 필요가 없습니다. 대신 출력물을 확인하고, 문제가 발생했을 때 이를 되돌려 보내는 것입니다.
구문집 (Phrasebook)
Phrasebook은 이러한 아이디어를 기반으로 만들어진 약 100줄 분량의 Python 코드입니다:
- 답변 확인(Reply check): 최종 메시지에 금지된 구문이 포함되어 있으면, Stop을 한 번 차단하고 Claude는 아무런 작업도 다시 하지 않으면서 해당 답변을 수정하여 재전송합니다.
stop_hook_active 플래그는 최대 한 번만 재시도할 수 있도록 설정되어 있어 무한 루프에 빠지는 것을 방지합니다.
- 파일 확인(File check): Write/Edit/MultiEdit 콘텐츠가 스캔되며, Claude에게 어떤 파일의 어떤 구문을 수정해야 하는지 알려줍니다.
- **일치 여부(Matching)**는 대소문자를 구분하지 않으며 전체 단어만 처리합니다.
이 코드는 GitHub에서 MIT 라이선스로 제공됩니다. 무료로 사용할 수 있으며, 만약 이 코드가 여러분의 정신 건강을 지켜준다면, pay-what-you-want 페이지가 있습니다.