Rules — CLAUDE.md를 해체하다
이전 이야기에서: 지민은 Background Tasks로 빌드와 코딩을 동시에 처리하게 됐다. 프로젝트가 빠르게 성장했다. 파일 50개에서 100개로. 그리고 CLAUDE.md도 함께 자라고 있었다...
Harness = Tools + Knowledge + Context + Permissions
Rules는 비대해진 Knowledge를 주제별로 해체한다. "불필요한 Knowledge로 Context를 오염시키지 않는다"
탄생 배경: "350줄 괴물"
CLAUDE.md는 완벽한 해결책처럼 보였다. 프로젝트 규칙을 한 곳에 모아서 Claude에게 주입.
3개월이 지나자 지민은 CLAUDE.md를 열어보고 당황했다:
# My Project
## About This Project (10줄)
## Tech Stack (15줄)
## Coding Style
- 불변성 규칙 (8줄)
- 파일 크기 제한 (5줄)
- 에러 핸들링 (10줄)
- 네이밍 컨벤션 (12줄)
## Testing Standards
- TDD 규칙 (15줄)
- 커버리지 기준 (8줄)
- E2E 테스트 (10줄)
## Security Guidelines
- 시크릿 관리 (10줄)
- 입력 검증 (8줄)
- OWASP 체크리스트 (20줄)
## Git Workflow
- 커밋 형식 (10줄)
- PR 프로세스 (15줄)
- 브랜치 전략 (12줄)
## Agent Orchestration
- 언제 planner를 쓸지 (10줄)
- 언제 code-reviewer를 쓸지 (8줄)
## Performance
- 모델 선택 기준 (10줄)
- 컨텍스트 관리 (8줄)
...
총 350줄. 이런 CLAUDE.md가 도처에 퍼졌다.
문제가 여러 개였다:
문제 1: 찾기 힘들다 "보안 규칙이 어디 있었지?" → Ctrl+F로 찾아야 함
문제 2: 유지보수가 힘들다 보안 규칙만 업데이트하려 해도 350줄 파일을 열어야 함
문제 3: 컨텍스트 낭비
planner는 보안 규칙이 필요 없다. 근데 전부 읽는다.
Claude의 컨텍스트 윈도우를 불필요한 정보로 채운다.
문제 4: 언어/프레임워크별 차이 TypeScript 프로젝트와 Python 프로젝트는 규칙이 다른데, 한 파일에 다 넣으면 충돌이 생긴다.
"규칙을 주제별로 나누고, Claude가 필요한 것만 읽게 하면 어떨까?"
해결책의 탄생: "규칙 파일을 분리하자"
Harness Knowledge 레이어를 다시 보면:
Knowledge 레이어의 진화:
1단계: CLAUDE.md — 항상 활성화 (무조건 읽힘)
2단계: Skills — 명시적 요청 시 활성화 (/commit 같은 명령)
3단계: Rules — 맥락 기반 활성화 (Claude가 필요하다고 판단할 때)
.claude/rules/ 폴더에 파일을 나눠서 넣으면,
Claude가 맥락에 따라 필요한 파일만 선택적으로 로드한다.
.claude/rules/
coding-style.md ← 불변성, 파일 크기, 네이밍
testing.md ← TDD, 커버리지 기준
security.md ← 시크릿 관리, OWASP 체크
git-workflow.md ← 커밋 형식, PR 프로세스
agents.md ← 에이전트 오케스트레이션 규칙
development-workflow.md ← 전체 개발 프로세스
performance.md ← 모델 선택, 컨텍스트 관리
이제 CLAUDE.md는 가볍다:
# My Project
Next.js + TypeScript 프로젝트.
규칙은 .claude/rules/ 참조.