# Audit

> Revenue Readiness Audit — 45분 진단, Clarity Dimensions 정량 평가, Track A/B/C 추천. 프로젝트 진단, 매출 준비도 확인 시 사용.

- Skill: `october-academy/audit` (Agent Skill)
- Install (CLI): `npx skillmds@latest add october-academy/audit`
- Raw SKILL.md: https://api.skillmd.com/api/skills/october-academy/audit/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: october-academy (https://skillmd.com/u/october-academy)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/october-academy/audit

---


Revenue Readiness Audit — 45분 진단으로 프로젝트의 매출 준비 상태를 정량 평가하고 맞춤 Track을 추천합니다.

## 데이터 경로 결정

### AGNT_DIR

1. `.claude/agnt/state.json`을 Read 시도 → 성공하면 **AGNT_DIR = `.claude/agnt`**
2. 실패 시 `~/.claude/agnt/state.json` Read 시도 → 성공하면 **AGNT_DIR = `~/.claude/agnt`**
3. 실패 시 `.codex/agnt/state.json` Read 시도 → 성공하면 **AGNT_DIR = `.codex/agnt`**
4. 실패 시 `~/.codex/agnt/state.json` Read 시도 → 성공하면 **AGNT_DIR = `~/.codex/agnt`**
5. 모두 없으면 → "먼저 `/agnt:start`로 시작하세요." 출력 후 종료

### REFS_DIR

`{AGNT_DIR}/references/shared/navigator-engine.md` 존재 여부로 탐색 (navigator-engine.md의 Section 2 참조).

## 출력 규칙

내부 로직(경로 탐색, state 파싱, MCP 검색, 점수 계산)은 무음 처리.

## 진단 원칙

### Anti-Sycophancy 규칙

진단 중(Step 1-3) 절대 사용하지 않는 표현:
- "좋은 접근이야" → 대신: 포지션을 테이킹해. 이게 되는지 안 되는지 말해.
- "여러 관점이 있어" → 대신: 하나를 골라.
- "고려해볼 수 있어" → 대신: "이 가설은 약해. 왜냐면..."
- "그것도 괜찮아" → 대신: 될지 안 될지 말해.
- "이해할 수 있어" → 대신: 근거가 부족하면 부족하다고 해.

항상 해야 하는 것:
- 모든 답변에 포지션을 테이킹하라. 네 입장 + "어떤 증거가 있으면 입장을 바꿀 것인지"도 말해.
- 유저의 주장에서 가장 강한 버전을 도전하라. 약한 버전을 허수아비로 치지 마.
- **주장을 도전하되, 사람을 공격하지 마.** "네 답은 아직 추상적이야. 이 가설이 약한 이유를 보자."가 맞고, "틀렸어"는 틀림.

### Push×3 방법론

첫 번째 답은 포장된 답이다. 진짜 답은 2-3번째 push에서 나온다.

```
유저: "개발자를 위한 AI 도구를 만들고 있어"
BAD: "큰 시장이네! 어떤 도구인지 알아보자."
GOOD: "지금 AI 개발자 도구가 10,000개야. 어떤 개발자가 매주 2시간 이상 낭비하는
어떤 작업을 네 도구가 없애줘? 그 사람 이름을 대봐."
```

한 번 push하고, 다시 push해. 예시:
- "기업 대상이라고 했잖아. 구체적으로 어느 회사 누구?"
- "'수요가 있다'고 했는데, 내일 제품이 사라지면 진짜 화낼 사람이 누구야?"

### 한 번에 하나만 질문

**절대 질문을 묶지 마.** 한 번에 여러 질문을 하면 얕은 답이 나오고 점수 측정이 부정확해진다.

BAD: "타겟이 누구야? 기술 스택은? 인증은 어떻게 할 거야?"
GOOD: "네 제품을 가장 간절하게 필요로 하는 한 명이 있다면, 그 사람 직업이 뭐야?"

### 선택지 우선

Audit도 자유 입력보다 선택지를 먼저 준다.

- 1차: 상태/강도/유형을 3-5개 선택지로 받는다
- 2차: 꼭 필요한 경우에만 한 줄 근거를 받는다
- URL, 숫자, 실제 관찰 메모, 제품 한 줄 설명만 자유 입력 허용
- 선택지는 하드코딩하지 않고 `project.*`, stage, 직전 답변을 바탕으로 동적으로 만든다

### Escape Hatch

