심화 12단계 고수의 운영법 — 컨텍스트 · 비용 · 보안

기능을 많이 붙일수록 관리할 것도 늘어납니다 · 오래, 싸게, 안전하게 쓰는 습관 정리

Claude 심화 과정 12/12 · 2026년 9월 기준 · ⏱ 지속 · ★ = 꼭 해볼 것

이번 단계에서 배우는 것
· 컨텍스트(작업 기억)를 보고, 비우고, 아끼는 법 ★
· 작업에 맞는 모델·노력 수준 고르기, 사용량·비용 확인하기
· 권한 모드와 허용·차단 규칙, Cowork 승인 모드
· 보안 점검 항목과 한 달에 한 번 하는 정기 점검 루틴

심화 과정에서 MCP, 스킬, 플러그인, 훅, 서브에이전트, 자동화까지 붙였습니다. 차에 비유하면 튜닝을 잔뜩 한 상태입니다. 이제 필요한 건 계기판 읽는 법과 정기 점검입니다. 기름(사용량)이 얼마나 남았는지, 트렁크(컨텍스트)가 얼마나 찼는지, 문(권한)은 잘 잠겨 있는지 — 이번 글은 그 계기판 사용 설명서입니다.

1 ★ 컨텍스트 관리 — 작업대 정리하기

컨텍스트는 Claude의 작업대입니다. 대화 내용, 읽은 파일, CLAUDE.md, 켜 둔 도구 설명이 모두 이 작업대 위에 올라갑니다. 작업대가 꽉 차면 오래된 것부터 흐릿해지고, 답이 느려지고 사용량도 늘어납니다.

/context
★ 작업대 사용량을 색깔 격자로 보여줍니다. 시스템·도구·메모리 파일·대화가 각각 얼마나 차지하는지 한눈에.
/compact [집중 지시]
지금까지의 대화를 요약해 작업대를 비웁니다. 뒤에 "무엇을 남길지"를 적으면 더 좋습니다.
/clear
작업대를 완전히 비우고 새로 시작. CLAUDE.md는 다시 읽히니 규칙은 유지됩니다.
# 긴 작업 중간에, 필요한 것만 남기고 압축
/compact 결정된 설계와 남은 할 일 목록만 남겨줘. 시행착오 과정은 빼도 돼.

언제 무엇을 쓰나

주제가 바뀔 때
/clear. 블로그 글을 끝내고 스프링 버그를 잡으러 간다면 새 작업대가 낫습니다. 앞의 대화는 방해만 됩니다.
같은 작업이 길어질 때
/compact. 맥락은 이어가되 짐을 줄입니다.
MCP를 많이 켰을 때
Claude Code는 MCP 도구의 이름만 먼저 올려 두고, 실제로 쓸 때 상세 정의를 불러옵니다. 그래도 연결 수가 많으면 /context 로 확인하고 안 쓰는 서버는 정리하세요.
조사·검토가 클 때
서브에이전트로 분리. 각자 자기 작업대에서 일하고 요약만 돌려주니 메인 작업대가 깨끗합니다(9단계).
CLAUDE.md
매번 통째로 올라가는 파일이라 200줄 이내로. 긴 참고 자료는 스킬의 보조 파일로 옮기면 필요할 때만 읽힙니다.

2 모델 · 노력 수준 고르기

모든 일에 가장 큰 모델을 쓰는 건, 편의점 가는데 트럭을 모는 것과 같습니다. 작업에 맞게 바꿔 타세요.

/model opus
설계, 어려운 버그, 여러 파일에 걸친 큰 변경. 가장 똑똑하지만 사용량도 큽니다.
/model sonnet
대부분의 일상 작업. 코드 수정, 글 초안, 문서 정리. 기본으로 두기 좋음
/model haiku
단순 반복, 분류, 짧은 요약, 가벼운 검사. 서브에이전트(스타일 검수 등)에 잘 맞습니다.
/model opusplan
계획은 Opus로, 실행은 Sonnet으로. "생각은 비싸게, 손은 싸게".
/effort
생각을 얼마나 깊게 할지. low · medium · high · xhigh · max. 간단한 일엔 낮게, 까다로운 설계엔 높게.

상황별 추천표

오타 수정 · 파일 이름 정리
haiku 또는 sonnet · effort low
블로그 초안 · 일반 기능 구현
sonnet · effort medium
레거시 구조 분석 · 성능 원인 찾기
opus 또는 opusplan · effort high 이상
예약 작업 · 반복 자동화
결과가 괜찮은 선에서 가장 가벼운 모델. 매번 돌기 때문에 차이가 쌓입니다.

3 비용 · 사용량 — 계기판 보는 법

/usage (= /cost)
★ 이번 세션 비용과 요금제 사용량 막대를 보여줍니다. 큰 작업 전후로 한 번씩 보는 습관을.
/statusline
화면 아래 상태줄을 만들어 줍니다. 예: /statusline 모델명과 컨텍스트 % 보여줘 → 늘 계기판이 보이는 상태로.

구독 요금제 vs API 과금 — 무엇이 다른가

구독 요금제
Pro(월 $20, 연간 결제 시 월 $17) · Max($100부터, 5x/20x) 등. 정해진 금액 안에서 사용량 한도가 있고, 다 쓰면 한동안 기다려야 합니다. 추가 청구 걱정이 적은 대신 한도 관리가 중요. 2026년 9월 기준, 변동 가능
API 과금
쓴 만큼 돈이 나갑니다. GitHub Actions에 넣은 API 키, 직접 만든 스크립트 등이 여기에 해당. 상한이 없으니 턴 수 제한·빈도 조절이 필수입니다.
평균 참고치
Anthropic이 밝힌 API 과금 기준 평균은 개발자 1명, 활발히 쓴 하루 약 $13 수준입니다. 내 사용량이 이보다 크게 높다면 모델·컨텍스트 습관을 점검해 볼 신호.
사용량을 빨리 쓰는 것들 : 리서치(수 분간 여러 번 검색), 에이전트형 작업(Cowork, 서브에이전트 여러 명 동시 실행), 매시간 도는 예약 작업, 큰 파일을 통째로 읽기. 나쁜 게 아니라 비싼 도구이니 꼭 필요할 때 쓰면 됩니다.

4 권한 모드와 허용·차단 규칙

권한 모드는 "Claude가 얼마나 묻고 움직일지"를 정하는 운전 모드입니다. Shift+Tab 으로 default → acceptEdits → plan 순서로 바뀝니다(auto·bypass는 켜 둔 경우에만 순환에 들어옴).

default (화면: Manual)
기본. 파일 수정·명령 실행 전에 매번 묻습니다. 처음 보는 프로젝트는 여기서.
acceptEdits
파일 수정은 자동 수락, 그 밖은 묻기. git으로 되돌릴 수 있는 폴더에서 편합니다.
plan
읽고 계획만 세우고 고치지 않음. /plan 으로도 진입. 큰 작업 시작 전에 추천.
auto
분류기가 각 동작을 검토해 안전해 보이면 진행. 편하지만 규칙과 함께 써야 합니다.
bypassPermissions
위험. --dangerously-skip-permissions 로 켜며, 아무것도 묻지 않습니다. 버려도 되는 격리 환경(컨테이너 등)이 아니면 쓰지 마세요.

따라해 보기 — .env 읽기 차단 규칙 — /permissions 로 규칙을 보거나, .claude/settings.json 에 직접 적습니다. 규칙은 deny → ask → allow 순서로 검사되므로 차단이 항상 이깁니다.

