From tddak
[tddak/TDD 강제] PRD → 설계 → RED-GREEN-REFACTOR → 리뷰(spec→quality) → verify → 커밋/PR. TDD 사이클 강제 + verify 게이트. 일반 개발은 ttutak:dev 사용.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tddak:dev <자연어 요청><자연어 요청>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **플러그인**: tddak (TDD 강제 파이프라인)
플러그인: tddak (TDD 강제 파이프라인) 이 스킬: dev — TDD 사이클 강제 개발 파이프라인 혼동 주의: ttutak:dev와 다른 스킬. 구현 단계가 RED-GREEN-REFACTOR로 강제되고, 완료 전 verify 게이트가 강제됨. 호출 시 주의: 이 스킬 내에서 다른 스킬을 호출할 때 반드시
tddak:접두사를 사용한다.
오케스트레이터. 직무 기반 Agent 팀과 Q&A 피드백 루프로 전체 개발 사이클을 관리한다. TDD 사이클이 강제된다.
| 단계 | ttutak | tddak (이 스킬) |
|---|---|---|
| requirements | 자연어 AC | Given-When-Then 강제 |
| design | 비판 검토 | testability 평가 추가 |
| implement | coder 단일 호출 | RED → GREEN → REFACTOR (격리 3에이전트) |
| review | qa+security 병렬 | spec → quality 순차 강제 |
| complete | qa 통과 → commit | verify 게이트 → commit |
항상 한국어로 응답한다.
이 스킬의 파일들은 프로젝트 루트의 .claude/skills/dev/ 하위에 위치한다.
Phase 파일이나 다른 스킬을 Read할 때, 현재 작업 디렉토리(프로젝트 루트)를 기준으로 절대 경로를 구성한다.
다른 스킬의 프로세스를 실행할 때 반드시 Skill 도구로 호출한다:
Skill("tddak:verify")Skill("tddak:commit")Skill("tddak:pull-request")Read()로 스킬 파일을 읽어 인라인 실행하지 않는다. Skill 도구를 사용해야 스킬의 allowed-tools 제한이 시스템 레벨에서 강제된다.
ARGS[0]에 자연어 요청을 받는다. 레거시 플래그도 호환한다.
ARGS[0]을 받으면 아래 순서로 의도를 파싱한다:
Step 1: 레거시 플래그 호환 (기존 사용자 보호)
--hotfix, --phase, --base, --status, --resume이 포함되면 기존 로직 그대로 실행.Step 2: 자연어 → 모드 판정
먼저 아래 패턴으로 자동 판정을 시도한다:
| 감지 패턴 | 모드 | 예시 |
|---|---|---|
상태, 진행, 어디까지, 현황 | STATUS | "지금 어디까지 됐어?" |
이어서, 계속, 재개, 아까 하던 | RESUME | "아까 하던 작업 이어서 해줘" |
긴급, 핫픽스, 급한, 빨리 고쳐, 버그 수정만 | HOTFIX | "로그인 버그 긴급 수정해줘" |
설계만, PRD만, 구현만, 리뷰만, 커밋만 | PHASE(해당) | "설계만 해줘" |
{branch}에서, {branch} 기반, {branch} 브랜치 | BASE 추출 | "develop 브랜치 기반으로 작업해줘" |
PHASE 매핑: PRD만/요구사항만 → --phase requirements, 설계만 → --phase design, 구현만 → --phase implement, 리뷰만 → --phase review, 커밋만/PR만 → --phase complete.
BASE 추출: {branch}에서, {branch} 기반, {branch} 브랜치에서 branch명을 추출하여 --base로 처리한다. BASE 추출은 모드 판정과 독립적이다 — BASE가 추출되어도 모드가 결정되지 않으면 Step 3으로 진행한다.
Step 3: 모드 확인 (위 패턴에 해당하지 않는 경우)
위 자동 판정 패턴에서 모드(STATUS/RESUME/HOTFIX/PHASE)가 결정되지 않으면 — 즉, 일반적인 기능 요청이면 — 반드시 AskUserQuestion으로 모드를 확인한다. 오케스트레이터가 임의로 모드를 판정하지 않는다.
AskUserQuestion(
question: "어떤 방식으로 진행할까요?",
options: [
{ value: "normal", label: "전체 파이프라인 — PRD → 설계 → 구현 → 리뷰 → PR" },
{ value: "hotfix", label: "긴급 수정 — 경량 PRD → 구현 → PR" },
{ value: "implement", label: "구현만 — 설계 없이 바로 구현" }
],
description: "요청: {ARGS[0]}"
)
normal 선택 → NORMAL 모드 (전체 Phase 실행)hotfix 선택 → HOTFIX 모드implement 선택 → 경량 구현 모드: setup → implement → complete (설계/리뷰 생략, 커밋/PR은 포함)의도 파싱 결과를 state.md에 기록한다:
mode: normal | hotfix | implement
intent-source: flag | natural-language | user-selection
--phase requirements|design|implement|review|complete: 특정 Phase만 실행--hotfix: 긴급 버그 수정용 경량 경로--base <branch>: 베이스 브랜치 지정--status: 현재 파이프라인 진행 상태 조회--resume: 이전 파이프라인 재개ARGS[0]이 없고 모드도 판정되지 않으면 다음을 응답:
"구현할 기능이나 수정할 버그를 설명해주세요. 예: /dev 로그인 기능 추가해줘"
--status가 지정되면 파이프라인을 실행하지 않고 현재 상태만 출력한다:
git branch --show-current → /를 -로 치환 → .dev/{branch-slug}/), ${DEV_DIR}/state.md를 탐색한다.## 파이프라인 상태
- 작업: {args}
- 브랜치: {branch} (base: {base})
- 프로젝트: {project-type} ({project-root})
- 현재 Phase: {phase} ({status})
- 플래그: {flags}
- 시작: {started}
### Phase 진행
- setup: {status}
- requirements: {status}
- ...
| Agent | 역할 | 관점 | 모델 |
|---|---|---|---|
| product-owner | PRD 작성 + 인수 검증 | "뭘 만들지" / "비즈니스 의도대로 됐나" | sonnet |
| Agent | 역할 | 관점 | 모델 |
|---|---|---|---|
| architect | 설계 | "어떻게 만들지" / "구조적 일관성" | opus |
| test-architect | testability 평가 (신규) | "어떻게 테스트할 수 있나" | opus |
| Agent | 역할 | 관점 | 모델 |
|---|---|---|---|
| design-critic | 설계 비판 검토 | "이 가정이 맞나" / "더 단순하게 안 되나" | opus |
| spec-reviewer | AC 충족만 검증 (신규) | "스펙대로 됐나" — 코드 품질 무시 | sonnet |
| quality-reviewer | 코드 품질만 검증 (신규) | "잘 짜였나" — AC 무시 | opus |
| security-auditor | 정책/보안/허점 감사 | "뭘 놓쳤나" | sonnet |
| (deprecated — spec-reviewer + quality-reviewer로 분해) | — | — |
| Agent | 역할 | 관점 | 모델 |
|---|---|---|---|
| red-writer | 실패 테스트 작성 전담 (신규) | "테스트만 작성" — 프로덕션 코드 안 봄 | sonnet |
| green-coder | 통과 최소 코드 (신규) | "YAGNI" — 테스트만 통과시킴 | sonnet |
| refactor-coder | 안전한 정리 (신규) | "동작 변경 금지" — GREEN 유지 | sonnet |
| (deprecated — red-writer/green-coder/refactor-coder로 분해) | — | — |
| Agent | 역할 | 관점 | 모델 |
|---|---|---|---|
| verifier | 완료 검증 게이트 (신규) | "실행 증거 없이 완료 주장 금지" | haiku |
| Agent | 역할 | 관점 | 모델 |
|---|---|---|---|
| researcher | 코드베이스 조사 + 기술 비교 | "이해한다" (독립 호출 전용) | sonnet |
| Agent | 역할 | 관점 | 모델 |
|---|---|---|---|
| hacker | 제약 우회 + 정체 탈출 | "다른 길이 있다" (정체 감지 시 호출) | sonnet |
| simplifier | 복잡도 제거 + 범위 축소 | "더 작게 만들자" (정체 감지 시 호출) | sonnet |
qa-manager, coder는 ttutak 호환을 위해 디렉토리에 남아있으나 tddak:dev에서는 호출하지 않는다.| Phase | 파일 | 주 Agent | TDD 강제 사항 | Q&A Loop |
|---|---|---|---|---|
| setup | phase-setup.md | (inline) | — | No |
| requirements | phase-requirements.md | product-owner | AC = Given-When-Then 강제 (Skill tddak:context 게이트) | Yes (max 1) |
| design | phase-design.md | architect + design-critic + test-architect | testability score ≥ 7 필수 (미충족 시 재설계) | Yes (max 2) |
| implement | phase-implement.md | red-writer → green-coder → refactor-coder (격리 순차) | Iron Law 1: 실패 테스트 없이 코드 작성 금지 | RGR 사이클 |
| review | phase-review.md | spec-reviewer → quality-reviewer (순차 강제) + security-auditor (quality와 병렬) | Iron Law: spec 통과 못 하면 quality 진입 금지 | Yes (max 2) |
| complete | phase-complete.md | verifier → product-owner (인수) → commit/PR | Iron Law 3: verify 게이트 통과 필수 (테스트 실행 증거) | 인수 재시도 (max 1) |
핵심 차별점 (ttutak 대비):
--hotfix)긴급 버그 수정용 경량 경로. 설계/리뷰를 건너뛰지만, 경량 PRD + RGR 사이클 + verify 게이트 + 긴급 보안 감사 + 인수 검증은 실행한다:
--hotfix: setup → requirements (경량+G-W-T) → implement (RGR + H1~H4 긴급감사) → complete (verify + 인수)
정상: setup → requirements → design → implement (RGR) → review (spec→quality+security) → complete (verify + 인수 + commit + PR)
Iron Law 유지 (hotfix여도):
CRITICAL: Phase 스킵 절대 금지. "요구사항이 명확하다", "범위가 작다", "이미 확정되어 있다", "간단하다" 등 어떤 이유로도 Phase를 건너뛰지 않는다. Phase를 건너뛸 수 있는 유일한 조건은
--hotfix모드와--phase플래그뿐이다. 이 규칙을 위반하면 사용자가 기대하는 PRD, 설계서, 리뷰가 누락되어 품질 사고가 발생한다.Phase 합치기 절대 금지. 여러 Phase를 하나의 Agent 호출에 합쳐서 실행하지 않는다. 각 Phase는 반드시 개별 Phase 파일을 Read한 후 순차적으로 실행한다. "간단하니까 한꺼번에", "효율을 위해 합쳐서" 같은 이유로 Phase를 병합하지 않는다. Phase 파일을 Read하지 않고 오케스트레이터가 직접 Phase 내용을 수행하는 것도 금지한다.
아래 의사코드를 기계적으로 실행한다. 판단하지 말고 순서대로 실행한다.
# 1. 모드에 따라 Phase 목록 결정
if hotfix:
PHASES = [setup, requirements, implement, complete]
elif implement (경량 구현 모드):
PHASES = [setup, implement, complete]
elif --phase 지정:
PHASES = [해당 phase만] (SKILL.md "Phase 선택" 섹션 참조)
else: # NORMAL
PHASES = [setup, requirements, design, implement, review, complete]
# 2. Phase별 순차 실행 (건너뛰기 금지)
for phase in PHASES:
# 2a. 산출물 게이트 — 이전 Phase 산출물이 없으면 이전 Phase부터 실행 (순서 중요: 상위 의존성 먼저 체크)
if phase == "design" and not exists("${DEV_DIR}/prd.md"):
→ phase-requirements부터 실행
if phase == "implement" and not exists("${DEV_DIR}/prd.md"):
→ phase-requirements부터 실행
if phase == "implement" and not hotfix and not exists("${DEV_DIR}/design.md"):
→ phase-design부터 실행
# 2a-1. testability 게이트 (Iron Law) — design.md에 testability 섹션 필수
if phase == "implement" and not hotfix:
design_content = Read("${DEV_DIR}/design.md")
if "## Testability 평가" not in design_content:
→ 사용자 경고: "design.md에 testability 평가가 누락됨. red-writer가 격리 전략을 모름."
→ phase-design 재실행 (test-architect 호출 강제)
if phase == "review" and git diff --stat이 비어있음:
→ "변경사항이 없습니다" 보고 후 중단
# 2b. Phase 파일 Read (필수)
Read("<프로젝트 루트>/.claude/skills/dev/phases/phase-{phase}.md")
# 2c. Phase 파일의 지시에 따라 실행
# 2d. state.md 갱신
Update state.md → phases.{phase}: completed
# 2e. 다음 Phase로 진행
phase-setup.md, phase-requirements.md, phase-design.md, phase-implement.md, phase-review.md, phase-complete.md
Phase 실행 시 반드시 이 스킬에 정의된 Agent 팀(product-owner, architect, test-architect, design-critic, red-writer, green-coder, refactor-coder, spec-reviewer, quality-reviewer, security-auditor, verifier, researcher, hacker, simplifier)을 사용한다.
Iron Law: 다음 에이전트는 tddak:dev에서 절대 호출하지 않는다 (deprecated):
coder — red-writer/green-coder/refactor-coder로 분해됨qa-manager — spec-reviewer/quality-reviewer로 분해됨외부 Agent(sisyphus-junior, sisyphus-junior-high 등)로 대체하지 않는다.
오케스트레이터가 관리하는 누적 문서. 관련 파일의 경로와 역할을 기록한다.
구조:
## 코드 맵: <기능 설명>
### 핵심 파일
- <파일경로:라인> → 역할 설명
- ...
### 참조 파일
- <파일경로:라인> → 역할 설명
- ...
### 설정
- <파일경로> → 역할 설명
- ...
생성: phase-setup의 Step 0.4에서 초기 맵을 생성한다.
누적: 각 agent 출력에 "탐색 추가 항목" 섹션이 있으면 해당 항목을 맵에 append한다. 누적 맵은 최대 25개로 제한한다. 초과 시 참조 파일부터 제거한다.
저장: 코드 맵이 갱신될 때마다 ${DEV_DIR}/codemap.md에 Write한다.
전달: 모든 agent 호출 시 현재 코드 맵을 프롬프트에 포함한다.
security-auditor의 감사 결과를 누적하는 문서. 오케스트레이터가 관리한다.
구조:
## Trust Ledger
### 통합 감사 (review)
- [분류/심각도] 항목 설명
- 근거: ...
- 권고: ...
생성:
### Hotfix 긴급 감사 섹션).저장: ${DEV_DIR}/trust-ledger.md에 저장한다.
전달: PR 본문(pr-context.md 조립 시)에 감사 결과 요약으로 포함한다.
phase-setup에서 결정된 변수를 이후 모든 Phase에서 사용한다:
GIT_PREFIX: 항상 git. 소비 프로젝트 루트에서 직접 실행한다.PROJECT_ROOT: 항상 ./ (현재 디렉토리).DEV_DIR: 브랜치별 dev 산출물 디렉토리. .dev/{branch-slug}/ 형식. branch-slug는 브랜치명의 /를 -로 치환한 값이다 (예: feat/login → .dev/feat-login/). phase-setup Step 6.5에서 브랜치 생성/전환 후 결정된다.DIFF_FILE: 변경사항 diff를 저장하는 파일 경로. ${DEV_DIR}/diff.txt. Diff 수집 규칙에 따라 phase-implement(자기점검), phase-review, phase-complete에서 갱신된다.DOMAIN_CONTEXT: phase-setup 0.3에서 context/*/PROJECTS.md 매칭으로 로드된 도메인 용어(glossary)와 아키텍처 정보. 매칭되지 않으면 빈 상태.REFERENCES: phase-setup Step 3.5에서 references/ 디렉토리를 탐색하여 수집한 외부 규격 문서 목록(파일 경로 + 한줄 설명). references/ 디렉토리가 없으면 빈 상태. 빈 상태이면 에이전트 프롬프트에 포함하지 않는다.PROJECT_ROOT 경로를 항상 전달하여 파일 도구(Read/Write/Edit/Glob/Grep)의 기준점으로 사용하게 한다../gradlew, npm, pytest 등)을 PROJECT_ROOT에서 실행할 때, Bash 작업 디렉토리가 변경되지 않도록 서브셸을 사용한다: (cd ${PROJECT_ROOT} && ./gradlew build). 괄호 ()로 감싸면 서브셸에서 cd가 실행되어 부모 셸의 작업 디렉토리가 유지된다.--base가 지정되었으면 해당 브랜치를 사용한다. 미지정이면 자동 감지:
git branch --list main master develop로 존재하는 브랜치를 확인한다.확정된 베이스 브랜치를 이후 phase-review (diff 계산), phase-complete (PR 생성)에서 사용한다.
Agent prompt 크기를 관리하기 위해:
Agent 출력을 사용자에게 전달할 때, Phase 상태에 따라 전문 표시 여부를 결정한다:
이후 Phase에서 이전 산출물이 필요하면 파일을 Read하여 Agent prompt에 포함하되, 오케스트레이터 자신의 출력에는 포함하지 않는다. 각 Phase 파일에서 구체적인 요약 포맷을 정의한다.
${DEV_DIR}/prd.md에 저장한다.${DEV_DIR}/design.md에 저장한다.${DEV_DIR}/trust-ledger.md에 저장한다.${DEV_DIR}/codemap.md에 저장한다 (갱신 시마다).${DEV_DIR}/self-check.md에 저장한다 (phase-implement 자기점검 완료 시)..gitignore 보강은 phase-setup의 Step 0.5a에서 프로젝트 타입별로 처리한다 (.dev/ 패턴 — 브랜치별 하위 폴더 전체 포함).파이프라인 진행 상태를 ${DEV_DIR}/state.md에 기록하여 세션 재개를 지원한다.
state.md 구조 (RGR 사이클 반영):
phase: implement
status: in_progress
branch: JIRA-123
base: main
project-type: kotlin-gradle
project-root: ./
args: "[JIRA-123] 로그인 기능 추가"
flags: --hotfix
started: 2026-02-17T10:30:00
last-known-head: 7c9e814abc...
config-setup-attempts: 1 # phase-setup 3.0 가드의 재시도 카운터
current-step: "RGR T1: GREEN"
phases:
setup: completed
requirements: completed # G-W-T 게이트 통과
design: completed # testability score 8/10 통과
implement: in_progress
steps:
implement:
- 태스크 분해 승인: completed
- "RGR T1 (AC-1)":
red: completed
green: in_progress
refactor: pending
- "RGR T2 (AC-2)": pending
- 변경사항 수집: pending
review:
- mechanical-gate: pending
- spec-review (1단계): pending
- quality-review + security (2단계 병렬): pending
complete:
- verify-gate: pending
- 인수검증: pending
execution-log:
- phase: requirements
gate: G-W-T
result: "PASS — 모든 AC가 Given-When-Then 형식"
- phase: design
agent: test-architect
result: "testability score 8/10 PASS"
- phase: implement
agent: red-writer (T1)
result: "PasswordValidatorTest.shouldReject401 작성 + 실패 확인"
- phase: implement
agent: green-coder (T1)
result: "in_progress"
갱신 규칙:
phase: {name}, phases.{name}: in_progress로 갱신.phases.{name}: completed로 갱신하고, last-known-head를 현재 git rev-parse HEAD로 갱신한다.current-step과 steps 갱신."RGR T{N} (AC-N)" 형식의 중첩 객체로 추적한다. (옛 "coder 구현/자기점검" 형식 사용 금지)execution-log에 gate: G-W-T 또는 agent: test-architect 엔트리로 기록.execution-log에 기록.--resume 시 current-step에서 재개한다 (Phase 처음부터가 아닌 중단 Step부터). 재개 전에 phase-setup Step 0.1 정합성 체크(브랜치/HEAD)를 수행한다. RGR 사이클 재개 시 red/green/refactor 단계별로 매칭.execution-log에 엔트리 추가 (agent명, result 요약). deprecated 에이전트(coder/qa-manager)는 절대 기록되지 않는다.execution-log에 기록한다 (mechanical-gate, G-W-T, testability, verify, spec-review, quality-review).execution-log 엔트리에 stagnation: {패턴} 필드를 추가한다.status: completed로 갱신.config-setup-attempts도 0으로 초기화.설계서와 PRD를 Agent에게 전달할 때, 역할에 따라 필요한 섹션만 전달하여 컨텍스트 효율을 높인다.
DIFF_FILE) + 코드 맵 + verifier 보고서 (${DEV_DIR}/verify-report.md)DIFF_FILE) + 코드 맵. "AC 충족만 검증. 코드 품질은 평가 금지" 지시.DIFF_FILE) + 코드 맵 + 프로젝트 컨벤션. PRD/AC는 전달하지 않는다 (격리). "코드 품질만. AC 충족 여부 평가 금지" 지시.DIFF_FILE) + 코드 맵 + REFERENCES (있으면)각 에이전트에 전달하는 입력 크기가 .claude/config.json의 contextLimits를 초과하면, 우선순위가 낮은 섹션부터 요약 또는 생략한다.
읽기 전용 Agent(product-owner, architect, test-architect, design-critic, spec-reviewer, quality-reviewer, security-auditor, researcher, hacker, simplifier, verifier)는 서로 병렬 실행이 가능하다. 병렬 실행 시:
Task() 호출을 동시에 발행한다.phase-implement(구현→자기점검 루프)와 phase-review(QA→수정→재리뷰 루프)에서 적용한다. 각 루프의 최대 반복은 기존과 동일하다. 정체 감지 시 반복을 소진하지 않고 에스컬레이션으로 전환한다.
| 패턴 | 감지 기준 | 유형 |
|---|---|---|
| SPINNING | 동일 에러 메시지가 2회 연속 반복 | 기계적 (텍스트 비교) |
| OSCILLATION | 접근법 A→B→A 왕복이 감지됨 | 정성적 (LLM 판단) |
| NO_DRIFT | 이전 반복과 비교해 코드 변경이 실질적으로 없음 (diff 비교) | 반기계적 (diff stat) |
| DIMINISHING_RETURNS | 수정 범위가 줄어드는데 테스트/리뷰 결과가 개선되지 않음 | 정성적 (LLM 판단) |
| 감지 패턴 | 1차 대응 | 2차 대응 (1차 실패 시) |
|---|---|---|
| SPINNING | hacker에 제약 우회 분석 위임 | researcher에 근본 원인 분석 위임 |
| OSCILLATION | architect에 설계 재검토 요청 | 사용자에게 두 접근법 제시, 선택 요청 |
| NO_DRIFT | hacker에 제약 식별 + 우회 경로 요청 | researcher에 코드베이스 탐색 위임 |
| DIMINISHING_RETURNS | simplifier에 복잡도 분석 + 범위 축소 요청 | 사용자에게 현재 상태 보고, 방향 전환 여부 확인 |
phase-review.md의 Step 3~4에 정의. QA + ZT 결과를 합산하고 심각도별로 처리한다.
Agent에게 변경사항 diff를 전달할 때, 메인 컨텍스트 절약을 위해 파일 리다이렉트 + 경로 전달을 사용한다.
핵심 원칙: diff 출력이 Bash 결과로 메인 컨텍스트에 진입하지 않도록, 셸 리다이렉트로 파일에 직접 쓴다.
DIFF_FILE = ${DEV_DIR}/diff.txt. 매 수집 시 mkdir -p ${DEV_DIR}를 실행하여 디렉토리 존재를 보장한다.git diff --cached > ${DEV_DIR}/diff.txt
wc -l < ${DEV_DIR}/diff.txt로 줄 수를 확인한다.--stat 요약을 파일 앞에 추가하고, 파일 끝에 "변경된 파일을 Read 도구로 직접 확인하라"는 안내를 추가한다:
git diff --cached --stat > ${DEV_DIR}/diff.txt
echo "---" >> ${DEV_DIR}/diff.txt
echo "위는 요약입니다. 변경된 파일을 Read 도구로 직접 확인하라." >> ${DEV_DIR}/diff.txt
변경사항 diff: ${DEV_DIR}/diff.txt
이 파일을 Read하여 변경사항을 확인하라.
이 규칙은 모든 diff 패턴에 적용한다: git diff --cached (스테이징), git diff <base>...HEAD (브랜치 비교) 등. 브랜치 비교 시에는 해당 diff 명령으로 리다이렉트한다.
에이전트(product-owner, architect, qa-manager, security-auditor)가 "확인이 필요한 사항"에 구조화된 질문을 출력하면, 오케스트레이터가 AskUserQuestion으로 변환하여 사용자에게 제시한다.
유형 필드에 따라 변환한다:유형: 선택 → AskUserQuestion 선택형:
AskUserQuestion(
question: "질문 텍스트",
options: [
{ value: "a", label: "레이블 — 설명" },
{ value: "b", label: "레이블 — 설명" },
{ value: "c", label: "직접 입력 — 위 선택지 외 직접 입력합니다" }
],
description: "맥락 텍스트"
)
유형: 자유입력 → AskUserQuestion 자유입력형:
AskUserQuestion(
question: "질문 텍스트",
description: "맥락 텍스트"
)
multiSelect: true를 추가한다.산출물(PRD, 설계서, 구현 계획) 확인 시 공통으로 사용하는 AskUserQuestion 패턴:
AskUserQuestion(
question: "{산출물}을 확인해주세요.",
options: [
{ value: "approve", label: "승인 — 다음 단계로 진행" },
{ value: "modify", label: "수정 요청 — 수정할 부분을 알려주세요" }
]
)
사용자가 "수정 요청"을 선택하면 후속 AskUserQuestion(자유입력)으로 수정 내용을 받는다.
--hotfix와 --phase는 동시 사용 불가. 둘 다 있으면: "--hotfix와 --phase는 동시에 사용할 수 없습니다." 에러 후 중단.--resume과 --phase, --hotfix, --status는 동시 사용 불가. 함께 있으면: "--resume은 다른 모드 플래그와 동시에 사용할 수 없습니다." 에러 후 중단.--resume은 ARGS[0] 없이 단독 사용한다. ARGS[0]이 함께 있으면: "--resume은 작업 설명 없이 단독으로 사용합니다." 에러 후 중단.--phase가 지정되면 해당 Phase만 실행한다:
--phase requirements: setup (필요 시) + requirements만 실행 (PRD 작성).--phase design: setup (필요 시) + requirements + design만 실행. 대화 맥락에 요구사항이 없고 ${DEV_DIR}/prd.md도 없으면 requirements부터 시작.--phase implement: 환경 감지 + implement 실행. 대화 맥락에 설계서가 없고 ${DEV_DIR}/design.md도 없으면: "설계서가 필요합니다. /dev --phase design을 먼저 실행하거나 설계 내용을 입력해주세요." 후 중단.--phase review: 환경 감지 + 베이스 브랜치 감지 + review 실행 (현재 변경사항을 리뷰).--phase complete: 환경 감지 + 베이스 브랜치 감지 + complete 실행 (인수 검증, test, commit, PR, status 갱신).환경 감지: 위 3개 모드는 phase-setup을 건너뛰므로, Phase 진입 전에 다음을 수행한다:
git rev-parse --is-inside-work-tree로 git repo 확인.PROJECT_ROOT= 현재 디렉토리.git branch --show-current→/를-로 치환 →DEV_DIR = .dev/{branch-slug}/.
./gradlew test, npm test, npm install 등)에는 timeout: 300000(5분)을 설정한다.npx claudepluginhub rnqhstmd/tddak --plugin tddakGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.