skills/agile-plan/SKILL.md
프로젝트 목표 + 설계 문서(objective.md)를 JTBD 기반 Q&A로 생성하고, 실행 전 검토 가능한 플래닝 세션을 초기화합니다.
npx skillsauth add myrtlepn/gran-maestro agile-planInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
목적: /mst:agile-plan으로 JTBD + 프로젝트 DoD 중심의 objective.md를 생성한다. 이 스킬은 플래닝 전용이며 Story 생성/실행은 담당하지 않는다.
이 스킬 실행 중 Write/Edit 도구를 사용할 수 있는 경로는 아래만 해당합니다:
{PROJECT_ROOT}/.gran-maestro/agile/AGI-*/objective/objective.md (신규 생성){PROJECT_ROOT}/.gran-maestro/agile/AGI-*/objective/details/*.md (신규 생성){PROJECT_ROOT}/.gran-maestro/state/{MST_SESSION_ID}/snapshot.json (상속된 MST_SESSION_ID 또는 동일한 structured context로 기록되는 상태 파일)그 외 모든 경로에 대한 Write/Edit 사용은 금지합니다.
mst.py 명령을 통해 수행한다.mst.py agile init으로 AGI 세션을 먼저 생성한다.--doc 미지정 시 1A(Q&A 생성 모드), 지정 시 1B(문서 파싱 모드)로 분기한다.templates/objective.md 포맷으로 objective.md 저장 완료mst.py agile update {AGI_ID} --status active --objective-version 1 --json 완료python3 {PLUGIN_ROOT}/scripts/mst.py state set --skill agile-plan --step 3 --total 3 [--return-to ...] 기록 완료 (MST_SESSION_ID는 현재 세션에서 상속되거나 structured context로 제공됨)--return-to가 있으면 stop-hook continuation guard로 상위 스킬 복귀(re-feed), 없으면 독립 실행을 종료하고 --resume 안내<!-- @end-include -->경로 규칙 (MANDATORY): 이 스킬의 모든
.gran-maestro/경로는 절대경로로 사용합니다. 스킬 실행 시작 시PROJECT_ROOT를 취득하고, 이후 모든 경로에{PROJECT_ROOT}/접두사를 붙입니다.PROJECT_ROOT=$(pwd)
{PLUGIN_ROOT}는 이 스킬의 "Base directory"에서skills/{스킬명}/을 제거한 절대경로입니다. 상대경로(.claude/...)는 절대 사용하지 않습니다.
[MST skill=agile-plan step=0/3 return_to={RETURN_TO_OR_NULL}]
| 플래그 | 설명 | 예시 |
|--------|------|------|
| --doc 파일경로 | 기존 문서 파싱 모드 | --doc docs/spec.md |
| --return-to parent/step | 서브스킬 복귀 지점 | --return-to agile/1 |
--return-to 미지정 시 독립 실행으로 간주 (return_to=null)python3 {PLUGIN_ROOT}/scripts/mst.py agile init --steering-every 3 --json 실행agi_id를 파싱해 AGI_ID에 저장[신규 세션] AGI-{NNN} 생성됨 (스티어링 설정은 agile에서 확정) 출력원시 입력의 command identity가 /mst:agile-plan으로 확정된 경우, 이 정체성을 Step 0부터 Exit까지 고정한다.
이 guard는 /mst:agile-plan command identity가 확정된 요청에만 적용한다. 일반 /mst:plan 및 /mst:request 요청의 command identity, 사용자 대면 라우팅, 산출물 절차는 변경하지 않는다.
/mst:agile-plan 입력 본문에 현재 구현을 변경, 수정, 구현 변경, 개선, 리팩터링, 계획, 구현, 방향 같은 구현 변경 또는 계획 수립 표현이 있어도 /mst:plan, /mst:request, Claude Code 내장 plan mode로 재분류하지 않는다.
Claude Code 내장 plan mode로 진입하지 않는다. 어떤 단계에서도 EnterPlanMode를 호출하지 않고, transcript/tool-call/captured output에 Entered plan mode를 출력하지 않는다.
재현 fixture /mst:agile-plan 그럼 현재 구현을 변경하는 방향으로 수정해줘는 agile-plan 절차의 objective/agile planning 입력으로 먼저 처리한다.
입력 형식이나 필수 정보 부족으로 objective/agile planning 입력으로 수용할 수 없으면, agile-plan 응답 또는 산출물 안에 수용 불가 사유를 남기고 Step 0.5.2 또는 Step 0.5.3의 확인/후보 제시 절차를 따른다. 이 경우에도 다른 명령이나 내장 plan mode로 전환하지 않는다.
PM은 요청 텍스트를 읽고 아래 질문을 내부 판단한다.
confidence(0.0~1.0)를 산정한다.
기본 경로는 objective 생성이다. confidence가 낮을 때만 확인 질문을 수행한다.
[의도 확인: objective 생성으로 진행] 한 줄 통지를 출력한다.질문/선택지 표기 규칙 (MANDATORY):
A, B, C, 1, 2, 3, A1, B2α, β, γ, i, ii, iii, I, II, III이 요청을 objective 생성으로 진행할까요?objective 생성으로 진행다른 의도 설명objective 생성으로 진행이면 Step 1A로 진행한다.다른 의도 설명이면 Step 0.5.3으로 진행한다.목적:
/mst:agile-plan호출 자체는 objective 정의 의도 신호이지만, args 본문이 메타/질문이거나 0.5.2에서 "다른 의도"로 응답한 경우, 요청 동작을 먼저 수행한 뒤 objective 후보를 선제시한다.
[objective 후보] A. {후보1} B. {후보2} C. {후보3} 또는 [objective 후보] 1. {후보1} 2. {후보2} 3. {후보3}A., B., C., 1., 2., 3.처럼 쉬운 prefix와 의미 요약을 함께 사용한다. 그리스 문자·로마 숫자·bare prefix는 금지한다."D. 종료" 선택지를 포함한다.[MST skill=agile-plan step=1/3 return_to={RETURN_TO_OR_NULL}]
--doc가 있으면 1B, 없으면 1A를 수행한다.
mst.py agile recall이 patch manifest를 전달한 경우에는 아래 규칙을 우선 적용한다.
version을 1 증가시키고 last_event_id, semantic_hash를 갱신한다..gran-maestro/agile/{AGI_ID}/objective/history/에 append-only Level 3 변경 로그를 추가하고 기존 엔트리는 수정하지 않는다.목표: JTBD 5개 질문과 프로젝트 단위 DoD/설계/제약 정보를 수집해 objective.md를 생성한다.
⚠️ 상세 보존 원칙 (CRITICAL — 전 Step 공통): 사용자가 대화 중 이야기한 모든 설계 내용, 결정 근거, 합의 사항, 프로세스 설명, 기술 선택, 구조 명세는 objective 산출물(objective.md + details/*.md)에 구체화·문서화되어야 한다.
- 사용자가 설명한 원본 설계는 요약/축약하지 않고 원본 이상의 구체성으로 details/에 기록한다.
- plan 모드처럼 Q&A 정보까지 포함하여 더 구체화된 형태가 되어야 한다.
- objective.md + details/ 하위 문서만으로 충분히 개발할 수 있는 기반이 되어야 한다.
- 대화에서 논의되었으나 산출물 어디에도 기록되지 않은 내용이 있으면 저장 전 보완 필수.
JTBD 직후 아래 항목을 점검한다. WHO/WHAT/WHY는 JTBD에서 이미 수집되므로 여기서 재질문하지 않는다.
운영 규칙:
프로젝트 NFR, 설계 결정, 프로젝트 완료 기준 섹션에 반영한다.아래 4단계를 순서대로 수행하고, 각 결과를 objective.md에 즉시 반영한다.
제약사항 수집
## 제약사항 (Out-of-scope / 기술 / 비즈니스)MoSCoW 우선순위 수집
## 우선순위 (MoSCoW)priority 마커 값에 우선순위를 연결한다.리스크 식별 + 의존성 확인
## 리스크 레지스터, ## 설계 결정 (Architecture Decisions)Reference Lookup Protocol 실행
## 참조 레퍼런스외부 의존성(라이브러리/API/프레임워크/버전/프로토콜) 판단이 포함되면 아래를 적용한다.
자동 트리거 게이트
Bash(python3 {PLUGIN_ROOT}/scripts/mst.py config get reference.auto_search)로 reference.auto_search 확인cache_ttl_days=2cutoff_threshold_months=0.5max_searches_per_step=5llm_auto_trigger=trueauto_fact_check=true키워드 감지
library/framework/api/sdk/protocol/version/dependency 및 한국어 동의어 감지llm_auto_trigger == true면 키워드 매칭 외에도 최신성 리스크가 있으면 검색 가능3단계 신선도 체크
mst.py reference search --keyword "{keyword}" --jsoncache_ttl_days 기준 fresh/stalecutoff_threshold_months 초과 시 expired검색 실행
stale/expired만 검색auto_search == true일 때만 WebSearch 실행auto_fact_check == true면 핵심 claim 1회 교차 검증REF 저장 (MANDATORY — WebSearch 실행 시 Bash 호출 필수)
Bash로 mst.py reference add를 호출해야 한다.content.md는 raw 발췌(원문 근거) 중심으로 남긴다.mst.py reference add 최소 N회 호출 (1:1 대응 원칙).python3 {PLUGIN_ROOT}/scripts/mst.py reference add --topic "{topic}" --url "{url}" --summary "{summary}" --content "{raw 발췌 본문}"summary는 한 줄 인덱스 유지).skills/plan/SKILL.md의 Reference Lookup Protocol 4번 항목을 동일 기준으로 따른다.컨텍스트 주입 블록 생성
[REFERENCE_CONTEXT]
current_date: {YYYY-MM-DD}
model_cutoff: {cutoff_date_or_unknown}
references:
- REF-001 (fresh|stale|expired) {topic} | {url}
[/REFERENCE_CONTEXT]
references: none아래 루프를 수행한다.
WHILE (사용자 종료 선언 전):
round += 1
현재 상태 요약 -> PM 개선안 제시 -> 사용자 피드백 수집(자연어 대화) -> 반영 -> 수렴 체크
END WHILE
라운드 운영 규칙:
http://{host}:{port}/agile/{AGI_ID}/objective[대시보드 변경 감지] {N}건의 수정 / {M}건의 코멘트가 있었습니다{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/round-history.md에 라운드 요약을 append한다.detail_content_buffer(메모리)에 도메인별로 축적한다.
각 라운드 종료 시 직전 라운드 대비 delta를 측정한다.
N_t: DoD 추가·삭제 건수 정규화 값E_t: DoD 본문 수정 건수 정규화 값S_t: 구조 변경 이벤트(순서 재배치, split/merge, 의존성 변경) 정규화 값P_t: 상태 변경/미해결 코멘트 영향도 정규화 값D_t = (N_t + E_t + S_t + P_t) / 4EMA3_t = alpha * D_t + (1 - alpha) * EMA3_(t-1) (alpha=0.5, 초기값=D_1)D_t <= convergence_threshold_abs (기본 0.12)EMA3_t <= convergence_threshold_trend (기본 0.18)<= 1coverage_ratio >= config.agile.coverage_threshold (기본 0.85) — --doc 모드 1A.10 직전 details/*.md 집합에 대해 python3 {PLUGIN_ROOT}/scripts/mst.py agile coverage-check {원본문서경로} --details-dir {details_dir}를 실행해 coverage 값을 사용한다. 이 조건이 미충족이면 다른 3개 조건이 통과해도 수렴 종료를 권장하지 않는다.[수렴 감지] 변경량이 임계값 이하입니다. 현재 상태로 확정할까요?soft limit:
soft_limit_rounds=8 (설정값이 있으면 우선 적용)round == soft_limit_rounds에 도달하면 합의사항/미해결 쟁점을 요약하고 종료/연장 선택을 받는다.각 라운드 반영 직후(또는 최종 저장 직전) 9개 통합 품질 기준으로 DoD를 판정한다.
| # | 기준명 | 출처 | PM 판정 질문 | |---|--------|------|-------------| | 1 | 정확성 (Correctness) | IEEE 830 | 이 DoD가 프로젝트 목표(JTBD)와 일치하는가? | | 2 | 비모호성 (Unambiguity) | IEEE+IREB | 해석 분기 없이 단 하나의 의미만 가지는가? | | 3 | 완전성 (Completeness) | IEEE+IREB | 정상/에러/경계 조건이 모두 정의되었는가? | | 4 | 일관성 (Consistency) | IEEE 830 | 다른 DoD 항목과 모순되지 않는가? | | 5 | 검증가능성 (Verifiability) | IEEE+IREB | 관찰/측정으로 완료 여부를 판정할 수 있는가? | | 6 | 필요성 (Necessity) | IREB | 이 DoD 없이는 프로젝트 목표 달성이 불가능한가? | | 7 | 이해가능성 (Understandability) | IREB | 비기술 이해관계자도 의미를 이해할 수 있는가? | | 8 | 중요도 순위 (Ranked) | IEEE 830 | 우선순위가 부여되었는가? | | 9 | ODI 구조 (Outcome Format) | ODI | 방향+측정+대상+맥락+목표값이 포함되었는가? |
운영 규칙:
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/quality-gate-log.md에 DoD별 1행 요약으로 기록한다.DoD ID, pass/total, 결과, 실패 기준 수, 타임스탬프결과=fail인 DoD만 <details>로 상세(기준명, 미충족 사유)를 추가한다.## 설계 결정 (Architecture Decisions) 및 objective/details/*.md에서는 기술 상세를 허용한다.dod_count_min/dod_count_max, 기본 5~15)를 안내하되 차단하지 않는다X 한다, so that 사용자는 Y 할 수 있다로 연결되는지 확인quality-gate-log.md에 observable_by_sprint: unclear 메타데이터 기록을 권장한다. 이 항목은 강제 게이트가 아닌 사고 보조 프롬프트다.최종 저장(1A.10) 전에 아래를 확인한다.
priority 마커 반영)detail_content_buffer에 축적된 내용과 대화 이력을 대조하여, 사용자가 논의 중 제시한 설계·결정·프로세스·구조 중 아직 details/ 소재에 반영되지 않은 항목이 없는지 확인한다. 누락 항목이 있으면 저장 전 보완한다.이 단계는 저장 전 품질 강화용 프로세스이며 objective.md에 섹션으로 남기지 않는다.
WebSearch로 최신 패턴/대안/함정 점검CRITICAL / MAJOR / MINOR / NO_ISSUESCRITICAL 또는 MAJOR 존재 시, 저장 전에 보완 질의 후 재검토Clarity, Feasibility, Risk Coverage, Evidence Freshness, TestabilityCRITICAL 해소 완료전략 검토를 통과한 뒤, objective 저장 전에 디자인 단계를 수행한다.
웹사이트, 앱, 화면, UI, 페이지, 대시보드, 컴포넌트, 레이아웃, 프론트엔드, 디자인, 목업, 시안, 랜딩, 포털[디자인 단계 skip] UI 프로젝트 미감지AUTO_MODE 분기:
AUTO_MODE=false: 감지 시 사용자에게 디자인 단계 진행 여부를 1회 확인한다.AUTO_MODE=true: 감지 시 사용자 확인 없이 자동 진입한다.확정된 DoD/설계 결정을 기준으로 아래 3종을 모두 포함한 와이어프레임을 작성한다.
화면명 + 1줄 설명→ 기반 흐름저장 경로:
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/details/design-wireframe.mdAUTO_MODE 분기:
AUTO_MODE=false: 생성한 와이어프레임을 제시하고 보완 피드백을 반영한다.AUTO_MODE=true: 와이어프레임을 자동 생성/저장하고 핵심 결정 근거를 auto-decisions.md에 기록한다.design-wireframe.md에 함께 저장한다.AUTO_MODE 분기:
AUTO_MODE=false: DoD/usecase 변경안을 사용자와 합의 후 반영한다.AUTO_MODE=true: PM이 자율 반영하고 변경 사유/근거를 auto-decisions.md에 기록한다.Skill(skill: "mst:stitch")mcp__stitch__* 도구 호출은 금지한다.throw / timeout / 빈 결과[Stitch 실패] {오류 요약} — 텍스트 와이어프레임으로 진행AUTO_MODE 분기:
AUTO_MODE=false: 생성된 시안을 사용자에게 제시하고 선택/피드백을 반영한다.AUTO_MODE=true: 생성된 시안을 PM이 자율 선택하고 근거를 auto-decisions.md에 기록한다.디자인 단계에서 기능 설계로 회귀하는 방향 전환 1건 = 1회AUTO_MODE 분기:
AUTO_MODE=false: 회귀 횟수 제한 없이 사용자 확정 시까지 반복 가능AUTO_MODE=true: agile.design_regression_max(기본 3) 상한을 적용한다.
auto-decisions.md에 기록한 뒤 Step 1A.9.5로 진행한다.objective 저장 전에 수집된 모든 상세 내용을 도메인 단위로 정리한다.
--doc 모드(1B): 원본 문서의 섹션별 내용 전체 + Q&A 보완 내용. 원본 문서의 H1/H2 구조를 클러스터링 참고 입력으로 우선 활용한다.details/{domain-slug}.md 파일명을 제안하고, 도메인명 + 1줄 요약을 작성한다.AUTO_MODE에서는 사용자 확인 대신 PM이 자율 확정하고 근거를 함께 기록한다.Step 1A.9.5의 도메인 클러스터링 결과와 누적 detail_content_buffer를 입력으로, Step 1A.9.7 적대적 검토 전에 사용자가 "완성된 모습"을 검증할 수 있도록 자연어 미리보기와 정제 라운드를 수행한다. PM이 미리보기가 불필요하거나 오히려 흐름을 방해한다고 판단하면 사용자 질문 없이 skip할 수 있다.
AskUserQuestion을 사용하지 않는다.[완성 모습 미리보기 skip] {사유}진행 시 아래 3종을 자연어로 제시한다. PM은 프로젝트 성격상 필요하다고 판단하면 추가 시각화나 표를 자유롭게 더할 수 있다.
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/round-history.md에 라운드 요약을 append한다.detail_content_buffer에 축적하고, Step 1A.10에서 details/*.md에 흡수한다.completion-preview.md 같은 별도 산출물 파일은 생성하지 않는다.AUTO_MODE 분기:
AUTO_MODE=false: 사용자 확정 시까지 라운드 횟수 제한 없이 반복 가능AUTO_MODE=true: 최대 2회 반복한다. 설정값 agile.completion_preview.max_rounds_auto가 있으면 해당 값을 상한으로 사용한다.
detail_content_buffer에 반영하고 Step 1A.9.7로 진행한다.완성된 모습 미리보기에서 DoD/JTBD/도메인 정제로 회귀하는 방향 전환 1건 = 1회AUTO_MODE=true에서는 agile.completion_preview.regression_max(기본 2) 상한을 적용한다.
auto-decisions.md에 기록한 뒤 Step 1A.9.7로 진행한다.AUTO_MODE=false에서는 사용자 확정 시까지 회귀 횟수 제한 없이 반복 가능하다.Step 1A.9.5 도메인 클러스터링 (및 Step 1A.9.6 완성된 모습 미리보기/정제 — 통과 또는 PM skip) 직후, objective 저장 직전에 완전성 보강 목적의 적대적 검토를 수행한다. 이 게이트는 D3의 명료도 검증이 아니라 엣지케이스, 누락 흐름, 통합 경계, persona/NFR gap을 찾아 Step 1A.4 재귀 정제 루프에 "적대적 검토 라운드" 1회로 주입하는 절차다.
Bash(python3 {PLUGIN_ROOT}/scripts/mst.py config get agile.adversarial_review)로 설정을 읽는다.
agile.adversarial_review.enabled != true이면 graceful skip 후 Step 1A.10으로 진행한다.edge, flow, integration이며 persona, nfr은 설정이 true인 경우에만 실행한다.max_rounds 기본값은 3, current_round 초기값은 1이다.python3 {PLUGIN_ROOT}/scripts/mst.py agile review --agi {AGI_ID} --perspective {name} --json
context_files 경로와 output_schema 경로만 독립 에이전트에 전달한다. 허용 호출은 Skill(skill:"mst:codex") 또는 Task(subagent_type:"general-purpose")이며 반드시 독립 컨텍스트로 실행한다. 프롬프트에는 plan/objective 원문, detail 본문, DoD/JTBD 원문을 절대 포함하지 않는다.
역할: {perspective} 관점의 적대적 검토자.
Read로 context_files 경로를 로드하고 output_schema에 맞게 findings JSON을 반환하시오.
{PROJECT_ROOT}/.gran-maestro/agile/AGI-NNN/objective/adversarial-review-findings.md에 기록한다. 각 append 블록에는 round, perspective, severity, finding, suggested_dod, 반영 여부를 포함한다.findings 배열이 비어있음 OR current_round >= max_rounds이다. 수렴 전에는 critical finding과 PM이 필요하다고 판단한 major finding을 Step 1A.4 재귀 정제 루프의 추가 입력으로 반영하고 current_round += 1 후 재검토한다.AUTO_MODE=true:
parallel_in_auto_mode=true이면 enabled perspective를 병렬 실행하고, false이면 순차 실행한다.severity=critical finding은 자동 반영하고 {PROJECT_ROOT}/.gran-maestro/agile/AGI-NNN/auto-decisions.md에 근거와 반영 내용을 기록한다.AUTO_MODE=false:
edge + flow 2종을 순차 실행한다. 설정에서 다른 perspective가 enabled여도 PM이 필요하다고 판단한 경우에만 추가 실행한다.severity=critical finding은 AskUserQuestion으로 사용자 confirm 후 objective/detail 보강에 반영한다. major/minor는 요약만 제시하고 사용자가 반영을 선택한 경우에만 재정제한다.| 필드 | plan-time | sprint-runtime | sprint-end |
|------|-----------|----------------|------------|
| artifact_paths | 필수 (자동 채움) | - | 파일 실존 검증 |
| entrypoint_path | 필수 (entrypoint: none + reason 예외 허용) | - | grep 실매칭 검증 |
| integration_smoke_id | 예약 필수 (ID + user flow + 성공의도) | 선택 보강 | tests/ 실존 경로 강제 |
| verify_cmd | 골격 필수 (비대화식 실행 정의) | 실제 명령 확정 | 실행 + 신호 매칭, true/exit 0/echo 단독 거부 |
| expected_signal | TBD 허용 | TBD 해소 | 정규식/문자열 매칭 |
objective 저장 직후, downstream agile/request/approve handoff는 아래 path-first 계약을 기본으로 사용한다. objective anchor나 source plan이 없으면 조용히 생략하지 않고 명시적으로 보고한다.
[CONTEXT_FILES]
- objective: {PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/objective.md
- objective_ids: {PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/objective.ids.json or NO_OBJECTIVE_IDS
- objective_details: {PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/details/{domain}.md or NO_OBJECTIVE_DETAILS
- plan: {PROJECT_ROOT}/.gran-maestro/plans/{PLAN_ID}/plan.md or NO_SOURCE_PLAN
- plan_json: {PROJECT_ROOT}/.gran-maestro/plans/{PLAN_ID}/plan.json or NO_PLAN_JSON
- plan_ids: {PROJECT_ROOT}/.gran-maestro/plans/{PLAN_ID}/plan.ids.json or NO_PLAN_IDS
- spec: {PROJECT_ROOT}/.gran-maestro/requests/{REQ_ID}/tasks/{TASK_ID}/spec.md or NO_ACTIVE_SPEC
- spec_context_manifest: {PROJECT_ROOT}/.gran-maestro/requests/{REQ_ID}/tasks/{TASK_ID}/spec.md#§0-Context-Manifest or NO_CONTEXT_MANIFEST
- previous_feedback: {PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/sprints/S{PREV_SPRINT}/retrospective.md or NO_PREVIOUS_FEEDBACK
[/CONTEXT_FILES]
[WORK_CONTRACT]
- read_requirements: 구현 전 위 context file과 spec §0 Context Manifest 파일을 직접 Read/inspection한다.
- output_contract: agile/agile-plan/prompt-template 변경 파일, dispatch result contract, completion report를 보고한다.
- verification_contract: verify_cmd, expected_signal, integration_smoke_id를 보고한다.
- failure_contract: timeout, empty result, blocked, missing_context 상태를 구조화해 남긴다.
[/WORK_CONTRACT]
추가 규칙:
objective.ids.json이 아직 생성되지 않았거나 읽기 실패면 NO_OBJECTIVE_IDS 또는 missing_context로 기록한다. objective anchor coverage evidence를 조용히 skip하지 않는다.NO_SOURCE_PLAN, NO_PLAN_JSON, NO_PLAN_IDS, NO_CONTEXT_MANIFEST 같은 explicit skip reason을 남긴다.Read/inspection evidence, changed files, simplifications made, remaining risks, verify_cmd, expected_signal, integration_smoke_id를 포함한다.templates/objective.md 포맷으로 아래 경로에 저장:
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/objective.md
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/details/{domain}.md
저장 규칙:
## 디자인 컨텍스트 섹션을 추가한다. 디자인 단계를 거치지 않은 경우(비-UI 프로젝트 포함) 해당 섹션은 생성하지 않고 skip한다.
## 상세 문서 (Details) 인덱스 이전## 디자인 컨텍스트
> 이 프로젝트의 디자인 baseline입니다. sprint 진행 중 수정될 수 있습니다.
- DES-ID: DES-NNN
- Stitch 프로젝트 URL: {URL}
- 생성일: {YYYY-MM-DD}
- 상태: baseline | updated
### 화면 목록
| 화면명 | Stitch URL | HTML 경로 | 설명 |
|--------|-----------|-----------|------|
| {화면명} | {url} | designs/DES-NNN/{screen-file}.html | {설명} |
### 화면 흐름
{텍스트 와이어프레임에서 정의된 화면 간 네비게이션 흐름}
### 텍스트 와이어프레임
{Step 1A.9.2.2에서 생성된 와이어프레임 원본 — 변경 추적용}
wireframe-only) 구조:## 디자인 컨텍스트
> 텍스트 와이어프레임만 생성됨 (Stitch 시안 미생성)
- DES-ID: 없음
- 상태: wireframe-only
### 텍스트 와이어프레임
{와이어프레임 원본}
## 상세 문서 (Details)에는 domain별 detail 파일 링크 + 도메인명 + 1줄 요약을 기록한다.objective/details/*.md)에는 해당 도메인의 모든 상세 내용을 원본 수준으로 보존한다(요약/축약 금지).
## 상세 명세 하위에 1:1 보존한다 — 설계 결정과 그 근거, 기술 선택과 비교 대안, 디렉토리 구조, 프로세스 흐름, Gate/체크리스트, 스키마/템플릿, 예시, 합의 사항 등. PM은 사용자 발화를 누락 없이 기록하며, 대화에서 논의되었으나 details/에 없는 내용이 있으면 안 된다.--doc 모드(1B): 원본 문서의 해당 도메인 내용 전체 + Q&A로 추가 보완된 내용. 원본 문서에 기술된 내용이 details/에서 누락되어서는 안 된다.details/{domain}.md 파일의 첫 줄에는 반드시 <!-- source-mapping: original=<원본경로> sections=[<H1/H2 헤더 목록>] --> 메타데이터를 작성한다..gran-maestro/agile/{AGI_ID}/objective/objective.ids.json anchor manifest를 생성/갱신한다. 각 objective anchor는 id, source_file, text, kind, grade, domain_slug, dod_refs를 포함해야 하며, AD/설계 결정/DoD/NFR/리스크/체크리스트 성격의 MUST/SHOULD 요구를 deterministic하게 추적 가능해야 한다.python3 {PLUGIN_ROOT}/scripts/mst.py agile detail validate-mapping {details_file_path} 명령으로 source-mapping 메타데이터를 검증한다.python3 {PLUGIN_ROOT}/scripts/mst.py agile coverage-check {원본문서경로} --details-dir {details_dir} 명령으로 원본 ↔ details 집합 매칭률과 objective anchor coverage evidence를 검증한다. 매칭률이 임계 미만이면 저장을 실패로 처리하고, 누락된 원본 슬러그 목록을 사용자에게 보고한 뒤 details 보강 후 재실행한다. objective.ids.json이 존재하면 출력의 anchor_total, anchor_mapped, anchor_missing_ids도 확인하고 downstream trace 누락을 다음 agile/plan 단계의 known evidence로 보존한다.details/{domain}.md 파일은 아래 구조를 따른다.
# {도메인명}
> 이 문서는 objective.md의 상세 참조 문서입니다.
> 관련 DoD: DOD-NNN, DOD-MMM
## 개요
{이 도메인이 다루는 영역의 1~2문장 요약}
## 설계 결정
### AD-NNN: {결정 제목}
- **결정**: {무엇을 결정했는가}
- **근거**: {왜 이렇게 결정했는가 — Q&A에서 논의된 이유}
- **대안 검토**: {비교한 대안과 기각 사유}
- **영향 범위**: {이 결정이 영향을 주는 영역}
## 상세 명세
{대화에서 정제된 구체적 설계 내용 — tree 구조로 항목별 정리}
{프로세스 흐름, Gate 체크리스트, 스키마, 템플릿, 디렉토리 구조, 예시 등}
{원본 제시 내용 + Q&A를 통해 구체화/보강된 내용 모두 포함}
## Q&A 보강 사항
{대화 중 추가로 결정/보완된 항목들 — 결정 내용 + 근거}
## 상세 명세 섹션이 핵심이다. 여기에 대화를 통해 정제된 설계 원본이 tree 구조(제목/소제목/불릿)로 항목별 정리되어야 한다.Direction/Measure/Object/Context/Target)를 사용한다.<!-- dod:DOD-NNN status:todo priority:must domain:{slug} -->{slug}는 해당 DoD가 속한 도메인의 상세 문서 파일명 (예: details/intent-context-propagation.md → domain:intent-context-propagation)priority 값은 MoSCoW 결과를 반영해 must|should|could|wont 중 하나를 사용한다.Step 1A.10 저장 직후, 각 detail 파일에 대해 독립적으로 D3 검증을 수행한다.
Bash(python3 {PLUGIN_ROOT}/scripts/mst.py config get d3.objective_detail_threshold)에서 d3.objective_detail_threshold를 조회한다.0.1을 사용한다.objective/details/*.md 각 파일마다 독립 에이전트로 D3 역방향 시뮬레이션을 실행한다.mst:plan Step 3.9) 패턴을 따르되, 임계치는 objective_detail_threshold를 사용한다.저장 후:
python3 {PLUGIN_ROOT}/scripts/mst.py agile update {AGI_ID} --status active --objective-version 1 --json 실행목표: 기존 문서의 내용 전체를 프로젝트 DoD 중심 구조로 정규화하고, 원본 문서의 상세 내용을 details/에 도메인별로 전량 보존하며, 누락 항목을 Q&A로 보완한다.
Read({PROJECT_ROOT}/{--doc 경로}) 실행 (절대경로 변환)PARSED_CONTEXT에 저장
PARSED_CONTEXT 기반으로 JTBD/DoD/설계/제약 초안을 생성한다.--doc 모드도 아래 단계를 동일 적용한다.
python3 {PLUGIN_ROOT}/scripts/mst.py agile update {AGI_ID} --status active --objective-version 1 --json 실행[MST skill=agile-plan step=2/3 return_to={RETURN_TO_OR_NULL}]
objective 저장 후 반드시 상태 스냅샷을 기록한다. State execution contract: state write commands inherit MST_SESSION_ID from the current session or receive equivalent structured context; do not inject process-scoped identity into canonical writes.
python3 {PLUGIN_ROOT}/scripts/mst.py state set \
--skill agile-plan \
--step 3 \
--total 3 \
[--return-to {RETURN_TO}]
--return-to가 있으면 아래 종료 마커 출력 후 즉시 종료:
[MST skill=agile-plan step=returned return_to={RETURN_TO}]return_to를 감지하여 상위 스킬 re-feed를 강제한다./mst:agile --resume {AGI_ID}evidence_ref를 반드시 포함한다.tools
Internal shared include material for Gran Maestro skills. This is not a user-invocable workflow.
development
화면 설계, 컴포넌트 구조, 인터랙션 흐름, 디자인 시스템을 설계하는 Design Wing 템플릿 스킬. PM Conductor가 변수를 치환하여 /mst:codex로 실행.
development
Stitch SDK를 사용해 UI 화면을 설계합니다. 명시적 디자인 요청, 새 화면 추가, 전체 디자인 변경 시 사용.
tools
Codex CLI 프로젝트에 oh-my-codex(OMX)를 설치·초기화·gitignore 등록·AGENTS.md 주입하는 4단계 자동화를 수행합니다. 사용자가 'OMX 설치', 'oh-my-codex 설정', '/mst:setup-omx'를 호출할 때 사용.