문제

Claude Code에 스킬 30+가 누적되면 사용자가 매번 "이건 어떤 스킬?"을 결정해야 한다. 결정 자체가 인지 부담 + 잘못된 스킬 선택 시 시간 낭비.

다른 측면: 매 메시지마다 "결정론적 루프 검증", "Codex 경쟁", "옵션 비교" 같은 메타 패턴을 사람이 일일이 적용하는 건 사람 속도.

해법은 시스템 프롬프트 자체에 워크플로우를 박는 것.

의사결정

버린 선택지

  • 매 메시지 시작에 "이건 어떤 패턴" 명시 — 매번 부담
  • 스킬마다 별도 trigger 키워드 — 키워드 매칭 한계
  • 시스템 자체 제어 안 함 — 일관성 ↓

채택

CLAUDE.md(글로벌 + 프로젝트)에 제0~4원칙 정의:

  • 제0원칙: 강제 라우팅 (모든 메시지 → dispatch)
  • 제1원칙: 결정론적 루프 (사람 개입 없이 검증 가능)
  • 제2원칙: Always v1.0 + Graduated Autonomy
  • 제3원칙: 에이전트·Codex 적극 활용
  • 제4원칙: 깊이 우선 사고

산출물

  • ~/.claude/CLAUDE.md — 글로벌 원칙 (110+ 줄)
  • 우선순위 규칙: 🔀 라우팅 > output style > 작업 인터뷰 > 에이전트 직접 스폰
  • 모든 응답 첫 줄에 라우팅 분류 강제: 🔀 [PASS|DIRECT|COMPETE] → [스킬명 또는 "직접 응답"]
  • Code Practice 영구 적용: 바퀴 재발명 금지, 컨벤션 준수, 셀프 리뷰, Codex 전면 경쟁
  • 자산화 (Proactive): 반복 작업 → 자동화 후보, non-trivial 해결 → debugging.md

임팩트

  • 오늘 세션 30+회 dispatch 호출, 모두 자동 라우팅 (사용자가 스킬명 입력 0회)
  • 5번의 quality-gate, 1번의 personas가 dispatch 추천으로 자연 발화
  • "Codex 전면 경쟁" 규칙으로 작업 빠짐 0건 (사용자 명시 시 예외)
  • compact 내성 — SESSION.md 자동 복원 hook 통합

한계 / 보강

  • 제0원칙 강제가 단순 확인 응답("네")까지 dispatch 보내면 비효율 → PASS 분류로 분리
  • dispatch 자기 자신 추천 무한 루프 위험 → 명시적 금지
  • 새 스킬 추가 시 dispatch가 못 알면 무력 → skill-registry.md 갱신 워크플로우

회고

원칙은 시스템 프롬프트에 박혀야 항상 동작한다. 메시지마다 "이번에도 이 원칙 따라줘"라고 말하는 건 사람 속도. 한 번 박아두면 무한히 재사용.

가장 큰 가치: 원칙 자체가 도구를 부르고, 도구가 또 도구를 부르는 메타 시스템의 자기 강화. 한 세션이 끝나면 다음 세션에 더 잘 동작한다 (memory 자동 갱신).

관련: /cases/dispatch-routing-system, /notes/dispatch-routing-pattern