{
  "permissions": {
    "allow": [
      "Bash(npm run lint)",
      "Bash(npm run test *)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ]
  }
}
규칙 문법 예
Bash(npm run test *) · Read(./.env) · WebFetch(domain:example.com) · mcp__서버__도구

Cowork 승인 모드 (설정 > Cowork)

Manual
동작마다 내가 승인. 처음 쓰는 작업, 중요한 폴더.
Auto
각 동작마다 안전성 검사를 거쳐 자동 진행. 익숙한 반복 작업.
Skip
승인 건너뛰기. 완전히 믿을 수 있는 작업·환경에서만.
화면과 메뉴 이름은 버전에 따라 다를 수 있습니다(채팅과 Cowork를 합친 새 화면이 순차 적용 중).

5 보안 점검 — 문단속 체크

프롬프트 인젝션
★ 웹페이지·메일·문서 속에 숨겨진 "명령문"이 Claude를 속이는 공격. 외부 내용을 읽는 작업일수록 쓰기·보내기 권한을 빼 두는 것이 가장 좋은 방어입니다. 리서치를 쓸 때는 쓰기 도구를 꺼 두세요.
신뢰할 수 있는 출처만
MCP 서버 · 스킬 · 플러그인 · 훅은 모두 내 권한으로 실행되는 코드나 지시입니다. 플러그인은 내 계정 권한으로 임의의 코드를 실행할 수 있습니다. 설치 전에 만든 곳과 내용을 확인하세요.
비밀 정보
.env 는 deny 규칙으로 막고, API 키·토큰은 파일이나 대화에 붙여 넣지 말고 환경 변수로. .mcp.json 도 ${API_KEY} 처럼 변수로 참조할 수 있습니다.
/sandbox
Bash 명령의 파일·네트워크 접근을 격리. macOS, Linux/WSL2 지원(윈도우 기본 환경은 미지원).
인코그니토 채팅
claude.ai 오른쪽 위 유령 아이콘. 기록과 메모리에 남지 않습니다. 민감한 개인 질문에.

회사 자료를 다룰 때 3원칙

① 고객 정보 금지
고객 이름·연락처·계약 정보는 개인 계정에 올리지 않습니다. 예시가 필요하면 가짜 데이터로.
② 승인된 도구만
회사가 허용한 커넥터·MCP·플러그인만. 운영 DB는 읽기 전용 계정으로도 신중하게.
③ 관리자 설정 따르기
Team/Enterprise에서는 관리자가 커넥터·스킬·메모리 등을 조직 설정으로 관리합니다. 개인 설정보다 조직 정책이 먼저입니다.

6 정기 점검 루틴 — 한 달에 한 번 15분

자동차 정기 점검처럼 달력에 넣어 두세요. 10단계에서 배운 예약 작업으로 "점검 알림"을 만들어도 좋습니다.

☐ 커넥터 정리
Customize > Connectors와 claude mcp list 를 보고 안 쓰는 연결은 끊기. 권한 범위(OAuth)도 다시 확인.
☐ 스킬·플러그인
한 달간 안 쓴 스킬·플러그인은 끄거나 삭제(/plugin 의 Installed 탭). 이름만으로도 작업대 자리를 차지합니다.
☐ 메모리 검토
설정의 Memory 화면에서 틀리거나 오래된 기억 삭제. Claude Code는 /memory 로 CLAUDE.md 점검(200줄 넘지 않게).
☐ 예약 작업
사이드바 Scheduled에서 실패하거나 더는 필요 없는 작업 일시정지·삭제.
☐ 업데이트
터미널에서 claude update 로 Claude Code 최신화. 기능과 명령어가 자주 바뀝니다.
☐ 사용량 돌아보기
/usage 로 한도에 자주 닿았는지 확인 → 모델 선택·자동화 빈도 조정.
# 점검 알림 예약 작업 프롬프트 예 (Cowork /schedule)
# 예약 빈도는 매시간·매일·매주·평일·수동 중에서 고르므로 "매주"로 두고,
# 한 달에 한 번은 꼼꼼히 읽는 식으로 쓰세요.
매주 월요일 오전 10시에
"Claude 정기 점검 목록"을 체크리스트 형태로 정리해 보여줘.
커넥터 정리, 안 쓰는 스킬·플러그인, 메모리 검토, 예약 작업 점검, claude update.
아무것도 직접 바꾸지는 마.

7 심화 과정을 마치며 & 전문가 과정 예고

여기까지 오셨다면 이제 Claude를 "시키면 해주는 도구"가 아니라 내 일에 맞게 조립하는 플랫폼으로 쓰고 계신 겁니다. 연결(MCP) → 매뉴얼(스킬) → 포장(플러그인) → 규칙(훅) → 팀(서브에이전트) → 자동화 → 운영까지, 12단계를 한 바퀴 돌았습니다.

연결 → 매뉴얼 → 포장 → 규칙 → 팀 → 자동화 → 운영

다음 전문가 과정에서는 "만들어진 것을 쓰는 사람"에서 "직접 만드는 사람"으로 한 걸음 더 나갑니다.

Claude API직접 호출
내 서비스·사내 시스템에 Claude 붙이기
나만의 MCP 서버통로 만들기
사내 DB·API를 Claude에 연결
Agent SDK에이전트 제작
Claude Code 같은 에이전트를 내 코드로

8 정리 & 체크리스트

☐ 컨텍스트 ★
/context 격자를 보고, 주제가 바뀌면 /clear, 길어지면 /compact 를 쓴다.
☐ 모델 선택
작업에 따라 /model 과 /effort 를 바꿔 본 적이 있다.
☐ 계기판
/usage 로 사용량을 확인했고, /statusline 으로 상태줄을 만들었다.
☐ 권한
Shift+Tab 으로 모드를 바꿀 수 있고, .env 읽기 차단 규칙을 넣었다.
☐ 보안
설치한 MCP·스킬·플러그인의 출처를 알고 있고, 비밀 정보는 환경 변수로 다룬다.
☐ 정기 점검
한 달에 한 번 점검 루틴을 달력(또는 예약 작업)에 넣었다.
이전 글: 심화 11단계 ★ 종합 프로젝트 — 블로그 운영 자동화 · 다음 글: 전문가 과정 (예고)
공식 문서: 비용 관리 · 권한 · 보안 · 설정 · CLAUDE.md(메모리)

 

 

 

 

심화 11단계 ★ 종합 프로젝트 — 블로그 운영 자동화

MCP · 스킬 · 서브에이전트 · 훅 · 예약 작업 · 플러그인을 하나로 엮어, 바로 이 블로그의 글 작성 파이프라인을 만듭니다

Claude 심화 과정 11/12 · 2026년 9월 기준 · ⏱ 1~2주 · ★ = 꼭 해볼 것

이번 단계에서 만드는 것
· 블로그 전용 프로젝트 폴더와 CLAUDE.md
· 글쓰기 스킬 + 사실 확인·스타일 검수 서브에이전트 2명
· 저장할 때마다 HTML을 자동 검사하는 훅, 주간 초안 예약 작업
· 이 모든 걸 담은 플러그인 — 그리고 발행은 사람이

지금까지 배운 기능들은 따로 보면 "있으면 편한 도구"입니다. 하지만 엮어 놓으면 작은 편집부가 됩니다. 자료 조사 담당, 작가, 교정 담당, 편집장 알람까지 — 그리고 편집장(나)은 마지막에 원고를 읽고 발행 버튼만 누르면 됩니다. 주제는 일부러 이 블로그 자체로 골랐습니다. 매주 Claude에 대한 가이드 글을 샘플 HTML 스타일로 쓰는 일, 바로 그 과정을 자동화합니다.

1 완성 그림 — 파이프라인 한눈에

자료 수집(웹 검색·MCP) → 초안(블로그 스킬) → 검수(리뷰 서브에이전트) → 정기 실행(예약 작업) → 포장(플러그인) → 사람이 발행

자료 수집조사원
웹 검색 · 커넥터(MCP)로 최신 소식 모으기 · 3·4단계
초안작가
tistory-guide-writer 스킬 · 6단계
검수교정 담당
fact-checker · style-reviewer · 9단계
자동 검사품질 규칙
PostToolUse 훅 · 8단계
정기 실행알람 시계
주간 예약 작업 · 10단계
포장도구 세트
플러그인 · 7단계
일정 한눈에 : 1주차 = 뼈대(CLAUDE.md · 스킬 · 서브에이전트) / 2주차 = 자동화(훅 · 예약 작업 · 플러그인 · 회고). 하루 30분~1시간씩이면 충분합니다.

2 준비 — 프로젝트 폴더 구조

claude.ai 프로젝트로 쓰던 작업을 이번엔 내 컴퓨터 폴더로 옮깁니다. 폴더가 있어야 훅·서브에이전트·파일 저장까지 다 쓸 수 있기 때문입니다.

modulebit-blog/
├── CLAUDE.md                        # 블로그 운영 원칙 (항상 읽힘)
├── .claude/
│   ├── settings.json                # 훅 등록
│   ├── hooks/
│   │   └── check_html.py            # HTML 검사 스크립트
│   ├── skills/
│   │   └── tistory-guide-writer/
│   │       ├── SKILL.md             # 글쓰기 매뉴얼
│   │       └── references/
│   │           └── sample.html      # 스타일 기준 샘플
│   └── agents/
│       ├── fact-checker.md          # 사실 확인 담당
│       └── style-reviewer.md        # 스타일·맞춤법 담당
├── drafts/                          # AI가 쓴 초안 (검토 대기)
└── published/                       # 내가 발행한 최종본
# 터미널에서 뼈대 만들기 (맥·리눅스 기준)
mkdir -p modulebit-blog/.claude/{hooks,skills/tistory-guide-writer,agents} modulebit-blog/{drafts,published}
cd modulebit-blog
claude
팁 : 폴더를 git 저장소로 만들어 두면(git init) Claude가 파일을 망가뜨려도 언제든 되돌릴 수 있습니다. 자동화 프로젝트에서는 사실상 필수 안전장치입니다.

3 1주차 — 뼈대 만들기 Day 1~5

Day 1~2 · CLAUDE.md 작성

CLAUDE.md는 "이 폴더에서 일할 때 항상 지킬 규칙"입니다. 스킬이 글 쓰는 방법이라면, CLAUDE.md는 이 블로그의 운영 원칙입니다. 짧고 단단하게 씁니다.

# 모듈비트 티스토리 블로그 작업 폴더

## 이 폴더는
- 모듈비트 티스토리에 올릴 Claude AI 가이드 글을 만드는 곳이다.
- 모든 글은 .cckr 스타일 HTML이며, 규칙은 tistory-guide-writer 스킬을 따른다.

## 폴더 규칙
- 새 초안은 반드시 drafts/ 에 저장한다. 파일명: YYYY-MM-DD-주제.html
- published/ 는 사람이 직접 옮기는 곳이다. 이 폴더의 파일은 절대 수정·삭제하지 않는다.

## 사실 원칙
- 명령어·메뉴 이름·요금·요금제별 지원 여부는 공식 문서나 출처로 확인한 것만 쓴다.
- 확인하지 못한 내용은 "설정 화면에서"처럼 일반적으로 쓰고, 초안 끝 메모에 남긴다.
- 가격·기능은 "2026년 9월 기준, 변동 가능"처럼 기준 시점을 적는다.

## 작업 순서
1. 초안 작성 후 fact-checker 로 사실 확인, style-reviewer 로 스타일 확인
2. 지적 사항을 반영해 다시 저장
3. 초안 맨 끝 HTML 주석에 "검수 요약"(확인한 출처, 남은 의문점)을 남긴다

## 하지 말 것
- 티스토리에 직접 발행하거나 로그인 시도하지 않는다.
- 실제 회사·고객 데이터를 예시에 넣지 않는다.

Day 3~4 · 글쓰기 스킬 가져오기

6단계에서 만든 블로그 스킬을 그대로 재사용합니다. 폴더째 .claude/skills/tistory-guide-writer/ 로 복사합니다(sample.html은 6단계처럼 references/ 안에). 아직 없다면 핵심만 이렇게 요약해 시작해도 됩니다.

---
name: tistory-guide-writer
description: 모듈비트 티스토리용 Claude 가이드 글을 .cckr 스타일 HTML로 작성할 때 사용
---
# 작성 순서
1. references/sample.html 의 상단 주석과 <style> 블록을 그대로 복사한다 (CSS 수정 금지)
2. 본문은 <div class="cckr"> 로 감싸고, 정의된 클래스만 사용한다
3. 모든 <p> 에 data-ke-size="size16", <h2> 에 data-ke-size="size26"
4. 구성: 머리말(cc-head) → 번호 붙은 h2 섹션 5~8개 → 체크리스트 → cc-foot
5. 말투: 존댓말, 일상 비유, 짧은 문장. 이모지는 ⏱ ★ ☐ 만

# 참고 파일
- 스타일 기준: ${CLAUDE_SKILL_DIR}/references/sample.html
스킬이 잘 불려 나오는지 "Claude 메모리 기능 가이드 글 초안 써줘" 한 줄로 시험해 보세요. 안 불리면 description을, 결과가 어긋나면 본문을 고칩니다(6단계 복습).

Day 5 · 검수 서브에이전트 2명

검수를 작가와 같은 대화에서 하면 "자기 글에 관대한" 문제가 생깁니다. 별도의 컨텍스트를 가진 서브에이전트에게 맡기면 처음 보는 눈으로 읽어 줍니다. 두 파일을 .claude/agents/ 에 저장합니다.

.claude/agents/fact-checker.md

---
name: fact-checker
description: 블로그 초안 속 명령어·메뉴·요금·기능 설명이 사실인지 확인할 때 사용. 초안 작성 직후 반드시 사용.
tools: Read, Grep, Glob, WebSearch, WebFetch
model: sonnet
---
너는 IT 기술 블로그의 사실 확인 담당이다. 글을 고치지 말고 보고만 한다.

## 확인 대상
- 명령어, 옵션(플래그), 파일 경로, 메뉴 이름
- 요금제별 지원 여부, 가격, 제한(횟수·용량)
- "최근", "새로" 같은 시점 표현

## 방법
1. 초안에서 확인할 문장을 목록으로 뽑는다
2. 공식 문서(code.claude.com, support.claude.com, anthropic.com)를 우선 확인한다
3. 공식 출처가 없으면 "미확인"으로 둔다. 추측으로 "맞음" 처리하지 않는다

## 보고 형식
| 문장 | 판정(맞음/틀림/미확인) | 근거 URL | 수정 제안 |
마지막에 "반드시 고칠 것" 3개 이내로 요약.

.claude/agents/style-reviewer.md

---
name: style-reviewer
description: 블로그 초안이 모듈비트 .cckr 스타일 규칙과 말투를 지키는지 검토할 때 사용
tools: Read, Grep, Glob
model: haiku
---
너는 블로그 편집자다. 글을 고치지 말고 지적 목록만 돌려준다.

## 점검 항목
1. 상단 주석과 <style> 블록이 sample.html 과 동일한가
2. 정의되지 않은 클래스나 인라인 style 을 쓰지 않았는가
3. 모든 <p> 에 size16, <h2> 에 size26 이 있는가
4. 존댓말이 일관적인가, 문장이 너무 길지 않은가(한 문장 80자 안팎)
5. 맞춤법·띄어쓰기, 이모지 사용 규칙(⏱ ★ ☐ 외 금지)
6. 체크리스트와 cc-foot(이전 글·다음 글·공식 문서)이 있는가

## 보고 형식
심각도(높음/보통/낮음) · 위치(섹션 번호) · 문제 · 제안

따라해 보기 — 초안을 하나 만든 뒤 이렇게 부탁합니다.

drafts/2026-09-24-memory-guide.html 을
fact-checker 와 style-reviewer 에이전트로 각각 검토하고,
두 보고서를 합쳐 "고칠 것 목록"을 만들어줘. 아직 파일은 고치지 마.

4 2주차 Day 1~2 — 훅으로 HTML 자동 검사

"태그 닫았어?"를 매번 부탁하지 말고 규칙으로 걸어 둡니다. Claude가 HTML 파일을 저장(Write/Edit)할 때마다 검사 스크립트가 돌고, 문제가 있으면 Claude에게 되돌려 보내 스스로 고치게 합니다.

.claude/hooks/check_html.py

#!/usr/bin/env python3
import sys, json
from html.parser import HTMLParser

data = json.load(sys.stdin)                       # 훅 입력은 stdin 의 JSON
path = data.get("tool_input", {}).get("file_path", "")
if not path.endswith(".html"):
    sys.exit(0)                                   # HTML 이 아니면 통과

VOID = {"br", "img", "hr", "meta", "link", "input"}

class Checker(HTMLParser):
    def __init__(self):
        super().__init__()
        self.stack, self.errors = [], []
    def handle_starttag(self, tag, attrs):
        a = dict(attrs)
        line = self.getpos()[0]
        if tag == "p" and a.get("data-ke-size") != "size16":
            self.errors.append(f"{line}행: <p> 에 data-ke-size=\"size16\" 없음")
        if tag == "h2" and a.get("data-ke-size") != "size26":
            self.errors.append(f"{line}행: <h2> 에 data-ke-size=\"size26\" 없음")
        if tag not in VOID:
            self.stack.append((tag, line))
    def handle_endtag(self, tag):
        if tag in VOID:
            return
        if self.stack and self.stack[-1][0] == tag:
            self.stack.pop()
        else:
            self.errors.append(f"{self.getpos()[0]}행: </{tag}> 짝이 맞지 않음")

c = Checker()
with open(path, encoding="utf-8") as f:
    c.feed(f.read())
for tag, line in c.stack:
    c.errors.append(f"{line}행: <{tag}> 가 닫히지 않음")

if c.errors:
    print("HTML 검사 실패:\n" + "\n".join(c.errors[:20]), file=sys.stderr)
    sys.exit(2)                                   # 2 = Claude 에게 이유 전달
sys.exit(0)

.claude/settings.json — 파일 저장 직후 검사 실행

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command",
            "command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/check_html.py" }
        ]
      }
    ]
  }
}
확인 1
세션 안에서 /hooks 로 등록 상태를 봅니다(보기 전용, 수정은 JSON 파일에서).
확인 2
"drafts/test.html 에 <p> 하나를 data-ke-size 없이 저장해봐"라고 일부러 틀리게 시켜 보세요. 검사 실패 메시지가 Claude에게 전달되고, Claude가 스스로 고치면 성공.
종료 코드 기억하기 : 0 = 통과, 2 = 문제 있음(stderr 내용이 Claude에게 전달), 그 밖의 값 = 막지 않는 오류. 훅이 말썽이면 설정에 "disableAllHooks": true 로 잠시 꺼 둘 수 있습니다.

