Skip to main content
Glama

vibelore

한국어 | English | 日本語 | Español | Français | 繁體中文 | ไทย | العربية

AI로 웹소설을 쓰고, 그 소설을 웹툰으로 만드는 로컬 도구. 수백 화가 지나도 설정은 무너지지 않게.

Write serial fiction with your AI coding agent, keep the lore consistent for hundreds of chapters, then adapt it into webtoon scenes. Local, Markdown, no extra API keys for writing.

Node License Hosts Showcase

Claude Code, Codex, Grok CLI 같은 AI 코딩 도구에 MCP 서버로 붙여서 씁니다. 본문과 그림은 그 AI가 만들고, vibelore는 세계관·인물·복선·시간선을 기억하고, 매 화 검사하고, 승인 전에는 아무것도 확정하지 않습니다.

모두 vibelore로 쓴 소설을 웹툰으로 옮긴 실제 결과입니다. 작품마다 다른 AI가 만들었고, 만들 때 쓴 vibelore 버전을 함께 적었습니다.

  • 베스퍼 (vibelore 0.4.2, 최신): 롯데월드 야간 퍼레이드 캐릭터를 빌린 비공식 팬 창작입니다. 50화 완결 소설부터 1~3화 웹툰까지 Claude Opus 5.5가 맡았습니다. 2화 웹툰은 베스퍼의 불빛이 칸 테두리 색과 밝기를 정하는 연출 실험, 3화 웹툰은 인이어 무전이 말풍선 대신 칸 사이 민트색 띠로 들어오는 연출 실험입니다.

  • 처형 1분 전의 황녀 (vibelore 0.3.8): 설계부터 소설, 웹툰 각색까지 GPT-6 Sol이 맡았습니다.

  • 판결 LIVE (vibelore 0.3.7–0.3.8): 소설과 웹툰 각색은 Claude Opus 5.5가, 그림은 Codex가 맡았습니다.

  • 길 위의 번개 (vibelore 0.3.0–0.3.8): Codex·Claude·Grok이 같은 소설을 각각 각색했습니다. 모델 비교도 있습니다.

잘된 장면만 고르지 않았습니다. 검토에서 떨어진 장면, 프롬프트, 비용까지 작품 목록에서 그대로 볼 수 있습니다.


AI에게 장편을 그냥 맡기면

❌ vibelore 없이

  • 10화쯤부터 호칭이 바뀌고, 죽은 인물이 다시 말하고, 능력 규칙이 슬쩍 달라집니다.

  • 3화에 심은 복선을 AI도 나도 잊습니다.

  • 세션이 끊기면 "지금까지 줄거리"를 다시 붙여 넣는 데서 시작합니다.

  • 웹툰으로 옮기려면 컷 구성·캐릭터 외형·대사 배치를 매번 처음부터 설명합니다.

✅ vibelore와 함께

  • 세계·인물·본문은 Markdown 정본으로 남고, 매 화 초고를 그 정본과 대조해 hard 위반은 고치고 soft 위반은 물어봅니다.

  • 작품 전체 → 아크 → 화 순서로 계획하고, 승인한 것만 다음 화의 제약이 됩니다.

  • 끊긴 작업은 같은 자리에서 재개되고, 검사를 통과한 원고만 커밋되며, 화 단위로 되돌릴 수 있습니다.

  • 작품 언어는 language 인자 하나로 정하며, 한국어 외의 언어로도 같은 흐름을 씁니다.

  • 원작의 인물·상태를 그대로 가져와 각색하고, 원작 범위·화풍·참조 그림·칸 수·이미지 모델을 정한 뒤 장면을 대사까지 한 장의 이미지로 생성하는 웹툰 제작 흐름이 따라옵니다.

Related MCP server: long-novel-agent-kit

30초 데모

호스트 채팅창에 이렇게 말하면 됩니다.

다음 화를 써 줘. 쓰고 나면 보여 주고, 내가 승인하면 확정해.

작품 인터뷰 ─▶ 작품 설계 ─▶ 아크 계획 ─▶ 화 계획 ─▶ 초고 ─▶ 설정·시간선·작품 언어 검사 ─▶ 검토 ─▶ 승인 ─▶ 커밋
 (1회)          (승인)       (승인)       (자동)             hard 위반은 수정              advisory 사용자 Markdown

작품 설계는 세계·인물 생성, 전체 스토리(StorySpine) 승인, 작품별 작가 스킬(WriterSkill) 승인 단계이며, 이것이 끝나야 집필이 시작됩니다. 작품 언어 검사는 한국어 작품을 포함한 모든 작품에 적용됩니다.

원고와 검토 근거가 오면 "승인" 또는 "이 부분 고쳐서 다시"라고 답합니다. auto 모드는 필수 검사를 통과하고 검토가 정상 완료되면 자동으로 커밋합니다. 검토의 advisory는 기록만 하고 커밋을 막지 않으며, 검토가 끝나지 않으면 승인 대기로 돌아옵니다. 웹툰도 한 문장이면 됩니다.

1화를 웹툰으로 만들어 줘. 제작 방향부터 물어봐 줘.

원작 범위·화풍·참조·칸 수·이미지 모델 ─▶ 장면 연출 ─▶ 생성 전 검증 ─▶ 대사 포함 장면 이미지 ─▶ 이미지 검토
 (사용자가 고름)                          (영어)       hard 차단       대사는 작품 언어 원문    불합격 시 자동 재설계

칸 수는 정수(1~12) 또는 auto이고, 참조 그림은 사용자가 가진 인물·배경 이미지 파일을 지정합니다. 이미지 모델은 OpenAI API의 gpt-image-2, gpt-image-2.5-sunburst(기본), gpt-image-2.5-flare 중에서 고르며 호스트가 호출합니다. 생성 전 검증이나 이미지 검토에서 떨어지면 결함을 근거로 다시 설계해 생성합니다(기본 2회, 최대 3회, 회마다 이미지 비용 발생). 결과는 장면 이미지와 scene.html로 .vibelore/webtoon/candidates/ 아래에 남습니다.

설치

쓰고 있는 AI 코딩 도구(Claude Code, Codex, Grok CLI)에게 저장소 주소를 주고 부탁하면 됩니다.

https://github.com/fbwndrud/vibelore 를 받아서 MCP 서버로 등록해 줘.

필요한 것은 Node.js 22.13 이상(22.x), 24.x 또는 26.x뿐입니다. 빌드도 의존성 설치도 없습니다. 등록이 끝나면 AI 도구를 한 번 다시 시작하세요.

저장소를 받지 않고 npm 패키지 vibelore로 MCP 서버를 실행합니다.

claude mcp add-json vibelore '{"command":"npx","args":["-y","vibelore"]}' --scope project

Codex는 command = "npx", args = ["-y", "vibelore"], Grok CLI는 grok mcp add vibelore -- npx -y vibelore입니다. Windows에서는 npx 앞에 cmd /c를 붙입니다("command":"cmd","args":["/c","npx","-y","vibelore"]). 특정 버전에 고정하려면 vibelore@<버전>처럼 적습니다. npm 경로는 MCP 서버만 등록하므로 인터뷰 스킬은 아래 저장소 방식이나 Codex 플러그인으로 설치합니다.

git clone https://github.com/fbwndrud/vibelore.git

Claude Code:

claude mcp add-json vibelore '{"command":"node","args":["/absolute/path/to/vibelore/src/server.js"]}' --scope project

Codex(~/.codex/config.toml):

[mcp_servers.vibelore]
command = "node"
args = ["/absolute/path/to/vibelore/src/server.js"]
startup_timeout_sec = 30
tool_timeout_sec = 6000

Grok CLI:

grok mcp add vibelore -- node /absolute/path/to/vibelore/src/server.js

Claude Code용 집필 루프 스킬은 hosts/claude/skills/novel/, 작품·웹툰 인터뷰 스킬은 skills/story-discovery-interview/와 skills/webtoon-discovery-interview/에 있습니다. 모두 .claude/skills/ 아래로 복사하세요. 이 저장소는 Codex 플러그인(.codex-plugin/plugin.json)으로도 설치할 수 있습니다.

설치했으면 첫 작품을 시작해 봅니다. 쓰고 싶은 이야기를 한두 문장으로 말하면 됩니다.

새 소설을 시작하고 싶어. 심야버스에서 승객의 후회를 듣는 기사 이야기야. 작품 인터뷰부터 해 줘.

인터뷰는 결과를 바꾸는 취향만 한 번에 4~5개씩 묻습니다. 건너뛰려면 "묻지 말고 자동으로"라고 하면 됩니다. 막히면 시작 안내를 보세요.

무엇을 해 주나

  • 작품 인터뷰. 장르명 대신 속도·난도·정서·보상·금기를 물어 독서 계약(StoryProfile)을 만들고, 세계관과 인물을 자동 생성합니다.

  • 아크 설계. 3~20화 단위 약속과 얇은 사건·압력·전환을 먼저 승인받고, 화별 계획은 집필 때 자동으로 채웁니다.

  • 매 화 검사와 수정. 초고를 인물·호칭·시점·시간선·복선과 대조하고, 확정 사실과 충돌하면 자동으로 고쳐 다시 검사합니다(검사 최대 3회, 그 사이 수정 최대 2회). 문체·운율 같은 취향 지적은 advisory로만 남깁니다.

  • 문체 기준. 마음에 든 화를 문체 앵커로 지정하면 이후 화가 그 결을 따라갑니다.

  • 되돌리기. 특정 화 시점으로 작품 전체를 롤백하고 그다음 화부터 다시 씁니다(롤백 전 상태는 복구 가능하게 보관).

  • 웹툰 각색. 원작 상태를 가져와 원작 범위·화풍·참조 그림·칸 수·이미지 모델을 확인한 뒤 장면을 대사까지 한 장의 이미지로 완성합니다.

하지 않는 것. 웹 GUI(호스트 채팅창이 인터페이스), MCP 서버 자체의 유료 API 호출(이미지 API는 호스트가 실행), 기본 도구로 앞 화 다시 쓰기·이후 상태 재계산(VIBELORE_MCP_SURFACE=advanced의 복구 도구 lore_rewrite·lore_refold로만 가능), 문학적 품질 보증, 동시 편집·멀티테넌트, 플랫폼용 PNG/JPEG 자동 분할.

자주 하는 일

하고 싶은 것

호스트에게 이렇게

마지막 화가 마음에 안 들어

원고를 손으로 고친 뒤 "변경 사항 확인해 줘" → 검사 → 승인

3화까지 썼는데 2화부터 다시 쓰고 싶어

"1화 시점으로 롤백해 줘" → "다음 화를 써 줘"

5화 시점으로 전부 되돌리고 싶어

"5화 시점으로 롤백해 줘"

이 화 문체가 딱 좋아, 앞으로 이렇게

"3화를 문체 기준으로 승인해 줘. 이유: 대사가 짧고 건조해서"

설정 파일을 손으로 고쳤어

"변경 사항 확인해 줘" → 영향 범위와 다음 할 일을 알려 줌

왜 이렇게 썼는지 근거를 보고 싶어

"이번 화 검토 근거와 실제 집필 요청을 보여 줘"

기존 소설을 웹툰으로 만들고 싶어

"1화를 웹툰으로 각색해 줘. 제작 방향부터 물어봐 줘"

웹툰 장면을 다시 그리고 싶어

"1화 이 장면을 [이렇게] 다시 그려 줘"

수정·재개·백업은 문제 해결과 백업을 보세요.

웹툰은 어떻게 만드나

이미 쓴 소설을 그대로 웹툰으로 옮깁니다. 인물 외모, 세계관, 그 화까지의 상황을 원작에서 가져오니 다시 설명할 필요가 없습니다.

  1. 원작 범위와 방향. 옮길 화·문단 범위와 그림체·글자 표현·배치 재량을 묻고, 영어 연출 지시로 정리해 확인받습니다.

  2. 참조 그림. 인물·배경 참조 이미지 파일(1장 이상)을 사용자가 지정합니다. 이어지는 장면은 앞 장면의 완성 그림도 참조합니다.

  3. 칸 수와 이미지 모델. 칸 수(1~12 또는 auto)와 이미지 모델·비용을 고릅니다. 모델 선택은 작품별로 유지됩니다.

  4. 완성. 장면 연출 → 생성 전 검증 → 대사까지 들어간 한 장의 장면 이미지 → 실제 그림 검토. 불합격이면 자동으로 다시 설계해 그립니다(기본 2회, 최대 3회). 위 제작 예시들이 이 방식입니다.

컷별로 러프를 먼저 승인받는 방식은 deprecated이며 이미 진행 중인 작업만 이어갑니다.

그림은 사용자가 고른 OpenAI 이미지 모델(gpt-image-2, gpt-image-2.5-sunburst(기본), gpt-image-2.5-flare)을 호스트가 API로 호출해 그립니다. 별도 API 키와 과금이 필요하고, 첫 장면 전에 모델·비용·전송 범위를 보여 주고 사용자의 답을 받아 작품별로 확정합니다. 웹툰 결과는 소설 정본과 따로 저장되며 소설을 바꾸지 않습니다. 자세한 절차는 웹툰 제작 안내를 보세요.

왜 vibelore인가

규칙 모음으로 소설을 대신 쓰는 도구가 아닙니다. 독서 경험을 먼저 합의하고, AI의 창작 능력은 살리면서, 장편에서 쉽게 무너지는 기억·인과·일관성·승인·복구만 책임집니다.

  • 독서 계약이 먼저. 장르명이 아니라 속도·난도·정서·보상·금기를 정하고 그 약속을 매 화 지킵니다.

  • 인과가 장식을 이깁니다. 설정을 늘리기보다 행동·반응·결과가 이어지게 하고, 인물은 설명이 아니라 선택의 누적으로 만듭니다.

  • 사람이 마지막 권한을 가집니다. Markdown 원고가 정본이고, advisory는 자동 수정 명령이 아닙니다.

주체

맡는 일

사용자

원하는 독서 경험, 중요한 취향, 최종 승인

호스트 AI

아이디어 판단, 장면 구성, 산문·대사·그림 생성, 의미 비평

vibelore

정본·계획 전달, 순서 보장, 충돌 검사, 검토 근거 기록, 커밋과 복구

Markdown 정본

세계·인물·본문·요약의 최종 사실

전체 방향은 철학, 구조는 아키텍처를 보세요.

지원 장르

25개 장르 프리셋이 있고, 프리셋마다 추적하는 설정 항목(시간선, 회귀 지식, 관계 상태, 능력 체계 등)이 다릅니다.

회귀 헌터 악역영애 이세계 아카데미 판타지 가문 회귀 추방 복수 추리 스릴러 액션 코미디 역사 LitRPG 스트리밍 LitRPG 성장물 시스템 아포칼립스 탑 등반 이세계 수련 선협 현환 던전 코어 로맨스 판타지 SF 호러 일상 힐링 현대 도시 기타

목록에 없는 장르나 복합 장르도 됩니다. 인터뷰가 장르를 톤·서브장르·이야기 동력으로 분해해 작품 프로필로 만들고, 설정 검사는 가장 가까운 프리셋을 씁니다.

작품 언어