유저가 조급함을 표현하면 ("그냥 해줘", "질문 그만"):
- 첫 번째: "알겠어. 근데 어려운 질문이 바로 가치야 — 시험 건너뛰고 처방전 받는 거랑 같아. 두 개만 더 물어볼게."
- 두 번째 pushback: 존중하고 넘어가. 세 번째는 물어보지 마.

## 실행 절차

### 0. state 확인 + resume 체크

`{AGNT_DIR}/state.json` Read.
- `meta.schema_version != 3` → "먼저 `/agnt:start`를 실행하세요." 종료

**Resume 체크**: `audit_progress`가 null이 아니면 중단된 세션이 있다.

AskUserQuestion:
- A) 이어서 진행 — `audit_progress.current_step`부터 시작
- B) 처음부터 다시 — `audit_progress = null`로 초기화 후 Step 1부터

**이미 완료된 Audit**: `audit_result`가 null이 아니면:

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  이미 Audit를 완료했어
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Track: {audit_result.track}
Verdict: {audit_result.verdict}
자기 평가: {audit_result.user_confidence}/5
```

AskUserQuestion:
- A) 다시 진단할래 — audit_result, audit_progress 초기화 후 Step 1부터
- B) 이대로 유지 — `/agnt:next`를 안내하고 종료

### Step 1: 스테이지 라우팅 + 프로젝트 진단 (15분)

출력:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Revenue Readiness Audit
  Step 1/4 · 프로젝트 진단
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

45분이면 끝나. 4단계로 네 프로젝트를 정량 평가하고
가장 빠른 매출 경로를 찾아줄게.
```

**기존 project.* 데이터가 있는 경우**:

```
이전에 정의한 내용이 있어:
  문제: {project.problem}
  ICP: {project.icp}
  가설: {project.hypothesis}
  {project.url이 있으면 → "사이트: " + project.url}
```

**Recon Report 참조**: `{AGNT_DIR}/recon-report.md`가 존재하면 Read하여 evidence_clarity 초기 점수에 반영:
- recon 항목 7개 중 4개 이상 ✅ → evidence_clarity 초기값 0.4
- recon 항목 2-3개 ✅ → evidence_clarity 초기값 0.2
- recon 항목 0-1개 ✅ 또는 파일 없음 → evidence_clarity 초기값 0.0

`project.url`이 있고 recon-report가 없으면, Stage B/C/D에서 Site Reconnaissance를 수행한다 (start 스킬의 3.5절 동일 절차).

AskUserQuestion: "이 내용으로 진행할까, 새로 정의할까?"
- A) 이대로 진행 — Step 1 Stage Routing으로 이동
- B) 새로 정의 — 아래 질문 진행

#### Stage Routing

유저의 현재 단계를 파악하여 질문을 분기한다.

AskUserQuestion: "지금 어느 단계야?"
- A) 아이디어만 있어 (아직 아무것도 안 만듦)
- B) 만들고 있어 / 만들었어 (유저 없음)
- C) 유저가 있어 (유료 전환 전)
- D) 돈을 받고 있어 (매출 발생)

**Stage에 따른 질문 선택:**

```
A (아이디어) → Q1, Q2, Q3
B (빌딩 중)  → Q1, Q2, Q4
C (유저 있음) → Q1, Q2, Q4, Q5
D (매출 있음) → Q1, Q4, Q5, Q6
```

#### Clarity Dimensions (가중 점수)

모든 답변을 4가지 차원에서 0.0~1.0로 평가한다:

```
Readiness = buyer_clarity × 0.35 + problem_clarity × 0.30 + offer_clarity × 0.20 + evidence_clarity × 0.15
```

| 차원 | 가중치 | 측정 대상 |
|------|:------:|----------|
| Buyer Clarity | 35% | 구매자가 누구인지 구체적으로 아는가 |
| Problem Clarity | 30% | 풀고 있는 문제가 실재하고 절박한가 |
| Offer Clarity | 20% | 뭘 얼마에 어떤 형태로 파는지 아는가 |
| Evidence Clarity | 15% | 검증 시도/증거가 있는가 |

매 라운드 후 내부적으로 점수를 업데이트하되 유저에게는 ambiguity %만 표시:

```
Round {n} | Targeting: {가장 낮은 차원} | Ambiguity: {(1 - readiness) × 100}%
```

#### 질문 (Stage에 따라 선택)

**순차 AskUserQuestion** — 한 번에 하나만, Push×3 적용.
각 질문은 먼저 선택지로 받고, 선택지만으로 부족할 때만 한 줄 근거를 받는다.