5 2주차 Day 3 — 주간 초안 예약 작업 ★

이제 매주 "이번 주 Claude 업데이트 정리" 초안이 알아서 drafts 폴더에 쌓이게 합니다. Cowork(데스크톱 앱)에서 /schedule 을 입력하고 아래 프롬프트를 붙여 넣으세요.

매주 금요일 오후 3시에 실행해줘.

[목표]
이번 주(지난 7일) Claude 관련 업데이트를 정리한
모듈비트 티스토리용 초안 HTML을 만든다.

[자료 수집]
- 웹 검색으로 Anthropic 공식 발표, Claude 공식 문서 변경, 릴리스 노트를 찾는다.
- 공식 출처가 아닌 기사·커뮤니티 글은 "참고"로만 쓰고 단정하지 않는다.
- 주제는 최대 5개. 일반 사용자에게 영향이 큰 것부터.

[작성]
- tistory-guide-writer 스킬의 규칙과 sample.html 스타일을 그대로 따른다.
- 제목: "이번 주 Claude 업데이트 정리 (YYYY년 M월 D일)"
- 항목마다: 무엇이 바뀌었나 / 누구에게 해당되나(요금제) / 따라해 보기 한 줄 / 출처 링크

[검수]
- 저장 전에 fact-checker 기준으로 스스로 점검하고,
  확인 못 한 내용은 본문에서 빼거나 "확인 필요"로 표시한다.
- 초안 맨 끝 HTML 주석에 확인한 출처 목록과 남은 의문점을 적는다.

[저장]
- 연결된 modulebit-blog 폴더의 drafts/ 에
  YYYY-MM-DD-claude-weekly.html 로 저장한다.

[하지 말 것]
- 티스토리 발행, 로그인, 메일 발송은 하지 않는다.
- published/ 폴더는 건드리지 않는다.
- 새 소식이 없으면 "이번 주 주요 업데이트 없음" 메모 파일만 남긴다.
설정 확인
빈도 weekly(금요일) · 폴더는 modulebit-blog · 승인 모드는 가능한 한 보수적으로. 사이드바 Scheduled에서 Run now로 첫 결과를 바로 확인합니다.
결과가 안 생기면
대부분 승인 대기에서 멈춘 경우입니다. 실행 기록을 열어 어디서 멈췄는지 보고, 프롬프트의 작업 범위를 더 좁히세요(10단계 "승인 모드 주의").
Claude Code에 익숙하다면 같은 일을 Routines(/schedule)이나 claude -p + cron으로도 만들 수 있습니다. 어떤 도구든 핵심은 같습니다 — 결과는 drafts에 파일로, 발행은 사람이.

6 2주차 Day 4~5 — 플러그인 포장과 회고

Day 4 · 플러그인으로 포장하기

스킬·에이전트·훅이 폴더 여기저기 흩어져 있으면 다른 컴퓨터로 옮기거나 동료에게 주기 어렵습니다. 플러그인으로 묶으면 설치 한 번으로 끝납니다. 7단계에서 만든 modulebit-blog 플러그인에 에이전트·훅을 더해도 되지만, 여기서는 프로젝트 폴더 이름(modulebit-blog)과 헷갈리지 않도록 tistory-blog 라는 새 이름으로 묶습니다.

