Dissecting Karpathy's 65-Line CLAUDE.md
Karpathy의 65줄 해부 — 22만 star의 비밀
65줄로 AI의 4대 실패 패턴을 모두 막는 방법 — 각 줄이 왜 그 자리에 있는지 분해한다.
Overview
Karpathy CLAUDE.md의 전문을 처음 읽으면 놀라울 정도로 단순해 보인다. 화려한 프롬프트 엔지니어링 기법도 없고, 복잡한 조건 분기도 없다. 단지 네 개의 섹션, 명확한 지시들, 그리고 각 원칙의 자가 테스트 방법.
이 단순함이 바로 핵심이다. CLAUDE.md는 Claude가 읽는 문서인 동시에 인간 개발자도 읽고 이해할 수 있어야 한다. 복잡한 파일은 관리되지 않는다. 관리되지 않는 CLAUDE.md는 없는 것만 못하다.
그러나 이 65줄 안에는 수개월의 실패 경험이 압축되어 있다. 각 규칙은 구체적인 사고에서 나왔다 — 'AI가 이런 짓을 해서 PR이 엉망이 됐다'는 경험이 하나의 줄로 결정화된 것이다. 이 챕터에서는 그 65줄을 한 줄씩 분해하고, 각 선택의 이유를 이해한다.
- Karpathy CLAUDE.md의 4가지 섹션이 각각 어떤 실패 패턴을 막는지 설명할 수 있다
- 각 원칙을 자신의 프로젝트에 적용하는 방법을 안다
- Senior Engineer Test와 Traceability Test를 이해하고 활용한다
- 이 파일이 22만 star를 받은 심리적, 기술적 이유를 분석한다
- 원칙을 프로젝트별로 커스터마이즈하는 방법을 안다
Sections
섹션 1: Think Before Coding — 가정을 드러내라
첫 번째 섹션의 핵심 명령은 두 단어다: Don't assume. 그리고 바로 이어서: Don't hide confusion.
이 두 문장이 AI 에이전트의 가장 흔한 실패를 막는다. AI는 모호한 지시를 받았을 때 가장 그럴듯한 해석을 선택하고 구현을 시작한다. 사용자에게 물어보는 것보다 그게 더 '도움이 되는' 행동처럼 느껴지기 때문이다. 하지만 틀린 방향으로 구현된 200줄의 코드는 애초에 아무것도 안 한 것보다 훨씬 나쁘다.
## 1. Think Before Coding
Before implementing:
- State your assumptions explicitly. If uncertain, ask.
- If multiple interpretations exist, present them - don't pick silently.
- If a simpler approach exists, say so. Push back when warranted.
- If something is unclear, stop. Name what's confusing. Ask.
'Push back when warranted'는 특히 중요하다. Claude에게 반박할 권한을 명시적으로 주는 것이다. 이 줄이 없으면 Claude는 비효율적인 접근법도 그냥 구현해버린다. 이 줄이 있으면 '더 간단한 방법이 있는데요'라고 먼저 말한다.
자가 테스트 질문: 구현 전에 명시적으로 가정을 드러냈는가? 불분명한 게 있으면 이름을 붙여서 물어봤는가?
섹션 2: Simplicity First — 코드 비대화와의 전쟁
두 번째 섹션은 AI의 가장 흔한 죄악과 싸운다 — 요청하지 않은 것을 추가하는 습관.
## 2. Simplicity First
- No features beyond what was asked.
- No abstractions for single-use code.
- No "flexibility" or "configurability" that wasn't requested.
- No error handling for impossible scenarios.
- If you write 200 lines and it could be 50, rewrite it.
Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
마지막 두 줄이 특히 천재적이다. 'Senior Engineer Test'는 Claude에게 자가 검증 메커니즘을 준다. Claude는 코드를 작성한 후 스스로 시니어 엔지니어의 관점에서 평가해야 한다. 이것은 외부 검토를 내부화한 것이다.
'If you write 200 lines and it could be 50, rewrite it'은 더 나아간다 — 한 번에 최소한으로 쓰는 게 아니라, 너무 많이 썼다면 다시 쓰라는 명령이다. 이 명령이 없으면 Claude는 일단 쓴 코드를 유지하려는 경향이 있다.
섹션 3: Surgical Changes — 부수 피해 방지
세 번째 섹션은 매우 구체적인 메타포를 사용한다 — 'Surgical'. 외과 수술처럼 정확히 필요한 부분만 건드리라는 것이다.
## 3. Surgical Changes
When editing existing code:
- Don't "improve" adjacent code, comments, or formatting.
- Don't refactor things that aren't broken.
- Match existing style, even if you'd do it differently.
When your changes create orphans:
- Remove imports/variables/functions that YOUR changes made unused.
- Don't remove pre-existing dead code unless asked.
The test: Every changed line should trace directly to the user's request.
마지막 줄 Traceability Test가 핵심이다: 변경된 모든 줄이 사용자의 요청으로 직접 추적될 수 있어야 한다. 이 테스트가 명시되면, Claude는 PR에 들어가는 모든 변경에 대해 '왜 이 줄이 필요한가'를 스스로 검증해야 한다.
'Match existing style, even if you'd do it differently'는 미묘하지만 중요하다. Claude에게는 자신의 선호가 있다. 이 줄이 없으면 Claude는 기존 코드를 자신의 스타일로 맞추려 한다. 이 줄이 있으면 그러지 않는다.
섹션 4: Goal-Driven Execution — 검증 가능한 성공 기준
마지막 섹션은 가장 야심찬 변환을 요구한다 — 모든 태스크를 검증 가능한 목표로 바꾸는 것.
## 4. Goal-Driven Execution
Transform tasks into verifiable goals:
- "Add validation" → "Write tests for invalid inputs, then make them pass"
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
- "Refactor X" → "Ensure tests pass before and after"
For multi-step tasks, state a brief plan:
1. [Step] → verify: [check]
2. [Step] → verify: [check]
이 변환이 강력한 이유는, 검증 단계를 구현 단계와 분리하기 때문이다. '검증'이 명시적으로 있으면 Claude는 '완료'를 선언하기 전에 실제로 검증한다. 없으면 구현이 끝나는 것이 곧 완료다.
멀티스텝 태스크를 위한 플랜 템플릿도 포함되어 있다. 각 스텝에 대응하는 검증 체크가 붙어있어, 루프를 독립적으로 돌릴 수 있다. 이것이 '약한 기준(make it work)'과 '강한 기준(test passes)' 사이의 차이다.
22만 Star의 비밀 — 왜 이 파일이 공명했는가
이 파일이 기록적인 속도로 퍼진 데는 기술적 이유와 심리적 이유가 함께 작용했다.
기술적 이유: 파일이 해결하는 네 가지 실패 패턴은 실재하고 측정 가능하다. 각 섹션 끝의 자가 테스트(Senior Engineer Test, Traceability Test)는 Claude가 실제로 따를 수 있는 구체적인 기준을 제공한다. 규칙이 아니라 기준이다.
심리적 이유: 이 파일은 프롬프트 엔지니어링처럼 느껴지지 않는다. 새 팀원에게 주는 온보딩 문서처럼 느껴진다. 개발자들은 이것을 읽고 '나도 이게 필요했어'라고 즉각 인식한다. 공유하기 쉽고, 커스터마이즈하기 쉽고, 팀원에게 설명하기 쉽다.
Tradeoff 고지: 파일 첫 줄에 있는 이 문장도 중요하다 — 'These guidelines bias toward caution over speed. For trivial tasks, use judgment.' 이 솔직함이 신뢰를 만든다. '항상 이렇게 하라'가 아니라 '이 트레이드오프를 알고 쓰라'고 말하는 것이다.
체스 그랜드마스터들은 수천 개의 오프닝 라인을 암기한다. 하지만 그들이 정말로 배우는 것은 특정 수열이 아니라, 그 수열이 만들어내는 포지션의 원칙이다. 왜 이 말을 여기에 두어야 하는가? 왜 이 교환은 손해처럼 보여도 유리한가?
Karpathy의 65줄은 그 오프닝 북과 같다. 각 규칙은 단순한 '이렇게 해'가 아니라, 그 배후의 원칙을 담고 있다. 'Don't assume'은 단지 물어보라는 게 아니다 — 모호함을 명시적으로 만들라는 원칙이다. 'Every changed line should trace directly to the user's request'는 단지 적게 바꾸라는 게 아니다 — 인과관계를 추적 가능하게 유지하라는 원칙이다.
그랜드마스터가 오프닝 북을 넘어서는 순간은 규칙을 외울 때가 아니라 원칙을 이해할 때다. 마찬가지로, 이 파일을 그냥 복사해서 쓰는 것과 각 줄의 이유를 이해하고 자신의 프로젝트에 맞게 변형하는 것 사이에는 큰 차이가 있다.
Karpathy의 원본 65줄 전문이다. 각 섹션의 구조와 자가 테스트 메커니즘에 주목하라.
# CLAUDE.md
Behavioral guidelines to reduce common LLM coding mistakes.
Merge with project-specific instructions as needed.
**Tradeoff:** These guidelines bias toward caution over speed.
For trivial tasks, use judgment.
## 1. Think Before Coding
**Don't assume. Don't hide confusion. Surface tradeoffs.**
Before implementing:
- State your assumptions explicitly. If uncertain, ask.
- If multiple interpretations exist, present them - don't pick silently.
- If a simpler approach exists, say so. Push back when warranted.
- If something is unclear, stop. Name what's confusing. Ask.
## 2. Simplicity First
**Minimum code that solves the problem. Nothing speculative.**
- No features beyond what was asked.
- No abstractions for single-use code.
- No "flexibility" or "configurability" that wasn't requested.
- No error handling for impossible scenarios.
- If you write 200 lines and it could be 50, rewrite it.
Ask yourself: "Would a senior engineer say this is overcomplicated?"
If yes, simplify.
## 3. Surgical Changes
**Touch only what you must. Clean up only your own mess.**
When editing existing code:
- Don't "improve" adjacent code, comments, or formatting.
- Don't refactor things that aren't broken.
- Match existing style, even if you'd do it differently.
- If you notice unrelated dead code, mention it - don't delete it.
When your changes create orphans:
- Remove imports/variables/functions that YOUR changes made unused.
- Don't remove pre-existing dead code unless asked.
The test: Every changed line should trace directly to the user's request.
## 4. Goal-Driven Execution
**Define success criteria. Loop until verified.**
Transform tasks into verifiable goals:
- "Add validation" → "Write tests for invalid inputs, then make them pass"
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
- "Refactor X" → "Ensure tests pass before and after"
For multi-step tasks, state a brief plan:
1. [Step] → verify: [check]
2. [Step] → verify: [check]
3. [Step] → verify: [check]
Strong success criteria let you loop independently.
Weak criteria ("make it work") require constant clarification.
---
**These guidelines are working if:** fewer unnecessary changes in diffs,
fewer rewrites due to overcomplication, and clarifying questions come
before implementation rather than after mistakes. 파일 끝의 '이 가이드라인이 작동하고 있는지 확인하는 방법' 섹션을 주목하라. 이것은 단순한 마무리 문장이 아니라 메타 검증이다 — CLAUDE.md 자체가 효과가 있는지 측정하는 기준을 제공한다. diff에 불필요한 변경이 줄었는가? 과도한 복잡성으로 인한 재작성이 줄었는가? 구현 후가 아닌 전에 질문이 오는가? 이 세 지표를 추적하면 CLAUDE.md의 ROI를 실제로 측정할 수 있다.
✅ 시니어가 보는 것
- 4원칙이 팀의 실제 사고 기록과 연결되어 있는지
- 'Senior Engineer Test'와 'Traceability Test'를 실제로 적용하고 있는지
- Tradeoff 고지처럼 솔직한 한계 인정이 있는지
⚠️ 레드 플래그
- 원본 그대로 복사해서 프로젝트 특화 정보 없이 쓰는 경우
- 파일이 있지만 팀원들이 내용을 모르는 경우
- 자가 테스트 기준을 이해 없이 따라 쓰는 경우
🎤 예상 인터뷰 질문
- Karpathy CLAUDE.md의 4원칙 중 귀하의 팀에서 가장 중요한 것은 무엇이고 왜인가요?
- 'Surgical Changes' 원칙을 실제 코드 리뷰에서 적용한 사례가 있나요?
- 'Goal-Driven Execution'에서 약한 기준과 강한 기준의 차이를 실제 태스크로 보여주세요.
Key Takeaways
65줄은 수개월의 실패를 압축한 것
각 규칙 뒤에는 구체적인 사고가 있다. 규칙을 외우기보다 그 사고를 이해하라.
자가 테스트가 핵심이다
Senior Engineer Test와 Traceability Test는 Claude에게 외부 검토를 내부화시키는 메커니즘이다.
Tradeoff를 솔직하게 고지하라
좋은 CLAUDE.md는 항상 이렇게 하라고 말하지 않는다. 트레이드오프를 인정하고 판단을 위임한다.
단순함이 관리 가능성을 만든다
이 파일이 22만 star를 받은 이유 중 하나는 팀원 누구나 읽고 이해하고 기여할 수 있기 때문이다.
복사보다 변형이 가치 있다
원본을 시작점으로 삼되, 팀의 실제 사고를 반영하도록 반드시 커스터마이즈하라.
끝의 메타 검증을 기억하라
diff 품질, 재작성 빈도, 질문 타이밍 — 이 세 지표를 추적하면 CLAUDE.md의 실제 효과를 측정할 수 있다.