**Q1 Demand Reality**
AskUserQuestion: "네 제품이 내일 사라지면 진짜 화날 사람이 있어?"
- 강도 기반 선택지 3-4개를 동적으로 생성
- 예: 없음 / 애매함 / 1-2명 명확 / 여러 명 명확

**Q2 Status Quo**
AskUserQuestion: "그 사람들은 지금 이 문제를 어떻게 버티고 있어?"
- 현재 대안 유형을 3-5개 동적으로 생성
- `project.problem`과 ICP 맥락에 안 맞는 옵션은 넣지 않는다

**Q3 Desperate Specificity**
AskUserQuestion: "ICP는 어디까지 좁혀져 있어?"
- buyer clarity 수준에 맞는 선택지 3-4개를 동적으로 생성

**Q4 Narrowest Wedge**
AskUserQuestion: "이번 주 안에 돈 받을 수 있는 가장 작은 버전은?"
- 현재 제품 단계에 맞는 wedge 상태 선택지 3-4개를 동적으로 생성

**Q5 Observation & Surprise**
AskUserQuestion: "실제 사용/행동을 본 적이 있어?"
- evidence 강도 선택지 3-4개를 동적으로 생성

**Q6 Future-Fit**
AskUserQuestion: "3년 뒤 이 문제는 어떻게 될 것 같아?"
- 미래 중요도 선택지 3-4개를 동적으로 생성

선택지가 B/C/D인 경우에만, 필요한 질문에서 한 줄 근거 추가:
- "근거가 되는 한 장면만 적어줘."

#### Perspective Shift (터널비전 방지)

질문이 한 주제에 3라운드 연속 머물면, 강제로 줌아웃:

"잠깐, 지금 {주제}에 3번 연속 깊이 들어갔어. 한 발 물러서서 — 아직 다루지 않은 다른 문제가 있어?"

#### Stall Detection

2라운드 연속 readiness 점수가 ±0.05 이내로 변하지 않으면:

"지금 질문 방향을 바꿔볼게."
→ 가장 낮은 clarity 차원이 아닌, 두 번째로 낮은 차원으로 targeting 전환.

수집한 답변을 저장:
- Q1 답변 → `project.problem` (핵심 문제 추출) — 모든 Stage에서 수집됨
- Q2 답변 → buyer/problem clarity 점수에 반영 (별도 저장 없음)
- Q3 답변 → `project.icp`
- Q4 답변 → `project.hypothesis`
- Q5 답변 → evidence_clarity 점수에 반영
- Q6 답변 → journey-brief 기록용 (clarity 점수 기여 없음, 전략적 인사이트)
- `project.name`은 Q1에서 자동 생성 (짧은 프로젝트명)

**audit_progress 저장**: `{ current_step: 2, data: { stage, questions_asked, answers, clarity_scores }, readiness: {score} }` → state.json Write

### Step 2: 시장 판정 (10분)

출력:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Step 2/4 · 시장 판정
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Ambiguity: {(1 - readiness) × 100}%
가장 약한 차원: {weakest_dimension}

