Claude Code Notes

Claude Code 정리 노트

작성일: 2026-06-20


1. 팀 계정 사용 정책

개인 기기에서 팀 계정 사용 시

  • 팀/조직 계정을 개인 컴퓨터에서 사용하는 것 자체가 자동 정지되지는 않음
  • 동일 계정으로 다른 기기에서 로그인은 기술적으로 가능

주의사항

항목설명
회사 내부 정책회사/팀 관리자가 사용 범위를 제한할 수 있음 (예: 회사 기기 전용)
관리자 권한팀 관리자가 사용 로그, 기기 정보를 확인할 수 있음
이용약관계정 공유나 부정 사용은 제재 대상 가능

로그아웃/로그인 전환 방식

  • 회사 PC에서 로그아웃 후 개인 기기에서 로그인하는 방식은 기술적으로 문제가 적음
  • 동시 다중 세션보다는 안전한 방식
  • 핵심은 기술적 방식이 아니라 회사 정책 준수 여부
  • 가장 확실한 방법: 팀 관리자에게 직접 확인

2. Claude Code 메모리 시스템

Claude Code는 파일 기반의 영구 메모리 시스템을 제공하며, 4가지 유형으로 구분된다.

메모리 유형 요약

유형저장 내용예시
User (사용자)역할, 목표, 지식 수준“시니어 백엔드 개발자”, “React 초보”
Feedback (피드백)작업 방식 지침 (하지 말 것 / 계속할 것)“테스트에서 DB 모킹 금지”, “응답 끝 요약 금지”
Project (프로젝트)진행 중인 작업, 목표, 버그 등 코드 외 맥락“3/5부터 머지 동결”, “auth 교체는 법무 요구”
Reference (참조)외부 시스템 정보 위치“버그 추적은 Linear INGEST 프로젝트”

저장 위치

~/.claude/projects/<프로젝트>/memory/
├── MEMORY.md          ← 인덱스 (목차 역할)
├── user_role.md       ← 개별 메모리 파일
├── feedback_testing.md
└── ...

3. CLAUDE.md 설정 파일 스코프

Claude Code는 4단계 스코프의 CLAUDE.md 파일을 지원한다.

스코프 비교

구분관리정책 (Managed)사용자 (User)프로젝트 (Project)로컬 (Local)
경로C:\Program Files\ClaudeCode\CLAUDE.md~/.claude/CLAUDE.md./CLAUDE.md./CLAUDE.local.md
관리 주체IT/관리자본인팀 전체본인
Git 커밋N/AXOX
적용 범위머신 전체내 모든 프로젝트이 프로젝트 팀원 전체이 프로젝트에서 나만
무시 가능불가가능가능가능

로드 순서

관리정책 → 사용자 → 프로젝트 → 로컬
(넓은 범위)                (좁은 범위)
  • 파일들은 서로 덮어쓰지 않고 순서대로 이어붙여짐
  • 나중에 로드된 것이 더 구체적인 지침으로 취급
  • 관리정책은 개인이 끌 수 없음 (회사 강제)

각 스코프의 용도

  • 관리정책: 회사 보안 정책, 컴플라이언스 규칙
  • 사용자: 개인 코딩 스타일, 선호 도구 설정
  • 프로젝트: 팀 코딩 표준, 빌드 명령어, 아키텍처 설명
  • 로컬: 개인 샌드박스 URL, 테스트 데이터 등

사용자(User) vs 로컬(Local) 차이

둘 다 “나만의 설정”이지만 적용 범위가 다르다.

 사용자 (User)로컬 (Local)
경로~/.claude/CLAUDE.md./CLAUDE.local.md
적용 범위모든 프로젝트이 프로젝트에서만
예시“항상 한국어로 답변해줘”“이 프로젝트 로컬 DB는 localhost:5433”
  • 사용자 = 글로벌 개인 설정 (어떤 프로젝트를 열든 적용)
  • 로컬 = 프로젝트별 개인 설정 (이 레포에서만 적용)

4. 메모리 & CLAUDE.md 컨텍스트 배치