작품을 어떤 언어로 쓸지는 lore_profile, lore_init, lore_create가 받는 language 선택 인자로 정합니다(lore_write의 language는 저장된 언어와 일치하는지 확인만 합니다). 사용자가 집필 언어를 자연어로 밝히면 호스트가 BCP 47 태그(ja, pt-BR, zh-Hant 등)로 정규화해 넘기고, 언어를 고르지 않으면 인자를 생략합니다. 언어 키가 없는 기존 작품은 암묵적 ko입니다. 대화 언어와 작품 언어는 별개라서 한국어로 대화하면서 일본어 작품을 쓸 수 있습니다.

/absolute/path/to/my-novel에 harbor_summer라는 작품을 만들고 싶어. 본문은 스페인어로 써 줘.

  • 프롬프트는 두 계열입니다. ko는 한국어 특화 지시문을, 그 밖의 언어(영어 포함)는 영어 공통 지시문에 목표 언어를 결합한 계열을 씁니다. 본문, 제목, 요약, 세계·인물 설명, 계획과 검토의 설명 값이 목표 언어를 따르고, JSON 키·enum·ID 같은 기계가 읽는 값은 번역하지 않습니다.

  • 분량은 언어에 맞는 단위로 잽니다. 한국어는 기존 글자 수, 그 밖의 언어는 문자소(grapheme) 또는 단어 수이며, 아랍어·히브리어처럼 결합 문자가 많은 문자 체계와 띄어쓰기가 없는 태국어도 같은 계약 안에서 다룹니다.

  • foundation 이전에는 새 프로필 revision을 승인해 언어를 바꿀 수 있고, 승인된 언어와 다른 값을 넘기면 LANGUAGE_CONTRACT_CONFLICT로 거부합니다. foundation을 만든 뒤에는 바꿀 수 없으며, 다른 값을 넘기면 조용히 덮어쓰지 않고 WORK_LANGUAGE_IMMUTABLE로 거부합니다.

  • 회차마다 본문·요약·계획이 작품 언어로 쓰였는지 검사하고, 시점·인물 등록·세계 설정 같은 의미 불변식은 언어와 무관하게 같은 검수자가 봅니다.

  • 웹툰도 작품 언어를 따릅니다. 대사는 번역하지 않고 작품 언어 원문 그대로 이미지에 들어가며, 이미지 프롬프트에 언어·문자 체계·읽기 방향(아랍어는 오른쪽에서 왼쪽)을 명시합니다.

허용 언어 목록은 따로 없습니다. BCP 47 태그로 식별되는 언어(런타임 Intl이 알아보는 언어)는 모두 받고, 식별되지 않는 태그만 UNKNOWN_LANGUAGE로 거부합니다. 결과 품질은 연결한 모델의 해당 언어 역량을 따릅니다. 실제로 돌려 본 인수 표본은 영어, 스페인어, 일본어, 프랑스어, 한국어, 아랍어, 번체 중국어, 태국어 8개 언어이며, 이 표본의 호스트 모델은 Claude Sonnet 5였습니다. 인자 계약의 세부는 작품 언어와 분량 단위를 참고하세요.

파일은 어디에

my-novel/
├── world/         세계 설정 — 직접 고쳐도 됩니다
├── characters/    인물 설정 — 직접 고쳐도 됩니다
├── chapters/      본문 — 직접 고쳐도 됩니다
├── summaries/     화별 요약
├── webtoon/       deprecated 컷별 작업의 승인본·SVG/HTML 마스터
└── .vibelore/     검사 기록·복구 스냅샷·웹툰 장면 결과(webtoon/candidates/) — 건드리지 마세요

원고와 제작 기록은 내 컴퓨터에 남습니다. 연결한 호스트·모델 서비스에는 요청에 필요한 원고와 참조 이미지가 전달될 수 있습니다. 경계는 보안 안내에 있습니다. 원고의 저작권은 작성자에게 있으며 이 저장소의 라이선스가 적용되지 않습니다.

모델과 비용

  • 소설은 호스트 세션에서 고른 모델이 그대로 씁니다. 별도 API 키가 없습니다. 기획·초고·검토 단계를 가벼운 모델에 맡기는 단계별 힌트를 줄 수 있고(호스트 릴레이에서는 힌트이며 로컬 모델에서만 실제로 바뀝니다), 확정 사실을 추출하는 단계는 따로 지정하지 않으면 기준 모델이 유지됩니다.

  • 웹툰 이미지는 OpenAI 이미지 API(gpt-image-2, gpt-image-2.5-sunburst(기본), gpt-image-2.5-flare)를 호스트가 호출하며 별도 키와 과금이 붙습니다. 확인한 모델을 작품별로 저장하고 임의로 바꾸거나 대체하지 않습니다.

  • 로컬 텍스트 모델은 OpenAI 호환 엔드포인트를 환경 변수로 연결할 수 있습니다.

자세한 설정은 모델 설정을 보세요.

자주 묻는 질문

없습니다. Claude Code, Codex, Grok CLI의 채팅창이 인터페이스이고, 결과는 Markdown 원고와, 웹툰은 장면별 PNG/JPEG 이미지(글자 포함)와 scene.html로 나옵니다.

소설 집필은 호스트 구독·크레딧 안에서 돕니다. 기본 설정에서는 vibelore가 모델을 직접 호출하지 않습니다(로컬 모델을 연결한 경우 제외). 웹툰 이미지는 OpenAI 이미지 API를 호스트가 호출하며 그 계정의 과금을 따릅니다.

아닙니다. 워크플로가 저장되므로 "이어서 해 줘"로 같은 자리에서 재개합니다. 검사를 통과한 원고만 커밋되고, 화 단위 스냅샷으로 되돌릴 수 있습니다. 문제 해결을 보세요.

됩니다. world/, characters/, chapters/는 사람이 고치라고 있는 파일입니다. 고친 뒤 "변경 사항 확인해 줘"라고 하면 영향 범위와 다음 할 일을 알려 줍니다.

hard 위반은 확정 사실과의 충돌이라 고치지만, 반전이 맞다면 설정 파일을 먼저 바꾸면 됩니다. soft 위반은 작가의 의도일 수 있어 AI가 자동으로 고치지 않고 사용자에게 묻습니다.

쓸 수 있습니다. 집필 언어는 작품을 만들 때(프로필 또는 lore_create·lore_init) 정하고, 인터뷰는 사용자가 쓰는 언어로 진행합니다. 안내 문서는 한국어 원문과 영어판(*.en.md)이 있습니다. 위 작품 언어를 보세요.

더 읽기

Apache-2.0. 원고와 그림의 권리는 만든 사람에게 있습니다.

Available Tools

30 tools
lore_arc_decideA
Idempotent

lore_arc_plan이 만든 아크 계획을 승인해 활성화하거나 거절한다. 사용자가 계획을 보고 결정한 뒤 호출한다. 활성 아크가 있어야 lore_write가 집필할 수 있고, 활성 아크를 거절하면 lore_write가 ARC_NOT_ACTIVE로 멈춘다. 생성 뒤 새 화가 게시됐으면 승인이 status=clean_fail(STALE_VALIDATION_RECEIPT)로 거부되므로 다시 계획한다. 모델 호출 없음. 반환은 {approved, plan, instruction?}.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesapprove=active로 전환한다(생성 때 받은 검증 영수증이 없거나 이후 정본이 바뀌었으면 status=clean_fail). reject=rejected로 표시하고 파일은 지우지 않는다. 거절 뒤에는 lore_arc_plan을 feedback과 함께 다시 호출한다.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond annotations: no model calls, exact return shape {approved, plan, instruction?}, the ARC_NOT_ACTIVE failure when no arc is active, and the STALE_VALIDATION_RECEIPT/status=clean_fail behavior when a new chapter was published after generation. Annotations only cover safety/idempotency, so this extra failure-mode disclosure is real value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five tight sentences front-load the core action, then prerequisites, then failure modes, then return shape. No filler or restatement of the name; every sentence carries distinct operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description supplies the return contract and all the failure states (ARC_NOT_ACTIVE, clean_fail) an agent needs to interpret outcomes. Nothing required to invoke or react to this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents action, workId, and project fully, including the enum meanings and the feedback-loop guidance. The description adds outcome semantics (clean_fail) but no per-parameter syntax beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (승인/거절) and resource (아크 계획), and names its producer sibling lore_arc_plan so the agent knows where the input comes from. It is clearly distinguishable from the other *_decide siblings by the arc-specific scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to call it after the user has reviewed the plan and decided, states the downstream condition (an active arc is required for lore_write), and gives the reject path's next step: re-call lore_arc_plan with feedback. Both when-to-use and what-to-do-instead are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_arc_planA
Destructive

다음 아크의 약속과 3~20개 얇은 회차 비트(사건·압력·전환·다음 상태)를 생성하고 구조·품질 검증을 거쳐 .vibelore/arc-plan.json에 저장한다(아크별 사본은 .vibelore/arcs/). lore_write 전에 lore_arc_status로 활성 아크가 없음을 확인했을 때, 또는 아크가 끝났을 때 호출한다. 기반과 승인된 StoryProfile·StorySpine·WriterSkill이 필요하다. 현재 계획을 무조건 교체한다: pending이면 같은 번호로 덮어쓰고, 진행 중인 활성 아크도 다음 번호의 새 아크로 대체하므로 아크 중간에는 호출하지 않는다. 생성·품질 판정·언어 검증에 status=needs_model이 약 3회 나온다. 반환은 {plan(episodes, quality), needsApproval, instruction}.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoreview(기본)=사용자 승인 전까지 pending이며 집필할 수 없다. auto=검증 통과 즉시 활성화. 사용자가 "알아서·묻지 말고"라고 한 경우만 auto.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
episodesNo아크 화수 3~20(범위 밖은 잘라낸다). 기본 8.
feedbackNo거절한 계획을 다시 만들 때 반영할 피드백. 이전 계획은 모델에 다시 보내지 않으므로 피드백만으로 이해되게 쓴다.
directionNo사용자가 원하는 아크 방향. 비우면 작품 브리프와 StorySpine에서 자율 설계.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say destructiveHint=true/readOnlyHint=false; the description goes far beyond by stating it unconditionally replaces the current plan (overwriting a pending plan at the same number and replacing an in-progress active arc with a next-numbered arc). It also discloses that status=needs_model will surface roughly three times during generation/quality/language validation, which is critical multi-turn behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then preconditions, then replacement semantics and return shape. Every sentence carries load, though the single dense block is longer than strictly necessary and could be split for scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, destructive, multi-turn planning tool with no output schema, the description covers preconditions, side effects, approval flow, expected needs_model cycles, and the return shape {plan(episodes, quality), needsApproval, instruction}. Nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters (mode enum semantics, workId pattern, episodes range, feedback/direction usage). The description adds the unconditional-replacement behavior but no additional per-parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: generates the next arc's promise plus 3-20 episode beats, runs structural/quality validation, and writes .vibelore/arc-plan.json (with per-arc copies in .vibelore/arcs/). This clearly separates it from siblings lore_arc_status, lore_arc_review, and lore_arc_decide.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit invocation conditions ('call before lore_write once lore_arc_status confirms no active arc, or when an arc has ended') and an explicit exclusion ('do not call mid-arc'). It also names the required upstream artifacts (foundation, approved StoryProfile/StorySpine/WriterSkill) and references the sibling tool that gates it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_arc_reviewA

현재 아크에서 이미 쓴 화들을 5화 단위 체크포인트 또는 종결화까지 다시 읽고, 화별 PatternLedger와 아크 품질 리뷰(7개 차원 점수·발견 사항)를 새로 만든다. lore_write가 체크포인트마다 같은 리뷰를 자동으로 하므로 선택 도구이며, 리뷰를 수동으로 갱신하거나 다시 보고 싶을 때만 쓴다. 결과는 advisory이고 원고를 고치지 않는다. .vibelore/experience-ledger.json·pattern-ledger.json과 arc-reviews/를 덮어쓴다. 화마다 한 번, 마지막에 한 번 status=needs_model이 나온다(N+1회). 체크포인트가 아닌 화나 본문이 없는 화를 지정하면 오류.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
throughChapterNo평가 종료 화(아크 5·10·15화째 또는 마지막 화). 생략하면 현재 아크의 마지막 작성 화이며, 그 화가 체크포인트가 아니면 오류.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations covering mutation safety (readOnlyHint=false, destructiveHint=false), the description adds rich behavioral context: it overwrites .vibelore/experience-ledger.json, pattern-ledger.json, and arc-reviews/, does not modify the manuscript, and emits status=needs_model N+1 times. It also discloses error cases. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: purpose first, then the lore_write relationship, then side effects, execution statuses, and errors. Every sentence contributes relevant information and none is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the key gaps: what artifacts are overwritten, what is not changed, what status signals occur, and what inputs cause errors. An agent has enough to call it correctly in context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents workId, project, and throughChapter, including the checkpoint rule for throughChapter. The description reinforces the checkpoint concept and error behavior but adds no syntax or format detail beyond the schema; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: reread written chapters in the current arc and regenerate per-chapter PatternLedger and an arc quality review. It distinguishes the tool from the sibling lore_write by explaining that lore_write performs the same review automatically, making this optional. An agent can identify what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use this tool: only when manually updating or re-viewing reviews, because lore_write already does it at each checkpoint. It also gives error conditions (non-checkpoint chapter or chapter without body). No alternative-selection inference is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_arc_statusA
Read-onlyIdempotent

현재 아크 계획을 읽기 전용으로 조회한다. 집필 요청을 받으면 가장 먼저 호출해 활성 아크가 있는지 확인한다. 없으면 {planned:false}, 있으면 {planned:true, plan(status: pending|active|rejected|completed, episodes), nextChapter, currentEpisode}. currentEpisode는 활성 아크에 다음 화 비트가 있을 때만 채워지며, null이면 lore_arc_plan이 필요하다.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description usefully adds the two possible response shapes and the null-currentEpisode signal. It does not, however, discuss failure modes such as a missing workId target.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then the usage trigger, then the return shape. Dense but every sentence carries information, especially since there is no output schema to describe return values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description responsibly documents the return object and the null-currentEpisode handoff to lore_arc_plan. Coverage is strong for a read-only status tool; minor gaps remain around error/edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with only two parameters, and the schema already documents workId format and project semantics. The description adds no parameter-level detail beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read-only query) and resource (current arc plan), and explicitly names the sibling lore_arc_plan as the follow-up when currentEpisode is null. An agent can distinguish it from lore_arc_plan/lore_arc_decide without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (call first on receiving a writing request to check for an active arc) and a conditional routing rule (if currentEpisode is null, lore_arc_plan is needed). Both the trigger and the alternative are stated, not inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_configureA
Idempotent

