@opellen/scaff 0.1.11
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.ko.md +327 -0
- package/README.md +326 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +225 -0
- package/dist/extend.d.ts +12 -0
- package/dist/extend.js +242 -0
- package/dist/hook-parser.d.ts +15 -0
- package/dist/hook-parser.js +95 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.js +20 -0
- package/dist/i18n/messages.d.ts +28 -0
- package/dist/i18n/messages.js +49 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/installer.d.ts +10 -0
- package/dist/installer.js +74 -0
- package/dist/marker.d.ts +11 -0
- package/dist/marker.js +25 -0
- package/dist/platforms/amazon-q.d.ts +2 -0
- package/dist/platforms/amazon-q.js +12 -0
- package/dist/platforms/antigravity.d.ts +2 -0
- package/dist/platforms/antigravity.js +12 -0
- package/dist/platforms/auggie.d.ts +2 -0
- package/dist/platforms/auggie.js +15 -0
- package/dist/platforms/claude.d.ts +2 -0
- package/dist/platforms/claude.js +7 -0
- package/dist/platforms/cline.d.ts +2 -0
- package/dist/platforms/cline.js +11 -0
- package/dist/platforms/codebuddy.d.ts +2 -0
- package/dist/platforms/codebuddy.js +16 -0
- package/dist/platforms/codex.d.ts +2 -0
- package/dist/platforms/codex.js +7 -0
- package/dist/platforms/continue.d.ts +2 -0
- package/dist/platforms/continue.js +16 -0
- package/dist/platforms/costrict.d.ts +2 -0
- package/dist/platforms/costrict.js +15 -0
- package/dist/platforms/crush.d.ts +2 -0
- package/dist/platforms/crush.js +19 -0
- package/dist/platforms/cursor.d.ts +2 -0
- package/dist/platforms/cursor.js +18 -0
- package/dist/platforms/factory.d.ts +2 -0
- package/dist/platforms/factory.js +15 -0
- package/dist/platforms/gemini.d.ts +2 -0
- package/dist/platforms/gemini.js +14 -0
- package/dist/platforms/github-copilot.d.ts +2 -0
- package/dist/platforms/github-copilot.js +12 -0
- package/dist/platforms/iflow.d.ts +2 -0
- package/dist/platforms/iflow.js +18 -0
- package/dist/platforms/index.d.ts +9 -0
- package/dist/platforms/index.js +57 -0
- package/dist/platforms/kilocode.d.ts +2 -0
- package/dist/platforms/kilocode.js +8 -0
- package/dist/platforms/kiro.d.ts +2 -0
- package/dist/platforms/kiro.js +12 -0
- package/dist/platforms/opencode.d.ts +2 -0
- package/dist/platforms/opencode.js +12 -0
- package/dist/platforms/pi.d.ts +2 -0
- package/dist/platforms/pi.js +12 -0
- package/dist/platforms/qoder.d.ts +2 -0
- package/dist/platforms/qoder.js +19 -0
- package/dist/platforms/qwen.d.ts +2 -0
- package/dist/platforms/qwen.js +14 -0
- package/dist/platforms/roocode.d.ts +2 -0
- package/dist/platforms/roocode.js +11 -0
- package/dist/platforms/toml.d.ts +9 -0
- package/dist/platforms/toml.js +18 -0
- package/dist/platforms/trae.d.ts +2 -0
- package/dist/platforms/trae.js +11 -0
- package/dist/platforms/types.d.ts +19 -0
- package/dist/platforms/types.js +1 -0
- package/dist/platforms/windsurf.d.ts +2 -0
- package/dist/platforms/windsurf.js +19 -0
- package/dist/platforms/yaml.d.ts +10 -0
- package/dist/platforms/yaml.js +30 -0
- package/dist/prompts/platform-select.d.ts +1 -0
- package/dist/prompts/platform-select.js +185 -0
- package/dist/skills/generate.d.ts +13 -0
- package/dist/skills/generate.js +16 -0
- package/dist/templates.d.ts +18 -0
- package/dist/templates.js +96 -0
- package/dist/ui/ascii-logo.d.ts +6 -0
- package/dist/ui/ascii-logo.js +38 -0
- package/dist/ui/colors.d.ts +2 -0
- package/dist/ui/colors.js +3 -0
- package/dist/ui/welcome.d.ts +1 -0
- package/dist/ui/welcome.js +77 -0
- package/package.json +51 -0
- package/templates/commands/context.md +93 -0
- package/templates/commands/design.md +108 -0
- package/templates/commands/go.md +56 -0
- package/templates/commands/goal.md +196 -0
- package/templates/commands/overview.md +78 -0
- package/templates/commands/recap.md +69 -0
- package/templates/commands/roadmap.md +95 -0
- package/templates/commands/scout.md +68 -0
- package/templates/commands/verify.md +112 -0
- package/templates/skills/scaff-flow/SKILL.md +107 -0
- package/templates/skills/scaff-subagent/SKILL.md +132 -0
package/README.ko.md
ADDED
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/opellen/scaff/master/assets/scaff-logo-wordmark.webp" alt="Scaff Logo" width="180"/>
|
|
3
|
+
<p><strong>목표 중심의 기민한 AI 하니스. 오직 마크다운.</strong></p>
|
|
4
|
+
<p>나와 AI가 바로 이해하는 현재 — <code>CONTEXT.md</code>, <code>GOAL.md</code>, <code>ROADMAP.md</code></p>
|
|
5
|
+
|
|
6
|
+
<p>
|
|
7
|
+
<code>CONTEXT.md</code>를 열면 <b>현재 맥락</b>이 보이고,<br/>
|
|
8
|
+
<code>GOAL.md</code>를 열면 <b>지금 할 일</b>이 보입니다.<br/>
|
|
9
|
+
<code>ROADMAP.md</code>를 열면 <b>현재 큰 그림</b>이 보입니다.
|
|
10
|
+
</p>
|
|
11
|
+
<p><strong>한국어</strong> · <a href="README.md">English</a></p>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
## 무엇인가요?
|
|
15
|
+
|
|
16
|
+
Scaff는 순수 마크다운 기반의 경량 컨텍스트 스캐폴딩입니다.
|
|
17
|
+
CLI, Hook, MCP 없이 — 마크다운 파일만으로 나와 AI가 지금 무엇을 해야 하는지 바로 알 수 있습니다.
|
|
18
|
+
|
|
19
|
+
## 무엇을 해결하나요?
|
|
20
|
+
|
|
21
|
+
**맥락 관리가 맥락보다 무겁다.**
|
|
22
|
+
기존 프레임워크들은 세션 간 맥락 유지를 CLI, Hook, MCP로 해결합니다.
|
|
23
|
+
가벼운 탐색에도 CLI가 실행되고, Hook이 매 동작에 개입하고,
|
|
24
|
+
MCP 서버가 설정되어 있으면, 사용하지 않는 세션에서도 도구 정의만으로 토큰을 소모합니다.
|
|
25
|
+
|
|
26
|
+
**지금 해야 할 것이 보이지 않는다.**
|
|
27
|
+
현재 목표가 상태 파일, 태스크 리스트, 설계 문서에 흩어져 있습니다.
|
|
28
|
+
파일 하나를 열어서 "지금 할 일"을 바로 확인할 수 없습니다.
|
|
29
|
+
|
|
30
|
+
Scaff에서는 질문 하나에 파일 하나가 답합니다.
|
|
31
|
+
지금 뭘 해야 하지? → `GOAL.md`. 이 프로젝트가 뭐지? → `CONTEXT.md`. 전체 계획은? → `ROADMAP.md`.
|
|
32
|
+
다른 곳을 뒤지지 않아도 됩니다. 도구 없이, 런타임 없이.
|
|
33
|
+
|
|
34
|
+
## 빠른 시작
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx @opellen/scaff init
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
프로젝트에 마크다운 커맨드가 설치됩니다. 이후 CLI는 필요 없습니다.
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
/scaff:scout # 세션 시작 — 이것만 기억하세요
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
새 프로젝트든 기존 코드베이스든, scout이 현재 상태를 파악하고 다음 단계를 안내합니다.
|
|
47
|
+
기존 코드가 있다면 맥락 설정(`/scaff:context init`)부터, 빈 프로젝트라면 대화를 통해 방향을 잡는 것부터 시작합니다.
|
|
48
|
+
|
|
49
|
+
대부분의 커맨드는 첫 사용 시 `init`이 자동 실행됩니다 — `/scaff:goal "목표"` 만으로 `init` 타이핑 없이 바로 동작합니다.
|
|
50
|
+
|
|
51
|
+
### 옵션
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
scaff init --docs .planning # docs/ 대신 다른 경로 사용
|
|
55
|
+
scaff init --codebase src # 코드베이스가 하위 디렉토리에 있을 때 (기본: .)
|
|
56
|
+
scaff init --tools cursor # 특정 도구용으로 설치
|
|
57
|
+
scaff init --tools cursor,windsurf # 여러 도구 동시 설치
|
|
58
|
+
scaff init --no-subagent # 서브에이전트 위임 비활성화 (기본: 활성)
|
|
59
|
+
scaff init --root path/to/proj # 다른 프로젝트 디렉토리에 설치
|
|
60
|
+
scaff init --force # 기존 파일 덮어쓰기
|
|
61
|
+
scaff init --dry-run # 설치할 파일 미리보기
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
> [!NOTE]
|
|
65
|
+
> `Claude Code`, `Cursor`, `Windsurf` 외 [20여 개 도구](docs/supported-tools.md)를 지원합니다.
|
|
66
|
+
> `Claude Code`에서 검증 완료. 나머지는 어댑터가 준비되어 있지만 실전 테스트 전입니다.
|
|
67
|
+
|
|
68
|
+
## 문서 구조
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
docs/
|
|
72
|
+
├── CONTEXT.md ← 프로젝트 맥락, 원칙, 워크플로우
|
|
73
|
+
├── GOAL.md ← 현재 목표와 체크리스트
|
|
74
|
+
├── CHECKPOINT.md ← 마지막 세션 진행 상황
|
|
75
|
+
├── DESIGN.md ← 구현 설계 (필요 시)
|
|
76
|
+
├── PLAN.md ← 구현 계획 (복잡한 태스크에서 자동 생성)
|
|
77
|
+
├── ROADMAP.md ← 마일스톤 단위 전체 계획
|
|
78
|
+
├── OVERVIEW.md ← 프로젝트 전체 조망 (필요 시)
|
|
79
|
+
└── suspended/ ← 중단된 목표
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
| 문서 | 질문 | 수명 |
|
|
83
|
+
|------|------|------|
|
|
84
|
+
| `CONTEXT.md` | 이 프로젝트는 뭐고, 어떻게 작업하지? | 프로젝트 전체 |
|
|
85
|
+
| `GOAL.md` | 지금 뭘 해야 하지? | 목표 달성까지 |
|
|
86
|
+
| `CHECKPOINT.md` | 지난 세션에서 어디까지 했지? | 세션 단위 (덮어쓰기) |
|
|
87
|
+
| `DESIGN.md` | 어떻게 구현하지? | 목표 달성까지 |
|
|
88
|
+
| `PLAN.md` | 이 태스크를 어떻게 구현하지? | 자동 생성 → 자동 아카이브 |
|
|
89
|
+
| `ROADMAP.md` | 큰 그림에서 어디에 있지? | 프로젝트 전체 |
|
|
90
|
+
| `OVERVIEW.md` | 이 프로젝트 전체를 한눈에 보면? | 프로젝트 전체 |
|
|
91
|
+
|
|
92
|
+
`GOAL.md` 하나로 시작해서 `ROADMAP.md`로 확장해도 되고, `ROADMAP.md`에서 큰 그림을 잡고 `GOAL.md`로 내려와도 됩니다. 어느 방향으로 가든 Scaff는 '지금 할 일'을 마크다운 위에 유지합니다.
|
|
93
|
+
|
|
94
|
+
<details>
|
|
95
|
+
<summary>GOAL.md 예시</summary>
|
|
96
|
+
|
|
97
|
+
```markdown
|
|
98
|
+
---
|
|
99
|
+
id: session-auth
|
|
100
|
+
goal: 인증을 JWT에서 세션 기반으로 전환
|
|
101
|
+
status: in-progress
|
|
102
|
+
started: 2026-04-04
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Tasks
|
|
106
|
+
|
|
107
|
+
- [x] 1. 세션 스토어 설정
|
|
108
|
+
- [ ] 2. 미들웨어 교체 — Step 1/2 (세션 미들웨어 구현 중)
|
|
109
|
+
- [x] 2.1. 세션 미들웨어 구현
|
|
110
|
+
- [ ] 2.2. 기존 JWT 코드 제거
|
|
111
|
+
- [ ] 3. DB 스키마 마이그레이션
|
|
112
|
+
- [ ] 4. 통합 테스트
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
</details>
|
|
116
|
+
|
|
117
|
+
<details>
|
|
118
|
+
<summary>CONTEXT.md 예시</summary>
|
|
119
|
+
|
|
120
|
+
```markdown
|
|
121
|
+
# Project Overview
|
|
122
|
+
Express + PostgreSQL 기반 REST API 서버.
|
|
123
|
+
인증은 JWT → 세션 전환 진행 중.
|
|
124
|
+
|
|
125
|
+
# Architecture
|
|
126
|
+
- src/server/ — HTTP 라우팅 (Express)
|
|
127
|
+
- src/auth/ — 인증 미들웨어
|
|
128
|
+
- src/db/ — DB 접근 계층
|
|
129
|
+
|
|
130
|
+
# Principles
|
|
131
|
+
- 마이그레이션 중 무중단 운영
|
|
132
|
+
- 기존 클라이언트 하위호환
|
|
133
|
+
|
|
134
|
+
# Resources
|
|
135
|
+
- DB: PostgreSQL 14, 마이그레이션은 prisma
|
|
136
|
+
- 인증: express-session + connect-pg-simple
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
</details>
|
|
140
|
+
|
|
141
|
+
<details>
|
|
142
|
+
<summary>ROADMAP.md 예시</summary>
|
|
143
|
+
|
|
144
|
+
```markdown
|
|
145
|
+
---
|
|
146
|
+
id: api-v2
|
|
147
|
+
title: API v2 마이그레이션
|
|
148
|
+
status: active
|
|
149
|
+
started: 2026-03-01
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
- [x] **M1: 인증 전환**
|
|
153
|
+
- [ ] **M2: Rate limiting 도입**
|
|
154
|
+
- [ ] **M3: API 버저닝**
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
</details>
|
|
158
|
+
|
|
159
|
+
## 커맨드
|
|
160
|
+
|
|
161
|
+
| 커맨드 | 설명 |
|
|
162
|
+
|--------|------|
|
|
163
|
+
| `/scaff:scout` | 세션 시작 — 문서를 읽고 현재 상태를 파악한 뒤 다음 행동을 제안 |
|
|
164
|
+
| `/scaff:go` | 목표 실행 — `GOAL.md`의 다음 태스크부터 순서대로 진행 |
|
|
165
|
+
| `/scaff:context` | `CONTEXT.md` 생성 및 동기화 |
|
|
166
|
+
| `/scaff:goal` | `GOAL.md` 관리 (init, breakdown, checkpoint, suspend, resume, archive) |
|
|
167
|
+
| `/scaff:design` | `DESIGN.md` 관리 (init, sync, archive) |
|
|
168
|
+
| `/scaff:roadmap` | `ROADMAP.md` 마일스톤 관리 (init, add, archive) |
|
|
169
|
+
| `/scaff:overview` | `OVERVIEW.md` 프로젝트 전체 조망 관리 |
|
|
170
|
+
| `/scaff:verify` | 목표, 설계, 구현의 정합성 검증 |
|
|
171
|
+
| `/scaff:recap` | 세션 마무리 — 논의된 결정을 문서에 반영 |
|
|
172
|
+
|
|
173
|
+
### 호출 방식
|
|
174
|
+
|
|
175
|
+
맥락이 명확하면 `/scaff:`를 매번 타이핑하지 않아도 됩니다 — 자연어로도 실행 가능합니다.
|
|
176
|
+
|
|
177
|
+
| 경로 | `/scaff` 필요? | 예시 |
|
|
178
|
+
|------|---------------|------|
|
|
179
|
+
| **명시적 호출** | 필요 | `/scaff goal init`, `/scaff:goal init & design init` |
|
|
180
|
+
| **직전 제안 확인** | 불필요 | AI: "`/scaff:goal init` 권장" → User: "ok" / "진행해" |
|
|
181
|
+
| **연속 맥락 서술** | 불필요 | (goal init 직후) User: "breakdown now" |
|
|
182
|
+
|
|
183
|
+
맥락이 명확하면 자연어만으로 실행됩니다. `/scaff`는 맥락이 모호할 때 쓰는 명시적 호출 수단입니다.
|
|
184
|
+
|
|
185
|
+
## 사용 흐름
|
|
186
|
+
|
|
187
|
+
### 기존 프로젝트에 적용
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
You: /scaff:scout
|
|
191
|
+
AI: 코드베이스를 확인했습니다. CONTEXT.md가 없네요.
|
|
192
|
+
`/scaff:context init`으로 프로젝트 맥락을 설정할까요?
|
|
193
|
+
|
|
194
|
+
You: /scaff:context init
|
|
195
|
+
AI: ✓ docs/CONTEXT.md 생성 완료
|
|
196
|
+
목표를 설정하려면 `/scaff:goal init`
|
|
197
|
+
|
|
198
|
+
You: /scaff:goal 인증 모듈을 JWT에서 세션 기반으로 전환
|
|
199
|
+
AI: ✓ docs/GOAL.md 생성 완료 (5개 태스크)
|
|
200
|
+
`/scaff:design init` 권장 — 파일 수준 결정이 필요한 구현 태스크입니다.
|
|
201
|
+
|
|
202
|
+
You: /scaff:design init
|
|
203
|
+
AI: ✓ docs/DESIGN.md 생성 완료
|
|
204
|
+
세션 스토어 선택, 마이그레이션 전략, 롤백 계획 포함
|
|
205
|
+
|
|
206
|
+
You: /scaff:go
|
|
207
|
+
AI: Task 1/5: 세션 스토어 설정... ✓ done
|
|
208
|
+
Task 2/5: 미들웨어 교체... ✓ done
|
|
209
|
+
Task 3/5에서 DB 스키마 변경이 필요합니다. 진행할까요?
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 새 프로젝트
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
You: /scaff:scout 실시간 협업 에디터를 만들기 위한 논의를 시작하자
|
|
216
|
+
AI: (Discovery Mode — 기술 스택, 요구사항, 제약조건을 대화로 탐색)
|
|
217
|
+
...
|
|
218
|
+
✓ docs/CONTEXT.md 생성 완료
|
|
219
|
+
|
|
220
|
+
You: /scaff:roadmap init
|
|
221
|
+
AI: ✓ docs/ROADMAP.md 생성 완료
|
|
222
|
+
├── M1: 코어 에디터 엔진
|
|
223
|
+
├── M2: 실시간 동기화 (CRDT)
|
|
224
|
+
└── M3: 배포 및 인프라
|
|
225
|
+
|
|
226
|
+
You: /scaff:goal
|
|
227
|
+
AI: ROADMAP.md에서 M1을 선택합니다.
|
|
228
|
+
✓ docs/GOAL.md 생성 완료
|
|
229
|
+
|
|
230
|
+
You: /scaff:goal breakdown
|
|
231
|
+
AI: 7개 서브태스크로 분해 완료
|
|
232
|
+
|
|
233
|
+
You: /scaff:goal breakdown 3
|
|
234
|
+
AI: Task 3을 4개 서브태스크로 분해 완료 (3.1–3.4)
|
|
235
|
+
|
|
236
|
+
You: /scaff:go
|
|
237
|
+
AI: Task 1/7: 프로젝트 초기화... ✓ done
|
|
238
|
+
Task 2/7: 에디터 코어 구현... ✓ done
|
|
239
|
+
여러 태스크를 완료했습니다. `/scaff:goal checkpoint`로 진행 상황을 저장할까요?
|
|
240
|
+
|
|
241
|
+
You: /scaff:goal checkpoint
|
|
242
|
+
AI: ✓ docs/CHECKPOINT.md 저장 완료
|
|
243
|
+
(세션이 끊겨도 다음 scout에서 이어서 시작합니다)
|
|
244
|
+
|
|
245
|
+
... (다음 세션에서 이어서 작업, 모든 태스크 완료)
|
|
246
|
+
|
|
247
|
+
You: /scaff:goal archive
|
|
248
|
+
AI: ✓ docs/archive/goals/2026-04-04-editor-core/에 4개 파일 아카이브
|
|
249
|
+
(GOAL.md, DESIGN.md, PLAN.md, CHECKPOINT.md)
|
|
250
|
+
ROADMAP.md에서 M1을 done으로 표시했습니다.
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### 이어서 작업
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
You: /scaff:scout
|
|
257
|
+
AI: CONTEXT.md ✓ | GOAL.md ✓ (3/5 완료)
|
|
258
|
+
이전 세션에서 API 엔드포인트 작업 중이었습니다.
|
|
259
|
+
`/scaff:go`로 이어서 진행할까요?
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 블로커 대응
|
|
263
|
+
|
|
264
|
+
골 진행 중 먼저 해결해야 할 일이 생겼을 때:
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
You: (Goal A 진행 중) 이 의존성 버그 먼저 고치자.
|
|
268
|
+
AI: 추천: /scaff:goal suspend + /scaff:goal "의존성 버그 수정"
|
|
269
|
+
You: ok
|
|
270
|
+
AI: ✓ Goal A를 docs/suspended/goal-a/로 중단 보관
|
|
271
|
+
✓ 블로커용 새 GOAL.md 생성
|
|
272
|
+
|
|
273
|
+
... (블로커 작업 → 완료 시 archive)
|
|
274
|
+
|
|
275
|
+
You: /scaff:goal resume
|
|
276
|
+
AI: Goal A 복귀. `/scaff:go`로 이어서 진행할까요?
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
중첩 블로커도 동일 패턴 — suspend가 쌓이고, 여러 골이 중단 중이면 resume이 목록을 보여줍니다.
|
|
280
|
+
|
|
281
|
+
## **틈새**에서
|
|
282
|
+
|
|
283
|
+
> **무거운 워크플로우가 항상 필요하지는 않았습니다.**
|
|
284
|
+
>
|
|
285
|
+
> 작은 수정을 하려는 거 뿐인데 이게 다 필요한가라는 의문이 들었습니다.
|
|
286
|
+
> 질문 폭탄을 수반하는 완벽한 논의와 물 샐 틈없는 사양이 항상 필요하지는 않았습니다.
|
|
287
|
+
> 완벽한 절차는 매력적입니다. 하지만 AI는 점점 더 많은 것을 흡수해가고 있고,
|
|
288
|
+
> 어쩌면 우리가 기대고 싶은 그 다양한 안전장치들이 많은 경우에 있어서 과잉적인 족쇄가 될 수도 있겠다고 생각했습니다.
|
|
289
|
+
> 하지만 맥락 유지는 필요했습니다.
|
|
290
|
+
>
|
|
291
|
+
> **현재에 집중하고 싶었습니다.**
|
|
292
|
+
>
|
|
293
|
+
> 사양과 태스크에 묻힌 '현재 목표'를 밖으로 꺼내고 싶었습니다.
|
|
294
|
+
> 나와 AI가 바로 이해하고 집중할 수 있는 '현재'를 만들고 싶었습니다.
|
|
295
|
+
> 작은 것에서 시작해 올라가도, 큰 그림에서 내려와도 —
|
|
296
|
+
> 어느 방향이든 '지금 할 일'이 바로 보이는 구조를 원했습니다.
|
|
297
|
+
>
|
|
298
|
+
> **사이를 채우고 싶었습니다.**
|
|
299
|
+
>
|
|
300
|
+
> 저는 OpenSpec으로 시작해서 Scaff로 건너가기도 하고 그 반대로 하기도 합니다.
|
|
301
|
+
> 때로는 Superpowers를 장착하기도 합니다.
|
|
302
|
+
> 잘 하는 것들은 여전히 잘 활용하면 됩니다.
|
|
303
|
+
> 완전함과 강력함의 앞에, 또는 그 사이에 놓일 수 있는 어떤 무엇이 필요했습니다.
|
|
304
|
+
|
|
305
|
+
## Notation
|
|
306
|
+
|
|
307
|
+
Scaff의 커맨드와 스킬은 일반 산문이 아닌, 간결한 마크다운 표기법 — `## Constraints`, `(condition) => action` 디스패치 룰, `for each`, `loop until` — 으로 작성되어 있습니다. 이러한 표기법은 LLM이 절차적 텍스트보다 선언적 규칙을 더 안정적으로 따른다는 연구와 프롬프트 엔지니어링 결과를 바탕으로 설계되었습니다. 그 결과 템플릿은 더 짧고, 토큰을 덜 쓰며, LLM이 규칙을 더 안정적으로 따릅니다.
|
|
308
|
+
|
|
309
|
+
커맨드나 스킬 템플릿을 수정한다면 먼저 [docs/NOTATION.md](docs/NOTATION.md)를 읽어주세요 — 구문 레퍼런스와 우선순위 규칙이 정리되어 있습니다. 표기법이 왜 이런 형태인지, 어떤 연구 근거가 있는지는 [docs/notation-guide.md](docs/notation-guide.md)를 참고하세요.
|
|
310
|
+
|
|
311
|
+
## 기여하기
|
|
312
|
+
|
|
313
|
+
버그 수정, 문서 개선 — PR 환영합니다.
|
|
314
|
+
|
|
315
|
+
### 개발 환경
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
git clone https://github.com/opellen/scaff.git
|
|
319
|
+
cd scaff
|
|
320
|
+
npm install
|
|
321
|
+
npm run build
|
|
322
|
+
npm test
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
## 라이선스
|
|
326
|
+
|
|
327
|
+
MIT 라이선스 — 자세한 내용은 [LICENSE](LICENSE)를 참고하세요.
|
package/README.md
ADDED
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/opellen/scaff/master/assets/scaff-logo-wordmark.webp" alt="Scaff Logo" width="180"/>
|
|
3
|
+
<p><strong>Agile, goal-centric AI harness. Just markdown.</strong></p>
|
|
4
|
+
<p>The present that you and AI immediately understand — <code>CONTEXT.md</code>, <code>GOAL.md</code>, <code>ROADMAP.md</code></p>
|
|
5
|
+
<p>
|
|
6
|
+
Open <code>CONTEXT.md</code> and see <b>the current context</b>.<br/>
|
|
7
|
+
Open <code>GOAL.md</code> and see <b>what to do now</b>.<br/>
|
|
8
|
+
Open <code>ROADMAP.md</code> and see <b>the current big picture</b>.
|
|
9
|
+
</p>
|
|
10
|
+
<p><strong>English</strong> · <a href="README.ko.md">한국어</a></p>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
## What is it?
|
|
14
|
+
|
|
15
|
+
Scaff is a pure markdown-based, lightweight context scaffolding.
|
|
16
|
+
No CLI, no hooks, no MCP — just markdown files that let you and AI instantly know what to do right now.
|
|
17
|
+
|
|
18
|
+
## What does it solve?
|
|
19
|
+
|
|
20
|
+
**Context management is heavier than the context itself.**
|
|
21
|
+
Existing frameworks maintain context across sessions with CLIs, hooks, and MCP servers.
|
|
22
|
+
Even light exploration triggers CLI runs, hooks intercept every action,
|
|
23
|
+
and if MCP servers are configured, tool definitions alone consume tokens even in sessions that don't use them.
|
|
24
|
+
|
|
25
|
+
**What you need to do right now isn't visible.**
|
|
26
|
+
The current goal is scattered across state files, task lists, and design documents.
|
|
27
|
+
You can't just open one file and immediately see "what to do now".
|
|
28
|
+
|
|
29
|
+
In Scaff, one question maps to one file.
|
|
30
|
+
What should I do now? → `GOAL.md`. What is this project? → `CONTEXT.md`. The overall plan? → `ROADMAP.md`.
|
|
31
|
+
No digging around. No tools, no runtime.
|
|
32
|
+
|
|
33
|
+
## Quick start
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx @opellen/scaff init
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Markdown commands are installed in your project. No CLI needed after this.
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
/scaff:scout # Start session — just remember this
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Whether it's a new project or an existing codebase, scout reads the current state and guides you to the next step.
|
|
46
|
+
Got existing code? It starts with context setup (`/scaff:context`). Empty project? It starts by exploring your idea through conversation.
|
|
47
|
+
|
|
48
|
+
Most commands auto-run `init` on first use — `/scaff:goal "my goal"` works immediately without typing `init`.
|
|
49
|
+
|
|
50
|
+
### Options
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
scaff init --docs .planning # Use a different path instead of docs/
|
|
54
|
+
scaff init --codebase src # Point templates at a sub-directory codebase (default: .)
|
|
55
|
+
scaff init --tools cursor # Install for a specific tool
|
|
56
|
+
scaff init --tools cursor,windsurf # Multiple tools
|
|
57
|
+
scaff init --no-subagent # Disable subagent delegation (enabled by default)
|
|
58
|
+
scaff init --root path/to/proj # Install into a different project directory
|
|
59
|
+
scaff init --force # Overwrite existing files
|
|
60
|
+
scaff init --dry-run # Preview files to install
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
> [!NOTE]
|
|
64
|
+
> Scaff works with `Claude Code`, `Cursor`, `Windsurf`, and [20+ other tools](docs/supported-tools.md).
|
|
65
|
+
> Verified with `Claude Code`. Other tools have adapters ready — not yet battle-tested.
|
|
66
|
+
|
|
67
|
+
## Document structure
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
docs/
|
|
71
|
+
├── CONTEXT.md ← Project context, principles, workflow
|
|
72
|
+
├── GOAL.md ← Current objective and checklist
|
|
73
|
+
├── CHECKPOINT.md ← Last session progress
|
|
74
|
+
├── DESIGN.md ← Implementation design (as needed)
|
|
75
|
+
├── PLAN.md ← Implementation plan (auto-generated for complex tasks)
|
|
76
|
+
├── ROADMAP.md ← Milestone-based overall plan
|
|
77
|
+
├── OVERVIEW.md ← Full project overview (as needed)
|
|
78
|
+
└── suspended/ ← Suspended goals
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
| Document | Question it answers | Lifespan |
|
|
82
|
+
|----------|-------------------|----------|
|
|
83
|
+
| `CONTEXT.md` | What is this project and how do I work on it? | Project lifetime |
|
|
84
|
+
| `GOAL.md` | What should I do right now? | Until goal is achieved |
|
|
85
|
+
| `CHECKPOINT.md` | Where did the last session leave off? | Per session (overwritten) |
|
|
86
|
+
| `DESIGN.md` | How do I implement this? | Until goal is achieved |
|
|
87
|
+
| `PLAN.md` | How do I implement this task? | Auto-generated → auto-archived |
|
|
88
|
+
| `ROADMAP.md` | Where am I in the big picture? | Project lifetime |
|
|
89
|
+
| `OVERVIEW.md` | What does this whole project look like? | Project lifetime |
|
|
90
|
+
|
|
91
|
+
Start with just `GOAL.md` and expand to `ROADMAP.md`, or lay out the big picture in `ROADMAP.md` and drill down to `GOAL.md`. Either way, Scaff keeps "what to do now" visible on markdown.
|
|
92
|
+
|
|
93
|
+
<details>
|
|
94
|
+
<summary>GOAL.md example</summary>
|
|
95
|
+
|
|
96
|
+
```markdown
|
|
97
|
+
---
|
|
98
|
+
id: session-auth
|
|
99
|
+
goal: Migrate auth from JWT to session-based
|
|
100
|
+
status: in-progress
|
|
101
|
+
started: 2026-04-04
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Tasks
|
|
105
|
+
|
|
106
|
+
- [x] 1. Set up session store
|
|
107
|
+
- [ ] 2. Replace middleware — Step 1/2 (session middleware in progress)
|
|
108
|
+
- [x] 2.1. Implement session middleware
|
|
109
|
+
- [ ] 2.2. Remove legacy JWT code
|
|
110
|
+
- [ ] 3. DB schema migration
|
|
111
|
+
- [ ] 4. Integration tests
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
</details>
|
|
115
|
+
|
|
116
|
+
<details>
|
|
117
|
+
<summary>CONTEXT.md example</summary>
|
|
118
|
+
|
|
119
|
+
```markdown
|
|
120
|
+
# Project Overview
|
|
121
|
+
Express + PostgreSQL REST API server.
|
|
122
|
+
Auth migration from JWT to session-based in progress.
|
|
123
|
+
|
|
124
|
+
# Architecture
|
|
125
|
+
- src/server/ — HTTP routing (Express)
|
|
126
|
+
- src/auth/ — Auth middleware
|
|
127
|
+
- src/db/ — Database access layer
|
|
128
|
+
|
|
129
|
+
# Principles
|
|
130
|
+
- Zero downtime during migration
|
|
131
|
+
- Backward compatibility with existing clients
|
|
132
|
+
|
|
133
|
+
# Resources
|
|
134
|
+
- DB: PostgreSQL 14, migrations via prisma
|
|
135
|
+
- Auth: express-session + connect-pg-simple
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
</details>
|
|
139
|
+
|
|
140
|
+
<details>
|
|
141
|
+
<summary>ROADMAP.md example</summary>
|
|
142
|
+
|
|
143
|
+
```markdown
|
|
144
|
+
---
|
|
145
|
+
id: api-v2
|
|
146
|
+
title: API v2 migration
|
|
147
|
+
status: active
|
|
148
|
+
started: 2026-03-01
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
- [x] **M1: Auth migration**
|
|
152
|
+
- [ ] **M2: Rate limiting**
|
|
153
|
+
- [ ] **M3: API versioning**
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
</details>
|
|
157
|
+
|
|
158
|
+
## Commands
|
|
159
|
+
|
|
160
|
+
| Command | Description |
|
|
161
|
+
|---------|-------------|
|
|
162
|
+
| `/scaff:scout` | Start session — read docs, assess current state, suggest next action |
|
|
163
|
+
| `/scaff:go` | Execute goal — proceed through `GOAL.md` tasks in order |
|
|
164
|
+
| `/scaff:context` | Create and sync `CONTEXT.md` |
|
|
165
|
+
| `/scaff:goal` | `GOAL.md` management (init, breakdown, checkpoint, suspend, resume, archive) |
|
|
166
|
+
| `/scaff:design` | `DESIGN.md` management (init, sync, archive) |
|
|
167
|
+
| `/scaff:roadmap` | `ROADMAP.md` milestone management (init, add, archive) |
|
|
168
|
+
| `/scaff:overview` | `OVERVIEW.md` full project overview |
|
|
169
|
+
| `/scaff:verify` | Verify consistency across goal, design, and implementation |
|
|
170
|
+
| `/scaff:recap` | Session wrap-up — sync decisions into living documents |
|
|
171
|
+
|
|
172
|
+
### Invocation
|
|
173
|
+
|
|
174
|
+
You don't always need to type `/scaff:` — when intent is clear from context, natural language works too.
|
|
175
|
+
|
|
176
|
+
| Path | `/scaff` required? | Example |
|
|
177
|
+
|------|-------------------|---------|
|
|
178
|
+
| **Explicit invocation** | Yes | `/scaff goal init`, `/scaff:goal init & design init` |
|
|
179
|
+
| **Confirming a recent recommendation** | No | AI: "Recommend `/scaff:goal init`" → User: "ok" / "go" |
|
|
180
|
+
| **Continuation in active flow** | No | (after goal init) User: "breakdown now" |
|
|
181
|
+
|
|
182
|
+
With clear context, natural language alone triggers execution. `/scaff` serves as an escape hatch when context is ambiguous.
|
|
183
|
+
|
|
184
|
+
## Usage flow
|
|
185
|
+
|
|
186
|
+
### Applying to an existing project
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
You: /scaff:scout
|
|
190
|
+
AI: Found an existing codebase. No CONTEXT.md yet.
|
|
191
|
+
Set up project context with `/scaff:context`?
|
|
192
|
+
|
|
193
|
+
You: /scaff:context init
|
|
194
|
+
AI: ✓ docs/CONTEXT.md created
|
|
195
|
+
To set a goal: `/scaff:goal init`
|
|
196
|
+
|
|
197
|
+
You: /scaff:goal Migrate auth module from JWT to session-based
|
|
198
|
+
AI: ✓ docs/GOAL.md created (5 tasks)
|
|
199
|
+
Recommend `/scaff:design init` — implementation task with file-level decisions.
|
|
200
|
+
|
|
201
|
+
You: /scaff:design init
|
|
202
|
+
AI: ✓ docs/DESIGN.md created
|
|
203
|
+
Session store selection, migration strategy, rollback plan included
|
|
204
|
+
|
|
205
|
+
You: /scaff:go
|
|
206
|
+
AI: Task 1/5: Set up session store... ✓ done
|
|
207
|
+
Task 2/5: Replace middleware... ✓ done
|
|
208
|
+
Task 3/5 requires DB schema changes. Proceed?
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### New project
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
You: /scaff:scout Let's discuss building a real-time collaborative editor
|
|
215
|
+
AI: (Discovery Mode — exploring tech stack, requirements, constraints)
|
|
216
|
+
...
|
|
217
|
+
✓ docs/CONTEXT.md created
|
|
218
|
+
|
|
219
|
+
You: /scaff:roadmap init
|
|
220
|
+
AI: ✓ docs/ROADMAP.md created
|
|
221
|
+
├── M1: Core editor engine
|
|
222
|
+
├── M2: Real-time sync (CRDT)
|
|
223
|
+
└── M3: Deployment & infrastructure
|
|
224
|
+
|
|
225
|
+
You: /scaff:goal
|
|
226
|
+
AI: Selecting M1 from ROADMAP.md.
|
|
227
|
+
✓ docs/GOAL.md created
|
|
228
|
+
|
|
229
|
+
You: /scaff:goal breakdown
|
|
230
|
+
AI: Decomposed into 7 subtasks
|
|
231
|
+
|
|
232
|
+
You: /scaff:goal breakdown 3
|
|
233
|
+
AI: Decomposed Task 3 into 4 subtasks (3.1–3.4)
|
|
234
|
+
|
|
235
|
+
You: /scaff:go
|
|
236
|
+
AI: Task 1/7: Project initialization... ✓ done
|
|
237
|
+
Task 2/7: Editor core implementation... ✓ done
|
|
238
|
+
Several tasks completed. Save progress with `/scaff:goal checkpoint`?
|
|
239
|
+
|
|
240
|
+
You: /scaff:goal checkpoint
|
|
241
|
+
AI: ✓ docs/CHECKPOINT.md saved
|
|
242
|
+
(If the session drops, the next scout picks up where you left off)
|
|
243
|
+
|
|
244
|
+
... (continue in next session, all tasks complete)
|
|
245
|
+
|
|
246
|
+
You: /scaff:goal archive
|
|
247
|
+
AI: ✓ Archived 4 files to docs/archive/goals/2026-04-04-editor-core/
|
|
248
|
+
(GOAL.md, DESIGN.md, PLAN.md, CHECKPOINT.md)
|
|
249
|
+
Marked M1 done in ROADMAP.md.
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Resuming work
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
You: /scaff:scout
|
|
256
|
+
AI: CONTEXT.md ✓ | GOAL.md ✓ (3/5 complete)
|
|
257
|
+
You were working on API endpoints in the previous session.
|
|
258
|
+
Resume with `/scaff:go`?
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Handling blockers
|
|
262
|
+
|
|
263
|
+
When something comes up mid-goal that must be fixed first:
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
You: (during Goal A) Let's fix this dependency bug first.
|
|
267
|
+
AI: Suggest: /scaff:goal suspend + /scaff:goal "Fix dependency bug"
|
|
268
|
+
You: ok
|
|
269
|
+
AI: ✓ Goal A suspended to docs/suspended/goal-a/
|
|
270
|
+
✓ New GOAL.md created for the blocker.
|
|
271
|
+
|
|
272
|
+
... (work through the blocker, archive when done)
|
|
273
|
+
|
|
274
|
+
You: /scaff:goal resume
|
|
275
|
+
AI: Resumed: Goal A. Continue with /scaff:go?
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Nested blockers follow the same pattern — suspend stacks, resume presents a list when multiple goals are paused.
|
|
279
|
+
|
|
280
|
+
## From the **gap**
|
|
281
|
+
|
|
282
|
+
> **Heavy workflows weren't always necessary.**
|
|
283
|
+
>
|
|
284
|
+
> All I wanted was a small fix — did I really need all this?
|
|
285
|
+
> Exhaustive discussions with question bombardment and airtight specifications weren't always necessary.
|
|
286
|
+
> Thorough processes are appealing. But AI kept absorbing more and more,
|
|
287
|
+
> and I started to think that maybe the safety nets we want to lean on were, in many cases, becoming excessive shackles.
|
|
288
|
+
> Yet context needed to persist.
|
|
289
|
+
>
|
|
290
|
+
> **I wanted to focus on the present.**
|
|
291
|
+
>
|
|
292
|
+
> I wanted to pull the "current goal" out from under specs and task lists.
|
|
293
|
+
> I wanted to create a "present" that both I and AI could immediately understand and focus on.
|
|
294
|
+
> Whether you grow from small to large, or descend from the big picture —
|
|
295
|
+
> either direction, I wanted a structure where "what to do now" is immediately visible.
|
|
296
|
+
>
|
|
297
|
+
> **I wanted to fill the gap.**
|
|
298
|
+
>
|
|
299
|
+
> I sometimes start with OpenSpec and cross over to Scaff, and vice versa.
|
|
300
|
+
> Sometimes I equip Superpowers.
|
|
301
|
+
> What works well should still be used well.
|
|
302
|
+
> I needed something that could sit in front of — or between — completeness and power.
|
|
303
|
+
|
|
304
|
+
## Notation
|
|
305
|
+
|
|
306
|
+
Scaff's commands and skills aren't written as plain prose. They follow a small markdown notation — `## Constraints`, `(condition) => action` dispatch rules, `for each`, `loop until` — designed from research and prompt-engineering findings on how LLMs reliably follow declarative rules over procedural text. The result: shorter templates, fewer tokens, and more reliable rule-following from the LLM.
|
|
307
|
+
|
|
308
|
+
If you're modifying a command or skill template, read [docs/NOTATION.md](docs/NOTATION.md) first — it's the reference for the syntax and priority rules. For the rationale and research background behind the notation, see [docs/notation-guide.md](docs/notation-guide.md).
|
|
309
|
+
|
|
310
|
+
## Contributing
|
|
311
|
+
|
|
312
|
+
Bug fixes, documentation improvements — PRs welcome.
|
|
313
|
+
|
|
314
|
+
### Development
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
git clone https://github.com/opellen/scaff.git
|
|
318
|
+
cd scaff
|
|
319
|
+
npm install
|
|
320
|
+
npm run build
|
|
321
|
+
npm test
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## License
|
|
325
|
+
|
|
326
|
+
MIT License — see [LICENSE](LICENSE) for details.
|
package/dist/cli.d.ts
ADDED