주제 불문 뉴스 다이제스트 자동화 — Planner→Generator→Evaluator 하네스 스킬 만들기

Claude Code 스킬로 “AI 뉴스 다이제스트” 자동 생성기를 만들어두었는데, 팀에서 “그럼 암호화폐 뉴스도, 반도체 뉴스도, K-콘텐츠 뉴스도 이렇게 만들어 주면 안 되나?”라는 요구가 나왔다. 주제 하나 바꿔서 카피하면 될 줄 알았는데, 그렇게 단순하지 않았다. 이 글은 그 일반화 스킬 news-digest-harness v1.0.0을 만든 과정과, 왜 이런 구조가 필요한지를 정리한 기록이다.

GitHub: github.com/greeun/news-digest-harness (MIT)

왜 “뉴스 좀 요약해줘”는 반드시 실패하는가

LLM에게 “오늘의 ○○ 뉴스 정리해줘”라고 던지면, 결과는 예외 없이 다음 세 가지 방식으로 망가진다.

단일 에이전트 뉴스 요약 — 3대 실패 모드 🎯 주제 드리프트 반도체 뉴스인데 삼성 스마트폰 기사가 “화제성” 이유로 끼어든다 🗣️ 번역투 한국어 “~하는 것으로 알려졌다.” 영어 소스를 그대로 직역한 문장 🎨 제네릭 AI HTML 매번 똑같은 보라색 그라데이션 + 흰색 카드 템플릿 (주제 불문)
그림 1. 단일 에이전트 뉴스 요약의 3대 실패 모드

중요한 점은, 이 세 가지가 더 나은 프롬프트로 고쳐지지 않는다는 것이다. “주제에서 벗어나지 마” “자연스러운 한국어로 써” “예쁘게 디자인해” 같은 주문을 길게 붙일수록 모델은 모든 지시를 평균화하며 흐려진다. 한 에이전트가 생성과 평가를 동시에 하기 때문이다.

Anthropic의 “Harness Design” 논문이 제시한 해법

2026년 3월, Anthropic의 Prithvi Rajasekaran이 Harness Design for Long-Running Application Development라는 글을 공개했다. 요지는 단순하다: 생성하는 에이전트와 평가하는 에이전트를 물리적으로 분리하라. GAN의 발견을 LLM 파이프라인에 이식한 구조다.

이 스킬은 그 원칙을 뉴스 다이제스트 도메인에 이식했다. 세 에이전트 — Planner → Generator → Evaluator — 는 서로의 추론 과정을 볼 수 없고, 오직 파일을 통해서만 소통한다.

Planner → Generator → Evaluator 하네스 사용자: “암호화폐 뉴스 정리해줘” ① Planner 주제 정규화 카테고리 자동 도출 WebSearch/WebFetch ② Generator 스프린트 계약 self-contained HTML 주제 인식 디자인 ③ Evaluator 루브릭 채점 + 증거 주제 정합성 2× 가중 Instant-FAIL 체크 spec.md report.md critique.md PASS / FAIL + 블로킹 이슈 FAIL — 새 Generator 세션 (컨텍스트 리셋) spec.md + critique.md만 전달, 최대 3회 반복 점수 상승 추세 → refine / 정체 → pivot PASS — 산출물 전달 news-digest-{topic}-{datetime}.html 브라우저에서 바로 열기 재시도
그림 2. 세 에이전트는 파일을 통해서만 소통한다 (추론 공유 금지)

왜 주제를 바꾸는 게 단순 카피로 안 되었는가

기존 ai-news-digest-harness는 AI 도메인에 최적화되어 있었다. 카테고리가 [LLM, Robotics, Research, Industry, Policy, Startup, Open Source, Hardware, Application, People, Korea]로 하드코딩되어 있고, 검색 쿼리도 AI 기업명(OpenAI, Anthropic, Google AI…)에 특화되어 있다. 이것을 주제 불문 일반화하려면 5가지를 전부 뜯어고쳐야 했다.

주제 → 카테고리 자동 도출 (Planner가 동적 생성) 암호화폐 시장/시세 · 규제 · 프로젝트 · 보안 · 기업/투자 · 기술 · 한국 반도체 제조/공정 · 설계/IP · 장비/소재 · 시장/수요 · M&A · 정책/규제 · 한국 K-콘텐츠 드라마 · 영화 · K-POP · 예능/OTT · 해외 진출 · 산업/정책 · 인물 기후변화 과학/관측 · 정책/COP · 재생에너지 · 탄소시장 · 재난 · ESG · 한국 테슬라 실적/주가 · 제품 · FSD/자율주행 · 배터리 · 공장 · 경쟁/소송 · 머스크
그림 3. 주제마다 Planner가 4–8개의 적합한 하위 카테고리를 런타임에 도출