작품 설정을 조회하거나 바꾼다. 인자 없이 호출하면 읽기 전용으로 StoryProfile·StorySpine·WriterSkill을 하나의 NarrativeContract로 묶어 status(ready|incomplete), 누락 단계(missing), 언어·분량 계약, 검토·추적 설정을 돌려준다. disabledReviews·disabledDraftSections·tracking·customTracking·mergeRecords 중 하나라도 넘기면 .vibelore/review-policy.json에 저장한다. 목록과 tracking 객체는 통째로 교체되고(빈 배열=모두 켬), mergeRecords만 누적된다. 변경은 다음 커밋부터 적용되며 이미 쓴 화는 바뀌지 않는다. 모델 호출 없음.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
trackingNo추적 기능 켜기/끄기. 기본은 모두 켜짐. objects=물건·장소·단서·능력, knowledge=누가 무엇을 아는가, scheduled=일어나기로 된 일(회귀 전생 사건·예언·예약), hooks=떡밥.
mergeRecordsNo같은 대상으로 확인된 기록 병합(from을 into에 흡수). 후보는 조회 결과의 mergeCandidates에 있다. 기존 병합에 누적되며 다음 커밋부터 반영.
customTrackingNo작가 정의 추적 항목 전체 목록(교체). pinned=매 화 입력에 항상 포함. rules: monotonic{field,direction:up|down,unless?}, frozenAfter{status}, speakerOnly{alias,by}; severity soft(기본)|hard. note=검토 모델에 보여줄 자연어 규칙(advisory).
disabledReviewsNo끌 검토 목록 전체(빈 배열이면 모두 켬). 꺼진 검토는 요청하지 않고 실패로 보지 않는다. 연속성 추출·검사는 끌 수 없다.
disabledDraftSectionsNo초고 요청에서 뺄 선택 섹션 목록 전체(빈 배열이면 모두 넣음): older-memory=오래된 관련 기억, previous-tail=직전 화 말미, author-craft=작법 묶음, style-anchor=문체 기준 예시. 계획·설정·현재 상태·최근 요약은 뺄 수 없다.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses the write target path, that lists and tracking objects are replaced wholesale (empty array = all on) while mergeRecords alone accumulates, that changes apply only from the next commit and never rewrite already-written episodes, and that no model calls occur. These are exactly the mutation semantics an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but well ordered: read behavior first, then write trigger, then replacement/accumulation rules, then commit-scope caveat and no-model-call note. Every sentence carries information; only minor redundancy in restating defaults.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter dual-mode mutation tool with no output schema and no annotation detail, the description covers return shape (status ready|incomplete, missing, language/length contract), file target, persistence semantics, and temporal scope. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already documented, yet the description adds real semantics: default all-on for tracking, replace-vs-accumulate behavior per parameter group, and the merge-from-query-result (mergeCandidates) workflow. This meaningfully exceeds the schema baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (작품 설정 조회/변경) and clearly explains the dual read/write nature: no-argument calls bundle StoryProfile·StorySpine·WriterSkill into a NarrativeContract. It does not differentiate itself from the sibling lore_status, which plausibly covers similar status territory, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly splits behavior by invocation: no arguments = read-only contract, any of the five config keys = write to .vibelore/review-policy.json. That is clear when-to-use guidance, but no alternative sibling is named for the read path and no when-not-to-use exclusion is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_createA

새 작품의 기반을 모델이 자동 설계한다: 세계 사실, 3~5인 캐스트(characters/.md), 추적 엔티티를 만들어 world/setting.md와 .vibelore/에 저장한다. 보통 lore_profile → lore_profile_decide(approve) 다음에 호출하며, 그러면 StoryProfile의 엔진 장르·시점·언어·분량을 따른다. StoryProfile 없이 genre만으로도 호출할 수 있다. 직접 쓴 설정으로 시작하려면 lore_init을 쓴다. 이미 기반이 있으면 덮어쓰지 않고 거부하며, StoryProfile이 있는데 승인 전이면 거부한다. 세계·캐스트·엔티티·언어 검증마다 status=needs_model을 돌려주므로 lore_resume을 여러 번 이어야 하고, 모두 끝나기 전에는 아무 파일도 저장하지 않는다. 성공하면 {created:true, genre, language, length, worldFacts(개수), characters[{id,name,contradiction}], entities[{id,kind,name}]}. 다음 단계는 lore_story_plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
briefYes작품 전제와 방향을 담은 자연어 브리프. 승인된 StoryProfile이 있으면 그 독서 계약과 합쳐 설계 입력이 된다.
genreNo엔진 장르 id(lore_init과 같은 목록). StoryProfile이 없을 때만 필요하며, 있으면 무시하고 StoryProfile의 엔진 장르를 쓴다.
titleYes작품 제목. 세계·캐스트 설계 입력으로도 쓰인다.
lengthNo화당 분량 계약. unit 은 legacyCodeUnits|graphemes|words, target 은 양의 정수. 생략하면 StoryProfile 값, 없으면 3000(ko는 legacyCodeUnits, 그 외는 graphemes).
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
povModeNo시점(예: 3인칭제한, 1인칭). 생략하면 StoryProfile의 시점, 그것도 없으면 제한 3인칭.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
languageNo작품 언어 BCP 47 태그(예: ko, en-US, ja, zh-Hant). 생략하면 저장된 계약을 따른다. StoryProfile이 있으면 그 언어와 같아야 한다.
targetChaptersNo완결 목표 화수. 기본 40.
chapterWordCountNo구형 분량 인자. 이름과 달리 단어가 아니라 legacyCodeUnits(대략 UTF-16 글자 수)로 해석한다. 새 호출은 length를 쓴다. 둘 다 주면 unit=legacyCodeUnits이고 target이 같아야 하며 아니면 LENGTH_CONTRACT_CONFLICT.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false). The description adds substantial context beyond them: refusal-without-overwrite semantics, the pre-approval guard, the multi-turn validation loop that returns status=needs_model and requires repeated lore_resume calls, and the atomicity guarantee that no files are written until all validation completes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then workflow, refusal modes, return shape, and the next step — every sentence carries distinct information and none is filler. It is dense and slightly run-on, but nothing can be cut without losing a fact an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, nested-object tool with no output schema, the description compensates by describing the success return shape ({created, genre, language, length, worldFacts, characters, entities}), the failure/interaction protocol, and the downstream step. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema descriptions are unusually detailed (genre precedence, length defaults, chapterWordCount legacy semantics and LENGTH_CONTRACT_CONFLICT), so the schema does the heavy lifting. The description only restates cross-parameter behavior ('genre만으로도 호출할 수 있다') that the schema already documents, adding little beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'automatically designs the foundation of a new work' — and enumerates the concrete artifacts produced (world facts, 3-5 cast members in characters/<id>.md, tracking entities, saved to world/setting.md and .vibelore/). It explicitly distinguishes itself from siblings by naming lore_init (manual settings) and lore_story_plan (next step), so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the canonical call site (after lore_profile → lore_profile_decide(approve)), a fallback path (genre-only without a StoryProfile), and an explicit alternative (lore_init for hand-written settings). It also states two when-not conditions: refuses if a foundation already exists, and refuses if a StoryProfile exists but is unapproved.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_decideA

lore_write가 guided 모드에서 status=awaiting_approval로 돌려준 원고에 대한 사용자 결정을 적용한다. 사용자에게 원고와 advisory를 보여 주고 답을 받은 뒤에만 호출한다. approve는 검사 영수증을 다시 확인하고 그 화를 커밋한다(chapters/·summaries/·상태·스냅숏, status=completed). request_revision은 feedback대로 같은 워크플로에서 고치게 하며 다음 lore_write가 수정·재검사한다. hold는 기록만 남기고 승인 대기를 유지한다. reject는 워크플로를 끝내며 다음 lore_write가 같은 화를 새로 쓴다. 원고 파일은 지우지 않는다. approvalId는 원고가 승인 대기에 다시 들어갈 때마다 새로 발급되므로 이전 id는 거부된다.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesapprove=커밋, request_revision=feedback대로 수정, hold=보류, reject=폐기 후 새로 쓰기.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
feedbackNorequest_revision에 필수인 구체적 수정 요청. reject에는 선택이며 기록만 된다.
approvalIdYes직전 lore_write(awaiting_approval) 응답의 approvalId.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by spelling out side effects per action: approve re-checks the inspection receipt and commits chapters/, summaries/, state and snapshot with status=completed; hold only records; reject ends the workflow without deleting the manuscript file. It also discloses the non-obvious approvalId lifecycle (a new id is issued each time the manuscript re-enters awaiting approval, so stale ids are rejected).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the trigger condition and the precondition before enumerating actions, and every sentence carries information. It is dense and somewhat long, but nothing is wasted padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter mutation tool with two booleans' worth of useful annotations and no output schema, this covers the decision semantics, the state transitions and the file-safety question an agent needs. Only the shape of the return payload is left unstated, which is minor given no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: feedback is required for request_revision and merely recorded for reject, and approvalId is scoped to the immediately preceding awaiting_approval response with enforced freshness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it applies a user decision to the manuscript that lore_write returned in guided mode with status=awaiting_approval. This scopes it away from the other *_decide siblings (profile/story/arc/webtoon), though it never names an alternative tool explicitly, so it falls just short of the top band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition that doubles as a when-not: call only after showing the user the manuscript and advisory and receiving their answer. It also routes each action semantically (approve=commit, request_revision=fix per feedback, hold=retain, reject=discard and rewrite), but does not contrast with neighbouring decide tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_initA
Idempotent

작가가 직접 채울 빈 작품 기반(world/setting.md, 빈 chapters·summaries·characters 디렉터리, .vibelore/foundation.json)을 만들거나, world/setting.md가 이미 있는 디렉터리를 쓰기 없이 이어받는다. 모델이 세계·인물을 자동 설계하게 하려면 이 도구 대신 lore_profile → lore_profile_decide → lore_create를 쓴다. lore_create는 기반이 있으면 거부하므로 둘 중 하나만 쓴다. 새 작품은 언어 계약 검증 때문에 보통 status=needs_model을 한 번 돌려주며 lore_resume으로 답해야 저장된다. 재호출은 덮어쓰지 않고 adopted=true와 현재 상태를 돌려준다.

ParametersJSON Schema
NameRequiredDescriptionDefault
genreYes엔진 장르 id(예: mystery-thriller, romantasy, regression-hunter, cozy, other). 틀리면 사용 가능 목록과 함께 거부한다. 기존 작품을 이어받을 때는 무시된다.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
povModeNo자유 텍스트 시점(예: 3인칭제한, 1인칭). omniscient·multi-pov는 단일 화자 검사를 생략하고 none은 시점 검사를 끈다. 생략하면 제한 3인칭.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
languageNo작품 언어 BCP 47 태그(예: ko, en-US, ja, zh-Hant). 생략하면 저장된 계약을 따른다.
worldFactsNo변하지 않는 세계 사실 5~10개. w1..wN id로 world/setting.md에 기록된다.
targetChaptersNo완결 목표 화수. 아크 위치 계산에 쓰인다. 생략하면 저장하지 않는다.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the safe-write profile is covered. The description adds genuine context beyond that: re-calling does not overwrite but returns adopted=true plus current state, and new works typically return status=needs_model requiring lore_resume before saving. That is useful but not rich enough to max out against annotations that already carry the safety semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core create/adopt purpose before alternatives and workflow caveats, and every sentence carries information. It is slightly dense across multiple clauses, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, no-output-schema tool, the description covers purpose, adoption semantics, sibling exclusivity, and the multi-step needs_model/lore_resume saving flow. An agent has everything needed to call it correctly and handle the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents genre examples and rejection behavior, povMode omniscient/multi-pov handling, language fallback, and project defaulting. The description adds no parameter-level detail beyond what the schema supplies, so baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with concrete artifacts (world/setting.md, empty chapters/summaries/characters dirs, .vibelore/foundation.json) and adds the adoption branch explicitly. It also names the sibling it is not (the lore_profile → lore_profile_decide → lore_create chain), so an agent can distinguish it without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use the profile/decide/create chain for model-driven design, use this tool for an author-filled blank foundation, and notes lore_create rejects when a foundation exists so only one is used. Adds the needs_model → lore_resume follow-up flow, which no other field provides.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_profileA
Destructive

새 작품 설계의 첫 단계. 작품 발견 인터뷰의 브리프를 StoryProfile(엔진 장르·독서 계약·읽기 난도·이야기 동력·시점·문체 지침·언어·분량)로 컴파일해 .vibelore/story-profile.json에 저장한다. review 결과의 designReview에는 누적된 설계 결정과 최대 5개의 열린 질문이 담긴다. 질문을 사용자에게 모두 보여 주고 답을 feedback으로 넘겨 다시 호출하며, 열린 질문이 없거나 사용자가 승인하면 lore_profile_decide로 확정한다. 호출할 때마다 모델이 새로 생성해 기존 프로필을 교체한다(active였어도 review면 pending으로 돌아가 이후 단계가 막힌다). 생성과 언어 검증에 status=needs_model이 1~3회 나오며 lore_resume으로 답하기 전에는 저장하지 않는다. 기반 생성 뒤에는 언어를 바꿀 수 없다.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoreview(기본)=pending으로 저장하고 열린 질문을 돌려준다. auto=질문 없이 즉시 active. 사용자가 "알아서·묻지 말고"라고 한 경우만 auto.
briefYes인터뷰에서 정리한 자연어 브리프 전체(장르·톤·방향·독자 경험). 읽기 난도 답변의 근거로도 쓰인다. 비우면 기존 작품 브리프를 쓴다.
lengthNo화당 분량 계약. unit 은 legacyCodeUnits|graphemes|words, target 은 양의 정수.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
feedbackNo직전 라운드의 열린 질문에 대한 사용자 답변 원문. 설계 결정으로 누적된다.
languageNo작품 언어 BCP 47 태그(예: ko, en-US, ja, zh-Hant). 생략하면 저장된 계약을 따른다.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations flag a destructive write (readOnlyHint=false, destructiveHint=true), and the description goes well beyond them: every call regenerates and replaces the existing profile, an active profile reverts to pending and blocks later stages, status=needs_model occurs 1-3 times and nothing is saved until lore_resume answers, and language is locked after base generation. This is exactly the behavioral context an agent needs before calling a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then return structure, then the hold/finalize workflow, then mutation and language-lock constraints. Several clauses are load-bearing, though the workflow explanation is somewhat compressed and could be ordered more cleanly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still explains the return shape (designReview containing accumulated decisions and up to 5 open questions) and the needs_model/resume hold cycle, plus the downstream blocking behavior. An agent has enough to call it and handle the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents mode, brief, feedback, language, length, workId and project. The description reinforces the workflow meaning of feedback and the review/auto semantics but adds little that isn't already in the field descriptions, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it compiles an interview brief into a StoryProfile and persists it to .vibelore/story-profile.json. It enumerates the profile dimensions (genre, reading contract, difficulty, momentum, POV, style, language, length), so an agent can distinguish it from siblings like lore_profile_decide and lore_profile_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: show open questions to the user, pass answers back as feedback and call again, then finalize via lore_profile_decide when no questions remain or the user approves. mode=review vs auto is tied to a clear condition (only when the user says 'just decide / don't ask').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_profile_decideA
Idempotent

lore_profile이 만든 StoryProfile을 승인(active)하거나 거절(rejected)한다. 승인은 사용자가 현재 설계를 명시적으로 받아들였거나 열린 질문이 없을 때만 한다. 승인하면 읽기 난도 계약도 사용자 확인으로 기록된다. 모델 호출 없음. 프로필이 없으면 오류. 반환은 {approved, profile, instruction?}. 승인 뒤 lore_create(새 작품) 또는 lore_story_plan(기반이 이미 있을 때)으로 진행한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesapprove=active로 전환한다(생성 때 받은 검증 영수증이 없거나 이후 정본이 바뀌었으면 status=clean_fail). reject=rejected로 표시하고 파일은 지우지 않는다. 거절 뒤에는 lore_profile을 feedback과 함께 다시 호출한다.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond annotations: no model calls, an error when no profile exists, a side effect (the reading-difficulty contract is recorded with user confirmation), and the return shape {approved, profile, instruction?}. Annotations already cover the safety profile (non-readOnly, idempotent, non-destructive), so the description is doing useful extra work rather than contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six short sentences, front-loaded with the decision semantics, then the approval precondition, side effect, error condition, return shape, and next steps. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-transition tool with no output schema, the description covers error behavior, return shape, side effects, and the follow-up workflow, while annotations cover the safety profile. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the action enum already explains approve=active and reject=rejected, so the schema carries the parameter burden. The description's '승인(active)하거나 거절(rejected)' merely restates that mapping without adding syntax or edge-case detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (approve/reject) acting on a named resource (the StoryProfile produced by lore_profile), and clearly separates this decision step from the creation step. An agent can distinguish it from siblings like lore_profile, lore_story_decide, and lore_writer_decide without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition for approval ('only when the user has explicitly accepted the design or there are no open questions') and names the next tools to run afterwards (lore_create when starting a new work, lore_story_plan when a base exists). The reject path's follow-up (re-call lore_profile with feedback) is documented in the action schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_profile_statusA
Read-onlyIdempotent