tistory-blog/
├── .claude-plugin/
│   └── plugin.json
├── skills/
│   └── tistory-guide-writer/
│       ├── SKILL.md
│       └── references/
│           └── sample.html
├── agents/
│   ├── fact-checker.md
│   └── style-reviewer.md
└── hooks/
    └── hooks.json

.claude-plugin/plugin.json

{
  "name": "tistory-blog",
  "description": "모듈비트 티스토리 Claude 가이드 글 작성·검수 도구 세트",
  "version": "1.0.0",
  "author": { "name": "모듈비트" }
}
# 로컬에서 시험 → 검증
claude --plugin-dir ./tistory-blog
claude plugin validate ./tistory-blog

# 세션 안에서 수정 사항 반영
/reload-plugins

# 이름공간이 붙어 호출됨
/tistory-blog:tistory-guide-writer 프로젝트 기능 가이드
참고 : 플러그인 폴더 안의 훅 스크립트 경로는 프로젝트 폴더 기준과 달라질 수 있으니, 포장 후 반드시 일부러 틀린 HTML을 저장해 훅이 도는지 다시 확인하세요. 완성된 플러그인은 Cowork의 Customize > Plugins에서 파일로 올려 쓸 수도 있습니다(화면은 버전에 따라 다를 수 있음).

Day 5 · 회고 — 사람 검토 체크리스트

drafts에 초안이 쌓였다면, 발행 전 이 목록으로 직접 확인합니다. 이 과정은 자동화하지 않는 것이 핵심입니다.

☐ 사실
초안 끝 "검수 요약" 주석의 출처를 2~3개는 직접 열어 봤다. "확인 필요" 표시가 남아 있지 않다.
☐ 따라하기
본문의 명령어·메뉴를 내 화면에서 한 번 이상 실제로 해 봤다.
☐ 내 목소리
내 경험 한두 줄을 직접 추가했다. AI 초안 그대로가 아니다.
☐ 미리보기
티스토리 HTML 모드에 붙여 넣고 기본모드·모바일 미리보기로 깨짐이 없다.
☐ 발행 & 보관
발행은 내가 직접 → 최종본을 published/로 옮겼다.

7 확장 아이디어 — 어디까지 자동화할까

발행은 왜 자동화 안 하나
★ ① 틀린 정보가 검토 없이 바로 공개되고, ② 블로그 계정 로그인 정보를 자동화에 맡겨야 하며, ③ 웹페이지를 읽는 자동화는 프롬프트 인젝션에 속을 수 있습니다. 블로그의 신뢰는 한 번 잃으면 되돌리기 어렵습니다. 마지막 버튼은 사람.
이미지
스크린샷은 직접 찍는 게 가장 정확합니다. 대신 "이 글에 들어갈 스크린샷 목록과 캡처 위치"를 초안에 함께 적게 하면 준비가 빨라집니다. 도식은 HTML의 cc-flow·cc-map으로 대신할 수 있습니다.
SEO 키워드
초안 끝 주석에 "추천 제목 3개 · 태그 5개 · 요약 문구"를 같이 만들게 하세요. 고르는 건 사람이.
시리즈 관리
published/ 목록을 읽고 "다음에 쓸 만한 주제 5개, 기존 글과 겹치지 않게"를 주간 예약 작업으로(예약 빈도에 "매월"은 없으니 매주로 두고 필요할 때만 확인).
독자 질문
댓글로 들어온 질문을 모아 붙여 넣고 "FAQ 글 초안"으로 만드는 스킬 추가.

8 정리 & 체크리스트

심화 과정 1~10단계가 한 폴더 안에서 전부 돌아가면 종합 프로젝트 완성입니다.

☐ 폴더 구조
modulebit-blog 폴더에 CLAUDE.md · skills · agents · drafts · published가 있다.
☐ 스킬
한 줄 부탁으로 스타일에 맞는 초안이 drafts에 저장된다.
☐ 서브에이전트
fact-checker · style-reviewer가 각각 보고서를 돌려준다.
☐ 훅
잘못된 HTML을 저장하면 검사 실패가 뜨고 Claude가 스스로 고친다.
☐ 예약 작업 ★
주간 업데이트 초안이 금요일마다 drafts에 생긴다(Run now로 한 번 확인).
☐ 플러그인
claude plugin validate 를 통과했고, 이름공간 명령어로 불러진다.
☐ 사람 검토
발행 전 체크리스트를 거쳐 직접 발행했다.
이전 글: 심화 10단계 자동화 — 내가 없어도 일하는 Claude · 다음 글: 심화 12단계 고수의 운영법 — 컨텍스트 · 비용 · 보안
공식 문서: 스킬 · 서브에이전트 · 훅 · 플러그인 · CLAUDE.md(메모리)

 

 

 

 

심화 10단계 자동화 — 내가 없어도 일하는 Claude

예약 작업 · Routines · /loop · claude -p · GitHub Actions로 "시간과 이벤트에 맞춰 스스로 움직이는" Claude 만들기

Claude 심화 과정 10/12 · 2026년 9월 기준 · ⏱ 며칠 · ★ = 꼭 해볼 것

이번 단계에서 배우는 것
· 자동화 도구 4가지(예약 작업 · Routines · /loop · 헤드리스)가 각각 언제 맞는지
· Cowork 예약 작업으로 "평일 아침 브리핑" 만들기 ★
· claude -p 로 스크립트·배치 안에서 Claude를 부품처럼 쓰기
· GitHub Actions로 이슈·PR에 @claude 를 부르는 법, 그리고 자동화 설계 원칙

지금까지는 내가 말을 걸어야 Claude가 움직였습니다. 비유하자면 "부르면 오는 비서"였죠. 이번 단계에서는 비서에게 알람 시계와 업무 일지를 쥐여 줍니다. "매일 아침 8시에 이것 정리해 둬", "PR이 올라오면 한번 봐 줘" 같은 일을 내가 자리에 없어도 해 두도록 만드는 겁니다.

1 자동화 4가지 도구 한눈에

이름이 비슷해서 헷갈리지만, "어디서 돌아가는지"와 "무엇이 방아쇠인지"만 보면 금방 구분됩니다.

Cowork 예약 작업
★ 데스크톱·웹 앱에서 /schedule 또는 "매주 월요일 오전 9시에…"처럼 말로 등록. 클라우드에서 실행되어 컴퓨터가 잠자거나 앱을 닫아도 돌아갑니다. 유료 요금제 전체 · 비개발자 추천
Claude Code Routines
Claude Code 쪽의 클라우드 자동 실행. 스케줄 · API 호출 · GitHub 이벤트로 시작. Claude Code에서 /schedule 또는 claude.ai/code/routines에서 생성. research preview · Pro/Max/Team/Enterprise · 최소 간격 1시간
/loop
열려 있는 세션 안에서 같은 부탁을 일정 간격으로 반복. 예: /loop 5m 빌드 상태 확인해줘. 세션에 묶여 있고 7일 뒤 만료됩니다. "잠깐 지켜봐 줘"용
claude -p + GitHub Actions
헤드리스(비대화형) 모드. 쉘 스크립트·cron·작업 스케줄러·CI 파이프라인 안에서 Claude를 명령어 하나로 호출. 개발자 추천 · 가장 자유도가 높음

비교표 — 어떤 걸 고를까?

구분
실행 위치 · 방아쇠 · 잘 맞는 일
Cowork 예약 작업
클라우드 · 시간(매시간/매일/매주/평일/수동) · 일정·메일 브리핑, 주간 리포트, 자료 정리
Routines
클라우드 · 시간 / API / GitHub 이벤트 · 저장소 점검, 정기 코드 작업, 이벤트 대응
/loop
지금 열린 세션 · 간격(예: 5분) · 배포·빌드·테스트를 잠깐 지켜보기
claude -p
내 PC·서버·CI · 내가 짠 스크립트, cron, GitHub 이벤트 · 로그 요약, 배치 처리, PR 리뷰
고르는 요령 : 코딩과 상관없는 업무면 Cowork 예약 작업, 저장소·코드와 관련된 정기 작업이면 Routines, 내가 이미 가진 배치·CI에 끼워 넣고 싶으면 claude -p. /loop 는 "오늘 오후 동안만" 같은 짧은 반복입니다.

2 ★ 실습 ① Cowork 예약 작업 — 평일 아침 브리핑 ⏱ 20분

가장 먼저 해볼 자동화입니다. 4단계에서 연결한 캘린더·지메일 커넥터를 그대로 활용합니다.

따라해 보기

1. 대화창 열기
Claude 데스크톱 앱(또는 웹)에서 새 대화를 엽니다. 캘린더·지메일 커넥터가 연결되어 있는지 먼저 확인하세요.
2. 말로 등록
/schedule 을 입력하거나, 아래처럼 그냥 문장으로 부탁합니다.
평일 아침 8시에 오늘 브리핑을 만들어줘.
- 구글 캘린더: 오늘 일정을 시간순으로, 회의는 참석자와 준비물까지
- 지메일: 어제 저녁 이후 받은 메일 중 답장이 필요한 것만 5개 이내
- 마지막에 "오늘 가장 먼저 할 일" 한 줄 추천
메일은 읽기만 하고 절대 보내거나 삭제하지 마.
3. 설정 확인
Claude가 이름 · 프롬프트 · 빈도 · 승인 모드 등 설정을 정리해 보여줍니다. 빈도가 평일(weekdays), 시간이 오전 8시인지 확인하고 저장.
4. 한 번 바로 실행
사이드바 Scheduled에서 방금 만든 작업을 열고 Run now로 즉시 한 번 돌려 봅니다. 결과가 마음에 안 들면 프롬프트를 고쳐 다시 실행.
5. 관리
같은 화면에서 수정(edit) · 일시정지(pause) · 재개(resume) · 삭제(delete) · 지금 실행(run now).
직접 폼으로 만들고 싶다면 사이드바 Scheduled → New task → Set up manually를 고르면 됩니다. "Create with Claude"를 고르면 대화로 설계를 도와줍니다. 화면과 메뉴 이름은 버전에 따라 다를 수 있습니다(채팅과 Cowork를 합친 새 화면이 순차 적용 중).

