lee-spec-kit 0.7.4 → 0.7.7
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.en.md +52 -713
- package/README.md +55 -889
- package/dist/index.js +600 -308
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
- package/templates/en/common/README.md +26 -5
- package/templates/en/common/agents/agents.md +8 -5
- package/templates/en/common/agents/skills/create-pr.md +1 -1
- package/templates/en/common/agents/skills/execute-task.md +7 -6
- package/templates/en/common/features/README.md +13 -5
- package/templates/en/common/features/feature-base/decisions.md +1 -1
- package/templates/en/common/features/feature-base/plan.md +1 -1
- package/templates/en/common/features/feature-base/tasks.md +8 -21
- package/templates/en/common/ideas/README.md +2 -0
- package/templates/en/common/prd/README.md +11 -0
- package/templates/ko/common/README.md +26 -5
- package/templates/ko/common/agents/agents.md +8 -5
- package/templates/ko/common/agents/skills/create-pr.md +1 -1
- package/templates/ko/common/agents/skills/execute-task.md +7 -6
- package/templates/ko/common/features/README.md +13 -5
- package/templates/ko/common/features/feature-base/decisions.md +1 -1
- package/templates/ko/common/features/feature-base/plan.md +1 -1
- package/templates/ko/common/features/feature-base/tasks.md +8 -21
- package/templates/ko/common/ideas/README.md +2 -0
- package/templates/ko/common/prd/README.md +11 -0
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</div>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<strong>AI 에이전트 기반 개발을 위한
|
|
10
|
+
<strong>AI 에이전트 기반 개발을 위한 오케스트레이션 하네스 CLI</strong>
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
<p align="center">
|
|
20
20
|
<a href="#quick-start">Quick Start</a> •
|
|
21
|
-
<a href="
|
|
22
|
-
<a href="
|
|
23
|
-
<a href="
|
|
21
|
+
<a href="#이-cli가-하는-일">Why</a> •
|
|
22
|
+
<a href="#에이전트가-주로-실행하는-명령">Commands</a> •
|
|
23
|
+
<a href="#docs">Docs</a>
|
|
24
24
|
</p>
|
|
25
25
|
|
|
26
26
|
<p align="center">
|
|
@@ -34,921 +34,87 @@
|
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
-
## 목차
|
|
38
|
-
|
|
39
|
-
- [Quick Start](#quick-start)
|
|
40
|
-
- [신규 프로젝트 시작 순서](#신규-프로젝트-시작-순서)
|
|
41
|
-
- [에이전트 킥오프 프롬프트](#에이전트-킥오프-프롬프트)
|
|
42
|
-
- [주요 기능](#주요-기능)
|
|
43
|
-
- [사용법](#사용법)
|
|
44
|
-
- [설정 파일](#설정-파일)
|
|
45
|
-
- [오류 코드](#오류-코드)
|
|
46
|
-
- [생성되는 구조](#생성되는-구조)
|
|
47
|
-
- [Feature 워크플로우](#feature-워크플로우)
|
|
48
|
-
- [문제 해결](#문제-해결)
|
|
49
|
-
- [기여하기](#기여하기)
|
|
50
|
-
- [라이선스](#라이선스)
|
|
51
|
-
|
|
52
37
|
## Quick Start
|
|
53
38
|
|
|
39
|
+
대부분의 경우 사용자는 자연어로 요청하고, 메인 에이전트가 아래 흐름을 실행합니다.
|
|
40
|
+
|
|
54
41
|
```bash
|
|
55
|
-
# 1. 프로젝트 문서 구조 생성
|
|
56
42
|
npx lee-spec-kit init
|
|
57
|
-
|
|
58
|
-
# 2. Codex 사용 시 bootstrap 1회 설치 (repo-root AGENTS.md 없이 운영할 때)
|
|
59
|
-
npx lee-spec-kit setup codex-bootstrap
|
|
60
|
-
|
|
61
|
-
# 3. 초기 온보딩 점검
|
|
62
|
-
npx lee-spec-kit onboard --strict
|
|
63
|
-
|
|
64
|
-
# 4. 새 기능 생성
|
|
43
|
+
npx lee-spec-kit idea improve-auth-flow
|
|
65
44
|
npx lee-spec-kit feature user-auth
|
|
66
|
-
|
|
67
|
-
# 5. 진행 상황 및 다음 단계 확인 (AI 에이전트용)
|
|
68
45
|
npx lee-spec-kit context
|
|
46
|
+
npx lee-spec-kit flow
|
|
47
|
+
```
|
|
69
48
|
|
|
70
|
-
|
|
71
|
-
npx lee-spec-kit view
|
|
49
|
+
## 왜 만들었나
|
|
72
50
|
|
|
73
|
-
|
|
74
|
-
|
|
51
|
+
이 CLI는 AI 에이전트와 함께 프로젝트를 진행할 때 spec-driven development 기반의 흐름을 더 일관되게 만들기 위해 만들어졌습니다.
|
|
52
|
+
목표는 단순히 문서 폴더를 생성하는 것이 아니라, 프로젝트가 어떤 요구사항에서 출발했고 어떤 아이디어를 거쳐 어떤 구현 단위로 내려왔는지를
|
|
53
|
+
에이전트와 사람이 함께 추적할 수 있게 만드는 것입니다.
|
|
75
54
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
```
|
|
55
|
+
이를 위해 `lee-spec-kit`는 `PRD → idea → feature` 단계로 작업을 구조화하고, 실제 구현과 협업 흐름에서는 git 기반의 issue/PR 구조를 자연스럽게 연결하도록 설계되었습니다.
|
|
56
|
+
즉, 문서 작성 단계와 코드 변경 단계가 따로 놀지 않도록, 에이전트가 읽을 수 있는 상태와 사람이 리뷰할 수 있는 상태를 같은 흐름 안에 두는 데 초점을 둡니다.
|
|
79
57
|
|
|
80
|
-
|
|
58
|
+
여기서 PRD는 `init`이 만들어 주는 `docs/prd/`에서 직접 관리하는 상위 요구사항 공간입니다.
|
|
59
|
+
Idea는 그 요구사항에서 나온 후보와 실험을 정리하는 단계이고, Feature는 그중 실제로 실행하기로 한 단위를
|
|
60
|
+
`spec.md`, `plan.md`, `tasks.md`로 내려서 관리하는 단계입니다.
|
|
81
61
|
|
|
82
|
-
|
|
83
|
-
|
|
62
|
+
구조적으로는 [spec-kit](https://github.com/github/spec-kit)과 [OpenSpec](https://github.com/Fission-AI/OpenSpec)의 접근을 참고했지만,
|
|
63
|
+
`lee-spec-kit`는 실제 프로젝트 진행 방식과 에이전트 오케스트레이션에 맞게 더 실무적인 문서 단계, feature 단위, 그리고 git workflow 연결을 강조하도록 재구성되었습니다.
|
|
84
64
|
|
|
85
|
-
|
|
86
|
-
# 0. 코드 프로젝트 생성/초기화 (예: Next.js)
|
|
87
|
-
npx create-next-app@latest my-app
|
|
88
|
-
cd my-app
|
|
65
|
+
## 이 CLI가 하는 일
|
|
89
66
|
|
|
90
|
-
|
|
91
|
-
|
|
67
|
+
`lee-spec-kit`는 사람이 매번 세부 명령을 직접 치는 도구라기보다,
|
|
68
|
+
메인 에이전트가 현재 상태를 읽고 다음 액션을 고르도록 돕는 개발 하네스입니다.
|
|
92
69
|
|
|
93
|
-
|
|
94
|
-
|
|
70
|
+
- 사람은 보통 자연어로 요청합니다.
|
|
71
|
+
- 메인 에이전트는 그 요청을 `detect`, `context`, `flow`, `idea`, `feature` 같은 명령으로 번역해 실행합니다.
|
|
72
|
+
- 더 깊은 운영 명령은 여전히 지원되지만 기본 help에는 전면 노출하지 않습니다.
|
|
95
73
|
|
|
96
|
-
|
|
97
|
-
npx lee-spec-kit onboard --strict
|
|
74
|
+
## 어떻게 동작하나
|
|
98
75
|
|
|
99
|
-
|
|
100
|
-
|
|
76
|
+
1. `init`으로 docs/workflow 구조를 붙입니다.
|
|
77
|
+
2. `docs/prd/`에서 상위 요구사항을 정리합니다.
|
|
78
|
+
3. `idea`로 후보/실험을 정리하거나, 바로 `feature`로 실행 단위를 만듭니다.
|
|
79
|
+
4. 메인 에이전트가 `detect`와 `context`를 읽고 진행합니다.
|
|
80
|
+
5. 사람은 승인, 예외 처리, 방향 수정 시점에 개입합니다.
|
|
81
|
+
6. 현재 다음 액션과 승인 대기 상태는 `context`, 전체 상태 요약은 `flow`로 확인합니다.
|
|
101
82
|
|
|
102
|
-
|
|
103
|
-
npx lee-spec-kit feature user-auth
|
|
104
|
-
npx lee-spec-kit context --json-compact
|
|
105
|
-
```
|
|
83
|
+
## 사람은 보통 이렇게 요청합니다
|
|
106
84
|
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
85
|
+
- "이 문서 읽고 프로젝트 구조 시작하려고 해."
|
|
86
|
+
- "이 요구사항 기준으로 idea 정리해줘."
|
|
87
|
+
- "이 idea를 feature로 올려서 진행해줘."
|
|
88
|
+
- "지금 다음 액션이 뭐야?"
|
|
89
|
+
- "전체 상태 한번 점검해줘."
|
|
110
90
|
|
|
111
|
-
|
|
91
|
+
## 에이전트가 주로 실행하는 명령
|
|
112
92
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
# workspace 루트에서 실행
|
|
120
|
-
npx lee-spec-kit init --docs-repo standalone --dir ./docs --project-root ./project
|
|
121
|
-
npx lee-spec-kit detect --json
|
|
122
|
-
```
|
|
93
|
+
- `init`: docs/workflow 구조를 초기화합니다.
|
|
94
|
+
- `idea`: 구현 전 아이디어 문서를 생성합니다.
|
|
95
|
+
- `feature`: 실제 작업 단위를 생성합니다.
|
|
96
|
+
- `detect`: 현재 워크스페이스가 lee-spec-kit 프로젝트인지 감지합니다.
|
|
97
|
+
- `context`: 현재 feature 상태와 다음 액션을 읽습니다.
|
|
98
|
+
- `flow`: 전체 워크플로우 상태를 요약합니다.
|
|
123
99
|
|
|
124
100
|
## 에이전트 킥오프 프롬프트
|
|
125
101
|
|
|
126
|
-
아래 프롬프트를 에이전트 시작 메시지로 그대로 사용할 수 있습니다.
|
|
127
|
-
|
|
128
102
|
```text
|
|
129
103
|
작업 시작 절차:
|
|
130
104
|
1) npx lee-spec-kit detect --json
|
|
131
|
-
2) isLeeSpecKitProject === true 이면 npx lee-spec-kit context --json-compact 실행
|
|
132
|
-
3) approvalRequest.required=true 이면 approvalRequest.userFacingLines를 그대로 사용자에게 제시하고 승인
|
|
105
|
+
2) isLeeSpecKitProject === true 이면 npx lee-spec-kit context --json-compact 실행
|
|
106
|
+
3) approvalRequest.required=true 이면 approvalRequest.userFacingLines를 그대로 사용자에게 제시하고 승인 대기
|
|
133
107
|
4) 승인 전에는 실행하지 말고, requiresUserCheck=true 액션은 승인 후에만 실행
|
|
134
108
|
5) isLeeSpecKitProject === false 이면 lee-spec-kit 전용 절차를 건너뛰고 일반 워크플로우로 진행
|
|
135
109
|
```
|
|
136
110
|
|
|
137
|
-
##
|
|
138
|
-
|
|
139
|
-
### 📁 프로젝트 초기화
|
|
140
|
-
|
|
141
|
-
- 대화형 모드 또는 CLI 옵션으로 프로젝트 설정
|
|
142
|
-
- 기본값은 Multi이며, Single도 단순 단일 레포/기존 호환 시나리오를 위해 지원합니다. (`fullstack`는 `multi` 하위호환 alias)
|
|
143
|
-
- 한국어/영어 템플릿 선택
|
|
144
|
-
|
|
145
|
-
### 🚀 Feature 생성
|
|
146
|
-
|
|
147
|
-
- spec.md, plan.md, tasks.md, decisions.md 자동 생성
|
|
148
|
-
- Multi 프로젝트에서 임의 컴포넌트(app/api/worker 등) 분리 지원
|
|
149
|
-
- GitHub Issue/PR 템플릿 연동
|
|
150
|
-
|
|
151
|
-
### 📊 상태 관리
|
|
152
|
-
|
|
153
|
-
- 전체 Feature 진행 상태 한눈에 확인
|
|
154
|
-
- 터미널 출력 또는 마크다운 파일로 저장
|
|
155
|
-
|
|
156
|
-
### 👀 View 대시보드
|
|
157
|
-
|
|
158
|
-
- Context 기반 워크플로우 현황을 한 번에 확인
|
|
159
|
-
- 단일 Feature/전체 Feature 모두 조회 가능
|
|
160
|
-
|
|
161
|
-
### 🔁 Flow 오케스트레이션
|
|
162
|
-
|
|
163
|
-
- `context + status + doctor`를 한 번에 실행/요약
|
|
164
|
-
- 승인/실행 옵션을 그대로 전달해 원자 액션 자동화 가능
|
|
165
|
-
|
|
166
|
-
### 🩺 문서 진단 (Doctor)
|
|
167
|
-
|
|
168
|
-
- docs 구조/설정/Feature 메타데이터를 점검하여 잠재 문제를 빠르게 탐지
|
|
169
|
-
- `--json` 출력으로 에이전트 파이프라인에 쉽게 연동
|
|
170
|
-
|
|
171
|
-
### 🔄 자동 업데이트
|
|
172
|
-
|
|
173
|
-
- 최신 버전 체크 및 템플릿 업데이트 지원
|
|
174
|
-
|
|
175
|
-
## 사용법
|
|
176
|
-
|
|
177
|
-
### 프로젝트 초기화
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
# 대화형 모드
|
|
181
|
-
npx lee-spec-kit init
|
|
182
|
-
|
|
183
|
-
# 옵션 지정
|
|
184
|
-
npx lee-spec-kit init --name my-project --type multi
|
|
185
|
-
npx lee-spec-kit init --name my-project --type fullstack # alias
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
**옵션:**
|
|
189
|
-
|
|
190
|
-
| 옵션 | 설명 | 기본값 |
|
|
191
|
-
| ------------------- | -------------------------------------------------------------------- | ------------------------- |
|
|
192
|
-
| `-n, --name <name>` | 프로젝트 이름 | 현재 폴더명 |
|
|
193
|
-
| `-t, --type <type>` | `single` 또는 `multi` (`fullstack` alias 지원) | 대화형 선택 (`--yes`/`--non-interactive`면 `multi`) |
|
|
194
|
-
| `--components <list>` | multi 컴포넌트 목록 (쉼표 구분, 예: `app,api,worker`) | `app` |
|
|
195
|
-
| `-l, --lang <lang>` | `ko` (한국어) 또는 `en` (영어) | `en` |
|
|
196
|
-
| `--workflow <mode>` | 워크플로우 모드: `github`(issue/PR/review 포함) 또는 `local`(로컬 중심) | `github` |
|
|
197
|
-
| `-d, --dir <dir>` | 설치 디렉토리 | `./docs` |
|
|
198
|
-
| `--docs-repo <mode>` | docs 레포 모드 (`embedded` 또는 `standalone`) | `embedded` |
|
|
199
|
-
| `--project-root <path>` | standalone(single) 프로젝트 레포 경로 또는 standalone(multi) JSON 매핑 (`{"app":"/path/app","api":"/path/api"}`) | - |
|
|
200
|
-
| `--component-project-roots <pairs>` | standalone(multi) 컴포넌트별 레포 경로 (`app=/path/app,api=/path/api,worker=/path/worker`) | - |
|
|
201
|
-
| `--push-docs` | standalone docs 원격 push 사용 (`--docs-remote`와 함께 사용) | `false` |
|
|
202
|
-
| `--docs-remote <url>` | standalone docs 원격 URL (`--push-docs`와 함께 사용) | - |
|
|
203
|
-
| `-y, --yes` | 대화형 입력을 대부분 스킵 (단, 대상 디렉토리가 비어있지 않으면 덮어쓰기 확인은 표시) | - |
|
|
204
|
-
| `-f, --force` | 대상 디렉토리가 비어있지 않아도 확인 없이 덮어쓰기 | `false` |
|
|
205
|
-
| `--non-interactive` | 사용자 입력이 필요하면 프롬프트 대신 즉시 실패 | `false` |
|
|
206
|
-
|
|
207
|
-
> `init`은 docs 생성 후 Git 초기화/커밋(`git init`, `git add`, `git commit`)을 자동 시도합니다. 환경에 따라 자동 커밋이 생략될 수 있습니다.
|
|
208
|
-
|
|
209
|
-
### 프로젝트 감지 (에이전트 시작점)
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
# 현재 경로 기준 감지
|
|
213
|
-
npx lee-spec-kit detect
|
|
214
|
-
|
|
215
|
-
# 에이전트/자동화용 JSON
|
|
216
|
-
npx lee-spec-kit detect --json
|
|
217
|
-
|
|
218
|
-
# 특정 경로 기준 감지
|
|
219
|
-
npx lee-spec-kit detect --dir /path/to/workspace
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
`--json` 출력은 `isLeeSpecKitProject`, `reasonCode`(`PROJECT_DETECTED` | `PROJECT_NOT_DETECTED`), `docsDir`, `configPath`, `detectionSource`(`config` | `heuristic`)를 포함합니다.
|
|
223
|
-
|
|
224
|
-
### 온보딩 점검
|
|
225
|
-
|
|
226
|
-
초기 설정(Constitution/PRD/Git remote 등) 준비 상태를 점검합니다.
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
# 사람 읽기 쉬운 출력
|
|
230
|
-
npx lee-spec-kit onboard
|
|
231
|
-
|
|
232
|
-
# 에이전트/자동화용 JSON
|
|
233
|
-
npx lee-spec-kit onboard --json
|
|
234
|
-
|
|
235
|
-
# WARN/BLOCK이 있으면 종료 코드 1
|
|
236
|
-
npx lee-spec-kit onboard --strict
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
### 새 기능 생성
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
# Single 프로젝트
|
|
243
|
-
npx lee-spec-kit feature user-auth
|
|
244
|
-
|
|
245
|
-
# Multi 프로젝트
|
|
246
|
-
npx lee-spec-kit feature --component api user-auth
|
|
247
|
-
npx lee-spec-kit feature --component app user-profile
|
|
248
|
-
npx lee-spec-kit feature --component worker queue-jobs
|
|
249
|
-
|
|
250
|
-
# Feature ID/설명 지정
|
|
251
|
-
npx lee-spec-kit feature payment --id F123 --desc "결제 플로우 개선"
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
**옵션:**
|
|
255
|
-
|
|
256
|
-
| 옵션 | 설명 | 기본값 |
|
|
257
|
-
| ------------------- | -------------------------------------------- | ----------- |
|
|
258
|
-
| `--component <id>` | multi 대상 컴포넌트 | 대화형 선택 |
|
|
259
|
-
| `--id <id>` | Feature ID (`F001` 형식) | 자동 생성 |
|
|
260
|
-
| `-d, --desc <desc>` | `spec.md`의 목적(설명) 기본 문구 | 빈 문자열 |
|
|
261
|
-
| `--non-interactive` | 사용자 입력이 필요하면 프롬프트 대신 즉시 실패 | `false` |
|
|
262
|
-
| `--json` | JSON 출력 (`featureId`, `featurePath`, `component`) | `false` |
|
|
263
|
-
|
|
264
|
-
### Context 확인 (AI 에이전트 가이드)
|
|
265
|
-
|
|
266
|
-
현재 작업 중인 Feature의 상태와 다음 할 일을 확인합니다. 특히 AI 에이전트가 프로세스를 준수하는 데 유용합니다.
|
|
267
|
-
단일 Feature 상세에서는 다음 작업을 항상 `A/B/C` 옵션으로 표시합니다.
|
|
268
|
-
|
|
269
|
-
```bash
|
|
270
|
-
# 기본 조회 (브랜치 기준 자동 감지)
|
|
271
|
-
npx lee-spec-kit context
|
|
272
|
-
|
|
273
|
-
# 특정 Feature 상태 + 라벨 확인 (에이전트 권장)
|
|
274
|
-
npx lee-spec-kit context F001
|
|
275
|
-
npx lee-spec-kit context F001 --json
|
|
276
|
-
npx lee-spec-kit context F001 --json-compact
|
|
277
|
-
|
|
278
|
-
# 승인 + 실행 (일반 케이스)
|
|
279
|
-
npx lee-spec-kit context F001 --approve A --execute
|
|
280
|
-
|
|
281
|
-
# 선택된 액션이 `requiresUserCheck=true`일 때만 티켓 포함
|
|
282
|
-
npx lee-spec-kit context F001 --approve A --execute --ticket <TICKET>
|
|
283
|
-
|
|
284
|
-
# 엄격 실행 모드 (instruction-only 라벨이면 실패)
|
|
285
|
-
npx lee-spec-kit context F001 --approve A --execute --ticket <TICKET> --execute-strict
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
고급 선택자(`--component`, `--all`, `--done`)는 multi 범위 제어나 예외 상황에서만 사용하세요.
|
|
289
|
-
|
|
290
|
-
**옵션:**
|
|
291
|
-
|
|
292
|
-
| 옵션 | 설명 |
|
|
293
|
-
| --------------- | ----------------------------------------------- |
|
|
294
|
-
| `--json` | 에이전트용 JSON 출력 |
|
|
295
|
-
| `--json-compact` | 에이전트용 압축 JSON 출력 (`--json` 포함, 중복 필드 최소화) |
|
|
296
|
-
| `--component <id>` | multi에서 대상 컴포넌트 지정 (예: `app`, `api`, `worker`) |
|
|
297
|
-
| `--all` | 자동 감지 실패 시 완료된 Feature까지 포함해서 표시 |
|
|
298
|
-
| `--done` | 완료(workflow-done) Feature만 표시 |
|
|
299
|
-
| `--approve <reply>` | 라벨 포함 승인 응답으로 단일 옵션 선택 (예: `A`, `A OK`, `A 진행해`) |
|
|
300
|
-
| `--ticket <token>` | `--approve` 결과에서 받은 1회용 실행 티켓 (`requiresUserCheck=true` 옵션에서 필요) |
|
|
301
|
-
| `--execute` | 승인된 command 옵션 1개만 실행 (`requiresUserCheck=true`면 `--ticket` 필요) |
|
|
302
|
-
| `--execute-strict` | `--execute`와 함께 사용 시 instruction-only 옵션이면 실패 |
|
|
303
|
-
|
|
304
|
-
**티켓(approval ticket)이란?**
|
|
305
|
-
|
|
306
|
-
- `--approve`로 라벨을 승인할 때 CLI가 발급하는 1회용 실행 토큰입니다.
|
|
307
|
-
- 선택한 액션이 `requiresUserCheck=true`인 경우에만 `--execute`에서 `--ticket`이 필요합니다.
|
|
308
|
-
- 발급 후 짧은 시간(기본 5분)만 유효하며, 한 번 사용하면 재사용할 수 없습니다.
|
|
309
|
-
- handoff-only command(`pre_pr_review_run`, `code_review_run`)를 `--execute`하면 일반 실행 완료(`approved_executed`) 대신 `approved_handoff_prepared`와 `nextMainState`가 반환됩니다.
|
|
310
|
-
|
|
311
|
-
기본 권장 포맷은 `context --json-compact`이며, 에이전트 hot path에 필요한 상태만 최소 계약으로 전달합니다.
|
|
312
|
-
`context --json`은 디버깅/세부 필드 확인이 필요할 때만 사용하세요.
|
|
313
|
-
|
|
314
|
-
**핵심 필드 (실사용 권장)**
|
|
315
|
-
|
|
316
|
-
- `status`/`reasonCode`: 현재 상태와 이유 코드
|
|
317
|
-
- `actionOptions[]`: `label`(`A`, `B`, `C`...) + 최소 실행 계약 (`detail`, `actionType`, `category`, `operationType`, `requiresUserCheck`, 그리고 command/instruction payload)
|
|
318
|
-
- `approvalRequest`: 승인 대기 여부와 사용자 표시 문구 (`required`, `userFacingLines`, `finalPrompt`)
|
|
319
|
-
- `requiredDocs`: 현재 액션 전에 읽어야 할 CLI 내장 문서 목록 (`id`, `command`)
|
|
320
|
-
- `checkPolicy`: 최소 승인 상태 (`token`, `validLabels`, `checkRequiredLabels`, `checkRequiredCategories`, `approvalRequired`, `contextVersion`)
|
|
321
|
-
- `agentOrchestration`: compact에서는 `subAgentHandoff`만 유지합니다. 위임 SSOT는 `matchedFeature.currentSubstate*` + `subAgentHandoff`입니다.
|
|
322
|
-
- `matchedFeature.currentSubstateId/currentSubstateOwner/currentSubstatePhase`: step 내부 실행 상태와 owner/phase 기반 오케스트레이션 판단용 필드
|
|
323
|
-
- `actions[]`: 원자 액션 원본 목록은 상세 `context --json`에서 확인합니다.
|
|
324
|
-
|
|
325
|
-
**고급/참고 필드 (자동화 고급 시나리오 또는 디버깅용)**
|
|
326
|
-
|
|
327
|
-
- `selectionFallback`: 자동 감지 실패 시 사용된 폴백 (`none` | `open_features` | `all_features` | `done_features`) - compact에서는 비-hot-path 상태에서만 노출될 수 있음
|
|
328
|
-
- `primaryActionLabel`/`workflowPolicy`/`taskCommitGatePolicy`/`prePrReviewPolicy`: 상세 `context --json`에서 확인하는 디버깅/정책 필드
|
|
329
|
-
|
|
330
|
-
오류 응답(`status: "error"`)에는 `reasonCode`와 `suggestions`(라벨형 다음 동작: `A/B/C`)가 포함됩니다. (예: `INVALID_APPROVAL`, `CONTEXT_STALE`, `EXECUTION_FAILED`, `EXECUTION_NOT_COMMAND`)
|
|
331
|
-
|
|
332
|
-
### CLI 내장 문서 조회
|
|
333
|
-
|
|
334
|
-
`agents.md`를 프로젝트에 복구하지 않는 환경에서는 아래 명령으로 내장 가이드를 직접 조회할 수 있습니다.
|
|
335
|
-
`docs get create-issue|issue-doc|create-pr|pr-doc --json` 응답에는 `contract`(필수 섹션/아티팩트 규칙)도 포함됩니다.
|
|
336
|
-
|
|
337
|
-
```bash
|
|
338
|
-
# 조회 가능한 내장 문서 목록
|
|
339
|
-
npx lee-spec-kit docs list --json
|
|
340
|
-
|
|
341
|
-
# 루트 가이드
|
|
342
|
-
npx lee-spec-kit docs get agents --json
|
|
343
|
-
|
|
344
|
-
# 이슈/PR 절차 + 템플릿
|
|
345
|
-
npx lee-spec-kit docs get create-issue --json
|
|
346
|
-
npx lee-spec-kit docs get issue-doc --json
|
|
347
|
-
npx lee-spec-kit docs get create-pr --json
|
|
348
|
-
npx lee-spec-kit docs get pr-doc --json
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
### View 대시보드
|
|
352
|
-
|
|
353
|
-
```bash
|
|
354
|
-
npx lee-spec-kit view
|
|
355
|
-
npx lee-spec-kit view F001
|
|
356
|
-
npx lee-spec-kit view --all
|
|
357
|
-
npx lee-spec-kit view --json
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
**옵션:**
|
|
361
|
-
|
|
362
|
-
| 옵션 | 설명 |
|
|
363
|
-
| --------------- | ----------------------------------------------- |
|
|
364
|
-
| `--json` | 에이전트용 JSON 출력 |
|
|
365
|
-
| `--component <id>` | multi에서 대상 컴포넌트 지정 (예: `app`, `api`, `worker`) |
|
|
366
|
-
| `--all` | 자동 감지 실패 시 완료된 Feature까지 포함해서 표시 |
|
|
367
|
-
| `--done` | 완료(workflow-done) Feature만 표시 |
|
|
368
|
-
|
|
369
|
-
### Flow 오케스트레이션
|
|
370
|
-
|
|
371
|
-
```bash
|
|
372
|
-
# 워크플로우 요약 (context + status + doctor)
|
|
373
|
-
npx lee-spec-kit flow
|
|
374
|
-
|
|
375
|
-
# 승인 + 실행 (에이전트 기본 실행 경로)
|
|
376
|
-
npx lee-spec-kit flow F001 --approve A --execute
|
|
377
|
-
|
|
378
|
-
# 자동 진행: 특정 category가 나오면 멈추고 사용자 승인 대기
|
|
379
|
-
npx lee-spec-kit flow F004 --auto-until-category pr_create,code_review,pr_status_update
|
|
380
|
-
|
|
381
|
-
# 자동 진행: preset 사용
|
|
382
|
-
npx lee-spec-kit flow F004 --auto-preset pr-handoff
|
|
383
|
-
|
|
384
|
-
# 자동 진행 + 새 요청 선반영(user_request_replan 우선 실행)
|
|
385
|
-
npx lee-spec-kit flow F004 --request "issue 004를 F004로 승격시켜서 진행해" --auto-until-category pr_create,code_review,pr_status_update
|
|
386
|
-
|
|
387
|
-
# 기본 preset 설정 시 더 짧게 실행 가능
|
|
388
|
-
npx lee-spec-kit flow F004 --request "issue 004를 F004로 승격시켜서 진행해"
|
|
389
|
-
|
|
390
|
-
# 장시간 자동 진행: run 체크포인트 생성 + 재개
|
|
391
|
-
npx lee-spec-kit flow F004 --auto-until-category pr_create,code_review,pr_status_update --start-auto --json-compact
|
|
392
|
-
npx lee-spec-kit flow --resume <RUN_ID> --json-compact
|
|
393
|
-
|
|
394
|
-
# 에이전트 파이프라인용 JSON
|
|
395
|
-
npx lee-spec-kit flow --json
|
|
396
|
-
npx lee-spec-kit flow --json-compact
|
|
397
|
-
|
|
398
|
-
# 엄격 검사(선택)
|
|
399
|
-
npx lee-spec-kit flow --strict
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
**옵션:**
|
|
403
|
-
|
|
404
|
-
| 옵션 | 설명 |
|
|
405
|
-
| ------------------ | ---- |
|
|
406
|
-
| `--json` | 에이전트용 JSON 출력 |
|
|
407
|
-
| `--json-compact` | 에이전트용 압축 JSON 출력 (`--json` 포함, 중복 필드 최소화) |
|
|
408
|
-
| `--component <id>` | multi에서 대상 컴포넌트 지정 (예: `app`, `api`, `worker`) |
|
|
409
|
-
| `--all` | 자동 감지 실패 시 완료된 Feature까지 포함해서 표시 |
|
|
410
|
-
| `--done` | 완료(workflow-done) Feature만 표시 |
|
|
411
|
-
| `--request <text>` | auto 모드에서 새 사용자 요청을 먼저 반영 (`user_request_replan` 라벨 자동 선택) |
|
|
412
|
-
| `--auto-preset <name>` | 이름 기반 auto preset 사용 (기본 제공: `pr-handoff`) |
|
|
413
|
-
| `--auto-until-category <categories>` | command 액션을 자동 실행하다가 지정 category 중 하나가 나오면 중지 (쉼표 구분) |
|
|
414
|
-
| `--start-auto` | auto 실행 체크포인트(run id) 저장 후 JSON에 재개 정보(`autoRun.run`)를 함께 출력 |
|
|
415
|
-
| `--resume <run-id>` | 저장된 auto 실행 체크포인트를 run id로 재개 |
|
|
416
|
-
| `--approve <reply>`| context 라벨 승인 응답 전달 (예: `A`, `A OK`, `A 진행해`) |
|
|
417
|
-
| `--execute` | 승인한 옵션이 command일 때 실행 (`requiresUserCheck=true`면 티켓 연동, 아니면 티켓 없이 실행) |
|
|
418
|
-
| `--execute-strict` | `--execute`와 함께 사용 시 instruction-only 옵션이면 실패 |
|
|
419
|
-
| `--strict` | `status --strict`, `doctor --strict`까지 함께 검사 |
|
|
420
|
-
|
|
421
|
-
자동 게이트 모드 규칙:
|
|
422
|
-
- auto 모드(`--auto-until-category`/`--auto-preset`) 사용 시 `<feature-name>`은 필수입니다. (예: `F004`)
|
|
423
|
-
- auto 모드(`--auto-until-category`/`--auto-preset`)는 `--approve`, `--execute`와 함께 사용할 수 없습니다.
|
|
424
|
-
- `--request`는 auto 모드와 함께 사용해야 합니다.
|
|
425
|
-
- 예외적으로 `workflow.auto.defaultPreset`이 설정되어 있으면 `--request`만으로도 auto 모드가 활성화됩니다.
|
|
426
|
-
- `--resume <run-id>`는 `<feature-name>`, `--component`, `--all`, `--done`, `--auto-*`, `--request`와 함께 사용할 수 없습니다. (체크포인트에 저장된 설정을 사용)
|
|
427
|
-
- 자동 진행은 지정한 category가 등장하면 `gate_reached`로 멈추고, `autoRun.gate.userFacingLines`를 그대로 출력합니다. (이 값은 해당 단계의 `approvalRequest.userFacingLines`를 flow 결과에 복사한 것입니다.)
|
|
428
|
-
- `context --json` / `--json-compact`의 `autoRun.available`는 "지금 바로 실행 가능한 auto-run"만 의미합니다. 설정상 auto-run 대상이어도 현재 단계가 instruction-only이면 `autoRun.available=false`, `autoRun.policyEligible=true`, `autoRun.executableNow=false`, `autoRun.manualBoundary`로 표시됩니다.
|
|
429
|
-
- 현재 액션이 instruction-only라 command 자동 실행이 불가능하면 `AUTO_MANUAL_REQUIRED`로 멈출 수 있습니다. (CLI 오류가 아니라 자동화 경계 도달 상태)
|
|
430
|
-
- 진행 정체(동일 context/action 반복)가 감지되면 `AUTO_NO_PROGRESS`로 중단됩니다.
|
|
431
|
-
- JSON 모드에서는 `autoRun.status`, `autoRun.reasonCode`, `autoRun.gate`, `autoRun.manual`, `autoRun.resume`를 확인하세요.
|
|
432
|
-
- 상세 `flow --json`은 `autoRun.executions` 배열을 유지합니다.
|
|
433
|
-
- 압축 `flow --json-compact`는 `autoRun.executionCount`, `autoRun.lastExecution`만 유지합니다.
|
|
434
|
-
- JSON `agentOrchestration`과 `matchedFeature.currentSubstate*`로 메인/서브 에이전트 역할 및 중단/보고 조건을 확인할 수 있습니다.
|
|
435
|
-
- 위임 판단은 `matchedFeature.currentSubstateOwner`와 `subAgentHandoff`를 우선 사용하세요. compact는 `subAgentHandoff`만 유지하고, 상세 `--json`/`flow --json`이 추가 오케스트레이션 메타데이터를 제공합니다.
|
|
436
|
-
- `--start-auto`를 사용하면 JSON `autoRun.run`에 `runId`, `status`, `resumeCommand`가 포함됩니다.
|
|
437
|
-
|
|
438
|
-
에이전트 재개 규칙(권장):
|
|
439
|
-
- `flow --json-compact`(또는 `flow --json`) 결과에 `autoRun.enabled=true`가 있으면, 중단/압축 후에도 `autoRun.resume.flowCommand`를 그대로 재실행해 이어갑니다.
|
|
440
|
-
- 재개 전 현재 지점 확인이 필요하면 `autoRun.resume.contextCommand`를 먼저 실행합니다.
|
|
441
|
-
- `context --json-compact`(또는 `context --json`) 확인 결과 `approvalRequest.required=true`면 즉시 멈추고 사용자에게 보고합니다.
|
|
442
|
-
- `--start-auto`를 사용하는 경우에는 `autoRun.run.resumeCommand`(`flow --resume <runId>`)를 우선 재개 경로로 사용합니다.
|
|
443
|
-
|
|
444
|
-
### GitHub helper
|
|
445
|
-
|
|
446
|
-
```bash
|
|
447
|
-
# 선택된 Feature 기준 Issue 본문 생성
|
|
448
|
-
npx lee-spec-kit github issue F001
|
|
449
|
-
|
|
450
|
-
# Issue 본문 생성 + 실제 Issue 생성
|
|
451
|
-
npx lee-spec-kit github issue F001 --create --confirm OK --labels enhancement,frontend
|
|
452
|
-
|
|
453
|
-
# PR 본문 생성
|
|
454
|
-
npx lee-spec-kit github pr F001
|
|
455
|
-
|
|
456
|
-
# PR 본문 생성 (스크린샷/Mermaid 섹션 강제 포함)
|
|
457
|
-
npx lee-spec-kit github pr F001 --screenshots on --mermaid on
|
|
458
|
-
|
|
459
|
-
# PR 본문 생성 + PR 생성 + tasks.md 메타데이터 동기화 + merge 재시도
|
|
460
|
-
npx lee-spec-kit github pr F001 --create --merge --confirm OK --labels enhancement,frontend
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
핵심 동작:
|
|
464
|
-
- Issue/PR helper는 필수 섹션과 관련 문서 경로를 검증합니다.
|
|
465
|
-
- `--json` 출력에는 `body`(본문 문자열)와 `bodyFile`(파일 경로)가 함께 제공됩니다.
|
|
466
|
-
- `--labels`를 생략하면 기본값 `enhancement`를 사용합니다. 값을 직접 줄 때는 비어 있으면 안 됩니다.
|
|
467
|
-
- `--create`/`--merge`는 원격 작업이므로 `--confirm OK`가 필요합니다.
|
|
468
|
-
- PR helper는 기본적으로 `tasks.md`의 `PR`/`PR Status`를 동기화합니다. (`--no-sync-tasks`로 비활성화)
|
|
469
|
-
- PR helper의 아티팩트 섹션은 `--screenshots (auto|on|off)`, `--mermaid (auto|on|off)`로 제어할 수 있습니다.
|
|
470
|
-
- merge 시 head 브랜치가 뒤쳐진 경우 fetch/rebase/force-push 후 재시도합니다.
|
|
471
|
-
|
|
472
|
-
### 상태 확인
|
|
473
|
-
|
|
474
|
-
```bash
|
|
475
|
-
# 터미널에 출력
|
|
476
|
-
npx lee-spec-kit status
|
|
111
|
+
## Docs
|
|
477
112
|
|
|
478
|
-
|
|
479
|
-
|
|
113
|
+
- [Public CLI Reference](./docs/reference/public-cli.md)
|
|
114
|
+
- [Agent CLI Reference](./docs/reference/agent-cli.md)
|
|
115
|
+
- [Internal CLI Reference](./docs/reference/internal-cli.md)
|
|
116
|
+
- [Reference Index](./docs/reference/README.md)
|
|
480
117
|
|
|
481
|
-
|
|
482
|
-
npx lee-spec-kit status --write
|
|
118
|
+
## License
|
|
483
119
|
|
|
484
|
-
|
|
485
|
-
npx lee-spec-kit status --strict
|
|
486
|
-
```
|
|
487
|
-
|
|
488
|
-
**옵션:**
|
|
489
|
-
|
|
490
|
-
| 옵션 | 설명 |
|
|
491
|
-
| -------------- | --------------------------------------------- |
|
|
492
|
-
| `--json` | 에이전트용 JSON 출력 |
|
|
493
|
-
| `-w, --write` | `features/status.md` 파일 생성 |
|
|
494
|
-
| `-s, --strict` | 중복/누락 Feature ID 발견 시 종료 코드 1 반환 |
|
|
495
|
-
|
|
496
|
-
상태값은 구현 완료와 워크플로우 완료를 구분합니다.
|
|
497
|
-
- `DONE`: 태스크는 모두 완료됐지만 워크플로우 요구사항이 완전히 충족되진 않음
|
|
498
|
-
- `WORKFLOW_DONE`: 구현 + 워크플로우 요구사항까지 모두 충족
|
|
499
|
-
|
|
500
|
-
### PRD 요구사항 추적
|
|
501
|
-
|
|
502
|
-
PRD 요구사항 ID(`PRD-FR-001` 등)와 Feature `tasks.md` 태그(`[PRD-FR-001]`)를 기반으로 PRD 커버리지를 집계합니다.
|
|
503
|
-
|
|
504
|
-
SSOT(단일 기준) 권장:
|
|
505
|
-
- PRD(`docs/prd/`): 요구사항 SSOT (ID 안정성 유지)
|
|
506
|
-
- Ideas(`docs/ideas/`): Feature 전 단계 (상단에 `PRD Refs` 기록)
|
|
507
|
-
- Features(`docs/features/`): 구현/진행 SSOT (`spec.md`의 `PRD Refs`, `tasks.md`의 태스크 태그, `decisions.md`의 변경 기록)
|
|
508
|
-
|
|
509
|
-
중간에 요구사항/범위가 바뀌면 최소 아래를 함께 갱신하세요:
|
|
510
|
-
- PRD 문서 + `spec.md`의 `PRD Refs` + `tasks.md`의 태스크 태그
|
|
511
|
-
- (필요 시) `plan.md`, `decisions.md`
|
|
512
|
-
|
|
513
|
-
```bash
|
|
514
|
-
# 터미널에 출력
|
|
515
|
-
npx lee-spec-kit requirements
|
|
516
|
-
|
|
517
|
-
# alias
|
|
518
|
-
npx lee-spec-kit prd
|
|
519
|
-
|
|
520
|
-
# 에이전트용 JSON 출력
|
|
521
|
-
npx lee-spec-kit requirements --json
|
|
522
|
-
|
|
523
|
-
# 파일로 저장 (docs/prd/status.md)
|
|
524
|
-
npx lee-spec-kit requirements --write
|
|
525
|
-
|
|
526
|
-
# 이슈가 있으면 종료 코드 1 (unknown refs / unmapped tasks / untracked requirements)
|
|
527
|
-
npx lee-spec-kit requirements --strict --json
|
|
528
|
-
```
|
|
529
|
-
|
|
530
|
-
### 공통 옵션
|
|
531
|
-
|
|
532
|
-
```bash
|
|
533
|
-
# 도움말 배너 숨김
|
|
534
|
-
npx lee-spec-kit --no-banner --help
|
|
535
|
-
```
|
|
536
|
-
|
|
537
|
-
또는 환경변수 `LEE_SPEC_KIT_NO_BANNER=1`로 배너 출력을 비활성화할 수 있습니다.
|
|
538
|
-
비TTY 출력(예: 에이전트/파이프라인)에서는 배너가 기본적으로 출력되지 않습니다.
|
|
539
|
-
|
|
540
|
-
### 문서 진단 (Doctor)
|
|
541
|
-
|
|
542
|
-
docs 구조 및 Feature 메타데이터(중복 ID, 누락된 파일/상태, 플레이스홀더 잔존 등)를 점검합니다.
|
|
543
|
-
|
|
544
|
-
```bash
|
|
545
|
-
# 진단 실행
|
|
546
|
-
npx lee-spec-kit doctor
|
|
547
|
-
|
|
548
|
-
# 문제 발견 시 종료 코드 1 (CI/에이전트 파이프라인용)
|
|
549
|
-
npx lee-spec-kit doctor --strict
|
|
550
|
-
|
|
551
|
-
# 에이전트용 JSON 출력
|
|
552
|
-
npx lee-spec-kit doctor --json
|
|
553
|
-
|
|
554
|
-
# 안전한 자동 수정 적용
|
|
555
|
-
npx lee-spec-kit doctor --fix
|
|
556
|
-
|
|
557
|
-
# 수정 예정 항목만 미리 확인 (파일 미변경)
|
|
558
|
-
npx lee-spec-kit doctor --fix --dry-run
|
|
559
|
-
|
|
560
|
-
# decisions.md 플레이스홀더 진단 레벨 조정
|
|
561
|
-
npx lee-spec-kit doctor --decisions-placeholders off
|
|
562
|
-
npx lee-spec-kit doctor --decisions-placeholders info
|
|
563
|
-
npx lee-spec-kit doctor --decisions-placeholders warn
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
- `--decisions-placeholders <mode>`
|
|
567
|
-
- `off`: `decisions.md` 플레이스홀더를 진단에서 제외
|
|
568
|
-
- `info` (기본): 정보 레벨로만 보고 (strict 실패 대상 아님)
|
|
569
|
-
- `warn`: 경고로 보고
|
|
570
|
-
|
|
571
|
-
### 템플릿 업데이트
|
|
572
|
-
|
|
573
|
-
기본 동작은 `docs/` 작업트리에 변경사항이 없을 때만 업데이트를 진행하며, 이 경우 변경된 파일은 확인 없이 덮어씁니다.
|
|
574
|
-
변경사항이 있는 상태에서 업데이트하려면 `--force`를 사용하세요.
|
|
575
|
-
또한 `update`는 `.lee-spec-kit.json`의 누락 필드를 현재 기본 정책으로 보강합니다. (예: `workflow.taskCommitGate: "warn"`)
|
|
576
|
-
|
|
577
|
-
```bash
|
|
578
|
-
# 전체 업데이트
|
|
579
|
-
npx lee-spec-kit update
|
|
580
|
-
|
|
581
|
-
# agents/ 폴더만 업데이트
|
|
582
|
-
npx lee-spec-kit update --agents
|
|
583
|
-
|
|
584
|
-
# agents/skills 폴더만 업데이트
|
|
585
|
-
npx lee-spec-kit update --skills
|
|
586
|
-
|
|
587
|
-
# feature-base/ 폴더만 업데이트
|
|
588
|
-
npx lee-spec-kit update --templates
|
|
589
|
-
|
|
590
|
-
# 변경사항이 있어도 강제 덮어쓰기
|
|
591
|
-
npx lee-spec-kit update --force
|
|
592
|
-
```
|
|
593
|
-
|
|
594
|
-
> `agents/skills`와 `features/feature-base`는 CLI 내장(SSOT)으로 관리됩니다.
|
|
595
|
-
> `update --skills`, `update --templates`는 기존 프로젝트의 레거시 복사본을 정리하는 용도로 동작합니다.
|
|
596
|
-
|
|
597
|
-
## 설정 파일
|
|
598
|
-
|
|
599
|
-
### `.lee-spec-kit.json`
|
|
600
|
-
|
|
601
|
-
`init`을 실행하면 문서 루트(기본: `docs/`)에 `.lee-spec-kit.json`이 생성됩니다.
|
|
602
|
-
|
|
603
|
-
```json
|
|
604
|
-
{
|
|
605
|
-
"projectName": "my-project",
|
|
606
|
-
"projectType": "single",
|
|
607
|
-
"lang": "ko",
|
|
608
|
-
"createdAt": "YYYY-MM-DD",
|
|
609
|
-
"docsRepo": "embedded",
|
|
610
|
-
"workflow": {
|
|
611
|
-
"mode": "github",
|
|
612
|
-
"codeDirtyScope": "auto",
|
|
613
|
-
"taskCommitGate": "warn",
|
|
614
|
-
"prePrReview": {
|
|
615
|
-
"skills": ["code-review-excellence"],
|
|
616
|
-
"enforceExecutionEvidence": false
|
|
617
|
-
}
|
|
618
|
-
},
|
|
619
|
-
"pr": { "screenshots": { "upload": false } },
|
|
620
|
-
"approval": { "mode": "builtin" }
|
|
621
|
-
}
|
|
622
|
-
```
|
|
623
|
-
|
|
624
|
-
| 필드 | 설명 |
|
|
625
|
-
| ------------- | --------------------------------------- |
|
|
626
|
-
| `projectName` | 프로젝트 이름 |
|
|
627
|
-
| `projectType` | `single` 또는 `multi` (`fullstack` alias 지원) |
|
|
628
|
-
| `components` | (multi만) 컴포넌트 목록 (예: `["app","api","worker"]`) |
|
|
629
|
-
| `lang` | `ko` 또는 `en` |
|
|
630
|
-
| `createdAt` | 생성 날짜 |
|
|
631
|
-
| `docsRepo` | `embedded` 또는 `standalone` |
|
|
632
|
-
| `pushDocs` | (standalone만) docs 레포를 별도 Git으로 관리/푸시할지 여부 |
|
|
633
|
-
| `docsRemote` | (standalone+pushDocs) docs 레포 remote URL |
|
|
634
|
-
| `projectRoot` | (standalone만) 프로젝트 레포지토리 경로 (single: string, multi: `{ [component]: path }`) |
|
|
635
|
-
| `workflow` | (선택) 워크플로우 요구사항 정책 (`github`/`local`, `codeDirtyScope`, `taskCommitGate`, `prePrReview`) |
|
|
636
|
-
| `pr` | (선택) PR 결과물 정책 (예: 스크린샷 업로드 여부) |
|
|
637
|
-
| `approval` | (선택) `context` 출력의 `[확인 필요]`/`requiresUserCheck` 정책 오버라이드 (자동화/반자동용) |
|
|
638
|
-
|
|
639
|
-
> `docsRepo: "standalone"`을 선택하면 `pushDocs`, `docsRemote`, `projectRoot`가 추가됩니다.
|
|
640
|
-
|
|
641
|
-
> 어디서 실행하든 설정을 찾을 수 있도록, CLI는 현재 디렉토리에서 상위로 올라가며 `.lee-spec-kit.json` 또는 `docs/.lee-spec-kit.json`을 탐색합니다.
|
|
642
|
-
> standalone 환경에서 docs 레포 바깥(예: 프로젝트 레포)에서 실행해야 한다면 `LEE_SPEC_KIT_DOCS_DIR`에 docs 레포 경로를 지정할 수 있습니다.
|
|
643
|
-
|
|
644
|
-
### approval (사용자 확인 정책)
|
|
645
|
-
|
|
646
|
-
`approval`은 `context`가 출력하는 다음 값에만 영향을 줍니다:
|
|
647
|
-
|
|
648
|
-
- 텍스트 출력의 `[확인 필요]` 표시
|
|
649
|
-
- `context --json-compact`의 `actionOptions[].requiresUserCheck` (`--json`에서는 `actions[].requiresUserCheck`)
|
|
650
|
-
- `checkPolicy.token` (`context --json-compact`/`--json`): 승인 토큰 형식 (`<LABEL>`)
|
|
651
|
-
- `checkPolicy.validLabels`: 현재 선택 가능한 라벨 목록 (`A`, `B`, `C`...)
|
|
652
|
-
- `checkPolicy.checkRequiredLabels` / `checkPolicy.checkRequiredCategories`: 현재 승인 필수 라벨/카테고리
|
|
653
|
-
- `checkPolicy.approvalRequired`: 현재 승인 대기 여부
|
|
654
|
-
- `checkPolicy.contextVersion`: stale context 검증용 스냅샷 해시
|
|
655
|
-
- `checkPolicy.acceptedTokens`, `tokenPattern`, `activeCategories`, `knownCategories`, `uncategorizedLabels`, `categoryPolicyGuidance`, `requireExplanationBeforeApproval`, `requiredExplanationFields`는 상세 `context --json`에서 확인합니다.
|
|
656
|
-
|
|
657
|
-
> 실제 명령 실행을 강제/차단하는 기능은 아닙니다. (에이전트가 참고하도록 신호를 제공)
|
|
658
|
-
> 기존 설정에 `approval`이 없으면 `builtin`으로 동작합니다. (마이그레이션 불필요)
|
|
659
|
-
> `requiresUserCheck: true`인 액션은 에이전트가 사용자로부터 **정확히 `<라벨>` 또는 `<라벨> OK` 응답(예: `A`, `A OK`)**을 받은 뒤 진행하는 것을 권장합니다.
|
|
660
|
-
|
|
661
|
-
### workflow (완료 조건 정책)
|
|
662
|
-
|
|
663
|
-
- `workflow.mode: "github"` (기본): Issue/브랜치/PR/리뷰 단계를 포함한 전체 워크플로우를 완료 조건으로 사용
|
|
664
|
-
- `workflow.mode: "local"`: 로컬 중심 워크플로우로 동작하며 Issue/브랜치/PR/리뷰 단계를 필수로 요구하지 않음
|
|
665
|
-
- local 모드로 생성한 Feature 템플릿은 기본적으로 Issue/PR 중심 섹션을 축소합니다.
|
|
666
|
-
- `workflow.codeDirtyScope`:
|
|
667
|
-
- `repo`: 프로젝트 레포 전체 변경으로 코드 미커밋 여부를 판정
|
|
668
|
-
- `component`: 현재 Feature 컴포넌트 경로 변경만 판정 (multi 권장)
|
|
669
|
-
- `auto`: `single => repo`, `multi => component`
|
|
670
|
-
- `workflow.componentPaths`(선택): component 판정 경로를 컴포넌트별로 명시 (예: `"web": ["apps/web", "packages/web-ui"]`)
|
|
671
|
-
- 하위 호환: 값이 없으면 기존 동작인 `repo`로 처리
|
|
672
|
-
- `workflow.taskCommitGate`:
|
|
673
|
-
- `strict`: 최근 `tasks.md` 커밋에서 DONE 전환이 2개 이상이면 차단
|
|
674
|
-
- `warn`: 점검 실패 시 경고만 표시하고 진행 허용
|
|
675
|
-
- `off`: 점검 비활성화
|
|
676
|
-
- 기본값: `warn` (값이 없으면 `warn`)
|
|
677
|
-
- `workflow.prePrReview`:
|
|
678
|
-
- `enabled` (선택): pre-PR 리뷰 단계를 강제할지 여부 (기본: `requirePr`와 동일)
|
|
679
|
-
- `skills` (선택): 우선순위 스킬 목록 (기본: `["code-review-excellence"]`)
|
|
680
|
-
- `fallback` (선택): 기본 베이스라인 정책 (기본: `"builtin-checklist"`)
|
|
681
|
-
- 상세 기준은 `docs get create-pr --json`의 `Pre-PR 기본 체크리스트` 섹션을 단일 기준으로 사용
|
|
682
|
-
- `evidenceMode` (선택): Evidence 검증 방식 (`"path_required"` | `"any"`, 기본: `"path_required"`)
|
|
683
|
-
- `path_required`: 실제 존재하는 로컬 경로만 인정
|
|
684
|
-
- `decisionEnum` (선택): 허용 Decision 값 목록 (기본: `["approve","changes_requested","blocked"]`)
|
|
685
|
-
- PR 단계로 진행하려면 최종 Decision이 `approve`여야 함
|
|
686
|
-
- `enforceExecutionEvidence` (선택): 리뷰 에이전트 실제 실행 증거 강제 여부 (기본: `false`)
|
|
687
|
-
- `true`일 때 `pre-pr-review`는 `--evidence`와 비어있지 않은 `commandsExecuted`를 요구
|
|
688
|
-
- `false`일 때도 구현 품질 리뷰 필드는 필수이며, `commandsExecuted`는 선택적 보조 evidence입니다
|
|
689
|
-
- `executionCommandPrefixes` (선택): 실행 증거를 강제할 때 `commandsExecuted`와 매칭할 명령 prefix 목록 (기본: `[]`)
|
|
690
|
-
- 비어있지 않으면 실행 명령 중 최소 1개가 해당 prefix로 시작해야 함
|
|
691
|
-
- `workflow.auto`:
|
|
692
|
-
- `defaultPreset` (선택): `flow --request "<요청>"` 실행 시 기본으로 사용할 auto preset 이름 (기본: `"pr-handoff"`)
|
|
693
|
-
- `defaultUntilCategories` (선택): 기본 gate category 목록 (설정 시 `defaultPreset`보다 우선)
|
|
694
|
-
- `presets` (선택): 사용자 정의 preset 맵
|
|
695
|
-
- 예: `"my-handoff": ["pr_create", "code_review"]`
|
|
696
|
-
|
|
697
|
-
예시:
|
|
698
|
-
|
|
699
|
-
```json
|
|
700
|
-
{
|
|
701
|
-
"workflow": {
|
|
702
|
-
"mode": "github",
|
|
703
|
-
"codeDirtyScope": "auto",
|
|
704
|
-
"taskCommitGate": "warn",
|
|
705
|
-
"auto": {
|
|
706
|
-
"defaultPreset": "pr-handoff",
|
|
707
|
-
"presets": {
|
|
708
|
-
"my-handoff": ["pr_create", "code_review", "pr_status_update"]
|
|
709
|
-
}
|
|
710
|
-
},
|
|
711
|
-
"prePrReview": {
|
|
712
|
-
"skills": ["code-review-excellence"],
|
|
713
|
-
"fallback": "builtin-checklist",
|
|
714
|
-
"evidenceMode": "path_required",
|
|
715
|
-
"decisionEnum": ["approve", "changes_requested", "blocked"],
|
|
716
|
-
"enforceExecutionEvidence": false,
|
|
717
|
-
"executionCommandPrefixes": []
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
```
|
|
722
|
-
|
|
723
|
-
Pre-PR 실행 게이트 리스크와 완화:
|
|
724
|
-
- 처리량 병목: 타임아웃/재시도와 maintainer 수동 우회 경로를 함께 둡니다.
|
|
725
|
-
- 비용 증가: 변경 파일/규모 기준으로 리뷰 에이전트 실행 대상을 제한합니다.
|
|
726
|
-
- 품질 착시: 자동 로그가 있어도 주기적 수동 샘플 리뷰를 유지합니다.
|
|
727
|
-
- 오탐/노이즈: high severity만 차단 게이트로 쓰고 나머지는 코멘트로 처리합니다.
|
|
728
|
-
- 도구 종속: 산출물 JSON 스키마를 고정해 실행기를 교체 가능하게 유지합니다.
|
|
729
|
-
|
|
730
|
-
#### 모드
|
|
731
|
-
|
|
732
|
-
- `builtin` (기본): 코드에 내장된 `requiresUserCheck`를 그대로 사용
|
|
733
|
-
- `category` (권장): `actionOptions[].category` 기준으로 확인 정책을 제어 (`--json`에서는 `actions[].category`)
|
|
734
|
-
- `steps`: step 번호 기준(변경에 취약하므로 권장하지 않음)
|
|
735
|
-
|
|
736
|
-
#### 설정 필드
|
|
737
|
-
|
|
738
|
-
- `default` (`category`만): `keep` | `require` | `skip` (기본: `keep`)
|
|
739
|
-
- `requireCheckCategories` (`category`만): 확인을 **항상** 요구할 category 목록 (예: `["pr_create"]`, `["*"]`)
|
|
740
|
-
- `skipCheckCategories` (`category`만): 확인을 **절대** 요구하지 않을 category 목록 (예: `["docs_commit"]`, `["*"]`)
|
|
741
|
-
- `requireCheckSteps` (`steps`만): 확인이 필요한 step 번호 목록 (예: `[3, 5, 12]`)
|
|
742
|
-
- `taskExecuteCheck` (선택): 레거시 `task_execute` 시작/완료 phase 호환용 확인 정책 (`both` | `start_only`, 기본: `both`)
|
|
743
|
-
- `both`: 기존 `task_execute` 호환 경로에서 TODO→DOING, DOING→DONE 모두 승인 필요
|
|
744
|
-
- `start_only`: 기존 `task_execute` 호환 경로에서 TODO→DOING만 승인 필요, DOING→DONE은 기본 승인 생략
|
|
745
|
-
|
|
746
|
-
#### category 예시
|
|
747
|
-
|
|
748
|
-
```json
|
|
749
|
-
{
|
|
750
|
-
"approval": { "mode": "category", "default": "skip" }
|
|
751
|
-
}
|
|
752
|
-
```
|
|
753
|
-
|
|
754
|
-
```json
|
|
755
|
-
{
|
|
756
|
-
"approval": {
|
|
757
|
-
"mode": "category",
|
|
758
|
-
"default": "keep",
|
|
759
|
-
"skipCheckCategories": ["docs_commit"]
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
```
|
|
763
|
-
|
|
764
|
-
> 사용 가능한 `category` 값은 `context --json`의 `checkPolicy.activeCategories`/`checkPolicy.knownCategories`, 또는 `actionOptions[].category`에서 확인하세요. compact는 hot path 최소 계약만 유지합니다.
|
|
765
|
-
|
|
766
|
-
### pr (PR 결과물 정책)
|
|
767
|
-
|
|
768
|
-
- `pr.screenshots.upload` (기본: `false`): `true`면 스크린샷을 업로드(예: GitHub Release assets)하고 PR 본문에 URL을 포함할 수 있습니다. `false`면 업로드/URL 포함을 하지 않으며 PR 본문에서도 스크린샷 섹션을 만들지 않는 것을 권장합니다.
|
|
769
|
-
|
|
770
|
-
### Standalone 프로젝트 설정 예시
|
|
771
|
-
|
|
772
|
-
**Single 프로젝트:**
|
|
773
|
-
|
|
774
|
-
```json
|
|
775
|
-
{
|
|
776
|
-
"projectName": "my-project",
|
|
777
|
-
"projectType": "single",
|
|
778
|
-
"lang": "ko",
|
|
779
|
-
"createdAt": "YYYY-MM-DD",
|
|
780
|
-
"docsRepo": "standalone",
|
|
781
|
-
"pushDocs": false,
|
|
782
|
-
"projectRoot": "/path/to/my-project"
|
|
783
|
-
}
|
|
784
|
-
```
|
|
785
|
-
|
|
786
|
-
**Multi 프로젝트:**
|
|
787
|
-
|
|
788
|
-
```json
|
|
789
|
-
{
|
|
790
|
-
"projectName": "my-project",
|
|
791
|
-
"projectType": "multi",
|
|
792
|
-
"lang": "ko",
|
|
793
|
-
"createdAt": "YYYY-MM-DD",
|
|
794
|
-
"docsRepo": "standalone",
|
|
795
|
-
"pushDocs": false,
|
|
796
|
-
"projectRoot": {
|
|
797
|
-
"app": "/path/to/app",
|
|
798
|
-
"api": "/path/to/api"
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
```
|
|
802
|
-
|
|
803
|
-
### 설정 확인 및 수정
|
|
804
|
-
|
|
805
|
-
```bash
|
|
806
|
-
# 현재 설정 확인
|
|
807
|
-
npx lee-spec-kit config
|
|
808
|
-
|
|
809
|
-
# 여러 docs 경로가 있을 때 대상 지정
|
|
810
|
-
npx lee-spec-kit config --dir ./docs2
|
|
811
|
-
|
|
812
|
-
# projectRoot 수정 (Single)
|
|
813
|
-
npx lee-spec-kit config --project-root /new/path
|
|
814
|
-
npx lee-spec-kit config --dir ./docs2 --project-root /new/path
|
|
815
|
-
|
|
816
|
-
# projectRoot 수정 (Multi)
|
|
817
|
-
npx lee-spec-kit config --project-root /new/app/path --component app
|
|
818
|
-
npx lee-spec-kit config --project-root /new/api/path --component api
|
|
819
|
-
npx lee-spec-kit config --project-root /new/worker/path --component worker
|
|
820
|
-
|
|
821
|
-
# 비대화형 모드 (필수 옵션 누락 시 즉시 실패)
|
|
822
|
-
npx lee-spec-kit config --project-root /new/app/path --component app --non-interactive
|
|
823
|
-
```
|
|
824
|
-
|
|
825
|
-
**옵션:**
|
|
826
|
-
|
|
827
|
-
| 옵션 | 설명 |
|
|
828
|
-
| -------------------- | ---- |
|
|
829
|
-
| `--dir <dir>` | 대상 docs 디렉터리 또는 프로젝트 경로 지정 |
|
|
830
|
-
| `--project-root <path>` | projectRoot 경로 설정 |
|
|
831
|
-
| `--component <id>` | multi 대상 컴포넌트 |
|
|
832
|
-
| `--non-interactive` | 사용자 입력이 필요하면 프롬프트 대신 즉시 실패 |
|
|
833
|
-
|
|
834
|
-
> `--non-interactive`는 `init`, `feature`, `config`에서 지원됩니다.
|
|
835
|
-
> 오류 시 출력되는 `[REASON_CODE]` 형식(`PROMPT_BLOCKED`, `CONFIG_NOT_FOUND` 등)은 자동화 분기용으로 사용할 수 있습니다.
|
|
836
|
-
> 또한 텍스트 모드 오류에는 `👉 Next Options (Error)`로 `A/B/C` 제안이 함께 출력됩니다.
|
|
837
|
-
|
|
838
|
-
## 오류 코드
|
|
839
|
-
|
|
840
|
-
- 이 CLI는 자동화 분기를 위해 에러에 `reasonCode`(JSON) 또는 `[REASON_CODE]`(텍스트)를 제공합니다.
|
|
841
|
-
- 오류 시 다음 동작 제안이 `A/B/C` 라벨로 함께 제공됩니다. (JSON: `suggestions`, 텍스트: `👉 Next Options (Error)`)
|
|
842
|
-
- 대표 코드:
|
|
843
|
-
- `PROMPT_BLOCKED`: 비대화형 모드에서 사용자 입력이 필요함
|
|
844
|
-
- `CONFIG_NOT_FOUND`: `.lee-spec-kit.json`을 찾지 못함
|
|
845
|
-
- `DOCS_NOT_FOUND`: docs 구조를 찾지 못함
|
|
846
|
-
- `LOCK_WAIT_TIMEOUT` / `LOCK_ACQUIRE_TIMEOUT`: 락 대기/획득 타임아웃
|
|
847
|
-
- `INVALID_APPROVAL`, `CONTEXT_STALE`, `EXECUTION_FAILED`, `EXECUTION_NOT_COMMAND`: `context --approve/--execute` 흐름 오류
|
|
848
|
-
|
|
849
|
-
상세 코드 목록과 의미는 `errors.md`(한국어), `errors.en.md`(English)를 참고하세요.
|
|
850
|
-
|
|
851
|
-
## 생성되는 구조
|
|
852
|
-
|
|
853
|
-
### Multi (컴포넌트 분리)
|
|
854
|
-
|
|
855
|
-
```
|
|
856
|
-
docs/
|
|
857
|
-
├── README.md
|
|
858
|
-
├── agents/
|
|
859
|
-
│ ├── constitution.md # 프로젝트 원칙
|
|
860
|
-
│ ├── custom.md # 프로젝트별 추가 규칙
|
|
861
|
-
├── designs/ # 디자인 참고 자료
|
|
862
|
-
├── ideas/ # 아이디어/To-do (Feature 승격 전)
|
|
863
|
-
├── prd/
|
|
864
|
-
│ └── README.md
|
|
865
|
-
├── scripts/
|
|
866
|
-
│ └── README.md
|
|
867
|
-
└── features/
|
|
868
|
-
├── README.md
|
|
869
|
-
├── app/ # App Features
|
|
870
|
-
└── api/ # API Features
|
|
871
|
-
```
|
|
872
|
-
|
|
873
|
-
### Single (단일 레포)
|
|
874
|
-
|
|
875
|
-
```
|
|
876
|
-
docs/
|
|
877
|
-
├── README.md
|
|
878
|
-
├── agents/
|
|
879
|
-
│ ├── constitution.md
|
|
880
|
-
│ ├── custom.md
|
|
881
|
-
├── designs/
|
|
882
|
-
├── ideas/
|
|
883
|
-
├── prd/
|
|
884
|
-
├── scripts/
|
|
885
|
-
└── features/
|
|
886
|
-
└── F001-feature/ # 개별 기능
|
|
887
|
-
```
|
|
888
|
-
|
|
889
|
-
## Feature 워크플로우
|
|
890
|
-
|
|
891
|
-
```mermaid
|
|
892
|
-
flowchart LR
|
|
893
|
-
A[spec.md] --> B[사용자 리뷰]
|
|
894
|
-
B --> C[plan.md]
|
|
895
|
-
C --> D[tasks.md]
|
|
896
|
-
D --> E[구현]
|
|
897
|
-
E --> F[decisions.md]
|
|
898
|
-
```
|
|
899
|
-
|
|
900
|
-
1. **spec.md 작성** - 무엇을, 왜 만드는지 정의
|
|
901
|
-
2. **사용자 리뷰 요청** - 스펙 검토 및 승인
|
|
902
|
-
3. **plan.md 작성** - 어떻게 만드는지 (기술 스택, 설계)
|
|
903
|
-
4. **tasks.md 작성** - 태스크 분해 및 체크리스트
|
|
904
|
-
5. **decisions.md** - 기술 결정 기록 (ADR)
|
|
905
|
-
|
|
906
|
-
| 프로젝트 타입 | 설명 |
|
|
907
|
-
| ------------- | -------------------------------------------- |
|
|
908
|
-
| `single` | 단일 레포 프로젝트 (모노레포 또는 단일 스택) |
|
|
909
|
-
| `multi` | 멀티 컴포넌트 프로젝트 (예: app/api/worker) |
|
|
910
|
-
| `fullstack` | `multi`의 하위호환 alias |
|
|
911
|
-
|
|
912
|
-
## 문제 해결
|
|
913
|
-
|
|
914
|
-
<details>
|
|
915
|
-
<summary><strong>init 명령어가 실패합니다</strong></summary>
|
|
916
|
-
|
|
917
|
-
- Node.js 18 이상이 설치되어 있는지 확인하세요
|
|
918
|
-
- `npx` 캐시 문제일 수 있습니다: `npx clear-npx-cache` 후 재시도
|
|
919
|
-
|
|
920
|
-
</details>
|
|
921
|
-
|
|
922
|
-
<details>
|
|
923
|
-
<summary><strong>feature 명령어가 설정 파일을 찾지 못합니다</strong></summary>
|
|
924
|
-
|
|
925
|
-
- `docs/` 폴더에 `.lee-spec-kit.json` 파일이 있는지 확인하세요
|
|
926
|
-
- `init` 명령어를 먼저 실행했는지 확인하세요
|
|
927
|
-
- embedded 모드라면 프로젝트 루트/하위 어디서 실행해도 상위 디렉토리 탐색으로 설정을 찾습니다.
|
|
928
|
-
- standalone 모드에서 docs 레포 밖에서 실행 중이면, docs 레포로 이동하거나 `LEE_SPEC_KIT_DOCS_DIR=/path/to/docs`를 설정하세요.
|
|
929
|
-
|
|
930
|
-
</details>
|
|
931
|
-
|
|
932
|
-
<details>
|
|
933
|
-
<summary><strong>Multi 프로젝트에서 --component 옵션이 동작하지 않습니다</strong></summary>
|
|
934
|
-
|
|
935
|
-
- `.lee-spec-kit.json`의 `projectType`이 `multi`(또는 구버전 `fullstack`)인지 확인하세요
|
|
936
|
-
- `.lee-spec-kit.json`의 `components` 목록에 해당 값이 포함되어 있는지 확인하세요
|
|
937
|
-
|
|
938
|
-
</details>
|
|
939
|
-
|
|
940
|
-
## 기여하기
|
|
941
|
-
|
|
942
|
-
1. Fork → 브랜치 생성 → 개발 → Pull Request
|
|
943
|
-
|
|
944
|
-
이슈나 PR은 언제든 환영합니다!
|
|
945
|
-
|
|
946
|
-
## 라이선스
|
|
947
|
-
|
|
948
|
-
[MIT License](./LICENSE)
|
|
949
|
-
|
|
950
|
-
---
|
|
951
|
-
|
|
952
|
-
<p align="center">
|
|
953
|
-
Made with ❤️ by <a href="https://github.com/leey00nsu">leey00nsu</a>
|
|
954
|
-
</p>
|
|
120
|
+
MIT
|