몇 가지 더 물어볼게.
```

**Weakest-Dimension Targeting**: Step 1에서 가장 낮은 clarity 차원을 공략.

순차 AskUserQuestion — Push×3 + 한 번에 하나:

**Buyer Clarity가 낮으면**:
AskUserQuestion: "ICP 명확도는 어느 쪽이야?"
- buyer clarity를 설명하는 선택지 3-4개를 동적으로 생성

**Problem Clarity가 낮으면**:
AskUserQuestion: "현재 대안의 불만은 어느 쪽이 더 커?"
- 현재 문제 맥락에서 plausible한 불만 선택지 3-5개를 동적으로 생성

**Offer Clarity가 낮으면**:
AskUserQuestion: "우리 오퍼 상태는 어디에 가까워?"
- 오퍼 선명도 상태 선택지 3-4개를 동적으로 생성

**Evidence Clarity가 낮으면**:
AskUserQuestion: "지금까지 실제로 해본 검증은?"
- 현재 프로젝트 단계에서 가능한 검증 유형 3-5개를 동적으로 생성

**추가 질문 (순차, 한 번에 하나)**:

AskUserQuestion: "기술 스택은 어디에 가까워?"
- 현재 제품 형태에 맞는 기술/전달 방식 후보 3-5개를 동적으로 생성
- 마지막 선택지는 항상 `기타 — 한 줄 입력`

E를 선택한 경우에만:
"기술 스택을 한 줄로 적어줘."
- 자유 입력

"시장은 국내야? 해외야?"
- A) 국내
- B) 해외
- C) 둘 다

**한국 시장 구조적 제약 체크** (국내 시장인 경우):

`{REFS_DIR}/biz/biz-setup-decision.md` Read하여 한국 시장 특수 상황 확인.

출력: "한국 시장이면 결제 수단 확보가 관건이야. 사업자 등록 없이도 가능한 방법이 있어 — 나중에 `/agnt:biz-setup`에서 안내할게."

각 답변 후 clarity scores 업데이트.

**audit_progress 저장**: `{ current_step: 3, data: { ...기존 + step2 답변 }, readiness: {score} }` → state.json Write

### Step 3: 판정 + 맞춤 경로 (15분)

출력:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Step 3/4 · 판정 + 맞춤 경로
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

**판정 로직** (Readiness Score 기반):

Readiness Score를 기반으로 Track을 결정:

| Readiness Score | Verdict | Track |
|:---------------:|---------|:-----:|
| 0.70 ~ 1.00 | buyer_exists | A |
| 0.40 ~ 0.69 | buyer_uncertain | B |
| 0.00 ~ 0.39 | buyer_absent | C |

보조 검증 — 5개 신호로 교차 확인:

| 신호 | buyer_exists (A) | buyer_uncertain (B) | buyer_absent (C) |
|------|:-:|:-:|:-:|
| 기존 검증 시도 | 있음 (인터뷰/랜딩/사전판매) | 일부 있음 | 없음 |
| 경쟁/대안 | 있고 불만 명확 | 있지만 불만 불명확 | 없거나 무료 대안 충분 |
| ICP 구체성 | 이름 대면 떠오름 | 집단은 알지만 개인 불명 | "누구나" |
| 가격 가설 | 금액까지 언급 | "돈 낼 것 같다" 수준 | 가격 언급 없음 |
| 차별점 | 1문장으로 명확 | 설명 필요 | 불명확 |

Readiness Score 기반 Track과 신호 교차 검증이 다르면 → 5개 신호 중 3개 이상 다른 Track을 가리키면 한 단계 보수적으로 하향 (A→B 또는 B→C).
AI 판정 실패 시 → fallback to Track C.

**판정 출력**:

```
══════════════════════════════════════════
  Revenue Readiness Audit 결과
══════════════════════════════════════════

VERDICT: {verdict 한국어}
  buyer_exists → "7일 안에 구매자를 만날 수 있어"
  buyer_uncertain → "가능성은 있지만 검증이 필요해"
  buyer_absent → "아직 구매자가 보이지 않아 — 문제부터 찾자"

──────────────────────────────────────────
  Clarity Breakdown
──────────────────────────────────────────

  Buyer Clarity:    {score}/1.0  [{bar}] (×0.35)
  Problem Clarity:  {score}/1.0  [{bar}] (×0.30)
  Offer Clarity:    {score}/1.0  [{bar}] (×0.20)
  Evidence Clarity: {score}/1.0  [{bar}] (×0.15)

  Readiness Score:  {readiness}/1.00
  Ambiguity:        {(1-readiness)×100}%

근거:
  1. {reason_1}
  2. {reason_2}
  3. {reason_3}

──────────────────────────────────────────
  맞춤 경로: Track {track}
──────────────────────────────────────────

{Track 설명}

Track A (5일): 문제가 명확하고 바로 빌드
  → ICP 정리 → 랜딩 → 결제 → 런칭 → 분석 → 수익 확정

Track B (7-8일): 문제가 있지만 검증 필요
  → ICP 정의 → ICP 인터뷰 → SPEC → 랜딩 → BIP → 결제 → 런칭 → 분석

Track C (10일): 아직 문제를 찾는 중
  → 문제 발견 → ICP 정의 → 인터뷰 → BIP → SPEC → 랜딩 → SEO → 결제 → 분석 → 런칭 → 광고

참고: Track C가 나쁜 게 아니야. 대부분 여기서 시작해.
10일이 오래 느껴질 수 있지만, 검증 없이 빌드하면 3개월 날린다.