빈도 옵션

hourly / daily
매시간 · 매일. 매시간은 사용량을 빠르게 쓰니 꼭 필요할 때만.
weekly / weekdays
매주 특정 요일 · 평일만. 주간 리포트, 출근 브리핑에 적합.
manual
자동으로는 돌지 않고, 내가 누를 때만 실행. "저장해 둔 단골 작업"처럼 쓰기 좋습니다.
승인 모드 주의 : 예약 작업은 아무도 지켜보지 않는 상태에서 실행됩니다. 승인이 필요한 동작(파일 쓰기, 메일 보내기 등)을 만나면 거기서 멈춰 기다릴 수 있습니다. 그렇다고 승인을 모두 건너뛰게(Skip) 하면 위험합니다. 해결책은 작업 범위를 좁게 잡는 것 — "읽고 요약만", "결과는 이 폴더에 파일로만" 처럼 승인 없이도 끝낼 수 있는 일로 설계하세요.

3 실습 ② claude -p 기본 — Claude를 명령어 부품으로 ⏱ 30분

-p(print)는 대화창을 열지 않고 질문 하나 → 답 하나를 출력하고 끝나는 모드입니다. Java의 main 메서드를 cron에 걸듯, Claude를 스크립트 한 줄로 부를 수 있습니다.

claude -p "..."
프롬프트를 실행하고 결과를 출력한 뒤 종료.
--output-format
text(기본, 사람이 읽기) · json(result · session_id · total_cost_usd 포함) · stream-json(실시간 스트림).
--allowedTools
★ 승인 없이 쓸 도구를 미리 허용. 무인 실행이라 물어볼 사람이 없으니 꼭 필요한 것만 적습니다.
--permission-mode
acceptEdits(파일 수정 자동 수락) · plan(계획만) 등. 12단계에서 자세히.
--continue · --resume
직전 대화 이어가기 · 특정 세션 ID로 이어가기.
--append-system-prompt
기본 지침 뒤에 추가 지침 덧붙이기. "항상 한국어로" 같은 규칙에.

따라해 보기 — 파이프로 로그 요약

# 1) 에러 로그를 파이프로 넘겨 요약
cat error.log | claude -p "오늘 에러를 유형별로 묶고, 건수가 많은 순서로 요약해줘" > summary.md

# 2) 빌드 에러 원인 찾기 (읽기 도구만 허용)
cat build-error.txt | claude -p "이 빌드 에러의 원인과 고칠 파일을 알려줘" \
  --allowedTools "Read,Grep,Glob"

# 3) JSON으로 받아 결과만 꺼내기 (jq 필요)
claude -p "변경된 파일 목록을 보고 커밋 메시지 초안을 써줘" \
  --allowedTools "Bash(git diff *),Read" \
  --output-format json | jq -r '.result'

OS 스케줄러와 조합하기 — claude -p 는 결국 명령어 한 줄이라, 리눅스·맥의 cron이나 윈도우 작업 스케줄러에 그대로 걸 수 있습니다. 아래는 일반적인 cron 예시입니다.

# crontab -e  (평일 오전 8시 반, 어제 로그 요약을 파일로 저장)
30 8 * * 1-5 cd ~/work/app && cat logs/app.log | claude -p "어제 에러만 유형별로 요약해줘" > reports/daily-summary.md
팁 : 윈도우라면 작업 스케줄러에서 "기본 작업 만들기" → 트리거(매일/매주) → 동작으로 위와 같은 명령을 담은 배치 파일(.bat)이나 PowerShell 스크립트를 지정하면 됩니다. 단, 이 방식은 내 컴퓨터가 켜져 있어야 돌아갑니다. 컴퓨터가 꺼져 있어도 돌아야 한다면 Cowork 예약 작업이나 Routines를 쓰세요.

4 실습 ③ GitHub Actions — 이슈에 @claude 부르기 ⏱ 30분

저장소에 Claude를 "팀원"으로 등록하는 방법입니다. 이슈나 PR 댓글에 @claude 를 달면 GitHub 서버에서 Claude가 작업을 시작합니다.

1. 앱 설치
저장소 폴더에서 Claude Code를 열고 /install-github-app 실행. GitHub CLI(gh)가 필요합니다. 안내에 따라 GitHub 앱 설치와 시크릿 등록을 진행합니다.
2. 시크릿 확인
저장소 시크릿에 ANTHROPIC_API_KEY 가 있어야 합니다. 구독 요금제 인증을 쓰려면 claude setup-token 으로 만든 CLAUDE_CODE_OAUTH_TOKEN 을 대신 넣을 수 있습니다.
3. 워크플로 파일
.github/workflows/claude.yml 에 아래 내용이 들어갑니다(설치 과정에서 자동 생성되기도 합니다).
name: Claude
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
jobs:
  claude:
    if: contains(github.event.comment.body, '@claude')
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
      id-token: write
      actions: read
    steps:
      - uses: actions/checkout@v6
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
4. 사용해 보기
이슈 댓글에 아래처럼 적습니다. Claude가 코드를 읽고 답하거나 수정 PR을 만듭니다.
@claude 로그인 실패 시 에러 메시지가 영어로만 나옵니다.
messages_ko.properties 에 한국어 메시지를 추가하고, 테스트도 같이 고쳐주세요.

자주 쓰는 입력값(with:)

prompt
멘션 없이도 실행할 고정 지시. 예: PR이 열릴 때마다 "보안 관점에서 리뷰해줘".
claude_args
CLI 옵션 전달. 예: "--max-turns 5" 로 작업 길이 제한 → 비용 폭주 방지.
trigger_phrase
호출 문구 변경(기본값 @claude).
주의 : GitHub Actions는 API 키로 과금되는 경우가 많습니다(구독 요금제와 별개). 처음에는 claude_args 로 턴 수를 제한하고, 공개 저장소라면 누가 @claude 를 부를 수 있는지도 함께 점검하세요.

5 Routines 소개 — 클라우드에서 도는 Claude Code

Routines는 "Claude Code판 예약 작업"입니다. 아직 research preview라 기능이 바뀔 수 있지만, 개념은 알아둘 만합니다.

어디서 도나
클라우드. 내 노트북이 꺼져 있어도 실행됩니다.
무엇이 방아쇠인가
스케줄(최소 1시간 간격) · API 호출 · GitHub 이벤트.
만드는 법
Claude Code에서 /schedule 을 입력하거나, 브라우저에서 claude.ai/code/routines로 이동.
누가 쓸 수 있나
Pro · Max · Team · Enterprise (2026년 9월 기준, 변동 가능)
# Claude Code 세션 안에서
/schedule

# 대화로 설명하면 됩니다. 예:
매주 월요일 오전 9시에 이 저장소의 열린 이슈를 읽고
"이번 주 처리 우선순위 Top 5"를 이슈 하나로 정리해줘.
코드는 수정하지 마.
/loop 과의 차이 : /loop 는 지금 열어 둔 세션이 살아 있는 동안만(최대 7일) 반복합니다. 세션을 닫으면 끝. Routines는 세션과 상관없이 클라우드에서 계속 실행됩니다.

6 자동화 설계 원칙 5가지

자동화는 "한 번 잘못 짜면 매일 잘못 돈다"는 점이 무섭습니다. 아래 원칙만 지켜도 사고의 대부분을 막을 수 있습니다.

① 작게 시작
★ 처음엔 읽기 → 요약만 하는 작업부터. 잘 돌면 한 단계씩 권한을 넓힙니다. 매시간보다 매일, 매일보다 매주로 시작.
② 결과는 파일·알림으로
결과가 대화 속에 묻히지 않게 "drafts 폴더에 날짜.md로 저장", "요약을 메일 초안으로" 처럼 받는 곳을 정해 둡니다.
③ 사람 검토 지점
보내기·발행·배포·삭제처럼 되돌리기 어려운 동작은 자동화에서 빼고 사람이 마지막 버튼을 누릅니다.
④ 비용 상한
빈도 줄이기 · --max-turns 로 길이 제한 · 가벼운 작업은 가벼운 모델. --output-format json 의 total_cost_usd 로 실제 비용을 기록해 보세요.
⑤ 좁은 권한
--allowedTools 는 최소한으로, 예약 작업 프롬프트엔 "하지 말 것"을 명시. 외부 웹페이지·메일을 읽는 자동화는 프롬프트 인젝션에 특히 조심.
# 좋은 자동화 프롬프트의 뼈대
[무엇을]   지난 7일간 받은 고객 문의 메일을 읽고
[어떻게]   유형별 건수와 대표 사례 3개로 요약해
[어디에]   reports/주간문의-YYYY-MM-DD.md 로 저장해
[금지]     메일 발송·삭제·라벨 변경은 절대 하지 마
[실패 시]  읽을 메일이 없으면 "이번 주 문의 없음" 한 줄만 저장해

7 정리 & 체크리스트

아래를 모두 해봤다면 다음 단계, 배운 것을 전부 엮는 종합 프로젝트로 넘어갈 준비가 된 겁니다.

☐ 도구 구분
예약 작업 · Routines · /loop · claude -p 의 차이를 한 문장씩 설명할 수 있다.
☐ 예약 작업 ★
평일 아침 브리핑을 등록하고 Run now로 한 번 실행해 봤다.
☐ 헤드리스
cat 파일 | claude -p "..." 로 요약 결과를 파일로 저장해 봤다.
☐ 도구 제한
--allowedTools 로 허용 도구를 좁혀 실행해 봤다.
☐ GitHub (개발자)
/install-github-app 후 테스트 저장소 이슈에서 @claude 를 불러 봤다.
☐ 설계 원칙
내 자동화에 "결과 저장 위치"와 "하지 말 것"이 적혀 있다.
이전 글: 심화 9단계 서브에이전트 — AI 팀 꾸리기 · 다음 글: 심화 11단계 ★ 종합 프로젝트 — 블로그 운영 자동화
공식 문서: 헤드리스 모드 · GitHub Actions · CLI 레퍼런스 · Cowork 예약 작업

 

 

 

 