세션 시작 시 로드 순서

 1. 시스템 프롬프트 (숨김, ~4200 토큰)
 2. Auto Memory (MEMORY.md 첫 200줄 / 25KB)
 3. 환경 정보 (OS, 쉘, 경로 등 - 숨김)
 4. MCP 도구 이름
 5. 관리정책 CLAUDE.md
 6. 사용자 CLAUDE.md (~/.claude/CLAUDE.md)
 7. 사용자 규칙 (~/.claude/rules/*.md)
 8. 프로젝트 CLAUDE.md (루트 → 작업 디렉토리 순)
 9. 로컬 CLAUDE.local.md
10. 조건 없는 .claude/rules/ 규칙

즉시 로드 vs 지연 로드

즉시 로드 (세션 시작)지연 로드 (필요할 때)
루트/상위 CLAUDE.md 전부하위 디렉토리 CLAUDE.md
MEMORY.md (첫 200줄)메모리 토픽 파일 (개별 .md)
경로 조건 없는 rules경로 조건 있는 rules (paths: 프론트매터)

메모리 파일 구조

~/.claude/projects/<프로젝트>/memory/
├── MEMORY.md              ← 인덱스 (첫 200줄만 시작 시 로드)
├── user_role.md           ← 필요할 때 로드
├── feedback_testing.md    ← 필요할 때 로드
└── project_deadline.md    ← 필요할 때 로드
  • MEMORY.md: 목차 역할. 세션 시작 시 자동 로드 (200줄 / 25KB 제한)
  • 개별 토픽 파일: Claude가 필요할 때 읽어서 로드 (지연 로드)
  • 하나의 git 레포 당 하나의 메모리 디렉토리 공유

.claude/rules/ 경로 조건부 규칙

---
paths:
  - "src/api/**/*.ts"
  - "src/components/*.tsx"
---
# API 개발 규칙
- 모든 API 엔드포인트에 입력 검증 포함할 것
  • paths: 프론트매터가 없으면 → 세션 시작 시 항상 로드
  • paths: 프론트매터가 있으면 → 해당 파일 패턴을 읽을 때만 로드
  • 컨텍스트 절약에 유리

5. 자동 메모리 (Auto Memory) 상세

개념

  • 세션이 끝나도 사라지지 않는 파일 기반 영구 기억 시스템
  • 사용자가 매번 다시 설명하지 않아도, 중요한 사실을 파일로 저장 → 다음 세션에서 다시 로드
  • 저장 위치: ~/.claude/projects/<프로젝트>/memory/

구조

~/.claude/projects/<프로젝트>/memory/
├── MEMORY.md              ← 인덱스(목차). 세션 시작 시 자동 로드
├── user-role.md           ← 개별 메모리 (필요할 때 지연 로드)
├── feedback-testing.md
└── ...
  • MEMORY.md = 한 줄 요약 인덱스. 세션 시작 시 컨텍스트에 자동 주입 (첫 200줄 / 25KB 제한)
  • 개별 .md 파일 = 사실 1개당 파일 1개. 필요할 때만 읽어들임 (지연 로드)

메모리 파일 형식 (프론트매터)

---
name: <kebab-case-슬러그>
description: <한 줄 요약 — 관련성 판단에 사용>
metadata:
  type: user | feedback | project | reference
---

<사실 내용. feedback/project는 **Why:**  **How to apply:** 추가>
<관련 메모리는 [[다른-메모리-이름]] 으로 링크>

메모리 4가지 유형

| 유형 | 저장 내용 | |——|———–| | user | 사용자가 누구인지 (역할, 전문성, 선호) | | feedback | 작업 방식 지침 (왜 그런지 이유 포함) | | project | 진행 중 작업/목표/제약 (코드·git에서 알 수 없는 것) | | reference | 외부 자원 포인터 (URL, 대시보드, 티켓) |

동작 방식 (Recall)

  • 새 세션 시작 시 MEMORY.md 인덱스가 자동으로 컨텍스트에 주입됨
  • 작업과 관련 있는 메모리는 <system-reminder> 블록 안에 배경 정보로 다시 나타남
    • ⚠️ 이건 사용자 지시가 아니라 “참고용 배경”이며, 작성 당시 시점의 정보
    • 파일명·함수명을 언급하면 아직 존재하는지 확인 후 사용

운영 원칙 (Best Practice)

  • 한 파일 = 한 사실 (잘게 쪼갬)
  • 저장 전 중복 확인 → 있으면 기존 파일 수정, 새로 만들지 않음
  • 틀린 것으로 판명되면 삭제
  • 저장하지 말 것: 코드 구조, 과거 수정 내역, git 히스토리, CLAUDE.md에 이미 있는 것, 이번 대화에서만 의미 있는 것
  • 저장 후 반드시 MEMORY.md에 한 줄 포인터 추가 (- [제목](파일.md) — 짧은 설명)

자동 메모리 vs CLAUDE.md 차이

| | 자동 메모리 | CLAUDE.md | |—|—|—| | 생성 주체 | Claude가 자동 저장 | 사람이 직접 작성 | | 단위 | 사실 1개당 파일 1개 | 프로젝트 지침 묶음 | | 로드 | MEMORY.md 인덱스 + 지연 로드 | 세션 시작 시 전체 로드 | | 용도 | 학습된 맥락·선호 누적 | 명시적 규칙·표준 |


6. CLAUDE.md 와 규칙(Rules) — 메모리와의 관계

Claude Code가 맥락을 유지하는 3가지 계층

| 구분 | 무엇 | 생성 주체 | |——|——|———–| | 자동 메모리 | memory/ 폴더의 사실 파일들 | Claude가 자동 저장 | | CLAUDE.md | 프로젝트/개인 지침 문서 | 사람이 작성 | | 규칙(Rules) | .claude/rules/ 의 조건부 지침 | 사람이 작성 |

CLAUDE.md 란?

세션 시작 시 Claude Code가 자동으로 읽는 지침 문서. “이 프로젝트는 이렇게 작업해라”를 적어둠.

  • 적는 내용: 빌드/테스트 명령어, 코딩 컨벤션, 아키텍처, 금지 사항
  • 4단계 스코프(관리정책 → 사용자 → 프로젝트 → 로컬)로 이어붙여 로드 (상세는 3번 섹션 참조)

규칙(Rules) 란?

.claude/rules/ 폴더의 조건부 지침 파일. CLAUDE.md와 유사하나 특정 파일 작업 시에만 로드 가능 → 컨텍스트 절약.

---
paths:
  - "src/api/**/*.ts"
---
# API 개발 규칙
- 모든 API 엔드포인트에 입력 검증 포함할 것

| paths: 유무 | 로드 시점 | |—|—| | 없음 | 세션 시작 시 항상 로드 | | 있음 | 해당 패턴 파일을 읽을 때만 로드 |

셋의 차이 한눈에

| | 자동 메모리 | CLAUDE.md | 규칙(Rules) | |—|—|—|—| | 누가 작성 | Claude 자동 | 사람 | 사람 | | 단위 | 사실 1개 = 파일 1개 | 지침 묶음 | 조건부 지침 묶음 | | 로드 조건 | 인덱스 + 지연 로드 | 항상 (스코프별) | paths 조건부 | | 용도 | 학습된 맥락·선호 누적 | 프로젝트 표준 | 특정 영역 전용 규칙 |

⚠️ 용어 주의: 메모리의 4가지 유형(type) (user/feedback/project/reference) 은 메모리 파일 내부 분류이고, 규칙(Rules) 은 별개의 .claude/rules/ 시스템임.


7. Claude Hooks (훅)

개념

Claude Code의 특정 시점에 하버스(harness)가 자동 실행하는 사용자 정의 명령(스크립트).

  • 메모리·CLAUDE.md = “Claude에게 부탁” (따를 수도 안 따를 수도)
  • 훅 = 하버스가 강제 실행 → “항상/매번 X” 같은 자동화는 훅으로만 확실히 보장
  • “from now on when X / 매번 X 할 때 / X 전후로” 자동 동작 ⇒ 메모리 아닌 으로 구현

주요 훅 이벤트(시점)

| 훅 이벤트 | 실행 시점 | 활용 예 | |———–|———–|———| | PreToolUse | 도구 실행 직전 | 위험 명령 차단, 입력 검증 | | PostToolUse | 도구 실행 직후 | 파일 수정 후 자동 포맷팅/린트 | | UserPromptSubmit | 프롬프트 제출 시 | 컨텍스트 주입, 차단 | | Stop | Claude 응답 종료 시 | 알림, 테스트 자동 실행 | | SubagentStop | 서브에이전트 종료 시 | 후처리 | | Notification | 알림 발생 시 | 데스크톱 알림 연동 | | SessionStart | 세션 시작 시 | 환경 정보 로드 | | PreCompact | 컨텍스트 압축 직전 | 상태 저장 |

설정 (settings.json)

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "prettier --write \"$CLAUDE_FILE_PATHS\"" }
        ]
      }
    ]
  }
}
  • matcher: 반응할 도구 (예: Edit, Write, Bash)
  • command: 실행할 셸 명령
  • 훅은 JSON을 stdin으로 받고 종료 코드로 제어:
    • 0 = 정상 통과
    • 2 = 차단(blocking) — 도구 실행 막고 Claude에게 피드백 전달
    • 그 외 = 비차단 에러

