sillyspec 3.26.10 → 3.26.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/.claude/skills/sillyspec-archive/SKILL.md +85 -85
- package/.claude/skills/sillyspec-brainstorm/SKILL.md +114 -114
- package/.claude/skills/sillyspec-commit/SKILL.md +109 -109
- package/.claude/skills/sillyspec-continue/SKILL.md +45 -45
- package/.claude/skills/sillyspec-doctor/SKILL.md +76 -76
- package/.claude/skills/sillyspec-execute/SKILL.md +200 -200
- package/.claude/skills/sillyspec-explore/SKILL.md +95 -95
- package/.claude/skills/sillyspec-knowledge/SKILL.md +269 -269
- package/.claude/skills/sillyspec-plan/SKILL.md +148 -148
- package/.claude/skills/sillyspec-quick/SKILL.md +111 -111
- package/.claude/skills/sillyspec-resume/SKILL.md +68 -68
- package/.claude/skills/sillyspec-scan/SKILL.md +79 -79
- package/.claude/skills/sillyspec-state/SKILL.md +64 -64
- package/.claude/skills/sillyspec-status/SKILL.md +54 -54
- package/.claude/skills/sillyspec-verify/SKILL.md +83 -83
- package/.claude/skills/sillyspec-workspace/SKILL.md +169 -169
- package/.gitattributes +2 -0
- package/.husky/pre-push +20 -20
- package/.npmrc-publish +2 -0
- package/README.md +201 -201
- package/SKILL.md +90 -90
- package/package.json +39 -39
- package/packages/dashboard/dist/assets/index-Bq_Z2hne.js +7446 -7446
- package/packages/dashboard/dist/assets/index-O2W5RV4z.css +1 -1
- package/packages/dashboard/dist/index.html +16 -16
- package/packages/dashboard/package.json +25 -25
- package/packages/dashboard/server/executor.js +86 -86
- package/packages/dashboard/server/index.js +601 -601
- package/packages/dashboard/server/parser.js +526 -526
- package/src/change-risk-profile.js +254 -254
- package/src/classify-change.js +109 -109
- package/src/config-schema.js +310 -310
- package/src/contract-matrix.js +379 -379
- package/src/db.js +350 -350
- package/src/dispatch/backends/local-agent.js +155 -155
- package/src/dispatch/backends/sillyhub-mcp.js +245 -245
- package/src/dispatch/probe.js +210 -210
- package/src/dispatch/strategy.js +121 -121
- package/src/docs-check.js +131 -4
- package/src/doctor-diagnostics.js +711 -711
- package/src/endpoint-extractor.js +401 -401
- package/src/fs-atomic.js +69 -69
- package/src/git-helper.js +79 -79
- package/src/hooks/claude-pre-tool-use.cjs +125 -125
- package/src/hooks/worktree-guard.js +848 -848
- package/src/index.js +90 -8
- package/src/init.js +623 -623
- package/src/knowledge-match.js +130 -130
- package/src/local-detect.js +120 -120
- package/src/machine-interface.js +543 -543
- package/src/migrate.js +127 -127
- package/src/progress/change-registry.js +297 -260
- package/src/progress/consistency-doctor.js +355 -355
- package/src/progress/shared.js +36 -36
- package/src/progress/stage-machine.js +29 -1
- package/src/progress/step-store.js +261 -261
- package/src/progress.js +1131 -1127
- package/src/quicklog.js +693 -693
- package/src/review-tier.js +77 -77
- package/src/run/command.js +1385 -1364
- package/src/run/complete-handlers.js +1443 -1399
- package/src/run/complete.js +225 -24
- package/src/run/gates.js +755 -755
- package/src/run/prompt.js +761 -761
- package/src/run/quick-audit.js +155 -146
- package/src/run/shared.js +1268 -1215
- package/src/run/stage.js +487 -479
- package/src/scan-postcheck.js +371 -371
- package/src/setup.js +416 -416
- package/src/sillyhub-mcp/client.js +529 -529
- package/src/spec-sync.js +323 -319
- package/src/stage-contract.js +897 -897
- package/src/stage-review.js +549 -549
- package/src/stages/archive.js +155 -155
- package/src/stages/brainstorm-auto.js +236 -236
- package/src/stages/brainstorm.js +596 -597
- package/src/stages/cmd-existence.js +145 -145
- package/src/stages/doctor.js +371 -371
- package/src/stages/execute.js +1003 -1003
- package/src/stages/explore.js +34 -34
- package/src/stages/index.js +29 -29
- package/src/stages/knowledge.js +498 -498
- package/src/stages/plan-postcheck.js +1302 -1302
- package/src/stages/plan.js +625 -623
- package/src/stages/quick.js +151 -151
- package/src/stages/scan.js +607 -607
- package/src/stages/status.js +64 -64
- package/src/stages/verify.js +264 -264
- package/src/sync.js +1223 -1135
- package/src/task-review.js +1019 -1019
- package/src/verify-postcheck.js +1186 -1186
- package/src/workflow.js +600 -600
- package/src/worktree-apply.js +1213 -1136
- package/src/worktree-deps.js +353 -353
- package/src/worktree.js +1481 -1481
- package/templates/workflows/archive-impact.yaml +79 -79
- package/templates/workflows/scan-docs.yaml +132 -132
|
@@ -1,200 +1,200 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sillyspec:execute
|
|
3
|
-
description: 用于按 plan 执行代码实现。适合用户说"开始写代码、执行任务、跑 execute、开干"。按 plan.md 中的 Wave 和 Task 逐步实现,遵循 design.md 和模块文档。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 何时使用
|
|
7
|
-
|
|
8
|
-
- 用户说"开始写代码、执行任务、跑 execute、开干"
|
|
9
|
-
- 按 plan.md 的 Wave 分组和 Task 逐步实现代码
|
|
10
|
-
- 遵循 design.md + 模块文档 + CONVENTIONS.md
|
|
11
|
-
|
|
12
|
-
## 多变更说明
|
|
13
|
-
|
|
14
|
-
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。
|
|
15
|
-
|
|
16
|
-
## 步骤生命周期(所有阶段通用)
|
|
17
|
-
|
|
18
|
-
> `sillyspec execute` 是 `sillyspec run execute` 的顶层别名,两者等价。
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
sillyspec run execute # 输出当前步骤 prompt(首次自动创建 worktree)
|
|
22
|
-
sillyspec run execute --done --output "摘要" # 完成当前步骤(--input "用户原话" 记录输入)
|
|
23
|
-
sillyspec run execute --status # 查看阶段进度
|
|
24
|
-
sillyspec run execute --skip # 跳过可选步骤
|
|
25
|
-
sillyspec run execute --reset # 重置阶段(从头开始)
|
|
26
|
-
sillyspec run execute --reopen --from-step N # 重新打开已完成阶段修订(N=序号或名称)
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## 通用参数(所有阶段适用)
|
|
30
|
-
|
|
31
|
-
| 参数 | 说明 |
|
|
32
|
-
|---|---|
|
|
33
|
-
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
34
|
-
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
35
|
-
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
36
|
-
| `--skip-approval` | 跳过阶段转换/审批检查(不能跳产物校验 gate——review.json/文档产物硬校验仍在) |
|
|
37
|
-
|
|
38
|
-
## execute 特有:Worktree 隔离
|
|
39
|
-
|
|
40
|
-
- CLI 启动 execute 阶段时**自动创建 git worktree**,AI 不需要手动创建
|
|
41
|
-
- worktree 路径在步骤 prompt 中输出(`worktreePath`),后续子代理的 cwd 必须设为该路径
|
|
42
|
-
- **禁止跳过 worktree 或在主仓库直接写代码**
|
|
43
|
-
- worktree 创建失败时 CLI 报错退出,排查后重试
|
|
44
|
-
- worktree 创建/进入不依赖工作区 git 状态(dirty/未提交文件均可):直接按 CLI 输出的路径操作,无需自行检查 git 状态;`sillyspec worktree apply` 步以命令实际输出为准(apply 会校验 dirty,按输出处理)
|
|
45
|
-
- create 时若检测到 base 落后/分叉 `origin/<默认分支>`,CLI 会醒目报告(⚠️「落后 N 个 commit」+ 对齐命令),**不阻断** execute。看到此报告时评估是否提示用户先对齐 main,但**不要自行 fetch/ff**——对齐是用户/主仓库的显式动作
|
|
46
|
-
|
|
47
|
-
### 依赖门控(depsStatus)
|
|
48
|
-
|
|
49
|
-
`--done` 时 CLI 校验 worktree 的依赖状态(`depsStatus`)。不达标会阻断完成并提示:
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
# 修复依赖供给
|
|
53
|
-
sillyspec worktree doctor --fix --change <变更名>
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
`linked / installed / n/a` 放行;`missing / stale / failed / unknown` 阻断。Wave 内所有 task 声明 `no_deps_verify: true` 时可 opt-out。
|
|
57
|
-
|
|
58
|
-
### 符号影响面报告(「加载上下文」步硬门)
|
|
59
|
-
|
|
60
|
-
execute 前缀步「加载上下文」的 `--done` 会硬校验符号影响面报告:
|
|
61
|
-
|
|
62
|
-
- 路径:`{SPEC_ROOT}/changes/<变更名>/symbol-impact.md`(步骤 prompt 中会输出具体路径)。
|
|
63
|
-
- 要求:plan.md 中**每个 task-XX 都要有一行结论**——涉及签名级变更(构造函数参数/接口/DTO/方法签名增删改)就列变更类型 + 受影响调用点 + 是否在任务范围内;无签名级变更也要显式写「无签名级变更」。
|
|
64
|
-
- 文件缺失或未覆盖全部 task → `--done` 被阻断(进度不推进),补全后重跑即可。
|
|
65
|
-
|
|
66
|
-
### Task Review Gate
|
|
67
|
-
|
|
68
|
-
execute 完成时,每个 task 必须有 `review.json` 且 verdict 通过,否则阻断完成。**例外**:task 在 `tasks/task-XX.md` frontmatter 声明 `low_risk: true`(type-only / 机械迁移等低逻辑风险)时,缺 review.json 只发 warning 不阻断。`cannot_verify` 的 task 会写入 `verify-required-evidence.json`,由 verify 阶段消费。
|
|
69
|
-
|
|
70
|
-
#### task 级 review.json 契约(CLI 硬校验)
|
|
71
|
-
|
|
72
|
-
- 路径:`.sillyspec/.runtime/execute-runs/<execute-run-id>/tasks/task-XX/review.json`(目录不存在需先建)。
|
|
73
|
-
- `execute-run-id` 取自**第一次** `--done` prompt 输出(形如 `exec-2026-07-28-112833`),也写在 marker 文件 `.runtime/current-execute-run-id-<变更名>`。多个 run 时 gate 读最新 marker。
|
|
74
|
-
- 字段(`schemaVersion:1`):
|
|
75
|
-
|
|
76
|
-
```json
|
|
77
|
-
{
|
|
78
|
-
"schemaVersion": 1,
|
|
79
|
-
"task": "task-01",
|
|
80
|
-
"base": "<git-base-commit-hash>",
|
|
81
|
-
"head": "<git-head-commit-hash>",
|
|
82
|
-
"changedFiles": ["src/..."],
|
|
83
|
-
"specVerdict": "pass", // pass | fail | cannot_verify
|
|
84
|
-
"qualityVerdict": "pass", // pass | fail | cannot_verify
|
|
85
|
-
"reviewerNotes": "...",
|
|
86
|
-
"requiredEvidence": [] // cannot_verify 时必须非空
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
- `base` / `head` 必须是**真实 git commit**(`git rev-parse --verify`),否则判伪造并阻断。`changedFiles` 与实际 `git diff base..head` 完全不相交也判伪造。base..head 空 commit diff 但 working-tree 有未提交改动 → 视为有效改动(warning 不阻断)。
|
|
91
|
-
- 后端 router task 另需在 `.sillyspec/.runtime/contract-artifacts/<task-name>/endpoints.json` 写 API 端点清单(扫 `@router.get/post/...`)。
|
|
92
|
-
|
|
93
|
-
### Stage Review Gate(execute 末尾的 acceptance review.json)
|
|
94
|
-
|
|
95
|
-
execute 还有**第二道**独立的 stage 级审查:除逐 task review.json 外,整个 execute 阶段完成还需一个 stage 级 `review.json`(在 "完成确认"/acceptance 步骤产出)。CLI `Stage Review Gate` 硬校验其 schema 与 `docHash` 真实性。
|
|
96
|
-
|
|
97
|
-
- 路径:`.sillyspec/.runtime/stage-reviews/execute-review-<stage-review-run-id>/review.json`(目录可能不存在需手建;run-id 由该步 `--done` prompt 输出指定)。marker 文件 `.runtime/current-stage-review-run-id-execute-<变更名>`。
|
|
98
|
-
- **run-id / marker 由 CLI 自动生成注入**(review step prompt 渲染时 echo 完整目录路径 + 写 marker;撞 gate 报缺 review.json 时 gate 也 echo 完整路径 + 写 marker)。直接用 CLI 给的路径写 review.json,**勿手算 run-id(必须 `review-` 前缀)、勿手写 marker**。卡住时用 `sillyspec register-stage-review --change <名> --stage execute` 一步生成。
|
|
99
|
-
- 字段(`schemaVersion:1`,`reviewType=acceptance` —— 区别于 brainstorm/plan 的 `"design"`):
|
|
100
|
-
|
|
101
|
-
```json
|
|
102
|
-
{
|
|
103
|
-
"schemaVersion": 1,
|
|
104
|
-
"reviewType": "acceptance",
|
|
105
|
-
"reviewedFiles": ["changes/<变更名>/design.md", "<可选追加 git diff 涉及的源码>"],
|
|
106
|
-
"docHash": "<sha256(reviewedFiles[0] 文件内容,hex)>",
|
|
107
|
-
"specVerdict": "pass", // pass | fail | cannot_verify
|
|
108
|
-
"qualityVerdict": "pass", // pass | fail | cannot_verify
|
|
109
|
-
"checklist": [ // 扁平数组(非按层嵌套!),逐条对照 design 章节 + FR/NFR/决策核验代码
|
|
110
|
-
{ "item": "FR-01 排序", "result": "pass", "note": "..." } // result: pass | gap | fail
|
|
111
|
-
],
|
|
112
|
-
"requiredEvidence": [], // cannot_verify 时必填非空
|
|
113
|
-
"reviewerNotes": "..."
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
- `docHash` = `sha256(主审查文档内容)`(hex)—— execute 主审查文档是 `design.md`,即 `reviewedFiles[0]`。CLI 会重算 sha256 比对,不符判伪造(fail-closed);找不到主文档也 fail。**改 design.md 后须重算 docHash 再写**,可用 `sillyspec run execute --done` 触发的 prompt 注入版契约(运行时注入的 schema 表 + JSON 示例 + docHash 算法)逐字改值。
|
|
118
|
-
- `tier=independent` 时必须由独立 QA 子代理产出该 review.json(独立上下文,不共享实现者分析);`tier=self`(变更 ≤3 文件)降级为当前 agent 自审。
|
|
119
|
-
- **审查范围分级**(tier=independent 时省重复消耗):Task Review Gate 已产出 review.json 且 specVerdict/qualityVerdict 双 pass 的 task,QA 子代理只抽查(读 1-2 个核心 diff 文件抽验 reviewerNotes 与实际改动相符);fail/cannot_verify/缺失的 task 全量重审。三项始终必查:跨 task 交界、design.md 整体对照、组装行为(全量测试/构建/启动)——task review 只看单 task diff,覆盖不到这三项。
|
|
120
|
-
- 该 acceptance review 同时覆盖"代码审查"视角,后续代码审查步骤仅需轻量复审。
|
|
121
|
-
|
|
122
|
-
> 运行时 CLI 会把精确 schema 表 + 完整 JSON 示例 + docHash 算法注入到该步 prompt。本段为常驻摘要;以你实际收到的注入版契约为权威逐字模板。
|
|
123
|
-
|
|
124
|
-
## 派发模式(SillyHub MCP,可选)
|
|
125
|
-
|
|
126
|
-
`execute` Wave 内的子代理默认用本机 Agent tool 执行。若消费方配置了 SillyHub MCP(`local.yaml` 的 `mcp` 段写 `mcp.url` / `mcp.token`——可由 `sillyspec platform connect` 同源写入或手填;或环境变量 `SILLYHUB_MCP_URL` / `SILLYHUB_MCP_TOKEN` 作回退),Wave 步骤 prompt 运行时可能注入一段 SillyHub 派发指令——**出现就照其中的指令执行**(创建 mission / dispatch_worker / 轮询结果 / 本机兜底),**没出现就用本机 Agent tool**。未配置 MCP 时完全不注入,行为与无此机制一致。
|
|
127
|
-
|
|
128
|
-
可选:`sillyspec dispatch probe` 查看 SillyHub 是否可用。
|
|
129
|
-
|
|
130
|
-
## 跨仓 task(一个 change 改多个仓库)
|
|
131
|
-
|
|
132
|
-
单个 change 的 task 可以分散到主仓 + 多个跨仓仓实现(典型场景:dogfood 自指、monorepo 多包仓、共享库 + 调用方联合改造)。**单仓 change 不需要任何跨仓配置**(所有 task 不写 `repo:` 即走原流程,零回归)。
|
|
133
|
-
|
|
134
|
-
### 跨仓 task 配置(plan 阶段产出,execute 阶段消费)
|
|
135
|
-
|
|
136
|
-
- **task 卡片 `repo:` 字段**:跨仓 task 在 `tasks/task-NN.md` frontmatter 写 `repo: <key>`(缺省='main'=主仓 task,不写即主仓)。
|
|
137
|
-
- **local.yaml `repos:` 段**:在 `.sillyspec/local.yaml` 注册跨仓仓路径(`main` 不用注册,隐式=当前项目):
|
|
138
|
-
```yaml
|
|
139
|
-
repos:
|
|
140
|
-
shared-lib: ../shared-lib
|
|
141
|
-
tool-repo: C:/path/to/your/tool-repo
|
|
142
|
-
```
|
|
143
|
-
task 卡 `repo:` 引用的 key 必须在此注册,否则 execute 启动 fail-closed 阻断(跨仓 apply 走错仓=数据所有权事故,配置错误不降级)。
|
|
144
|
-
- **跨仓 task 的 `allowed_paths`**:指**相对跨仓仓根**的路径(非主仓根)。
|
|
145
|
-
|
|
146
|
-
### workdir 切换(execute 派发子代理时)
|
|
147
|
-
|
|
148
|
-
- **主仓 task**:子代理 workdir = 主仓 worktree 路径(CLI 自动创建的隔离 worktree)。
|
|
149
|
-
- **跨仓 task**:子代理 workdir = 跨仓仓根目录(**直接在跨仓仓主干工作区改+commit,不经主仓 worktree、不建分支**)。commit 到跨仓仓主干即落盘。
|
|
150
|
-
- 同一个 Wave 内允许混合主仓 + 跨仓 task。默认每 task 独立子代理(各传各的 workdir,Wave prompt 注入 per-task workdir 表,按表选);同 Wave 内满足**文件正交 / 无契约链 / 组 ≤3** 三个条件的 task 可合并为一个 batch 子代理串行实现——batch 只合并实现,task 审查、review.json 产出与 checkbox 勾选仍归主 agent(子代理返回后逐 task 进行)。
|
|
151
|
-
|
|
152
|
-
### 跨仓 task 的双锡点(CLI 写入,子代理不改)
|
|
153
|
-
|
|
154
|
-
- `base_commit`:CLI 派发跨仓 task 前实时 `git -C <跨仓仓根> rev-parse HEAD` 落盘到 task 卡 frontmatter(锁 base,防同 Wave 多 task 改同跨仓仓时 HEAD 推进致 diff 漂移)。
|
|
155
|
-
- `head_commit`:跨仓 task 子代理 commit 完成后、写 review.json / 勾选 checkbox **之前**,由你(主 agent)运行 `git -C <跨仓仓根> rev-parse HEAD` 把结果写入该 task 卡 frontmatter `head_commit:` 字段。
|
|
156
|
-
- review.json 的 `base`/`head` 取这两个锡点(非瞬时 HEAD)。
|
|
157
|
-
|
|
158
|
-
### 跨仓 task 的 review.json
|
|
159
|
-
|
|
160
|
-
- 路径仍写主仓 `.sillyspec/.runtime/execute-runs/<run-id>/tasks/task-XX/review.json`(review 统一存主仓)。
|
|
161
|
-
- 加 `repo: <key>` 字段标该 task 所属仓(缺省='main')。
|
|
162
|
-
- `base`/`head` 是**跨仓仓的 commit**(取 task 卡锡点),CLI 据此在跨仓仓根跑 git 校验。
|
|
163
|
-
|
|
164
|
-
### 跨仓 task apply = no-op
|
|
165
|
-
|
|
166
|
-
跨仓 task 的代码由子代理直接 commit 到跨仓仓主干(commit 即落地),主仓 `worktree apply` 对跨仓 task **不打 patch、不 cleanup**——只校验 `review.head` 是跨仓仓真实 commit。主仓 task 走原 apply 路径不变。
|
|
167
|
-
|
|
168
|
-
## worktree 子命令(execute 相关)
|
|
169
|
-
|
|
170
|
-
```bash
|
|
171
|
-
sillyspec worktree apply <变更名> # 校验并应用 worktree 变更到主工作区
|
|
172
|
-
sillyspec worktree apply <变更名> --check-only # 只检查不应用
|
|
173
|
-
sillyspec worktree assess <变更名> # 风险审计 + 自动 apply
|
|
174
|
-
sillyspec worktree list # 列出所有活跃 worktree
|
|
175
|
-
sillyspec worktree meta <变更名> # 读取 worktree meta.json
|
|
176
|
-
sillyspec worktree cleanup <变更名> # 清理 worktree
|
|
177
|
-
sillyspec worktree doctor [--fix] # 健康检查 + 修复
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
## 阶段流转
|
|
181
|
-
|
|
182
|
-
```
|
|
183
|
-
plan → execute → verify
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
execute 完成后(所有 Wave/task 完成 + Task Review Gate 通过),运行 `sillyspec run verify --change <变更名>` 验证。
|
|
187
|
-
|
|
188
|
-
### 批量完成(一次 --done 收尾)
|
|
189
|
-
|
|
190
|
-
当 `plan.md` 所有 task checkbox 已勾(人工勾或基于各 task `review.json` pass 由 CLI 自动勾)且代码客观核验通过(`checkExecuteCodeEvidence` 非"零变更")时,任一 execute `--done` 会**一次性补完所有剩余 step** 直达阶段完成,不必逐次 +1 推进。日志会打印 `🚀 execute 批量完成:plan 全勾 + 代码核验通过,一次性补完 N 个剩余 step`。条件不满足(plan 未全勾 / 代码零变更)时仍按单步推进,要求补 review 后重跑 `--done` 直至满足。
|
|
191
|
-
|
|
192
|
-
## 铁律
|
|
193
|
-
|
|
194
|
-
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
195
|
-
- 你是执行者不是设计师——按 plan 搬砖,发现 plan 不合理就停下来反馈,不自己改方案
|
|
196
|
-
- 子代理 cwd 必须用 CLI 输出的 worktreePath
|
|
197
|
-
- 完成后立即 `--done`,不跳过
|
|
198
|
-
|
|
199
|
-
## 用户指令
|
|
200
|
-
$ARGUMENTS
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:execute
|
|
3
|
+
description: 用于按 plan 执行代码实现。适合用户说"开始写代码、执行任务、跑 execute、开干"。按 plan.md 中的 Wave 和 Task 逐步实现,遵循 design.md 和模块文档。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 何时使用
|
|
7
|
+
|
|
8
|
+
- 用户说"开始写代码、执行任务、跑 execute、开干"
|
|
9
|
+
- 按 plan.md 的 Wave 分组和 Task 逐步实现代码
|
|
10
|
+
- 遵循 design.md + 模块文档 + CONVENTIONS.md
|
|
11
|
+
|
|
12
|
+
## 多变更说明
|
|
13
|
+
|
|
14
|
+
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。
|
|
15
|
+
|
|
16
|
+
## 步骤生命周期(所有阶段通用)
|
|
17
|
+
|
|
18
|
+
> `sillyspec execute` 是 `sillyspec run execute` 的顶层别名,两者等价。
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
sillyspec run execute # 输出当前步骤 prompt(首次自动创建 worktree)
|
|
22
|
+
sillyspec run execute --done --output "摘要" # 完成当前步骤(--input "用户原话" 记录输入)
|
|
23
|
+
sillyspec run execute --status # 查看阶段进度
|
|
24
|
+
sillyspec run execute --skip # 跳过可选步骤
|
|
25
|
+
sillyspec run execute --reset # 重置阶段(从头开始)
|
|
26
|
+
sillyspec run execute --reopen --from-step N # 重新打开已完成阶段修订(N=序号或名称)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 通用参数(所有阶段适用)
|
|
30
|
+
|
|
31
|
+
| 参数 | 说明 |
|
|
32
|
+
|---|---|
|
|
33
|
+
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
34
|
+
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
35
|
+
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
36
|
+
| `--skip-approval` | 跳过阶段转换/审批检查(不能跳产物校验 gate——review.json/文档产物硬校验仍在) |
|
|
37
|
+
|
|
38
|
+
## execute 特有:Worktree 隔离
|
|
39
|
+
|
|
40
|
+
- CLI 启动 execute 阶段时**自动创建 git worktree**,AI 不需要手动创建
|
|
41
|
+
- worktree 路径在步骤 prompt 中输出(`worktreePath`),后续子代理的 cwd 必须设为该路径
|
|
42
|
+
- **禁止跳过 worktree 或在主仓库直接写代码**
|
|
43
|
+
- worktree 创建失败时 CLI 报错退出,排查后重试
|
|
44
|
+
- worktree 创建/进入不依赖工作区 git 状态(dirty/未提交文件均可):直接按 CLI 输出的路径操作,无需自行检查 git 状态;`sillyspec worktree apply` 步以命令实际输出为准(apply 会校验 dirty,按输出处理)
|
|
45
|
+
- create 时若检测到 base 落后/分叉 `origin/<默认分支>`,CLI 会醒目报告(⚠️「落后 N 个 commit」+ 对齐命令),**不阻断** execute。看到此报告时评估是否提示用户先对齐 main,但**不要自行 fetch/ff**——对齐是用户/主仓库的显式动作
|
|
46
|
+
|
|
47
|
+
### 依赖门控(depsStatus)
|
|
48
|
+
|
|
49
|
+
`--done` 时 CLI 校验 worktree 的依赖状态(`depsStatus`)。不达标会阻断完成并提示:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# 修复依赖供给
|
|
53
|
+
sillyspec worktree doctor --fix --change <变更名>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`linked / installed / n/a` 放行;`missing / stale / failed / unknown` 阻断。Wave 内所有 task 声明 `no_deps_verify: true` 时可 opt-out。
|
|
57
|
+
|
|
58
|
+
### 符号影响面报告(「加载上下文」步硬门)
|
|
59
|
+
|
|
60
|
+
execute 前缀步「加载上下文」的 `--done` 会硬校验符号影响面报告:
|
|
61
|
+
|
|
62
|
+
- 路径:`{SPEC_ROOT}/changes/<变更名>/symbol-impact.md`(步骤 prompt 中会输出具体路径)。
|
|
63
|
+
- 要求:plan.md 中**每个 task-XX 都要有一行结论**——涉及签名级变更(构造函数参数/接口/DTO/方法签名增删改)就列变更类型 + 受影响调用点 + 是否在任务范围内;无签名级变更也要显式写「无签名级变更」。
|
|
64
|
+
- 文件缺失或未覆盖全部 task → `--done` 被阻断(进度不推进),补全后重跑即可。
|
|
65
|
+
|
|
66
|
+
### Task Review Gate
|
|
67
|
+
|
|
68
|
+
execute 完成时,每个 task 必须有 `review.json` 且 verdict 通过,否则阻断完成。**例外**:task 在 `tasks/task-XX.md` frontmatter 声明 `low_risk: true`(type-only / 机械迁移等低逻辑风险)时,缺 review.json 只发 warning 不阻断。`cannot_verify` 的 task 会写入 `verify-required-evidence.json`,由 verify 阶段消费。
|
|
69
|
+
|
|
70
|
+
#### task 级 review.json 契约(CLI 硬校验)
|
|
71
|
+
|
|
72
|
+
- 路径:`.sillyspec/.runtime/execute-runs/<execute-run-id>/tasks/task-XX/review.json`(目录不存在需先建)。
|
|
73
|
+
- `execute-run-id` 取自**第一次** `--done` prompt 输出(形如 `exec-2026-07-28-112833`),也写在 marker 文件 `.runtime/current-execute-run-id-<变更名>`。多个 run 时 gate 读最新 marker。
|
|
74
|
+
- 字段(`schemaVersion:1`):
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"schemaVersion": 1,
|
|
79
|
+
"task": "task-01",
|
|
80
|
+
"base": "<git-base-commit-hash>",
|
|
81
|
+
"head": "<git-head-commit-hash>",
|
|
82
|
+
"changedFiles": ["src/..."],
|
|
83
|
+
"specVerdict": "pass", // pass | fail | cannot_verify
|
|
84
|
+
"qualityVerdict": "pass", // pass | fail | cannot_verify
|
|
85
|
+
"reviewerNotes": "...",
|
|
86
|
+
"requiredEvidence": [] // cannot_verify 时必须非空
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
- `base` / `head` 必须是**真实 git commit**(`git rev-parse --verify`),否则判伪造并阻断。`changedFiles` 与实际 `git diff base..head` 完全不相交也判伪造。base..head 空 commit diff 但 working-tree 有未提交改动 → 视为有效改动(warning 不阻断)。
|
|
91
|
+
- 后端 router task 另需在 `.sillyspec/.runtime/contract-artifacts/<task-name>/endpoints.json` 写 API 端点清单(扫 `@router.get/post/...`)。
|
|
92
|
+
|
|
93
|
+
### Stage Review Gate(execute 末尾的 acceptance review.json)
|
|
94
|
+
|
|
95
|
+
execute 还有**第二道**独立的 stage 级审查:除逐 task review.json 外,整个 execute 阶段完成还需一个 stage 级 `review.json`(在 "完成确认"/acceptance 步骤产出)。CLI `Stage Review Gate` 硬校验其 schema 与 `docHash` 真实性。
|
|
96
|
+
|
|
97
|
+
- 路径:`.sillyspec/.runtime/stage-reviews/execute-review-<stage-review-run-id>/review.json`(目录可能不存在需手建;run-id 由该步 `--done` prompt 输出指定)。marker 文件 `.runtime/current-stage-review-run-id-execute-<变更名>`。
|
|
98
|
+
- **run-id / marker 由 CLI 自动生成注入**(review step prompt 渲染时 echo 完整目录路径 + 写 marker;撞 gate 报缺 review.json 时 gate 也 echo 完整路径 + 写 marker)。直接用 CLI 给的路径写 review.json,**勿手算 run-id(必须 `review-` 前缀)、勿手写 marker**。卡住时用 `sillyspec register-stage-review --change <名> --stage execute` 一步生成。
|
|
99
|
+
- 字段(`schemaVersion:1`,`reviewType=acceptance` —— 区别于 brainstorm/plan 的 `"design"`):
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"schemaVersion": 1,
|
|
104
|
+
"reviewType": "acceptance",
|
|
105
|
+
"reviewedFiles": ["changes/<变更名>/design.md", "<可选追加 git diff 涉及的源码>"],
|
|
106
|
+
"docHash": "<sha256(reviewedFiles[0] 文件内容,hex)>",
|
|
107
|
+
"specVerdict": "pass", // pass | fail | cannot_verify
|
|
108
|
+
"qualityVerdict": "pass", // pass | fail | cannot_verify
|
|
109
|
+
"checklist": [ // 扁平数组(非按层嵌套!),逐条对照 design 章节 + FR/NFR/决策核验代码
|
|
110
|
+
{ "item": "FR-01 排序", "result": "pass", "note": "..." } // result: pass | gap | fail
|
|
111
|
+
],
|
|
112
|
+
"requiredEvidence": [], // cannot_verify 时必填非空
|
|
113
|
+
"reviewerNotes": "..."
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
- `docHash` = `sha256(主审查文档内容)`(hex)—— execute 主审查文档是 `design.md`,即 `reviewedFiles[0]`。CLI 会重算 sha256 比对,不符判伪造(fail-closed);找不到主文档也 fail。**改 design.md 后须重算 docHash 再写**,可用 `sillyspec run execute --done` 触发的 prompt 注入版契约(运行时注入的 schema 表 + JSON 示例 + docHash 算法)逐字改值。
|
|
118
|
+
- `tier=independent` 时必须由独立 QA 子代理产出该 review.json(独立上下文,不共享实现者分析);`tier=self`(变更 ≤3 文件)降级为当前 agent 自审。
|
|
119
|
+
- **审查范围分级**(tier=independent 时省重复消耗):Task Review Gate 已产出 review.json 且 specVerdict/qualityVerdict 双 pass 的 task,QA 子代理只抽查(读 1-2 个核心 diff 文件抽验 reviewerNotes 与实际改动相符);fail/cannot_verify/缺失的 task 全量重审。三项始终必查:跨 task 交界、design.md 整体对照、组装行为(全量测试/构建/启动)——task review 只看单 task diff,覆盖不到这三项。
|
|
120
|
+
- 该 acceptance review 同时覆盖"代码审查"视角,后续代码审查步骤仅需轻量复审。
|
|
121
|
+
|
|
122
|
+
> 运行时 CLI 会把精确 schema 表 + 完整 JSON 示例 + docHash 算法注入到该步 prompt。本段为常驻摘要;以你实际收到的注入版契约为权威逐字模板。
|
|
123
|
+
|
|
124
|
+
## 派发模式(SillyHub MCP,可选)
|
|
125
|
+
|
|
126
|
+
`execute` Wave 内的子代理默认用本机 Agent tool 执行。若消费方配置了 SillyHub MCP(`local.yaml` 的 `mcp` 段写 `mcp.url` / `mcp.token`——可由 `sillyspec platform connect` 同源写入或手填;或环境变量 `SILLYHUB_MCP_URL` / `SILLYHUB_MCP_TOKEN` 作回退),Wave 步骤 prompt 运行时可能注入一段 SillyHub 派发指令——**出现就照其中的指令执行**(创建 mission / dispatch_worker / 轮询结果 / 本机兜底),**没出现就用本机 Agent tool**。未配置 MCP 时完全不注入,行为与无此机制一致。
|
|
127
|
+
|
|
128
|
+
可选:`sillyspec dispatch probe` 查看 SillyHub 是否可用。
|
|
129
|
+
|
|
130
|
+
## 跨仓 task(一个 change 改多个仓库)
|
|
131
|
+
|
|
132
|
+
单个 change 的 task 可以分散到主仓 + 多个跨仓仓实现(典型场景:dogfood 自指、monorepo 多包仓、共享库 + 调用方联合改造)。**单仓 change 不需要任何跨仓配置**(所有 task 不写 `repo:` 即走原流程,零回归)。
|
|
133
|
+
|
|
134
|
+
### 跨仓 task 配置(plan 阶段产出,execute 阶段消费)
|
|
135
|
+
|
|
136
|
+
- **task 卡片 `repo:` 字段**:跨仓 task 在 `tasks/task-NN.md` frontmatter 写 `repo: <key>`(缺省='main'=主仓 task,不写即主仓)。
|
|
137
|
+
- **local.yaml `repos:` 段**:在 `.sillyspec/local.yaml` 注册跨仓仓路径(`main` 不用注册,隐式=当前项目):
|
|
138
|
+
```yaml
|
|
139
|
+
repos:
|
|
140
|
+
shared-lib: ../shared-lib
|
|
141
|
+
tool-repo: C:/path/to/your/tool-repo
|
|
142
|
+
```
|
|
143
|
+
task 卡 `repo:` 引用的 key 必须在此注册,否则 execute 启动 fail-closed 阻断(跨仓 apply 走错仓=数据所有权事故,配置错误不降级)。
|
|
144
|
+
- **跨仓 task 的 `allowed_paths`**:指**相对跨仓仓根**的路径(非主仓根)。
|
|
145
|
+
|
|
146
|
+
### workdir 切换(execute 派发子代理时)
|
|
147
|
+
|
|
148
|
+
- **主仓 task**:子代理 workdir = 主仓 worktree 路径(CLI 自动创建的隔离 worktree)。
|
|
149
|
+
- **跨仓 task**:子代理 workdir = 跨仓仓根目录(**直接在跨仓仓主干工作区改+commit,不经主仓 worktree、不建分支**)。commit 到跨仓仓主干即落盘。
|
|
150
|
+
- 同一个 Wave 内允许混合主仓 + 跨仓 task。默认每 task 独立子代理(各传各的 workdir,Wave prompt 注入 per-task workdir 表,按表选);同 Wave 内满足**文件正交 / 无契约链 / 组 ≤3** 三个条件的 task 可合并为一个 batch 子代理串行实现——batch 只合并实现,task 审查、review.json 产出与 checkbox 勾选仍归主 agent(子代理返回后逐 task 进行)。
|
|
151
|
+
|
|
152
|
+
### 跨仓 task 的双锡点(CLI 写入,子代理不改)
|
|
153
|
+
|
|
154
|
+
- `base_commit`:CLI 派发跨仓 task 前实时 `git -C <跨仓仓根> rev-parse HEAD` 落盘到 task 卡 frontmatter(锁 base,防同 Wave 多 task 改同跨仓仓时 HEAD 推进致 diff 漂移)。
|
|
155
|
+
- `head_commit`:跨仓 task 子代理 commit 完成后、写 review.json / 勾选 checkbox **之前**,由你(主 agent)运行 `git -C <跨仓仓根> rev-parse HEAD` 把结果写入该 task 卡 frontmatter `head_commit:` 字段。
|
|
156
|
+
- review.json 的 `base`/`head` 取这两个锡点(非瞬时 HEAD)。
|
|
157
|
+
|
|
158
|
+
### 跨仓 task 的 review.json
|
|
159
|
+
|
|
160
|
+
- 路径仍写主仓 `.sillyspec/.runtime/execute-runs/<run-id>/tasks/task-XX/review.json`(review 统一存主仓)。
|
|
161
|
+
- 加 `repo: <key>` 字段标该 task 所属仓(缺省='main')。
|
|
162
|
+
- `base`/`head` 是**跨仓仓的 commit**(取 task 卡锡点),CLI 据此在跨仓仓根跑 git 校验。
|
|
163
|
+
|
|
164
|
+
### 跨仓 task apply = no-op
|
|
165
|
+
|
|
166
|
+
跨仓 task 的代码由子代理直接 commit 到跨仓仓主干(commit 即落地),主仓 `worktree apply` 对跨仓 task **不打 patch、不 cleanup**——只校验 `review.head` 是跨仓仓真实 commit。主仓 task 走原 apply 路径不变。
|
|
167
|
+
|
|
168
|
+
## worktree 子命令(execute 相关)
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
sillyspec worktree apply <变更名> # 校验并应用 worktree 变更到主工作区
|
|
172
|
+
sillyspec worktree apply <变更名> --check-only # 只检查不应用
|
|
173
|
+
sillyspec worktree assess <变更名> # 风险审计 + 自动 apply
|
|
174
|
+
sillyspec worktree list # 列出所有活跃 worktree
|
|
175
|
+
sillyspec worktree meta <变更名> # 读取 worktree meta.json
|
|
176
|
+
sillyspec worktree cleanup <变更名> # 清理 worktree
|
|
177
|
+
sillyspec worktree doctor [--fix] # 健康检查 + 修复
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## 阶段流转
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
plan → execute → verify
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
execute 完成后(所有 Wave/task 完成 + Task Review Gate 通过),运行 `sillyspec run verify --change <变更名>` 验证。
|
|
187
|
+
|
|
188
|
+
### 批量完成(一次 --done 收尾)
|
|
189
|
+
|
|
190
|
+
当 `plan.md` 所有 task checkbox 已勾(人工勾或基于各 task `review.json` pass 由 CLI 自动勾)且代码客观核验通过(`checkExecuteCodeEvidence` 非"零变更")时,任一 execute `--done` 会**一次性补完所有剩余 step** 直达阶段完成,不必逐次 +1 推进。日志会打印 `🚀 execute 批量完成:plan 全勾 + 代码核验通过,一次性补完 N 个剩余 step`。条件不满足(plan 未全勾 / 代码零变更)时仍按单步推进,要求补 review 后重跑 `--done` 直至满足。
|
|
191
|
+
|
|
192
|
+
## 铁律
|
|
193
|
+
|
|
194
|
+
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
195
|
+
- 你是执行者不是设计师——按 plan 搬砖,发现 plan 不合理就停下来反馈,不自己改方案
|
|
196
|
+
- 子代理 cwd 必须用 CLI 输出的 worktreePath
|
|
197
|
+
- 完成后立即 `--done`,不跳过
|
|
198
|
+
|
|
199
|
+
## 用户指令
|
|
200
|
+
$ARGUMENTS
|
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sillyspec:explore
|
|
3
|
-
description: 用于自由讨论、代码库调研、方案比较、画 ASCII 图、澄清问题。适合用户说"分析下、讨论下、看看怎么设计、先别写代码、调研一下、画个结构图、帮我再分析下"。只读,不修改文件,不实现功能。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 交互规范
|
|
7
|
-
|
|
8
|
-
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。** 不要用编号列表让用户手动输入数字。
|
|
9
|
-
|
|
10
|
-
## 话题
|
|
11
|
-
$ARGUMENTS
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
你现在是 SillySpec 的自由思考伙伴。
|
|
16
|
-
|
|
17
|
-
## 步骤生命周期(所有阶段通用)
|
|
18
|
-
|
|
19
|
-
> `sillyspec explore` 是 `sillyspec run explore` 的顶层别名,两者等价。explore 是 1 步只读阶段。
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
sillyspec run explore # 输出探索模式 prompt
|
|
23
|
-
sillyspec run explore --done --input "<用户话题>" --output "你的摘要" # 结束探索
|
|
24
|
-
sillyspec run explore --status # 查看阶段状态
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## 通用参数(所有阶段适用)
|
|
28
|
-
|
|
29
|
-
| 参数 | 说明 |
|
|
30
|
-
|---|---|
|
|
31
|
-
| `--change <名>` | 指定变更名(多活跃变更时) |
|
|
32
|
-
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
33
|
-
|
|
34
|
-
## 这是什么模式
|
|
35
|
-
|
|
36
|
-
**探索模式用于思考,不用于实现。** 你可以读文件、搜代码、调查代码库,但绝对不能写代码或实现功能。如果用户要求实现,提醒他们先退出探索模式。
|
|
37
|
-
|
|
38
|
-
**这不是一个工作流,是一种姿态。** 没有固定步骤、没有必需的输出。你是一个帮助用户思考的伙伴。
|
|
39
|
-
|
|
40
|
-
## 姿态
|
|
41
|
-
|
|
42
|
-
- **好奇,不说教** — 问自然产生的问题,不按脚本走
|
|
43
|
-
- **开放式线程** — 展示多个有趣方向,让用户选择
|
|
44
|
-
- **可视化** — 大量使用 ASCII 图表
|
|
45
|
-
- **自适应** — 追随有趣的线索,随时转向
|
|
46
|
-
- **耐心** — 不急着下结论
|
|
47
|
-
- **务实** — 探索实际代码库,不只纸上谈兵
|
|
48
|
-
|
|
49
|
-
## 你可以做的事
|
|
50
|
-
|
|
51
|
-
**探索问题空间**:问澄清问题、挑战假设、重新定义问题
|
|
52
|
-
|
|
53
|
-
**调查代码库**:映射相关架构、找集成点、识别已有模式、暴露隐藏复杂性
|
|
54
|
-
|
|
55
|
-
**比较选项**:头脑风暴多种方案、建对比表、画权衡分析
|
|
56
|
-
|
|
57
|
-
**画图**:
|
|
58
|
-
```
|
|
59
|
-
┌─────────────────────────────────┐
|
|
60
|
-
│ 用 ASCII 图自由表达 │
|
|
61
|
-
├─────────────────────────────────┤
|
|
62
|
-
│ ┌────────┐ ┌────────┐ │
|
|
63
|
-
│ │ State │──────▶│ State │ │
|
|
64
|
-
│ │ A │ │ B │ │
|
|
65
|
-
│ └────────┘ └────────┘ │
|
|
66
|
-
└─────────────────────────────────┘
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
**暴露风险**:识别可能出错的地方、发现理解空白
|
|
70
|
-
|
|
71
|
-
## OpenSpec 上下文感知
|
|
72
|
-
|
|
73
|
-
### 检查已有上下文
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
ls .sillyspec/changes/ 2>/dev/null | grep -v archive # 进行中的变更
|
|
77
|
-
cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
78
|
-
cat .sillyspec/ROADMAP.md 2>/dev/null
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### 当有进行中的变更时
|
|
82
|
-
|
|
83
|
-
读取变更的 proposal、design、tasks,自然地引用它们。发现重要决策时**提议保存**(不自动保存)。
|
|
84
|
-
|
|
85
|
-
## 没有必需的结束
|
|
86
|
-
|
|
87
|
-
探索可以:创建变更提案 → 流入 proposal / 产出文档更新 / 继续探索 / 结束探索。
|
|
88
|
-
|
|
89
|
-
## 禁止事项
|
|
90
|
-
|
|
91
|
-
- ❌ 写实现代码
|
|
92
|
-
- ❌ 安装依赖
|
|
93
|
-
- ❌ 修改任何文件(除非用户明确要求保存发现)
|
|
94
|
-
- ❌ 强行下结论
|
|
95
|
-
- ❌ 强行结构化(让模式自然涌现)
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:explore
|
|
3
|
+
description: 用于自由讨论、代码库调研、方案比较、画 ASCII 图、澄清问题。适合用户说"分析下、讨论下、看看怎么设计、先别写代码、调研一下、画个结构图、帮我再分析下"。只读,不修改文件,不实现功能。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 交互规范
|
|
7
|
+
|
|
8
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。** 不要用编号列表让用户手动输入数字。
|
|
9
|
+
|
|
10
|
+
## 话题
|
|
11
|
+
$ARGUMENTS
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
你现在是 SillySpec 的自由思考伙伴。
|
|
16
|
+
|
|
17
|
+
## 步骤生命周期(所有阶段通用)
|
|
18
|
+
|
|
19
|
+
> `sillyspec explore` 是 `sillyspec run explore` 的顶层别名,两者等价。explore 是 1 步只读阶段。
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
sillyspec run explore # 输出探索模式 prompt
|
|
23
|
+
sillyspec run explore --done --input "<用户话题>" --output "你的摘要" # 结束探索
|
|
24
|
+
sillyspec run explore --status # 查看阶段状态
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 通用参数(所有阶段适用)
|
|
28
|
+
|
|
29
|
+
| 参数 | 说明 |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `--change <名>` | 指定变更名(多活跃变更时) |
|
|
32
|
+
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
33
|
+
|
|
34
|
+
## 这是什么模式
|
|
35
|
+
|
|
36
|
+
**探索模式用于思考,不用于实现。** 你可以读文件、搜代码、调查代码库,但绝对不能写代码或实现功能。如果用户要求实现,提醒他们先退出探索模式。
|
|
37
|
+
|
|
38
|
+
**这不是一个工作流,是一种姿态。** 没有固定步骤、没有必需的输出。你是一个帮助用户思考的伙伴。
|
|
39
|
+
|
|
40
|
+
## 姿态
|
|
41
|
+
|
|
42
|
+
- **好奇,不说教** — 问自然产生的问题,不按脚本走
|
|
43
|
+
- **开放式线程** — 展示多个有趣方向,让用户选择
|
|
44
|
+
- **可视化** — 大量使用 ASCII 图表
|
|
45
|
+
- **自适应** — 追随有趣的线索,随时转向
|
|
46
|
+
- **耐心** — 不急着下结论
|
|
47
|
+
- **务实** — 探索实际代码库,不只纸上谈兵
|
|
48
|
+
|
|
49
|
+
## 你可以做的事
|
|
50
|
+
|
|
51
|
+
**探索问题空间**:问澄清问题、挑战假设、重新定义问题
|
|
52
|
+
|
|
53
|
+
**调查代码库**:映射相关架构、找集成点、识别已有模式、暴露隐藏复杂性
|
|
54
|
+
|
|
55
|
+
**比较选项**:头脑风暴多种方案、建对比表、画权衡分析
|
|
56
|
+
|
|
57
|
+
**画图**:
|
|
58
|
+
```
|
|
59
|
+
┌─────────────────────────────────┐
|
|
60
|
+
│ 用 ASCII 图自由表达 │
|
|
61
|
+
├─────────────────────────────────┤
|
|
62
|
+
│ ┌────────┐ ┌────────┐ │
|
|
63
|
+
│ │ State │──────▶│ State │ │
|
|
64
|
+
│ │ A │ │ B │ │
|
|
65
|
+
│ └────────┘ └────────┘ │
|
|
66
|
+
└─────────────────────────────────┘
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**暴露风险**:识别可能出错的地方、发现理解空白
|
|
70
|
+
|
|
71
|
+
## OpenSpec 上下文感知
|
|
72
|
+
|
|
73
|
+
### 检查已有上下文
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
ls .sillyspec/changes/ 2>/dev/null | grep -v archive # 进行中的变更
|
|
77
|
+
cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
78
|
+
cat .sillyspec/ROADMAP.md 2>/dev/null
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 当有进行中的变更时
|
|
82
|
+
|
|
83
|
+
读取变更的 proposal、design、tasks,自然地引用它们。发现重要决策时**提议保存**(不自动保存)。
|
|
84
|
+
|
|
85
|
+
## 没有必需的结束
|
|
86
|
+
|
|
87
|
+
探索可以:创建变更提案 → 流入 proposal / 产出文档更新 / 继续探索 / 结束探索。
|
|
88
|
+
|
|
89
|
+
## 禁止事项
|
|
90
|
+
|
|
91
|
+
- ❌ 写实现代码
|
|
92
|
+
- ❌ 安装依赖
|
|
93
|
+
- ❌ 修改任何文件(除非用户明确要求保存发现)
|
|
94
|
+
- ❌ 强行下结论
|
|
95
|
+
- ❌ 强行结构化(让模式自然涌现)
|