심화 9단계 서브에이전트 — AI 팀 꾸리기

한 명에게 다 시키지 말고, 역할별 팀원에게 나눠 맡기고 요약만 보고받기

Claude 심화 과정 9/12 · 2026년 9월 기준 · ⏱ 1~2시간 · ★ = 꼭 해볼 것

이번 단계에서 배우는 것 — 서브에이전트 정의는 주로 Claude Code 기능입니다. Cowork도 내부적으로 서브에이전트를 써서 병렬 작업을 합니다.
왜 팀인가
컨텍스트(기억 공간)가 차는 문제와 서브에이전트가 이를 푸는 방식
만들기
★ 대화로 만들기, 파일로 직접 만들기, 예제 3종(리뷰어·테스트·문서)
활용
부르는 3가지 방법, 여러 명에게 동시에 조사 맡기기(병렬)
판단
나눌 때와 나누지 않을 때, 비용 관리

1 왜 팀이 필요할까? — 컨텍스트가 차는 문제

Claude의 대화에는 한 번에 기억할 수 있는 양(컨텍스트)이 정해져 있습니다. 파일 수십 개를 읽고, 로그를 뒤지고, 테스트를 돌리다 보면 금방 가득 찹니다.

팀장 한 명이 자료 조사, 코드 리뷰, 문서 작성까지 혼자 하면 책상이 서류로 뒤덮여 정작 중요한 판단을 못 합니다. 좋은 팀장은 팀원에게 일을 나눠 주고 "결론만 한 장으로 보고해"라고 합니다. 서브에이전트가 바로 그 팀원입니다.

혼자 할 때
조사하며 읽은 파일 수십 개가 전부 메인 대화에 쌓임 → 컨텍스트가 차서 앞 내용을 잊거나 압축이 필요해짐.
서브에이전트에게 맡길 때
★ 팀원은 자기만의 컨텍스트에서 따로 일하고, 메인 대화에는 요약 결과만 돌아옵니다. 메인 대화가 깨끗하게 유지됩니다.
덤으로 얻는 것
역할별로 도구 권한을 좁힐 수 있고(리뷰어는 읽기만), 작업에 맞는 모델을 따로 고를 수 있습니다.

2 이미 있는 팀원 — 기본 제공 서브에이전트

아무것도 만들지 않아도 Claude Code는 필요할 때 기본 팀원을 알아서 부릅니다.

Explore
코드베이스 검색·탐색 전문. 읽기 전용이라 파일을 고치지 않습니다. "이 기능 어디에 구현돼 있어?" 같은 질문에 쓰입니다.
Plan
Plan 모드에서 계획을 세우기 위한 조사 담당. 역시 읽기 전용.
general-purpose
모든 도구를 쓰는 만능 팀원. 조사와 수정이 섞인 복잡한 작업에.
Tip — 작업 중 화면에 에이전트 이름이 잠깐 보인다면 Claude가 팀원에게 일을 넘긴 것입니다. 특정 기본 에이전트를 쓰지 못하게 하려면 권한 설정의 deny 규칙에 Agent(Explore) 처럼 적습니다.

3 나만의 팀원 만들기

방법은 두 가지입니다. 대화로 부탁하거나, 파일을 직접 쓰거나.

방법 ① 대화로
★ "코드 리뷰어 서브에이전트 만들어줘"라고 부탁하면 Claude가 파일을 만들어 줍니다. 가장 쉬운 방법.
방법 ② 파일로
.claude/agents/이름.md 파일을 직접 작성합니다.
/agents
예전에는 만들기 마법사가 열렸지만, 최근 버전에서는 마법사 대신 안내만 표시됩니다. 위 두 방법 중 하나로 만드세요.
코드 리뷰어 서브에이전트를 만들어 줘.
- 이름: code-reviewer
- 파일 위치: .claude/agents/ (팀과 공유할 거야)
- 도구는 Read, Grep, Glob 만 (읽기 전용)
- 버그 → 보안 → 가독성 순서로 지적하고, 심각도를 상/중/하로 표시
- 우리 프로젝트는 Java/Spring + Oracle 이야

파일 위치와 우선순위

.claude/agents/
프로젝트 — 깃에 커밋해 팀과 공유. 이름이 겹치면 여기가 우선.
~/.claude/agents/
개인 — 내 모든 프로젝트에서 사용.
플러그인 agents/
7단계 플러그인에 넣어 배포한 에이전트.

frontmatter(맨 위 설정) 항목

name 필수
에이전트 이름. 소문자와 하이픈 권장(code-reviewer).
description 필수
언제 이 팀원을 부를지. 스킬처럼 Claude가 이걸 보고 자동으로 일을 맡깁니다. 구체적으로 쓸수록 잘 불립니다.
tools
쓸 수 있는 도구 목록. 생략하면 메인 대화의 도구를 물려받습니다. 반대로 빼고 싶은 것만 적는 disallowedTools 도 있습니다.
model
sonnet · opus · haiku · inherit(메인과 같게).
permissionMode
이 팀원의 권한 모드(예: 수정 자동 수락 등).
color
화면에 표시될 색. 여러 팀원이 동시에 일할 때 구분이 쉬워집니다.
그 밖에
maxTurns(최대 반복 횟수) · skills · mcpServers · memory · isolation: worktree(별도 작업 폴더에서 작업) 등.

4 ★ 바로 쓰는 예제 3종

그대로 복사해서 .claude/agents/ 에 저장하면 됩니다. 내용은 내 프로젝트에 맞게 고치세요.

① 코드 리뷰어 — 읽기 전용

파일: .claude/agents/code-reviewer.md

---
name: code-reviewer
description: 코드를 수정한 뒤 품질·보안 관점에서 리뷰할 때 사용. 변경 사항 검토 요청 시 적극적으로 사용.
tools: Read, Grep, Glob
model: sonnet
color: red
---
너는 시니어 코드 리뷰어다. 파일은 절대 수정하지 않는다.

리뷰 순서:
1. 버그 — 널 처리, 예외 처리, 트랜잭션 경계, 경계값
2. 보안 — SQL 인젝션, 하드코딩된 비밀번호·키, 권한 검사 누락
3. 가독성 — 이름, 중복, 너무 긴 메서드

출력 형식:
- 항목마다 [상/중/하] 심각도, 파일:줄, 문제, 고치는 방법 제안
- 마지막에 "머지해도 되는지" 한 줄 결론

② 테스트 작성자

파일: .claude/agents/test-writer.md

---
name: test-writer
description: 새 기능이나 수정한 코드에 단위 테스트를 작성하고 실행할 때 사용.
tools: Read, Grep, Glob, Edit, Write, Bash
model: sonnet
color: green
---
너는 테스트 전문 개발자다.

작업 순서:
1. 대상 코드와 기존 테스트 스타일(프레임워크, 폴더 구조, 이름 규칙)을 먼저 확인한다
2. 정상 케이스, 경계값, 예외 케이스를 나눠 테스트를 작성한다
3. 테스트를 실행하고, 실패하면 원인을 분석한다
4. 운영 코드는 고치지 않는다. 버그로 보이면 보고만 한다

보고: 추가한 테스트 목록, 실행 결과(통과/실패 수), 발견한 의심 버그

③ 문서 작성자

파일: .claude/agents/doc-writer.md

---
name: doc-writer
description: README, API 설명, 변경 이력 등 문서를 작성하거나 코드와 문서가 맞는지 점검할 때 사용.
tools: Read, Grep, Glob, Edit, Write
model: sonnet
color: blue
---
너는 기술 문서 작성자다. 독자는 이 프로젝트를 처음 보는 신입 개발자다.

원칙:
- 코드를 직접 읽고 확인한 사실만 쓴다. 추측은 "확인 필요"로 표시한다
- 짧은 문장, 예시 코드 포함, 한국어 존댓말
- 코드 파일은 수정하지 않는다. 문서 파일(.md)만 작성·수정한다

보고: 수정한 문서 목록과 각 문서에서 바뀐 부분 요약
블로그 작업에 응용 — 같은 방식으로 fact-checker(글 속 명령어·메뉴가 공식 문서와 맞는지 확인, 도구는 읽기·웹 검색만)나 proofreader(맞춤법·말투 검수) 에이전트를 만들 수 있습니다. 11단계 종합 프로젝트에서 실제로 씁니다.

5 팀원 부르는 3가지 방법

자연어로
"code-reviewer 에이전트로 방금 고친 코드 검토해줘". description이 잘 쓰여 있으면 말하지 않아도 Claude가 알아서 맡기기도 합니다.
@agent-code-reviewer
@로 콕 집어 부르기. 반드시 그 팀원에게 맡기고 싶을 때.
claude --agent code-reviewer
세션 전체를 그 에이전트로 시작. 리뷰만 하는 세션을 따로 열 때 편합니다.
@agent-code-reviewer 이번 브랜치에서 바뀐 Java 파일을 리뷰해 줘.
특히 MyBatis 매퍼의 SQL 인젝션 가능성을 중점적으로 봐 줘.

6 ★ 따라해 보기 — 여러 팀원에게 동시에 조사 맡기기

서브에이전트의 진짜 힘은 병렬입니다. 서로 관계없는 조사를 여러 명에게 동시에 맡기면 시간도 줄고, 메인 대화에는 요약만 남습니다.

1. 프로젝트 열기
처음 보는(또는 오래된) 프로젝트 폴더에서 Claude Code를 실행합니다.
2. 병렬 조사 요청
"병렬로", "각각 따로"라고 분명히 말하고, 팀원마다 맡을 범위를 나눠 줍니다.
서브에이전트 3개를 병렬로 써서 이 프로젝트를 조사해 줘.
각 에이전트는 파일을 수정하지 말고 읽기만 해.