대표 활용 사례

  • 자동 포맷팅: 수정 후 prettier/gofmt/black 실행
  • 위험 명령 차단: rm -rf, 프로덕션 배포 등 PreToolUse에서 거부
  • 자동 테스트: Stop 훅에서 테스트 실행
  • 데스크톱 알림 / 로깅·감사: Bash 명령 기록

⚠️ 훅은 임의 명령을 실행하므로 보안 영향이 큼 → 신뢰 가능한 명령만 등록. /update-config 스킬로 안전하게 설정 가능.


8. Claude Code Hooks 생명주기 (Lifecycle)

📊 시각 다이어그램(Artifact): https://claude.ai/code/artifact/4585e8b0-119c-48e7-917b-42d26154ffb4 출처: 공식 문서 https://code.claude.com/docs/ko/hooks (공식 SVG 도식 2종 기반)

한눈에 보는 구조

Claude Code는 세션 ⊃ 턴 루프 ⊃ 에이전트 도구 루프로 중첩된 상태 기계. 이벤트는 두 종류로 나뉜다:

  • 순차 흐름 이벤트 — 정해진 순서대로 흐름 (아래 도식)
  • 수시 발생(비동기) 이벤트 — 사건이 일어나는 즉시 발화 (별도 표)

각 전환점마다 훅이 발화하며, 일부는 흐름을 차단(exit 2)할 수 있다(⛔).

A. 순차 흐름 도식

Setup (--init 류 실행 시만)
    ↓
SessionStart
    ↓
┌─── Per-Turn 루프 (사용자 입력마다) ──────────────────┐
│  UserPromptSubmit → UserPromptExpansion              │
│      ↓                                               │
│  ┌─── Agentic 도구 루프 ──────────────────────────┐  │
│  │  PreToolUse → PermissionRequest                │  │
│  │      ↓                                         │  │
│  │  도구 실행  (MCP면 Elicitation/Result 중첩)     │  │
│  │      ↓                                         │  │
│  │  PostToolUse | PostToolUseFailure              │  │
│  │      ↓                                         │  │
│  │  SubagentStart/Stop · TaskCreated/Completed    │  │
│  │      ↓                                         │  │
│  │  PostToolBatch                                 │  │
│  │      ↓  [다음 모델 호출] ─ 도구 더 필요 시 반복   │  │
│  └────────────────────────────────────────────────┘  │
│      ↓                                               │
│  Stop | StopFailure · TeammateIdle                   │
│      ↓  (다음 프롬프트 → 위로 반복)                   │
└──────────────────────────────────────────────────────┘
    ↓
PreCompact → PostCompact (컨텍스트 길어지면)
    ↓
SessionEnd

B. 순차 흐름 훅 요약 (발생 순서 / ⛔=차단 가능)

| 단계 | 훅 | 발화 시점 | 차단 | |——|—–|———–|:—-:| | 세션 | SessionStart / Setup | 세션 시작·재개 / 초기화 | — | | 턴 | UserPromptSubmit | 프롬프트 제출 | ⛔ | | 턴 | UserPromptExpansion | 커맨드 확장 시 | ⛔ | | 도구 | PreToolUse | 도구 실행 직전 | ⛔ | | 도구 | PermissionRequest | 권한 대화 발생 | ⛔ | | 도구 | PostToolUse | 도구 성공 직후 | ⛔ | | 도구 | PostToolUseFailure | 도구 실패 직후 | — | | 도구 | PostToolBatch | 병렬 도구 완료 후 | ⛔ | | 서브 | SubagentStart / SubagentStop | 서브에이전트 생성/종료 | Stop만 ⛔ | | 서브 | TaskCreated / TaskCompleted | 작업 생성/완료 | — | | 턴 끝 | Stop / StopFailure | 응답 종료 | Stop만 ⛔ | | 턴 끝 | TeammateIdle | 팀 동료 유휴 전환 직전 | ⛔ | | 컨텍스트 | PreCompact / PostCompact | 압축 직전/직후 | Pre만 ⛔ | | 세션 | SessionEnd | 세션 종료 | — |

C. 수시 발생(비동기) 이벤트

