@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.
Files changed (98) hide show
  1. package/README.ko.md +327 -0
  2. package/README.md +326 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +225 -0
  5. package/dist/extend.d.ts +12 -0
  6. package/dist/extend.js +242 -0
  7. package/dist/hook-parser.d.ts +15 -0
  8. package/dist/hook-parser.js +95 -0
  9. package/dist/i18n/index.d.ts +5 -0
  10. package/dist/i18n/index.js +20 -0
  11. package/dist/i18n/messages.d.ts +28 -0
  12. package/dist/i18n/messages.js +49 -0
  13. package/dist/index.d.ts +4 -0
  14. package/dist/index.js +4 -0
  15. package/dist/installer.d.ts +10 -0
  16. package/dist/installer.js +74 -0
  17. package/dist/marker.d.ts +11 -0
  18. package/dist/marker.js +25 -0
  19. package/dist/platforms/amazon-q.d.ts +2 -0
  20. package/dist/platforms/amazon-q.js +12 -0
  21. package/dist/platforms/antigravity.d.ts +2 -0
  22. package/dist/platforms/antigravity.js +12 -0
  23. package/dist/platforms/auggie.d.ts +2 -0
  24. package/dist/platforms/auggie.js +15 -0
  25. package/dist/platforms/claude.d.ts +2 -0
  26. package/dist/platforms/claude.js +7 -0
  27. package/dist/platforms/cline.d.ts +2 -0
  28. package/dist/platforms/cline.js +11 -0
  29. package/dist/platforms/codebuddy.d.ts +2 -0
  30. package/dist/platforms/codebuddy.js +16 -0
  31. package/dist/platforms/codex.d.ts +2 -0
  32. package/dist/platforms/codex.js +7 -0
  33. package/dist/platforms/continue.d.ts +2 -0
  34. package/dist/platforms/continue.js +16 -0
  35. package/dist/platforms/costrict.d.ts +2 -0
  36. package/dist/platforms/costrict.js +15 -0
  37. package/dist/platforms/crush.d.ts +2 -0
  38. package/dist/platforms/crush.js +19 -0
  39. package/dist/platforms/cursor.d.ts +2 -0
  40. package/dist/platforms/cursor.js +18 -0
  41. package/dist/platforms/factory.d.ts +2 -0
  42. package/dist/platforms/factory.js +15 -0
  43. package/dist/platforms/gemini.d.ts +2 -0
  44. package/dist/platforms/gemini.js +14 -0
  45. package/dist/platforms/github-copilot.d.ts +2 -0
  46. package/dist/platforms/github-copilot.js +12 -0
  47. package/dist/platforms/iflow.d.ts +2 -0
  48. package/dist/platforms/iflow.js +18 -0
  49. package/dist/platforms/index.d.ts +9 -0
  50. package/dist/platforms/index.js +57 -0
  51. package/dist/platforms/kilocode.d.ts +2 -0
  52. package/dist/platforms/kilocode.js +8 -0
  53. package/dist/platforms/kiro.d.ts +2 -0
  54. package/dist/platforms/kiro.js +12 -0
  55. package/dist/platforms/opencode.d.ts +2 -0
  56. package/dist/platforms/opencode.js +12 -0
  57. package/dist/platforms/pi.d.ts +2 -0
  58. package/dist/platforms/pi.js +12 -0
  59. package/dist/platforms/qoder.d.ts +2 -0
  60. package/dist/platforms/qoder.js +19 -0
  61. package/dist/platforms/qwen.d.ts +2 -0
  62. package/dist/platforms/qwen.js +14 -0
  63. package/dist/platforms/roocode.d.ts +2 -0
  64. package/dist/platforms/roocode.js +11 -0
  65. package/dist/platforms/toml.d.ts +9 -0
  66. package/dist/platforms/toml.js +18 -0
  67. package/dist/platforms/trae.d.ts +2 -0
  68. package/dist/platforms/trae.js +11 -0
  69. package/dist/platforms/types.d.ts +19 -0
  70. package/dist/platforms/types.js +1 -0
  71. package/dist/platforms/windsurf.d.ts +2 -0
  72. package/dist/platforms/windsurf.js +19 -0
  73. package/dist/platforms/yaml.d.ts +10 -0
  74. package/dist/platforms/yaml.js +30 -0
  75. package/dist/prompts/platform-select.d.ts +1 -0
  76. package/dist/prompts/platform-select.js +185 -0
  77. package/dist/skills/generate.d.ts +13 -0
  78. package/dist/skills/generate.js +16 -0
  79. package/dist/templates.d.ts +18 -0
  80. package/dist/templates.js +96 -0
  81. package/dist/ui/ascii-logo.d.ts +6 -0
  82. package/dist/ui/ascii-logo.js +38 -0
  83. package/dist/ui/colors.d.ts +2 -0
  84. package/dist/ui/colors.js +3 -0
  85. package/dist/ui/welcome.d.ts +1 -0
  86. package/dist/ui/welcome.js +77 -0
  87. package/package.json +51 -0
  88. package/templates/commands/context.md +93 -0
  89. package/templates/commands/design.md +108 -0
  90. package/templates/commands/go.md +56 -0
  91. package/templates/commands/goal.md +196 -0
  92. package/templates/commands/overview.md +78 -0
  93. package/templates/commands/recap.md +69 -0
  94. package/templates/commands/roadmap.md +95 -0
  95. package/templates/commands/scout.md +68 -0
  96. package/templates/commands/verify.md +112 -0
  97. package/templates/skills/scaff-flow/SKILL.md +107 -0
  98. 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
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};