1) controller 폴더: 어떤 API(URL)가 있는지 목록으로
2) service 폴더: 핵심 비즈니스 로직과 트랜잭션 처리 방식
3) resources 폴더: DB 연결 설정, SQL 매퍼 파일 구조

각자 결과를 10줄 이내로 요약해서 보고하고,
마지막에 네가 세 보고를 합쳐 "이 프로젝트 한 장 요약"을 만들어 줘.
3. 관찰하기
화면에 여러 에이전트가 동시에 도는 것이 보입니다. 끝나면 /context 로 메인 대화의 컨텍스트가 생각보다 적게 찬 것을 확인해 보세요.
# 블로그 글 버전
서브에이전트 2개를 병렬로 써 줘.
1) Claude Code 공식 문서에서 "서브에이전트" 관련 최신 변경 사항 조사
2) 내 초안(advanced-09.html)의 명령어·설정 항목 목록 뽑기
두 결과를 비교해서 초안에서 고쳐야 할 부분만 알려줘.

7 나눌 때와 나누지 않을 때

팀원이 많다고 일이 잘 되는 건 아닙니다. 회의만 늘어나는 팀도 있죠. 기준은 "독립적인가, 얽혀 있는가"입니다.

나누세요 ✔
서로 관계없는 폴더·주제 조사 · 결과만 필요하고 과정은 궁금하지 않은 작업 · 로그·대량 파일 뒤지기 · 권한을 좁혀야 하는 검토(리뷰, 감사) · 같은 형식의 반복 작업 여러 건
나누지 마세요
앞 단계 결과를 보고 다음을 정해야 하는 작업 · 한 파일을 여러 명이 동시에 고치는 작업 · 나와 여러 번 주고받으며 다듬어야 하는 작업 · 금방 끝나는 간단한 질문
애매하면
"이 작업을 서브에이전트로 나누는 게 좋을지 먼저 판단해 줘"라고 Claude에게 물어보세요.
Cowork에서도 — Cowork(데스크톱 앱)도 큰 일을 맡기면 내부적으로 서브에이전트를 여러 개 띄워 병렬로 작업합니다. 파일을 따로 만들지 않아도 "자료 조사와 표 정리를 동시에 나눠서 해줘"처럼 부탁하면 됩니다. 에이전트 정의 파일을 직접 만들고 권한을 세밀하게 정하는 것은 Claude Code 쪽입니다.

8 비용 — 팀원이 많을수록 토큰도 늘어납니다

팀원 한 명 한 명이 각자 파일을 읽고 생각합니다. 3명을 병렬로 쓰면 대략 3명분의 사용량이 나간다고 생각하세요.

model: haiku
★ 파일 찾기·목록 뽑기 같은 가벼운 조사 담당은 Haiku로. 빠르고 저렴합니다.
꼭 필요한 만큼만
에이전트 수를 늘리기 전에 "정말 병렬이 필요한가"를 먼저 생각합니다. 작은 일에 팀을 꾸리면 배보다 배꼽이 큽니다.
/usage
병렬 작업 전후로 사용량을 확인하는 습관을 들이세요. 12단계에서 자세히 다룹니다.

가벼운 조사 전용 팀원 예 — .claude/agents/file-scout.md

---
name: file-scout
description: 특정 키워드·클래스가 어느 파일에 있는지 빠르게 찾을 때 사용
tools: Read, Grep, Glob
model: haiku
---
요청받은 대상을 찾아 "파일 경로:줄 번호 — 한 줄 설명" 형식으로만 보고한다.

9 정리 & 체크리스트

서브에이전트 = 자기 책상(컨텍스트)에서 따로 일하고 요약만 보고하는 팀원. 아래를 모두 해봤다면 9단계 완료입니다.

☐ 개념
서브에이전트가 컨텍스트 문제를 어떻게 줄이는지 설명할 수 있다
☐ 기본 팀원
Explore · Plan · general-purpose 의 차이를 안다
☐ 만들기
★ 대화로 하나, 파일로 하나 — code-reviewer 등 예제를 .claude/agents/ 에 만들었다
☐ 호출
자연어, @agent-이름, claude --agent 세 가지로 불러 봤다
☐ 병렬
3개 팀원에게 동시에 조사를 맡기고 요약을 합쳐 받아 봤다
☐ 판단 · 비용
나눌 때와 나누지 않을 때를 구분하고, 가벼운 조사는 model: haiku 로 두었다
6~9단계로 플러그인 상자에 들어갈 부품(스킬·명령어·훅·에이전트)을 모두 만들어 봤습니다. 다음 단계에서는 이 팀이 내가 없어도 정해진 시간에 알아서 일하도록 자동화합니다.
이전 글: 심화 8단계 커스텀 명령어와 훅(Hook) · 다음 글: 심화 10단계 자동화 — 내가 없어도 일하는 Claude
공식 문서: 서브에이전트 · 플러그인 · 비용 관리

 

 

 

 

심화 8단계 커스텀 명령어와 훅(Hook)

"부를 때 실행되는 단축 버튼"과 "그 순간이 오면 무조건 실행되는 규칙" 만들기

Claude 심화 과정 8/12 · 2026년 9월 기준 · ⏱ 1~2시간 · ★ = 꼭 해볼 것

이번 단계에서 배우는 것 — 이번 글은 Claude Code 기능입니다. 기초 과정에서 익힌 터미널 사용과 JSON 파일 편집에 익숙하면 수월합니다.
커스텀 명령어
자주 하는 부탁을 /pr-summary 같은 한 단어로 만들기 (요즘은 스킬로 통합)
훅의 개념
어떤 "순간(이벤트)"에 무엇을 걸 수 있는지, 설정 파일은 어디에 두는지
실습 3종
★ 자동 포맷 · 위험 명령 차단 · 작업 완료 알림
안전하게 쓰기
훅은 내 권한으로 도는 셸 명령이라는 점, 무한 루프 조심하기

1 명령어 vs 훅 — "부탁"과 "규칙"

둘 다 "자동화"처럼 보이지만 성격이 완전히 다릅니다.

회사로 비유하면, 명령어는 "김 대리, 주간보고 양식대로 정리해 줘"라고 내가 부를 때만 움직이는 부탁입니다. 훅은 "퇴근 전에는 반드시 문단속" 같은 사내 규칙입니다. 누가 부르지 않아도, 그 순간이 오면 무조건 실행됩니다.

커스텀 명령어
내가 /이름 을 입력할 때 실행. 내용은 Claude에게 주는 지시문(프롬프트)이라 Claude가 판단해서 수행합니다.
훅(Hook)
"파일을 고친 직후", "명령을 실행하기 직전" 같은 순간에 자동 실행. 내용은 셸 명령이라 Claude의 판단과 상관없이 반드시 실행됩니다.
언제 훅을 쓰나? — CLAUDE.md에 "파일 고치면 꼭 포맷 돌려"라고 적어도 Claude가 가끔 잊을 수 있습니다. 절대 빠지면 안 되는 일은 부탁(CLAUDE.md·명령어) 대신 규칙(훅)으로 거세요.

2 커스텀 명령어 만들기 — 이제는 스킬로

예전에는 .claude/commands/ 폴더에 md 파일을 두는 방식이었습니다. 지금은 명령어가 스킬로 통합되었습니다.

.claude/commands/deploy.md
기존 방식. 여전히 동작합니다. 이미 만들어 둔 명령어는 그대로 두어도 됩니다.
.claude/skills/deploy/SKILL.md
★ 새 방식. 둘 다 똑같이 /deploy 를 만듭니다. 참고 파일·스크립트를 함께 둘 수 있어 새로 만들 땐 스킬을 권장합니다.

따라해 보기: /pr-summary 명령어 만들기

1. 폴더 만들기
프로젝트 루트에 .claude/skills/pr-summary/ 폴더를 만듭니다. (모든 프로젝트에서 쓰려면 ~/.claude/skills/)
2. SKILL.md 작성
아래 내용을 붙여넣습니다.
---
name: pr-summary
description: 현재 브랜치의 변경 사항으로 PR 설명 초안을 만든다
argument-hint: [관련 이슈 번호]
disable-model-invocation: true
---
## 현재 변경 사항
!`git diff HEAD`

## 할 일
위 변경 사항을 보고 PR 설명을 한국어로 작성해 줘.
- 제목 한 줄
- 변경 요약 (3~5줄 불릿)
- 테스트 방법
- 관련 이슈: $ARGUMENTS
3. 실행
Claude Code에서 /pr-summary 142 라고 입력합니다.

여기 쓰인 문법 정리

!`git diff HEAD`
Claude가 읽기 전에 명령을 먼저 실행해서 그 결과를 본문에 끼워 넣습니다. 매번 "diff 보여줘"라고 말할 필요가 없습니다.
$ARGUMENTS
명령어 뒤에 적은 말이 들어갑니다. /pr-summary 142 면 "142". 개별 인자는 $0 $1.
disable-model-invocation: true
Claude가 알아서 꺼내 쓰지 못하게 하고, 내가 입력할 때만 실행. 배포·커밋처럼 타이밍이 중요한 명령에 씁니다.
블로그 작업에 응용 — "/new-post 주제"를 입력하면 프로젝트의 sample.html 스타일로 초안을 만드는 명령어도 같은 방식으로 만들 수 있습니다. 6단계 스킬과 다른 점은 disable-model-invocation 으로 "내가 부를 때만"으로 묶어 둔다는 것뿐입니다.

3 훅의 기본 개념 — 어떤 "순간"에 걸 수 있나

훅은 이벤트(순간) + 조건(matcher) + 실행할 명령 세 가지로 이루어집니다. 자주 쓰는 이벤트는 아래와 같습니다(이 밖에도 더 있습니다).