즉 Planner는 단순히 검색만 하는 게 아니라, 주제를 이해하고 그 도메인에 맞는 분류 체계를 스스로 설계해야 한다. 이게 가능해지니 같은 파이프라인으로 암호화폐·반도체·K-콘텐츠·기후·부동산 뉴스가 모두 커버된다.

루브릭에 “주제 정합성”을 1순위로 박은 이유

일반화하면서 가장 경계해야 할 실패는 주제 드리프트AI 템플릿 잔존이다. 전자는 “반도체 뉴스 다이제스트인데 애플이 비전프로 후속작을 발표했다”가 섞여 들어오는 것. 후자는 제목이 아직 “AI 뉴스 다이제스트”라고 남아있거나 카테고리 필터에 “LLM”, “Robotics”가 튀어나오는 것이다.

그래서 평가 루브릭을 6개 → 7개로 늘리고, 주제 정합성(Topic Relevance)을 1번 축으로, 가중치 2배로 박았다. 원문 논문의 경고 — “Claude는 기본적으로 관대한 QA 에이전트다. 스스로 발견한 문제를 ‘별것 아니다’라고 합리화하며 통과시킨다” — 를 구조로 봉쇄하기 위해 Instant-FAIL 조건도 추가했다.

7-기준 루브릭 — 2× 가중이 Claude의 약점을 정조준 ① 주제 정합성 2× 🔥 NEW ② 콘텐츠 완성도 ③ 요약 품질 ④ 디자인 품질 ⑤ 기술적 정확성 ⑥ 인터랙티비티 ⑦ 접근성 & 완성도 ⚡ Instant-FAIL: OOS 기사 1개 · title/h1 AI 잔존 · 카테고리 잔존 · spec 누락 · 렌더 실패 → 즉시 탈락
그림 4. Claude가 기본적으로 약한 세 축(주제·한국어·디자인)에 2× 가중

가중치 2배 지점은 “모델이 이 영역에서는 혼자 놔두면 실패한다”는 가정을 인코딩한 것이다. 콘텐츠 완성도기술적 정확성은 Claude가 안정적으로 잘하는 영역이라 1배로 충분하다. 반면 한국어 요약의 자연스러움디자인이 주제 분위기에 맞는지는 Claude가 기본값으로는 처참하게 실패하는 지점이다. 그래서 압력을 더 건다.

컨텍스트 불안(Context Anxiety) — 원문 논문이 이름 붙여준 버그

Rajasekaran의 논문에서 가장 유용한 개념이 이것이다. 긴 세션에서 에이전트가 “이쯤 하면 됐지”라며 조급하게 마무리하는 현상. 원인은 컨텍스트 창이 차오르는 것에 대한 회피 반응이라고 본다. 압축(compaction)으로는 해결되지 않는다. 대화는 요약되어도 불안 자체는 요약된 요약 속에 남아있기 때문이다.

해법은 컨텍스트 리셋: 완전히 새 세션을 열고, 이전 세션이 남긴 handoff.md만 읽고 계속한다. 이 스킬에서는 Evaluator가 FAIL 판정을 내리면 Generator를 새 세션으로 디스패치한다. 기존 Generator의 대화 히스토리는 완전히 버리고, spec.md + critique.md만 건넨다.

실제 만드는 과정에서 겪은 것들

1. 단순 카피는 안 된다 — 공명 지점을 찾아야 한다

처음에는 ai-news-digest-harness를 복사하고 “AI”를 “{topic}”으로 바꾸면 끝일 줄 알았다. 실패. Generator가 spec.md를 무시하고 이전 AI 템플릿의 카테고리 구조(LLM, Robotics…)를 그대로 써버리는 경우가 나왔다. 모델이 “비슷한 모양”을 기억하는 스타일 자석(style magnet) 현상이다.

해결: Generator 프롬프트에 “AI-news 템플릿을 복붙하지 말 것”을 anti-pattern으로 명시하고, Evaluator의 adversarial probe에 “HTML에서 AI, LLM, Robotics 문자열을 검색해 spec.md의 정당한 뉴스가 아니면 즉시 FAIL”을 추가했다.

