From novel-studio
Orchestrates 6 specialized agents in parallel/sequential phases to polish web novel episodes across 12+ axes including rules, story logic, platform optimization, and character vitality. Self-loops through episodes using novel-config.md for project-specific guardrails and custom axes. Invoke via /polish, /lint, or keywords.
How this skill is triggered — by the user, by Claude, or both
Slash command
/novel-studio:polishThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
6명의 전문 에이전트를 **Fan-out/Fan-in 병렬 구조**로 운용하여
6명의 전문 에이전트를 Fan-out/Fan-in 병렬 구조로 운용하여 에피소드를 순차적으로 12축(+ALIVE 4축, +프로젝트 커스텀 축) 정밀 윤문하는 자기 반복(self-loop) 스킬.
프로젝트 독립적: novel-config.md를 읽어 설정문서·가드레일·커스텀 축을 자동 적용한다.
다른 소설 프로젝트에서도 novel-config.md만 작성하면 동일하게 사용 가능.
Phase 1 (병렬 진단 — Agent 도구로 4개 동시 호출)
┌→ [rule-checker] ── BANNED, VOICE, TITLE, SILENCE, TRANS ─┐
[에피소드] ├→ [story-analyst] ── SCENE, LOGIC, UNIFORM (+커스텀) ─┤
├→ [platform-optimizer] ── HOOK, OPENING, MOBILE, SUMMARY ─┼→ [진단 통합]
└→ [alive-enhancer] ── ALIVE-1~4 (메아리,침묵,긴장점,거리감) ─┘
Phase 2 (순차 교정)
[진단 통합] → [revision-executor] → [교정된 에피소드]
Phase 3 (순차 검증)
[교정된 에피소드] → [revision-reviewer] → PASS / REVISE → (REVISE시 Phase 2 재실행)
| 에이전트 | 역할 | 담당 축 | Phase |
|---|---|---|---|
| rule-checker | 규칙 위반 진단 | BANNED, VOICE, TITLE, SILENCE, TRANS | 1 (병렬) |
| story-analyst | 서사·논리 분석 | SCENE, LOGIC, UNIFORM (+커스텀 축) | 1 (병렬) |
| platform-optimizer | 플랫폼 최적화 | HOOK, OPENING, MOBILE, SUMMARY | 1 (병렬) |
| alive-enhancer | 캐릭터 생동감 | ALIVE-1~4 | 1 (병렬) |
| revision-executor | 교정 실행 | 전체 통합 교정 | 2 (순차) |
| revision-reviewer | 교정 검증 | 과교정·신규오류·가드레일 | 3 (순차) |
/polish ← 기본 프로젝트의 다음 미완료 에피소드부터
/polish EP051 ← EP051부터 시작
/polish start ← EP001부터 전체 시작
/polish {프로젝트명} ← 특정 프로젝트 지정 (예: /polish 36억평)
/polish {프로젝트명} EP051 ← 특정 프로젝트 + 특정 에피소드
이 스킬의 핵심: 에피소드 하나를 완료한 뒤 스스로 다음 에피소드로 넘어간다. 외부 루프가 필요 없다. Claude 자체의 에이전틱 루프로 반복한다.
LOOP:
1. fix_plan.md에서 다음 미완료 에피소드 결정
2. 해당 에피소드에 대해 Phase 1→2→3 실행
3. fix_plan.md 업데이트
4. learnings.md 업데이트 (새 패턴 발견 시만)
5. alive-tracker.md 업데이트 (alive-enhancer 보고서 기반)
6. 전체 완료 확인
- 미완료 있음 → LOOP 반복 (다음 에피소드)
- 전체 완료 → "REVISION_COMPLETE" 출력하고 종료
완료 시 안내: "설정문서를 변경할 예정이라면 `/rewrite` 실행 후 `/polish`를 다시 실행하세요."
[x]일 때만 멈춘다./polish를 다시 치면 마지막 미완료 에피소드부터 이어간다.1. 프로젝트 결정
- $ARGUMENTS에서 프로젝트명 추출 (예: "36억평")
- 프로젝트명 지정 없으면: 프로젝트 디렉토리 탐색하여 novel-config.md가 있는 디렉토리 자동 감지
- novel-config.md가 여러 개면: 사용자에게 선택 요청
- novel-config.md가 없으면: references/project-config-template.md 안내 후 종료
2. novel-config.md 로드 및 **필수 필드 검증 게이트**
- {PROJECT_DIR}/novel-config.md 읽기
- **즉시 필수 필드 검증** (하나라도 누락 시 에러 출력 후 종료):
```
필수 필드 체크리스트:
- [ ] project.target_platform — 플랫폼명
- [ ] project.episode_dir — 에피소드 저장 디렉토리
- [ ] project.work_dir — 작업 디렉토리
- [ ] 설정문서 매핑.bootstrap — 부트스트랩 경로 (파일 존재 확인)
- [ ] 설정문서 매핑.character_core — 캐릭터 핵심 경로 (파일 존재 확인)
- [ ] 설정문서 매핑.character_detail — 캐릭터 상세 경로 (파일 존재 확인)
- [ ] EP 범위별 플롯 가이드 — 최소 1개 행 존재 (파일 존재 확인)
```
검증 실패 시:
```
❌ novel-config.md 필수 필드 누락: {누락 필드 목록}
polish 스킬을 실행하려면 위 필드를 채워주세요.
템플릿: ${CLAUDE_PLUGIN_ROOT}/skills/polish/references/project-config-template.md
```
- **target_platform 허용 집합 검증**:
- `project.target_platform`은 문피아, 네이버시리즈, 카카오페이지, 리디, 조아라, 노벨피아 중 하나여야 한다
- polish 스킬은 novel-config.md의 canonical 값만 사용하며 자동 매핑하지 않는다
- 비지원 값이면 에러 출력 후 종료:
```
❌ 허용되지 않는 target_platform: {현재값}
novel-config.md의 project.target_platform을 허용 플랫폼명으로 수정해주세요.
```
- 설정문서 경로 매핑 추출 → {CONFIG} 변수로 저장
- 보존 가드레일 추출
- 커스텀 축 존재 여부 확인
- 침묵 패턴 예외 캐릭터 확인
3. 작업 디렉토리 설정
- novel-config.md의 work_dir에서 fix_plan.md 읽기
- 없으면 생성 (EP001~마지막 화)
- learnings.md 읽기 (없으면 생성)
- alive-tracker.md 읽기 (없으면 생성)
4. $ARGUMENTS 확인
- "EP{NNN}" → 해당 에피소드부터 시작
- "start" → EP001부터
- 없음 → fix_plan.md의 다음 미완료부터
대상 에피소드 번호에 따라 참조할 설정문서를 결정한다. novel-config.md의 "EP 범위별 설정문서" 테이블에서 해당 EP의 플롯 문서와 캐릭터 시트를 선택.
{PLOT_DOC} = novel-config.md의 EP 범위 매핑에서 해당 EP에 맞는 플롯 가이드 경로
세부 플롯 가이드 열에 경로가 있고 파일이 존재하면 세부 가이드 우선
(범위 중첩 발견 시 경고 출력 후 첫 번째 매칭 행 사용)
{CHAR_CORE} = novel-config.md의 공통 문서 중 character_core 경로
{CHAR_DETAIL} = EP 범위별 설정문서 테이블의 세부 캐릭터 시트 열에 경로가 있고 파일이 존재하면
세부 캐릭터 시트 우선, 없으면 공통 문서의 character_detail 경로
{BOOTSTRAP} = novel-config.md의 공통 문서 중 bootstrap 경로
{GUIDE} = novel-config.md의 보조 참조 중 web_novel_guide 경로
{VERIFY} = novel-config.md의 보조 참조 중 verification 경로
{PLOT_MACRO} = novel-config.md의 보조 참조 중 plot_macro 경로
{EPISODE_DIR} = novel-config.md의 episode_dir 경로
{GUARD_RAILS} = novel-config.md의 보존 가드레일 목록
{CUSTOM_AXES} = novel-config.md의 커스텀 진단 축 섹션 (있을 경우)
{SILENCE_EXCEPT} = novel-config.md의 침묵 패턴 예외 캐릭터 (있을 경우)
이하 Phase 1~3의 에이전트 프롬프트에서 위 변수를 실제 값으로 치환하여 전달한다.
fix_plan.md에서 최상단 미완료([ ]) 항목을 가져온다.
SKIP 절대 금지. 모든 에피소드 전문 정독.
대상 에피소드(EP{NNN})의 직전 2화를 반드시 읽는다:
{EPISODE_DIR}/ep{NNN-2}.md — 직전전 화 전문 (존재할 경우){EPISODE_DIR}/ep{NNN-1}.md — 직전 화 전문검증 목적:
에피소드 간 시간 참조와 수치의 정합성을 구조적으로 검증한다. 단순히 "수치 확인"이 아니라, 아래 3단계를 반드시 수행한다.
1단계: 타임라인 추출 대상 에피소드와 직전 2화에서 모든 시간 마커를 추출한다:
2단계: 타임라인 교차대조 같은 사건/약속/예고에 대한 시간 참조가 직전 2화에서 모순되는지 확인한다.
3단계: 수치 교차대조 같은 대상에 대한 수치가 에피소드 간 일관되는지 확인한다:
검증_대상:
면적: ha, 에이커, 평 — 같은 대상의 면적이 화마다 다르면 [NUMBER] CRITICAL
자금: 달러, 원 — 같은 거래/빚/매출이 화마다 다르면 [NUMBER] CRITICAL
수확량: t/ha, 톤, 부셸 — 같은 수확의 수치가 화마다 다르면 [NUMBER] CRITICAL
인원: 가구 수, 명 — 같은 모임/조합의 인원이 화마다 다르면 [NUMBER] MAJOR
산술검증: 에피소드 내 계산이 맞는지 [NUMBER] MAJOR
교차대조_방법:
1. 대상 EP에서 모든 숫자+단위를 추출
2. 직전 2화에서 같은 대상의 숫자를 찾아 대조
3. 불일치 발견 시 [NUMBER] 또는 [TIMELINE] 태그 + 등급 부여
4. 어느 쪽이 정본인지 판단이 어려우면 양쪽 모두 보고
EP001은 직전 화 없이, EP002는 직전 1화만으로 진행한다. 직전 에피소드 정보는 Phase 1의 모든 에이전트에게 전달한다.
Agent 도구를 사용하여 4개 에이전트를 한 번의 메시지에 동시 호출한다.
보고서 저장 규칙: 각 에이전트의 진단 보고서를 _workspace/에 파일로 저장한다.
Phase 2의 revision-executor가 보고서 파일을 직접 Read하여 컨텍스트 전달 부담을 줄인다.
| 에이전트 | 보고서 저장 경로 |
|---|---|
| rule-checker | {WORK_DIR}/_workspace/07_rule-checker_report_ep{NNN}.md |
| story-analyst | {WORK_DIR}/_workspace/07_story-analyst_report_ep{NNN}.md |
| platform-optimizer | {WORK_DIR}/_workspace/07_platform-optimizer_report_ep{NNN}.md |
| alive-enhancer | {WORK_DIR}/_workspace/07_alive-enhancer_report_ep{NNN}.md |
[동시 호출 — 하나의 응답에 4개 Agent 도구 호출]
Agent("rule-checker"):
prompt: "EP{NNN} ({EPISODE_DIR}/ep{NNN}.md)에 대해 규칙 검증 5축 진단 수행.
직전 2화({EPISODE_DIR}/ep{NNN-2}.md, {EPISODE_DIR}/ep{NNN-1}.md)도 전문 정독하여
호칭·금지표현·침묵 패턴이 직전 화와 겹치거나 충돌하는지 확인.
★ 설정문서 로드 (novel-config.md 기준):
- {CHAR_DETAIL} — 보이스표(종결어미·길이·패턴), 호칭 규칙표(화자×청자)
- {CHAR_CORE} — 주인공 감정 표현 규칙 (크랙 문법 등)
침묵 패턴 예외 캐릭터: {SILENCE_EXCEPT}
에이전트 정의(rule-checker.md)의 축별 체크리스트와 등급 기준을 따라
${CLAUDE_PLUGIN_ROOT}/skills/polish/references/12-axes.md 축1~5 참조하여 진단.
각 축의 grep 패턴으로 기계적 검출 후 정독으로 오탐 제거.
VOICE는 설정문서 보이스표, TITLE은 호칭 규칙표와 1:1 대조.
Rule Check Report 형식으로 출력."
Agent("story-analyst"):
prompt: "EP{NNN} ({EPISODE_DIR}/ep{NNN}.md)에 대해 SCENE + LOGIC + UNIFORM 3축 진단 수행.
${CLAUDE_PLUGIN_ROOT}/skills/polish/references/12-axes.md 축6·7·9 기준 참조.
직전 2화({EPISODE_DIR}/ep{NNN-2}.md, {EPISODE_DIR}/ep{NNN-1}.md)도 전문 정독.
★ 설정문서 로드 (novel-config.md 기준 — 수치·시간·설정 정본):
- {PLOT_DOC} — 해당 EP의 확정 수치 (면적·자금·수확량·인원·시간대)
- {BOOTSTRAP} — 매크로 수치 정본
- {CHAR_CORE} — 캐릭터 나이(생년 기준), 고유 설정 정본
- {VERIFY} — 검증 완료 수치 (있을 경우)
★★★ LOGIC 축은 반드시 서브카테고리를 독립 수행 ★★★
[TIMELINE] 시간 정합성 — 3단계 프로토콜 (생략 불가):
1단계: 대상 EP + 직전 2화에서 모든 시간 마커 추출. 상대 시간은 절대 날짜로 변환.
2단계: 같은 사건/약속에 대한 시간 참조가 EP 간 모순되는지 확인.
3단계: 추출 결과를 표로 출력. '문제 없음'이라도 표는 반드시 출력.
[NUMBER] 수치 정합성:
대상 EP에서 모든 숫자+단위 추출 → 직전 2화에서 같은 대상 grep 대조.
EP 내 산술(나눗셈·곱셈·합산) 직접 계산 검증.
추출 결과를 표로 출력.
[PLAUSIBILITY] 개연성:
캐릭터 반응 모순, 비용 누락, 시대 고증 위반 검출.
{CUSTOM_AXES_PROMPT}
에이전트 정의(story-analyst.md)의 출력 형식을 정확히 따라
TIMELINE 추출 표, NUMBER 추출 표, 교차대조 결과를 반드시 포함한
Story Analysis Report를 출력하라."
Agent("platform-optimizer"):
prompt: "EP{NNN} ({EPISODE_DIR}/ep{NNN}.md)에 대해 플랫폼 최적화 4축+특화 진단 수행.
직전 2화({EPISODE_DIR}/ep{NNN-2}.md, {EPISODE_DIR}/ep{NNN-1}.md)도 읽기.
직전 EP 마지막 500자 → 현재 EP 첫 1,000자 연결 자연스러움 확인.
★ 설정문서 로드 (novel-config.md 기준):
- {PLOT_DOC} — 해당 EP의 훅 유형·감정강도·비트 구조
- {PLOT_MACRO} — 핵심 전환 포인트 (있을 경우)
- {GUIDE} — 모바일 최적화 원칙 (있을 경우)
★ 플랫폼별 기준:
- novel-config.md의 target_platform은 문피아, 네이버시리즈, 카카오페이지, 리디, 조아라, 노벨피아 중 하나여야 함
- novel-config.md의 target_platform에 해당하는 플랫폼 가이드 참조
- _workspace/platform-guide-{platform}.md가 있으면 해당 파일의 기준 적용
에이전트 정의(platform-optimizer.md)의 축별 체크리스트를 따라
${CLAUDE_PLUGIN_ROOT}/skills/polish/references/12-axes.md 축8·10·11·12 참조하여 진단.
HOOK·OPENING·MOBILE·SUMMARY 각각 정량 측정(훅 강도, 대화 비율 등).
HOOK 유형은 설정문서의 해당 EP 훅 유형과 대조하여 평가.
핵심 전환 포인트 해당 시 훅 강도 4+ 필수.
Platform Optimization Report 형식으로 출력."
Agent("alive-enhancer"):
prompt: "EP{NNN} ({EPISODE_DIR}/ep{NNN}.md)에 대해 캐릭터 생동감 4축 진단 수행.
직전 2화({EPISODE_DIR}/ep{NNN-2}.md, {EPISODE_DIR}/ep{NNN-1}.md)도 읽어
동일 비언어 표현이 직전 화에서 반복 사용되는지 확인.
★ 설정문서 로드 (novel-config.md 기준):
- {CHAR_CORE} — 조연별 고유 긴장점, 주요 관계 곡선
- {CHAR_DETAIL} — 비언어 태그 팔레트, 호칭 규칙, 관계 변화표
alive-tracker.md에서 조연별 마지막 관계 이벤트 확인.
Alive Enhancement Report 형식으로 출력."
커스텀 축 프롬프트 삽입 ({CUSTOM_AXES_PROMPT}): novel-config.md에 "커스텀 진단 축" 섹션이 있으면, story-analyst 프롬프트에 해당 축의 정본·탐지 키워드·판별 기준을 추가한다. 예:
[PASTLIFE] 전생 설정 정합성 (novel-config.md 커스텀 축):
레이어1: 'grep "전생"' → 키워드 문장에서 정본과 모순 검출.
레이어2: 탐지_키워드 grep → 서술자의 능력 부정합 검출.
판별: 서술자 사실 진술=VIOLATION / 전략적 은폐=ALLOWED.
novel-config.md의 PASTLIFE 섹션 전문을 참조하라.
커스텀 축이 없으면 이 부분은 생략한다.
4개 보고서가 돌아오면 통합하여 revision-executor 호출:
Agent("revision-executor"):
prompt: "아래 4개 진단 보고서를 통합하여 {EPISODE_DIR}/ep{NNN}.md를 교정.
교정 전 직전 2화를 반드시 읽어 중복 내용 제거 및 연속성 보장을 확인하라.
★ 설정문서 로드 (novel-config.md 기준):
- {PLOT_DOC} — 해당 EP의 확정 수치·비트
- {BOOTSTRAP} — 매크로 수치 정본
- {CHAR_CORE} — 주인공 고유 설정, 나이(생년 기준)
- {CHAR_DETAIL} — 보이스표·호칭표·비언어 태그
★ Phase 1 진단 보고서 (파일로 읽기):
- {WORK_DIR}/_workspace/07_rule-checker_report_ep{NNN}.md
- {WORK_DIR}/_workspace/07_story-analyst_report_ep{NNN}.md
- {WORK_DIR}/_workspace/07_platform-optimizer_report_ep{NNN}.md
- {WORK_DIR}/_workspace/07_alive-enhancer_report_ep{NNN}.md
위 4개 파일을 Read한 후, 아래 보고서도 참조하라:
[Rule Check Report — 위 파일 참조]
{rule-checker 출력 요약}
[Story Analysis Report — 위 파일 참조]
{story-analyst 출력 요약}
[Platform Optimization Report — 위 파일 참조]
{platform-optimizer 출력 요약}
[Alive Enhancement Report — 위 파일 참조]
{alive-enhancer 출력 요약}
★★★ 교정 우선순위 (에이전트 정의 참조) ★★★
1순위: [TIMELINE] CRITICAL, [NUMBER] CRITICAL — 직전 2화 grep 후 정본 확인하여 수정
2순위: BANNED, LOGIC(개연성), 커스텀 축 CRITICAL
3순위: TITLE, VOICE, SILENCE, TRANS
4순위: HOOK, OPENING, SCENE, ALIVE, SUMMARY, MOBILE, UNIFORM
시간·수치 교정 시 특별 규칙:
- 정본 확인: novel-config.md의 수치 교차검증 정본 우선순위를 따른다
- 파급 확인: 수치 변경 시 같은 EP 내 참조 문장도 함께 수정
- 산술 재검증: 수정 후 관련 계산이 맞는지 직접 확인
- 새 시간 마커 도입 시 직전 2화 타임라인과 모순 없는지 확인
보존 가드레일: {GUARD_RAILS}
[ADJACENT] 태그 항목은 우선 교정 대상이다.
교정 후 fix_plan.md를 업데이트하라."
Agent("revision-reviewer"):
prompt: "EP{NNN}의 교정 결과를 검증하라.
교정된 {EPISODE_DIR}/ep{NNN}.md를 전문 정독하라.
직전 2화도 반드시 참조하라.
★ 설정문서 로드 (novel-config.md 기준):
- {PLOT_DOC} — 해당 EP의 확정 수치·비트
- {BOOTSTRAP} — 매크로 수치 정본
- {CHAR_CORE} — 주인공 고유 설정 정본
- {CHAR_DETAIL} — 보이스표·비언어 확인
[Revision Execution Report]
{revision-executor 출력}
★★★ 7대 검증 수행 ★★★
1. 과교정: 자연스러운 표현을 기계적으로 바꿔 어색해진 곳
2. 신규 오류: 교정으로 인해 새로 발생한 수치 불일치, 호칭 오류, 문맥 단절
3. ★TIMELINE/NUMBER 최종 검증:
교정된 EP에서 시간 마커와 숫자+단위를 재추출하여 직전 2화와 교차대조.
[TIMELINE] CRITICAL 잔존 → REVISE
[NUMBER] CRITICAL 잔존 → REVISE
교정으로 인한 신규 시간·수치 불일치 → REVISE
산술 오류 잔존 → REVISE
검증 결과를 표 형식으로 출력
4. 커스텀 축 최종 확인 (novel-config.md에 커스텀 축이 있으면)
5. 보존 가드레일: {GUARD_RAILS}
6. 훅 최종 확인
7. 분량 ±15% 이내
PASS/REVISE 판정."
novel-config.md의 "보존 가드레일" 섹션에서 로드한다. 교정 시 이 목록의 요소를 절대 훼손하지 않는다.
novel-config.md에서 프로젝트별 핵심 전환 포인트를 정의한다. platform-optimizer에게 플래그 전달. 훅 강도 4+ 필수.
npx claudepluginhub mjbae/awesome-novel-studio --plugin novel-studioOrchestrates sequential web novel episode creation from markdown config docs (character sheets, plot guides, bootstrap) using 4-agent pipeline. Ensures character depth, numeric consistency, hook strength, plausibility. Invoke via /create or Korean episode commands.
Provides structured revision and editing for Crucible-drafted novels, covering developmental, line, copy editing, and final polish after first draft completion.
Writes webnovel chapters (2000-2500 words) via workflow: context, draft, style adapt, review, polish, data extraction. Use /webnovel-write or auto-activates on requests.