@sduck/sduck-cli 0.1.0 β†’ 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,148 @@
1
+ # πŸ¦† sduck (Spec-Driven Development CLI)
2
+
3
+ > "Don't let your AI write code before you approve the plan."
4
+
5
+ sduck은 AI μ—μ΄μ „νŠΈ(Claude Code, Cursor, Codex λ“±)κ°€ 섀계λ₯Ό κ±΄λ„ˆλ›°κ³  λ°”λ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것을 λ°©μ§€ν•˜κ³ , Spec-Driven Development(SDD) μ›Œν¬ν”Œλ‘œμš°λ₯Ό 물리적으둜 κ°•μ œν•˜λŠ” CLI λ„κ΅¬μž…λ‹ˆλ‹€.
6
+
7
+ ![node](https://img.shields.io/badge/node-%3E%3D20-blue.svg)
8
+ ![license](https://img.shields.io/badge/License-MIT-yellow.svg)
9
+
10
+ ## πŸš€ μ™œ sduckμΈκ°€μš”?
11
+
12
+ AI μ—μ΄μ „νŠΈμ™€ ν˜‘μ—…ν•  λ•Œ κ°€μž₯ ν”ν•œ λ¬Έμ œλŠ” **"μΆ©λΆ„ν•œ 섀계 없이 타이핑뢀터 μ‹œμž‘ν•œλ‹€"**λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λŠ” κ²°κ΅­ 잘λͺ»λœ μ„€κ³„λ‘œ μΈν•œ μž¬μž‘μ—…(Rework)κ³Ό 기술 λΆ€μ±„λ‘œ μ΄μ–΄μ§‘λ‹ˆλ‹€.
13
+
14
+ sduck은 κ°œλ°œμžμ™€ AI μ‚¬μ΄μ˜ '섀계-승인-κ΅¬ν˜„' ν”„λ‘œμ„ΈμŠ€λ₯Ό 도ꡬ μˆ˜μ€€μ—μ„œ κ°•μ œν•©λ‹ˆλ‹€:
15
+
16
+ - **물리적 승인 단계:** μ‚¬μš©μžκ°€ μŠ€νŽ™κ³Ό ν”Œλžœμ„ μŠΉμΈν•˜κΈ° μ „κΉŒμ§€ AIκ°€ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ λͺ»ν•˜κ²Œ μ°¨λ‹¨ν•©λ‹ˆλ‹€.
17
+ - **κ΅¬μ‘°ν™”λœ μž‘μ—… 관리:** λͺ¨λ“  μž‘μ—…μ€ `spec.md`, `plan.md`, `meta.yml`을 톡해 기둝되고 κ΄€λ¦¬λ©λ‹ˆλ‹€.
18
+ - **우리 νŒ€λ§Œμ˜ μ›Œν¬ν”Œλ‘œμš° μžμ‚°:** νŒ€μ˜ μ»¨λ²€μ…˜μ— λ§žλŠ” ν…œν”Œλ¦Ώκ³Ό 평가 기쀀을 ν”„λ‘œμ νŠΈ μžμ‚°μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
19
+
20
+ ## πŸ”„ μ›Œν¬ν”Œλ‘œμš° (The SDD Process)
21
+
22
+ sduck은 μ•„λž˜μ˜ μ—„κ²©ν•œ 절차λ₯Ό μ§€ν–₯ν•˜λ©°, 각 λ‹¨κ³„λŠ” CLIλ₯Ό 톡해 μ „μ΄λ©λ‹ˆλ‹€.
23
+
24
+ 1. **Init:** ν”„λ‘œμ νŠΈ ν™˜κ²½ μ„€μ • 및 μ—μ΄μ „νŠΈ κ·œμΉ™(`CLAUDE.md` λ“±) 생성
25
+ 2. **Start:** μƒˆλ‘œμš΄ μž‘μ—…(feature, fix λ“±) 생성 및 ν…œν”Œλ¦Ώ μ€€λΉ„
26
+ 3. **Fast Track (optional):** minimal spec + minimal plan을 λΉ λ₯΄κ²Œ μƒμ„±ν•˜κ³ , λŒ€ν™”ν˜• ν™˜κ²½μ—μ„œλŠ” 확인 1회둜 μŠΉμΈκΉŒμ§€ μ΄μ–΄μ§ˆ 수 있음
27
+ 4. **Spec:** AIκ°€ μš”κ΅¬μ‚¬ν•­μ„ λΆ„μ„ν•˜μ—¬ `spec.md` μž‘μ„± 및 자체 ν’ˆμ§ˆ 평가
28
+ 5. **Approve Spec:** μ‚¬μš©μžκ°€ 섀계λ₯Ό κ²€ν† ν•˜κ³  `sduck spec approve` μ‹€ν–‰
29
+ 6. **Plan:** AIκ°€ 상세 κ΅¬ν˜„ κ³„νšμ„ `plan.md`에 λ‹¨κ³„λ³„λ‘œ μž‘μ„±
30
+ 7. **Approve Plan:** μ‚¬μš©μžκ°€ κ³„νšμ„ κ²€ν† ν•˜κ³  `sduck plan approve` μ‹€ν–‰
31
+ 8. **Implementation:** 승인된 κ³„νšμ˜ Step에 따라 AIκ°€ μ‹€μ œ μ½”λ“œ κ΅¬ν˜„
32
+ 9. **Done:** spec μ²΄ν¬λ¦¬μŠ€νŠΈμ™€ task eval 기쀀을 ν™•μΈν•œ λ’€ `sduck done` μ‹€ν–‰
33
+
34
+ ## πŸ›  μ„€μΉ˜ 및 μ΄ˆκΈ°ν™”
35
+
36
+ ```bash
37
+ # κΈ€λ‘œλ²Œ μ„€μΉ˜
38
+ npm install -g @sduck/sduck-cli
39
+
40
+ # ν”„λ‘œμ νŠΈ μ΄ˆκΈ°ν™” (μ‚¬μš©ν•  μ—μ΄μ „νŠΈ μ§€μ •)
41
+ sduck init --agents claude-code,cursor,codex
42
+ ```
43
+
44
+ ## πŸ“– μ£Όμš” λͺ…λ Ήμ–΄
45
+
46
+ ### 1. μž‘μ—… μ‹œμž‘ (Start)
47
+
48
+ μž‘μ—… νƒ€μž…μ— λ§žλŠ” 폴더와 ν…œν”Œλ¦Ώ νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.
49
+
50
+ ```bash
51
+ # sduck start <type> <slug>
52
+ sduck start feature login-system
53
+ sduck start fix auth-bug
54
+ ```
55
+
56
+ ### 2. μŠ€νŽ™ 승인 (Approve Spec)
57
+
58
+ μž‘μ„±λœ `spec.md`λ₯Ό κ²€ν† ν•œ ν›„ μŠΉμΈν•©λ‹ˆλ‹€. μƒνƒœκ°€ `SPEC_APPROVED`둜 λ³€κ²½λ©λ‹ˆλ‹€.
59
+ target을 μ§€μ •ν•  λ•ŒλŠ” μ •ν™•ν•œ `slug` λ˜λŠ” 전체 task `id`만 ν—ˆμš©λ©λ‹ˆλ‹€.
60
+
61
+ ```bash
62
+ sduck spec approve [slug]
63
+ ```
64
+
65
+ ### 3. λΉ λ₯Έ μ‹œμž‘ (Fast Track)
66
+
67
+ λ°˜λ³΅μ μ΄κ±°λ‚˜ λ²”μœ„κ°€ λͺ…ν™•ν•œ μž‘μ—…μ€ minimal specκ³Ό minimal plan을 ν•œ λ²ˆμ— 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. `spec.md`λŠ” μƒλž΅λ˜μ§€ μ•ŠμœΌλ©°, λΉ„λŒ€ν™”ν˜• ν™˜κ²½μ—μ„œλŠ” μžλ™ 승인 없이 μƒμ„±λ§Œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
68
+
69
+ ```bash
70
+ sduck fast-track <type> <slug>
71
+ ```
72
+
73
+ ### 4. ν”Œλžœ 승인 (Approve Plan)
74
+
75
+ `plan.md`에 μž‘μ„±λœ 단계(Steps)λ₯Ό κ²€ν† ν•˜κ³  μŠΉμΈν•©λ‹ˆλ‹€. μƒνƒœκ°€ `IN_PROGRESS`둜 λ³€κ²½λ˜λ©° κ΅¬ν˜„ κΆŒν•œμ΄ λΆ€μ—¬λ©λ‹ˆλ‹€.
76
+ target을 μ§€μ •ν•  λ•ŒλŠ” μ •ν™•ν•œ `slug` λ˜λŠ” 전체 task `id`만 ν—ˆμš©λ©λ‹ˆλ‹€.
77
+
78
+ ```bash
79
+ sduck plan approve [slug]
80
+ ```
81
+
82
+ ### 5. μž‘μ—… μ™„λ£Œ (Done)
83
+
84
+ κ΅¬ν˜„μ΄ λλ‚œ μž‘μ—…μ˜ step μ™„λ£Œ μ—¬λΆ€, spec 체크리슀트, task eval μžμ‚°μ„ ν™•μΈν•œ λ’€ `DONE` μƒνƒœλ‘œ λ§ˆκ°ν•©λ‹ˆλ‹€.
85
+
86
+ ```bash
87
+ sduck done [slug]
88
+ ```
89
+
90
+ ## 🎨 μžμ‚° μ»€μŠ€ν„°λ§ˆμ΄μ§• (Asset Customization)
91
+
92
+ sduck은 νŒ€μ˜ μ»¨λ²€μ…˜μ„ μžμ‚°(`.sduck/sduck-assets/`)으둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€. 이 폴더λ₯Ό Git에 ν¬ν•¨ν•˜μ—¬ νŒ€μ› λͺ¨λ‘κ°€ λ™μΌν•œ 기쀀을 κ³΅μœ ν•˜μ„Έμš”.
93
+
94
+ ### 1. μŠ€νŽ™ ν…œν”Œλ¦Ώ (`types/`)
95
+
96
+ μž‘μ—… νƒ€μž…λ³„ `spec.md`의 ν˜•μ‹μ„ μ •μ˜ν•©λ‹ˆλ‹€. λ³΄μ•ˆ μ²΄ν¬λ¦¬μŠ€νŠΈλ‚˜ μ„±λŠ₯ 고렀사항을 μΆ”κ°€ν•˜μ„Έμš”.
97
+
98
+ - 경둜: `.sduck/sduck-assets/types/` (`feature.md`, `fix.md`, `refactor.md` λ“±)
99
+
100
+ ### 2. ν’ˆμ§ˆ 평가 κΈ°μ€€ (`eval/`)
101
+
102
+ AIκ°€ μž‘μ„±ν•œ λ¬Έμ„œμ˜ ν’ˆμ§ˆμ„ 슀슀둜 κ²€ν† ν•  λ•Œ μ‚¬μš©ν•˜λŠ” κΈ°μ€€μž…λ‹ˆλ‹€. YAML νŒŒμΌμ—μ„œ 질문 ν•­λͺ©κ³Ό 점수 λ²”μœ„λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
103
+
104
+ - 경둜: `.sduck/sduck-assets/eval/`
105
+ - 파일: `spec.yml` (섀계 평가), `plan.yml` (κ³„νš 평가), `task.yml` (κ²°κ³Ό 평가)
106
+
107
+ ## πŸ“‚ 디렉토리 ꡬ쑰
108
+
109
+ sduck은 λͺ¨λ“  μƒνƒœλ₯Ό 둜컬 파일둜 κ΄€λ¦¬ν•˜μ—¬ Git으둜 μ™„λ²½ν•˜κ²Œ 좔적 κ°€λŠ₯ν•©λ‹ˆλ‹€.
110
+
111
+ ```
112
+ your-project/
113
+ β”œβ”€β”€ .sduck/
114
+ β”‚ β”œβ”€β”€ sduck-assets/ # ✨ νŒ€ ν‘œμ€€ (ν…œν”Œλ¦Ώ, 평가 κΈ°μ€€, κ·œμΉ™ 원본)
115
+ β”‚ β”‚ β”œβ”€β”€ types/ # μž‘μ—… νƒ€μž…λ³„ spec.md ν…œν”Œλ¦Ώ
116
+ β”‚ β”‚ β”œβ”€β”€ eval/ # ν’ˆμ§ˆ 평가 κΈ°μ€€ (YAML)
117
+ β”‚ β”‚ └── agent-rules/ # μ—μ΄μ „νŠΈλ³„ κ·œμΉ™ 원본
118
+ β”‚ └── sduck-workspace/ # πŸ“ μž‘μ—… 이λ ₯ (Git 좔적 ꢌμž₯)
119
+ β”‚ └── 20260319-1000-feature-login/
120
+ β”‚ β”œβ”€β”€ meta.yml # μž‘μ—… μƒνƒœ 관리 (status, timestamps)
121
+ β”‚ β”œβ”€β”€ spec.md # μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œ
122
+ β”‚ └── plan.md # 상세 κ΅¬ν˜„ κ³„νšμ„œ
123
+ β”œβ”€β”€ CLAUDE.md # Claude Code용 κ·œμΉ™
124
+ └── AGENT.md # Codex/OpenCode용 κ·œμΉ™
125
+ ```
126
+
127
+ ## πŸ€– 지원 μ—μ΄μ „νŠΈ (Rule Generation)
128
+
129
+ `sduck init` μ‹œ 각 μ—μ΄μ „νŠΈμ˜ νŠΉμ„±μ— λ§žλŠ” κ·œμΉ™ νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.
130
+
131
+ | μ—μ΄μ „νŠΈ | 생성 파일 | νŠΉμ§• |
132
+ | ---------------- | --------------------- | -------------------------------- |
133
+ | Claude Code | `CLAUDE.md` | ν”„λ‘œμ νŠΈ 루트 μ§€μΉ¨μœΌλ‘œ μžλ™ λ‘œλ“œ |
134
+ | Cursor | `.cursor/rules/*.mdc` | Cursor μ „μš© Rule 파일둜 λ™μž‘ |
135
+ | Codex / OpenCode | `AGENT.md` | 곡용 μ—μ΄μ „νŠΈ κ·œμΉ™ 파일 |
136
+ | Gemini CLI | `GEMINI.md` | ꡬ글 μ œλ―Έλ‚˜μ΄ μ—μ΄μ „νŠΈμš© μ§€μΉ¨ |
137
+ | Antigravity | `.agents/rules/*.md` | Antigravity μ—μ΄μ „νŠΈ μ „μš© μ§€μΉ¨ |
138
+
139
+ ## 🀝 κΈ°μ—¬ν•˜κΈ°
140
+
141
+ 1. 이 리포지토리λ₯Ό ν¬ν¬ν•©λ‹ˆλ‹€.
142
+ 2. μƒˆλ‘œμš΄ 브랜치λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€ (`git checkout -b feature/amazing-feature`).
143
+ 3. λ³€κ²½ 사항을 μ»€λ°‹ν•©λ‹ˆλ‹€ (`git commit -m 'feat: Add amazing feature'`).
144
+ 4. Pull Requestλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
145
+
146
+ ## πŸ“„ λΌμ΄μ„ μŠ€
147
+
148
+ 이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€μ— 따라 λΌμ΄μ„ μŠ€κ°€ λΆ€μ—¬λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ [LICENSE](LICENSE) νŒŒμΌμ„ μ°Έμ‘°ν•˜μ„Έμš”.