2. “디자인이 주제 분위기에 맞는가”를 평가 가능하게 만들기

가장 애매했던 부분이다. “암호화폐 뉴스는 테키하게, K-콘텐츠는 에디토리얼하게, 기후는 그라운디드하게 디자인해라” — 이걸 Evaluator가 어떻게 채점하지?

논문의 교훈을 차용했다: 참조어(magazine-like, Apple-style…)가 아니라 품질 기술어로 쓰라. 참조어는 스타일 자석을 만든다. 대신 “topic-appropriate palette”, “color fit-for-topic” 같은 품질 기준을 루브릭에 박고, 캘리브레이션 노트에 “기후 다이제스트가 뜨거운 빨강 팔레트면 3점 이하, K-POP 다이제스트가 무채색 회색이면 3점 이하” 같은 구체적 실패 예시를 수록했다.

3. 파일명에 주제 슬러그 박기

사소해 보이지만 중요하다. 파일명이 news-digest-{topic_slug}-{YYYYMMDD-HHmmss}.html이면, Evaluator가 slug 누락만 봐도 Generator가 주제를 얼마나 내재화했는지 알 수 있다. 첫 디버깅 신호다. news-digest-crypto-20260417-143025.html은 제대로, ai-news-digest-20260417-143025.html은 오염된 결과.

ai-news-digest-harness와 무엇이 다른가

항목 ai-news-digest-harness news-digest-harness (이 스킬)
주제 AI로 고정 사용자 입력 임의 주제
카테고리 고정 11개 (LLM, Robotics, …) Planner가 주제별 4–8개 자동 도출
루브릭 기준 6개 7개 — 주제 정합성(2×) 추가
Instant-FAIL 5가지 조건 (OOS·AI 잔존·카테고리 잔존·누락·렌더 실패)
디자인 무드 고정 주제 유도 (crypto→테키, K-content→에디토리얼, …)
파일명 ai-news-digest-{datetime}.html news-digest-{topic_slug}-{datetime}.html
적대적 탐지 AI 템플릿 잔존 문자열 스캔

사용법 (설치 → 트리거 → 결과)

# 설치
git clone https://github.com/greeun/news-digest-harness.git \
  ~/.claude/skills/news-digest-harness

# Claude Code에서 트리거
"암호화폐 뉴스 정리해줘"
"반도체 뉴스 페이지 만들어줘"
"K-콘텐츠 뉴스 다이제스트"
"테슬라 최근 소식 모아줘"
"기후변화 뉴스 요약 페이지"

# 결과물
./news-digest-output/{topic_slug}/
  └── news-digest-{topic_slug}-20260417-143025.html
      # 브라우저에서 직접 열기 가능 (file:// 프로토콜)

옵션:

  • 지역 범위 — global / korea / both (기본: both, 해외 60–70% + 국내 30–40%)
  • 수량 — 기본 15–25개 (조정 가능)
  • 기간 — 기본 최근 7일
  • 추가 카테고리 — “헬스케어 AI도 넣어줘” 같은 런타임 지시 반영

정리 — 왜 이 구조가 앞으로 중요한가

단일 LLM 세션에 복잡한 일을 맡기면 자기평가 편향, 컨텍스트 불안, 스타일 자석 같은 구조적 버그가 반드시 발생한다. 프롬프트 엔지니어링으로 땜질할 수 있는 지점을 이미 지났다. 역할을 물리적으로 분리하고, 파일로만 소통하고, 평가를 적대적으로 만드는 것 — Anthropic의 논문은 이게 장시간 자율 에이전트의 기본 설계라고 주장했고, 이 스킬은 그 주장을 뉴스 다이제스트라는 작은 도메인에서 검증한 사례다.

같은 패턴을 블로그 포스트, 비즈니스 플랜, 마케팅 전략, 리서치 리포트에 이식하는 자매 스킬들이 이미 존재한다 (blog-post-harness, business-plan-harness, linkedin-post-harness). 하네스 패턴은 단일 도메인 트릭이 아니라, “LLM에게 길고 품질이 중요한 일을 시키는 법”의 표준 설계가 되어가고 있다.

전체 소스와 문서는 github.com/greeun/news-digest-harness (MIT 라이선스). 이슈/PR 환영.


참고 자료

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