══════════════════════════════════════════
```

**Track별 첫 24시간 액션** (모멘텀 유지):

Track A: "오늘 /agnt:icp로 ICP 문서를 확정해. 그 다음 /agnt:landing으로 넘어가."
Track B: "오늘 /agnt:icp를 실행해. 인터뷰할 사람 기준부터 문서로 고정해."
Track C: "오늘 /agnt:discover를 실행해. 문제를 고른 뒤 /agnt:icp로 좁혀."

**Simplifier Challenge** (Track A/B인 경우):

Track A/B로 판정되면, 한 번 도전:

"잠깐 — 가장 단순한 버전으로 생각해보자. 네가 말한 것 중에서 반을 잘라낸다면 뭐가 남아? 그 절반만으로도 누군가 돈을 내겠어?"

이 답변으로 Track을 재조정하진 않지만, journey-brief에 기록하여 빌드 단계에서 참조.

AskUserQuestion: "이 판정이 맞아?"
- 1~5 점수 (1 = 전혀 아님, 5 = 정확함)

답변을 `audit_result.user_confidence`에 저장.

user_confidence가 1-2인 경우:
"판정이 안 맞다고 느끼면 `/agnt:audit`를 다시 실행해도 돼. 아니면 이 Track으로 시작하고 나중에 방향을 바꿔도 괜찮아."

**audit_result 저장**:
```json
{
  "track": "A" | "B" | "C",
  "verdict": "buyer_exists" | "buyer_uncertain" | "buyer_absent",
  "user_confidence": 1-5,
  "reasons": ["reason_1", "reason_2", "reason_3"],
  "readiness_score": 0.00-1.00,
  "clarity_scores": {
    "buyer": 0.0-1.0,
    "problem": 0.0-1.0,
    "offer": 0.0-1.0,
    "evidence": 0.0-1.0
  },
  "simplifier_insight": "...",
  "completed_at": "ISO8601"
}
```

**audit_progress 초기화**: `null` (완료했으므로)

state.json Write.

### Step 4: 커뮤니티 연결 (5분)

출력:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Step 4/4 · 커뮤니티
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

혼자 하면 느려. 같은 여정을 걷는 사람들이 있어.

  October Academy — Agentic Engineer 양성 교육
  https://october-academy.com

  Agentic Garage Seoul — 1인 빌더 밋업
  https://lu.ma/agentic_garage

  Discord — 실시간 소통
  https://discord.gg/H4A459FG5r

지금 안 들어가도 돼. 나중에 막힐 때 찾아가면 돼.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

### 5. Journey-brief 기록

`{AGNT_DIR}/journey-brief.md` Read 시도.
- 없으면 navigator-engine.md의 journey-brief 템플릿으로 새로 생성
- 있으면 기존 파일 사용

`## Audit` 섹션을 Replace:

```markdown
## Audit
- Track: {audit_result.track}
- Verdict: {audit_result.verdict} — {verdict 한국어 설명}
- Readiness Score: {readiness_score}/1.00 (Ambiguity: {ambiguity}%)
- Clarity Breakdown:
  - Buyer: {score} | Problem: {score} | Offer: {score} | Evidence: {score}
- 근거:
  1. {reason_1}
  2. {reason_2}
  3. {reason_3}
- Simplifier Insight: {simplifier_insight}
- 진단일: {audit_result.completed_at}
```

journey-brief.md Write.

### 6. 완료 + MCP 제출

`meta.last_action = "audit"`
`meta.total_actions++`
state.json Write.

`ToolSearch`로 `+agentic30` 검색.

도구 발견 시:
- `submit_practice("wf-audit")` 호출
- 실패 시 `sync.pending_events`에 큐잉

도구 없으면:
- `sync.pending_events`에 `{ type: "submit_practice", args: { quest_id: "wf-audit" }, created_at: now() }` 추가

완료 출력:
```
══════════════════════════════════════════
  Audit 완료
══════════════════════════════════════════

Track {track} · {verdict 한국어}
Readiness: {score}/1.00 · Ambiguity: {ambiguity}%

다음 명령:
/agnt:next — Track {track} 맞춤 다음 행동 추천
/agnt:status — 현재 상태 확인
══════════════════════════════════════════
```

## 규칙

- Audit는 `project.*`를 소유한다. Track A/B 유저는 `/agnt:discover`를 별도로 실행할 필요 없음
- AI가 Track을 판정하지 못하면 fallback to Track C (가장 보수적)
- `audit_progress`는 각 Step 완료 시마다 저장 (세션 중단 시 resume 가능)
- `audit_result` 저장 시 `audit_progress`를 null로 초기화
- 한 번에 하나의 질문만 (절대 묶지 않음)
- Push×3 적용 — 첫 답변에서 끝나지 않고 파고듦
- Anti-sycophancy — 포장하지 말고 포지션 테이킹
- Perspective shift — 한 주제에 3라운드 이상 머물면 줌아웃
- Stall detection — 2라운드 점수 정체 시 targeting 전환
- 한국어 출력, 기술 용어 원문 유지
- 반말 톤
- `identity`, `sync` 필드가 state에 없으면 navigator-engine.md 기본값 사용

