
Claude Code의 금지 사항을 번호로 관리하기 — 규칙 ID 시스템 입문
요약
Claude Code 사용 시 지시 사항이 망각되는 문제를 해결하기 위해 PreToolUse 훅을 통한 기계적 차단과 규칙 ID 시스템을 결합한 관리 방법을 제안합니다. 규칙에 고유 번호를 부여함으로써 예외 상황 발생 시 Claude와의 소통을 명확하게 하고 문맥 오류를 최소화할 수 있습니다.
핵심 포인트
- PreToolUse 훅을 사용하여 물리적으로 중요한 규칙을 강제 차단
- 규칙에 ID(T01, G01 등)를 부여하여 예외 처리의 명확성 확보
- 접두사를 활용한 체계적인 규칙 분류 및 관리 방법 제시
- 문맥 추측 대신 번호 참조를 통한 Claude와의 정확한 커뮤니케이션
Claude Code의 금지 사항을 번호로 관리하기 — 규칙 ID 시스템 입문
「금지」는 사라진다
Claude Code에게 「git push는 하지 마」라고 전달했다. 한동안은 지켜주었다. 하지만 3일 후, 다른 태스크의 흐름 속에서 실행되고 말았다.
지시의 「금지」는 세션(Session)을 넘어가면 희미해진다. CLAUDE.md에 적어 두어도, 긴 세션 속에서 묻혀버린다.
이 문제에는 두 가지 접근 방식이 있다:
기계적으로 강제하기: PreToolUse 훅(Hook)으로 물리적으로 차단한다 -
번호로 관리하기: 규칙에 ID를 붙여 예외 처리를 간결하게 만든다
둘 중 하나가 아니라, 조합함으로써 「중요한 규칙은 반드시 지켜지고, 경미한 규칙은 유연하게 예외를 인정받을 수 있는」 상태가 된다.
접근 방식 1: PreToolUse 훅으로 기계적 차단
가장 중요한 금지 사항(「절대로 해서는 안 되는 조작」)은 훅(Hook)으로 기계적으로 차단한다. Claude의 지시 이해에 의존하지 않는다.
훅의 구조
구현 예시
// ~/.claude/hooks/safety-guard.js
const chunks = [];
process.stdin.on('data', d => chunks.push(d));
...
// settings.json
{
"hooks": {
...
훅(Hook)으로 차단되는 규칙은 「예외 없음」인 것들이다. 여기에 추가하는 것은 신중해야 한다.
접근 방식 2: 규칙에 번호를 붙여 예외 처리를 간결하게
훅(Hook)으로 강제할 수 없는 규칙(코드 스타일, 설계 방침, 작업 흐름)은 CLAUDE.md나 rules/에 작성한다. 이때, 규칙에 번호를 붙이면 예외 처리가 격하게 쉬워진다.
번호 없는 규칙 관리 (Before)
# CLAUDE.md
- 테스트는 반드시 testcontainers를 사용한다. 모크(Mock) DB는 사용하지 않는다.
- API 키는 os.environ.get에 의존하지 않고, .env를 직접 읽어 api_key=로 전달한다.
...
예외를 인정할 때:
사용자: 「아까 그 DB 건 말인데, 이번 유닛 테스트는 인메모리(In-memory) SQLite로 해도 돼」
Claude: (어떤 규칙에 대한 예외인지 불명확함. 테스트 방침인지, DB 사용법인지)
번호 있는 규칙 관리 (After)
# CLAUDE.md
## 개발 방침 (번호로 참조 가능)
- T01: 테스트는 반드시 testcontainers를 사용한다. 모크(Mock) DB는 사용하지 않는다.
...
예외를 인정할 때:
사용자: 「T01을 이번 유닛 테스트에 대해서만 예외로 해줘. 인메모리(In-memory) SQLite로 해도 돼」
Claude: (T01이 무엇인지 정확히 파악. 이 테스트에 한해서는 testcontainers를 사용하지 않아도 된다고 이해)
번호 관리의 효과
| 케이스 | 번호 없음 | 번호 있음 |
|---|---|---|
| 규칙 참조 | 「아까 말한 DB 관련 규칙」 | 「T01」 |
| ... |
특히 예외 처리가 달라진다. 번호가 없으면 「어떤 규칙에 대한 예외인지」를 Claude가 문맥으로부터 추측해야 한다. 번호가 있으면 일대일로 대응된다.
번호 설계 방침
규칙의 성격에 따라 접두사(Prefix)를 나누면 관리하기 쉽다.
| 접두사 | 대상 | 예시 |
|---|---|---|
T | 테스트 방침 | T01: testcontainers 사용 |
G | Git 조작 | G01: feature 브랜치에서 PR |
A | API·외부 연동 | A01: .env 직접 읽기 |
C | 코드 스타일 | C01: 타입 힌트 필수 |
접두사는 자신의 프로젝트에 맞춰 결정한다. 중요한 것은 「같은 문자+번호로 일관되게 참조할 수 있는 것」이다.
무엇을 어디에 사용할 것인가
| 규칙의 성격 | 적절한 수단 |
|---|---|
| 「절대로 실행해서는 안 되는 조작」 | PreToolUse 훅으로 기계적 차단 |
| ... |
훅(Hook)은 「예외 없음」 규칙에만 사용한다. 예외를 인정할 가능성이 있는 규칙을 훅(Hook)에 넣으면, 훅을 비활성화하지 않으면 작업할 수 없게 된다.
요약
- PreToolUse 훅은 「절대 금지」 조작의 기계적 강제에 사용한다
- CLAUDE.md의 규칙에는 번호를 붙이면 예외 처리를 한마디로 끝낼 수 있다
- 번호는 접두사(Prefix)로 성격을 분류하면 참조하기 쉽다
- 훅(기계적 강제)과 번호 관리(유연한 예외)는 보완 관계이다
이 메커니즘을 5개 층의 하네스(Harness) 전체에 통합하는 설계는 유료 도서인 「Claude Code 하네스 엔지니어링 실전 Playbook」에서 설명하고 있다.
좋아요와 댓글로 반응해 주시면 큰 힘이 됩니다!
Discussion

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