정해진 단계가 아니라 해당 사건 발생 즉시 발화. 대부분 비차단. | 훅 | 발화 시점 | 차단 | |—–|———–|:—-:| | Notification | 알림 발생 | — | | MessageDisplay | 메시지 화면 표시 (표시 전용) | — | | InstructionsLoaded | CLAUDE.md·rules 로드 | — | | ConfigChange | 설정 파일 변경 | 대체로 예 | | CwdChanged | 작업 디렉토리(cd) 변경 | — | | FileChanged | 감시 파일 변경 | — | | WorktreeCreate / WorktreeRemove | 워크트리 생성/제거 | Create만 ⛔ |

D. 종료 코드(Exit Code) 동작

| 코드 | 의미 | 동작 | |——|——|——| | 0 | 성공 | JSON 있으면 결정으로 파싱, 없으면 통과 | | 2 | 차단 에러 | stderr를 Claude에 전달 + 동작 차단 | | 기타 | 비차단 에러 | stderr 첫 줄만 표시, 실행 계속 (exit 1 포함) |

💡 7번 섹션(Hooks)과 연결됨. 훅 = 이 생명주기의 각 지점에 붙이는 자동 명령. 공식 페이지에는 hooks-lifecycle.svg(전체 흐름) + hook-resolution.svg(매칭 해결) 두 그림이 있음.


9. MCP 도구 훅 (MCP Tool Hooks)

⚠️ “MCP 도구 훅”은 방향이 다른 두 개념 + MCP 전용 이벤트로 나뉨. 출처: https://code.claude.com/docs/ko/hooks (MCP 도구 Hook 필드 / MCP 도구 일치)

① MCP 도구 호출을 가로채는 훅 (matcher로 매칭)

PreToolUse/PostToolUse 등에서 MCP 도구가 호출될 때 반응. 핵심은 이름 규칙.

이름 규칙: mcp__<서버>__<도구> (예: mcp__memory__create_entities)

Matcher 패턴매칭 대상
mcp__memory__.*memory 서버의 모든 도구
mcp__.*__write.*모든 서버의 “write~” 도구
mcp__memory❌ 동작 안 함 — .* 없으면 정확한 문자열 취급

서버 전체 매칭엔 .* 접미사 필수.

{
  "hooks": {
    "PreToolUse": [
      { "matcher": "mcp__memory__.*",
        "hooks": [{ "type": "command",
          "command": "echo 'Memory op' >> ~/mcp-operations.log" }] },
      { "matcher": "mcp__.*__write.*",
        "hooks": [{ "type": "command",
          "command": "/home/user/scripts/validate-mcp-write.py" }] }
    ]
  }
}

② MCP 도구를 훅 핸들러로 사용 (type: "mcp_tool")

훅 동작으로 셸/HTTP 대신 MCP 도구를 직접 호출.

필드필수설명
server연결된 MCP 서버 이름 (이미 연결돼 있어야 함, 훅이 OAuth/연결 트리거 안 함)
tool그 서버에서 호출할 도구 이름
input인수. 문자열은 ${path} 치환 지원 (예: "${tool_input.file_path}")
{
  "hooks": {
    "PostToolUse": [
      { "matcher": "Write|Edit",
        "hooks": [{
          "type": "mcp_tool",
          "server": "my_server",
          "tool": "security_scan",
          "input": { "file_path": "${tool_input.file_path}" }
        }] }
    ]
  }
}
  • 도구 출력이 유효 JSON이면 결정(decision)으로 파싱, 아니면 텍스트 표시
  • 서버 미연결 / isError:true비차단 에러, 실행 계속
  • SessionStart/Setup은 MCP 연결 에 발화 → 첫 실행 “미연결” 에러는 정상

③ Elicitation / ElicitationResult (MCP 전용 이벤트)

MCP 서버가 도구 실행 중 사용자 입력을 요청할 때 발화. (도구 실행에 중첩)

이벤트발화 시점용도
Elicitation서버가 입력 요청 시폼 자동 수락/거부, 값 채우기 (exit 2 거부)
ElicitationResult사용자 응답 후, 서버 전송 직전응답 수정·거부
  • matcher = MCP 서버 이름으로 필터 (예: memory, filesystem)
  • 결정 제어: action: "accept | decline | cancel", content로 폼 값 지정
{ "hookSpecificOutput": {
    "hookEventName": "Elicitation",
    "action": "accept",
    "content": { "form_field_values": "..." } } }

🔑 핵심 구분: ① = “MCP 도구가 불릴 때 반응”, ② = “훅이 MCP 도구를 부름” → 방향 반대.


10. 서브에이전트 (SubAgent)

출처: https://code.claude.com/docs/en/sub-agents

개념

특정 작업을 전담하는 분리된 AI 도우미. 자기만의 독립 컨텍스트 창에서 일하고 결과 요약만 메인 대화로 반환. (메인=팀장 / 서브=전문 팀원, 한 장 요약만 보고)

핵심 이점

| 이점 | 설명 | |——|——| | 컨텍스트 보존 | 탐색·로그·파일 내용이 메인 대화를 어지럽히지 않음 | | 제약 강제 | 사용 도구 제한 (예: 읽기 전용) | | 재사용 | 같은 작업자를 프로젝트마다 재사용 | | 전문화 | 도메인 전용 시스템 프롬프트 | | 비용 절감 | 가벼운 작업은 Haiku 등 저렴·빠른 모델로 |

내장 서브에이전트

| 에이전트 | 모델 | 도구 | 용도 | |———-|——|——|——| | Explore | Haiku | 읽기 전용 | 코드 검색·탐색 (CLAUDE.md·git 건너뜀→빠름) | | Plan | 메인 상속 | 읽기 전용 | 플랜 모드 사전 조사 | | general-purpose | 메인 상속 | 전체 | 탐색+수정 복합 작업 | | statusline-setup | Sonnet | — | /statusline 설정 시 | | claude-code-guide | Haiku | — | Claude Code 기능 질문 시 |

