lingfengQAQ/webnovel-writer
요약
Claude Code 환경에서 실행되는 장편 웹소설 창작 전문 플러그인입니다. 단순 생성을 넘어 캐릭터 설정, 복선, 세계관의 일관성을 유지하며 장기적인 집필 프로세스를 관리하는 시스템을 제공합니다.
핵심 포인트
- Claude Code 기반의 장편 웹소설 일관성 유지 시스템
- 설정, 복선, 캐릭터 동기 등 장기 기억 관리 기능
- 초기 설정부터 집필, 검토, 상태 조회까지 통합 워크플로우
- RAG 및 에이전트 기반의 사실 기록 및 검증 프로세스
Claude Code 위에서 실행되는 장편 웹소설 창작 플러그인입니다. 초기 설정, 권(卷) 구성 계획부터 장(章) 집필, 검토, 기억 축적, 상태 조회, 그리고 읽기 전용 시각화 패널에 이르기까지—전체 창작 프로세스가 하나로 연결되어 있습니다.
이 도구가 해결하고자 하는 핵심은 단 하나입니다: AI가 수백 장을 써 내려가더라도 설정을 기억하고, 복선을 이어가며, 대강(Outline)을 유지하게 만드는 것.
한 줄 정의: 이것은 장편 연재를 위한 일관성 시스템(Consistency System)이며, 쓰고 나면 잊어버리는 일회성 생성기가 아닙니다.
v7 리팩토링 RFC 공시 중 차세대 v7 설계가 공개 의견 수렴 단계에 진입했습니다. Discussions #118: v7 설계 공시를 읽고 피드백을 남겨주세요. Issue 섹션만 확인하는 사용자는 Issue #119: v7 공시 안내 게시글을 통해 접속할 수 있습니다. 기존의 "다음 단계 방향 투표"는 종료되었으며, 향후 우선순위는 RFC 피드백과 실시 계획을 기준으로 결정됩니다.
장편 창작에서 가장 어려운 것은 첫 장을 쓰는 것이 아니라, 80장, 200장 이후에도 다음 사항들을 유지하는 것입니다:
- 캐릭터 동기의 일관성 유지
- 전투력, 타임라인, 장소 및 세계관 규칙 간의 충돌 방지
- 복선의 기록, 전개 및 회수
- 재미 요소(爽点), 감정선, 세계관 확장의 리듬 유지
- 각 장을 쓴 후 사실(Fact)이 검색 가능한 상태 시스템으로 축적됨
이 시스템이 하는 일은 위와 같이 "반드시 기억해야 하고 무너져서는 안 되는" 제약 사항들을 Claude Code가 자동으로 실행하는 단계로 만드는 것입니다: 집필 전 자료를 조회하고, 집필 후에는 새로 발생한 사실을 기록하며 일관성 검토를 수행한 뒤, 최신 상태를 검색 인덱스, 장 요약, 장기 기억 및 대시보드(Dashboard)에 동기화합니다. 단순히 "쓸 줄 아는" 것이 아니라, 쓰면서 쌓아 나가는 것입니다.
| 능력 | 명령 | 설명 |
|---|---|---|
| 심층 초기화 | /webnovel-init | 단계별 질의응답을 통해 책의 뼈대, 설정집, 총강 및 초기 상태를 구축합니다 |
| 권 구성 계획 | /webnovel-plan | 총강을 기반으로 권과 장을 나누고 타임라인을 보완하며, 새로운 설정을 기록합니다 |
| 장 집필 | /webnovel-write | 한 장을 완결성 있게 집필: 컨텍스트 준비, 초안 작성, 검토, 윤문, 사실 기록, 자동 백업 |
| 품질 검토 | /webnovel-review | 재미 요소, 일관성, 리듬, OOC(캐릭터 붕괴), 연속성, 몰입도 등의 차원에서 장을 검토합니다 |
| 상태 조회 | /webnovel-query | 캐릭터, 복선, 리듬, 엔티티 관계 및 런타임 정보를 조회합니다 |
| 프로젝트 학습 | /webnovel-learn | 이 책에서 유용한 서술 방식을 기억하여 프로젝트 장기 기억에 저장합니다 |
| 시각화 패널 | /webnovel-dashboard | 프로젝트 상태, 엔티티 그래프, 장 내용 및 몰입도 데이터를 읽기 전용으로 브라우징합니다 |
| 프로젝트 검진 | /webnovel-doctor | 디렉토리, 파일, 데이터베이스, RAG, 의존성 및 Dashboard 결과물을 단계별로 인지하여 점검합니다 |
flowchart LR
User[저자 / Claude Code] --> Skills[8개 Skill 명령]
Skills --> Agents[Context / Reviewer / Data / Deconstruction Agent]
...
v6.0.0의 기본 메인 체인은 Story System이며, 몇 가지 핵심 역할은 다음과 같습니다:
.story-system/
: 유일한 사실의 원천(Source of Truth)으로, 집필 전의 "계약"과 집필 후의 "커밋"이 모두 여기에 저장됩니다. 승인된 CHAPTER_COMMIT이 여기에 기록됩니다.
.webnovel/state.json, index.db, summaries/, memory_scratchpad.json:
: 모두 메인 체인에서 파생된 읽기 전용 뷰(Read-only view)로, 조회 및 전시용으로 사용됩니다.
.webnovel/projection_log.jsonl:
: 프로젝션 실행 로그로, state/index/summary/memory/vector 중 어느 경로가 동기화되지 않았는지 파악하는 데 사용됩니다.
project-status, doctor, preflight 및 Dashboard는 메인 체인과 실행 상태를 직접 보여주므로, 잘못된 부분을 한눈에 확인할 수 있습니다.
Claude Code Marketplace를 통해 설치:
claude plugin marketplace add lingfengQAQ/webnovel-writer --scope user
claude plugin install webnovel-writer@webnovel-writer-marketplace --scope user
현재 프로젝트에만 적용하고 싶다면 --scope user를 --scope project로 변경하세요.
python -m pip install -r https://raw.githubusercontent.com/lingfengQAQ/webnovel-writer/HEAD/requirements.txt
Claude Code에서 다음을 입력하세요:
/webnovel-init
초기화가 완료되면 다음과 같은 내용을 포함하는 소설 프로젝트 디렉토리가 생성됩니다:
project-root/
├── .story-system/ # 계약, 챕터 커밋 및 이벤트 감사 (Audit)
├── .webnovel/ # 상태, 인덱스, 요약, 백업 및 장기 기억 (Long-term Memory)
...
소설 프로젝트 루트 디렉토리로 이동하여 .env.example을
.env로
복사한 뒤 API Key를 입력하세요:
cp .env.example .env
최소 설정:
EMBED_BASE_URL=https://api-inference.modelscope.cn/v1
EMBED_MODEL=Qwen/Qwen3-Embedding-8B
EMBED_API_KEY=your_embed_api_key
...
Embedding Key를 입력하지 않아도 사용할 수 있습니다. 이 경우 시스템은 자동으로 BM25 키워드 검색으로 전환되지만, 의미론적 검색 (Semantic Retrieval) 성능은 다소 약해질 수 있습니다. Embedding과 Rerank는 모두 OpenAI 호환 인터페이스로 교체 가능합니다.
/webnovel-plan 1 # 제1권 계획
/webnovel-write 1 # 제1장 집필
/webnovel-review 1-5 # 제1-5장 검토
...
/webnovel-dashboard
Dashboard는 읽기 전용 패널로, 프로젝트 상태, 엔티티 관계도 (Entity Relationship Graph), 챕터 내용, 복선 (Foreshadowing) 및 독자 유지율 (Retention) 데이터를 확인할 수 있습니다. 프론트엔드는 미리 패키징되어 플러그인과 함께 배포되므로, 로컬에서 npm build를 실행할 필요가 없습니다.
/webnovel-write
단순히 모델에게 작업을 던져 한 번 생성하고 끝내는 것이 아니라, 관문(Gate)이 포함된 완전한 파이프라인 (Pipeline)입니다:
- 프로젝트 루트, 플레이스홀더 (Placeholder) 및 Story System의 상태 점검
- 현재 챕터의 런타임 계약 (Runtime Contract) 갱신
context-agent를 호출하여 집필 작업 지시서 생성 - 작업 지시서에 따라 본문 초안 작성reviewer를 호출하여 다차원 검토 수행 - 차단 이슈 (Blocking Issue)가 통과되지 않으면 중단 - 윤문 (Polishing), 편집, Anti-AI 최종 점검data-agent를 호출하여 사실 관계 추출 -CHAPTER_COMMIT생성 - 상태(State), 인덱스(Index), 요약(Summary), 메모리(Memory), 벡터(Vector) 투영 (Projection) 구동 - 챕터 단위 백업 실행
이렇게 설계된 이유는 "어떻게 쓸 것인가"와 "무엇을 썼는가"를 분리하기 위해서입니다. 문체와 리듬은 자유롭게 발휘할 수 있지만, 발생한 사실 관계는 반드시 등록, 검토, 아카이빙되어야 하며 모호해서는 안 됩니다.
/webnovel-init, /webnovel-plan, /webnovel-write 및 /webnovel-review가 종료될 때마다 작가를 위한 최종 보고서가 제공되며, 내부 JSON, 트레이스백 (Traceback) 또는 긴 명령 로그를 직접 노출하지 않습니다. 보고서는 먼저 다음과 같이 한 줄의 총괄 상태를 제공합니다:
완료 (Completed): 목표 결과물과 주요 검증을 모두 통과하여 다음 단계로 진행할 수 있습니다. 부분 완료 (Partially Completed): 주요 결과물은 보존되었으나, 건너뛴 항목, 자동 처리 항목 또는 확인이 필요한 잔여 사항이 있습니다. 처리 필요 (Action Required): 시스템이 안전한 위치에서 멈췄으며, 창작 방향, 사실 관계 선택, 파일 덮어쓰기 여부 또는 차단 이슈(Blocking Issue) 처리에 대한 사용자의 결정이 필요합니다. 미완료 (Failed): 주요 결과물이 신뢰할 수 있게 생성되지 않았으므로, 보고서의 복구 제안에 따라 재실행하거나 원인을 파악하세요.
그 아래에는 세 가지 고정 섹션이 있습니다. 첫째는 생성된 파일과 완료 상황, 둘째는 과정 중 발생한 문제와 비정상 소요 시간, 셋째는 다음 단계 제안입니다. 시스템이 자동으로 처리한 내용(예: 투영 실패 후 재시도 성공 등)도 기록됩니다. 복구 불가능한 장애가 발생한 경우에만 .webnovel/logs/run_last.log를 확인하라는 메시지가 표시됩니다.
실행 중에는 현재 무엇을 하고 있는지, 무엇이 생성될 것인지 알려주는 소량의 진행 표시만 나타납니다. 창작 방향, 사실 일관성, 파일 덮어쓰기 위험 또는 차단 이슈(Blocking Issue)에 대한 판결이 필요한 경우에만 사용자에게 질문합니다. 동일한 /webnovel-write [챕터 번호] 명령을 반복 실행할 경우, 시스템은 먼저 신뢰할 수 있는 중단점 (Checkpoint)을 확인하여 최대한 실패 지점부터 재개하며, 이미 신뢰할 수 있게 완료된 본문, 검토, 커밋 또는 백업은 다시 작성하지 않습니다.
37개의 중국 웹소설 장르 템플릿이 내장되어 있으며, 여러 장르를 혼합하여 쓰는 것도 지원합니다. 아래는 그중 일부입니다:
| 유형 | 장르 예시 |
|---|---|
| 현환/수선류 (Xuanhuan/Xianxia) | 수선, 시스템류, 고무(High Martial Arts), 서양 판타지, 무한류, 아포칼립스, SF |
| ... |
전체 목록은 장르 템플릿 문서를 참조하세요.
| 명령 | 예시 | 용도 |
|---|---|---|
/webnovel-init | /webnovel-init | 새로운 웹소설 프로젝트 초기화 |
/webnovel-plan | /webnovel-plan 1 | 권(Volume) 개요, 타임라인 및 장(Chapter) 개요 생성 |
/webnovel-write | /webnovel-write 45 | 지정된 장을 집필하고 제출 |
/webnovel-review | /webnovel-review 1-5 | 특정 범위의 장을 검토 |
/webnovel-query | /webnovel-query 萧炎 | 캐릭터, 복선, 상태 등의 정보 조회 |
/webnovel-learn | /webnovel-learn "이 갈고리(hook) 설계는 효과적이다" | 프로젝트 경험 메모 기록 |
/webnovel-dashboard | /webnovel-dashboard | 읽기 전용 시각화 패널 실행 |
/webnovel-doctor | /webnovel-doctor --chapter 12 | 읽기 전용으로 프로젝트 파일, DB, RAG 및 의존성 점검 |
모든 명령줄 도구(Command Line Tools)는 통합적으로 scripts/webnovel.py를 통해 실행됩니다.
실행 방법:
python -X utf8 "<CLAUDE_PLUGIN_ROOT>/scripts/webnovel.py" --project-root "<PROJECT_ROOT>" <subcommand> [arguments]
주요 서브 명령(Subcommands):
| 서브 명령 | 설명 |
|---|---|
where | 현재 파싱된 웹소설 프로젝트의 루트 디렉토리 출력 |
preflight | 플러그인 경로, 프로젝트 루트, 스토리 시스템(Story System)의 상태 점검 |
project-status | 기계 판독 가능한 짧은 상태, 단계(phase) 및 다음 단계 출력 |
doctor | 단계별 인지 프로젝트 점검을 수행하고 영향 및 수정 제안 제공 |
write-gate | 집필 전, 제출 전, 제출 후 세 가지 자연적 경계 검증 |
projections | 기존 커밋(commit)을 기반으로 프로젝션(projection)을 다시 실행하거나 재생 |
story-system | 계약 시드(contract seed) 및 런타임 계약(runtime contracts) 생성 |
chapter-commit | 장의 사실(fact)을 제출하고 프로젝션 구동 |
story-events | 장의 이벤트를 조회하거나 이벤트 체인의 상태 점검 |
memory | 장기 메모리(long-term memory) 확인, 조회, 내보내기 및 재입력 |
rag | 벡터 인덱스(vector index) 및 검색 상태 관리 |
status | 프로젝트 상태 보고서 출력 |
더 많은 명령은 명령 상세 설명을 참조하세요.
| 문서 | 내용 |
|---|---|
| 문서 센터 | 모든 문서 인덱스 및 권장 읽기 순서 |
| ... |
저장소를 클론(clone)한 후 의존성을 설치하세요:
python -m pip install -r requirements.txt
python -m pip install -r webnovel-writer/scripts/requirements.txt
테스트 실행:
python -m pytest
대시보드(Dashboard) 프론트엔드는 webnovel-writer/dashboard/frontend/에 위치하며, 배포 버전에는 이미 dist/ 빌드 결과물이 포함되어 있습니다. 프론트엔드 개발 시에는 해당 디렉토리로 이동하여 별도로 실행할 수 있습니다:
npm install
npm run dev
사전 점검(preflight)을 우선 실행하세요:
python -X utf8 "<CLAUDE_PLUGIN_ROOT>/scripts/webnovel.py" --project-root "<PROJECT_ROOT>" preflight
python -X utf8 "<CLAUDE_PLUGIN_ROOT>/scripts/webnovel.py" --project-root "<PROJECT_ROOT>" doctor --format text
중점 확인 사항:
story_runtime.mainline_ready가true인지 확인.story-system/commits/chapter_XXX.commit.json파일이 존재하고accepted상태인지 확인projection_status가 모두done또는skipped인지 확인index.db,summaries/,memory_scratchpad.json이 정상적으로 생성되었는지 확인- RAG API Key가 웹소설 프로젝트 루트의
.env파일에 기록되었는지 확인
더 자세한 운영 설명은 프로젝트 구조 및 운영을 참조하세요.
Issue와 PR을 환영합니다. 저장소에 포함된 템플릿을 사용하는 것이 좋으며, 재현 단계, 환경 정보, 영향 범위 및 검증 방법을 작성해 주세요. 개인정보는 반드시 비식별화(masking)해야 함을 잊지 마세요.
권장 프로세스:
git checkout -b feature/your-feature
git commit -m "feat: add your feature"
git push origin feature/your-feature
기여하기 좋은 방향:
- 새로운 소재 템플릿 및 소재 규칙
- 더 강력한 챕터 검토 (Chapter Review) 차원
- 대시보드 (Dashboard) 정보 구조 및 시각화
- RAG 검색, 개체명 결합 해소 (Entity Disambiguation), 장기 기억 (Long-term Memory)
- Windows/macOS/Linux 호환성 문제
- 문서, 예제 프로젝트 및 초보자 튜토리얼
Webnovel Writer는 개인 시간을 활용하여 유지 관리됩니다. 만약 이 프로젝트가 설정 정리나 복선 맞추기 시간을 아껴주었다면, 아이디어를 공유하거나 사용 경험을 피드백하고, 또는 프로젝트 지원 의사를 밝히기 위해 언제든 연락해 주세요:
| 버전 | 주요 변경 사항 |
|---|---|
| v6.2.1 (현재) | |
| Windows에서 장을 작성하여 제출할 때 간헐적으로 발생하는 액세스 거부 (WinError 5) 수정: 자료 파일이 일시적으로 점유되었을 때 자동 재시도 | |
| v6.2.0 | |
| 장 작성 결과가 더 명확해졌으며, 실패 후 복구가 용이해짐 | |
| v6.1.0 | |
| 플러그인 실행 시 강화: doctor/project-status/write-gate/projection 재생 (Replay), hooks, 동작 평가 (Behavior Eval) 및 배포 검증 추가 | |
| v6.0.0 | |
| 스토리 시스템 (Story System) 전 과정 출시 (계약 시드 + 런타임 계약 + 챕터 제출 + 이벤트 감사), 통합 테스트 보완 | |
| v5.5.5 | |
장기 기억 (Long-term Memory) 폐쇄 루프: 작성 전 주입 + 작성 후 침전, memory 운영 명령 추가 | |
| v5.5.4 | |
| 작성 체인 프롬프트 (Prompt) 강한 제약, 중국어 검토 및 보고서 문구 통일 | |
| v5.5.3 | |
preflight 사전 점검 명령 통일, Windows 터미널 인코딩 문제 수정 | |
| v5.5.2 | |
| 개요의 챕터명을 본문 파일명과 동기화 | |
| v5.5.1 | |
| 권(Volume) 단위 개요의 컨텍스트 추출 수정, Dashboard 및 Learn 명령 문서 보완 | |
| v5.5.0 | |
| 읽기 전용 시각화 대시보드 (Dashboard) 추가, 실시간 새로고침 지원 | |
| v5.4.4 | |
| 플러그인 마켓플레이스 (Plugin Marketplace) 설치 메커니즘 도입 | |
| v5.4.3 | |
RAG 지능형 컨텍스트 강화 (auto/graph_hybrid 시 BM25로 폴백) | |
| v5.3 | |
| 지속 독자성 (Retention) 시스템 도입 (Hook / Cool-point / 미세 실현 / 채무 추적) |
본 프로젝트는 GPL v3 라이선스를 사용합니다.
본 프로젝트는 Claude Code, Gemini CLI 및 Codex를 활용하여 Vibe Coding 방식으로 개발되었습니다.
영감의 원천: Linux.do 게시물
oh-story-claudecode에 감사드립니다.
텍스트 분석 (Deconstruction) 프로세스 참고를 제공했습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Python (daily)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기