CLI Guidelines
clig.dev 기반의 CLI 설계 가이드라인과 베스트 프랙티스를 제공합니다.
핵심 철학:
- 인간 중심 설계: 사람이 주 사용자
- 상호 연동성: UNIX 관례 준수, 파이프 조합 가능
- 일관성: 기존 패턴 따라 직관성 확보
- 발견 용이성: 도움말, 예제, 오류 제안
- 공감: 사용자의 성공을 돕는 의도 표현
Instructions
워크플로우: 요청 분석 및 리소스 선택
사용자 요청을 분석하여 필요한 리소스만 선택적으로 로드합니다.
1. 키워드 매칭
철학/원칙 (resources/01-philosophy.md)
- "철학", "원칙", "principle"
- "설계", "design"
- "UX", "사용자 경험"
도움말/문서화 (resources/02-help-documentation.md)
- "help", "도움말", "--help"
- "man page", "문서"
- "usage", "사용법"
출력 (resources/03-output.md)
- "output", "출력"
- "색상", "color"
- "JSON", "포맷"
- "stdout", "stderr"
- "로그", "log"
오류 처리 (resources/04-errors.md)
- "error", "오류", "에러"
- "exit code", "종료 코드"
- "예외", "exception"
- "디버그", "debug"
인자/플래그 (resources/05-arguments-flags.md)
- "argument", "인자"
- "flag", "플래그", "옵션"
- "-v", "--verbose"
- "파라미터", "parameter"
상호작용 (resources/06-interactivity.md)
- "interactive", "대화형"
- "prompt", "프롬프트"
- "input", "입력"
- "TTY", "터미널"
- "확인", "confirm"
서브커맨드 (resources/07-subcommands.md)
- "subcommand", "서브커맨드"
- "command", "명령어"
- "verb noun", "noun verb"
견고성 (resources/08-robustness.md)
- "robust", "견고"
- "signal", "시그널"
- "Ctrl-C", "SIGINT"
- "timeout", "타임아웃"
- "진행률", "progress"
설정 (resources/09-configuration.md)
- "config", "설정"
- "environment", "환경변수"
- ".env", "XDG"
- "우선순위", "priority"
배포/명명 (resources/10-distribution.md)
- "배포", "distribution"
- "install", "설치"
- "이름", "naming"
- "바이너리", "binary"
2. 리소스 로딩 전략
단일 주제
- User: "플래그 네이밍 규칙이 뭐야?"
- → Read resources/05-arguments-flags.md
복합 요청
- User: "CLI 도구 처음부터 만들어줘"
- → Read resources/01-philosophy.md (철학)
- → Read resources/05-arguments-flags.md (인자/플래그)
- → Read resources/02-help-documentation.md (도움말)
- → 필요 시 추가 리소스
불명확한 요청
- User: "CLI 잘 만들고 싶어"
- → REFERENCE.md 확인하여 선택지 제시
3. 리소스 적용
현재 CLI 구조 파악
- 기존 CLI 코드 확인
- 사용 중인 CLI 라이브러리 확인 (Click, argparse, clap 등)
리소스 Read
- 필요한 리소스만 Read
- 언어별 CLI 라이브러리 패턴 고려
패턴 적용
- 가이드라인에 맞게 CLI 구조 개선
- 기존 인터페이스 호환성 유지
- 사용자에게 변경 사항 설명
검증
--help 출력 확인
- 종료 코드 동작 확인
- 에러 메시지 품질 확인
예시
예시 1: 새 CLI 도구 설계
User: "Python으로 파일 변환 CLI 만들어줘"
- 키워드 매칭: CLI 설계 전반
- Read resources/01-philosophy.md
- Read resources/05-arguments-flags.md
- Read resources/02-help-documentation.md
- Click 또는 argparse 기반 구조 설계
- 표준 플래그 적용 (-h, -v, -o, --quiet 등)
- 도움말 텍스트 작성
예시 2: 에러 처리 개선
User: "CLI 에러 메시지가 불친절해"
- 키워드 매칭: "에러" → 오류 처리
- Read resources/04-errors.md
- 기존 에러 메시지 분석
- 인간 친화적 메시지로 재작성
- 해결 방법 제안 추가
- 적절한 종료 코드 사용
예시 3: 출력 포맷 추가
User: "JSON 출력 옵션 추가해줘"
- 키워드 매칭: "JSON", "출력" → 출력
- Read resources/03-output.md
- --json 플래그 추가
- 구조화된 출력 구현
- TTY 감지 로직 확인
- 기존 출력과 일관성 유지
중요 원칙
- 인간 우선: TTY에서는 사람 읽기용 출력, 파이프에서는 기계 처리용
- 일관성: 기존 UNIX/POSIX 관례 준수
- 발견 가능: 도움말, 예제, 오류 제안으로 사용법 안내
- 견고함: 빠른 응답, 진행률 표시, 정상 종료 처리
- 호환성: 가산적 변경, 비호환 변경 사전 경고
Technical Details
상세한 가이드라인은 각 리소스 파일 참조:
REFERENCE.md: 리소스 전체 개요
resources/01-philosophy.md: 설계 철학
resources/02-help-documentation.md: 도움말 작성
resources/03-output.md: 출력 가이드라인
resources/04-errors.md: 오류 처리
resources/05-arguments-flags.md: 인자와 플래그
resources/06-interactivity.md: 대화형 인터페이스
resources/07-subcommands.md: 서브커맨드 설계
resources/08-robustness.md: 견고성/시그널 처리
resources/09-configuration.md: 설정 관리
resources/10-distribution.md: 배포/명명 규칙
1---2name: cli-guidelines-23description: CLI 도구 개발 시 proactively 사용하세요. argparse, Click, clap 등 CLI 라이브러리 사용, 플래그/인자 설계, 도움말 작성, 오류 메시지, 출력 포맷팅이 필요할 때 자동으로 호출됩니다. (clig.dev 기반)4---56# CLI Guidelines78clig.dev 기반의 CLI 설계 가이드라인과 베스트 프랙티스를 제공합니다.910**핵심 철학**:11- 인간 중심 설계: 사람이 주 사용자12- 상호 연동성: UNIX 관례 준수, 파이프 조합 가능13- 일관성: 기존 패턴 따라 직관성 확보14- 발견 용이성: 도움말, 예제, 오류 제안15- 공감: 사용자의 성공을 돕는 의도 표현1617## Instructions1819### 워크플로우: 요청 분석 및 리소스 선택2021사용자 요청을 분석하여 필요한 리소스만 선택적으로 로드합니다.2223#### 1. 키워드 매칭2425**철학/원칙** (`resources/01-philosophy.md`)26- "철학", "원칙", "principle"27- "설계", "design"28- "UX", "사용자 경험"2930**도움말/문서화** (`resources/02-help-documentation.md`)31- "help", "도움말", "--help"32- "man page", "문서"33- "usage", "사용법"3435**출력** (`resources/03-output.md`)36- "output", "출력"37- "색상", "color"38- "JSON", "포맷"39- "stdout", "stderr"40- "로그", "log"4142**오류 처리** (`resources/04-errors.md`)43- "error", "오류", "에러"44- "exit code", "종료 코드"45- "예외", "exception"46- "디버그", "debug"4748**인자/플래그** (`resources/05-arguments-flags.md`)49- "argument", "인자"50- "flag", "플래그", "옵션"51- "-v", "--verbose"52- "파라미터", "parameter"5354**상호작용** (`resources/06-interactivity.md`)55- "interactive", "대화형"56- "prompt", "프롬프트"57- "input", "입력"58- "TTY", "터미널"59- "확인", "confirm"6061**서브커맨드** (`resources/07-subcommands.md`)62- "subcommand", "서브커맨드"63- "command", "명령어"64- "verb noun", "noun verb"6566**견고성** (`resources/08-robustness.md`)67- "robust", "견고"68- "signal", "시그널"69- "Ctrl-C", "SIGINT"70- "timeout", "타임아웃"71- "진행률", "progress"7273**설정** (`resources/09-configuration.md`)74- "config", "설정"75- "environment", "환경변수"76- ".env", "XDG"77- "우선순위", "priority"7879**배포/명명** (`resources/10-distribution.md`)80- "배포", "distribution"81- "install", "설치"82- "이름", "naming"83- "바이너리", "binary"8485#### 2. 리소스 로딩 전략8687**단일 주제**88- User: "플래그 네이밍 규칙이 뭐야?"89- → Read resources/05-arguments-flags.md9091**복합 요청**92- User: "CLI 도구 처음부터 만들어줘"93- → Read resources/01-philosophy.md (철학)94- → Read resources/05-arguments-flags.md (인자/플래그)95- → Read resources/02-help-documentation.md (도움말)96- → 필요 시 추가 리소스9798**불명확한 요청**99- User: "CLI 잘 만들고 싶어"100- → REFERENCE.md 확인하여 선택지 제시101102#### 3. 리소스 적용1031041. **현재 CLI 구조 파악**105 - 기존 CLI 코드 확인106 - 사용 중인 CLI 라이브러리 확인 (Click, argparse, clap 등)1071082. **리소스 Read**109 - 필요한 리소스만 Read110 - 언어별 CLI 라이브러리 패턴 고려1111123. **패턴 적용**113 - 가이드라인에 맞게 CLI 구조 개선114 - 기존 인터페이스 호환성 유지115 - 사용자에게 변경 사항 설명1161174. **검증**118 - `--help` 출력 확인119 - 종료 코드 동작 확인120 - 에러 메시지 품질 확인121122### 예시123124#### 예시 1: 새 CLI 도구 설계125126User: "Python으로 파일 변환 CLI 만들어줘"1271281. 키워드 매칭: CLI 설계 전반1292. Read resources/01-philosophy.md1303. Read resources/05-arguments-flags.md1314. Read resources/02-help-documentation.md1325. Click 또는 argparse 기반 구조 설계1336. 표준 플래그 적용 (-h, -v, -o, --quiet 등)1347. 도움말 텍스트 작성135136#### 예시 2: 에러 처리 개선137138User: "CLI 에러 메시지가 불친절해"1391401. 키워드 매칭: "에러" → 오류 처리1412. Read resources/04-errors.md1423. 기존 에러 메시지 분석1434. 인간 친화적 메시지로 재작성1445. 해결 방법 제안 추가1456. 적절한 종료 코드 사용146147#### 예시 3: 출력 포맷 추가148149User: "JSON 출력 옵션 추가해줘"1501511. 키워드 매칭: "JSON", "출력" → 출력1522. Read resources/03-output.md1533. --json 플래그 추가1544. 구조화된 출력 구현1555. TTY 감지 로직 확인1566. 기존 출력과 일관성 유지157158## 중요 원칙1591601. **인간 우선**: TTY에서는 사람 읽기용 출력, 파이프에서는 기계 처리용1612. **일관성**: 기존 UNIX/POSIX 관례 준수1623. **발견 가능**: 도움말, 예제, 오류 제안으로 사용법 안내1634. **견고함**: 빠른 응답, 진행률 표시, 정상 종료 처리1645. **호환성**: 가산적 변경, 비호환 변경 사전 경고165166## Technical Details167168상세한 가이드라인은 각 리소스 파일 참조:169- `REFERENCE.md`: 리소스 전체 개요170- `resources/01-philosophy.md`: 설계 철학171- `resources/02-help-documentation.md`: 도움말 작성172- `resources/03-output.md`: 출력 가이드라인173- `resources/04-errors.md`: 오류 처리174- `resources/05-arguments-flags.md`: 인자와 플래그175- `resources/06-interactivity.md`: 대화형 인터페이스176- `resources/07-subcommands.md`: 서브커맨드 설계177- `resources/08-robustness.md`: 견고성/시그널 처리178- `resources/09-configuration.md`: 설정 관리179- `resources/10-distribution.md`: 배포/명명 규칙