|
| 1 | +--- |
| 2 | +name: cli-ux-test |
| 3 | +description: CLI 도구의 UX를 체계적으로 테스트하고 개선 리포트를 생성하는 멀티 에이전트 파이프라인. 실제 CLI 명령을 실행하고, clig.dev/POSIX/GNU/12 Factor CLI Apps 원칙 기반으로 평가하여 심각도별 분류 리포트와 구체적 개선 제안을 도출합니다. Use when you want to audit CLI UX, test a command-line tool's usability, review CLI design quality, or generate a CLI improvement report. Also triggers on: "CLI 테스트", "UX 점검", "CLI 리뷰", "사용성 평가", "CLI UX audit", "커맨드라인 개선". |
| 4 | +--- |
| 5 | + |
| 6 | +# CLI UX Test |
| 7 | + |
| 8 | +CLI 도구의 사용자 경험을 실제 실행 기반으로 평가하는 멀티 에이전트 파이프라인. |
| 9 | + |
| 10 | +## Pipeline |
| 11 | + |
| 12 | +``` |
| 13 | +Build → Discover & Plan → Test(parallel) → Analysis & Advisory → Summary |
| 14 | +``` |
| 15 | + |
| 16 | +## Phase 1: Build |
| 17 | + |
| 18 | +대상 프로젝트를 빌드한다. |
| 19 | + |
| 20 | +```bash |
| 21 | +cargo build --release 2>&1 |
| 22 | +``` |
| 23 | + |
| 24 | +빌드 성공 시 바이너리 경로(`target/release/<name>`)를 기록한다. 빌드 실패 시 에러를 사용자에게 보고하고 중단한다. |
| 25 | + |
| 26 | +## Phase 2: Discover & Plan |
| 27 | + |
| 28 | +CLI의 전체 표면적을 매핑하고 테스트 시나리오를 한 번에 생성한다. 별도 파일로 분리하지 않고 이 Phase의 결과로 시나리오까지 도출한다. |
| 29 | + |
| 30 | +### 2a. Surface Area 매핑 |
| 31 | + |
| 32 | +아래를 모두 실행하고 결과를 수집한다: |
| 33 | + |
| 34 | +1. `<binary> --help` — 최상위 도움말, 서브커맨드 목록 파싱 |
| 35 | +2. `<binary> --version` — 버전 출력 형식 확인 |
| 36 | +3. 각 서브커맨드의 `--help` (재귀적으로 하위 서브커맨드까지) |
| 37 | +4. 소스 코드의 CLI 정의 파일 (clap derive, arg parser 등) 읽기 — 숨겨진 플래그, 환경변수 확인 |
| 38 | +5. README, docs 디렉토리 — 문서화된 사용법 vs 실제 동작 비교 |
| 39 | + |
| 40 | +수집한 정보를 바로 시나리오 생성에 활용한다. surface-map.md를 별도 생성하지 않아도 된다 — 최종 리포트의 부록에 CLI Surface Map 내용이 포함되면 충분하다. |
| 41 | + |
| 42 | +### 2b. 시나리오 생성 |
| 43 | + |
| 44 | +수집한 표면적 정보를 기반으로 테스트 시나리오를 4개 카테고리로 생성한다. |
| 45 | + |
| 46 | +**Category A — Help & Discoverability**: 도움말 품질, 버전 출력, 오타 시 제안, 빈 실행 시 안내 |
| 47 | +**Category B — Arguments & Error Handling**: 필수 인자 누락, 잘못된 값, 존재하지 않는 플래그, 종료 코드 |
| 48 | +**Category C — Output & Formatting**: stdout/stderr 분리, 컬러 일관성, 성공/실패 메시지, 진행 표시 |
| 49 | +**Category D — Edge Cases & Robustness**: 비-TTY, 빈 상태, 네트워크 실패, Ctrl+C, 동시 실행 |
| 50 | + |
| 51 | +**Category E — Documentation Accuracy**는 CLI 실행이 아닌 소스-문서 비교이므로, Phase 4 Analysis에서 수행한다 (테스트 에이전트에 포함하지 않는다). |
| 52 | + |
| 53 | +각 시나리오를 다음 형식으로 기록: |
| 54 | + |
| 55 | +```json |
| 56 | +{ |
| 57 | + "id": "B-03", |
| 58 | + "category": "B", |
| 59 | + "name": "잘못된 enum 값", |
| 60 | + "command": "<binary> --editor foo", |
| 61 | + "expected": "유효한 값 목록을 포함한 에러 메시지", |
| 62 | + "ux_criteria": ["error-message-quality", "suggest-valid-values"] |
| 63 | +} |
| 64 | +``` |
| 65 | + |
| 66 | +카테고리별로 `scenarios/category-{a,b,c,d}.json`에 저장한다. |
| 67 | + |
| 68 | +**인터랙티브 기능 참고**: TUI, 프롬프트 등 인터랙티브 기능은 자동 테스트가 어려우므로, 비-TTY 폴백 동작과 시작/종료 동작만 시나리오에 포함한다. 인터랙티브 UX는 소스 코드 리뷰 기반으로 평가한다. |
| 69 | + |
| 70 | +## Phase 3: Test (Parallel Agents) |
| 71 | + |
| 72 | +`agents/ux-tester.md`를 읽고, 카테고리별로 ux-tester 에이전트를 **병렬 실행**한다. |
| 73 | + |
| 74 | +각 에이전트에게 전달할 정보: |
| 75 | +- `agents/ux-tester.md`의 전체 내용 (에이전트 역할과 평가 기준) |
| 76 | +- 바이너리 경로 |
| 77 | +- 해당 카테고리의 시나리오 목록 |
| 78 | +- CLI Surface Map (맥락 파악용) |
| 79 | +- 결과 저장 경로: `findings/category-{a,b,c,d}.json` |
| 80 | + |
| 81 | +에이전트 설정: |
| 82 | +- Agent tool 사용, `subagent_type: "oh-my-claudecode:qa-tester"` |
| 83 | +- `mode: "bypassPermissions"` (테스트 명령을 자동 실행하기 위해) |
| 84 | + |
| 85 | +4개 에이전트를 **한 번에 모두** 실행한다 (Agent tool 4개를 하나의 메시지에). |
| 86 | + |
| 87 | +모든 에이전트 완료 후 `findings/` 디렉토리의 결과를 확인한다. |
| 88 | + |
| 89 | +## Phase 4: Analysis & Advisory |
| 90 | + |
| 91 | +`agents/reporter.md`, `agents/cli-advisor.md`, `references/cli-ux-principles.md`를 읽고 **하나의 에이전트**를 실행한다. |
| 92 | +별도의 report.md와 advisory.md를 생성하지 않고, 분석과 제안을 하나의 흐름으로 통합한다. |
| 93 | + |
| 94 | +전달할 정보: |
| 95 | +- `agents/reporter.md`의 전체 내용 (심각도 분류, 패턴 식별 기준) |
| 96 | +- `agents/cli-advisor.md`의 전체 내용 (개선 제안 형식, 우선순위 매트릭스) |
| 97 | +- `references/cli-ux-principles.md`의 전체 내용 |
| 98 | +- 모든 카테고리의 findings (Phase 3 결과) |
| 99 | +- Phase 2에서 수집한 CLI 표면적 정보 |
| 100 | +- 프로젝트 소스 코드 루트 경로 (에이전트가 직접 소스를 읽어 구체적 제안을 할 수 있도록) |
| 101 | +- README.md 경로 (Category E 문서 정확성 검증용 — Analysis Phase에서 소스 코드와 대조) |
| 102 | + |
| 103 | +에이전트 설정: |
| 104 | +- `subagent_type: "oh-my-claudecode:architect"`, `model: "opus"` |
| 105 | + |
| 106 | +에이전트가 수행할 작업: |
| 107 | +1. **문서 정확성 검증 (Category E)**: README/docs의 경로·사용법·예시를 소스 코드와 대조한다. 이 작업은 소스를 이미 읽는 분석 단계에서 함께 수행하는 것이 효율적이므로 별도 테스트 에이전트를 사용하지 않는다. 검증 항목: |
| 108 | + - 경로 검증: README의 파일/디렉토리 경로를 소스 코드의 경로 상수/함수와 대조 |
| 109 | + - 사용 예시 검증: README의 사용 예시를 실제 CLI 동작과 비교 |
| 110 | + - 옵션/플래그 검증: README에 언급된 옵션이 --help에도 있는지, 그 반대도 확인 |
| 111 | + - 환경변수 검증: README에 기술된 환경변수가 소스에서 실제로 사용되는지 |
| 112 | + 문서 불일치는 사용자가 가장 먼저 만나는 혼란이므로 높은 심각도(Critical/Major)로 분류한다. |
| 113 | +2. findings를 통합하고 심각도를 분류한다 (reporter.md 기준) |
| 114 | +3. 시스템적 패턴과 근본 원인을 식별한다 |
| 115 | +4. clig.dev 원칙 기반으로 평가한다 |
| 116 | +5. 소스 코드를 읽고 구체적 개선 제안을 작성한다 (cli-advisor.md 기준) |
| 117 | +6. **Top 3 Quick Win**에는 before/after 코드 스니펫을 포함한다. 나머지 개선 제안은 Top 권장사항 테이블에 코드 없이 기재한다. |
| 118 | + |
| 119 | +결과를 바로 최종 리포트 템플릿에 맞춰 작성한다. |
| 120 | + |
| 121 | +## Phase 5: Summary Report |
| 122 | + |
| 123 | +모든 결과를 종합하여 최종 리포트를 생성한다. 아래 템플릿을 따른다: |
| 124 | + |
| 125 | +```markdown |
| 126 | +# CLI UX Test Report: <프로젝트명> |
| 127 | + |
| 128 | +**테스트 일시**: YYYY-MM-DD HH:MM |
| 129 | +**바이너리**: <path> |
| 130 | +**버전**: <version> |
| 131 | + |
| 132 | +## Executive Summary |
| 133 | + |
| 134 | +- 총 시나리오: N개 실행 |
| 135 | +- 발견된 이슈: N개 (Critical: N, Major: N, Minor: N, Enhancement: N) |
| 136 | +- 주요 강점: (잘 된 점 2-3개) |
| 137 | +- 핵심 개선 영역: (가장 중요한 개선 2-3개) |
| 138 | + |
| 139 | +## Quick Wins (Top 3, 1시간 이내 구현 가능) |
| 140 | + |
| 141 | +가장 먼저 읽히는 위치에 배치한다. 영향도가 가장 큰 **3개**만 선별하여 before/after 코드 스니펫을 포함한다. |
| 142 | +리포트를 읽고 즉시 복사-붙여넣기로 적용할 수 있어야 한다. 나머지 개선 항목은 아래 "Top 개선 권장사항" 테이블에 코드 없이 기재한다. |
| 143 | + |
| 144 | +| # | 제목 | 예상 소요 | 변경 파일 | 설명 | |
| 145 | +|---|------|----------|----------|------| |
| 146 | + |
| 147 | +각 Quick Win 아래에 코드 변경 예시: |
| 148 | +``` |
| 149 | +// Before (src/presets.rs:42) |
| 150 | +println!("Fetching preset themes..."); |
| 151 | + |
| 152 | +// After |
| 153 | +eprintln!("Fetching preset themes..."); |
| 154 | +``` |
| 155 | +
|
| 156 | +## 카테고리별 결과 |
| 157 | +
|
| 158 | +### A. Help & Discoverability |
| 159 | +| ID | 시나리오 | 결과 | 심각도 | 설명 | |
| 160 | +|----|---------|------|--------|------| |
| 161 | +
|
| 162 | +### B. Arguments & Error Handling |
| 163 | +(같은 형식) |
| 164 | +
|
| 165 | +### C. Output & Formatting |
| 166 | +(같은 형식) |
| 167 | +
|
| 168 | +### D. Edge Cases & Robustness |
| 169 | +(같은 형식) |
| 170 | +
|
| 171 | +### E. Documentation Accuracy |
| 172 | +| ID | 문서 위치 | 문서 내용 | 실제 동작 | 심각도 | 설명 | |
| 173 | +|----|----------|----------|----------|--------|------| |
| 174 | +
|
| 175 | +## Top 개선 권장사항 |
| 176 | +
|
| 177 | +(impact x effort 기준 우선순위, advisory.md에서 발췌) |
| 178 | +
|
| 179 | +| 순위 | 제목 | 심각도 | 영향도 | 구현 난이도 | 예상 소요 | 설명 | |
| 180 | +|------|------|--------|--------|------------|----------|------| |
| 181 | +
|
| 182 | +## 원칙 준수 매트릭스 |
| 183 | +
|
| 184 | +| 원칙 (clig.dev) | 준수 | 비고 | |
| 185 | +|----------------|------|------| |
| 186 | +
|
| 187 | +## Feature Matrix — 유사 CLI 도구 비교 |
| 188 | +
|
| 189 | +이 도구를 같은 카테고리의 잘 설계된 CLI 도구(ripgrep, gh, fd, bat, docker 등)와 기능별로 비교한다. |
| 190 | +격차가 큰 기능이 곧 개선 우선순위의 근거가 된다. |
| 191 | +
|
| 192 | +| 기능 | 이 도구 | ripgrep | gh | fd/bat | 비고 | |
| 193 | +|------|---------|---------|-----|--------|------| |
| 194 | +| Shell completions | | | | | | |
| 195 | +| --json output | | | | | | |
| 196 | +| --quiet/--verbose | | | | | | |
| 197 | +| Color disable (NO_COLOR) | | | | | | |
| 198 | +| Help examples | | | | | | |
| 199 | +| (도구에 맞게 행 추가) | | | | | | |
| 200 | +
|
| 201 | +## stdout/stderr Decision Map |
| 202 | +
|
| 203 | +각 출력 유형이 어디로 가야 하는지, 현재 어디로 가고 있는지를 정리한다. |
| 204 | +stdout/stderr 혼재는 스크립트 사용성을 해치는 대표적 이슈이므로 별도 섹션으로 분석한다. |
| 205 | +
|
| 206 | +| 출력 유형 | 올바른 채널 | 현재 채널 | 일치 | 비고 | |
| 207 | +|----------|-----------|----------|------|------| |
| 208 | +| 정상 결과 데이터 | stdout | | | | |
| 209 | +| 에러 메시지 | stderr | | | | |
| 210 | +| 진행 표시 | stderr | | | | |
| 211 | +| 경고 | stderr | | | | |
| 212 | +| 디버그 정보 | stderr | | | | |
| 213 | +
|
| 214 | +## 인터랙티브 기능 소스 리뷰 |
| 215 | +
|
| 216 | +(자동 테스트 불가능했던 인터랙티브 기능에 대한 코드 리뷰 기반 평가) |
| 217 | +
|
| 218 | +## 부록 |
| 219 | +
|
| 220 | +### CLI Surface Map |
| 221 | +(커맨드 트리, 플래그/옵션, 환경변수 — Phase 2에서 수집한 표면적 정보) |
| 222 | +
|
| 223 | +### 실패/Partial 시나리오 상세 로그 |
| 224 | +(fail 또는 partial로 평가된 시나리오만 상세 로그를 포함한다. pass 시나리오는 카테고리별 테이블에서 충분하므로 부록에 반복하지 않는다.) |
| 225 | +``` |
| 226 | + |
| 227 | +리포트를 `cli-ux-report.md`에 저장하고 사용자에게 경로를 알려준다. |
| 228 | + |
| 229 | +## Workspace |
| 230 | + |
| 231 | +모든 중간/최종 산출물은 아래 구조로 저장한다: |
| 232 | + |
| 233 | +``` |
| 234 | +<project>/.omc/reports/cli-ux-test/<timestamp>/ |
| 235 | +├── scenarios/ |
| 236 | +│ ├── category-a.json |
| 237 | +│ ├── category-b.json |
| 238 | +│ ├── category-c.json |
| 239 | +│ └── category-d.json |
| 240 | +├── findings/ |
| 241 | +│ ├── category-a.json |
| 242 | +│ ├── category-b.json |
| 243 | +│ ├── category-c.json |
| 244 | +│ └── category-d.json |
| 245 | +└── cli-ux-report.md ← 최종 리포트 (분석+제안 통합) |
| 246 | +``` |
| 247 | + |
| 248 | +별도의 surface-map.md, report.md, advisory.md는 생성하지 않는다. 모든 내용이 최종 리포트에 통합된다. |
0 commit comments