1.1 Claude Code 도구 시스템
핵심 개념
Claude Code는 Agent Loop + 도구(Tool)로 동작한다. Claude 모델 자체는 텍스트만 생성하지만, 하네스가 도구를 제공하여 실제 파일 조작/명령 실행을 가능하게 한다.
1 | |
Agent Loop
모든 작업은 이 루프로 돌아간다:
1 | |
- 도구 호출이 포함된 응답 → 루프 계속
- 도구 호출 없이 텍스트만 → 루프 종료
- Claude가 자율적으로 “다음에 뭘 해야 하지?” 판단 → 에이전트
전용 도구 vs Bash
왜 Bash 하나로 안 하나?
Bash로도 cat, grep, sed 등 다 할 수 있다. 그런데 별도 도구를 만든 이유:
| Bash (범용) | 전용 도구 (Read, Edit…) | |
|---|---|---|
| 안전성 | rm -rf /도 실행 가능 |
범위가 제한됨 (파일 읽기만, 수정만) |
| 정확성 | sed 문법 오류 가능 |
타입 검증된 입력 (old_string → new_string) |
| 권한 제어 | “Bash 전체” 단위로만 제어 | 도구별 세밀한 제어 가능 |
하네스 패턴 #11: Single-Purpose Tool Design 전용 도구 = 안전 + 정확 + 제어. Bash는 “만능 탈출구”로만 남겨둔다. Claude Code 시스템 프롬프트에도 “Bash 대신 전용 도구 사용” 명시됨.
도구 분류 (4그룹)
1 | |
Write vs Edit
둘 다 “쓰기” 도구지만 용도가 완전히 다르다:
| 상황 | 도구 | 이유 |
|---|---|---|
| 새 파일 생성 | Write | 아직 파일이 없으니 전체 작성 |
| 500줄 중 3줄만 변경 | Edit | diff만 전송, 효율적 |
| 파일 구조 전체 교체 | Write | 처음부터 다시 쓰는 게 깔끔 |
1 | |
Edit의 핵심 제약: old_string이 파일 내에서 유일해야 한다
1 | |
Glob vs Grep
둘 다 “검색” 도구지만 찾는 대상이 다르다:
1 | |
| 상황 | 도구 | 예시 |
|---|---|---|
| .tsx 파일 위치 찾기 | Glob | Glob("**/*.tsx") |
| useAuth 호출 위치 찾기 | Grep | Grep("useAuth") |
| skip된 테스트 파일 찾기 | 둘 다 조합 | Glob("**/*.test.ts") + Grep("test.skip") |
핵심 정리
- Agent Loop = 도구 호출이 있으면 계속, 없으면 종료. 이것이 “에이전트”의 본질
- 전용 도구 > Bash = 안전 + 정확 + 세밀한 권한 제어 (하네스 패턴 #11)
- Write vs Edit = 전체 교체 vs 정밀 수정. Edit은
old_string유일성 필수 - Glob vs Grep = 파일 이름으로 vs 파일 내용으로. 조합하면 강력
1.2 설치와 설정 시스템
핵심 개념
Claude Code의 설정은 스코프(범위)별로 분리되어 있다. 팀 공유 설정, 개인 설정, 회사 정책이 각각 다른 파일에 존재하며, 우선순위에 따라 병합된다.
하네스(Harness)란?
원래 뜻: 말에게 씌우는 마구 — 힘을 제어하고 방향을 잡아주는 장비
1 | |
1 | |
하네스가 없으면 같은 팀이라도 코드가 중구난방이 된다. 하네스 설계가 Expert의 핵심 역량.
설정 계층 구조
1 | |
우선순위: Managed > CLI > Local > Project > User 이유: 보안은 위에서 아래로 강제. 회사 정책을 개발자가 풀 수 있으면 안 됨.
allow vs deny
1 | |
핵심 규칙: deny는 항상 allow를 이긴다 (어느 레벨이든)
실제 설정 예시 (이 프로젝트)
1 | |
curl이 차단되는 이유
curl은 두 방향 다 위험:
1 | |
대안: curl(범용, 위험) 대신 WebFetch(domain:특정도메인) 사용 → 도메인 제한 가능
이것도 Phase 1.1의 “전용 도구 > Bash” 원칙과 동일
핵심 정리
- 하네스 = 모델을 에이전트로 만드는 모든 것 (마구 비유). 없으면 코드 중구난방
- 설정 5단계 계층 = Managed > CLI > Local > Project > User
- deny > allow = 항상. 보안은 위에서 아래로 강제
- allow = 반복 안전 작업 자동화, deny = 위험 작업 절대 차단
- curl 차단 + WebFetch 허용 = 전용 도구 원칙의 보안 적용
1.3 권한 시스템 (Permission System)
핵심 개념
Claude Code의 모든 도구 호출은 실행 전에 4단계 권한 파이프라인을 통과한다. deny/allow로 커버 안 되는 “애매한 경우”를 별도 AI(Classifier)가 판단한다.
4단계 권한 파이프라인
1 | |
왜 Classifier는 별도 모델인가?
1 | |
하네스 패턴 #10: Command Risk Classification “모델이 무엇을 할지 결정하고, 다른 시스템이 허용 여부를 결정한다”
Permission Modes
Shift+Tab 또는 Alt+M으로 전환:
| 모드 | 동작 | 사용 시나리오 |
|---|---|---|
default |
4단계 파이프라인 그대로 | 일반 개발 |
acceptEdits |
파일 편집 자동 허용, 나머지는 4단계 | 코딩 집중 |
plan |
읽기만 가능, 변경 불가 | 계획 검토/첨삭 |
auto |
Classifier가 거의 다 판단 | 신뢰된 환경 |
Explore-Plan-Act Loop (하네스 패턴 #6)
무턱대고 수정하지 않고 단계를 밟는 워크플로우:
1 | |
1 | |
핵심 정리
- 4단계 파이프라인 = Deny → Allow → Classifier → 사용자. deny가 항상 최우선
- Classifier = 별도 모델 = 에이전트의 추론을 못 봄 → 프롬프트 인젝션 방지
- Permission Mode = 상황에 맞게 Shift+Tab으로 전환 (plan → acceptEdits가 핵심 패턴)
- Explore-Plan-Act = 보고 → 합의 → 실행. 실수 방지의 핵심 워크플로우
1.4 CLAUDE.md 시스템
핵심 개념
CLAUDE.md는 프로젝트별 자연어 지시문(advisory instructions)이다. Claude가 읽고 따르려 노력하지만, settings.json과 달리 기계적 강제는 아니다.
settings.json vs CLAUDE.md
1 | |
비유:
1 | |
스코프 계층
1 | |
하위 디렉토리 = 지연 로딩 (Lazy Loading)
1 | |
하네스 패턴 #9 Progressive Tool Expansion과 같은 원리 “처음에 다 주지 말고, 필요할 때 확장”
CLAUDE.md에 들어가야 할 것
실제 이 프로젝트(FASTER) 예시:
1 | |
잘 쓰는 법
핵심 원칙: “이걸 제거하면 Claude가 실수할까?” 아니면 삭제
1 | |
- 비대한 CLAUDE.md → 진짜 중요한 지시를 Claude가 놓침
- 강조 키워드 활용: “IMPORTANT”, “YOU MUST”, “NEVER” → 준수율 향상
@path/to/import: 다른 파일 임포트 가능 (분리 관리)
핵심 정리
- settings = 출입카드, CLAUDE.md = 직원 핸드북 — 성격이 완전히 다름
- 스코프 4단계 = User → Project(Git) → Local(gitignore) → 하위(지연로딩)
- 지연 로딩 = 접근 시에만 로딩, 토큰 절약 (Progressive 패턴)
- 간결할수록 좋다 = “제거하면 실수하나?” 아니면 삭제