StoryProfile만 읽기 전용으로 조회한다. 없으면 {profiled:false}, 있으면 {profiled:true, profile(status: pending|active|rejected, designReview 포함), language, length}. 새 작품을 시작하기 전에 프로필이 필요한지 판단할 때 쓴다. 작품 전체 진행은 lore_status, 설정 누락 점검은 lore_configure를 쓴다.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so 'read-only' is partly redundant. The description earns its keep by disclosing the actual response behavior: {profiled:false} when absent, and {profiled:true, profile(status: pending|active|rejected, designReview included), language, length} when present. No output schema exists, so this return-shape disclosure is genuinely additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with zero filler: purpose and read-only scope first, return shape second, usage condition third, sibling routing last. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by spelling out both return branches including the status enum and designReview inclusion. Combined with the explicit sibling routing, an agent has everything needed to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both workId and project documented in the schema itself. The description adds no format, defaulting, or path semantics beyond what the schema already states, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: read-only lookup of StoryProfile only ('StoryProfile만 읽기 전용으로 조회한다'). It distinguishes itself from other status tools by naming lore_status and lore_configure as the tools for other concerns, so an agent can tell them apart without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it ('새 작품을 시작하기 전에 프로필이 필요한지 판단할 때') and routes to the correct alternatives with their conditions: lore_status for overall work progress, lore_configure for missing-config checks. Both the when and the when-not are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_resumeA
Destructive

status=needs_model 로 중단된 작업을 이어받는다. requests 의 각 질문에 답한 텍스트를 answers 에 { id: 답변 } 형태로 넘기면 중단 지점부터 계속한다. 한 응답의 requests는 서로 독립이므로 모두 답해 한 번에 넘긴다. 원래 도구를 처음 받은 인자 그대로 다시 실행하므로 인자를 바꾸려면 원래 도구를 새로 호출한다. 재개된 도구의 부작용(저장·교체·커밋)을 그대로 가진다. 다음 단계에 새 모델 작업이 필요하면 새 requests와 함께 needs_model을 다시 돌려주므로 여러 번 이어지는 것이 정상이다. 빈 answers나 맞지 않는 id는 작업을 끝내지 않고 같은 requests를 다시 돌려준다. runId는 첫 생성 후 24시간 뒤 만료되고 완료되면 삭제된다. 답을 멈추면 소설·설계 도구는 needs_model 응답의 deterministicResult가 유일한 결과이고(lore_write는 멈춘 workflow 식별 정보뿐이며 awaiting_model로 남는다), 웹툰은 같은 단계에서 대기하며 lore_workflow_status(lane=webtoon)로 확인한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesneeds_model 응답의 runId(run-…). lore_write의 runId를 잃었으면 lore_workflow_status의 resume.runId로 찾는다.
workIdNo작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
answersNo{ 질문 id: 모델이 만든 답변 텍스트 }. 이전 라운드에 보낸 답은 저장돼 있으므로 새 질문만 보내면 된다. jsonMode 요청은 코드 펜스 없는 순수 JSON으로 답한다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive=true, idempotent=false, and the description confirms and extends this by disclosing the concrete side effects carried over (save/replace/commit) and the fact that re-execution uses the original arguments unchanged. It further discloses error behavior (empty answers or mismatched ids re-return the same requests), 24h runId expiry, deletion on completion, and what remains as the sole result if the agent stops. This is rich behavioral context well beyond the annotations, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool does and the answers format, then layers the operational caveats in logical order. It is dense and longer than typical, but each sentence introduces distinct information (resume point, arg immutability, side effects, multi-round, error handling, expiry, stop behavior), so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a stateful resume tool with no output schema, the description covers the return/error protocol (same requests re-returned), the lifecycle (24h expiry, deletion on completion), the multi-round norm, and fallback discovery via lore_workflow_status. Nothing an agent needs to call or recover from this tool correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description nonetheless adds meaning not in the schema, such as 'requests are mutually independent, so answer all at once', 'previously sent answers are stored, send only new questions', and 'jsonMode requests answer with pure JSON without code fences'. It adds above baseline but overlaps partially with the answers schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: resumes a task halted with status=needs_model, from the halt point. It distinguishes itself from siblings by naming lore_write and lore_workflow_status and explaining the resume relationship. An agent can tell this apart from the many lore_* decision/plan tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger condition (status=needs_model), clear when-to-use in multi-round flow ('여러 번 이어지는 것이 정상이다'), and gives an alternative for a related need (to change arguments, re-invoke the original tool). It also routes to lore_workflow_status to recover a lost runId. When/when-not and alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_rollbackA
Destructive

