skein-exec — exec 执行方法论
🔒 本 skill 是 skein-executor agent 的执行纪律单一真值源; agent .md 只留入参/回传/边界。
全局流程规则 (状态机/调度/优先级) 以 skein-flow/references/ 为单一真值源。
工作流四步
入参只给定位信息, 详细要求靠自己读。
1. 定工作目录 + 读详情
- workdir 硬门 (纯事实校验, 不推断运行模式): 开工前确认 workdir 存在且可写。不满足 → 立即
skein subtask fail <tid> <sid> --note "workdir <路径> 不存在/不可写" 并回传, 禁先改一堆文件再失败。
- 改动范围照入参的
worktree 字段, 不看路径长相: on → 改动只准落在 workdir 内, 主工作区不在范围; off → 在仓库根原地改, 无隔离。字段缺失按 off 处理并在回传里标注。
- 自跑
skein subtask show <tid> <sid> 读 desc/验收/depends_on/skills 等全部字段, 不靠 dispatch prompt 里的转述。
- 需 spec 约定佐证时先
skein-spec recall <关键词> (namespace×inclusion 记忆库, 只读)。
- 缺信息 (验收模糊/依赖不明) → needs 标
需要: <问题>, 不猜, 不直接问用户。
- 你被派时 subtask 已是 running 态 (main 用
skein claim / skein flow run 前置占槽), 不重复占槽、不跑 claim/start。
2. 定位现状
Grep / Glob 定位改动点 → Read 目标文件全文
- 读后写硬门: 改任一文件前先 Read (漏读即改 → Edit 失配或覆盖)。
3. 执行改动
按 subtask 详情写码 / 改配置 / 跑命令。
- 命令带
cwd 指向工作目录; 记 exit code + 结果摘要。
- 命令失败 →
[工具失败: <命令 + 原因>], 不把报错当成功继续。
- 踩到可复用约定 →
skein-spec sediment --namespace <ns> --inclusion always|auto --category <类目> --topic <主题> --title <规则标题> --body-file <正文.md> 落盘 (--title 与 --body-file 必填, 正文只认 --body-file 文件; 先 skein-spec sediment --help 核实参数)。
4. 自跑收尾 + 回传
按验收标准逐条对照 pass/fail。改过的脚本必须先验证可运行才准报 done (改 py 就跑 python3 <改过的脚本> --help; 改测试就跑 pytest 该文件), 跑不通一律 subtask fail 而非 done:
- 全 pass 且可运行 →
skein subtask done <tid> <sid>
- 有 fail/缺信息 →
skein subtask fail <tid> <sid> --note "<原因>"
- 附改动摘要 → 回传 JSON。
检查点
🛑 改动范围由入参 worktree 字段决定, 不由路径长相决定 — on 时止步于 workdir, 不含主工作区; off 时在仓库根原地改。
🛑 撤销改动只准 git checkout -- <自己改的具体文件> 逐个点名 — git reset --hard / git reset / git clean / git stash / git checkout . 不在允许范围内。原地态 (worktree 禁用) 下同一文件可能有并发或已完成 subtask 的改动, 全仓回滚会静默抹掉它们且无人发现。
🛑 done 前必须验证可运行 — 改过的脚本跑一次 (python3 <脚本> --help / pytest 该文件); 跑不通报 subtask fail 而非 done。报了 done 却 import 就崩, 会让下游 subtask 基于不存在的符号写代码。
🛑 读后写硬门 — 改前先 Read 目标文件。
🛑 允许自跑 subtask done/fail;create/start/check/finish/del 等生命周期命令归 main。
🛑 缺信息标 需要: <问题> 回传, 由 main 转达用户 — 无 AskUserQuestion 权限。
🛑 工具失败必标 [工具失败: <原因>] — 命令失败/Read 不存在时, 只标 [工具失败: <原因>], 不当成功结果返回 (原始错误输出不是有效结果)。
🛑 exec 不勾 PRD 验收 — 正式验收归 check。scope 外问题另建 task, 不塞进当前 subtask。
失败模式 (if-then 三段式)
| 触发 |
一线处理 |
兜底 |
| 验收标准不明 |
按最合理解释做 + note 标假设 |
判不准 → needs 标 需要:, subtask fail --note, status=需 main 介入 |
| 依赖文件/接口缺失 |
Grep 全仓找替代 |
找不到 → needs 标缺失依赖, subtask fail, 不臆造 |
| 命令报错 |
读报错定位, 修 1 次重跑 |
仍败 → [工具失败: <原因>] + subtask fail + status=需 main 介入 |
| 改动超出 subtask 范围 |
只做范围内, 范围外记 note |
needs 标「范围外发现」交 main 判是否拆新 subtask |
1---2name: skein-exec3description: SKEIN exec 执行方法论 — skein-executor agent 绑定 skill。单个 running subtask 的完整执行纪律: workdir 硬门 + worktree 改动范围判定 + 自读 subtask 详情 (不靠转述) + spec 约定佐证 + 读后写硬门 + done 前可运行验证 + JSON 回传格式。只做范围内事, 收尾仅 subtask done/fail。4---56# skein-exec — exec 执行方法论78> 🔒 本 skill 是 skein-executor agent 的执行纪律单一真值源; agent .md 只留入参/回传/边界。9> 全局流程规则 (状态机/调度/优先级) 以 skein-flow/references/ 为单一真值源。1011## 工作流四步1213入参只给定位信息, 详细要求靠自己读。1415### 1. 定工作目录 + 读详情1617- **workdir 硬门** (纯事实校验, 不推断运行模式): 开工前确认 workdir 存在且可写。不满足 → 立即 `skein subtask fail <tid> <sid> --note "workdir <路径> 不存在/不可写"` 并回传, 禁先改一堆文件再失败。18- **改动范围照入参的 `worktree` 字段, 不看路径长相**: `on` → 改动只准落在 workdir 内, 主工作区不在范围; `off` → 在仓库根原地改, 无隔离。字段缺失按 `off` 处理并在回传里标注。19- 自跑 `skein subtask show <tid> <sid>` 读 desc/验收/depends_on/skills 等全部字段, 不靠 dispatch prompt 里的转述。20- 需 spec 约定佐证时先 `skein-spec recall <关键词>` (namespace×inclusion 记忆库, 只读)。21- 缺信息 (验收模糊/依赖不明) → needs 标 `需要: <问题>`, 不猜, 不直接问用户。22- **你被派时 subtask 已是 running 态 (main 用 `skein claim` / `skein flow run` 前置占槽), 不重复占槽、不跑 claim/start**。2324### 2. 定位现状2526```27Grep / Glob 定位改动点 → Read 目标文件全文28```2930- **读后写硬门**: 改任一文件前先 Read (漏读即改 → Edit 失配或覆盖)。3132### 3. 执行改动3334按 subtask 详情写码 / 改配置 / 跑命令。3536- 命令带 `cwd` 指向工作目录; 记 exit code + 结果摘要。37- 命令失败 → `[工具失败: <命令 + 原因>]`, 不把报错当成功继续。38- 踩到可复用约定 → `skein-spec sediment --namespace <ns> --inclusion always|auto --category <类目> --topic <主题> --title <规则标题> --body-file <正文.md>` 落盘 (`--title` 与 `--body-file` 必填, 正文只认 `--body-file` 文件; 先 `skein-spec sediment --help` 核实参数)。3940### 4. 自跑收尾 + 回传4142按验收标准逐条对照 pass/fail。**改过的脚本必须先验证可运行才准报 done** (改 py 就跑 `python3 <改过的脚本> --help`; 改测试就跑 pytest 该文件), 跑不通一律 `subtask fail` 而非 `done`:4344- 全 pass 且可运行 → `skein subtask done <tid> <sid>`45- 有 fail/缺信息 → `skein subtask fail <tid> <sid> --note "<原因>"`46- 附改动摘要 → 回传 JSON。4748## 检查点4950🛑 **改动范围由入参 `worktree` 字段决定, 不由路径长相决定** — `on` 时止步于 workdir, 不含主工作区; `off` 时在仓库根原地改。51🛑 **撤销改动只准 `git checkout -- <自己改的具体文件>` 逐个点名** — `git reset --hard` / `git reset` / `git clean` / `git stash` / `git checkout .` 不在允许范围内。原地态 (worktree 禁用) 下同一文件可能有并发或已完成 subtask 的改动, 全仓回滚会静默抹掉它们且无人发现。52🛑 **done 前必须验证可运行** — 改过的脚本跑一次 (`python3 <脚本> --help` / pytest 该文件); 跑不通报 `subtask fail` 而非 `done`。报了 done 却 import 就崩, 会让下游 subtask 基于不存在的符号写代码。53🛑 **读后写硬门** — 改前先 Read 目标文件。54🛑 **允许自跑 `subtask done/fail`;`create/start/check/finish/del` 等生命周期命令归 main**。55🛑 **缺信息标 `需要: <问题>` 回传, 由 main 转达用户** — 无 AskUserQuestion 权限。56🛑 **工具失败必标 `[工具失败: <原因>]`** — 命令失败/Read 不存在时, 只标 `[工具失败: <原因>]`, 不当成功结果返回 (原始错误输出不是有效结果)。57🛑 **exec 不勾 PRD 验收** — 正式验收归 check。scope 外问题另建 task, 不塞进当前 subtask。5859## 失败模式 (if-then 三段式)6061| 触发 | 一线处理 | 兜底 |62| --------------------- | ---------------------------- | ------------------------------------------------------------------- |63| 验收标准不明 | 按最合理解释做 + note 标假设 | 判不准 → needs 标 `需要:`, subtask fail --note, status=需 main 介入 |64| 依赖文件/接口缺失 | Grep 全仓找替代 | 找不到 → needs 标缺失依赖, subtask fail, 不臆造 |65| 命令报错 | 读报错定位, 修 1 次重跑 | 仍败 → `[工具失败: <原因>]` + subtask fail + status=需 main 介入 |66| 改动超出 subtask 范围 | 只做范围内, 范围外记 note | needs 标「范围外发现」交 main 判是否拆新 subtask |