파일 형식 (YAML 프론트매터 + 본문=시스템 프롬프트)

---
name: code-reviewer
description: Reviews code for quality and best practices
tools: Read, Glob, Grep
model: sonnet
---
You are a code reviewer. When invoked, analyze the code and provide
specific, actionable feedback on quality, security, and best practices.

저장 위치(스코프) — 우선순위 순

| 위치 | 범위 | 우선순위 | |——|——|:——–:| | 관리 설정(Managed) | 조직 전체 | 1 (최고) | | --agents CLI 플래그 | 현재 세션 | 2 | | .claude/agents/ | 현재 프로젝트(git 커밋 권장) | 3 | | ~/.claude/agents/ | 내 모든 프로젝트 | 4 | | 플러그인 agents/ | 플러그인 활성 위치 | 5 (최저) |

정체성은 파일명 아닌 name 필드로 결정. 디스크에서 직접 추가/수정 시 세션 재시작 필요(/agents로 만들면 즉시 적용).

주요 프론트매터 필드 (필수: name, description)

| 필드 | 설명 | |——|——| | name | 소문자+하이픈. 훅의 agent_type로 전달 | | description | 언제 위임할지 — 자동 위임 판단 근거 | | tools | 허용 도구(화이트리스트). 생략 시 전체 상속 | | disallowedTools | 차단 도구(블랙리스트). 둘 다 있으면 disallowed 먼저 | | model | sonnet/opus/haiku/fable/풀ID/inherit(기본) | | permissionMode | default/acceptEdits/auto/dontAsk/bypassPermissions/plan | | skills | 시작 시 주입할 스킬 (전체 내용 주입) | | mcpServers | 이 서브에이전트 전용 MCP 서버 | | hooks | 이 서브에이전트 활성 중에만 도는 훅 (Stop→SubagentStop 변환) | | memory | user/project/local — 세션 넘는 영구 기억 | | effort | low~max 추론 강도 | | isolation | worktree → 격리된 git 워크트리 복사본 | | background | true → 항상 백그라운드 | | color | 표시 색상 |

모델 해석 순서: CLAUDE_CODE_SUBAGENT_MODEL 환경변수 > 호출별 model > 프론트매터 model > 메인 모델. 도구 패턴: mcp__<server> / mcp__<server>__* 로 서버 단위 허용·차단 가능. 일부 도구는 서브에이전트에서 불가: AskUserQuestion, EnterPlanMode, ScheduleWakeup 등.

호출 방법 (강제력 순)

| 방법 | 강제력 | |——|——–| | 자연어 (“code-reviewer로 검토해줘”) | Claude가 위임 여부 판단 | | @-멘션 (@"code-reviewer (agent)") | 해당 서브에이전트 확정 실행 | | --agent <name> / agent 설정 | 세션 전체가 그 에이전트로 동작 |

description에 “use proactively” 넣으면 자동 위임 유도.

컨텍스트 격리 (가장 중요)

  • 빈 컨텍스트로 시작 → 대화 히스토리·읽은 파일·호출 스킬 안 보임
  • Claude가 쓴 위임 메시지(작업 요약)만 받고 출발
  • 받는 것: 자기 시스템 프롬프트 + CLAUDE.md/메모리 + git 상태 + 프리로드 스킬
    • 단, Explore·Plan만 CLAUDE.md·git 건너뜀
  • 끝나면 요약만 메인 복귀 → 메인 컨텍스트 깨끗
  • 서브에이전트 트랜스크립트는 별도 파일에 저장, 메인 압축과 무관하게 보존(기본 30일)

전경/배경 & Fork & 중첩

  • 전경: 메인 막고 실행, 권한 프롬프트 전달
  • 배경: 동시 실행, 기존 권한으로만 동작(프롬프트는 자동 거부). Ctrl+B로 전환
  • Fork: 일반 서브와 달리 전체 대화 상속(배경 설명 불필요), 도구 호출은 격리·결과만 복귀. /fork <지시>
  • 중첩(v2.1.172+): 서브에이전트가 자기 서브에이전트 생성 가능. 최대 깊이 5(고정)

서브에이전트 vs 메인 vs 스킬

  • 메인 대화: 잦은 왕복·여러 단계 맥락 공유·빠른 수정·지연 민감
  • 서브에이전트: 장황한 출력·도구 제한 필요·자기완결 작업
  • 스킬: 분리 컨텍스트 아닌 메인 대화에서 도는 재사용 프롬프트/워크플로
  • (대화 안 내용 빠른 질문은 /btw — 도구 없이 전체 맥락 보고 답 후 버림)

🔗 생명주기(8번)의 SubagentStart/SubagentStop 훅이 이 서브에이전트 시작/종료에 발화.


11. Rewind & Resume (세션 되감기 / 재개)

출처: code.claude.com/docs/en/checkpointing, /en/sessions 목적이 다름: Rewind = 한 세션 안에서 과거로 되감기 / Resume = 종료한 세션 다시 열기

A. Rewind (체크포인트 되감기) — “로컬 undo”

Claude의 파일 편집 상태를 자동 스냅샷 → 잘못되면 과거 시점으로 복원.

여는 법 | 방법 | 설명 | |——|——| | /rewind | 되감기 메뉴 | | Esc 두 번 | 입력창이 비어 있을 때 메뉴 (글자 있으면 글자 삭제됨) |

메뉴 동작 (보낸 프롬프트 목록에서 지점 선택) | 동작 | 효과 | |——|——| | Restore code and conversation | 코드+대화 모두 되돌림 | | Restore conversation | 대화만 (코드 유지) | | Restore code | 코드만 (대화 유지) | | Summarize from here | 선택 지점 이후 요약 압축 (앞 보존) | | Summarize up to here | 선택 지점 이전 요약 압축 (뒤 보존) | | Never mind | 취소 |

  • 프롬프트 보낼 때마다 체크포인트 생성, 세션 넘어 유지, 기본 30일 정리
  • Restore=상태 되돌림 / Summarize=파일 안 건드리고 대화만 압축(타겟형 /compact)