SessionStart
세션이 시작될 때 — 개발 환경 정보를 미리 알려주기 등
UserPromptSubmit
내가 메시지를 보낸 직후, Claude가 처리하기 전
PreToolUse
★ 도구 실행 직전 — 위험한 명령 차단
PermissionRequest
권한 승인 창이 뜰 때
PostToolUse
★ 도구 실행 직후 — 자동 포맷·린트
Notification
Claude가 알림을 보낼 때(입력·승인 대기 등) — OS 알림 띄우기
Stop
Claude가 응답을 마쳤을 때 — "작업 끝" 알림
PreCompact
대화 압축(compact) 직전
SessionEnd
세션이 끝날 때 — 정리 작업
// 훅 설정의 기본 뼈대
{
  "hooks": {
    "PreToolUse": [                       // ① 이벤트
      {
        "matcher": "Bash",                // ② 어떤 도구일 때? (Bash, Edit|Write, * ...)
        "hooks": [
          { "type": "command",            // ③ 실행할 것
            "command": "실행할 셸 명령",
            "timeout": 600 }
        ]
      }
    ]
  }
}

위 뼈대의 // 뒷부분은 이해를 돕기 위한 설명입니다. JSON 파일에는 주석을 넣을 수 없으니 실제 설정에는 빼고 쓰세요.

matcher
"*" 또는 빈 값 = 전부, "Edit|Write" = 둘 중 하나, 그 밖엔 정규식. 대소문자를 구분합니다(bash 는 안 걸림).
훅이 받는 정보
표준 입력(stdin)으로 JSON이 들어옵니다. tool_name, tool_input(실행하려는 명령·파일 경로), cwd, session_id 등.

4 설정 파일은 어디에? — 위치와 우선순위

훅은 별도 파일이 아니라 settings.json 안의 "hooks" 항목에 적습니다. 어느 파일에 적느냐에 따라 적용 범위가 달라집니다.

~/.claude/settings.json
user — 내 모든 프로젝트에 적용. 알림 훅처럼 개인 취향인 것.
.claude/settings.json
project — 깃에 커밋해서 팀과 공유. 포맷·차단 규칙처럼 팀 전체가 지켜야 할 것.
.claude/settings.local.json
local — 이 프로젝트에서 나만. 커밋하지 않습니다.
우선순위 — 회사 관리 설정(managed) > 명령줄 옵션 > local > project > user 순입니다. 규칙이 겹치면 더 좁은(가까운) 쪽이 이깁니다. 회사가 정한 관리 설정은 개인이 덮어쓸 수 없습니다.

5 실습 ① 파일을 고치면 자동 포맷 PostToolUse

Claude가 파일을 수정(Edit)하거나 새로 쓸(Write) 때마다 포매터가 자동으로 돌게 합니다. 프론트엔드 프로젝트라면 prettier를 예로 들 수 있습니다.

1. 파일 열기
프로젝트의 .claude/settings.json 을 엽니다(없으면 만듭니다).
2. 훅 추가
아래 내용을 넣습니다. 이미 다른 설정이 있다면 "hooks" 부분만 합칩니다.
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
          }
        ]
      }
    ]
  }
}

전체 폴더를 포맷하는 npx prettier --write . 보다, 위처럼 stdin JSON에서 방금 고친 파일 경로만 꺼내(jq) 그 파일만 포맷하면 훨씬 빠릅니다. jq 가 없다면 먼저 설치하세요.

3. 확인
Claude에게 "src/app.js 에 함수 하나 추가해줘"라고 시킨 뒤, 파일이 포맷되어 있는지 봅니다.
Java·Spring 개발자라면 — command 부분만 팀에서 쓰는 포매터로 바꾸면 됩니다. 예를 들어 빌드 도구에 포매터 플러그인이 설정되어 있다면 그 실행 명령을 넣거나, 포매터 CLI를 호출하는 작은 스크립트를 만들어 연결하세요. 빌드 전체를 돌리는 명령은 느리니 고친 파일만 처리하는 방식을 권합니다. 무엇을 넣을지 모르겠다면 Claude에게 "우리 프로젝트 빌드 설정을 보고 PostToolUse 포맷 훅 명령을 만들어줘"라고 물어보세요.

6 ★ 실습 ② 위험한 명령 차단 PreToolUse

Claude가 셸 명령을 실행하기 직전에 검사해서, 위험한 명령이면 막습니다. Oracle 같은 DB를 다루는 분이라면 특히 추천합니다.

1. 스크립트 만들기
.claude/hooks/block.sh 파일을 만들고 아래 내용을 넣습니다.
#!/bin/bash
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')
if echo "$COMMAND" | grep -q "drop table"; then
  echo "Blocked: dropping tables is not allowed" >&2
  exit 2
fi
exit 0
2. 실행 권한 주기
이걸 빼먹으면 훅이 동작하지 않습니다.
chmod +x .claude/hooks/block.sh
3. 훅 등록
.claude/settings.json 에 추가합니다. $CLAUDE_PROJECT_DIR 은 프로젝트 루트 경로로 바뀌므로 어느 폴더에서 실행해도 스크립트를 찾습니다.
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block.sh"
          }
        ]
      }
    ]
  }
}
4. 시험
Claude에게 부탁해서 차단되는지 확인합니다.
테스트용이야. 셸에서 echo "drop table users" 를 실행해 봐.
막히면 어떤 메시지를 받았는지 알려줘.

종료 코드(exit code)의 의미

exit 0
성공 — 그대로 진행.
exit 2
★ 차단 — 도구 실행을 막고, stderr(>&2)로 쓴 메시지를 Claude에게 "이유"로 전달합니다. Claude는 그걸 보고 다른 방법을 찾습니다.
그 밖의 코드
훅 자체의 오류로 처리되고 작업은 막지 않습니다. 차단하려면 반드시 2
더 정교하게 — 위 예시는 소문자 "drop table"만 잡습니다. 실제로는 grep -qi(대소문자 무시)로 바꾸고 truncate, rm -rf 등 막을 단어를 늘리세요. 종료 코드 대신 JSON으로 permissionDecision 을 allow·deny·ask 중 하나로 돌려주는 방법도 있습니다(ask 는 나에게 확인을 받게 함).

7 실습 ③ 작업이 끝나면 알림 받기 Notification · Stop

긴 작업을 맡기고 다른 창에서 일하다 보면, Claude가 승인을 기다리는지 모를 때가 많습니다. 알림 훅을 걸어 둡니다. 개인 취향이니 user 설정(~/.claude/settings.json)에 넣는 것을 추천합니다.

예시 (Linux) — notify-send 사용

{
  "hooks": {
    "Notification": [
      { "matcher": "",
        "hooks": [ { "type": "command",
          "command": "notify-send 'Claude Code' 'Claude가 확인을 기다리고 있어요'" } ] }
    ],
    "Stop": [
      { "hooks": [ { "type": "command",
          "command": "notify-send 'Claude Code' '작업이 끝났어요'" } ] }
    ]
  }
}
# 예시 (macOS) — command 부분만 바꿔 넣기
osascript -e 'display notification "작업이 끝났어요" with title "Claude Code"'
예시일 뿐입니다 — 알림 명령은 운영체제마다 다릅니다(Windows는 또 다른 방법이 필요). 내 환경에 맞는 명령을 모르겠다면 "내 OS에서 알림을 띄우는 Notification 훅을 만들어줘"라고 Claude에게 물어보세요. 소리를 내거나 메신저 웹훅으로 보내는 것도 가능합니다.

8 확인하기와 주의사항

/hooks
지금 적용된 훅을 이벤트별로 보여주는 읽기 전용 화면입니다. 수정은 settings.json 파일을 직접 고쳐야 합니다.
"disableAllHooks": true
settings.json에 넣으면 훅을 한꺼번에 끕니다. 뭔가 이상할 때 원인이 훅인지 가려내는 용도로 좋습니다.

꼭 기억할 3가지

내 권한으로 실행
훅은 Claude가 아니라 내 컴퓨터에서 내 계정 권한으로 도는 셸 명령입니다. 승인 창도 없이 실행되므로, 잘못 쓰면 파일이 지워질 수도 있습니다.
복붙 전 검토
블로그·깃허브에서 가져온 훅(이 글 포함!)은 명령이 무슨 일을 하는지 이해한 뒤 넣으세요. 모르면 Claude에게 "이 훅이 뭘 하는지 설명해줘"부터.
무한 루프 조심
예를 들어 Stop 훅이 매번 "아직 끝내지 마"라고 막으면 Claude가 멈추지 못하고 계속 돕니다. 훅이 또 다른 훅을 부르는 구조도 피하세요. 이상하면 disableAllHooks 로 바로 끄기.

9 정리 & 체크리스트

명령어는 "부를 때", 훅은 "그 순간 무조건". 아래를 모두 해봤다면 8단계 완료입니다.

☐ 차이 이해
명령어(부탁)와 훅(규칙)의 차이를 예를 들어 설명할 수 있다
☐ 명령어
.claude/skills/pr-summary/SKILL.md 를 만들어 /pr-summary 를 실행해 봤다
☐ 자동 포맷
PostToolUse 훅으로 파일 수정 후 포매터가 도는 것을 확인했다
☐ 위험 명령 차단
★ PreToolUse 스크립트로 차단되는 것을 보고, exit 2 의 의미를 이해했다
☐ 알림
내 OS에 맞는 Notification·Stop 알림 훅을 user 설정에 넣었다
☐ 점검 습관
/hooks 로 적용 상태를 보고, 문제 시 disableAllHooks 로 끄는 법을 안다
여기서 만든 명령어와 훅은 7단계 플러그인의 skills/ 와 hooks/hooks.json 에 넣어 팀에 그대로 배포할 수 있습니다. 다음 단계에서는 플러그인의 마지막 부품, 서브에이전트를 만듭니다.
이전 글: 심화 7단계 플러그인과 마켓플레이스 · 다음 글: 심화 9단계 서브에이전트 — AI 팀 꾸리기
공식 문서: 훅 시작하기 · 훅 레퍼런스 · 스킬(명령어) · 설정 파일

+ Recent posts