아키텍처
intro에서 두 게이트와 두 트랙을 짚었습니다. 여기서는 그게 에이전트 팀과 Phase 흐름으로 어떻게 생겼는지, 산출물이 어디에 떨어지는지를 봅니다. 눈여겨볼 건 두 가지입니다. 에이전트끼리 본문을 채팅으로 주고받지 않고 _workspace/ 파일로 인계한다는 것, 그리고 발행 직전에 두 게이트가 직렬로 박혀 있다는 것입니다.
Phase 0~5 흐름
섹션 제목: “Phase 0~5 흐름”자연어 트리거가 들어오면 blog-orchestrator가 Phase를 라우팅합니다. “발행까지 해줘”는 Phase 05 전부, “검수까지만”은 Phase 04, “번역만”은 Phase 0과 Production의 localization 부분만 도는 식입니다.
graph TB start[자연어 트리거 - 이 주제로 글 써줘] p0[Phase 0 Orientation - 로컬 상태 확인, slug 충돌 검사] p1[Phase 1 Strategy - brief 생성] p2[Phase 2 Production - 리서치, 집필, 편집, 번역] p3[Phase 3 Quality - AdSense, SEO, E-E-A-T, 한영 정합] p4[Phase 4 AI Pattern Gate - 14 카테고리 점수] p5[Phase 5 Publish - Blogger 업로드]
start --> p0 --> p1 --> p2 --> p3 --> p4 p4 -->|합격 30 미만| p5 p4 -->|불합격 60 초과| p2 p3 -->|FAIL| stop[발행 중단]Phase 3과 Phase 4는 둘 다 게이트입니다. Phase 3의 품질 판정이 FAIL이면 발행 전에 멈추고, NEEDS_REVIEW면 Phase 2 산출물을 고쳐 다시 돕니다. Phase 4의 AI-smell 점수가 불합격이면 Phase 2로 되돌아가 재작성하고, 최대 2회까지 돌다가 그래도 안 되면 사용자에게 넘깁니다. 두 게이트를 모두 통과한 글만 Phase 5의 Blogger 업로드에 닿습니다.
에이전트 팀
섹션 제목: “에이전트 팀”여섯 에이전트가 Phase와 트랙에 매핑됩니다. 각 에이전트의 책임과 읽는 스킬은 AI_AUTOMATION.md의 Module Source Map에 한 줄씩 박혀 있습니다.
| 에이전트 | 트랙 | 책임 |
|---|---|---|
strategy-agent | 집필 | Phase 1. 제목 후보, slug, 카테고리, 타깃 독자, 키워드, 검색 의도, 아웃라인, 차별화 각도 |
production-agent | 집필 | Phase 2. 리서치, 본문 집필, 편집, 한영 번역 |
quality-agent | 집필 | Phase 3. AdSense, SEO, E-E-A-T, 한영 정합 판정 |
content-lead | 마케팅 | 발행 후 distribution 카피 작성과 편집 |
seo-discovery-lead | 마케팅 | 키워드 발굴, AI-SEO 각도 |
marketing-director | 마케팅 | 발행 후 배포 라우팅. X, Reddit, Hacker News, AI-SEO |
집필 트랙 셋(strategy, production, quality)은 Phase 1~3을 채우고, 마케팅 트랙 셋(marketing-director, content-lead, seo-discovery-lead)은 발행 후 배포를 채웁니다. AI Pattern Gate(Phase 4)는 에이전트가 아니라 ai-pattern-check 스킬이 직접 도는 자리입니다.
집필과 마케팅, 두 트랙
섹션 제목: “집필과 마케팅, 두 트랙”같은 채널에서 두 트랙이 공존합니다. 진입점만 갈리고, 발행물이라는 공유 자산을 두고 만납니다.
graph LR user[사용자 발화] user -->|이 주제로 글 써줘| bo[blog-orchestrator] user -->|이 글 퍼뜨려줘| md[marketing-director]
bo --> post[발행된 글 - Blogger] post --> md md --> x[X 스레드] md --> reddit[Reddit] md --> hn[Hacker News] md --> aiseo[AI-SEO - LLM 인용 최적화]집필 트랙이 글을 발행하면, 그 발행물이 마케팅 트랙의 입력이 됩니다. 글을 쓰지 않고 이미 발행된 글의 배포만 돌리려면 마케팅 트랙을 직접 부릅니다. 두 트랙이 한 오케스트레이터에 묶이지 않은 이유는 집필과 배포의 호흡이 다르기 때문입니다. 글 한 편을 쓰는 동안 배포는 여러 번 일어나고, 배포만 다시 돌리고 싶은 자리가 잦습니다.
디렉토리 계약
섹션 제목: “디렉토리 계약”모든 에이전트 산출물은 _workspace/ 한 폴더 안에 격리됩니다. _workspace/ 바깥의 scripts/, .claude/, AI_AUTOMATION.md, CLAUDE.md는 사람 승인 없이 수정하거나 삭제하지 않습니다. 이게 보안 기준선 S2입니다.
_workspace/├── briefs/│ ├── {slug}-brief.md Phase 1 전략│ ├── {slug}-research.md Phase 2 리서치│ ├── {slug}-edit-notes.md Phase 2 편집 노트│ ├── {slug}-quality.md Phase 3 품질 보고서│ └── {slug}-ai-check.md Phase 4 AI-smell 보고서├── posts/│ ├── new/{ko,en}/{category}/{slug}.md 발행 대기 (staging)│ ├── {ko,en}/{category}/{slug}.md 발행 후 archive│ └── images/ 임베드 이미지└── pages/{ko,en}/*.md Blogger 정적 페이지 (about, privacy 등)staging과 archive가 갈리는 자리가 핵심입니다. 글은 posts/new/ 아래에서 작성되고, 발행 스크립트가 업로드에 성공한 다음 같은 상대 경로를 보존하며 posts/ 아래로 옮깁니다. blogger_post_id와 blogger_url은 staging 파일에 박지 않습니다. 업로드 성공 후 스크립트가 채웁니다.
카테고리가 분명하지 않으면 도구나 플랫폼 분석은 ai, 의견이나 워크플로 에세이는 thoughts로 둡니다.
frontmatter 계약
섹션 제목: “frontmatter 계약”한글본과 영문본을 묶는 자리는 frontmatter입니다.
title: "..."slug: "{slug}"date: "YYYY-MM-DD"description: "..."keywords: - "..."lang: "ko"hreflang_en: "/posts/en/{category}/{slug}"영문본은 lang: "en"과 hreflang_ko로 반대편을 가리킵니다. 두 본문이 서로를 hreflang으로 가리키기 때문에, 한쪽만 발행되거나 경로가 어긋나면 검색 엔진이 두 글을 짝으로 인식하지 못합니다. 경로 매핑이 결정적이라 사람이 매번 맞출 필요가 없습니다.
자동화 진입점은 한 곳을 가리킨다
섹션 제목: “자동화 진입점은 한 곳을 가리킨다”.claude/agents/와 .claude/skills/는 Claude Code용 저장 위치이고, AGENTS.md는 Codex용 진입점입니다. 둘 다 AI_AUTOMATION.md를 읽습니다. Phase 정의, Module Source Map, 디렉토리 계약, 게이트 임계값이 그 한 파일에 모여 있어, 어느 런타임에서 작업하든 Phase와 산출물 계약이 같습니다.
다음 섹션은 verification입니다. Phase 3의 quality-check가 네 축으로 무엇을 판정하는지, Phase 4의 ai-pattern-check가 14 카테고리를 어떻게 점수화하는지, 그리고 보안 기준선 S1~S8이 어느 자리에서 강제되는지를 봅니다.