⚠️ 한계

  • Bash 파일 변경(rm/mv/cp)은 추적 안 됨 — Claude 편집 도구로 한 직접 편집만 추적
  • 외부/다른 세션 수동 변경도 추적 안 됨
  • Git 대체 아님 — 체크포인트=로컬 undo, Git=영구 이력

B. Resume (세션 재개)

종료//clear한 이전 대화를 다시 열어 이어가기. | 명령 | 동작 | |——|——| | claude --continue (-c) | 현재 디렉토리 가장 최근 세션 재개 | | claude --resume (-r) | 세션 선택기 열기 | | claude --resume <name> | 이름으로 바로 재개 | | claude --resume <session-id> | ID로 재개 (-p 헤드리스도 가능) | | claude --from-pr <번호> | PR 연결 세션 재개 | | /resume | 세션 안에서 다른 대화로 전환 |

선택기 단축키: Enter재개 · Space미리보기 · Ctrl+R이름변경 · /검색(PR URL 가능) · Ctrl+A모든프로젝트 · Ctrl+W모든워크트리 · Ctrl+B현재브랜치

이름 짓기: 시작 claude -n <name> / 중간 /rename <name> / 선택기 Ctrl+R

C. Branch (분기) — 원본 두고 다른 길 실험

  • 세션 안: /branch <name>
  • CLI: claude --continue --fork-session
  • 원본 보존, 복사본으로 전환. “이어가되 갈라서 실험”

셋 비교

| | 범위 | 용도 | |—|——|——| | Rewind | 세션 내부 | 과거로 코드/대화 undo | | Resume | 세션 | 종료한 대화 다시 열기 | | Branch | 세션 복제 | 원본 두고 다른 접근 |

세션 저장 위치

~/.claude/projects/<project>/<session-id>.jsonl (기본 30일, cleanupPeriodDays로 조정)

💡 handover.md는 “요약” 인수인계 → 내용 압축됨. --resume원본 트랜스크립트 그대로 이어감 → 정확 복원엔 resume.


12. 사전정의 없이 단일 서브에이전트 만들기 (모델 지정)

.md 정의 파일 없이 그 자리에서 1회성 서브에이전트를 띄우고 모델 지정하는 법.

A. 인세션 자연어 (가장 간단, 추천)

내장 general-purpose 에이전트를 즉석 실행. 모델은 호출 시 지정.

haiku 모델로 서브에이전트 하나 띄워서 src의 TODO 주석 다 찾아줘
opus 서브에이전트로 이 버그 원인 분석해줘
  • Claude가 Agent 도구로 general-purpose를 그 모델로 1회 실행. 파일 불필요.
  • 모델은 호출별(per-invocation) → 같은 에이전트라도 매번 다른 모델 가능.

B. --agents 플래그 (세션 한정, 디스크 저장 X)

실행 시 JSON으로 정의 → 그 세션에서만 존재. (PowerShell)

claude --agents @'
{
  "quick-reviewer": {
    "description": "Reviews code changes quickly",
    "prompt": "You are a code reviewer. Focus on bugs and security.",
    "tools": ["Read", "Grep", "Glob"],
    "model": "haiku"
  }
}
'@
  • model: sonnet/opus/haiku/fable 또는 풀ID(claude-opus-4-8)
  • prompt=시스템 프롬프트, tools=도구 제한(선택). 여러 개 동시 정의 가능.

C. 환경변수로 모델 강제

$env:CLAUDE_CODE_SUBAGENT_MODEL = "haiku"

모델 해석 우선순위

1. CLAUDE_CODE_SUBAGENT_MODEL 환경변수  (최우선)
2. 호출별 model 파라미터
3. 정의의 model 프론트매터
4. 메인 대화 모델                        (기본)

상황별 선택

| 상황 | 방법 | |——|——| | 지금 한 번만 / 가장 간단 | A. 자연어 | | 세션 동안 재사용 + 커스텀 | B. --agents JSON | | 모든 서브에이전트 모델 통일 | C. 환경변수 | | 여러 프로젝트 영구 재사용 | 사전정의 .md (10번 섹션) |


13. 서브에이전트 vs Agent Teams

📊 비교 다이어그램(Artifact): https://claude.ai/code/artifact/dca49fe6-d470-4c12-940c-db579bef2ad6 출처: code.claude.com/docs/en/agent-teams, /en/sub-agents

핵심 차이 한 줄

둘 다 병렬화하지만 — 서브에이전트=메인에만 보고(허브앤스포크), Agent Teams=팀원끼리 직접 소통 + 공유 작업목록(메시).

구조

[서브에이전트]                      [Agent Teams]
      Main(Opus)                         Lead(main)
     ╱   │   ╲                              │
   Sub  Sub  Sub      vs           ┌─ 공유 작업목록 + 메일박스 ─┐
   (결과만 메인에 보고)            팀원A ↔ 팀원B ↔ 팀원C
   서로 대화 X                     (서로 직접 메시지·반박, 스스로 일 claim)

항목별 비교

| 항목 | 서브에이전트 | Agent Teams | |——|————–|————-| | 컨텍스트 | 독립 창, 결과는 호출자로 반환 | 독립 창, 완전 독립 | | 소통 | 메인에만 보고 | 팀원끼리 직접 메시지 | | 조율 | 메인이 모든 작업 관리 | 공유 작업목록 + 자체 조율 | | 적합 | 결과만 중요한 집중 작업 | 토론·협업 필요한 복합 작업 | | 토큰 비용 | 낮음 (요약 반환) | 높음 (각자 별도 인스턴스) | | 활성화 | 기본 켜짐 | 실험적 — env var 필요 | | 중첩 | 가능 (최대 깊이 5) | 불가 (팀원은 팀 못 만듦) | | 세션 재개 | 가능 | /resume·/rewind로 인프로세스 팀원 복원 안 됨 |

