sillyspec 3.7.13 → 3.7.15
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/.claude/skills/sillyspec-archive/SKILL.md +77 -0
- package/.claude/skills/sillyspec-brainstorm/SKILL.md +591 -0
- package/.claude/skills/sillyspec-continue/SKILL.md +44 -0
- package/.claude/skills/sillyspec-execute/SKILL.md +233 -0
- package/.claude/skills/sillyspec-explore/SKILL.md +96 -0
- package/.claude/skills/sillyspec-export/SKILL.md +53 -0
- package/.claude/skills/sillyspec-init/SKILL.md +171 -0
- package/.claude/skills/sillyspec-plan/SKILL.md +263 -0
- package/.claude/skills/sillyspec-propose/SKILL.md +248 -0
- package/.claude/skills/sillyspec-quick/SKILL.md +102 -0
- package/.claude/skills/sillyspec-resume/SKILL.md +111 -0
- package/{templates/scan.md → .claude/skills/sillyspec-scan/SKILL.md} +22 -60
- package/.claude/skills/sillyspec-state/SKILL.md +54 -0
- package/.claude/skills/sillyspec-status/SKILL.md +131 -0
- package/.claude/skills/sillyspec-verify/SKILL.md +146 -0
- package/.claude/skills/sillyspec-workspace/SKILL.md +149 -0
- package/.sillyspec/changes/run-command-design/design.md +1230 -0
- package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
- package/.sillyspec/knowledge/INDEX.md +8 -0
- package/.sillyspec/knowledge/uncategorized.md +3 -0
- package/.sillyspec/projects/sillyspec.yaml +3 -0
- package/README.md +4 -0
- package/logo.jpg +0 -0
- package/package.json +7 -1
- package/packages/dashboard/dist/assets/index-Bx0cgoK_.js +7446 -0
- package/packages/dashboard/dist/assets/index-DbkUSsNO.css +1 -0
- package/packages/dashboard/dist/favicon.jpg +0 -0
- package/packages/dashboard/dist/index.html +2 -2
- package/packages/dashboard/dist/logo.jpg +0 -0
- package/packages/dashboard/package-lock.json +220 -0
- package/packages/dashboard/package.json +8 -5
- package/packages/dashboard/public/favicon.jpg +0 -0
- package/packages/dashboard/public/logo.jpg +0 -0
- package/packages/dashboard/server/index.js +92 -4
- package/packages/dashboard/server/parser.js +252 -28
- package/packages/dashboard/src/App.vue +139 -9
- package/packages/dashboard/src/components/ActionBar.vue +23 -39
- package/packages/dashboard/src/components/CommandPalette.vue +40 -65
- package/packages/dashboard/src/components/DetailPanel.vue +68 -53
- package/packages/dashboard/src/components/DocPreview.vue +137 -20
- package/packages/dashboard/src/components/DocTree.vue +48 -26
- package/packages/dashboard/src/components/LogStream.vue +12 -32
- package/packages/dashboard/src/components/PipelineStage.vue +8 -8
- package/packages/dashboard/src/components/PipelineView.vue +35 -43
- package/packages/dashboard/src/components/ProjectList.vue +52 -77
- package/packages/dashboard/src/components/ProjectOverview.vue +178 -0
- package/packages/dashboard/src/components/StageBadge.vue +13 -13
- package/packages/dashboard/src/components/StepCard.vue +11 -11
- package/packages/dashboard/src/components/detail/DocsDetail.vue +48 -0
- package/packages/dashboard/src/components/detail/GitDetail.vue +61 -0
- package/packages/dashboard/src/components/detail/TechDetail.vue +43 -0
- package/packages/dashboard/src/main.js +4 -1
- package/packages/dashboard/src/style.css +13 -13
- package/src/index.js +55 -8
- package/src/init.js +66 -196
- package/src/migrate.js +1 -18
- package/src/progress.js +279 -281
- package/src/run.js +320 -0
- package/src/setup.js +1 -9
- package/src/stages/brainstorm.js +210 -0
- package/src/stages/execute.js +190 -0
- package/src/stages/index.js +22 -0
- package/src/stages/plan.js +118 -0
- package/src/stages/propose.js +115 -0
- package/src/stages/verify.js +98 -0
- package/packages/dashboard/dist/assets/index-5Rrvs0Rl.css +0 -1
- package/packages/dashboard/dist/assets/index-ZNToqi9V.js +0 -17
- package/templates/archive.md +0 -121
- package/templates/brainstorm.md +0 -246
- package/templates/commit.md +0 -123
- package/templates/continue.md +0 -32
- package/templates/execute.md +0 -314
- package/templates/explore.md +0 -60
- package/templates/export.md +0 -21
- package/templates/init.md +0 -61
- package/templates/plan.md +0 -157
- package/templates/progress-format.md +0 -90
- package/templates/propose.md +0 -73
- package/templates/quick.md +0 -135
- package/templates/resume-dialog.md +0 -55
- package/templates/resume.md +0 -53
- package/templates/scan-quick.md +0 -49
- package/templates/skills/playwright-e2e/SKILL.md +0 -340
- package/templates/status.md +0 -72
- package/templates/verify.md +0 -253
- package/templates/workspace-sync.md +0 -89
- package/templates/workspace.md +0 -67
- /package/.sillyspec/{docs/sillyspec/brainstorm → changes/brainstorm-archive}/2026-04-05-dashboard-design.md +0 -0
- /package/.sillyspec/{docs/sillyspec/brainstorm → changes/brainstorm-archive}/2026-04-05-unified-docs-design.md +0 -0
- /package/.sillyspec/{specs/2026-04-05-dashboard-design.md → changes/dashboard/design.md.braindraft} +0 -0
- /package/.sillyspec/{specs/2026-04-05-unified-docs-design.md → changes/unified-docs-design/design.md} +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:continue
|
|
3
|
+
description: 自动判断并执行下一步
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你现在是 SillySpec 的自动推进器。
|
|
9
|
+
|
|
10
|
+
## 判断逻辑
|
|
11
|
+
|
|
12
|
+
按顺序检查,第一个未完成的就执行:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
1. 有 HANDOFF.json?→ 执行 /sillyspec:resume
|
|
16
|
+
|
|
17
|
+
2. .sillyspec/changes/ 有进行中的变更?
|
|
18
|
+
2a. 没有任何文件 → 提示检查 proposal 是否需要完善
|
|
19
|
+
2b. 没有 design.md → 提示补充 design
|
|
20
|
+
2c. 没有 tasks.md → 执行 /sillyspec:propose(补全规范)
|
|
21
|
+
2d. tasks.md 有未完成项 + 有计划文件 → 执行 /sillyspec:execute
|
|
22
|
+
2e. tasks.md 全完成 + 没验证 → 执行 /sillyspec:verify
|
|
23
|
+
2f. 已验证通过 → 执行 /sillyspec:archive
|
|
24
|
+
|
|
25
|
+
3. 有设计文档但没有对应变更?
|
|
26
|
+
→ 提示运行 /sillyspec:propose <name>
|
|
27
|
+
|
|
28
|
+
4. 有 docs/*/scan/ 但没有进行中的工作?
|
|
29
|
+
→ 提示运行 /sillyspec:brainstorm "你的想法"
|
|
30
|
+
|
|
31
|
+
5. 什么都没有?
|
|
32
|
+
→ 提示运行 /sillyspec:init(新项目)或 /sillyspec:scan(棕地项目)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 输出
|
|
36
|
+
|
|
37
|
+
先报告检测结果,再执行:
|
|
38
|
+
|
|
39
|
+
> 🤖 SillySpec 自动检测
|
|
40
|
+
>
|
|
41
|
+
> 当前状态:[描述]
|
|
42
|
+
> 下一步:[执行的命令]
|
|
43
|
+
>
|
|
44
|
+
> [开始执行...]
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:execute
|
|
3
|
+
description: 波次执行 — 子代理并行 + 强制 TDD + 两阶段审查
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 交互规范
|
|
7
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
8
|
+
|
|
9
|
+
## 核心约束(必须遵守)
|
|
10
|
+
- ❌ 跳过状态检查,自行推断阶段
|
|
11
|
+
- ❌ 跳步执行(不允许跳过 plan 直接 execute)
|
|
12
|
+
- ❌ 先写代码后补测试
|
|
13
|
+
- ❌ 编造不存在的方法/注解/路径/类/字段
|
|
14
|
+
- ❌ 自行补全缺失的接口/方法(应报告 BLOCKED)
|
|
15
|
+
- ❌ 意外修改了计划外的文件却不报告
|
|
16
|
+
|
|
17
|
+
## 状态检查(必须先执行)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
sillyspec progress show 2>/dev/null
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
检查 progress.json 中 currentStage 是否为 execute。如果不是 → 检查是否有未完成的 tasks.md:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
ls .sillyspec/changes/*/tasks.md 2>/dev/null | xargs grep -l '\- \[ \]' 2>/dev/null
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
有未完成的 tasks.md → 继续。没有 → 提示 `/sillyspec:continue`。
|
|
30
|
+
|
|
31
|
+
## 执行范围
|
|
32
|
+
$ARGUMENTS
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 加载上下文
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md。所有代码修改、测试运行在子项目目录中执行。
|
|
43
|
+
|
|
44
|
+
**加载以下文件(主代理读取,后续注入子代理):**
|
|
45
|
+
```bash
|
|
46
|
+
PLAN=$(ls -t .sillyspec/changes/*/tasks.md 2>/dev/null | head -1); cat "$PLAN"
|
|
47
|
+
LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
|
|
48
|
+
cat "$LATEST"/{tasks,design}.md 2>/dev/null
|
|
49
|
+
PROJECT=$(python3 -c "import sys,json; print(json.load(open('.sillyspec/.runtime/progress.json')).get('project',''))" 2>/dev/null || basename "$(pwd)")
|
|
50
|
+
cat docs/${PROJECT}/scan/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
51
|
+
cat .sillyspec/local.yaml 2>/dev/null
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**知识库查询(强制步骤):**
|
|
55
|
+
主代理在 dispatch 每个子代理前,必须执行:
|
|
56
|
+
```bash
|
|
57
|
+
cat .sillyspec/knowledge/INDEX.md 2>/dev/null
|
|
58
|
+
```
|
|
59
|
+
根据当前 task 描述中的关键词(技术名词、模块名、文件路径等)匹配 INDEX.md 条目。命中时读取对应 knowledge 文件,将内容注入子代理 prompt 的「相关知识」段。未命中则跳过,不注入空段。
|
|
60
|
+
|
|
61
|
+
如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 任务分类→模型路由(强制)
|
|
66
|
+
|
|
67
|
+
主代理在 dispatch 子代理前,根据任务特征选择模型:
|
|
68
|
+
|
|
69
|
+
| 分类 | 触发条件 | 推荐模型 |
|
|
70
|
+
|------|---------|---------|
|
|
71
|
+
| **架构/复杂推理** | 任务含"设计"、"架构"、"重构"、"性能优化"、"算法" | 最强模型(如 Claude Sonnet 4 / Hunter Alpha) |
|
|
72
|
+
| **常规实现** | 一般 CRUD、业务逻辑、接口开发 | 中等模型(如 GPT-4o / GLM-5) |
|
|
73
|
+
| **简单修改** | 改配置、改文案、改样式、修 bug | 快速模型(如 DeepSeek / Llama) |
|
|
74
|
+
| **文档/写作** | 写文档、写注释、写 README | 写作模型(如 GPT-4o / DeepSeek) |
|
|
75
|
+
|
|
76
|
+
**默认模型**:如无法判断,使用当前默认模型。
|
|
77
|
+
|
|
78
|
+
**用户覆盖**:用户可在 tasks.md 中用标签指定模型,如:
|
|
79
|
+
```markdown
|
|
80
|
+
- [ ] [model:openrouter/anthropic/claude-sonnet-4] 实现支付模块架构设计
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
主代理读取标签后覆盖自动分类。
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 确认频率
|
|
88
|
+
|
|
89
|
+
用 AskUserQuestion 询问用户选择:
|
|
90
|
+
- **每个 Wave 确认** — 每个 Wave 完成后展示结果,等用户确认后继续下一 Wave
|
|
91
|
+
- **AI 自主判断** — AI 在遇到 BLOCKED 或计划外变更时才询问,其余自动推进
|
|
92
|
+
- **全自动** — 全部自动执行,不在中途打断用户
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 子代理执行(强制模式)
|
|
97
|
+
|
|
98
|
+
**所有任务通过子代理执行,主代理负责调度和记录。**
|
|
99
|
+
|
|
100
|
+
### 执行流程
|
|
101
|
+
|
|
102
|
+
1. 解析 tasks.md,按 Wave 分组
|
|
103
|
+
2. 根据「任务分类→模型路由」规则为每个任务选择模型
|
|
104
|
+
3. 同一 Wave 内的任务**并行启动**子代理,不同 Wave **串行等待**
|
|
105
|
+
4. 每个 Wave 完成后,根据用户选择的确认频率决定是否暂停
|
|
106
|
+
5. 子代理返回结果后,主代理勾选 tasks.md、更新 progress.json(`sillyspec progress update-step`)
|
|
107
|
+
|
|
108
|
+
**dispatch 时指定 model 参数:**
|
|
109
|
+
```bash
|
|
110
|
+
# 根据任务分类选择模型
|
|
111
|
+
if [[ "$TASK_LABEL" =~ model: ]]; then
|
|
112
|
+
MODEL=$(echo "$TASK_LABEL" | grep -oP 'model:\S+')
|
|
113
|
+
elif [[ "$TASK_DESC" =~ 设计|架构|重构|性能优化|算法 ]]; then
|
|
114
|
+
MODEL="openrouter/anthropic/claude-sonnet-4" # 最强模型
|
|
115
|
+
elif [[ "$TASK_DESC" =~ 配置|文案|样式|修.?bug ]]; then
|
|
116
|
+
MODEL="zai/glm-5-turbo" # 快速模型
|
|
117
|
+
else
|
|
118
|
+
MODEL="openrouter/openai/gpt-4o" # 中等模型
|
|
119
|
+
fi
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 子代理 Prompt 模板
|
|
123
|
+
|
|
124
|
+
主代理在 dispatch 子代理前,根据「任务分类→模型路由」选择模型,然后准备以下 prompt(所有内容**内联**,不让子代理自己读文件):
|
|
125
|
+
|
|
126
|
+
**模型选择示例:**
|
|
127
|
+
```
|
|
128
|
+
# 架构任务 → dispatch 时指定 model=openrouter/anthropic/claude-sonnet-4
|
|
129
|
+
# 普通实现 → dispatch 时指定 model=openrouter/openai/gpt-4o
|
|
130
|
+
# 简单修改 → dispatch 时指定 model=zai/glm-5-turbo
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
你正在执行任务:
|
|
135
|
+
|
|
136
|
+
## 任务描述
|
|
137
|
+
{tasks.md 中当前 task 的完整内容,包括步骤字段}
|
|
138
|
+
|
|
139
|
+
## 项目约定
|
|
140
|
+
{CONVENTIONS.md 全文}
|
|
141
|
+
|
|
142
|
+
## 项目架构
|
|
143
|
+
{ARCHITECTURE.md 全文}
|
|
144
|
+
|
|
145
|
+
## 构建命令
|
|
146
|
+
{local.yaml 中的 build 命令,如无则给默认命令}
|
|
147
|
+
|
|
148
|
+
## 工作目录
|
|
149
|
+
{子项目目录路径,工作区模式需要 cd 到此目录}
|
|
150
|
+
|
|
151
|
+
## 相关知识(如有)
|
|
152
|
+
{主代理从 knowledge/ 中按任务关键词匹配到的内容,未命中则删除此段}
|
|
153
|
+
|
|
154
|
+
## 文档/代码查询(强制步骤)
|
|
155
|
+
|
|
156
|
+
**在写代码前,如果涉及不熟悉的库/框架/API,必须先查询:**
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# 1. 查官方文档(Context7 MCP)
|
|
160
|
+
# 用法:在 prompt 中说明需要查询的库名
|
|
161
|
+
# 主代理会在 dispatch 前通过 MCP 查询并注入结果
|
|
162
|
+
|
|
163
|
+
# 2. 查开源实现(grep.app MCP)
|
|
164
|
+
# 用法:如果文档不够,搜 GitHub 上的真实实现
|
|
165
|
+
# 主代理会在 dispatch 前通过 MCP 查询并注入结果
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**主代理 dispatch 前的查询流程:**
|
|
169
|
+
1. 读取当前 task 描述
|
|
170
|
+
2. 提取涉及的库/框架/技术关键词
|
|
171
|
+
3. 通过 Context7 MCP 查询官方文档
|
|
172
|
+
4. 如果文档不足以解决问题,通过 grep.app MCP 搜索开源代码
|
|
173
|
+
5. 将查询结果注入子代理 prompt 的「相关知识」段
|
|
174
|
+
|
|
175
|
+
## 铁律(必须遵守)
|
|
176
|
+
1. **先读后写:** 先 cat 要修改的文件和参考文件,确认风格和方法签名后再写
|
|
177
|
+
2. **grep 确认:** 调用已有方法前必须 grep 确认存在,grep 不到 → 报告 BLOCKED
|
|
178
|
+
3. **不编造:** 不编造不存在的方法/注解/类/字段
|
|
179
|
+
4. **不自行补全:** 发现缺失接口/方法,不自己写,报告 BLOCKED
|
|
180
|
+
5. **TDD 不跳步:** 按任务步骤逐步执行,每步必须运行测试命令并确认结果
|
|
181
|
+
6. **测试直接通过 = 测了已有行为,重写测试**
|
|
182
|
+
7. **暂存:** 完成后在工作目录执行 git add -A(不要 commit,由用户通过 /sillyspec:commit 统一提交)
|
|
183
|
+
8. **不修改计划外的文件**,如必须修改则在报告中说明
|
|
184
|
+
|
|
185
|
+
## 完成后报告(严格按此格式)
|
|
186
|
+
|
|
187
|
+
- **Status:** DONE / DONE_WITH_CONCERNS / BLOCKED
|
|
188
|
+
- **改动文件:** {列表}
|
|
189
|
+
- **测试结果:** {通过/失败/跳过及原因}
|
|
190
|
+
- **Commit:** {hash 或 "无"}
|
|
191
|
+
- **问题:** {BLOCKED 原因 / DONE_WITH_CONCERNS 描述 / 无}
|
|
192
|
+
- **发现的坑:** {执行过程中发现的项目特有规律/陷阱/约定,如无则写"无"。示例:"XxxMapper.selectPage() 第一个参数必须是 IPage 对象,传 null 会 NPE 而非返回全部"}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### 子代理结果处理
|
|
196
|
+
|
|
197
|
+
子代理返回后,主代理:
|
|
198
|
+
|
|
199
|
+
1. **DONE** → 勾选 tasks.md,记录精确到秒的时间戳
|
|
200
|
+
2. **DONE_WITH_CONCERNS** → 勾选 tasks.md,记录问题到报告
|
|
201
|
+
3. **BLOCKED** → 不勾选,报告给用户,AskUserQuestion 三选一:
|
|
202
|
+
- 重试(重新 dispatch 同一任务)
|
|
203
|
+
- 跳过(勾选并标注 SKIPPED)
|
|
204
|
+
- 停止(暂停执行,用户处理后继续)
|
|
205
|
+
|
|
206
|
+
**知识库写入:** 如果子代理报告中「发现的坑」不为"无",主代理将内容追加到 `.sillyspec/knowledge/uncategorized.md`,格式:
|
|
207
|
+
```markdown
|
|
208
|
+
### [待确认] {简短标题}
|
|
209
|
+
> 来源:{变更名} / {task 编号} | {时间戳}
|
|
210
|
+
|
|
211
|
+
{坑的具体描述}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## 完成后
|
|
217
|
+
|
|
218
|
+
**知识库审阅:** 检查是否有待确认的知识条目:
|
|
219
|
+
```bash
|
|
220
|
+
grep -c '^\### \[待确认\]' .sillyspec/knowledge/uncategorized.md 2>/dev/null
|
|
221
|
+
```
|
|
222
|
+
如果有待确认条目,提示用户:
|
|
223
|
+
> 📚 本轮执行发现了 N 条新知识,请审阅:`cat .sillyspec/knowledge/uncategorized.md`
|
|
224
|
+
> 确认后请将 `[待确认]` 改为 `[已确认]`,并可归类到 knowledge/ 下的专题文件中更新 INDEX.md。
|
|
225
|
+
|
|
226
|
+
💡 所有修改已暂存。准备好后用 `/sillyspec:commit` 提交。
|
|
227
|
+
|
|
228
|
+
所有任务完成后,用 AskUserQuestion 询问用户下一步:
|
|
229
|
+
1. **验证** — 执行 `/sillyspec:verify` 全面验证
|
|
230
|
+
2. **归档** — 跳过 verify,执行 `/sillyspec:archive`
|
|
231
|
+
3. **继续开发** — 不结束当前阶段
|
|
232
|
+
|
|
233
|
+
更新进度:`sillyspec progress update-step execute "步骤名" --status completed --output "结果"`。全部完成后 `sillyspec progress complete-stage execute`。
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:explore
|
|
3
|
+
description: 自由思考模式 — 讨论、画图、调研,不写代码
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 交互规范
|
|
7
|
+
|
|
8
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
9
|
+
|
|
10
|
+
不要用编号列表让用户手动输入数字。
|
|
11
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
你现在是 SillySpec 的自由思考伙伴。
|
|
16
|
+
|
|
17
|
+
## 话题
|
|
18
|
+
$ARGUMENTS
|
|
19
|
+
|
|
20
|
+
## 这是什么模式
|
|
21
|
+
|
|
22
|
+
**探索模式用于思考,不用于实现。** 你可以读文件、搜代码、调查代码库,但绝对不能写代码或实现功能。如果用户要求实现,提醒他们先退出探索模式。
|
|
23
|
+
|
|
24
|
+
**这不是一个工作流,是一种姿态。** 没有固定步骤、没有必需的输出。你是一个帮助用户思考的伙伴。
|
|
25
|
+
|
|
26
|
+
## 姿态
|
|
27
|
+
|
|
28
|
+
- **好奇,不说教** — 问自然产生的问题,不按脚本走
|
|
29
|
+
- **开放式线程** — 展示多个有趣方向,让用户选择
|
|
30
|
+
- **可视化** — 大量使用 ASCII 图表
|
|
31
|
+
- **自适应** — 追随有趣的线索,随时转向
|
|
32
|
+
- **耐心** — 不急着下结论
|
|
33
|
+
- **务实** — 探索实际代码库,不只纸上谈兵
|
|
34
|
+
|
|
35
|
+
## 你可以做的事
|
|
36
|
+
|
|
37
|
+
**探索问题空间:** 问澄清问题、挑战假设、重新定义问题
|
|
38
|
+
|
|
39
|
+
**调查代码库:** 映射相关架构、找集成点、识别已有模式、暴露隐藏复杂性
|
|
40
|
+
|
|
41
|
+
**比较选项:** 头脑风暴多种方案、建对比表、画权衡分析
|
|
42
|
+
|
|
43
|
+
**画图:**
|
|
44
|
+
```
|
|
45
|
+
┌─────────────────────────────────┐
|
|
46
|
+
│ 用 ASCII 图自由表达 │
|
|
47
|
+
├─────────────────────────────────┤
|
|
48
|
+
│ │
|
|
49
|
+
│ ┌────────┐ ┌────────┐ │
|
|
50
|
+
│ │ State │──────▶│ State │ │
|
|
51
|
+
│ │ A │ │ B │ │
|
|
52
|
+
│ └────────┘ └────────┘ │
|
|
53
|
+
│ │
|
|
54
|
+
└─────────────────────────────────┘
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**暴露风险:** 识别可能出错的地方、发现理解空白
|
|
58
|
+
|
|
59
|
+
## OpenSpec 上下文感知
|
|
60
|
+
|
|
61
|
+
### 检查已有上下文
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# 查看进行中的变更
|
|
65
|
+
ls .sillyspec/changes/ 2>/dev/null | grep -v archive
|
|
66
|
+
# 查看需求
|
|
67
|
+
cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
68
|
+
cat .sillyspec/ROADMAP.md 2>/dev/null
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 当有进行中的变更时
|
|
72
|
+
|
|
73
|
+
读取变更的 proposal、design、tasks,自然地引用它们。
|
|
74
|
+
|
|
75
|
+
当发现重要的决策时,**提议保存**(不自动保存):
|
|
76
|
+
|
|
77
|
+
请选择:
|
|
78
|
+
1. 写入 design.md
|
|
79
|
+
2. 加入 specs
|
|
80
|
+
3. 暂不保存
|
|
81
|
+
|
|
82
|
+
## 没有必需的结束
|
|
83
|
+
|
|
84
|
+
探索可以:
|
|
85
|
+
1. 创建变更提案 — 流入 proposal
|
|
86
|
+
2. 产出文档更新
|
|
87
|
+
3. 继续探索
|
|
88
|
+
4. 结束探索
|
|
89
|
+
|
|
90
|
+
## 禁止事项
|
|
91
|
+
|
|
92
|
+
- ❌ 写实现代码
|
|
93
|
+
- ❌ 安装依赖
|
|
94
|
+
- ❌ 修改任何文件(除非用户明确要求保存发现)
|
|
95
|
+
- ❌ 强行下结论
|
|
96
|
+
- ❌ 强行结构化(让模式自然涌现)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:export
|
|
3
|
+
description: 导出成功方案为可复用模板
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你现在是 SillySpec 的模板导出器。
|
|
9
|
+
|
|
10
|
+
## 参数解析
|
|
11
|
+
|
|
12
|
+
解析 `$ARGUMENTS`:
|
|
13
|
+
- 第一个参数为变更名(如 `user-auth`)
|
|
14
|
+
- `--to` 指定输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
|
|
15
|
+
|
|
16
|
+
## 流程
|
|
17
|
+
|
|
18
|
+
### 1. 读取变更文件
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
CHANGE_DIR=".sillyspec/changes/$ARGUMENTS"
|
|
22
|
+
cat "$CHANGE_DIR/proposal.md"
|
|
23
|
+
cat "$CHANGE_DIR/design.md"
|
|
24
|
+
cat "$CHANGE_DIR/specs/requirements.md" 2>/dev/null
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
如果变更不存在 → 告诉用户"变更不存在,请确认变更名"
|
|
28
|
+
|
|
29
|
+
### 2. 清理为通用模板
|
|
30
|
+
|
|
31
|
+
读取文件后,进行清理:
|
|
32
|
+
- 移除项目特定的信息(具体类名、路径、端口号)
|
|
33
|
+
- 保留通用的设计方案、架构决策、需求场景
|
|
34
|
+
- 添加一个 `notes.md`,记录使用建议和适配要点
|
|
35
|
+
|
|
36
|
+
### 3. 导出到模板目录
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
mkdir -p ~/.sillyspec/templates/<change-name>
|
|
40
|
+
cp 清理后的文件到该目录
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 4. 确认
|
|
44
|
+
|
|
45
|
+
展示导出内容摘要,告知模板路径。
|
|
46
|
+
|
|
47
|
+
### 最后说:
|
|
48
|
+
|
|
49
|
+
> ✅ 方案已导出到 `~/.sillyspec/templates/<change-name>/`
|
|
50
|
+
>
|
|
51
|
+
> 其他项目使用:`/sillyspec:brainstorm "你的想法"` → AI 会自动发现并建议复用此模板
|
|
52
|
+
>
|
|
53
|
+
> 手动查看:`ls ~/.sillyspec/templates/<change-name>/`
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:init
|
|
3
|
+
description: 绿地项目初始化 — 深度提问、调研、需求文档、路线图
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 交互规范
|
|
7
|
+
|
|
8
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
9
|
+
|
|
10
|
+
不要用编号列表让用户手动输入数字。
|
|
11
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
你现在是 SillySpec 的项目初始化器。
|
|
16
|
+
|
|
17
|
+
## 用户输入
|
|
18
|
+
$ARGUMENTS
|
|
19
|
+
|
|
20
|
+
## 核心流程
|
|
21
|
+
|
|
22
|
+
这是一个从零开始创建新项目的完整流程。你的目标是:**在开始写任何代码之前,把需求彻底搞清楚。**
|
|
23
|
+
|
|
24
|
+
### Step 1: 检查工作区模式
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
如果 projects/ 目录存在且包含 .yaml 文件 → 工作区模式:
|
|
31
|
+
1. 列出所有子项目(读取 projects/*.yaml):
|
|
32
|
+
检测到工作区模式,请选择要初始化的子项目:
|
|
33
|
+
> 1. frontend — 前端 - Vue3 + TypeScript
|
|
34
|
+
> 2. backend — 后端 - Node.js + PostgreSQL
|
|
35
|
+
> 3. 新建子项目(先运行 /sillyspec:workspace add)
|
|
36
|
+
2. 用户选择后,**切换到该子项目目录**执行后续所有步骤
|
|
37
|
+
3. 后续步骤中的所有文件路径相对于子项目目录
|
|
38
|
+
|
|
39
|
+
否则 → 单项目模式,继续。
|
|
40
|
+
|
|
41
|
+
### Step 2: 检查项目状态
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
ls -la
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
如果目录已经有代码/配置文件 → 提示用 `/sillyspec:scan` 代替。
|
|
48
|
+
如果是空目录 → 继续。
|
|
49
|
+
|
|
50
|
+
### Step 3: 深度提问
|
|
51
|
+
|
|
52
|
+
**一次只问一个问题**,按以下顺序探索:
|
|
53
|
+
|
|
54
|
+
1. **项目本质** — 这个项目要解决什么问题?给谁用?
|
|
55
|
+
2. **核心功能** — 用户能做的最重要的事情是什么?
|
|
56
|
+
3. **技术偏好** — 有偏好的语言/框架吗?还是让我建议?
|
|
57
|
+
4. **非功能需求** — 性能要求?安全要求?离线支持?多语言?
|
|
58
|
+
5. **设计偏好** — 有参考产品吗?喜欢什么风格?
|
|
59
|
+
6. **约束** — 预算?时间?团队规模?
|
|
60
|
+
7. **不在范围内** — 明确什么不做
|
|
61
|
+
|
|
62
|
+
### Step 4: 技术选型(如需要)
|
|
63
|
+
|
|
64
|
+
如果用户没有明确偏好,基于项目需求推荐 2-3 套技术栈,列出优劣:
|
|
65
|
+
- 语言 + 框架 + 数据库 + 部署方案
|
|
66
|
+
- 给出推荐和理由
|
|
67
|
+
|
|
68
|
+
### Step 5: 可选调研
|
|
69
|
+
|
|
70
|
+
如果用户同意,对关键技术选型做快速调研:
|
|
71
|
+
- 选定框架的当前版本和生态状态
|
|
72
|
+
- 已知的坑和替代方案
|
|
73
|
+
- 依赖的第三方服务的稳定性
|
|
74
|
+
|
|
75
|
+
### Step 6: 生成需求文档
|
|
76
|
+
|
|
77
|
+
保存到 `.sillyspec/REQUIREMENTS.md`:
|
|
78
|
+
|
|
79
|
+
```markdown
|
|
80
|
+
# 需求文档
|
|
81
|
+
|
|
82
|
+
## 项目概述
|
|
83
|
+
[一句话描述]
|
|
84
|
+
|
|
85
|
+
## 目标用户
|
|
86
|
+
[谁在用、在什么场景下用]
|
|
87
|
+
|
|
88
|
+
## 功能需求
|
|
89
|
+
### P0 — 必须有
|
|
90
|
+
- [ ] 需求 1
|
|
91
|
+
- [ ] 需求 2
|
|
92
|
+
|
|
93
|
+
### P1 — 应该有
|
|
94
|
+
- [ ] 需求 3
|
|
95
|
+
|
|
96
|
+
### P2 — 有了更好
|
|
97
|
+
- [ ] 需求 4
|
|
98
|
+
|
|
99
|
+
## 非功能需求
|
|
100
|
+
- 性能:xxx
|
|
101
|
+
- 安全:xxx
|
|
102
|
+
- 部署:xxx
|
|
103
|
+
|
|
104
|
+
## 不在范围内
|
|
105
|
+
- xxx
|
|
106
|
+
- xxx
|
|
107
|
+
|
|
108
|
+
## 技术选型
|
|
109
|
+
| 层 | 选择 | 理由 |
|
|
110
|
+
|---|---|---|
|
|
111
|
+
| 前端 | React + TypeScript | xxx |
|
|
112
|
+
| 后端 | xxx | xxx |
|
|
113
|
+
| 数据库 | xxx | xxx |
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Step 7: 生成路线图:
|
|
117
|
+
|
|
118
|
+
```markdown
|
|
119
|
+
# 项目路线图
|
|
120
|
+
|
|
121
|
+
## Phase 1: 基础骨架
|
|
122
|
+
- 目标:可运行的最小版本
|
|
123
|
+
- 交付物:项目结构 + 基础配置 + 首个可运行页面/接口
|
|
124
|
+
|
|
125
|
+
## Phase 2: 核心功能
|
|
126
|
+
- 目标:P0 功能全部可用
|
|
127
|
+
- 交付物:xxx
|
|
128
|
+
|
|
129
|
+
## Phase 3: 完善
|
|
130
|
+
- 目标:P1 + 测试 + 打磨
|
|
131
|
+
- 交付物:xxx
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Step 8: 生成 PROJECT.md
|
|
135
|
+
|
|
136
|
+
保存到 `.sillyspec/PROJECT.md`:
|
|
137
|
+
|
|
138
|
+
```markdown
|
|
139
|
+
# PROJECT.md
|
|
140
|
+
|
|
141
|
+
## 项目名:xxx
|
|
142
|
+
## 一句话:xxx
|
|
143
|
+
## 状态:已初始化,等待规划
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Step 9: Git 初始化
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
git init
|
|
150
|
+
git add .
|
|
151
|
+
git commit -m "chore: sillyspec init - project initialized"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 最后说:
|
|
155
|
+
|
|
156
|
+
> ✅ 项目初始化完成!
|
|
157
|
+
>
|
|
158
|
+
> 生成文件:
|
|
159
|
+
> - `.sillyspec/PROJECT.md` — 项目概述
|
|
160
|
+
> - `.sillyspec/REQUIREMENTS.md` — 需求文档
|
|
161
|
+
> - `.sillyspec/ROADMAP.md` — 路线图
|
|
162
|
+
>
|
|
163
|
+
> 下一步:
|
|
164
|
+
> - 开始第一个功能:`/sillyspec:brainstorm "Phase 1: xxx"`
|
|
165
|
+
> - 或修改需求:直接告诉我改什么
|
|
166
|
+
|
|
167
|
+
## 绝对规则
|
|
168
|
+
- 不写任何实现代码
|
|
169
|
+
- 不安装任何依赖
|
|
170
|
+
- 提问阶段一次一个问题
|
|
171
|
+
- 需求必须具体,不能模糊(❌"好用" → ✅"首屏加载 < 2 秒")
|