개념 관점
“Sign” 메타포로 instruction tuning을 설명하고, 영구 컨텍스트(PROMPT.md / AGENTS.md)와 일시적 프롬프트의 역할 분리를 정리한다.
개념 관점
“Sign” 메타포로 instruction tuning을 설명하고, 영구 컨텍스트(PROMPT.md / AGENTS.md)와 일시적 프롬프트의 역할 분리를 정리한다.
설계 관점
instruction layer를 mission / norms / pitfalls / examples 4구역으로 설계하고, 어떤 실패 패턴을 어떤 구역에서 흡수할지 결정한다.
구현 관점
프로젝트 PROMPT.md를 고도화해 반복 실수 1-2개를 명시적 금지 패턴으로 박제하고, 실패 → instruction 업데이트 사이클을 자동화한다.
운영 관점
instruction drift를 모니터링하고, 분기마다 instruction을 재검토 / 정리 / 삭제하는 “instruction housekeeping” 루틴을 제안한다.
5주차에서 컨텍스트를 깨끗하게 유지하는 법을 배웠다 — auto-compaction, fresh context, 상태 파일. 하지만 컨텍스트가 깨끗해도, 에이전트가 같은 실수를 반복하면 소용이 없다.
이번 주의 핵심 질문: 에이전트의 행동을 모델 가중치 변경 없이 교정할 수 있는가?
답은 “인스트럭션 튜닝” — 모델을 바꾸지 않고 환경(instruction file)을 바꿔서 행동을 교정한다. 4주차 Ralph 루프의 AGENTS.md(누적 학습)가 수동적 기록이었다면, 이번 주의 PROMPT.md/CLAUDE.md 튜닝은 능동적 제약 설계다.
7주차(멀티에이전트)로 넘어가면 에이전트마다 다른 PROMPT.md와 퍼미션이 필요하다. 그 전에 단일 에이전트의 행동을 정밀하게 제어하는 기술을 먼저 익힌다.
Ralph 루프에서 에이전트가 반복적인 실수를 하면, 모델 가중치를 재훈련하지 않고 PROMPT.md에 구체적이고 결정론적인 지시를 추가하여 행동을 교정한다.
# [영구 제약 — 절대 무시하지 말 것]
## ⚠️ 알려진 함정 (Instructional Tuning)
### 1. 존재하지 않는 함수 호출 금지- `utils.parse_json()`은 이 프로젝트에 없음- 반드시 `json.loads()`를 직접 사용할 것- 추가일: 2026-04-02 (루프 #47에서 반복 오류 발생)
### 2. 테스트 없이 커밋 금지- `git commit` 전 반드시 `pytest tests/ -q` 통과 필수- CI가 실패하면 자동 rollback됨
### 3. 타입 힌트 필수- 모든 함수는 Python 타입 힌트 포함- `def add(a, b):` → `def add(a: int, b: int) -> int:`
---
# [현재 태스크]...GitHub Blog의 2,500개 오픈소스 레포 분석(2026)과 ETH Zurich의 AGENTbench 연구가 instruction 파일의 성공 요인과 안티패턴을 실증적으로 밝혀냈다.
pnpm test --coverage 같은 구체적 명령(플래그 포함)을 파일 상단에 배치def add(a: int, b: int) -> int: 예시가 효과적| Tier | 의미 | 예시 |
|---|---|---|
| Always Do | 매번 반드시 실행 | ”커밋 전 pytest 실행”, “타입 힌트 필수” |
| Ask First | 실행 전 확인 요청 | ”DB 스키마 변경 시 사람에게 확인”, “외부 API 키 수정 시 확인” |
| Never Do | 절대 금지 | ”.env 파일 커밋 금지”, “main 브랜치 직접 푸시 금지” |
CLAUDE.md는 매 세션, 매 턴마다 시스템 프롬프트에 주입된다. 따라서 토큰 예산이 있다:
Pruning 테스트: 각 줄에 대해 “이걸 빼면 Claude가 실수하나?” 자문하라. 아니면 삭제.
포함해야 할 것: 빌드/테스트 명령, 비표준 코딩 규칙, 아키텍처 결정 사항, 금지 목록 제외해야 할 것: 표준 언어 규칙(린터가 처리), 자주 변하는 정보, 긴 튜토리얼
200줄 제한을 해결하면서 도메인 지식을 활용하는 방법이 Skills다:
| 저장소 | 로딩 시점 | 용도 |
|---|---|---|
CLAUDE.md | 매 세션 자동 | 프로젝트 공통 규칙 (200줄 이하) |
.claude/skills/*.md | 관련 태스크일 때 on-demand | 도메인 특화 지식 |
예: API 컨벤션, 배포 절차, DB 마이그레이션 규칙 등은 매번 로딩할 필요 없다. .claude/skills/ 디렉토리에 분리하면 필요할 때만 로딩되어 토큰을 절약하면서도 전문 지식을 활용할 수 있다.
SkillReducer 연구(arXiv:2603.29919)는 도구 설명을 48% 압축했을 때 오히려 품질이 2.8% 향상되는 “less-is-more” 효과를 발견했다. 정보를 줄이면 에이전트가 핵심에 집중한다.
| 지표 | 측정 방법 |
|---|---|
| 반복 오류율 | 동일 오류 발생 횟수 / 전체 루프 수 |
| 평균 루프 횟수 | 태스크 완료까지 필요한 루프 수 |
| 컨텍스트 효율 | 불필요한 탐색에 낭비되는 토큰 비율 |
PROMPT.md에 제약을 추가하는 것은 맞춤 간판을 설치하는 것과 같다. 반면 Claude Code의 **출력 스타일(Output Styles)**은 에이전트에 미리 내장된 모드 전환 스위치다. 설정 비용 없이 에이전트의 행동 패턴을 바꿀 수 있다.
핵심 통찰: 출력 스타일은 톤을 바꾸는 것이 아니라 인지 모드를 바꾼다. 같은 태스크를 주더라도 스타일에 따라 에이전트가 문제에 접근하는 방식 자체가 달라진다.
claude --output-style explanatory "이 함수의 에러 핸들링을 개선해줘"에이전트가 코드를 수정하면서 왜 이렇게 바꾸는지 이유를 설명한다. PR에 reasoning이 이미 포함되므로 리뷰어가 결정만 검증하면 된다.
적합 상황: 팀 온보딩, 주니어 엔지니어의 낯선 코드베이스 작업, 코드 리뷰 시간 단축이 필요할 때
claude --output-style learning "이 함수의 에러 핸들링을 개선해줘"에이전트가 직접 수정하는 대신 단계별로 가이드하며, 학습자가 스스로 변경하도록 유도한다. 코칭 모드.
적합 상황: 교육 목적, 이 과목의 실습처럼 학생이 원리를 이해해야 할 때
claude --output-style concise "이 함수의 에러 핸들링을 개선해줘"최소한의 설명으로 코드 변경만 출력한다. 숙련 개발자가 빠르게 결과만 필요할 때.
적합 상황: 반복 작업, 린트 수정, 명확한 패턴 적용
Boris Cherny의 팀은 주니어 엔지니어가 낯선 서비스에서 작업할 때 Explanatory를 기본값으로 설정한다. 결과: PR 리뷰 시간이 단축되었다 — 코드에 reasoning이 이미 붙어 있으므로 리뷰어가 결정을 재구성할 필요가 없다.
출력 스타일이 방향을 바꾼다면, effort level은 깊이를 조절한다.
| Level | 용도 | 비용 | 예시 |
|---|---|---|---|
low | 단순 조회, 타입 확인 | 최소 | claude --effort low "이 함수의 반환 타입?" |
medium | 일반적인 코드 수정 | 보통 | claude --effort medium "테스트 추가" |
high | 아키텍처 설계, 복잡한 디버깅 | 높음 | claude --effort high "비동기 리팩터링 설계" |
max | 최대 추론 깊이 (지원 모델 한정) | 최대 (10x+) | claude --effort max "보안 취약점 분석" |
Ralph 루프에서 effort level의 실전 활용: 루프 초반(탐색 단계)에는 low로 빠르게 시도하고, 핵심 구현 단계에서 high로 전환하면 토큰 비용을 최적화할 수 있다.
내장 스타일(Explanatory/Learning/Concise)로 부족하면 커스텀 스타일을 만들 수 있다:
# 새 커스텀 스타일 생성claude /output-style:new생성된 Markdown 파일의 frontmatter에서 keep-coding-instructions: true/false로 기존 코딩 지시를 유지할지 완전 교체할지 제어한다. 이것은 PROMPT.md보다 더 깊은 레벨의 인스트럭션 튜닝 — 시스템 프롬프트의 코딩 관련 부분 자체를 교체한다.
| 항목 | PROMPT.md 인스트럭션 튜닝 | 출력 스타일 + Effort Level |
|---|---|---|
| 설정 비용 | 높음 — 오류 분석 → 문구 작성 → 효과 검증 | 제로 — CLI 플래그 하나 |
| 커스터마이징 | 무한 — 프로젝트 고유 제약 자유 기술 | 제한적 — 프리셋 목록에서 선택 |
| 지속성 | 영구 — 파일에 기록, git 추적 | 세션 단위 — 매번 지정 필요 |
| Sign 메타포 | 현장에서 직접 세운 맞춤 간판 | 공장에서 미리 설치된 모드 전환 스위치 |
| 적합 상황 | 프로젝트 고유의 반복 오류 교정 | 범용적 행동 패턴 변경 |
CLAUDE.md는 advisory — 약 80% 확률로 따른다. 100% 시행이 필요하면 Hook을 사용한다.
Hook은 도구 호출, 세션 이벤트 등에 셸 명령/HTTP/LLM 판단을 트리거하는 자동화 메커니즘이다. ~/.claude/settings.json 또는 프로젝트 .claude/settings.json에 정의한다.
| 타입 | 동작 | 용도 |
|---|---|---|
| command | 셸 명령 실행 | auto-format, 린트 체크, 로그 기록 |
| http | HTTP endpoint POST | 외부 서비스 알림, CI 트리거 |
| prompt | LLM(Haiku)에 판단 위임 | ”태스크 완료 여부” 자동 판단 |
| agent | Subagent가 파일 읽기/명령 실행 | ”테스트 통과 여부” 복합 검증 |
{ "hooks": { "PostToolUse": [{ "matcher": "Write", "command": "npx prettier --write $CLAUDE_FILE_PATH" }] }}이 Hook은 Claude가 파일을 쓸 때마다 Prettier를 자동 실행한다. CLAUDE.md에 “Prettier 형식을 따르라”고 쓰는 것보다 100% 확실하다.
{ "hooks": { "Stop": [{ "type": "prompt", "prompt": "모든 태스크가 완료되었는가? fix_plan.md에서 미완료 항목을 확인하라.", "model": "haiku" }] }}prompt 타입 Hook은 Haiku 모델에 판단을 위임한다. "ok": false를 반환하면 에이전트가 계속 작업한다. Ralph 루프의 수동 검증을 자동화하는 핵심 패턴이다.
Instruction 파일은 모든 AI 코딩 도구의 공통 패턴이지만, 구현은 도구마다 다르다:
| 도구 | 파일 | 계층 | 특이점 |
|---|---|---|---|
| Claude Code | CLAUDE.md | 5레벨 + Skills | @import, advisory(~80%), Hook으로 보완 |
| Cursor | .cursor/rules/ | 디렉토리 기반 | .cursorrules에서 이전, glob 패턴 매칭 |
| Windsurf | .windsurf/rules/ | 디렉토리 기반 | Cascade 엔진이 자동 맥락 탐지 |
| Codex CLI | AGENTS.md | 도구 중립 | 60,000+ 레포 채택, 25+ 에이전트 호환 |
| GitHub Copilot | .github/copilot-instructions.md | 단일 파일 | VS Code 3-tier 메모리와 결합 |
PreToolUse: Bash(git commit*) → pytest 실행을 강제하는 것의 차이는? 어느 쪽이 더 효과적이고, 왜?오류 패턴 분석
이전 랩의 실행 로그를 log_analyzer.py(Lab 06 참조)로 분석하여 반복 오류 상위 5개를 추출한다.
3-tier Boundary 설계
추출된 오류를 Always Do / Ask First / Never Do로 분류하고, PROMPT.md에 구조화된 인스트럭션 섹션을 추가한다.
Hook 설정
Never Do 항목 중 하나를 PreToolUse Hook으로 구현하여 100% 시행을 보장한다. settings.json에 추가.
A/B 테스트
동일한 태스크를 인스트럭션 추가 전/후로 실행하여 루프 횟수, 토큰 사용량, 반복 오류율을 비교한다. Lab 06의 ab_test.py를 활용.
Lab 06 연결
위 실험 결과를 바탕으로 Lab 06의 4개 요구사항(분석 보고서, PROMPT.md, 비교 실험, 그래프)을 완성한다.
제출 마감: 2026-04-14 23:59
요구사항:
PROMPT.md (인스트럭션 섹션 + Always Do / Never Do 구조).claude/skills/에 on-demand 로딩. SkillReducer의 less-is-more 효과