Agent Teams 구성 요소

| 구성 | 역할 | |——|——| | Team Lead | 팀원 띄우고 조율하는 메인 세션 | | Teammates | 각자 작업하는 별도 Claude Code 인스턴스 | | Task List | 팀원이 claim·완료하는 공유 작업 목록 | | Mailbox | 에이전트 간 메시징 시스템 |

활성화 (실험적, 기본 꺼짐)

// settings.json
{ "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" } }
  • 켜면 자연어로 팀 요청: “팀원 3명 띄워서 UX·아키텍처·반대역할로 탐색해줘”
  • Lead 터미널 하단 패널에서 팀원 선택(↑↓)·열기(Enter)·중단(Esc)
  • 팀원 소통: SendMessage로 이름 지정해 직접 메시지 (자동 전달, 폴링 불필요)
  • 디스플레이 모드: in-process(기본, 모든 터미널) / split-pane(tmux·iTerm2 필요)
  • 저장: ~/.claude/teams/{team}/config.json, ~/.claude/tasks/{team}/

언제 무엇을

  • 서브에이전트: 빠른 일꾼이 결과만 보고. 코드 탐색·테스트·검수·장황한 출력 격리. 순차/같은파일/의존성 많은 일.
  • Agent Teams: 팀원이 발견 공유·서로 반박·자체 조율. 병렬 코드리뷰(보안/성능/테스트), 경쟁 가설 디버깅, 프론트·백·테스트 동시.
  • 권장 팀 크기 3~5명, 팀원당 작업 5~6개.

⚠️ Windows 주의

  • in-process 모드는 모든 터미널 OK. split-pane은 tmux/iTerm2 필요 → Windows Terminal·VS Code 통합터미널 미지원.
  • 즉 Windows에선 in-process로만 쓰는 게 현실적 (OMC의 /team도 tmux 의존 — 9번 OMC 노트 주의점과 동일 맥락).

🔗 서브에이전트 정의(tools/model)는 팀원으로도 재사용 가능 (정의 본문이 팀원 시스템 프롬프트에 추가됨). 단 정의의 skills/mcpServers는 팀원으론 적용 안 됨.


14. Agent Teams 활성화 & settings.json

내 환경: 이미 활성화됨 (~/.claude/settings.json에 OMC가 넣어둠). 추가 작업 불필요.

활성화 방법

방법 1 — settings.json (권장):

{ "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" } }

방법 2 — 셸 환경변수 (PowerShell, 일시적):

$env:CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1"

설정은 세션 시작 시 로드 → 바꾸면 재시작해야 반영.

settings.json 경로 (정확한 이름)

⚠️ ./claude/setting.json(X) → .claude/settings.json(O). 점으로 시작 + settings(복수).

파일범위비고
~/.claude/settings.json유저 전역 (모든 프로젝트)내 AgentTeams 설정 여기 ✅
.claude/settings.json프로젝트 공유git 커밋 (팀원 공유)
.claude/settings.local.json프로젝트 나만git 제외 (내 건 permissions만)
관리 설정(Managed)조직 강제못 끔

~/.claude/settings.json 현재 상태 (요약)

  • enabledPlugins: oh-my-claudecode@omc 활성
  • env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: “1” ← Agent Teams 켜짐
  • theme: dark-daltonized, statusLine: OMC HUD
  • extraKnownMarketplaces: omc 마켓플레이스 등록

쓰는 법 (이미 켜진 상태)

팀원 3명 띄워서 이 PR을 보안/성능/테스트 관점으로 각각 리뷰해줘
  • Windows → in-process 모드로 동작 (split-pane은 tmux 필요, 13번 주의점)
  • teammateMode 변경: ~/.claude/settings.json"teammateMode" (“in-process”/”auto”/”tmux”)

15. Dynamic Workflow (동적 워크플로)

출처: claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code

개념

Claude가 작업에 맞춰 그 자리에서 직접 작성하는 오케스트레이션 하네스(harness). 고정 절차가 아니라, 짧은 JavaScript 프로그램을 즉석에서 짜서 여러 서브에이전트를 조율한다. (Opus 4.8부터 Claude가 맞춤 하네스를 직접 작성할 만큼 똑똑해진 게 전제)

단일 에이전트의 3가지 실패 → 이걸 해결

| 문제 | 설명 | |——|——| | Agentic laziness | 일부만 하고 “다 했다”며 조기 종료 | | Self-preferential bias | 자기 결과를 대안보다 편애 | | Goal drift | 턴 길어지며 원래 목표에서 이탈 |

→ 작업을 잘게 쪼개 독립 컨텍스트 서브에이전트에 맡기고, 적대적 검증을 끼워 해결.

빌딩 블록 (JS 함수)

  • agent(prompt, opts) — 서브에이전트 1개 실행 (model·schema 지정)
  • parallel([...]) — 동시 실행 (배리어: 전부 끝날 때까지 대기)
  • pipeline(items, stage1, stage2...) — 항목별 다단계 (단계 간 배리어 없음)
  • phase(title) — 진행 단계 구분
  • schema — 구조화 출력 강제 (검증된 객체 반환)

6가지 조합 패턴

| 패턴 | 용도 | |——|——| | Classify-and-act | 유형 분류 후 분기 | | Fan-out-and-synthesize | 잘게 나눠 병렬 → 결과 종합 | | Adversarial verification | 독립 에이전트가 결과 반박·검증 | | Generate-and-filter | 후보 다수 생성 → 품질 필터 | | Tournament | 후보끼리 쌍대결로 최선 선발 | | Loop-until-done | 멈춤 조건까지 계속 생성 |

