심화 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(메모리)

+ Recent posts