plugins/tools/skein/skills/skein-plan/SKILL.md
--- name: skein-plan description: planning 入口 + 单一真值源 (用户显式 /skein-plan 或被 skein-flow 委托)。新建 SKEIN task 做需求梳理: 判新旧 + create 登记 + 交互式 brainstorm + grill 硬门。产出 prd.md + design.md + 子任务/依赖 DAG 落 task.json。无参 = 停在 start 前 (只规划不执行); --continue = 返回工件路径供 flow 激活。 user-invocable: true argument-hint: "[任务描述]" arguments: "[任务描述]" model: opus effort: high --- # skein-plan — planning 入口 + 单一真值源 **planning 单一真值源**。判新旧 + 登记 + brainstorm + grill, 产出 planning 工件。**全程 main 同步前台** — brainstorm/grill 需逐问用户 (`As
npx skillsauth add lazygophers/ccplugin plugins/tools/skein/skills/skein-planInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
planning 单一真值源。判新旧 + 登记 + brainstorm + grill, 产出 planning 工件。全程 main 同步前台 — brainstorm/grill 需逐问用户 (AskUserQuestion), subagent 不能与用户对话, 故不派执行 subagent (纯信息调研按下方「research 判定门」决定是否派 skein-researcher 只读 subagent, 设计决策 main 汇总裁定)。
brainstorm 前先定是否需要派 skein-researcher, 按信号分档自动判 (非 main 临场感觉, 非等用户说):
| 档 | 信号 | 判定 | | --- | --- | --- | | 明确需 | 外部 API / 库选型 / 跨陌生子系统 / 现状代码未知 / 协议待定 | 自动派 researcher | | 明确不需 | 已知代码模式 / 用户给足信息 / 单熟悉子系统 / 单点改 | 跳 research, 直 brainstorm | | 保守灰区 | 倾向需但不明确 (可能涉未知但不确定) | 自动派 researcher (宁可调研) | | 激进灰区 | 倾向不需但拿不准 (看似简单但可能有坑) | AskUserQuestion 问用户是否需 research | | 兜底 | brainstorm 中 subtask 切不动 / depends_on 定不了 | 触发派 researcher 勘察代码再拆 |
派 researcher 后仍受「探索封顶」约束 — 够拆 subtask 即收敛, 禁无限深挖。
skein-researcher 的结论持久化在 .skein/task/<id>/research/ (dispatch 时把该 task id 作为 task-id 传给它)。planning 后续步骤 (brainstorm/PRD) 可复读这些笔记, 不必只靠回传摘要或记忆; task finish 归档时随 task 目录一并归档。
探索封顶, 尽早转异步 (禁无休止调研) — 登记 task 后目标是尽快填好 prd + subtask DAG 就转 exec 异步并行执行, 不是把时间耗在调研上。调研够用即停: 只查够拆出 subtask + 定依赖所需的信息 (选型/边界/接口), 达到能拆分即收敛, 禁为求完备无限深挖。拿不准的细节留成 subtask 的验收条或 需要: 交执行阶段解决, 而非 planning 阶段一次探完。能并行的尽早并行 — 早拆早派早完成, 是最短工期的前提。
🧠 smart zone / context hygiene (ask-matt 同源) — grill→prd→subtask DAG 三步应在同一不中断 context window 内完成 (中途不 compact), 保持思考连贯: grill 撑锐的需求直落 prd, prd 的边界直落 subtask 拆分, 一气呵成。接近 smart zone (~120k token) 上限 → 先收敛: 派 skein-researcher 异步卸载调研 / 把已收敛结论压进 prd.md/design.md 工件 (工件即跨 context 持久态) → 腾出窗口继续, 禁 degraded 状态硬推 (degraded 拆出的 subtask 质量不可靠)。
/skein-plan) → 跑完 planning 停在 start 前, task 留 planning 态, 交还控制权。禁 skein start / 禁 exec / check / finish — 执行归 skein-flow / /skein-exec。--continue (skein-flow 委托) → 跑完 planning 不停, 返回工件路径 (供 skein-flow 自接激活)。判新旧后先给任务定档, 决定 planning 力度 (仅路由启发, 非新增机器/字段):
| 档 | 判据 | 走法 |
| ------------ | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
| direct-fix | 单点微改, 在作用域边界表豁免范围内 | 不建 task, 直接改 |
| standard | 跨文件 / 多步, 单 task 可覆盖 | 常规 plan→exec→check→finish |
| heavy | 跨子系统 / 破坏式重构 / 多 task 并行 | 强化 grill + 可能拆多 task + 显式 depends_on。破坏式重构 (改契约/删旧路径/全站点一次改齐, 禁垫片) 见 references/breaking-refactor.md |
归一是默认, 但单 task 有复杂度天花板 —— 不是相关工作就无脑塞进一个 task 让它执行完所有事。planning 拆完 subtask 后 (subtask 数已知) 逐项对表, 命中任一即停下, 用 AskUserQuestion 提醒用户「本 task 过复杂, 建议拆成多个互相依赖的 task」:
| 天花板信号 | 判据 | | ---------------------- | -------------------------------------------------------------------- | | subtask 数超阈值 | 拆出 subtask > 8 (或 brainstorm 已看出会 > 8) | | 跨子系统 / 多改动面 | scope 跨 ≥2 子系统 / 多个独立改动面 (如前端+后端+DB+基建各成一摊) | | 工期 / 风险高 | 预估工期长 / 破坏式重构 (heavy 档) / 一处崩全批停 |
skein create 登记, 用 task 级 --deps (create 时) 或 skein deps <后置id> --set <前置id,...> (事后补) 串成互依赖 DAG (契约/基础 task 先, 消费方后)。原归一 task 作废或改造为其中一个。subtask add 拆 subtask DAG。AskUserQuestion 用户裁定为准。| 特征 | 判定 | | --------------------------------- | ------------------------------- | | 纯查询 / 文档阅读 / 问答 (无改动) | 豁免, 不建 task | | 单文件单处改, ≤20 行且位置已知 | 豁免 | | 跨 ≥2 文件 / 单文件多处 / 多步骤 | 必建 task | | 需外部调研 / 产出文档交付 | 必建 task (调研走 research) | | 边界模糊 | AskUserQuestion 问用户 (禁自行 inline 蒙混) |
AskUserQuestion 用户裁定。并入现有 → 更新其工件 + subtask add, 不新建。
create 之前 MUST 先 skein list --status open --json | jq -c '[.[] | {id,name,desc}]' (只取判归属所需字段省 token) 核对: 新请求与在列某 task 相关 (同目标/同模块/共享改动面/互为前置) → 并入该 task 补 subtask, 禁新建; 无相关项才 create。禁不查就 create、禁一直堆新 task (散 task 丢共享上下文一致性, 是头号反模式)。subtask add + --deps 连 subtask 级 DAG), 禁另开多 task。skein create 登记, task 级 --deps 排队 / 无序并行; active 集 ≤ 2 自动排队)。AskUserQuestion。默认倾向归一 —— 相关工作散成多 task 会丢共享上下文一致性 (类型/契约决策各 task 重推), 归一拆 subtask 才守住。skein create <id> --name <标题> --desc <一句话> [--deps ..] (<id>/--name/--desc 三者必填, 缺一 argparse 报错), <id> 须为可读描述性 slug (kebab-case, 如 order-create-api / user-auth; 兼作分支名 + 目录名), 禁 t01/t2 这类字母+数字代号 (脚本硬拒)。得工件目录。(create 自动刷看板)AskUserQuestion 拍板关键分歧。提问法内置 relentless interview 纪律 (插件内闭环, 原生自足; 装了 ask-matt /grill-with-docs / /grilling / /grill-me 可选增强, 未装原生兜底): 一次一问等反馈 (仅同源不依赖才批)、每问带 2-3 推荐答案让用户裁、事实自查 (Read/Grep)、决策交用户、共识才放行。
findings.md (收敛要点 + 关键依据/引用 + 未决项 需要:), research/ 存过程证据。main 收 researcher 回传后只读 findings.md 做跨主题复核/补漏, 不重读 research/ (增量写盘已省重复读)。findings.md = 调研最终交付物; 未调研 (未派 researcher) 则 findings.md/research/ 均不产出 (create 也不预建空壳)。AskUserQuestion 让用户确认/修正三段 (各给 2-3 推荐选项), 锁定 outcome (为谁/为何/价值) 再谈 solution。AskUserQuestion 问 (≤3 轮, 超限标「需求未定」停 planning); main 的假设强制写 prd.md「Assumptions」段, 禁埋正文 (防 Assumption Burial)。skein create <super-id> --kind supertask --name --desc, 占位 st2 实现) 作聚合层, 各小需求 skein create <child-id> --parent <super-id> 作 child task (深度限 2 层: supertask→task→subtask, child 不再生 child)。单 task 可覆盖的中小需求 → 不建 supertask, 走现有 single task 零增量。skein-grill 全轴对抗校对, 重点确认「用户想法 = PRD 写的」。弱点表交用户过, 补齐后放行。未跑 grill 禁进 exec; grill 未完成或弱点表未补齐 → 停在本步, 禁推进。
skein contract <id> --add "契约文本" (每条一次)skein contract <id> (列出核对)contract <id> --add "响应体 MUST 保持向后兼容, 禁删字段"; contract <id> --add "单文件改动禁超 200 行"。create 落 prd/design 双脚手架 (骨架标题, 本步填正文); findings.md 不预建, 仅真调研时由 researcher 边研边增量生成; 调度落 task.json (脚本):
prd.md (主入口) — 分章节: 目标 / 边界 / 验收标准 / 索引 (链 design/findings/task.json)。每章节自带 - [ ] TODO, 填完逐个勾掉; 未勾清 = planning 未收敛。验收标准章例外: planning 只把验收条目列全、保持 - [ ] 未勾 (它是 check 阶段的验证 todo), 勾选权归 check 阶段验证通过后回写, planning/exec 禁提前勾。prd 章节内容经脚本写, 禁裸 Edit prd.md: skein prd write <id> --type={目标|goal|边界|scope|验收标准|acceptance} --list "<多行文本>" (整章重建) / skein prd add <id> --type=... --list "..." (追加) / skein prd check <id> --type=acceptance --list "<条目文本>" (勾选, 验收逐条达标即勾)。脚本自动规范化 (目标/验收标准补 - [ ], 边界补 - )。design.md — 详细设计: 架构 / 数据流 / 取舍 / 技术选型 (不含调度图, 调度归 task.json) + 可能性分支 section。写入界限: 仅 planning 阶段写 (含 check 失败回 planning 的二次进入); exec / check / finish 阶段禁动 design.md。exec/check 发现方案需调整 → 回 planning 改 design 后重派, 禁就地改。
findings.md (仅真调研时生, researcher 边研边增量写) — 深度调研的收敛结论 + 依据/引用; 过程笔记存 research/ (researcher 写)。无调研不产出此文件, create 不预建。--deps 这一个契约 subtask、彼此不互挂依赖 → 契约一 done 即全批并行。这是压 makespan 的命门 —— 定协议是唯一真串行, 实现全并行。每个 subtask 含 depends_on + 验收 checklist, 逐条 skein subtask add <id> <sid> --name --desc [--agent --deps --check] 落进 task.json (sid/--name/--desc 三者必填, --agent 省略默认 skein-executor)。这是 exec 唯一调度真值源, 不写 mermaid 图文件。
AskUserQuestion 提醒用户拆成多个互依赖 task, 禁默默塞一个 task 执行完所有事。skein-dedup subagent 全量扫一次未完成 task: ① 查重归并 (同目标 / 同模块 / 共享改动面 / 互为前置, 自动 subtask add 迁入主 task + skein del 次 task); ② 给散落的相关 task 补执行序织成完整 DAG (自动 skein deps, 仅对现无 deps 的 pending task 补前置, 已有 deps 的不碰, 无关 task 保持孤立)。异步不阻塞: dedup 后台跑, exec 照常推进; 归并/补序自动写盘 (CLI 校验存在性/成环)。派它即放手, 不等其回传再 start。--continue → 返回工件路径给调用方; 无参 → 停在 start 前, 提示用户 /skein-exec <task> 或 /skein-flow 激活。create (含可读 slug)- [ ] TODO 全勾; 验收标准章条目列全即可, 保持未勾 — 勾选归 check 阶段)subtask add 落 task.json DAG)未勾满 = planning 未收敛, 禁 skein start / 禁转 exec。
exec 阶段的 DAG 靠 task.json 的 subtasks[].depends_on (经 skein subtask add --deps 登记), 非文件里的 mermaid 图。planning 未登记任何 subtask → skein start 硬拒 (无从调度)。subtask 拆分 + 依赖登记模板详见 references/dispatch-graph.md。
| 触发 | 一线修复 | 仍失败兜底 |
| -------------------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| brainstorm 用户答不出关键分歧 | 给 2-3 推荐选项让用户选 (非开放式问) | 仍答不出 → 标「需求未定」, 停在 planning, 禁 start |
| grill 弱点表 >3 轮不收敛 | 归并同源弱点, 一次批量 AskUserQuestion 裁完 | 仍发散 → scope 过大, 拆多 task (heavy 档 + depends_on) |
| subtask 粒度不清 / 无从定 depends_on | 回 brainstorm 补边界, 按可独立验收切 | 仍切不动 → 派 skein-researcher 勘察代码再拆 |
🔒 铁律: 未跑 grill / 未
subtask add任何子任务禁进 exec。
| 场景 | 正确做法 (❌ 反面) |
| ------------------------ | ------------------------------------------------------------------------------ |
| 定需求方案 | main brainstorm 逐问用户拍板 (❌ 凭空设计需求方案) |
| brainstorm 载体 | main 亲做交互式对话 (❌ 派 subagent 做 brainstorm — 它不能问用户) |
| 进 exec 前置 | 先过 grill 硬门再推进 (❌ 跳 grill 硬门进 exec) |
| 调度图/子任务落盘 | 写进 task.json (❌ 写进 md 文件) |
| start 前 | 至少 subtask add 一个子任务 (❌ 未 subtask add 任何子任务) |
| 用户确认/选择 | 用 AskUserQuestion (❌ 纯文本代替) |
| 无参调用 | 停在 start 前只 planning, 执行归 flow/go (❌ 跑 skein start 或 exec/check/finish) |
| plan 收尾 | 异步派 skein-dedup 查重织 DAG (❌ 忘派 — 重复 task 漏查归并 / 散 task 丢共享上下文) |
tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。