Signal-Driven Navigator — 현재 상태를 읽고 다음 최선 행동을 추천합니다.
데이터 경로 결정
AGNT_DIR (state + data 루트)
.claude/agnt/state.json을 Read 시도 → 성공하면 AGNT_DIR =.claude/agnt- 실패 시
~/.claude/agnt/state.jsonRead 시도 → 성공하면 AGNT_DIR =~/.claude/agnt - 실패 시
.codex/agnt/state.jsonRead 시도 → 성공하면 AGNT_DIR =.codex/agnt - 실패 시
~/.codex/agnt/state.jsonRead 시도 → 성공하면 AGNT_DIR =~/.codex/agnt - 모두 없으면 → "먼저
/agnt:start로 시작하세요." 출력 후 종료
REFS_DIR (references 루트)
{AGNT_DIR}/references/shared/navigator-engine.md를 Read 시도 → 성공하면 REFS_DIR ={AGNT_DIR}/references- 실패 시
~/.claude/plugins/marketplaces/agentic30/references/shared/navigator-engine.mdRead 시도 → 성공하면 해당 경로 - 실패 시
.agents/skills/agnt/references/shared/navigator-engine.mdRead 시도 - 실패 시
~/.codex/skills/agnt/references/shared/navigator-engine.mdRead 시도 - 모두 없으면 에러 안내 출력 후 종료
출력 규칙
내부 로직 무음 처리
아래 절차는 유저에게 출력하지 않고 내부적으로만 수행합니다:
- 경로 탐색, state 파싱, navigator-engine.md Read, MCP 검색
실행 절차
1. state 읽기
{AGNT_DIR}/state.json을 Read.
meta.schema_version != 3이면 → "먼저/agnt:start를 실행하세요." 출력 후 종료meta.started_at == null이면 → "먼저/agnt:start로 시작하세요." 출력 후 종료
2. 카운트다운 계산
D = floor((now - meta.started_at) / 86400000) + 1
remaining = max(0, 30 - D)
3. MCP 시그널 동기화 (선택)
ToolSearch로 +agentic30 검색.
도구 발견 시:
get_links호출 →signals.link_clicks갱신- 갱신된 값을 state.json에 Write
도구 없으면 로컬 state 기반으로 진행.
4. Navigator 추천 로직
{REFS_DIR}/shared/navigator-engine.md의 Section 3 "추천 우선순위 테이블"을 참조하여, 아래 조건을 순서대로 평가한다. 첫 번째 매칭되는 조건을 추천.
| # | 조건 | 추천 |
|---|---|---|
| 0 | audit_result == null && (meta.total_actions == 0 || project.problem == null) |
/agnt:audit |
| 1 | project.problem == null && audit_result.track != "A" |
/agnt:discover |
| 2 | artifacts.interviews < 3 && audit_result.track != "A" |
/agnt:interview |
| 3 | !artifacts.competitors_analyzed && audit_result.track != "A" |
/agnt:compete |
| 4 | artifacts.spec_versions == 0 && audit_result.track != "A" |
/agnt:spec |
| 5 | artifacts.channels_active < 2 |
/agnt:channel |
| 6 | !artifacts.content_planned |
/agnt:content |
| 7 | (signals.link_clicks > 0 || (artifacts.channels_active >= 2 && artifacts.content_planned)) && !artifacts.offer_drafted |
/agnt:offer |
| 8 | artifacts.offer_drafted && !artifacts.launch_planned |
/agnt:launch |
| 9 | artifacts.launch_planned && artifacts.last_analyze_loop < artifacts.loops_completed + 1 |
/agnt:analyze |
| 10 | artifacts.last_analyze_loop > artifacts.loops_completed |
/agnt:retro |
| 11 | 모두 해당 없음 | /agnt:status |
5. 시간 가중치 톤 결정
{REFS_DIR}/shared/navigator-engine.md의 Section 4를 참조.
경과일(D) 대비 현재 단계를 평가하여 톤을 결정. audit_result.track이 있으면 Track별 기대 기간을 사용:
- Track A: 5일 (기본 D1-2, 독려 D3, 긴급 D4-5, 초과 D6+)
- Track B: 8일 (기본 D1-4, 독려 D5-6, 긴급 D7-8, 초과 D9+)
- Track C: 10일 (기본 D1-5, 독려 D6-8, 긴급 D9-10, 초과 D11+)
- Track 없음: 30일 (기본 D1-15, 독려 D16-22, 긴급 D23-30, 초과 D31+)
톤 매핑:
- 기본: 부가 메시지 없음 또는 "좋은 페이스야."
- 독려: "속도를 높여야 해. 핵심에 집중하자."
- 긴급: "마감이 가까워. 지금 가장 중요한 한 가지에 집중하자."
- 초과: "기간이 지났지만, 멈출 필요 없어. 계속 가자."
6. 컨텍스트 기반 부가 메시지
추천 커맨드에 따라, state와 journey-brief 데이터를 참조하여 부가 메시지를 추가한다.
{AGNT_DIR}/journey-brief.md Read 시도. 있으면 해당 섹션 참조.
| 추천 | 부가 메시지 조건 | 메시지 예시 |
|---|---|---|
/agnt:interview (2/3 이상) |
journey-brief에 이전 인터뷰 인사이트 있으면 | "첫 번째에서 {고통점}을 발견했어. 이번에는 다른 ICP 세그먼트와 대화해. 같은 고통점이 나오면 가설이 강화돼." |
/agnt:compete |
journey-brief에 Interview Insights 있으면 | "인터뷰에서 '{현재 대안}'이 나왔어. 이걸 체계적으로 정리하면 차별점이 선명해져." |
/agnt:spec |
journey-brief에 Competition 있으면 | "경쟁 분석에서 '{차별점}'을 찾았어. 이걸 중심으로 SPEC을 잡아." |
/agnt:channel |
— | "메시지가 아직 흐리면 /agnt:landing으로 헤드라인/CTA부터 정리해." |
/agnt:content |
state.tools.marketing_channels 있으면 | "{채널}에 뭘 올릴지 정할 시점이야. BIP(빌드 과정 공유)가 개발자 ICP에게 가장 자연스러워." |
/agnt:offer |
journey-brief에 Competition 있으면 | "경쟁 대안 대비 '{차별점}'이 네 오퍼의 핵심이야." |
/agnt:channel |
— | "사업자 등록 고민이면 /agnt:biz-setup" |
/agnt:offer |
!artifacts.analytics_setup |
"분석 세팅이 안 되어 있으면 /agnt:analytics-setup" |
/agnt:launch |
— | "/agnt:launch-copy로 10채널 카피를 한 번에 만들 수 있어." |
/agnt:analyze |
D > 22 (카운트다운 후반) | "마감이 가까워. 100명 미만이어도 방향 감각은 잡을 수 있어." |
/agnt:analyze |
CONTINUE/PIVOT 판정 시 | "트래픽이 더 필요하면 /agnt:ad-creative" |
모두 해당 후 (/agnt:status) |
tools.revenue_model == null |
"수익 모델 고민이면 /agnt:revenue" |
| 기타 | — | 기본 메시지만 출력 (부가 메시지 없음) |
부가 메시지는 추천 출력 포맷의 근거: 라인 아래에 추가한다.
journey-brief가 없거나 해당 섹션이 (미작성)이면 부가 메시지를 생략한다.
7. 출력
══════════════════════════════════════════
Day {D}/30 · 남은 {remaining}일
══════════════════════════════════════════
📍 다음 행동: /agnt:{command}
{추천 메시지}
{시간 가중치 부가 메시지 — 해당 시에만}
근거: {왜 이 행동인지 1-2문장}
💡 {부가 메시지 — journey-brief/state 기반}
진척: {현재까지 완료된 항목 요약}
예상 소요: {시간 추정}
──────────────────────────────────────────
전체 진행:
문제 정의: {✅/⬜}
인터뷰: {N}/3
SPEC: {✅/⬜} (v{N})
채널: {N}/2
콘텐츠: {✅/⬜}
오퍼: {✅/⬜}
런칭: {✅/⬜}
분석: {last_analyze_loop > 0 ? ✅ : ⬜}
회고: {loops_completed > 0 ? "✅ (Loop " + loops_completed + ")" : ⬜}
매출: {revenue > 0 ? ✅ : ⬜}
──────────────────────────────────────────
💡 /agnt:status로 상세 현황, /agnt:tools로 도구 비교
══════════════════════════════════════════
8. Identity Overlay CTA (선택)
추천 출력 완료 후, 아래 조건이 모두 충족되면 secondary_cta를 표시한다:
identity.mode != "synced"(미연결 유저)sync.last_cta_nudge_at이 null 또는 24시간 이전- 아래 CTA 조건 중 첫 번째 매칭이 있음:
| # | 조건 | CTA 메시지 |
|---|---|---|
| 1 | sync.pending_events.length > 3 |
"미동기화 {N}건 — /agnt:connect로 XP 받기" |
| 2 | artifacts.interviews >= 1 |
"완료한 퀘스트 XP를 받으려면 /agnt:connect" |
| 3 | 다음 추천이 /agnt:channel |
"채널에 올릴 때 UTM 추적 링크가 필요해. /agnt:connect" |
| 4 | 다음 추천이 /agnt:analyze |
"자동 분석을 쓰려면 /agnt:connect" |
조건 중 하나도 해당 없으면 CTA 생략.
CTA 표시 후: sync.last_cta_nudge_at = now()로 state.json 저장.
출력 포맷:
──────────────────────────────────────────
💡 {CTA 메시지}
──────────────────────────────────────────
9. 자동 실행
출력 완료 후, 추천 커맨드를 Skill 도구로 자동 호출한다.
- 추천이
/agnt:{command}이면 →Skill(skill="{command}")호출 (bare name 사용) - 추천이
/agnt:status인 경우(조건 #12, 모두 해당 없음)에는 자동 실행하지 않고 출력만으로 종료
예시: 추천이 /agnt:audit이면 → 출력 후 Skill(skill="audit") 호출.
실패 처리
- 자동 실행된 스킬이 실패하거나 유저가 중단하면,
/agnt:next자체도 실패로 종료한다 (성공 메시지 출력 금지) - state 변경은 자식 스킬의 기존 fail-closed 규칙을 따른다 — 스킬이 state를 업데이트하지 못했으면 다음
/agnt:next호출 시 같은 스킬이 다시 추천된다 - 같은 스킬이 2회 연속 자동 실행 후 실패하면, 3회째부터는 자동 실행하지 않고 추천만 출력한다 (sticky loop 방지)
규칙
/agnt:next는 state를 읽기만 한다 (쓰기 금지 — MCP 시그널 동기화,sync.last_cta_nudge_at, 자동 실행 dispatch 제외)- 자동 실행(Step 9)은
/agnt:next의 read-only 원칙에 대한 예외: next 자체가 state를 쓰지 않지만, 자식 스킬이 자신의 State Mutation Contract에 따라 state를 쓴다 - MCP 시그널 동기화는 state.json의
signals.*필드만 갱신 sync.last_cta_nudge_at쓰기는 Identity Overlay CTA 표시 시에만 허용 (예외)- 자동 실행 전 추천 내용을 먼저 출력하여, 유저가 무엇이 실행되는지 확인할 수 있게 한다
- 한국어 출력, 기술 용어 원문 유지
- 반말 톤 (존댓말 아님)
identity,sync필드가 state에 없으면 navigator-engine.md 기본값 사용