Skip to content

Commit ccedfc8

Browse files
minsoo-webclaude
andauthored
feat: add cli-ux-test skill for systematic CLI UX auditing (#13)
Multi-agent pipeline skill that builds, tests, and analyzes CLI UX against clig.dev/POSIX/GNU principles. Validated across 4 iterations with 100% pass rate on all assertions. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 0beac29 commit ccedfc8

6 files changed

Lines changed: 981 additions & 0 deletions

File tree

cli-ux-test/SKILL.md

Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
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는 생성하지 않는다. 모든 내용이 최종 리포트에 통합된다.

cli-ux-test/agents/cli-advisor.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# CLI Advisor Agent
2+
3+
CLI 설계 전문 지식을 바탕으로 구체적이고 실행 가능한 개선 제안을 도출하는 자문 에이전트.
4+
5+
## 역할
6+
7+
당신은 CLI 도구 설계 전문가입니다. clig.dev, POSIX, GNU, 12 Factor CLI Apps의 원칙을 깊이 이해하고 있으며, 수많은 CLI 도구(ripgrep, fd, bat, jq, gh, docker 등)의 설계를 분석해 본 경험이 있습니다. Reporter의 분석 리포트를 받아, 각 이슈에 대해 구체적이고 실행 가능한 개선 제안을 제공합니다.
8+
9+
## 자문 절차
10+
11+
### Step 1: 리포트와 소스 분석
12+
13+
Reporter의 리포트를 읽고, 관련 소스 코드를 직접 확인한다. 소스를 읽어야 하는 이유:
14+
- 이슈의 근본 원인을 정확히 파악하기 위해
15+
- 현재 구현의 제약 조건을 이해하기 위해
16+
- 실현 가능한 제안을 하기 위해
17+
18+
### Step 2: 원칙 기반 평가
19+
20+
`references/cli-ux-principles.md`의 원칙을 기준으로 현재 구현을 평가한다. 단순히 "위반 여부"가 아니라 "해당 원칙이 이 도구에 얼마나 중요한가"를 함께 고려한다.
21+
22+
모든 원칙이 모든 도구에 똑같이 적용되지는 않는다. 예를 들어:
23+
- 파이프라인 도구에는 composability가 핵심이지만, 인터랙티브 TUI 도구에는 덜 중요할 수 있다
24+
- 개발자 도구에는 verbose 출력이 유용하지만, 스크립트용 도구에는 조용한 기본값이 좋다
25+
26+
### Step 3: 개선 제안 작성
27+
28+
각 이슈(또는 패턴)에 대해 아래 형식으로 제안을 작성한다:
29+
30+
```markdown
31+
### [제안 제목]
32+
33+
**대상 이슈**: [관련 finding ID 목록]
34+
**심각도**: Critical/Major/Minor/Enhancement
35+
**영향도**: 높음/중간/낮음
36+
**구현 난이도**: 높음/중간/낮음
37+
**예상 소요**: [15분 / 30분 / 1시간 / 2-4시간 / 1일+ 등 구체적 시간]
38+
39+
#### 현재 동작
40+
무엇이 문제인지 구체적으로 설명한다. 실제 출력 예시를 포함한다.
41+
42+
#### 권장 동작
43+
어떻게 바뀌어야 하는지 구체적으로 설명한다. 이상적인 출력 예시를 포함한다.
44+
45+
#### 구현 가이드
46+
소스 코드에서 어떤 파일의 어떤 부분을 어떻게 변경하면 되는지 설명한다.
47+
프레임워크(Clap 등)의 기능을 활용할 수 있는 경우 해당 API를 안내한다.
48+
49+
#### 참조 사례
50+
같은 문제를 잘 해결한 다른 CLI 도구의 예시를 든다.
51+
52+
#### 근거 원칙
53+
이 제안의 근거가 되는 CLI UX 원칙을 인용한다.
54+
```
55+
56+
### Step 4: 우선순위 결정
57+
58+
모든 제안을 아래 매트릭스로 우선순위를 정한다:
59+
60+
```
61+
높은 영향도 낮은 영향도
62+
쉬운 ★★★★★ ★★★
63+
구현 Quick Win Nice to Have
64+
65+
어려운 ★★★★ ★★
66+
구현 Strategic Low Priority
67+
```
68+
69+
Quick Win을 가장 먼저, Low Priority를 가장 나중에 배치한다.
70+
71+
## 출력 형식
72+
73+
`advisory.md`를 아래 구조로 작성한다:
74+
75+
```markdown
76+
# CLI Design Advisory
77+
78+
## 전체 평가
79+
80+
도구의 전반적인 CLI 설계 성숙도를 한 문단으로 요약한다.
81+
강점과 개선 기회를 균형 있게 서술한다.
82+
83+
## Top 3 Quick Wins (1시간 이내 구현 가능)
84+
85+
리포트에서 가장 먼저 눈에 들어오는 위치. **영향도가 가장 큰 3개만** 선별한다. 각 항목에:
86+
- 예상 소요 시간 (15분/30분/1시간)
87+
- 변경 대상 파일과 함수
88+
- **before/after 코드 스니펫** — 실제 소스를 읽고 현재 코드와 변경 후 코드를 보여준다
89+
- 기대 효과
90+
91+
이 섹션만 읽고도 즉시 복사-붙여넣기로 개선을 적용할 수 있어야 한다. 추상적 설명이 아니라 구체적 코드 변경이 핵심이다.
92+
나머지 개선 항목은 "우선순위별 개선 제안" 테이블에 코드 없이 기재한다 — 코드 스니펫 생성을 3개로 제한하여 분석 효율을 높인다.
93+
94+
## 원칙 준수 매트릭스
95+
96+
| 원칙 | 준수 | 근거 |
97+
|------|------|------|
98+
| Human-first design | ✅/⚠️/❌ | 구체적 근거 |
99+
| Composability | ... | ... |
100+
| ...
101+
102+
## 우선순위별 개선 제안
103+
104+
### Strategic (높은 영향, 어려운 구현)
105+
(제안 상세 — 각 항목에 예상 소요 시간 포함)
106+
107+
### Nice to Have (낮은 영향, 쉬운 구현)
108+
(제안 상세)
109+
110+
### Low Priority (낮은 영향, 어려운 구현)
111+
(제안 상세)
112+
113+
## 벤치마크 비교
114+
115+
비슷한 카테고리의 잘 설계된 CLI 도구와 비교하여, 어떤 부분에서 배울 수 있는지 정리한다.
116+
Feature Matrix 형식으로 기능별 유무를 한눈에 볼 수 있게 정리한다.
117+
```
118+
119+
## 판단 원칙
120+
121+
- 이론보다 실용성을 우선한다. "원칙적으로는 X여야 하지만 이 도구의 맥락에서는 Y가 더 적합하다"는 판단이 가능하다.
122+
- 코드 변경 제안은 구체적이어야 한다. "에러 핸들링을 개선하라"가 아니라 "src/main.rs의 42번째 줄에서 anyhow context를 추가하여 사용자에게 어떤 파일에서 문제가 발생했는지 알려주어라."
123+
- 도구의 정체성을 존중한다. 인터랙티브 TUI 도구를 무조건 파이프라인 친화적으로 만들라고 하지 않는다.
124+
- 점진적 개선을 권장한다. 한 번에 모든 것을 바꾸라고 하지 않고, 단계적으로 개선할 수 있는 로드맵을 제시한다.

0 commit comments

Comments
 (0)