명시 `tfx-interview` 또는 TFX 정량·다중 CLI 요구사항 탐색을 요청할 때 사용한다. 자연어 목표를 Claude Code `/goal` 블록으로 바꿔 달라는 요청('/goal로 만들어', 'goal 프롬프트', 'goal 변환', 'clarify goal', 'goal 양식')에는 `--format goal`로 사용한다. 무수식 일반 요구사항 명확화는 host deep-interview가 소유한다.
Installs into .claude/skills of the current project.
Are you the author of Tfx Interview?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/tellang-tfx-interview)
---
internal: true
name: tfx-interview
description: "명시 `tfx-interview` 또는 TFX 정량·다중 CLI 요구사항 탐색을 요청할 때 사용한다. 자연어 목표를 Claude Code `/goal` 블록으로 바꿔 달라는 요청('/goal로 만들어', 'goal 프롬프트', 'goal 변환', 'clarify goal', 'goal 양식')에는 `--format goal`로 사용한다. 무수식 일반 요구사항 명확화는 host deep-interview가 소유한다."
argument-hint: "<구현할 주제 또는 요구사항> [--format plan|goal] [--tier 1|2|3]"
---
# tfx-interview — Quantified Socratic Requirements Exploration
라우팅 정본 D2는 `.claude/rules/tfx-routing.md`를 따른다.
> **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
> 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
> OMC deep-interview + ouroboros 오마주. 모호성을 숫자로 측정하고 20% 미만까지 질문한다.
> "측정할 수 없으면 개선할 수 없다."
>
> **Antigravity 위임**: 분석·점수 계산·산출물 초안은 Antigravity CLI에 위임하여 Claude 토큰을 절약한다.
> 위임 패턴: `Bash("TFX_CLI_MODE=antigravity bash ~/.claude/scripts/tfx-route.sh antigravity '{prompt}'")`
## 위임 패턴
Claude와 Antigravity의 역할을 분리하여 토큰을 최적화한다.
| 담당 | 작업 |
|------|------|
| **Claude** | AskUserQuestion (사용자 상호작용), 최종 파일 저장 |
| **Antigravity** | 모호성 점수 계산, 질문 생성, 응답 분석, 산출물 초안 |
```bash
# 위임 호출 형태
Bash("TFX_CLI_MODE=antigravity bash ~/.claude/scripts/tfx-route.sh antigravity '{prompt}'")
```
Antigravity 실패 시 Fallback: Claude Opus가 분석을 직접 처리한다.
## 용도
- 구현 전 요구사항 명확화
- 모호한 요청을 정량적으로 분석하여 실행 가능한 수준으로 구체화
- 빠진 제약 조건, 성공 기준, 경계 조건을 체계적으로 발견
- 과잉 구현/과소 구현 방지
## 핵심: 모호성 점수 (Ambiguity Score)
요구사항의 모호성을 수학적으로 측정한다:
```
ambiguity = 1 - (goal × 0.40 + constraints × 0.30 + criteria × 0.30)
각 요소 (0.0 ~ 1.0):
goal — 목표 명확도. "무엇을 달성하려는가?"가 명확한가?
constraints — 제약 조건 명확도. 범위, 기술 스택, 시간, 호환성 등
criteria — 성공 기준 명확도. "어떻게 되면 완료인가?"
예시:
입력: "인증 기능 추가해"
goal = 0.5 (인증이 무슨 인증? OAuth? JWT? 세션?)
constraints = 0.2 (기술 스택? 기존 시스템 연동?)
criteria = 0.1 (테스트? 성능? 보안 수준?)
ambiguity = 1 - (0.5×0.40 + 0.2×0.30 + 0.1×0.30) = 1 - 0.29 = 0.71 (71%)
목표: ambiguity < 0.20 (20% 미만)이 될 때까지 질문 반복.
```
## 워크플로우
### Step 1: 초기 모호성 평가
사용자 입력을 Antigravity에 전달하여 초기 ambiguity score를 계산한다:
```bash
# Claude → Antigravity 위임
Bash("TFX_CLI_MODE=antigravity bash ~/.claude/scripts/tfx-route.sh antigravity 'Analyze the following requirement and calculate ambiguity score. Return JSON: {goal, constraints, criteria, ambiguity, suggested_questions}: {user_input}'")
```
Antigravity가 반환한 JSON에서 점수를 읽어 사용자에게 표시한다:
```
출력 예시:
"📊 현재 모호성: 71%
- 목표: 50% 명확 (어떤 인증 방식?)
- 제약: 20% 명확 (기술 스택 미정)
- 기준: 10% 명확 (완료 조건 없음)
→ Stage 1: Clarify부터 시작합니다."
```
### Step 2: 5단계 인터뷰 (모호성 < 20%까지)
각 단계에서 Claude가 AskUserQuestion으로 질문하고, 사용자 응답을 Antigravity에 전달하여 분석 및 다음 질문을 생성한다.
흐름: `Claude(질문) → 사용자(응답) → Antigravity(분석+재계산) → Claude(다음 질문 제시)`
#### Stage 1: Clarify (명확화) — goal 개선
```
질문 방향:
- "정확히 무엇을 달성하려는가?"
- "이 작업의 범위는 어디까지인가?"
- "완료 후 어떤 상태가 되어야 하는가?"
```
```bash
# 응답 수집 후 Antigravity에 분석 위임
Bash("TFX_CLI_MODE=antigravity bash ~/.claude/scripts/tfx-route.sh antigravity 'Stage 1 response analysis. Previous context: {context}. User answer: {answer}. Calculate updated ambiguity score and generate next stage questions. Return JSON.'")
```
```
응답 후: Antigravity JSON에서 goal 점수 읽기 → ambiguity 재계산 결과 사용자에게 표시
```
**질문 템플릿 (Antigravity 실패 시 Fallback):**
1. "이 작업의 핵심 목표를 한 문장으로 설명해주세요."
2. "완료 후 어떤 상태가 되어야 성공인가요?"
3. "현재 상태에서 가장 큰 문제점은 무엇인가요?"
#### Stage 2: Decompose (분해) — constraints 개선
```
질문 방향:
- "이것을 어떤 하위 문제로 나눌 수 있는가?"
- "기술적 제약 조건은? (스택, 호환성, 성능)"
- "의존하는 외부 시스템이나 API는?"
```
```bash
# 응답 수집 후 Antigravity에 분석 위임
Bash("TFX_CLI_MODE=antigravity bash ~/.claude/scripts/tfx-route.sh antigravity 'Stage 2 response analysis. Previous context: {context}. User answer: {answer}. Calculate updated ambiguity score and generate next stage questions. Return JSON.'")
```
```
응답 후: Antigravity JSON에서 constraints 점수 읽기 → ambiguity 재계산 결과 사용자에게 표시
```
**질문 템플릿 (Antigravity 실패 시 Fallback):**
1. "이 작업을 3-5개의 독립된 단계로 나눈다면?"
2. "각 단계 사이에 의존성이 있나요?"
3. "가장 먼저 해결해야 할 핵심 문제는 무엇인가요?"
#### Stage 3: Challenge (반론) — 숨은 제약 발견
```
질문 방향:
- "이 접근의 약점은?"
- "실패할 수 있는 시나리오는?"
- "6개월 후 유지보수 관점에서 문제될 부분은?"
```
```bash
# 응답 수집 후 Antigravity에 분석 위임
Bash("TFX_CLI_MODE=antigravity bash ~/.claude/scripts/tfx-route.sh antigravity 'Stage 3 response analysis. Previous context: {context}. User answer: {answer}. Calculate updated ambiguity score and generate next stage questions. Return JSON.'")
```
```
응답 후: Antigravity JSON에서 constraints + criteria 점수 읽기 → ambiguity 재계산 결과 사용자에게 표시
```
**질문 템플릿 (Antigravity 실패 시 Fallback):**
1. "이 방식이 실패할 수 있는 시나리오는 무엇인가요?"
2. "6개월 후 유지보수할 때 문제가 될 부분은 무엇인가요?"
3. "이 접근이 다른 시스템에 미치는 영향은 무엇인가요?"
#### Stage 4: Alternatives (대안) — criteria 정밀화
```
질문 방향:
- "다른 방법은 없는가?"
- "시간이 절반이라면 어떤 방식을 택하겠는가?"
- "각 대안의 trade-off는?"
```
```bash
# 응답 수집 후 Antigravity에 분석 위임
Bash("TFX_CLI_MODE=antigravity bash ~/.claude/scripts/tfx-route.sh antigravity 'Stage 4 response analysis. Previous context: {context}. User answer: {answer}. Calculate updated ambiguity score and generate next stage questions. Return JSON.'")
```
```
응답 후: Antigravity JSON에서 criteria 점수 읽기 → ambiguity 재계산 결과 사용자에게 표시
```
**질문 템플릿 (Antigravity 실패 시 Fallback):**
1. "같은 목표를 달성할 수 있는 완전히 다른 접근은 무엇인가요?"
2. "시간이 절반밖에 없다면 어떤 방식을 택하겠습니까?"
3. "이 기술 대신 다른 것을 사용하면 어떤 trade-off가 있나요?"
#### Stage 5: Synthesize (종합) — 최종 확인
```
질문 방향:
- "지금까지의 논의를 종합하면 최적 경로는?"
- "첫 번째로 실행할 단계는?"
- "이 결정에 대한 확신도는? (1-10)"
```
```bash
# 응답 수집 후 Antigravity에 최종 분석 위임
Bash("TFX_CLI_MODE=antigravity bash ~/.claude/scripts/tfx-route.sh antigravity 'Stage 5 response analysis. Previous context: {context}. User answer: {answer}. Calculate updated ambiguity score and generate next stage questions. Return JSON.'")
```
```
응답 후: Antigravity JSON에서 전체 점수 읽기 → 최종 ambiguity score 사용자에게 표시
```
**질문 템플릿 (Antigravity 실패 시 Fallback):**
1. "지금까지의 논의를 종합하면, 최적의 접근 방식은 무엇인가요?"
2. "첫 번째 단계로 무엇을 실행하시겠습니까?"
3. "이 결정에 대해 확신하는 정도는 어느 정도인가요? (1-10)"
### Step 3: 조기 종료 판단
매 질문 후 ambiguity를 재계산하고, < 20%이면 남은 단계를 건너뛰고 종합 단계로 이동한다:
```
질문 후 재계산:
if ambiguity < 0.20:
→ "📊 모호성 {score}% — 충분히 명확합니다. 종합 단계로 이동합니다."
→ Step 4로 직행
elif ambiguity < 0.40:
→ "📊 모호성 {score}% — 거의 명확합니다. 핵심 질문 1-2개만 더."
else:
→ 다음 단계 진행
```
### Step 4: 산출물 생성
Antigravity가 인터뷰 전체 컨텍스트를 바탕으로 구조화된 문서 초안을 생성하고, Claude가 파일로 저장한다:
```bash
# Antigravity에 산출물 초안 생성 위임
Bash("TFX_CLI_MODE=antigravity bash ~/.claude/scripts/tfx-route.sh antigravity 'Generate a structured interview output document based on the following interview context: {full_context}. Return the complete markdown document.'")
```
Claude는 Antigravity가 반환한 마크다운을 Write 도구로 저장한다.
저장 위치: `.tfx/plans/interview-{timestamp}.md`
산출물 형식:
```markdown
# Interview: {topic}
Date: {date} | Final Ambiguity: {score}%
## Ambiguity Breakdown
| 요소 | 초기 | 최종 | 개선 |
|------|------|------|------|
| Goal | {init}% | {final}% | +{delta}% |
| Constraints | {init}% | {final}% | +{delta}% |
| Criteria | {init}% | {final}% | +{delta}% |
## Goal
{1문장 목표}
## Constraints
{제약 조건 목록}
## Success Criteria
{성공 기준 목록}
## Risks & Challenges
{식별된 위험}
## Alternatives Considered
| 대안 | 장점 | 단점 | 채택 |
|------|------|------|------|
| ... | ... | ... | Y/N |
## Decision
{최종 결정 + 근거}
## Action Plan
1. {단계 1} → 검증: {check}
2. {단계 2} → 검증: {check}
3. ...
```
## `/goal` 블록 모드 (`--format goal`)
`--format goal`이거나 사용자가 `/goal` 변환을 요청하면 Action Plan 대신 Claude Code `/goal`
명령에 붙여넣을 **블록 한 덩어리만** 산출한다. 기본값은 `--format plan`(위 Step 4 산출물)이다.
`/goal`의 평가자는 transcript만 보고 yes/no를 판정한다. 측정할 수 없는 조건은 무한 루프나
근거 없는 yes를 부르므로, 이 모드는 아래 3축과 stop bound를 강제한다.
| 축 | 질문 | 모호성 요소 |
|----|------|-------------|
| End state | 완료를 어떤 단일 측정 가능한 결과로 증명하나? | goal |
| Stated check | Claude가 어떤 명령과 출력으로 그 결과를 transcript에 남기나? | criteria |
| Constraints | 절대 건드리면 안 되는 것은? (없으면 `none`) | constraints |
| Stop bound | 최대 몇 턴까지 돌리나? (`or stop after N turns`) | — |
모호성 계산식과 20% 조기 종료 규칙은 위 Step 1~3을 그대로 쓴다. 질문은 AskUserQuestion으로
보기(테스트 exit code / 패턴 카운트 0 / 타입체크 / 빌드 성공 등)를 주고 고르게 한다.
`--tier` 로 질문 수와 블록 형태를 정한다(기본 2).
| Tier | 필수 축 | 질문 수 | 블록 형태 |
|------|---------|---------|-----------|
| 1 | End state, Stop bound | 1~2 | `/goal <end_state>, or stop after N turns` 한 줄 |
| 2 | End state, Check, Constraints, Stop bound (+조건부 Scope) | 3~5 | 아래 4줄 형식 |
| 3 | 위 + Scope, Priority, Plan (+선택 Rollback, Output) | 5~8 | GOAL / CONTEXT / CONSTRAINTS / PRIORITY / PLAN / DONE WHEN / VERIFY / OUTPUT / STOP RULES |
Tier 2 형식:
```
/goal
End state: {end_state}
Check: {check_command}
Constraints: {constraints | none}
Bound: or stop after {N} turns
```
블록 규칙:
1. **Check 강제**: Check가 없는 블록은 내보내지 않는다.
2. **Stop bound 강제**: 사용자가 지정하지 않으면 Tier 2/3에 `or stop after 20 turns`를 넣는다.
3. **4000자 한도**: 넘으면 PLAN/CONTEXT부터 줄인다.
4. **언어**: 인터뷰는 사용자 언어로, `/goal` 블록은 영어로 쓴다.
5. **주관적 End state 거부**: "production-ready", "better", "clean", 위치 없는 "all tests pass",
"refactor everything"은 받지 않고 exit code·문자열 카운트·변경 파일 수 중 하나로 바꾸자고 묻는다.
출력은 복붙 영역에 블록만 두고, 그 아래에 점검표(End state 측정 가능 / Check가 transcript에
남음 / Stop bound 있음 / 4000자 이내)를 Y/N으로 붙인다. `/goal`은 슬래시 명령이라 에이전트가
대신 제출할 수 없으므로 "바로 실행" 선택지는 두지 않는다. 사용자가 원하면 블록을 임시 파일에
쓴 뒤 `pbcopy` → `wl-copy` → `xclip -selection clipboard` → `clip.exe` 순으로 있는 명령에
넘겨 클립보드에 복사하고, 저장을 원하면 `.tfx/goals/goal-{timestamp}.txt`에 원문·응답·블록을 남긴다.
```
입력: "레거시 auth API 호출들을 v2로 마이그레이션" --format goal
출력:
/goal
End state: every call under src/legacy/auth/*.ts is migrated to src/auth/v2
Check: `pnpm test src/auth` exits 0 AND `rg "legacy/auth" src` returns 0 hits
Constraints: do not modify tests/legacy/, do not add package.json dependencies
Bound: or stop after 30 turns
```
## 동작 규칙
1. 각 단계에서 반드시 사용자 응답을 수집한 후 다음으로 이동한다.
2. 매 응답 후 ambiguity score를 재계산하여 진행률을 표시한다.
3. ambiguity < 20%이면 남은 단계를 건너뛰어도 된다.
4. 5단계를 모두 거쳐도 ambiguity >= 20%이면 추가 질문 라운드를 진행한다 (최대 2회).
5. 인터뷰 시작 시 코드베이스를 탐색하여 관련 컨텍스트를 확보한다.
6. 이전 단계 답변을 다음 단계 질문에 반영한다 (대화형 연결).
## 토큰 예산
| 단계 | Claude | Antigravity |
|------|--------|--------|
| 초기 평가 (모호성 분석) | ~0.2K | ~1K |
| 5단계 인터뷰 (질문 제시) | ~1K | ~10K |
| 산출물 초안 생성 | — | ~2K |
| 최종 파일 저장 | ~0.5K | — |
| 코드베이스 탐색 | ~0.3K | — |
| **총합** | **~2K** | **~13K** |
Fallback: Antigravity 호출 실패 시 Claude Opus가 분석을 직접 처리한다 (총합 ~15K).
## 사용 예
```
/tfx-interview "인증 시스템 리팩터링"
/tfx-interview "실시간 알림 기능 추가"
/tfx-interview "auth 테스트 다 통과시켜" --format goal --tier 1
```