지정 화의 스냅숏으로 정본과 기계 상태를 되돌린다. 사용자가 이미 커밋된 화들을 취소하겠다고 명시했을 때만 호출하고, 먼저 lore_snapshot_status로 대상 화를 확인한다. 손수정 반영은 lore_sync를 쓴다. 파괴적: world/·characters/·chapters/·summaries/를 지우고 스냅숏으로 복원하므로 그 화 이후 원고가 작업 트리에서 사라진다. 진행 중인 워크플로, 대기 중인 lore_resume runId, 검사 영수증도 지워지고 이후의 lore_configure·lore_style_anchor 변경도 되돌아간다. 되돌리기 전 상태는 .vibelore/rollback-archives//에 보존되지만 복원 도구는 없어 수동으로 되살려야 한다. 모델 호출 없음. 반환은 {rolledBackTo, archiveId, archive, recoverable:true, publication}.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
chapterYes되돌아갈 화 번호. 그 화까지의 원고가 남는다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although annotations already flag destructiveHint=true and idempotentHint=false, the description goes far beyond them: it enumerates what is deleted (world/, characters/, chapters/, summaries/), that in-progress workflows, pending lore_resume runIds and inspection receipts vanish, that later lore_configure/lore_style_anchor changes revert, that archives exist but have no restore tool, and that no model calls occur. This is exceptionally rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense and front-loaded: purpose and usage lead, followed by destructive scope, recovery limitations, and return shape. Every sentence carries decision-relevant information, though the density is near the upper limit.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, irreversible mutation tool with no output schema, the description covers the trigger condition, prerequisite check, destruction scope, secondary side effects, recoverability limits, and the return shape. Nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents workId, chapter, and project. The description's framing of the chapter boundary ('manuscript up to that chapter remains, later ones disappear') largely restates the schema's chapter description, adding little new parameter-level detail. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rollback/restore) and resource (canon and machine state to a chapter's snapshot) and explicitly distinguishes itself from siblings by naming lore_snapshot_status and lore_sync. An agent can tell exactly what this does versus adjacent tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ('call only when the user has explicitly said to cancel already-committed chapters'), a mandatory first step (check target chapter with lore_snapshot_status), and an alternative for a different case (use lore_sync for manual edits). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_snapshot_statusA
Read-onlyIdempotent

lore_rollback으로 되돌아갈 수 있는 화 번호 목록을 읽기 전용으로 조회한다. 스냅숏은 커밋할 때마다 .vibelore/snapshots/<화>/에 자동 생성되며 같은 화를 다시 커밋하면 교체된다. 반환은 {snapshots:[화 번호 오름차순]}이며 생성 시각 같은 상세는 없다. 롤백 전에 대상 화가 있는지 확인할 때 쓴다.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, but the description adds genuinely new context: snapshots are auto-created per commit under .vibelore/snapshots/<화>/ and are replaced when the same episode is re-committed. It also discloses the return payload shape, which matters since no output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and followed by storage semantics, return shape, and the use case. Every sentence carries information, though the snapshot-storage sentence is slightly more detail than strictly needed to call the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering the safety profile and no output schema, the description supplies the missing return shape ({snapshots:[화 번호 오름차순]}, no timestamps) and the pre-rollback use case. Nothing required for correct invocation is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (workId, project) are documented in the schema itself. The description adds no syntax, default, or path-resolution detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (읽기 전용으로 조회한다) and resource (lore_rollback으로 되돌아갈 수 있는 화 번호 목록), and names the sibling tool it complements. An agent can separate it from lore_rollback (the mutating counterpart) and lore_status without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: use it before rollback to verify the target episode exists, which implicitly routes the agent to lore_rollback for the actual mutation. It does not state any when-not condition or contrast with the broader lore_status, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_statusA
Read-onlyIdempotent

작품 전체 진행 요약을 읽기 전용으로 조회한다. 게시된 정본(Published HEAD) 기준 화수·다음 화 번호·등장인물·세계 사실 수·미해결 떡밥·아크 진행·StoryProfile 상태와, 손수정 여부를 뜻하는 workingTree(clean·modified 등)를 돌려준다. 작품이 없으면 오류 대신 initialized=false를 돌려준다. 진행 중인 한 화의 단계는 lore_workflow_status, 설정 누락 점검은 lore_configure, 개별 계획 내용은 lore_*_status로 본다. workingTree가 clean이 아니면 집필 전에 lore_sync를 호출한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered; the description goes well beyond by enumerating the returned payload (화수, 다음 화 번호, 등장인물, 세계 사실 수, 미해결 떡밥, 아크 진행, StoryProfile 상태, workingTree) and by disclosing the non-obvious empty-state behavior ('작품이 없으면 오류 대신 initialized=false를 돌려준다'). It also explains that workingTree signals manual edits, which is behavioral context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope are front-loaded in the first sentence, followed by return contents, empty-state behavior, sibling routing, and the write precondition. Every sentence carries distinct information with no restatement of the tool name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry return-value semantics, and it does so by enumerating the fields returned and the initialized=false fallback. Combined with the routing and sync precondition, an agent has everything needed to call it correctly and act on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (workId, project) are already documented in the schema, including the workId pattern and the project default. The description adds no syntax or format detail beyond that, so the baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (조회/read) and resource (작품 전체 진행 요약) and immediately scopes it as read-only and Published-HEAD-based. It explicitly distinguishes itself from lore_workflow_status, lore_configure, and lore_*_status, so an agent can pick it apart from siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use routing for three adjacent tools ('진행 중인 한 화의 단계는 lore_workflow_status, 설정 누락 점검은 lore_configure, 개별 계획 내용은 lore_*_status로 본다') plus a preconditioned follow-up action (call lore_sync before writing when workingTree is not clean). Both the selection condition and the next step are stated, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_story_decideA
Idempotent

lore_story_plan이 만든 StorySpine을 승인(active)하거나 거절(rejected)한다. 사용자가 StorySpine 내용을 보고 결정한 뒤 호출한다. 모델 호출 없음. StorySpine이 없으면 오류. 반환은 {approved, spine}. 승인 뒤 다음 단계는 lore_writer_skill.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesapprove=active로 전환한다(생성 때 받은 검증 영수증이 없거나 이후 정본이 바뀌었으면 status=clean_fail). reject=rejected로 표시하고 파일은 지우지 않는다. 거절 뒤에는 lore_story_plan을 feedback과 함께 다시 호출한다.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is partly covered. The description adds genuinely new context: no model invocation, an error when the StorySpine is absent, the return shape, and the fact that rejection does not delete files (consistent with destructiveHint=false). Missing explicit permission/auth requirements keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short front-loaded sentences with zero filler; the core action leads and prerequisites, return, and next step follow in a natural reading order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a decision tool with no output schema, the description supplies the return shape ({approved, spine}), the error condition, the reversibility of reject, and the next workflow step — everything an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the enum and both required/optional params fully documented in the schema itself. The description adds no syntax or format detail beyond that, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (approve/reject) and resource (StorySpine) and explicitly ties itself to the sibling that produced it (lore_story_plan). An agent can distinguish it from lore_arc_decide / lore_writer_decide without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the precondition ('call after the user views the StorySpine content and decides'), the failure mode (error if no StorySpine), the reject path (re-call lore_story_plan with feedback), and the follow-on step (lore_writer_skill). When-to-use, when-not, and alternatives are all covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_story_planA
Destructive

작품 전체 StorySpine(처음부터 결말까지의 인과 사슬, 인물 동력, 중간 재해석, 최종 선택의 대가)을 생성하고 구조·품질 검증을 거쳐 .vibelore/story-spine.json과 world/story-spine.md에 저장한다. 순서는 lore_create 다음, lore_writer_skill 앞이며 기반과 승인된 StoryProfile이 필요하다. 아크 단위 계획은 lore_arc_plan이 따로 만든다. 호출할 때마다 기존 StorySpine을 이력 없이 교체한다(review면 pending으로 돌아가 이후 단계가 막힌다). 생성·품질 판정·언어 검증에 status=needs_model이 약 3회 나오며 모두 답하기 전에는 저장하지 않는다. 검증에 떨어지면 오류로 끝나고 저장하지 않는다. 반환은 {spine(quality 포함), needsApproval}.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoreview(기본)=pending으로 저장하고 사용자 승인을 기다린다. auto=검증 통과 즉시 active로 저장한다. 사용자가 "알아서·묻지 말고"라고 한 경우만 auto.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
feedbackNo거절한 StorySpine을 다시 만들 때 반영할 사용자 피드백. 이전 StorySpine은 모델에 다시 보내지 않으므로 피드백만으로 이해되게 쓴다.
directionNo작품 전체 방향에 대한 작가 지시. 생략하면 작품 브리프를 쓴다.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds substantial beyond-schema behavior: the existing StorySpine is replaced with no history, review mode returns to pending and blocks later stages, roughly three needs_model rounds must be answered before saving, and validation failure aborts with an error and no save. The only gap is it does not quantify cost/latency of the multi-round model interaction beyond the round count.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and artifacts, then ordering, then side effects and return shape. Every sentence carries distinct information, though the dense parentheticals make it read heavier than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description supplies the return shape {spine (with quality), needsApproval}. Combined with prerequisites, ordering, destructive semantics, multi-round interaction, and failure behavior, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description still adds meaning beyond the schema by explaining the downstream consequence of mode=review (downstream steps become blocked) and reinforcing the destructive replace semantics, which is not stated in the parameter's own description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (generate the whole-work StorySpine) and enumerates its scope (causal chain, character motivation, mid reinterpretation, cost of the final choice) plus the two artifacts it writes. It explicitly distinguishes itself from siblings by name: arc-level planning is lore_arc_plan's job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit ordering (after lore_create, before lore_writer_skill), prerequisites (foundation plus an approved StoryProfile), and a named alternative for a different granularity (lore_arc_plan). It also explains the mode=review consequence of blocking downstream steps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_story_statusA
Read-onlyIdempotent

StorySpine만 읽기 전용으로 조회한다. 없으면 {planned:false}, 있으면 {planned:true, spine(status: pending|active|rejected, 인과 사슬·인물 동력·quality)}. 아크 계획은 lore_arc_status, 작품 전체 진행은 lore_status로 본다.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds value beyond them by disclosing the two return shapes ({planned:false} vs {planned:true, spine(...)}) and the status enum values pending|active|rejected. It does not mention error behavior or path resolution edge cases, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler: scope/read-only nature first, return contract second, sibling routing last. Everything is front-loaded and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description itself documents both possible return shapes and the nested spine fields, and the sibling disambiguation covers the remaining ambiguity. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so workId's pattern/limits and project's default (server run directory) are already documented in the schema. The description adds no parameter-level detail, which is the correct baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (읽기 전용으로 조회) and resource (StorySpine), and explicitly names the two sibling tools it is not (lore_arc_status for arc planning, lore_status for overall work progress). An agent can distinguish it from siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes adjacent questions to alternatives: arc planning goes to lore_arc_status and whole-work progress goes to lore_status. The condition selecting each alternative is stated, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_style_anchorA
Idempotent

사용자가 좋다고 승인한 정본 1~3화를 작품의 문체 기준으로 고정하거나 현재 기준을 조회한다. 자동으로 최신 화를 기준으로 삼지 않으므로 사용자가 특정 화를 좋다고 말했을 때만 approve한다. action=status(기본)는 읽기 전용이고 기준이 없으면 status=missing. approve는 .vibelore/style-anchor.json의 이전 기준을 새 기준으로 교체하고 {status:active, anchor(revision·발췌·기준 지문)}를 돌려준다. 모델 호출 없음. 초고 요청에서 기준 예시를 빼려면 lore_configure의 disabledDraftSections에 style-anchor를 넣는다.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNostatus(기본)=조회, approve=지정 화를 새 문체 기준으로 승인
reasonNo사용자가 이 원고를 선호한 이유. 작품 전체의 새 의무가 아닌 문체 참고로 전달한다.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
chaptersNoapprove할 정본 화 번호 1~3개

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses rich behavioral details beyond annotations. It explicitly states that approve swaps the previous anchor in .vibelore/style-anchor.json, confirms no model calls are made, returns a specific object structure, and defines status=missing when no anchor exists. This is critical mutation context that annotations (idempotent, non-destructive) do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then systematically addresses behavioral restrictions, file side-effects, return values, and cross-tool integration without a single wasted sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a tool that mutates state and has no output schema. The description provides the return structure, the file mutated, the no-op conditions, and user intent requirements, leaving no ambiguity for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds critical semantic context by explicitly stating that action=status is the default (기본), which is helpful, but the rest of the parameter semantics are already handled by the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific dual-purpose verb set (승인한 정본을 문체 기준으로 고정하거나 조회) applied to a well-bounded resource. It clarifies the scope constraint (1~3화) and distinguishes itself from the concept of 'latest chapter' behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when NOT to use the tool's approve action by stating it does not automatically default to the latest chapter; approve should only be called when the user explicitly approves a specific chapter. It also references a sibling tool (lore_configure) for an alternative behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_syncA

Published HEAD 이후 사람이 world/·characters/·chapters/에서 직접 고친 Markdown을 정본에 반영한다. lore_status나 lore_write가 working-tree drift(needs_sync)를 보고하면 집필 전에 이 도구를 쓴다. 공백만 바뀐 편집은 무시한다. 3단계 승인 흐름: inspect(기본)는 변경을 분류만 한다(기준 지문 갱신 외 쓰기 없음). validate는 마지막 화 손수정이면 재검사(모델 작업→needs_model→lore_resume), 세계·인물 변경이면 바뀐 항목과 영향받는 계획을 보여 주고 approvalId를 발급한다. apply는 그 approvalId로 새 정본을 게시한다. approvalId는 한 번만 쓸 수 있고 validate 이후 파일이 또 바뀌면 STALE_SYNC_CANDIDATE로 거부된다. 이전 화 손수정은 반영하지 않으므로(rewrite_refold_required) 되돌려야 한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoinspect(기본)=변경 분류, validate=재검사·영향 검토 후 approvalId 발급, apply=approvalId로 게시
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
approvalIdNoapply 전용. 가장 최근 validate가 돌려준 approvalId(sync-…). 한 번 쓰면 소진된다.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only state readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description goes well beyond: inspect writes nothing except the baseline fingerprint, approvalId is single-use, a post-validate file change yields STALE_SYNC_CANDIDATE, and whitespace-only edits are ignored. This is exactly the mutation-safety context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: purpose first, then trigger, then the three-stage flow with failure modes. Every sentence carries information, though the approval-flow paragraph is packed tightly enough to require a careful second read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-stage, stateful mutation tool with no output schema and no idempotency guarantee, the description supplies the full lifecycle: prerequisites, stage semantics, approval token lifetime, and rejection conditions. An agent can drive the workflow end-to-end from this text alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains what each action stage does behaviorally (inspect classifies only, validate issues approvalId, apply consumes it) and why approvalId expires. Only project path handling is left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb+resource: it reflects human-edited Markdown in world/·characters/·chapters/ into the canon after published HEAD. That scope is distinct from siblings like lore_write and lore_status, which the description explicitly positions itself against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger (use when lore_status or lore_write reports working-tree drift/needs_sync, before writing) and an explicit exclusion (prior-chapter manual edits are not reflected; they must be reverted via rewrite_refold_required). The alternative routing to lore_resume on needs_model is also named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_webtoon_decideA
Destructive

[deprecated] 진행 중인 컷별 작업 마무리 전용. 현재 웹툰 방향·각색 계획·시각 기준·최종본의 정확한 승인 ID에 답한다. 수정 요청은 같은 작업의 관련 단계로 돌아가고 최종 파일이 바뀌면 과거 승인은 사용할 수 없다. approve는 관문 종류에 따라 프로젝트 webtoon/(profile.md, episodes/, references/)를 쓰거나 덮어쓰고 게시하며, 이어지는 단계가 needs_model을 돌려줄 수 있다. hold는 기록만, reject는 워크플로를 끝내며 이후 작업은 lore_webtoon_scene으로 한다. 사용자 결정을 받은 뒤에만 호출한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesapprove=승인·반영, request_revision=feedback으로 관련 단계 재작업, hold=보류, reject=워크플로 종료.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
feedbackNorequest_revision에 필수. reject에는 선택이며 기록만 된다.
revisionNo낙관적 동시성 확인용 현재 revision. 저장된 값과 다르면 STALE_WEBTOON_REVISION으로 거부한다. 생략 가능.
approvalIdYes현재 상태의 approvalId. revision이 바뀌면 이전 id는 STALE_WEBTOON_APPROVAL로 거부된다.
workflowIdYes대상 컷별 워크플로 id(필수).
revisionTargetNolettering은 shotIds의 조판만 수정. adaptation은 계획·러프·시각·최종 승인에서 재각색. storyboard는 러프 승인에서 sceneIds의 구도만 수정(생략하면 모든 러프). 소설과 승인 대사는 유지한다.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say it is destructive and non-idempotent; the description goes much further, disclosing that approve writes/overwrites the project webtoon directory (profile.md, episodes/, references/) and publishes, that a downstream stage may return needs_model, that hold only records, and that reject terminates the workflow. It also states past approvals become unusable when the final file changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is dense but front-loaded: deprecation and purpose lead, then per-action outcomes, then the precondition. The action/outcome sentences each carry weight, though the approval-ID discussion is somewhat compressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter destructive tool with a nested revisionTarget object and no output schema, the description covers outcomes, next-step routing, and the user-decision precondition well. It could still clarify the return payload shape and the STALE error conditions, which currently live only in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the action enum, feedback, revision, approvalId and revisionTarget semantics are already documented. The description's per-action notes (hold/reject) largely restate what the schema says, adding only marginal cross-parameter context, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: it resolves approval decisions for an in-progress per-cut webtoon workflow, and it names the sibling to use afterward (lore_webtoon_scene). The '[deprecated]' prefix muddies whether an agent should still call it, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a precondition ('사용자 결정을 받은 뒤에만 호출한다') and a routing rule for after reject ('이후 작업은 lore_webtoon_scene으로 한다'). It does not contrast against the other *_decide siblings (lore_story_decide, lore_arc_decide, lore_writer_decide), so it stops short of explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_webtoon_planA
Destructive

[deprecated] 새 작업은 lore_webtoon_scene을 사용한다. 진행 중인 컷별 작업의 인터뷰·각색 이어가기 전용. 소설 원작을 고정한 뒤 만화 제작 인터뷰·방향 승인·각색·콘티 검토를 이어간다. 새 컷별 작업 시작과 종료된 작업의 newWorkflow는 WEBTOON_PANEL_PATH_DEPRECATED로 거부된다. 페이지형은 needs_format_support로 대기하며 세로형으로 자동 대체하지 않는다. needs_interview는 사용자 질문, needs_model은 lore_resume 모델 응답이다. 상태는 .vibelore/webtoon/에 저장하고, mode=auto에서는 승인 관문을 자동 통과시켜 프로젝트 webtoon/profile.md 등을 덮어쓴다. direction·feedback·responses를 주면 인터뷰 단계로 되돌아가 이후 계획이 초기화된다.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoreview(기본)=관문마다 사용자 승인, auto=추천값으로 채우고 관문 자동 승인. 인터뷰 단계에서만 바꿀 수 있다.
retryNomodel_failed에서 실패한 모델 단계를 재시도(최대 3회)하거나, plan_invalid·editorial_invalid에서 실패 사유를 반영해 다시 생성한다.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
episodeNo생성 때 고정된 웹툰 회차 번호(기본 1).
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
feedbackNo사용자 원답이나 수정 요청. 주면 인터뷰 단계로 돌아가 근거로 기록된다. adoptEdits에 필수.
maxShotsNo생성 때 고정된 컷 수 상한(기본 40, 1~120). 목표가 아니라 상한이다.
revisionNo낙관적 동시성 확인용 현재 revision. 저장된 값과 다르면 STALE_WEBTOON_REVISION으로 거부한다. 생략 가능.
directionNo사용자가 정한 작화·연출 방향. 주면 인터뷰 단계로 돌아간다.
responsesNo사용자 선택만 전달. W04는 자유 작화 설명, W15는 standard|soft|minimal 또는 지원 설정 JSON 문자열, W16은 scroll|page-ltr|page-rtl. 자유로운 원답은 feedback으로 전달해 근거를 보존하며 정리한다. 기본 선택 표시나 무응답을 승인으로 만들지 않는다.
segmentedNo이미 시작된 컷별 작업의 분할 제작 여부(시작 때 정해지며 바꿀 수 없다). 공통 지침/회차 개요 → 장면당 최대6컷 각색 → 인접 컷 포함 부분 검토 → 전체 흐름 검토. 조판도 장면별 분할.
adoptEditsNo사람이 프로젝트 webtoon/ 파일을 고쳐 WEBTOON_WORKING_TREE_DRIFT가 났을 때 그 편집을 입력으로 받아들이고 인터뷰부터 다시 진행한다. feedback 필수.
imageModelNo진행 중인 컷별 작업의 현재 요청 모델과 같아야 한다(변경은 lore_webtoon_render에서). 이 경로로 새 작업은 시작할 수 없다.
workflowIdNo이어갈 컷별 워크플로 id. 생략하면 현재 워크플로.
newWorkflowNo더 이상 쓰지 않는다. 항상 거부되며 새 작업은 lore_webtoon_scene으로 시작한다.
sourceChaptersNo워크플로 생성 때 고정된 원작 화. 다른 값을 주면 WEBTOON_SCOPE_ALREADY_PINNED.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: it discloses that mode=auto auto-passes approval gates and overwrites project webtoon/profile.md, that state lives in .vibelore/webtoon/, and that supplying direction/feedback/responses resets subsequent planning. It also surfaces domain-specific error outcomes (needs_format_support waiting state, no silent vertical fallback), which an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the [deprecated] marker and the replacement tool, which is the most important routing signal. The remaining sentences are dense but each carries distinct information (gates, storage path, error states, reset behavior); it is information-rich rather than padded, though the multi-clause sentences are harder to scan than an ideal definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter, stateful, deprecated workflow tool with no output schema, the description covers storage location, approval-gate behavior, destructive overwrites, error codes, and reset semantics. The main omission is return/status reporting (e.g. what needs_interview/needs_model responses look like to the caller), but the core call-correctness information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description adds cross-parameter behavior the schema does not encode, namely that direction/feedback/responses jointly force a return to the interview stage and invalidate downstream plan state. It also reinforces the deprecated workflowId/newWorkflow semantics, though per-field syntax is largely left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('진행 중인 컷별 작업의 인터뷰·각색 이어가기 전용') and immediately marks itself as deprecated while naming the replacement sibling lore_webtoon_scene. An agent can distinguish this continuation-only tool from lore_webtoon_scene, lore_webtoon_render, and lore_webtoon_decide without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (continuing in-progress per-cut interview/adaptation), explicit when-not (new work and newWorkflow are rejected with WEBTOON_PANEL_PATH_DEPRECATED), and names the correct alternative for new work. It also specifies the interview/direction-approval/adaptation/storyboard sequence the agent is expected to walk through.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_webtoon_renderA

[deprecated] 진행 중인 컷별 작업 마무리 전용. 새 작업은 lore_webtoon_scene을 사용한다. 승인 계획의 이미지 요청과 조판을 관리한다. 새 계획은 대사·독백·설명·효과음과 사물 글자를 구분한다. 사물 글자는 이미지에 포함하고 실제 읽힘·표면 검토 후 중복 조판하지 않는다. needs_image_choice에서 모델·내장/API·비용을 확인하고 사용자 선택을 작품별로 계속 사용한다. API는 호스트가 실행하고 서버는 모델·참조·반입·승인을 관리한다. 실행 불가는 needs_image_runtime, revisionTarget.kind=lettering은 조판만 수정한다. 후보 파일은 .vibelore/webtoon/에 쓰며 프로젝트 webtoon/에는 lore_webtoon_decide 승인 때만 반영된다. 조판 분석·렌더 검토는 needs_model→lore_resume.

ParametersJSON Schema
NameRequiredDescriptionDefault
retryNo실패한 조판 분석 모델 요청을 같은 단계에서 재시도한다.
assetsNo호스트가 생성한 컷 이미지 반입. 같은 shotId는 교체되며 final에서는 룩 승인된 이미지를 바꿀 수 없다.
detailNosummary는 반복되는 계획·참조 상세를 생략한다. jobs·승인 ID·검토 실패는 유지한다.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
qualityNoreferences=인물·배경 참조 이미지 생성·승인(참조가 없으면 강제), preview(기본)=일부 컷과 조판으로 룩 승인, final=룩 승인 뒤 전체 컷.
feedbackNo선택 컷 수정의 구체적 변경 내용. preview에서 수정 요청서를 발급한다.
revisionNo낙관적 동시성 확인용 현재 revision. 저장된 값과 다르면 STALE_WEBTOON_REVISION으로 거부한다. 생략 가능.
imageModelNo이미지가 없는 승인 계획에서 모델을 제안한다. needs_image_choice를 확인·확정한 뒤 새 계획 승인을 받는다. 이후 같은 선택은 유지한다.
referencesNo호스트가 생성한 참조 이미지 반입. inputHash는 참조 job과 같아야 하며, 참조가 바뀌면 그 참조를 쓴 컷 이미지는 폐기된다.
workflowIdYes대상 컷별 워크플로 id(필수). 장면 워크플로는 USE_WEBTOON_SCENE_TOOL로 거부된다.
reviewAccessNo호스트가 확인한 합성본 열람 가능 여부. false이면 불가능한 검토 호출을 생략하고 미완료 승인 대기로 내린다. true는 검토 완료나 보안 제한 우회 허가가 아니다. 대기 요청/승인 중에는 변경하지 않는다.
continuityPlanNo새 제작은 version:2로 단순 러프→사용자 storyboard 승인→본 작화를 진행한다. scenes:[{id,environmentId,layout,cameraAxis}], shots:[{shotId,sceneId,transition:reset|continue|cut,previousShotId?,anchorShotId?,resetReason?,visibleCharacters?,background?:establish|partial|abstract,blocking,camera,before,after,change,decisiveMoment}]. 모든 컷을 읽기 순서로 포함, 연속 묶음당 최대 6컷. continue/cut은 바로 앞 컷 ID, 첫 컷 이후 reset은 실제 시간·장소 전환 사유 필수. cut은 승인 러프 기준 병렬 생성 후 두 그림 연결 검토, continue/anchor는 선행 작화 검토 후 순차 생성. 승인 러프는 실제 첨부. feedback 필수. v1 기존 동작 유지. 자세한 절차는 docs/reference/WEBTOON_WORKFLOW.md.
imageExecutionNo모델과 실행 경로를 제안. needs_image_choice를 사용자에게 보여준다. API는 별도 과금이며 호스트가 실행한다.
revisionTargetNo그림·대사를 유지하는 조판만 수정. feedback과 함께 preview에서 사용한다.
continuityRoughsNo러프 반입: sceneId,inputHash,path,provenance. 현재 러프 job만 실행.
continuityReviewsNo실제 그림 검토: kind(rough|shot|transition),id,hash,inspectedImages:true,passed:boolean,evidence. v2 rough는 roughReviewJobs의 contextHash, 모든 컷 observations:[{shotId,verdict,evidence}]와 모든 이전 연결 transitions:[{from,to,verdict,evidence}], shot은 composition:{verdict,evidence} 필수. verdict=clear|unclear|contradiction. passed=true는 전부 clear일 때만. transition은 continuity.transitions의 id/hash로 실제 두 그림을 검토. assets와 같은 호출 가능. 호스트 자기보고이며 러프 사용자 승인을 대신하지 않는다.
regenerateShotIdsNopreview 전용. 다시 그릴 컷 id. feedback 필수이며 assets와 함께 쓸 수 없다. 해당 컷과 연속 컷 이미지를 폐기하고 편집 job을 발급한다.
confirmImageChoiceNo사용자가 선택한 현재 imageChoice.id. feedback에 원답을 전달한다. 선택은 같은 작품의 다음 컷·회차에도 유지하며 변경 시 다시 확인한다.
preserveReferencesNo모델 변경 시 승인된 동일 디자인 참조를 재사용한다. 실제 생성 모델·파일 해시·원 승인 이력을 보존하며 새 컷은 새 모델로 요청한다. 사용자 선택에 함께 결합된다. 기본 false.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readonly, non-idempotent, non-destructive. The description adds genuinely useful behavior beyond that: candidate files land in .vibelore/webtoon/ and only reach project webtoon/ after approval, API execution is host-side with separate billing, needs_image_runtime blocks execution, and lettering-only revisions are scoped by revisionTarget.kind=lettering. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the deprecation and the replacement sibling, which is good, but the remainder is a single dense paragraph mixing routing, billing, file paths, and per-parameter behavior without structure. Given 20 parameters some density is warranted, but it reads as a wall of text rather than organized guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated, 20-parameter, deeply nested tool with no output schema, the description covers the key flows (image request/lettering management, approval gating, host-executed API, retry/review handoff). It is complete enough to invoke safely, with the only gap being that most fine-grained semantics live in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 20 parameters; baseline is 3. The description reinforces a few (image choice continuity, lettering-only revision) but adds little syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening states the scope precisely – '진행 중인 컷별 작업 마무리 전용' (dedicated to finishing in-progress per-cut work) – and names the sibling that handles new work (lore_webtoon_scene). The deprecation is front-loaded, so an agent can immediately tell this is not the tool for fresh jobs. It never quite names the core action as a verb+resource (render/lettering management is only implied).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: new work → lore_webtoon_scene, lettering analysis/render review → needs_model → lore_resume, and candidate files only become real via lore_webtoon_decide approval. That covers when-to-use and several alternatives, though it doesn't enumerate all sibling relationships (lore_webtoon_plan, lore_webtoon_decide).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_webtoon_sceneA

기본 웹툰 제작 경로. 소설 정본의 한 장면을 대사가 작품 언어 원문으로 들어간 이미지 한 장으로 만든다. 원작→영어 장면 연출→생성 전 검증→문자 포함 장면 이미지→실제 시각 검토 순서이며 컷 배치와 카메라는 이미지 모델에 맡긴다. 호출 전에 webtoon-discovery-interview로 원작 범위·화풍·참조·칸 수·이미지 모델을 사용자와 정한다. 서버는 이미지 API를 부르지 않는다: needs_scene_image일 때 jobs의 요청을 호스트가 OpenAI API(별도 과금)로 실행하고 결과 파일을 asset으로 넘긴다. 선택이 없는 작품은 start에서 needs_image_choice로 과금 선택을 사용자에게 확인하며, 승인된 선택은 재사용한다. 모델 단계(연출·검증·시각 검토)는 needs_model→lore_resume, 칸 수가 없으면 needs_interview. 상태는 .vibelore/webtoon/에 저장하고 소설 정본과 프로젝트 webtoon/ 폴더는 건드리지 않는다. 진행 중 워크플로가 있으면 start는 WEBTOON_WORKFLOW_ACTIVE로 거부되므로 revise나 retry로 끝낸다. 시각 검토를 통과하면 status=completed. 기존 컷별 workflow는 변경하지 않는다.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoneeds_scene_image 단계에서 호스트가 생성한 장면 이미지. path는 프로젝트 안의 PNG/JPEG, inputHash는 job의 inputHash, provenance는 {kind:"openai-api", requestedModel, selectionId}.
actionNostart=새 장면 워크플로 시작, revise=feedback으로 연출부터 다시(완료된 장면도 다시 연다), retry=scene_model_failed에서 실패 단계 재시도. 생략하면 현재 단계를 이어간다(대기 중 모델 요청 재전송, jobs 반환, asset 반입).
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
feedbackNorevise에 필수인 수정 요청. confirmImageChoice와 함께 start할 때는 과금 선택에 대한 사용자 원답을 넣는다.
revisionNo낙관적 동시성 확인용 현재 revision. 저장된 값과 다르면 STALE_WEBTOON_REVISION으로 거부한다. 생략 가능.
directionNo사용자가 확정한 작화·문자·판면/배치 재량을 영어로 전달(대사는 작품 언어 원문 그대로 이미지에 들어간다).
imageModelNo확정된 API 선택이 없는 작품의 start에서 제안할 OpenAI API 모델. 기본 2.5 Sunburst.
panelCountNo사용자가 선택한 정확한 칸 수(1~12) 또는 "auto". auto는 각색할 때마다 AI가 3~12칸 중 적정 수를 다시 고른다. 3칸 미만은 연속성 경고가 warnings에 실린다. start에서 누락하면 needs_interview. 칸 크기와 배치는 AI가 선택.
referencesNostart 필수. 사용자가 지정한 인물·배경 참조 이미지 1개 이상(직전 장면 포함 최대 16개). description은 영어, id에 previous-scene은 쓸 수 없다.
workflowIdNo대상 장면 워크플로 id. 생략하면 현재 워크플로.
autoRevisionsNostart 전용. 생성 전 검증 또는 이미지 검토가 불합격이면 관측 결함을 feedback으로 자동 재설계하는 횟수(기본 2). 재설계마다 새 이미지 요청이 나가며 실패한 시도는 attempts에 남는다. 0이면 기존처럼 scene_needs_revision에서 멈춘다.
sourceUnitIdsNo고정된 원작 문단 ID. 생략 시 선택 회차 전체. 한 이미지에 담을 장면 범위로 지정한다.
sourceChaptersNostart 전용. 각색할 소설 화 번호(1~20개). 생략하면 첫 화만.
confirmImageChoiceNoneeds_image_choice로 받은 imageChoice.id. 사용자의 원답을 feedback에 넣어 같은 start를 다시 호출하면 이 작품의 API 선택으로 확정한다.
previousWorkflowIdNo이어지는 직전 장면 workflow. 실제 이미지·설계·검토 결과를 상속해 연속성을 검증하며 이전 검토 판정은 그대로 보존.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the mutation safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds far more: the server never calls the image API, the host must execute the OpenAI request and return it as an asset, state lives in .vibelore/webtoon/ and novel canon plus the project webtoon/ folder are untouched, and existing per-cut workflows are preserved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but densely packed and front-loaded with the core purpose before branching into checkpoints, state location, and error paths. For a 16-parameter workflow tool nearly every clause carries actionable information, though a few state/error details could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 16 parameters, the description carries the necessary burden: it describes the checkpoint protocol, the needs_* signals in both directions, error codes (WEBTOON_WORKFLOW_ACTIVE), the completion condition (status=completed), and side-effect boundaries. An agent has enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description still adds flow-level meaning that the schema does not: the confirmImageChoice/feedback round-trip for billing approval, the reuse of an approved choice, and the autoRevisions redesign loop that emits new image requests and records failures in attempts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (creates one image from a single novel scene, with dialogue in the work's original language) and lays out the full pipeline (원작→연출→검증→장면 이미지→시각 검토). It implicitly distinguishes itself from siblings lore_webtoon_plan and lore_webtoon_render by naming its exact scope and the discovery interview that must precede it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use and prerequisites: webtoon-discovery-interview must fix scope, style, references, panel count and image model first. It names alternative actions for a blocked state (revise/retry when start returns WEBTOON_WORKFLOW_ACTIVE) and routes model stages to lore_resume and missing panel count to needs_interview.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_workflow_historyA
Read-onlyIdempotent

워크플로의 감사 이력(단계 전환·검토 발견·승인·커밋 이벤트)을 읽기 전용으로 조회한다. 현재 상태만 필요하면 lore_workflow_status를 쓴다. 반환은 {found, workflowId, events, modelExchanges?}. includeModelExchanges=true이면 선택된 이벤트의 실제 모델 요청과 응답 전문까지 돌려주므로 응답이 커진다. 대체된 이전 워크플로도 id로 조회할 수 있다.

ParametersJSON Schema
NameRequiredDescriptionDefault
laneNoprose(기본)=소설 집필, webtoon=웹툰 제작.
limitNoprose 전용. 최근 이벤트 몇 개를 돌려줄지. 기본 100. webtoon은 전체를 돌려준다.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
workflowIdNo조회할 워크플로 id. 생략하면 현재 워크플로.
includeModelExchangesNotrue면 이벤트가 참조한 모델 요청·응답 전문을 포함한다. 기본 false. 웹툰 장면 워크플로에서는 무시된다.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the description isn't burdened there. It adds real behavioral context: the exact return shape, a response-size warning when includeModelExchanges=true, and the fact that replaced/archived workflows remain retrievable by id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then the alternative, then the return shape, then the size caveat. Each sentence carries distinct, non-redundant information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description supplies the return shape ({found, workflowId, events, modelExchanges?}), the alternative routing, the parameter caveats, and the archival lookup case. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema carries most parameter meaning (baseline 3). The description adds value by explaining that workflowId can target replaced prior workflows and by reinforcing the includeModelExchanges side effect (large responses, ignored for webtoon scenes) beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('워크플로의 감사 이력... 조회한다') and enumerates exactly what the history contains (단계 전환·검토 발견·승인·커밋 이벤트). It explicitly distinguishes itself from the sibling lore_workflow_status, so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (lore_workflow_status) and the exact condition that selects it ('현재 상태만 필요하면'). Also flags the when-not case for includeModelExchanges ('웹툰 장면 워크플로에서는 무시된다'), leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_workflow_statusA
Read-onlyIdempotent

진행 중인 한 화(또는 웹툰 장면) 워크플로의 현재 단계, 시도 횟수, 다음 행동과 품질 결과를 읽기 전용으로 조회한다. 작품 전체 진행은 lore_status, 지난 이벤트는 lore_workflow_history를 쓴다. 소설은 {active, workflow(원고 본문 제외), resume?}를 돌려주며 워크플로가 없으면 {active:false}. 모델 응답 대기 중이면 resume.runId로 lore_resume을 이어갈 수 있다. lane=webtoon은 현재 웹툰 워크플로 상태를 돌려주며 status가 곧 단계다.

ParametersJSON Schema
NameRequiredDescriptionDefault
laneNoprose(기본)=소설 집필, webtoon=웹툰 제작.
detailNowebtoon 전용. 기본 summary. 상세 계획/참조가 필요할 때 full.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
workflowIdNowebtoon 전용. 조회할 워크플로 id. 생략하면 현재 워크플로. prose는 항상 현재 워크플로를 본다.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered. The description adds real behavioral context beyond them: the concrete prose return shape {active, workflow, resume?}, that the manuscript body is excluded, the {active:false} no-workflow case, and the resume.runId handoff. It stops short of documenting pagination or the webtoon full-detail payload, keeping it at a strong 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and then layers sibling-routing, return shapes, and lane behavior in short sentences. Dense but each sentence carries a distinct fact; slightly crowded but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full return-value burden and does so: it gives the prose shape, the empty-workflow shape, the body-exclusion note, the webtoon stage semantics, and the resume handoff. Nothing an agent needs to call or interpret it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents workId, project, lane, detail, and workflowId. The description adds lane-specific return semantics (webtoon returns status as stage) but no format or syntax detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (읽기 전용으로 조회) and resource (진행 중인 한 화/웹툰 장면 워크플로의 단계·시도 횟수·다음 행동·품질 결과), and explicitly distinguishes three sibling tools by name. An agent can tell it apart from lore_status and lore_workflow_history without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: overall work progress → lore_status, past events → lore_workflow_history, and waiting-for-model continuation → lore_resume via resume.runId. The when-to-use boundaries are stated rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_writeA

다음 화의 계획 확인부터 원본 초고 프롬프트, 의미·논리 검사(최대 3회, 그 사이 최소 수정 최대 2회), 검사 영수증, 승인·커밋까지 순서대로 실행하는 기본 집필 도구다. 소설을 이어 쓸 때는 이 도구만 호출한다. 항상 마지막 화의 다음 화를 쓰며 기존 화를 덮어쓰지 않는다. 같은 화의 진행 중 워크플로가 있으면 새로 만들지 않고 이어간다. 모델 작업마다 status=needs_model을 돌려주므로 lore_resume으로 답한다. 준비가 덜 됐으면 status=needs_setup(FOUNDATION_MISSING·PROFILE_NOT_ACTIVE·STORY_SPINE_NOT_ACTIVE·WRITER_SKILL_NOT_ACTIVE·ARC_NOT_ACTIVE), 손수정이 있으면 needs_sync(→lore_sync)를 돌려준다. guided는 검사를 마친 원고를 status=awaiting_approval과 approvalId로 돌려주며 lore_decide로 결정한다. auto는 검사를 통과하면 chapters/·summaries/·상태·스냅숏을 커밋하고 status=completed를 돌려준다. 실패는 clean_fail·validation_incomplete·provider_error.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
autonomyNoguided(기본)=완성 원고 승인 후 커밋, auto=품질 통과 시 자동 커밋. 커밋 여부는 그 호출의 값으로 정해지므로 auto를 원하면 이어 부르는 lore_write에도 다시 넘긴다.
languageNo저장된 작품 언어와 일치하는지 확인하는 인자. 일회성 출력 언어 변경이 아니다.
sharedOnceNotrue면 needs_model 응답에 공통 본문 블록을 sharedBlocks로 한 번만 싣고, 각 request user 맨 앞 promptCache.sharedBlockRef 문자열(줄바꿈 포함)을 그 블록 text로 바꿔 보내게 한다. 요청을 직접 조립하는 호스트용이며 기본값은 자기완결 요청이다.
instructionNo이번 화에 추가할 작가 지시.
modelProfileNo단계별 모델 힌트. 비우면 호스트 기본 모델 하나로 진행한다. 값은 모델 ID 문자열 또는 { provider, modelId, reasoningEffort }. default=기준 모델, light=planning·draft·review에 쓸 가벼운 모델, identity·planning·draft·review·quality·final=단계별 명시. review=advisory 검토(coherence·editorial·character·reader·arc·profile drift), quality=상태를 쓰는 추출·연속성 검사·pattern ledger. 호스트 릴레이에서는 요청마다 힌트로 전달되고, 로컬 모델은 provider "local"일 때만 실제로 바뀐다.
retryValidationNo실패 상태의 보존된 원고를 새 검증 epoch에서 다시 검사한다.

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, non-idempotent, non-destructive, and the description adds real value beyond them: it never overwrites existing chapters, resumes in-progress workflows instead of duplicating, discloses retry caps (검사 최대 3회, 수정 최대 2회), and enumerates terminal statuses (completed, awaiting_approval, needs_model, needs_setup, needs_sync, clean_fail, validation_incomplete, provider_error). It does not, however, describe permission/auth requirements or side effects on chapters/ and summaries/ beyond 'commits', leaving some behavioral surface implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is dense and long, but front-loaded with the core purpose and ordered pipeline, and nearly every sentence carries routing or state information rather than filler. The heavy status-code enumeration is justified by the multi-step, multi-tool workflow it governs, though it reads as a single packed block.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, nested-object, no-output-schema tool that orchestrates a multi-step workflow, the description covers the full lifecycle, all handoff tools, and every terminal status an agent must branch on. Nothing needed to invoke or route the call correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents workId, project, autonomy, language, sharedOnce, modelProfile, and retryValidation; baseline is 3. The description nonetheless reinforces the autonomy semantics (guided=approval-then-commit vs auto=commit-on-pass) and warns that the value must be re-passed on follow-up calls, adding meaning beyond the field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

It names a specific resource ('기본 집필 도구') and enumerates the ordered pipeline it runs (plan check → draft → semantic/logic checks → receipt → approval/commit), which an agent can distinguish from siblings like lore_webtoon_scene or lore_plan. It also states the scope constraint ('항상 마지막 화의 다음 화를 쓰며 기존 화를 덮어쓰지 않는다').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules: '소설을 이어 쓸 때는 이 도구만 호출한다', use lore_resume on needs_model, lore_sync on needs_sync, lore_decide on awaiting_approval, and it lists the exact needs_setup reason codes. When-to-use, when-not, and the alternative tool are all named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_writer_decideA
Idempotent

lore_writer_skill이 오디션으로 고른 WriterSkill을 승인(active)하거나 거절(rejected)한다. 다른 후보로 바꾸는 기능은 없으므로 원하지 않으면 거절 후 feedback과 함께 다시 생성한다. 모델 호출 없음. WriterSkill이 없으면 오류. 반환은 {approved, skill}. 승인 뒤 다음 단계는 lore_arc_plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesapprove=active로 전환한다(생성 때 받은 검증 영수증이 없거나 이후 정본이 바뀌었으면 status=clean_fail). reject=rejected로 표시하고 파일은 지우지 않는다. 거절 뒤에는 lore_writer_skill을 feedback과 함께 다시 호출한다.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, non-destructive, idempotent. The description adds genuine context beyond them: no model invocation occurs, a missing WriterSkill raises an error, and the response is {approved, skill}. It does not cover the clean_fail side-effect path, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then adds only high-value clauses (no swap, no model calls, error condition, return shape, next step). No redundancy and nothing filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation decision tool with annotations and no output schema, the description covers error behavior, return shape, and workflow positioning. An agent has everything needed to call it correctly and route to the next step.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the action enum's approve/reject semantics are fully described in the schema itself. The description names the action concept but adds no format or value detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (approve/reject) and the exact resource: the WriterSkill chosen by lore_writer_skill's audition. It names the sibling that produces the target and distinguishes the boundary ('no swap function'), so an agent can separate this from lore_writer_skill without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit about the disallowed path (no swapping candidates), the correct workaround (reject, then regenerate via lore_writer_skill with feedback), and the follow-on step after approval (lore_arc_plan). When-to-use and what-not-to-do are both stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_writer_skillA
Destructive

이 작품을 쓸 WriterSkill(장면 판단·정보 지연·보상 지급·반복 고착 방지 방식)을 서로 다른 후보 3개로 만들고, 후보별 짧은 산문 오디션을 판정 모델이 비교해 하나를 고른다. 표면 문체가 아니라 서술 판단을 설계한다. 순서는 lore_story_decide(approve) 다음, lore_arc_plan 앞이며 기반과 승인된 StorySpine이 필요하다. 문체 예시를 고정하는 lore_style_anchor와는 다르다. 호출할 때마다 기존 WriterSkill을 이력 없이 교체해 .vibelore/writer-skill.json과 world/writer-skill.md에 저장한다. 후보 생성·오디션 판정·언어 검증에 status=needs_model이 약 3회 나온다. 반환은 {skill(선택 후보와 점수), candidates, needsApproval}.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoreview(기본)=pending으로 저장하고 사용자 승인을 기다린다. auto=검증 통과 즉시 active로 저장한다. 사용자가 "알아서·묻지 말고"라고 한 경우만 auto.
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.
feedbackNo거절 이유나 원하는 서술 방향. 다음 후보 생성에 반영된다.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=false; the description goes further by stating that each call replaces the existing WriterSkill with no history and writes to .vibelore/writer-skill.json and world/writer-skill.md. It also discloses the ~3 status=needs_model round trips and the return payload, which annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence and each subsequent sentence carries distinct information (design intent, ordering, alternative, side effects, round trips, return shape). It is dense and slightly long, but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape ({skill, candidates, needsApproval}), the destructive save behavior, the model-status round trips, and placement in the workflow. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents workId, project, feedback and the mode enum with its review/auto semantics. The description adds no parameter-level detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource (generate 3 candidate WriterSkills and have a judging model select one) and explicitly contrasts itself with lore_style_anchor. An agent can distinguish this tool from its siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit sequencing (after lore_story_decide(approve), before lore_arc_plan), states prerequisites (base plus approved StorySpine), and names the alternative it is NOT (lore_style_anchor). This is exactly the routing information an agent needs to pick correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lore_writer_statusA
Read-onlyIdempotent

WriterSkill만 읽기 전용으로 조회한다. 없으면 {planned:false}, 있으면 {planned:true, skill(status: pending|active|rejected, 선택 후보, 후보 3개와 오디션 산문·점수)}. 사용자에게 오디션 결과를 보여 줄 때 쓴다. 문체 기준 예시는 lore_style_anchor, 작품 전체 진행은 lore_status로 본다.

ParametersJSON Schema
NameRequiredDescriptionDefault
workIdYes작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다.
projectNo작품 디렉터리의 절대 경로. 생략하면 서버 실행 디렉터리.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the exact branching of the response on whether a WriterSkill exists, the pending|active|rejected status domain, and the presence of candidate/addition-audition data. It stops short of describing failure or empty-candidate cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded: the read-only nature, the two return branches, the usage trigger, and sibling routing all appear in a few dense sentences with no filler. The return-shape clause is notation-heavy but each element carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description is right to encode the return shape itself, and it does so at a useful level of detail. Combined with 100% schema coverage on the two inputs and full annotation coverage, the definition is nearly self-sufficient; only error/empty edge cases are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — both workId (pattern, length, single-work-per-directory) and project (absolute path, defaults to server CWD) are fully documented in the schema. The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (read-only query of WriterSkill) and goes further by spelling out the two possible return shapes ({planned:false} vs {planned:true, skill(status, candidates, audition prose/scores)}). An agent can distinguish it from lore_writer_decide, lore_writer_skill, and lore_status without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the trigger condition ('사용자에게 오디션 결과를 보여 줄 때 쓴다') and routes to alternatives for adjacent needs: lore_style_anchor for style anchors and lore_status for overall work progress. It does not, however, name lore_writer_decide as the write counterpart of this read, nor state a when-not condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 30 tool updatesv0.4.4
    • Changedlore_arc_decide2 fields changed
      • addedInput schema / properties / action / description
        Added value: +"approve=active로 전환한다(생성 때 받은 검증 영수증이 없거나 이후 정본이 바뀌었으면 status=clean_fail). reject=rejected로 표시하고 파일은 지우지 않는다. 거절 뒤에는 lore_arc_plan을 feedback과 함께 다시 호출한다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_arc_plan5 fields changed
      • changedInput schema / properties / direction / description
        Previous value: -"사용자가 원하는 아크 방향. 비우면 자율 설계."New value: +"사용자가 원하는 아크 방향. 비우면 작품 브리프와 StorySpine에서 자율 설계."
      • changedInput schema / properties / episodes / description
        Previous value: -"아크 화수 3~20"New value: +"아크 화수 3~20(범위 밖은 잘라낸다). 기본 8."
      • changedInput schema / properties / feedback / description
        Previous value: -"거절한 계획을 다시 만들 때 반영할 피드백."New value: +"거절한 계획을 다시 만들 때 반영할 피드백. 이전 계획은 모델에 다시 보내지 않으므로 피드백만으로 이해되게 쓴다."
      • changedInput schema / properties / mode / description
        Previous value: -"review=사용자 검토, auto=자동 승인"New value: +"review(기본)=사용자 승인 전까지 pending이며 집필할 수 없다. auto=검증 통과 즉시 활성화. 사용자가 \"알아서·묻지 말고\"라고 한 경우만 auto."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_arc_review2 fields changed
      • changedInput schema / properties / throughChapter / description
        Previous value: -"평가 종료 화. 생략하면 현재 아크의 마지막 작성 화."New value: +"평가 종료 화(아크 5·10·15화째 또는 마지막 화). 생략하면 현재 아크의 마지막 작성 화이며, 그 화가 체크포인트가 아니면 오류."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_arc_status1 field changed
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_configure6 fields changed
      • addedInput schema / properties / customTracking / items / properties / feature / description
        Added value: +"어느 추적 기능에 붙일지."
      • addedInput schema / properties / customTracking / items / properties / name / description
        Added value: +"항목 이름. 같은 이름은 같은 id를 유지한다."
      • changedInput schema / properties / mergeRecords / description
        Previous value: -"같은 대상으로 확인된 기록 병합(from을 into에 흡수). 다음 커밋부터 반영."New value: +"같은 대상으로 확인된 기록 병합(from을 into에 흡수). 후보는 조회 결과의 mergeCandidates에 있다. 기존 병합에 누적되며 다음 커밋부터 반영."
      • addedInput schema / properties / mergeRecords / items / properties / from / description
        Added value: +"흡수될 기록 id"
      • addedInput schema / properties / mergeRecords / items / properties / into / description
        Added value: +"남길 기록 id"
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_create9 fields changed
      • addedInput schema / properties / brief / description
        Added value: +"작품 전제와 방향을 담은 자연어 브리프. 승인된 StoryProfile이 있으면 그 독서 계약과 합쳐 설계 입력이 된다."
      • addedInput schema / properties / chapterWordCount / description
        Added value: +"구형 분량 인자. 이름과 달리 단어가 아니라 legacyCodeUnits(대략 UTF-16 글자 수)로 해석한다. 새 호출은 length를 쓴다. 둘 다 주면 unit=legacyCodeUnits이고 target이 같아야 하며 아니면 LENGTH_CONTRACT_CONFLICT."
      • addedInput schema / properties / genre / description
        Added value: +"엔진 장르 id(lore_init과 같은 목록). StoryProfile이 없을 때만 필요하며, 있으면 무시하고 StoryProfile의 엔진 장르를 쓴다."
      • changedInput schema / properties / language / description
        Previous value: -"작품 언어 BCP 47 태그(예: ko, en-US, ja, zh-Hant). 생략하면 저장된 계약을 따른다."New value: +"작품 언어 BCP 47 태그(예: ko, en-US, ja, zh-Hant). 생략하면 저장된 계약을 따른다. StoryProfile이 있으면 그 언어와 같아야 한다."
      • changedInput schema / properties / length / description
        Previous value: -"화당 분량 계약. unit 은 legacyCodeUnits|graphemes|words."New value: +"화당 분량 계약. unit 은 legacyCodeUnits|graphemes|words, target 은 양의 정수. 생략하면 StoryProfile 값, 없으면 3000(ko는 legacyCodeUnits, 그 외는 graphemes)."
      • addedInput schema / properties / povMode / description
        Added value: +"시점(예: 3인칭제한, 1인칭). 생략하면 StoryProfile의 시점, 그것도 없으면 제한 3인칭."
      • addedInput schema / properties / targetChapters / description
        Added value: +"완결 목표 화수. 기본 40."
      • addedInput schema / properties / title / description
        Added value: +"작품 제목. 세계·캐스트 설계 입력으로도 쓰인다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_decide4 fields changed
      • addedInput schema / properties / action / description
        Added value: +"approve=커밋, request_revision=feedback대로 수정, hold=보류, reject=폐기 후 새로 쓰기."
      • addedInput schema / properties / approvalId / description
        Added value: +"직전 lore_write(awaiting_approval) 응답의 approvalId."
      • addedInput schema / properties / feedback / description
        Added value: +"request_revision에 필수인 구체적 수정 요청. reject에는 선택이며 기록만 된다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_init5 fields changed
      • changedInput schema / properties / genre / description
        Previous value: -"엔진이 아는 장르 id. 틀리면 목록을 알려준다."New value: +"엔진 장르 id(예: mystery-thriller, romantasy, regression-hunter, cozy, other). 틀리면 사용 가능 목록과 함께 거부한다. 기존 작품을 이어받을 때는 무시된다."
      • changedInput schema / properties / povMode / description
        Previous value: -"예: 3인칭제한, 1인칭"New value: +"자유 텍스트 시점(예: 3인칭제한, 1인칭). omniscient·multi-pov는 단일 화자 검사를 생략하고 none은 시점 검사를 끈다. 생략하면 제한 3인칭."
      • changedInput schema / properties / targetChapters / description
        Previous value: -"완결 목표 화수. 아크 위치 계산에 쓰인다."New value: +"완결 목표 화수. 아크 위치 계산에 쓰인다. 생략하면 저장하지 않는다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
      • changedInput schema / properties / worldFacts / description
        Previous value: -"변하지 않는 세계 사실 5~10개."New value: +"변하지 않는 세계 사실 5~10개. w1..wN id로 world/setting.md에 기록된다."
    • Changedlore_profile5 fields changed
      • addedInput schema / properties / brief / description
        Added value: +"인터뷰에서 정리한 자연어 브리프 전체(장르·톤·방향·독자 경험). 읽기 난도 답변의 근거로도 쓰인다. 비우면 기존 작품 브리프를 쓴다."
      • addedInput schema / properties / feedback / description
        Added value: +"직전 라운드의 열린 질문에 대한 사용자 답변 원문. 설계 결정으로 누적된다."
      • changedInput schema / properties / length / description
        Previous value: -"화당 분량 계약. unit 은 legacyCodeUnits|graphemes|words."New value: +"화당 분량 계약. unit 은 legacyCodeUnits|graphemes|words, target 은 양의 정수."
      • addedInput schema / properties / mode / description
        Added value: +"review(기본)=pending으로 저장하고 열린 질문을 돌려준다. auto=질문 없이 즉시 active. 사용자가 \"알아서·묻지 말고\"라고 한 경우만 auto."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_profile_decide2 fields changed
      • addedInput schema / properties / action / description
        Added value: +"approve=active로 전환한다(생성 때 받은 검증 영수증이 없거나 이후 정본이 바뀌었으면 status=clean_fail). reject=rejected로 표시하고 파일은 지우지 않는다. 거절 뒤에는 lore_profile을 feedback과 함께 다시 호출한다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_profile_status1 field changed
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_resume3 fields changed
      • changedInput schema / properties / answers / description
        Previous value: -"{ 질문 id: 모델이 만든 답변 텍스트 }"New value: +"{ 질문 id: 모델이 만든 답변 텍스트 }. 이전 라운드에 보낸 답은 저장돼 있으므로 새 질문만 보내면 된다. jsonMode 요청은 코드 펜스 없는 순수 JSON으로 답한다."
      • addedInput schema / properties / runId / description
        Added value: +"needs_model 응답의 runId(run-…). lore_write의 runId를 잃었으면 lore_workflow_status의 resume.runId로 찾는다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_rollback2 fields changed
      • addedInput schema / properties / chapter / description
        Added value: +"되돌아갈 화 번호. 그 화까지의 원고가 남는다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_snapshot_status1 field changed
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_status1 field changed
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_story_decide2 fields changed
      • addedInput schema / properties / action / description
        Added value: +"approve=active로 전환한다(생성 때 받은 검증 영수증이 없거나 이후 정본이 바뀌었으면 status=clean_fail). reject=rejected로 표시하고 파일은 지우지 않는다. 거절 뒤에는 lore_story_plan을 feedback과 함께 다시 호출한다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_story_plan4 fields changed
      • addedInput schema / properties / direction / description
        Added value: +"작품 전체 방향에 대한 작가 지시. 생략하면 작품 브리프를 쓴다."
      • addedInput schema / properties / feedback / description
        Added value: +"거절한 StorySpine을 다시 만들 때 반영할 사용자 피드백. 이전 StorySpine은 모델에 다시 보내지 않으므로 피드백만으로 이해되게 쓴다."
      • addedInput schema / properties / mode / description
        Added value: +"review(기본)=pending으로 저장하고 사용자 승인을 기다린다. auto=검증 통과 즉시 active로 저장한다. 사용자가 \"알아서·묻지 말고\"라고 한 경우만 auto."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_story_status1 field changed
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_style_anchor2 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"status=조회, approve=지정 화를 새 정본으로 승인"New value: +"status(기본)=조회, approve=지정 화를 새 문체 기준으로 승인"
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_sync3 fields changed
      • addedInput schema / properties / action / description
        Added value: +"inspect(기본)=변경 분류, validate=재검사·영향 검토 후 approvalId 발급, apply=approvalId로 게시"
      • addedInput schema / properties / approvalId / description
        Added value: +"apply 전용. 가장 최근 validate가 돌려준 approvalId(sync-…). 한 번 쓰면 소진된다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_webtoon_decide6 fields changed
      • addedInput schema / properties / action / description
        Added value: +"approve=승인·반영, request_revision=feedback으로 관련 단계 재작업, hold=보류, reject=워크플로 종료."
      • addedInput schema / properties / approvalId / description
        Added value: +"현재 상태의 approvalId. revision이 바뀌면 이전 id는 STALE_WEBTOON_APPROVAL로 거부된다."
      • addedInput schema / properties / feedback / description
        Added value: +"request_revision에 필수. reject에는 선택이며 기록만 된다."
      • addedInput schema / properties / revision / description
        Added value: +"낙관적 동시성 확인용 현재 revision. 저장된 값과 다르면 STALE_WEBTOON_REVISION으로 거부한다. 생략 가능."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
      • addedInput schema / properties / workflowId / description
        Added value: +"대상 컷별 워크플로 id(필수)."
    • Changedlore_webtoon_plan12 fields changed
      • addedInput schema / properties / adoptEdits / description
        Added value: +"사람이 프로젝트 webtoon/ 파일을 고쳐 WEBTOON_WORKING_TREE_DRIFT가 났을 때 그 편집을 입력으로 받아들이고 인터뷰부터 다시 진행한다. feedback 필수."
      • addedInput schema / properties / direction / description
        Added value: +"사용자가 정한 작화·연출 방향. 주면 인터뷰 단계로 돌아간다."
      • addedInput schema / properties / episode / description
        Added value: +"생성 때 고정된 웹툰 회차 번호(기본 1)."
      • addedInput schema / properties / feedback / description
        Added value: +"사용자 원답이나 수정 요청. 주면 인터뷰 단계로 돌아가 근거로 기록된다. adoptEdits에 필수."
      • addedInput schema / properties / maxShots / description
        Added value: +"생성 때 고정된 컷 수 상한(기본 40, 1~120). 목표가 아니라 상한이다."
      • addedInput schema / properties / mode / description
        Added value: +"review(기본)=관문마다 사용자 승인, auto=추천값으로 채우고 관문 자동 승인. 인터뷰 단계에서만 바꿀 수 있다."
      • addedInput schema / properties / newWorkflow / description
        Added value: +"더 이상 쓰지 않는다. 항상 거부되며 새 작업은 lore_webtoon_scene으로 시작한다."
      • addedInput schema / properties / retry / description
        Added value: +"model_failed에서 실패한 모델 단계를 재시도(최대 3회)하거나, plan_invalid·editorial_invalid에서 실패 사유를 반영해 다시 생성한다."
      • addedInput schema / properties / revision / description
        Added value: +"낙관적 동시성 확인용 현재 revision. 저장된 값과 다르면 STALE_WEBTOON_REVISION으로 거부한다. 생략 가능."
      • addedInput schema / properties / sourceChapters / description
        Added value: +"워크플로 생성 때 고정된 원작 화. 다른 값을 주면 WEBTOON_SCOPE_ALREADY_PINNED."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
      • addedInput schema / properties / workflowId / description
        Added value: +"이어갈 컷별 워크플로 id. 생략하면 현재 워크플로."
    • Changedlore_webtoon_render7 fields changed
      • addedInput schema / properties / assets / description
        Added value: +"호스트가 생성한 컷 이미지 반입. 같은 shotId는 교체되며 final에서는 룩 승인된 이미지를 바꿀 수 없다."
      • addedInput schema / properties / quality / description
        Added value: +"references=인물·배경 참조 이미지 생성·승인(참조가 없으면 강제), preview(기본)=일부 컷과 조판으로 룩 승인, final=룩 승인 뒤 전체 컷."
      • addedInput schema / properties / references / description
        Added value: +"호스트가 생성한 참조 이미지 반입. inputHash는 참조 job과 같아야 하며, 참조가 바뀌면 그 참조를 쓴 컷 이미지는 폐기된다."
      • addedInput schema / properties / regenerateShotIds / description
        Added value: +"preview 전용. 다시 그릴 컷 id. feedback 필수이며 assets와 함께 쓸 수 없다. 해당 컷과 연속 컷 이미지를 폐기하고 편집 job을 발급한다."
      • addedInput schema / properties / revision / description
        Added value: +"낙관적 동시성 확인용 현재 revision. 저장된 값과 다르면 STALE_WEBTOON_REVISION으로 거부한다. 생략 가능."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
      • addedInput schema / properties / workflowId / description
        Added value: +"대상 컷별 워크플로 id(필수). 장면 워크플로는 USE_WEBTOON_SCENE_TOOL로 거부된다."
    • Changedlore_webtoon_scene7 fields changed
      • addedInput schema / properties / action / description
        Added value: +"start=새 장면 워크플로 시작, revise=feedback으로 연출부터 다시(완료된 장면도 다시 연다), retry=scene_model_failed에서 실패 단계 재시도. 생략하면 현재 단계를 이어간다(대기 중 모델 요청 재전송, jobs 반환, asset 반입)."
      • addedInput schema / properties / asset / description
        Added value: +"needs_scene_image 단계에서 호스트가 생성한 장면 이미지. path는 프로젝트 안의 PNG/JPEG, inputHash는 job의 inputHash, provenance는 {kind:\"openai-api\", requestedModel, selectionId}."
      • addedInput schema / properties / feedback / description
        Added value: +"revise에 필수인 수정 요청. confirmImageChoice와 함께 start할 때는 과금 선택에 대한 사용자 원답을 넣는다."
      • addedInput schema / properties / revision / description
        Added value: +"낙관적 동시성 확인용 현재 revision. 저장된 값과 다르면 STALE_WEBTOON_REVISION으로 거부한다. 생략 가능."
      • addedInput schema / properties / sourceChapters / description
        Added value: +"start 전용. 각색할 소설 화 번호(1~20개). 생략하면 첫 화만."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
      • addedInput schema / properties / workflowId / description
        Added value: +"대상 장면 워크플로 id. 생략하면 현재 워크플로."
    • Changedlore_workflow_history5 fields changed
      • addedInput schema / properties / includeModelExchanges / description
        Added value: +"true면 이벤트가 참조한 모델 요청·응답 전문을 포함한다. 기본 false. 웹툰 장면 워크플로에서는 무시된다."
      • addedInput schema / properties / lane / description
        Added value: +"prose(기본)=소설 집필, webtoon=웹툰 제작."
      • addedInput schema / properties / limit / description
        Added value: +"prose 전용. 최근 이벤트 몇 개를 돌려줄지. 기본 100. webtoon은 전체를 돌려준다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
      • addedInput schema / properties / workflowId / description
        Added value: +"조회할 워크플로 id. 생략하면 현재 워크플로."
    • Changedlore_workflow_status4 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"웹툰 상태는 기본 summary. 상세 계획/참조가 필요할 때 full."New value: +"webtoon 전용. 기본 summary. 상세 계획/참조가 필요할 때 full."
      • addedInput schema / properties / lane / description
        Added value: +"prose(기본)=소설 집필, webtoon=웹툰 제작."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
      • addedInput schema / properties / workflowId / description
        Added value: +"webtoon 전용. 조회할 워크플로 id. 생략하면 현재 워크플로. prose는 항상 현재 워크플로를 본다."
    • Changedlore_write2 fields changed
      • changedInput schema / properties / autonomy / description
        Previous value: -"guided=완성 원고 승인 후 커밋, auto=품질 통과 시 자동 커밋."New value: +"guided(기본)=완성 원고 승인 후 커밋, auto=품질 통과 시 자동 커밋. 커밋 여부는 그 호출의 값으로 정해지므로 auto를 원하면 이어 부르는 lore_write에도 다시 넘긴다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_writer_decide2 fields changed
      • addedInput schema / properties / action / description
        Added value: +"approve=active로 전환한다(생성 때 받은 검증 영수증이 없거나 이후 정본이 바뀌었으면 status=clean_fail). reject=rejected로 표시하고 파일은 지우지 않는다. 거절 뒤에는 lore_writer_skill을 feedback과 함께 다시 호출한다."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_writer_skill3 fields changed
      • addedInput schema / properties / feedback / description
        Added value: +"거절 이유나 원하는 서술 방향. 다음 후보 생성에 반영된다."
      • addedInput schema / properties / mode / description
        Added value: +"review(기본)=pending으로 저장하고 사용자 승인을 기다린다. auto=검증 통과 즉시 active로 저장한다. 사용자가 \"알아서·묻지 말고\"라고 한 경우만 auto."
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
    • Changedlore_writer_status1 field changed
      • changedInput schema / properties / workId / description
        Previous value: -"작품 식별자 ([A-Za-z0-9_-])."New value: +"작품 식별자 ([A-Za-z0-9_-]). 한 디렉터리에는 작품 하나만 둔다."
  2. 30 tool updates
    • First observedlore_arc_decide
    • First observedlore_arc_plan
    • First observedlore_arc_review
    • First observedlore_arc_status
    • First observedlore_configure
    • First observedlore_create
    • First observedlore_decide
    • First observedlore_init
    • First observedlore_profile
    • First observedlore_profile_decide
    • First observedlore_profile_status
    • First observedlore_resume
    • First observedlore_rollback
    • First observedlore_snapshot_status
    • First observedlore_status
    • First observedlore_story_decide
    • First observedlore_story_plan
    • First observedlore_story_status
    • First observedlore_style_anchor
    • First observedlore_sync
    • First observedlore_webtoon_decide
    • First observedlore_webtoon_plan
    • First observedlore_webtoon_render
    • First observedlore_webtoon_scene
    • First observedlore_workflow_history
    • First observedlore_workflow_status
    • First observedlore_write
    • First observedlore_writer_decide
    • First observedlore_writer_skill
    • First observedlore_writer_status

TDQS

A4/5.0

Scored across 30 tools

Disambiguation3/5

The plan/decide/status triple pattern is applied cleanly per phase (profile, story, writer, arc), and descriptions explicitly cross-reference each other (e.g. 'lore_status vs lore_workflow_status vs lore_arc_status'), which mitigates ambiguity. However there are many near-identical read-only status tools plus two foundation creators (lore_init vs lore_create) and lore_decide vs the various lore_*_decide tools, so an agent still needs careful reading. The three deprecated webtoon tools (plan/render/decide) overlapping with lore_webtoon_scene add real confusion.

Naming Consistency4/5

All names are snake_case with a consistent 'lore_' prefix, and the dominant convention is lore_<phase>_<action> (plan/decide/status), which is very predictable. Minor deviations exist — generic names like lore_write, lore_decide, lore_resume, lore_sync, lore_rollback, lore_configure don't follow the phase_action shape. Still, the set is overwhelmingly consistent and readable.

Tool Count3/5

30 tools is heavy and sits above the comfortable range, and three of them are explicitly deprecated, suggesting accumulation over time. The domain is genuinely complex (multi-phase novel pipeline plus webtoon), so most tools earn their place, but some status/decision tools could likely be consolidated.

Completeness4/5

Lifecycle coverage is strong: foundation creation (manual and model), profile, story spine, writer skill, arc planning, drafting, approvals, resume, sync, snapshots and rollback, plus webtoon production. Minor gaps remain, such as no tool to restore a rollback archive (manual recovery only) and a half-migrated webtoon surface with deprecated entry points still exposed.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI tools to collaboratively write novels by managing chapters, characters, and story state through commands like validate, context, draft, review, and approve.
    8
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables writers and AI agents to preserve continuity in long-form fiction by maintaining a narrative knowledge graph and exposing MCP tools for querying outlines, entities, references, and consistency diagnostics.
    14
    MIT