From calab-plugin
Subagent clarification protocol - return flags instead of AskUserQuestion. Auto-loaded by subagents that need user clarification. 서브에이전트에서 AskUserQuestion 대신 플래그를 반환하여 메인 컨텍스트에서 처리.
How this skill is triggered — by the user, by Claude, or both
Slash command
/calab-plugin:clarification-protocolThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**DO NOT use AskUserQuestion in this agent.**
DO NOT use AskUserQuestion in this agent.
This agent runs as a subagent and AskUserQuestion calls do not display in the CLI. Instead, return flags and data that the calling skill (main context) will use to call AskUserQuestion.
"사용자의 에너지를 따라가라. 체크리스트를 순회하지 마라."
| 원칙 | 설명 |
|---|---|
| 생각 파트너 | 면접관처럼 질문 나열 금지. 사용자의 흐름에 맞춰 대화 |
| 에너지 추적 | 사용자가 관심 보이는 주제를 파고들기 |
| 모호함 도전 | "좋은 UX"처럼 모호한 답변에 구체적 예시 요청 |
| 해석 제시 | 질문만 하지 말고 "이런 의미인가요?" 형태로 해석 포함 |
직접 결정할 수 있으면 묻지 마라. 되돌리기 비용이 높을 때만 물어라.
| 조건 | 판단 | 예시 |
|---|---|---|
| 정답이 하나 | 직접 결정 | 파일 이름 컨벤션, import 순서 |
| 프로젝트에 패턴 존재 | 패턴 따르기 | 기존 코드에 camelCase면 그대로 |
| 되돌리기 비용 낮음 | 직접 결정 | 유틸 함수 위치, 변수명 |
| 되돌리기 비용 높음 | 질문 | DB 스키마, 공개 API, 아키텍처 |
| 사용자 의도 불명확 | 질문 | 비즈니스 로직, 우선순위, 범위 |
| 기술적 트레이드오프 | 옵션 제시 | 성능 vs 가독성, 라이브러리 선택 |
❌ 체크리스트 순회:
"에러 처리는 어떻게 할까요?"
"로깅은 필요한가요?"
"테스트는 어떤 걸 작성할까요?"
→ 뻔한 질문을 연속으로 던짐. 시간 낭비.
❌ 뻔한 옵션:
"TypeScript를 사용할까요, JavaScript를 사용할까요?"
→ 프로젝트가 이미 TypeScript면 물어볼 필요 없음.
❌ 면접 분위기:
"확장성은 고려하시나요?"
"보안 요구사항이 있나요?"
→ 추상적이고 당연한 질문.
✅ 해석을 담은 옵션:
"JWT 토큰 만료를 1시간으로 설정하려 합니다.
리프레시 토큰도 필요하시면 sliding window 방식을 추천합니다.
→ 짧은 만료(1h) + 리프레시 토큰
→ 긴 만료(24h) + 리프레시 없음"
✅ 트레이드오프 제시:
"페이지네이션 방식을 선택해야 합니다.
→ 오프셋: 구현 간단, 대량 데이터 시 느림
→ 커서: 일관된 성능, 구현 복잡"
✅ 모호함 도전:
사용자: "깔끔한 UI로 만들어줘"
→ "깔끔하다는 게 미니멀 디자인인가요, 아니면 정보 밀도를 높이되
정렬/여백을 깔끔히 하란 뜻인가요?"
✅ 맥락 기반 구체화:
"현재 User 모델에 role 필드가 있는데,
관리자 기능은 role 기반 접근 제어로 구현할까요,
아니면 별도 permissions 테이블이 필요한가요?"
| 안티패턴 | 문제 | 대안 |
|---|---|---|
| 체크리스트 순회 | 사용자 피로, 시간 낭비 | 핵심 1-2개만 질문 |
| 뻔한 질문 | 프로젝트 컨텍스트 무시 | 기존 패턴 확인 후 따르기 |
| 추상적 질문 | 답변도 추상적 | 구체적 시나리오로 질문 |
| 연속 질문 | 대화 흐름 끊김 | 관련 질문 묶어서 한 번에 |
| 결정 회피 | 모든 걸 사용자에게 떠넘김 | 추천안 제시 + 근거 |
Instead of calling AskUserQuestion, set flags in the return result:
{
"needs_clarification": true,
"clarification_type": "<type>",
"clarification_data": {
"question": "사용자에게 표시할 질문",
"header": "짧은 헤더 (12자 이내)",
"options": [
{"value": "option1", "label": "옵션 1", "description": "설명"},
{"value": "option2", "label": "옵션 2", "description": "설명"}
],
"multiSelect": false
}
}
| clarification_type | When to set | Data to include |
|---|---|---|
| scope | 개발 범위 불명확 | scope_options |
| tech_decision | 기술 스택 선택 필요 | tech_options |
| architecture_pattern | 아키텍처 패턴 선택 | pattern_options |
| priority | 우선순위 결정 필요 | priority_options |
| validation_failure | Task 검증 실패 | affected_phases |
| test_failure | 테스트 실패 대응 | failure_options |
| null | 명확한 요청, 결정 불필요 | - |
{
"needs_clarification": true,
"clarification_type": "scope",
"clarification_data": {
"question": "개발 범위를 확인합니다. 어느 영역에 해당하나요?",
"header": "범위",
"options": [
{"value": "backend", "label": "백엔드", "description": "API, 서비스, 데이터 처리"},
{"value": "frontend", "label": "프론트엔드", "description": "UI, 컴포넌트, 화면"},
{"value": "full_stack", "label": "전체", "description": "여러 영역에 걸친 기능"}
]
}
}
{
"needs_clarification": true,
"clarification_type": "tech_decision",
"clarification_data": {
"question": "인증 방식을 선택해주세요.",
"header": "인증",
"options": [
{"value": "jwt", "label": "JWT (권장)", "description": "무상태, 확장성 좋음"},
{"value": "session", "label": "Session", "description": "서버 측 상태 관리"},
{"value": "oauth", "label": "OAuth 2.0", "description": "외부 인증 연동"}
]
}
}
⚠️ AskUserQuestion은 CLI에서 plain text로 렌더링됩니다. Markdown은 지원되지 않습니다.
| 패턴 | 문제 | 대체 |
|---|---|---|
**bold** | ** 그대로 출력됨 | [대괄호] 사용 |
*italic* | * 그대로 출력됨 | 그냥 텍스트 |
`code` | 백틱 그대로 출력됨 | 따옴표 또는 그대로 |
# Header | # 그대로 출력됨 | 이모지 prefix |
{
"clarification_data": {
"question": "추가 파일이 발견되었습니다.\n\n[원래 계획] 17개 파일\n[추가 발견] 5개 파일",
"header": "추가 파일",
"options": [
{"value": "include", "label": "포함하여 진행 (권장)", "description": "추가 파일도 함께 처리"},
{"value": "skip", "label": "건너뛰기", "description": "원래 계획만 진행"}
]
}
}
| 용도 | 권장 형식 |
|---|---|
| 섹션 레이블 | [레이블] 내용 |
| 강조 | ⚠️ 중요: 또는 대문자 |
| 파일명 | filename.tsx 또는 "filename.tsx" |
| 숫자 | 17개 파일 또는 (17개) |
npx claudepluginhub wondermove-inc/calab-claude-plugin --plugin calab-pluginAsks minimal clarifying questions to resolve underspecified requirements like objectives, scope, constraints, and acceptance criteria before implementing. Invoke explicitly via /ask-questions-if-underspecified.
Resolves requirement ambiguity before implementation by decomposing into decision points and asking targeted questions. Auto-selects depth: default research mode or --light Q&A based on input specificity.
Asks targeted clarifying questions when requests lack clear objectives, scope, constraints, environment, or acceptance criteria before implementing.