@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 +148 -0
- package/dist/cli.js +1140 -563
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/sduck-assets/agent-rules/antigravity.md +0 -4
- package/sduck-assets/agent-rules/claude-code.md +0 -4
- package/sduck-assets/agent-rules/codex.md +0 -4
- package/sduck-assets/agent-rules/core.md +0 -11
- package/sduck-assets/agent-rules/cursor.mdc +0 -11
- package/sduck-assets/agent-rules/gemini-cli.md +0 -4
- package/sduck-assets/agent-rules/opencode.md +0 -4
- package/sduck-assets/eval/plan.yml +0 -31
- package/sduck-assets/eval/spec.yml +0 -31
- package/sduck-assets/eval/task.yml +0 -31
- package/sduck-assets/types/build.md +0 -194
- package/sduck-assets/types/chore.md +0 -164
- package/sduck-assets/types/feature.md +0 -187
- package/sduck-assets/types/fix.md +0 -174
- package/sduck-assets/types/refactor.md +0 -174
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
|
+

|
|
8
|
+

|
|
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) νμΌμ μ°Έμ‘°νμΈμ.
|