호출 / 활성화

  • 직접 요청: “워크플로 써서 ~해줘”
  • 트리거 키워드 ultracode: 워크플로 생성 보장
  • /loop 연동: 반복 작업(트리아지·리서치·검증) 주기 실행
  • /goal 연동: 완료 조건 지정

⚠️ 비용·규모

  • 토큰 많이 씀 → 복잡·고가치 작업에 적합. 토큰 예산 지정 가능(“use 10k tokens”)
  • 한 번에 수백 개 에이전트까지 확장

💡 관계: 서브에이전트(10번)=일꾼, Agent Teams(13번)=서로 대화하는 팀, dynamic workflow=일꾼들을 JS 코드로 결정론적으로 조율하는 지휘 로직. 제어 흐름(루프·조건·팬아웃)을 모델 즉흥이 아니라 코드로 확정하는 게 차별점.


16. ultracode & deep-research

출처: claude.com/blog/introducing-dynamic-workflows-in-claude-code, /a-harness-for-every-task…

ultracode — “최대 출력” 모드

켜면 두 가지가 동시에:

  1. effort(추론 강도) = xhigh
  2. Claude가 언제 dynamic workflow 쓸지 자동 판단 (매번 지시 불필요)
    • 한 번에 끝내려 하지 않고, 수십~수백 병렬 서브에이전트 오케스트레이션 스크립트를 즉석 작성 + 결과 전에 스스로 검증
    • 토큰 효율보다 철저함·정확성 우선

켜고 끄기 | 방법 | 효과 | |——|——| | 프롬프트에 ultracode 입력 | 그 턴만 워크플로 사용 보장 | | effort 메뉴(설정)에서 토글 | 세션 내내 기본 적용 |

관계: dynamic workflow(15번)를 “기본값으로 알아서 쓰게” 만드는 스위치 + xhigh. ⚠️ 토큰 많이 씀 → 복잡·고가치 작업용.

deep-research — 딥 리서치 하네스(스킬)

여러 출처를 교차검증해 인용 달린 리포트를 만드는 리서치 전용 스킬. dynamic workflow로 동작.

질문 → 웹검색 팬아웃(병렬) → 출처 fetch → 적대적 검증(교차확인) → 인용 종합 리포트
  • 1차 출처 우선, 확신 수준 명시, 검증된 근거 기반(환각 방지)
  • 웹뿐 아니라 코드베이스 심층 탐색·Slack 상태보고 등에도
  • 호출: /deep-research. (광범위하면 먼저 2~3개 좁히는 질문)

ultracode vs deep-research

| | ultracode | deep-research | |—|———–|—————| | 정체 | 모드(xhigh + 워크플로 자동) | 리서치 전용 스킬 | | 범위 | 모든 작업 | 조사·리포트 작업 | | 결과 | 작업별 맞춤 | 인용 검증 리포트 |

공통: 둘 다 dynamic workflow(병렬 서브에이전트 오케스트레이션) 위에서 동작.


17. 역할별 모델 분담 설정 (실제 구축 내용)

오늘 구축한 워크플로: 문서=Sonnet, 코드=Opus(메인), 검수=Opus 서브에이전트.

만든 파일 (모두 유저 전역 ~/.claude/)

| 파일 | 내용 | |——|——| | ~/.claude/agents/doc-writer.md | 한국어 문서 초안 작성 (model: sonnet) | | ~/.claude/agents/doc-reviewer.md | 문서 검수, 읽기 전용 (model: opus) | | ~/.claude/CLAUDE.md (USER-CUSTOM 블록) | 역할 분담 전역 규칙 (OMC 블록 바깥에 추가) |

동작 흐름

메인(Opus): 조율·코드
   ├─ 문서 초안 → doc-writer(Sonnet)
   ├─ 검수      → doc-reviewer(Opus, 독립 시각)
   └─ 코드      → 메인이 직접

호출: @doc-writer ... / doc-writer로 초안, doc-reviewer로 검수 (체이닝)

설정 스코프 = 어디까지 자동 적용되나 (핵심)

유저 전역(~/.claude/)에 둔 건 PC 어느 폴더에서 claude를 실행하든 자동 적용. 재설정 불필요. | 항목 | 위치 | 새 폴더 자동? | |——|——|:————:| | Agent Teams 플래그 | ~/.claude/settings.json | ✅ | | doc-writer/reviewer | ~/.claude/agents/ | ✅ | | 역할 분담 규칙 | ~/.claude/CLAUDE.md | ✅ | | 메모리 | projects/<폴더>/memory/ | ❌ 프로젝트별 | | 프로젝트 설정·CLAUDE.md | .claude/ (그 폴더) | ❌ 프로젝트별 |

예외: ① 회사 관리설정(Managed)이 막으면 우선 적용됨 ② 프로젝트가 자기 설정으로 덮어쓸 때 ③ 다른 계정/CLAUDE_CONFIG_DIR 변경 시. 주의: 설정·에이전트는 세션 시작 시 로드 → 디스크에서 바꾸면 재시작해야 반영(/agents로 만들면 즉시).

18. 노트 발행(블로그) 시 표 깨짐 주의

증상: 발행된 HTML에서 표 구분선이 em대시로 바뀌어 표가 깨짐 (|------||——|).

  • 원인: 원본 md는 정상(하이픈). Jekyll/kramdown의 스마트 타이포가 하이픈 연속(------)을 em대시(——)로 변환 → 표 인식 실패.
  • 진짜 해결(블로그 쪽): _config.yml에 GFM 입력 지정
    markdown: kramdown
    kramdown:
      input: GFM
    
  • 원본 md는 고칠 필요 없음(기술적으로 정상). 블로그 설정만 수정.

참고: 각 CLAUDE.md 파일은 200줄 이하로 유지하는 것을 권장






© 2021.03. by yacho

Powered by github