목차(클릭하세요)
LLM실수를 줄이기 위한 단 하나의 CLAUDE.md 파일
1. 코딩전에 먼저 생각하라
2. 단순하게 만들어라
3. 필요한 부분만 수술하듯 고쳐라
4. 목표 중심으로 실행하라
[안드레 카파시의 깃허브]
[관련 영상]
1. 하네스 엔지니어링이란?
1-1. 개념 정의
•
AI 코딩 에이전트는 코드를 못 짜는 게 아님.
•
오히려 너무 잘 짜고, 너무 빠르고, 너무 자신 있게 짬.
문제는 잘못된 방향으로 전속력으로 달려버린다는 것.
•
하네스(Harness) 란 말 그대로 마구(馬具) — 말에게 채우는 고삐와 안장.
AI에게 더 많은 자유를 주는 게 아니라, 올바른 작업 습관을 강제하는 구조적 제약을 의미함.
1-2. 왜 필요한가?
•
AI 코딩 에이전트가 실제로 반복 유발하는 3가지 문제
문제 | 현상 |
침묵하는 잘못된 가정 | 모호한 요청을 받으면 물어보지 않고 임의로 해석해서 달려감 |
과설계 (Over-engineering) | 간단한 함수로 끝날 일을 추상 클래스, 확장 구조로 만들어버림 |
무분별한 코드 수정 | 버그 하나 고치라고 했는데 주석, 포맷, 스타일까지 전부 바꿔버림 |
2. Andrej Karpathy의 GitHub
2-1. 전 세계 개발자들이 열광한 이유
[이벤트] 2026년 1월 26일, OpenAI 공동창업자이자 테슬라 AI 디렉터였던 Andrej Karpathy가 X(트위터)에 포스팅 하나를 올림.
•
2025년 11월 기준: 수동 코딩 80% + AI 보조 20%
•
2026년 1월 기준: AI 에이전트 코딩 80% + 수정 20% 로 개발 상황이 완전히 역전됨
•
이 전환 과정에서 반복적으로 겪은 LLM 코딩 실패 패턴을 구체적으로 정리해서 공개
이걸 읽은 개발자 Forrest Chang이 카파시의 관찰을 실제로 작동하는 CLAUDE.md 파일로 변환함
→ 저장소 이름: forrestchang/andrej-karpathy-skills
→ 영상 촬영 시점 기준 GitHub 스타 9만 개 이상 돌파
2-2. andrej-karpathy-skills 저장소 구조
andrej-karpathy-skills/
├── CLAUDE.md ← 핵심 파일 (65줄)
├── EXAMPLES.md ← Before/After 예시
├── CURSOR.md ← Cursor 에디터 적용 가이드
├── skills/
│ └── karpathy-guidelines/
│ └── SKILL.md ← Claude Code 플러그인용
└── .cursor/
└── rules/
└── karpathy-guidelines.mdc ← Cursor 룰 파일
Plain Text
복사
3. 하네스 엔지니어링의 실제 — CLAUDE.md 파헤치기
3-1. 원본 CLAUDE.md 전문 (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.
Markdown
복사
# CLAUDE.md
LLM 코딩에서 흔히 발생하는 오류를 줄이기 위한 행동 지침입니다.
필요에 따라 프로젝트별 지침과 병합하세요.
**절충점:** 이 지침은 속도보다는 신중함을 강조합니다.
사소한 작업의 경우 판단력을 발휘하세요.
## 1. 코딩 전 생각하기
**추측하지 마세요. 모호한 부분을 숨기지 마세요. 절충점을 명확히 드러내세요.**
구현 전:
-가정을 명확하게 명시하세요. 불확실하면 질문하세요.
-여러 해석이 가능한 경우, 모두 제시하세요. 묵묵히 선택하지 마세요.
-더 간단한 접근 방식이 있다면, 그렇게 말하세요. 필요하다면 반대 의견을 제시하세요.
-불분명한 부분이 있으면 멈추세요. 무엇이 모호한지 파악하고 질문하세요.
## 2. 단순성 우선
**문제를 해결하는 최소한의 코드만 작성하세요. 추측성 코드는 포함하지 마세요.**
-요청된 기능 이상의 기능은 추가하지 마세요.
-일회용 코드를 위한 추상화는 사용하지 마세요.
-요청되지 않은 "유연성"이나 "구성 가능성"은 추가하지 마세요.
- 불가능한 시나리오에 대한 오류 처리는 하지 마세요.
- 200줄을 작성했는데 50줄로 줄일 수 있다면 다시 작성하세요.
스스로에게 물어보세요. "선임 엔지니어가 이 코드가 너무 복잡하다고 말할까?" 만약 그렇다면, 간소화하세요.
## 3. 외과적 수정
**꼭 필요한 부분만 수정하세요. 자신이 만든 코드만 정리하세요.**
기존 코드를 편집할 때:
- 인접한 코드, 주석 또는 서식을 "개선"하지 마세요.
- 문제가 없는 부분을 리팩토링하지 마세요.
- 기존 스타일을 따르세요. 비록 다른 방식으로 작성하더라도.
- 관련 없는 사용되지 않는 코드를 발견하면 언급하세요. 삭제하지 마세요.
변경 사항으로 인해 사용되지 않는 요소가 생긴 경우:
- 변경으로 인해 사용되지 않게 된 import 문/변수/함수를 제거하세요.
- 요청받지 않은 한 기존의 사용되지 않는 코드를 제거하지 마세요.
테스트: 변경된 모든 코드는 사용자의 요청과 직접적으로 연결되어야 합니다.
## 4. 목표 중심 실행
**성공 기준을 정의하고 검증될 때까지 반복합니다.**
작업을 검증 가능한 목표로 변환합니다.
- "유효성 검사 추가" → "유효하지 않은 입력에 대한 테스트를 작성하고 통과하도록 합니다."
- "버그 수정" → "버그를 재현하는 테스트를 작성하고 통과하도록 합니다."
- "X 리팩토링" → "리팩토링 전후에 테스트가 통과하는지 확인합니다."
여러 단계로 이루어진 작업의 경우, 간략한 계획을 명시합니다.
1. [단계] → 검증: [확인]
2. [단계] → 검증: [확인]
3. [단계] → 검증: [확인]
명확한 성공 기준은 독립적인 반복 작업을 가능하게 합니다.
모호한 기준("작동하게 만들기")은 지속적인 명확화를 요구합니다.
Markdown
복사
3-2. 4가지 원칙 핵심 설명
[원칙 1]
Think Before Coding (코딩 전에 생각하라)
•
AI는 모호한 요청을 받으면 물어보지 않고 임의로 해석해서 진행하는 경향이 있음.
예: “로그인 기능 추가해줘” → JWT, OAuth, 세션 기반 중 사용자에게 묻지 않고 혼자 결정해버림.
구분 | 세션 기반 인증 (Session) | JWT 기반 인증 (Token) | OAuth 2.0 (Social) |
저장 위치 | 서버 메모리 또는 DB | 클라이언트 (로컬 스토리지/쿠키) | 외부 서비스 제공자 (Google 등) |
상태 유지 | Stateful (서버가 상태를 가짐) | Stateless (서버가 상태를 안 가짐) | Delegation (권한 위임 방식) |
확장성 | 서버 부하 발생 가능, 분산 환경 복잡함 | 서버 부하 적음, 마이크로서비스에 유리함 | 타 서비스 연동 및 관리 편의성 높음 |
보안성 | 세션 ID 탈취 시 위험, 세션 하이재킹 주의 | 토큰 탈취 시 만료 전까지 통제 어려움 | 외부 인증 서버를 통한 높은 보안 수준 |
주요 특징 | 전통적인 방식, 구현이 상대적으로 단순함 | 별도의 저장소 없이 데이터 검증 가능함 | 사용자 정보 직접 관리 부담이 적음 |
→
이 원칙은 불확실할 때 멈추고 질문하도록 강제함.
[원칙 2]
Simplicity First (단순하게 먼저)
•
간단한 함수 하나로 끝날 일을 추상 클래스, 확장 가능한 구조, 미래 기능까지 구현해버리는 과설계를 막음.
“200줄로 썼는데 50줄로 될 것 같으면, 다시 써라.”
•
똑똑해보이는 코드가 아닌 필요한 만큼의 코드를 작성하도록 강제
[원칙 3]
Surgical Changes (수술처럼 필요한 부분만 수정)
•
버그 하나 고치라고 했는데 옆 코드까지 리팩토링, 주석 변경, 포맷 수정까지 해버리는 문제를 막음.
•
변경된 모든 줄은 사용자 요청으로 직접 추적 가능해야 함.
•
기존 dead code는 언급만 하고 건드리지 말 것.
[원칙 4]
Goal-Driven Execution (목표 중심으로 실행하라)
•
사용자가 모호한 지침을 주더라도, AI가 바로 코딩하는 것이 아니라 스스로 검증가능한 목표중심으로 변환한 뒤 코드작성이 들어감
•
(기존 LLM)“버그 고쳐줘” → AI가 대충 고치고 “완료했습니다” 하는 문제 발생
•
(하네스 엔지니어링) 모호한 요청을 검증 가능한 목표로 변환
4. 전역 vs 프로젝트 — 어디에 두느냐의 차이
4-1. 전역 설정 (~/.claude/CLAUDE.md)
# 전역 설치 방법 (Claude Code 플러그인)
/plugin marketplace add forrestchang/andrej-karpathy-skills
/plugin install andrej-karpathy-skills@karpathy-skills
Bash
복사
또는 수동으로:
mkdir -p ~/.claude
curl -o ~/.claude/CLAUDE.md \
https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md
Bash
복사
항목 | 내용 |
위치 | ~/.claude/CLAUDE.md |
적용 범위 | 내 모든 프로젝트에 공통 적용 |
용도 | 내 코딩 스타일, 기본 작업 원칙, 개인 습관 설정 |
예시 내용 | 카파시 4원칙, 선호 언어/프레임워크, 커밋 메시지 스타일 |
주의 | 모든 프로젝트에 영향 → 너무 구체적인 설정은 충돌 유발 가능 |
4-2. 프로젝트 폴더 설정 (프로젝트폴더/CLAUDE.md)
# 프로젝트별 설치 (현재 폴더에만 적용)
curl -o CLAUDE.md \
https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md
Bash
복사
기존 CLAUDE.md에 추가하는 경우:
echo "" >> CLAUDE.md && \
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md
Bash
복사
항목 | 내용 |
위치 | 프로젝트폴더/CLAUDE.md |
적용 범위 | 해당 프로젝트 폴더에서만 적용 |
용도 | 프로젝트별 기술 스택, DB 구조, 팀 컨벤션, 특수 제약 |
예시 내용 | “이 프로젝트는 FastAPI + PostgreSQL 사용”, “테스트는 pytest로만” |
우선순위 | 전역 설정보다 높음 (프로젝트 설정이 덮어씀) |
4-3. 전역 vs 프로젝트 비교 요약
~/.claude/CLAUDE.md (전역) | 프로젝트/CLAUDE.md (로컬) | |
적용 범위 | 모든 프로젝트 | 해당 폴더만 |
주요 용도 | 나의 코딩 철학, 공통 원칙 | 프로젝트 특수 맥락 |
변경 빈도 | 낮음 (거의 안 바꿈) | 높음 (프로젝트마다 다름) |
충돌 시 우선순위 | 낮음 | 높음 (로컬이 우선) |
팀 공유 여부 |
5. 양파고의 하네스 엔지니어링 활용 팁 
5-1. AI 교육 현장에서의 응용
하네스 엔지니어링의 4원칙은 AI 관련 수업의 철학에도 그대로 적용됨:
원칙 | 수업 설계 적용 |
Think Before Coding | 학생에게 코딩 전 설계서(의사코드) 먼저 작성하게 하기 |
Simplicity First | “가장 짧은 코드로 구현하기” 과제 추가 |
Surgical Changes | 기존 코드에서 딱 한 곳만 고치는 디버깅 실습 |
Goal-Driven Execution | 성공 기준을 먼저 정의하는 TDD 입문 활동 |
5-2. 안드레 카파시 하네스 엔지니어링사용 전략
•
CLAUDE.md로 관리


◦
나만의 CLAUDE.md에 해당 내용을 넣고 전역 설정(~/.claude/CLAUDE.md)에 포함시키는 방법
◦
혹은 코드 작업 프로젝트에만 프로젝트별 설정(CLAUDE.md)으로 포함시키는 방법
[스킬 적용 방법]
5-3. 안드레 카파시 하네스 엔지니어링 스킬 적용 전후 비교
•
코드에 대한 심판자는 제미나이에게 맡길예정
Create a single, complete HTML page that simulates the solar system. All eight planets orbit the sun at actual relative velocities (velocities based on scale, not actual velocities). Use inline SVGs for celestial bodies and CSS animations or `requestAnimationFrame` for movement. Clicking a planet opens a card displaying its actual information (distance, mass, day length, satellites). Include a time slider that allows the user to adjust the animation speed from 0.1x to 100x. Use a dark theme and beautiful constellation backgrounds, and do not use external libraries other than those included in the HTML file. Design it to look like a museum exhibit. Save it as an index.html file. Make all menus in Korean.
Plain Text
복사
[스킬 적용 전]
•
총 코드는 약 1274줄
•
체험 링크
•
해당 코드에 대한 Gemini의 평가 : 종합 점수: 96 / 100
평가 항목 | 주요 평가 요인 | 평가 결과 |
복잡도 및 간결성 | 데이터 중심 설계(Data-driven), 선언적 스타일, 로직 분리 | 매우 우수 |
오류 및 디버깅 | 예외 처리, 상태 관리의 명확성, 좌표 계산 정밀도 | 우수 |
실행 시간(성능) | GPU 가속(Canvas), 렌더링 최적화, 연산 효율성 | 최상 |
[스킬 적용 후]
•
총 코드는 약 191줄????
•
확실한건 작업 속도가 말도 안되게 빨라졌다..
•
그리고 작업 과정을 설명해줌
◦
중간 응답
•
체험 링크
•
해당 코드에 대한 Gemini의 평가 : 종합 점수: 98 / 100
평가 항목 | 주요 평가 요인 | 평가 결과 |
복잡도 및 간결성 | 변수 단축화, 데이터 구조의 압축, 불필요한 로직 제거 | 최상 |
오류 및 디버깅 | 상태 관리 안정성, 델타 타임(dt) 적용, 이벤트 리스너 구조 | 우수 |
실행 시간(성능) | 배경 캐싱(Canvas Caching), 렌더링 루프 최적화 | 독보적 |
[제미나이의 비교 심사평]
구분 | 1번째 코드 (1,000줄+) | 2번째 코드 (100줄+) |
설계 철학 | 가독성 및 유지보수(Readability) 중심 | 성능 및 밀도(Performance Density) 중심 |
상태 관리 | 명시적이고 서술적인 변수명 사용 | 최소한의 메모리 점유를 위한 단축 변수 사용 |
렌더링 | 매 프레임 모든 요소를 전수 계산 | 배경 캐싱을 통한 연산량 80% 절감 |
결과물 | 교육용 교재로 적합한 '친절한 코드' | 실제 서비스 임베딩에 적합한 '최적화된 엔진' |
6. GPT의 하네스 엔지니어링 비교심판
[스킬 적용 전]
점수
항목 | 점수 |
코드 복잡도 | 85 |
디버깅 용이성 | 78 |
실행 성능 | 90 |
평균 | 84.3 / 100 |
핵심 판단
1.
구조적 설계는 우수함
2.
그러나 "단일 파일 구조" 때문에 확장성은 제한적
3.
UI/CSS가 지나치게 커서 복잡도 상승
평가 항목 | 분석 |
구조 | HTML / CSS / JS가 한 파일에 결합된 monolithic 구조 |
모듈화 | 기능 단위 함수 분리는 잘 되어 있음 (draw, event, data 등) |
데이터 구조 | PLANETS 객체 구조 매우 명확 (확장성 좋음) |
중복 코드 | drawPlanet 내부 분기문 증가 → 일부 중복 존재 |
가독성 | 주석 + 섹션 구분 매우 우수 |
스타일 분리 | CSS 매우 방대 → 유지보수 난이도 상승 |
[스킬 적용 후]
점수
항목 | 점수 |
코드 복잡도 | 82 |
디버깅 용이성 | 72 |
실행 성능 | 93 |
평균 | 82.3 / 100 |
핵심 판단
1.
bgCache 사용이 핵심 개선 포인트
2.
렌더링 비용 크게 감소
3.
실제 체감 성능 매우 좋음
평가 항목 | 분석 |
구조 | 여전히 단일 파일(monolithic) 구조 |
코드 길이 | 1번 대비 약 20~30% 감소 |
변수 명명 | 축약형 (p, r, au, T 등) → 가독성 감소 |
데이터 구조 | 간결하지만 의미 전달력은 다소 약함 |
함수 구조 | 핵심 기능 중심으로 단순화됨 |
CSS | 훨씬 간결해짐 |
최종 결론
1.
안드레 카파스 하네스 엔지니어링 스킬 사용 전
•
“교육용 + 전시용 + 가독성 중심 코드”
2.
안드레 카파스 하네스 엔지니어링 스킬 사용 후
•
“성능 최적화 + 실전 엔지니어링 코드”
•
점수: 82.3















