From mst
Plans documents like READMEs, guides, API docs, and ADRs via iterative loops of source research, structuring/refining, and fact-check verification.
npx claudepluginhub myrtlepn/gran-maestro --plugin mstThis skill uses the workspace's default tool permissions.
**목적**: README, 가이드, API 문서, ADR(의사결정 기록) 등 문서 작성을 위한 실행 가능한 plan을 수립합니다.
Guides users through 3-stage workflow for co-authoring documentation: context gathering, iterative refinement, and reader testing for proposals, specs, and decision docs.
Guides users through structured workflow for co-authoring documentation via context gathering, iterative refinement, and reader testing for specs, proposals, and decision docs.
Guides users through structured workflow for co-authoring documentation, proposals, technical specs, and decision docs via context gathering, refinement, and reader testing.
Share bugs, ideas, or general feedback.
목적: README, 가이드, API 문서, ADR(의사결정 기록) 등 문서 작성을 위한 실행 가능한 plan을 수립합니다.
문서 플래닝은 소스 조사 → 구조화/정제 → 팩트체크 검증 루프로 진행하며, plan 저장 후 /mst:request로 연계합니다.
⚠️ 핵심 원칙: 문서 계획은 코드 계획과 분리하여 운영합니다. Cynefin 분류는 사용하지 않습니다.
이 스킬 실행 중 Write/Edit 도구를 사용할 수 있는 경로는 아래만 해당합니다:
{PROJECT_ROOT}/.gran-maestro/plans/PLN-*/plan.md{PROJECT_ROOT}/.gran-maestro/plans/PLN-*/plan.json{PROJECT_ROOT}/.gran-maestro/plans/PLN-*/auto-decisions.md (자율 모드 결정 로그){PROJECT_ROOT}/.gran-maestro/qa-raw/PLN-*.jsonl (Q&A 원본 로그){PROJECT_ROOT}/.gran-maestro/plan-context.md (Q&A 선호 패턴)그 외 모든 경로(스킬 파일, 소스 코드, 설정 파일 등)에 대한 Write/Edit는 금지합니다.
참고:
python3 {PLUGIN_ROOT}/scripts/mst.py명령은 Bash 도구를 통해 실행되므로 위 Write/Edit 제한의 적용을 받지 않습니다. 스크립트가 갱신하는 파일(counter.json, intent 저장소 등)은 Bash 실행의 부수 효과로 허용됩니다.
[MST skill=plan-doc step={N}/{M} return_to={parent_skill/step | null}]return_to=null[MST skill={subskill} step=returned return_to={parent/step}]경로 규칙 (MANDATORY): 이 스킬의 모든
.gran-maestro/경로는 절대경로로 사용합니다. 스킬 실행 시작 시PROJECT_ROOT를 취득하고, 이후 모든 경로에{PROJECT_ROOT}/접두사를 붙입니다.PROJECT_ROOT=$(pwd)
{PLUGIN_ROOT}는 이 스킬의 "Base directory"에서skills/{스킬명}/을 제거한 절대경로입니다. 상대경로(.claude/...)는 절대 사용하지 않습니다.
~/.claude/user-profile.json (AskUserQuestion 컨텍스트, 비차단)~/.claude/user-profile.json을 Read한다.
user_profile_context = null로 처리하고 기존 동작을 유지한다 (graceful fallback).role (string)experience_level (string)domain_knowledge (string[])communication_style (string)user_profile_context = null로 처리한다 (워크플로우 차단 금지).AskUserQuestion과 사용자 설명 텍스트 작성 시:
communication_style을 최우선 반영한다.experience_level/domain_knowledge에 맞춰 용어 수준과 설명 깊이를 조절한다.어느 Step이든 사용자 응답에서 아래 패턴이 감지되면 즉시 AUTO_MODE=true로 전환합니다.
전환 즉시:
[자율 모드 전환] 이제부터 -a 모드로 진행합니다. 출력AskUserQuestion 대기 중이면 대기 종료 후 현재 단계부터 자동 재개AUTO_DECISION_TOTAL=0, AUTO_PM_COUNT=0, AUTO_DISCUSSION_COUNT=0, AUTO_EXPLORE_DISCUSSION_COUNT=0으로 초기화-a 또는 --auto 존재 여부 검사
AUTO_MODE=trueAUTO_MODE=falseAUTO_MODE=false이면 config 확인
Bash(python3 {PLUGIN_ROOT}/scripts/mst.py config get auto_mode.plan) 우선Read(templates/defaults/config.json) fallbackconfig.auto_mode.plan == true면 AUTO_MODE=trueconfig.auto_mode.confidence_threshold를 읽어 CONFIDENCE_THRESHOLD 저장 (기본값 0.7)AUTO_MODE=true면 카운터 초기화 후 아래 출력
[자율 모드 활성화] confidence threshold: {CONFIDENCE_THRESHOLD}{PROJECT_ROOT}/.gran-maestro/plans/ 확인, 없으면 생성
PLN 채번
python3 {PLUGIN_ROOT}/scripts/mst.py counter next --type pln{PROJECT_ROOT}/.gran-maestro/plans/PLN-*/plan.json 스캔 후 최대 번호 + 1{PROJECT_ROOT}/.gran-maestro/plans/PLN-NNN/ 생성
타임스탬프 취득
TS=$(python3 {PLUGIN_ROOT}/scripts/mst.py timestamp now)
실패 시 fallback:
python3 -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).isoformat())"
plan.json 생성 (type: "doc" 필수)
{
"id": "PLN-NNN",
"title": "문서 플랜 주제",
"status": "active",
"created_at": "{TS}",
"linked_requests": [],
"type": "doc"
}
AUTO_MODE=true이면 auto-decisions.md 초기화
# 자율 결정 로그 — PLN-NNN
| 항목 | 결정값 | Confidence | 판단 방식 |
|------|--------|-----------|-----------|
{PROJECT_ROOT}/.gran-maestro/plan-context.md를 반드시 Read
파일이 없으면 아래 초기 템플릿 생성 후 즉시 Read
# Plan Q&A 선호 패턴
_마지막 갱신: 없음 (초기 상태)_
_세션 수: 0_
_schema_version: 1_
## 선호 패턴 (Preference Table)
| id | domain | type | statement | weight | freq | last_seen | tags |
|----|--------|------|-----------|--------|------|-----------|------|
## Prompt Hints
(패턴 축적 후 자동 생성됩니다)
선호 패턴 표에서 현재 주제 관련 힌트 최대 3개를 추출
Step 2~4의 모든 AskUserQuestion description에 선호를 인용
사용자가 선호를 반박하면 disputed_preferences에 수집
/mst:plan과 동일 패턴, 생략 시 기능 저하 없음)아래 3개 축을 모두 확정합니다.
AUTO_MODE=false:
AskUserQuestion 실행 (최대 4옵션)AskUserQuestion 옵션 제한(최대 4개) 때문에 문서 목적 질문은 여러 번 분할해도 된다. 단, 최종적으로 6개 유형을 모두 제시해야 한다.AUTO_MODE=true:
AskUserQuestion 없이 PM 자율 결정auto-decisions.md에 즉시 행 추가
| {항목명} | {결정값} | {confidence:.2f} | discussion 결과 |confidence >= CONFIDENCE_THRESHOLD: PM 자율 결정0.4 <= confidence < CONFIDENCE_THRESHOLD: Skill(skill: "mst:discussion", args: "{항목} --from-plan --auto") 후 반영confidence < 0.4: WebSearch 선행 후 confidence 재평가, 필요 시 discussion, 최종 안전안 결정문서 근거 수집은 반드시 3채널을 모두 점검합니다.
High → Medium → Low 입니다.Medium/Low 정보는 High 근거가 없으면 확정 근거로 단독 사용하지 않습니다.Skill(skill: "mst:explore", args: "{주제} --focus 관련 코드/주석/기존 문서")Glob/Grep으로 관련 파일, README, docs, 주석, API 시그니처 탐색WebSearch로 업계 표준, 공식 레퍼런스, 유사 문서 사례, 최신 권고 수집Bash(python3 {PLUGIN_ROOT}/scripts/mst.py config get reference.auto_search)로 reference.auto_search를 확인reference.auto_search == true일 때만 WebSearch 유효 결과를 REF로 자동 저장
Bash로 아래 명령을 호출해야 한다. 표/텍스트 결론 요약만으로는 저장이 완료되지 않으며 content.md는 raw 발췌(원문 근거) 중심으로 남긴다.python3 {PLUGIN_ROOT}/scripts/mst.py reference add --topic "{topic}" --url "{url}" --summary "{summary}" --content "{raw 발췌 본문}"summary는 한 줄 인덱스 유지). 상세 예시/품질 체크리스트/lazy-Read 트리거는 skills/plan/SKILL.md의 Reference Lookup Protocol 4번 항목을 따른다.reference.auto_search != true면 WebSearch 결과 자동 저장을 생략하고 기존 수집 흐름만 유지High: 공식 문서, 표준 문서, 저장소 소스코드(실제 동작 근거)Medium: 커뮤니티 Q&A, 공개 토론Low: 개인 블로그, 2차 요약 자료신뢰도 낮은 자료는 단독 근거로 확정하지 않고 교차 검증합니다.
AUTO_MODE=false:
AskUserQuestion으로 확인AUTO_MODE=true:
AUTO_MODE=false:
AskUserQuestion으로 구조안 확인 후 확정AUTO_MODE=true:
auto-decisions.md에 기록아래 검증이 모두 통과될 때까지 반복합니다.
AUTO_MODE=false:
AskUserQuestion으로 보강하고 재검증합니다.AUTO_MODE=true:
AskUserQuestion 없이 PM이 자율 보완하고 auto-decisions.md에 근거를 기록합니다.claim 추출: 문서의 사실 주장(수치, 버전, 경로, API 동작, 제약)을 claim 단위로 분해교차 검증: 각 claim을 코드베이스 + WebSearch/WebFetch + 공식 문서로 교차 검증결과 기록: FC-NNN/fact-check.json에 claim별 상태(verified|failed|unverified)와 evidence(type/url/snippet/accessed_at) 기록failed 또는 검증 불충분이면 Step 3으로 루프백하여 근거를 재수집 후 Step 4~5를 재실행V (Valuable): 문서가 대상 독자에게 실질적 가치를 제공하는가?T (Testable): 완료 여부를 관찰 가능한 기준으로 검증 가능한가?아래 4개가 모두 정의되어야 Step 6으로 이동합니다.
미통과 시:
문서 전용 plan 초안 작성 (아직 디스크 저장 전)
저장 액션 결정
AUTO_MODE=false: AskUserQuestion으로 아래 중 선택
/mst:request 실행 (저장 후 /mst:request 호출)/mst:request -a 실행 (저장 후 /mst:request -a 호출)/mst:request 호출 없음)/mst:request 호출 없음)AUTO_MODE=true: AskUserQuestion 없이 "저장하고 /mst:request 실행" 경로를 기본값으로 즉시 진행plan.md 저장 후 plan.json 보강
type: "doc" 유지 확인plan.json의 type: "doc" 필드는 이 스킬로 생성된 plan임을 나타내는 필수 식별자/mst:request)이 plan.json의 type 필드를 참조하여 문서/코드 plan을 구분할 수 있음Intent 자동 생성 (비차단)
python3 {PLUGIN_ROOT}/scripts/mst.py intent add \
--plan PLN-NNN \
--feature "..." \
--situation "..." \
--motivation "..." \
--goal "..."
## Intent (JTBD) 섹션 없으면 skip/mst:request 연계 (저장 액션 조건부)
/mst:request 실행" 선택 또는 AUTO_MODE=true 기본 경로일 때만 호출
Skill(skill: "mst:request", args: "--plan PLN-NNN {문서 주제}")/mst:request -a 실행" 선택일 때만 호출
Skill(skill: "mst:request", args: "--plan PLN-NNN -a {문서 주제}")/mst:request를 호출하지 않음Q&A 선호 요약 백그라운드 트리거 (SHOULD, 비차단)
{PROJECT_ROOT}/.gran-maestro/qa-raw/PLN-NNN.jsonl, {PROJECT_ROOT}/.gran-maestro/plan-context.mdrun_in_background: true)로 plan-context.md 갱신Task(subagent_type: "general-purpose", run_in_background: true, prompt: "{PLN-NNN QA 요약 프롬프트}")weight=HIGHdisputed_preferences에는 [DISPUTED] 태그 부여AUTO_MODE=false에서만 수행다각도 의견 모으기 (ideation)팀 토론으로 합의 찾기 (discussion)코드베이스 탐색 + 웹검색 (explore)description에는 추천 근거를 반드시 작성