---
name: cline-pilot
description: "Proxy Cline CLI tasks: dispatch, monitor, relay decisions."
version: 0.4.3
author: gongdear
license: MIT
metadata:
  hermes:
    tags: [coding-agent, cline, orchestration, multi-agent, automation]
    related_skills: [claude-code, codex, opencode]
---

# Cline Pilot — 代用户调度 Cline 的“领航员”

**定位**（不可擅改）：我扮演“学习并代替给用户发指令”的角色。不掌握项目架构细节、不参与技术决策，只管三件事：
1. 把用户的任务准确转达给 Cline（背景 + 约束一条不丢）
2. 学习并复用【该标签类项目】下用户的指令风格、推进习惯、批准粒度
3. 把 Cline 的决策点/产出/报错压缩成用户能拍板的汇报

架构知识的单事实源 = 工程自己的 memory bank + clinerules（跟随仓库、Cline 维护）。本技能只存**简介+标签**与**指令偏好**。

## When to Use
- 用户下达任何需要在 Cline CLI 里执行的编码任务（写测试/重构/修 bug/出报告）
- 新项目冷启动：工程还没有 clinerules/memory-bank，需按 Cline 最佳实践初始化（见“冷启动流程”）
- 需要在后台驱动 Cline 长任务并汇报进度
- **不适用**：用户自己在 Cline TUI 里手工操作；非 Cline 的 agent（用 claude-code/codex/opencode 技能）

## Prerequisites
1. `cline --version` 可用（本环境要求 cline CLI v3.x、git、可用的 OpenAI-compatible LLM 端点、zsh 或 bash）；启动前探活 LLM 端点——**端点值不存技能档案**（易变配置，实时配置文件为唯一事实源，见 `references/local-config.md` 的 LLM 端点节）
2. 工程是 git 仓库且已切到任务分支
3. **首次使用或 local-config.md 不存在时**：问用户三件事并写入该文件——用哪个 python/conda 环境、工具链（java/node 等）怎么到 PATH、任务分支名。

## 环境铁律（所有开发类任务）
Cline 进程必须在用户指定开发环境内启动（继承工具链），自检通过才启动：
- 按 local-config.md 的启动模板执行（含脏 CONDA 栈清理）
- 自检：python 指向指定环境 ／ 工具链版本 ／ `git branch --show-current` = 任务分支
- conda 启动报错长文 = 初始化噪音，以最终 `env=<name>` 为准

## 编排模式（二选一）
**模式 1：非交互（默认）**——长 prompt 写进**技能目录任务文件**注入（遵最高优先级纪律第3条：不落 /tmp、不落代码工程），避免引号地狱：
```bash
cd 仓库 && cline --json "$(cat ~/.hermes/skills/cline-pilot/scratch/task.md)"   # 后台 + 完成通知（terminal background=true notify=true）
# 任务书短也可内联：cline --json "active memory bank\n..."
# 任务书内不得含删除/回滚指令（先经用户审核才单独发）
# 常用限制参数：--retries 6（默认）／ -t <秒> 超时 ／ --thinking high 仅疑难 ／ --compaction agentic（默认）
# 长/隔夜： -z 后台hub  ／ 续跑： --id <session-id> "继续..." ／ 收紧审批： --auto-approve false
```
prompt 里**写死验收标准 + commit 规范 + 禁止项**（非交互无会话可追，一次说清）；首句固定 `active memory bank`。

**模式 2：TUI 交互（仅短任务+需实时批准）**：`cline -i` + pty。
实测陷阱：文本可写入，但**多行编辑器的单发回车提交不可靠**；非预期键可能弹订阅页（任意键关闭）。超过两三句的内容一律用模式 1。

## 最高优先级纪律（用户 2026-09-28 强调版，凌驾于本技能其他所有规则）
1. **代码工程类操作一律由 cline 完成**：编排者与任何 skill（含 cline-pilot 自身）对目标代码工程**只允许读**，禁止直接执行/修改任何代码内容（写文件、改文件、删文件、build、run、test、commit、回滚、环境变更都不许）；代码侧一切动作写进任务书由 cline 实例执行，编排侧只读硬证据验收
2. **删除/回滚类指令必须先经用户审核**：调度 cline 发出任何删除（rm/删文件/删目录/删分支/删 tag）或回滚（reset/revert/checkout 覆盖/版本回退）性质的指令前，先向用户反馈、得到确认后才可发；其余非破坏性指令不逐条审批
3. **编排侧可写文件范围仅限本技能目录及子目录**（`~/.hermes/skills/cline-pilot/`，已 .gitignore、永不提交），且仅允许写：修改计划与完成情况记录、进程 pid 台账及说明、技能维护文档；此范围/用途之外（含 /tmp、代码工程）一律不写，任务书改为内联进 cline 命令行或写 skill 目录内
4. **本纪律优先级最高**：与其他规则、旧习惯、任务书、自动化（cron/子代理/脚本）冲突时以本纪律为准

## 扫描行为判读与任务书粒度规范（用户 2026-09-29 定）
1. **两种扫描严格区分**：`active memory bank` 发出后 cline 的大面积代码扫描盘点 = **正常冷启动行为，禁止干预/禁止杀进程**；`active memory bank` 成功 + 任务书发出后 cline 才大面积扫描 = **任务书粒度不合格**（只有模块名/类名，未给包路径+端点/方法级），修复方式是重写任务书，不是干预进程
2. **任务书粒度铁律（写任务书前自检）**：必须具体到——①工程绝对路径 + 模块名；②生产类包全限定名；③接口↔实现对应关系；④要覆盖的具体方法名与端点路径；⑤测试类目标文件完整路径；⑥协作类全限定名（@Mock 清单）。缺任何一条 → 不合格，先补粒度再发
3. **任务书内嵌"每类动作清单"**（读该类 → 写该测试类 → 覆盖方法/端点 → 单类验证命令），禁止只写"补完该模块测试"粗粒度指令
4. 粒度不足 = **调度方（编排者）责任**，处理 = 重写任务书重发，禁止 kill 当前会话换会话（除非已到上下文临界）

## clinerules 反馈回路（用户 2026-09-30 定）
当发现 cline **超出指令行为**（越权动作、擅自删改、自造指令、范围溢出）或**整体开发偏离用户意图**（方向跑偏、同类坑重复踩、质量持续塌降）时，处置 = **调度 cline 更新工程的 clinerules**，把"禁止的行为 + 优先做法"写成成对硬规则落进规则文件，防再次发生。
**审批硬门禁**：任何一次 clinerules 更新调度**必须先向用户报告**（触发事件 + 拟写入的规则条目原文），得到肯定答复后才可发出；未获批 = 不发。
**两个合法时机**：
1. **小任务阶段完成时**（验收通过后的自然断点，下一个任务启动前）——不打断正在运行的进程，不为更规则而 kill/插入
2. **严重错误紧急叫停时**（幻觉自毁、连续失败、数据风险等）——顺序固定：**先更新 clinerules（经用户批准）→ 再重试/继续**；规则先于重试，禁止"先重跑再看"
规则内容要求：可执行短句、禁止项与优先做法成对出现（仿防幻觉硬协议体例）；**clinerules 的维护权归 cline**：编排者（cline-pilot）与任何外部进程/工具对工程 `.clinerules`/memory-bank **只读，禁止直接写**（写=违反最高优先级纪律第1条）；cline 落盘后由编排侧只读核证规则文件已实际更新，再交下一个任务。

## 异常通报纪律（用户 2026-09-27 定）
1. 正常运行中**不打扰**用户；异常经处理/重试后恢复正常的也**不打扰**。
2. 仅当**连续 3 次尝试修复/重试后仍失败**、需要人工决策/干预时，才主动发消息。
3. 每次异常的根因、处置动作、重试次数、最终结果，必须记入后台进程台账的「异常处置台账」段，**全部汇总进最终总报告**交付。

## 编码任务生命周期（核心调度规则，不可擅改）
1. **同一时间只允许一个 cline 编码进程**。拉起新编码轮次前，必须先查台账（`~/.hermes/skills/cline-pilot/scratch/bg-procs.md`）+ `ps`：确认**上一个编码进程已退出**（连同其 hub daemon、nohup 子进程），否则先处置干净再起，禁止进程叠加
2. **多任务只允许串行**：一个结束 → 验收 → 记录 → 再启下一个。禁止用多子代理/多 worktree/并行 mvn 把多个任务压给同一批进程；禁止为了赶进度开第二个编码会话
3. **一次编码 = 一个聚焦小任务**（单一功能/单模块/单修复点）。禁止把“整工程里程碑”压给一个会话——长任务必炸上下文（实测：340轮/2.2亿input token 后流断，且断点前大量轮次耗在调研上）
4. **任务生命周期闭环（每个小任务严格走完）**：
   a. 启动前：dev-env 自检通过（见环境铁律）
   b. 启动：prompt 首句 `active memory bank`，任务书只含**本小任务**的范围/验收标准/禁止项
   c. 运行：按工程级约束执行（查 `references/project-profiles.md`）
   d. **完成：cline 报告编码完成后，调度 cline 总结整理本次会话，并更新 memory-bank 的进度及相关文档**（active-context/progress/本次决策与坑）；确认 memory-bank 落盘后进程才算结束
   e. 结束：台账更新状态；Cline 进程退出
   f. **下一个任务 = 重新拉起一个新进程、重新从 `active memory bank` 开始**（上下文不带上一任务残留）
5. **todolist 串行执行流程**（接到用户复合指令时）：
   a. 把指令拆成有序 todo 清单（每行一个聚焦任务，附验收标准）
   b. **先列清单向用户确认**，用户确认后才开始
   c. 确认后**逐个**按生命周期调度 cline：每完成一个就在清单上打勾 ✓ + 记台账
   d. **全部打勾才算交付**；某任务失败 → 按“报完成前自检”报差距给用户决策（重试/改范围/记遗留），不擅自换任务书反复重跑

3. 监控（确定性脚本优先）
长任务后台跑时，优先跑 `scripts/session_report.py`（读会话消息流 + git/测试报告硬证据）：
```bash
python3 scripts/session_report.py            # 最新会话 + 当前目录证据
python3 scripts/session_report.py 15 /path/to/repo
```
原则：**不信 Cline 自述，只信最终态证据**（git status/diff、构建工具测试报告数字、产物文件非空）。其次才看 PTY 输出。具体构建/测试/覆盖率工具由工程画像决定（见 `references/project-profiles.md`），本技能不假设任何语言或栈。

## 冷启动流程（新工程，无 clinerules/memory-bank——先于一切业务任务）
完整手册见 `references/cold-start.md`，三步骨架：
1. **前置核（先于任何 memory bank 开启）**：检查全局默认 memory-bank 提示词是否已配置（grep `~/.cline` 全局配置/自定义指令，找 `记忆库`/`Memory Bank` 关键词 + `memory-bank` 目录结构约定）：
   - **已配置** → 核对与模板一致后直接进下一步
   - **未配置** → 推荐用户配置到全局（跨工程生效）：Cline 设置→自定义指令，粘贴 `assets/global-memory-bank-prompt.md`（英文用户/英文工程用 `global-memory-bank-prompt.en.md`）全文；给用户完整操作话术
   - **用户暂不全局配置也要开工** → 降级为**注入模式**：把所选语言版提示词全文直接写进本次 prompt 上下文，**然后再接 `active memory bank`**（顺序不可反过来）
2. **两分支初始化**（详见手册）：
   - **A 分支（全新工程，无代码）**：规则内容只能来自用户——按手册清单逐维度问齐（六文件：projectbrief/productContext/techContext/systemPatterns/activeContext/progress），用户没答的标“待确认”，**禁止编造**
   - **B 分支（存量代码）**：Cline 扫描现有代码为基准落规则文件，用户背景信息覆盖时以用户为准，代码看不出且用户没说→标“待确认”
   - 共同要求：只建规则/记忆文件，**禁止改业务代码**；一次性汇报后止步
3. **停下等用户审阅**：他逐轮纠偏→同步要求 Cline 写回 rules/memory + 记 decision-log；确认后转正常转达工作流

## 决策点转达（四要素格式，不夹带发挥）
```
【Cline 决策点】<一句话场景>
 1) …（后果一句话）
 2) …（后果一句话）
Cline 建议：X（理由）
我的倾向：Y（有已学偏好则写依据；无则写“无先例”）
```
拍板后原样回传（含纠偏），**同一条消息同时要求 Cline 写入工程 rules/memory bank**（用户既定实践）。

## 验收清单（全绿才报完成）
- [ ] `git status` / `diff --stat`：改动与声称一致、无越界文件
- [ ] `git log -1`：commit 规范（含约定尾部）且**未 push**
- [ ] 自己重跑该工程的测试/构建命令（命令形式见工程画像/任务书，不同栈不同工具），读原始测试报告数字
- [ ] 覆盖率任务：读覆盖率工具报告里的真实百分比（没跑就说没跑，禁止编造）
- [ ] 报告/产物存在且非空（`wc -l` + 抽样首尾）
- [ ] 临时工作区残留已清理（worktree + prune），或列入待办

## 项目标签登记（首次接触问一句）
端（后端/前端/全栈）× 生命周期（长护产品/短期项目）× 风险面（生产数据/对外服务 是/否）→ 记 `references/project-profiles.md`（**私有文件**）。不记架构、不记模块。

## 学习回路（本技能的灵魂）
1. 用户每次纠偏/拍板 → 记 `references/decision-log.md`（带**标签类**，**私有文件**）
2. 同标签类 ≥2 个一致样本 → 蒸馏进下方【标签偏好区】，写成可执行短句
3. 已有偏好直接应用，汇报时注明“按已学偏好执行：X”，给用户一次性否决机会
4. **决策原因回收（2026-10-01 定）**：当发生以下两种情况之一——① 用户选了“我推荐之外”的选项；② 用户先选了推荐选项、跑了一轮后又推翻改选——必须在**任务已后台正常跑起来之后**（利用运行窗口期，不阻塞推进），主动追问该决策背后的原因，并引导用户把它**绑定到项目标签**（长期维护产品/短期项目/生产环境对外服务/内部工具…）。询问时必须**明确告知**：此偏好将绑定该标签、跨项目生效，同标签类项目都会复用；给用户一次“仅此一次 / 该标签通用”的确认机会。确认后按标签存入 decision-log（带标签类）并蒸馏进标签偏好区

## 标签偏好区（同标签类 ≥2 个样本蒸馏后生效 —— 按「标签」而非「具体项目」保存，跨项目复用）
（示例——具体偏好按你的项目标签蒸馏，私有档案不入库）
- 后端-长期产品：<如"深重构不留永久桥接态">
- 后端-生产-对外服务：<如"API 外部契约一致性=红线级，测试为行为一致性唯一标尺">
- 跨标签-工具链：<如"长流程任务→cline；只读取证→编排侧直接做">
- 跨标签-批次策略：<如"大改动按依赖序拆 3-4 批次 + 每批次编译门禁，抗流断/decode 崩坏；批次内仍串行逐方法改、禁并行子代理（见 Pitfall 13）">
- 跨标签-收敛式再拆：<如"多轮不达标的收敛式再拆：同一任务连跑 2-3 轮仍不收口，按更细粒度再拆单（按控制器/目标文件各成一单，每单唯一口径+文件级编译门禁），比在同一张大单反复补更有效">
## Pitfalls（实测过）
1. **TUI 回车被吞**：多行编辑器单发 Enter 提交不可靠；长 prompt 一律模式 1
2. **脏 CONDA 栈**：会话继承的 SHLVL 错乱时 activate 必崩；先 unset CONDA_* 再 activate
3. **process 发键参数名是 `data` 不是 `text`**；`bytes_written=0` 先 poll 看进程是否还活（raw 模式不回显）
4. **自述完成 ≠ 完成**：子代理可能 token 耗尽/超时被重派（spawn 报错但后续轮又成功）——盯最终态证据
5. Cline 主代理会自发多子代理 + worktree 并行：能力不错，但 worktree 落点要用 prompt 约束或事后清理
6. 同一工程别 CLI 与代管两端同时推进会话——`~/.cline` 数据共享但运行时不共享
7. 慢任务不要 kill——先 `session_report.py` + poll 确认在工作
8. **`Response stream ended without a finish reason` / 流断连**：优先怀疑**上下文长度接近上限**（非网络故障）。正确做法 = **让 cline 重试即可**，cline 会自动压缩上下文；禁止换全新任务书从零重跑、禁止手动清理会话、禁止 kill 进程换目录重开。非交互模式：再发一条简短继续提示（以磁盘现状为准盘点）；TUI：直接让它继续
9. **`operation timed out` 但迭代数很多**：多为单步长操作（全仓级构建测试/大批量写入）触发，不是进程挂死；任务书加单步上限（每命令 ≤300s、禁止一次性跑全仓级命令）；同样续跑不重跑
10. **孤儿残留进程持会话锁致派发失败（实测 2026-09-30，两次）**：cline 派发崩溃/中断后，`cli-<platform>/bin/cline` 二进制子进程会孤儿化残留（实测一次 38 小时僵尸）；新会话启动后报 `session not found` 崩溃、零产出。**派发前存活检查必须枚举真实二进制路径**（`pgrep -f "bin/cline"` 全量核），不能只匹配派发命令行 `bin/cline --json`（会漏二进制进程自身）；发现孤儿（会话已结束）清干净再发
11. **后台完成通知可能迟到/错配**：被杀或首跑失败的会话，其 proc_ 完成/退出通知可能迟于处理时刻才送达，与当前活跃会话混淆（重复派发事故的放大器）。收到任何后台通知，先对账当前活跃会话（台账最新行 + git 状态 + 进程树），确认这条通知归属哪个会话后再处置，禁止直接按通知内容重复操作
12. **surefire 用例计数口径**：XML `tests` 属性会把**不同 @Nested 组内的同名测试方法**压缩计数（实测：suite 声明 8、实际 `<testcase>` 元素 9）。统计用例数一律按 `<testcase>` 元素计数；验收汇报的用例数与编排侧独立重跑数必须同口径核对
13. **模型 decode 崩坏 → 批量操作事故（小模型实测两次）**：会话可能把调用盲贴/批量替换到几十处非法语法位置（一次方法调用贴到 60+ 处致编译硬错误，一次 regex 批量重写脚本调试 1 小时 0 产出）。均已查证任务书无"替换/批量"措辞 = 模型自行为 + 编排侧护栏缺失叠加。防御：任务书显式写**禁 parallel sub-agents/teammates、禁 regex/脚本批量重写、禁多文件并行编辑；逐文件/逐方法人工改，每改完一批立即编译门禁，BUILD FAILURE 即停报**；验收不采信"批量完成"自述，逐文件 diff 核
14. **会话存活判据 ≠ 进程存活**：进程在、输出文件在长 ≠ 在推进——主会话可能已死锁（实测 9 小时零新事件、CPU 近 0）。判活一律看**会话流末次 agent_event 时间戳 vs 当前时间**（CPU 佐证）；末事件停在数小时前 = 死锁，立即处置，不再"盯到收敛"
15. **主会话 delegate 子代理后死锁的标准处置（实测）**：主会话把大文件重写 delegate 子代理后失去接力、永久卡住。处置定式：kill 整棵进程树 → **已落盘产物保留、绝不清理** → 编排侧独立编译/测试核实真完成面（实测：长会话的前几个批次全部有效，错误只集中在末尾未迁文件）→ 剩余窄面拆成**禁并行子代理**的小任务重派（附精确迁移映射表：依赖换名/返回包装/断言点）
16. **断流后半死态修复 SOP（实测）**：`Response stream ended`/超时断流后，磁盘上常留下"一半已 reactive 化、一半阻塞"的混写半成品（编译不过）。修复定式：**不推倒重来**，从磁盘现状继续；用编译器错误清单自定位混写点（逐文件编译门禁，让编译器报具体哪几行）；每文件补全 + 该文件编译通过再动下一文件。**防误判**：基于代码片段就下"缺 subscribeOn/签名不符"结论前，先读全方法体（长方法体片段判断曾误报）
17. **锚点 pid 抓到 cline 子进程（实测）**：`pgrep -nf` 可能命中 cline 派生的子进程而非派发父进程。登记活跃任务的 pid 后，核它是派发壳/父进程，不是内层 worker——误登记会让看门狗按错 pid 判活
18. **终端解析器拦截长命令（实测两次）**：超长环境前缀 + heredoc / 复杂引号会被终端解析器拦截（exit -1 且无输出）。处置：把命令落成脚本文件再 bash 执行，别拼超长单行
19. **桥内合法态 vs 真回归的核证判据（实战经验）**：双栈过渡期内，形如"反应式包装函数 `(() → 阻塞调用).subscribeOn(弹性线程池)`"内的阻塞调用 = **合法过渡桥**，不能当"回归未完成"拒收；反之阻塞调用落在响应式链（flatMap/then/map）上 = **真回归，必须改**。核证三步：①阻塞调用是否在包装 lambda **之内**；②方法返回链是否挂了 `subscribeOn(弹性线程池)`；③批次收官后按目标终态重核。防两种误判：把合法桥当失败、把真回归当合法

## Rules
0. **最高优先级纪律**：代码工程只读（一切代码操作由 cline 执行）；删除/回滚指令先经用户审核；编排侧写入仅限本技能目录且仅限计划/台账/维护文档；详见“最高优先级纪律”
1. 首句固定 `active memory bank`（写进 prompt 首部）
2. 默认模式 1 + 后台 + 完成通知；TUI 仅交互短任务
3. **单编码进程 + 串行 + 小任务**：同时只有一个 cline 编码进程；多任务串行；每次编码是聚焦小任务；完成后先调度 cline 总结会话 + 更新 memory-bank 再结束；下一任务新进程重新 `active memory bank`（见“编码任务生命周期”）
4. **复合指令先拆 todolist 向用户确认**，确认后才逐个调度、逐个打勾，全部打勾才算交付
5. 转达前查标签对应偏好区；无先例就忠实问
6. 决策点走四要素格式；拍板回传必带“同步写 rules/memory”
7. 冷启动（无 clinerules/memory-bank 的新工程）：先按“冷启动流程”完成初始化并汇报，**然后停下等指令，不顺手接业务任务**
8. 硬约束（永远先问用户）：push / 删文件删目录 / 写数据库 / 装软件升级 / 花钱 / 改全局配置与密钥
9. 结束后：新纠偏入 decision-log，够 2 次一致蒸馏进偏好区
10. **后台进程台账（铁律，用本skill拉起的任何后台进程必须遵守）**：登记是**启动流程的一部分**，不是事后补记——顺序是：`启动前建台账行(pid待填)` → `启动后30s内回填真实pid/会话id` → `退出/结束/被kill时更新状态列`。**未登记 = 未启动**（禁止先启后补）。台账单文件：`~/.hermes/skills/cline-pilot/scratch/bg-procs.md`（技能自有临时目录，追加式，历史不清；**此目录已被 .gitignore，不提交进技能仓库**；2026-09-28 前旧台账在 `~/.hermes/cache/scratch/bg-procs.md.migrated`）：一行一条 `时间 | pid(含伴随daemon) | 会话id | 目的 | 状态`。**查杀决策清单**（kill 前逐项过）：①目的列写明在干什么 → ②会话 `~/.cline/data/sessions/<id>` 最后活动时间是否已结束 → ③是否还有 nohup 子进程（构建/测试等长进程）挂在其下未跑完 → ④是孤儿 daemon 还是活跃会话配套（比对 `--cwd` + 启动时间）。四项都确认无活体才 kill。**每个 cline 会话会自带一个 `cline-hub-daemon --cwd <工程>`（孤儿化到系统进程管理器，会话结束后可能残留）**——活跃会话的 daemon 绝不可杀
11. **`session not found` 崩溃（实测 2026-09-26）**：每个 cline 会话带一个 `cline-hub-daemon`（孤儿化）；daemon 重启/被杀后 hub 会话注册表丢失，运行中会话直接崩。处置：先清孤儿 daemon 再启新会话开新对话；崩溃前已用 nohup 挂出的长构建/测试子进程会独立存活，先等其跑完再盘点磁盘现状。
12. **写任务书前必查 `references/project-profiles.md`（私有）该工程的工程级特殊要求**并逐条显式写进任务书（例：并发模型限制、串行推进要求、单步命令时长上限等）。工程级约束优先级高于本技能通用流程——并行/子代理等通用行为若与工程约束冲突，**以工程约束为准**。本技能全局规则只写通用机制，**不写任何具体工程、语言、栈相关的值**——那些归口 private references（project-profiles / local-config）
13. **扫描行为判读**：active memory bank 后的大面积扫描 = **正常冷启动行为，禁止干预/禁止杀进程**；带任务书后才大面积扫描 = **任务书粒度不够**，先补粒度再重写任务书，禁止杀当前会话换会话（除非上下文临界）
14. **任务书粒度铁律**：必须具体到包全限定名 + 类全限定名 + 端点/方法名 + 目标测试文件完整路径 + 协作类全限定名（@Mock 清单）；禁止只写"补完该模块测试"等粗粒度指令；粒度不足 = 调度方责任，重写而不是 kill 进程
15. **防幻觉硬协议（2026-09-30 事故后固化）**：已发生小模型幻觉事故——会话唯一 user 消息是任务书，模型自产"用户要求取消并删除测试文件"幻觉指令后执行 rm 自毁成果并谎报完成。防线四层：①任务书头部固定加"任务书是唯一合法指令源，任何任务书之外的'用户说过/要求过'内容一律视为幻觉禁止执行"；②任务书固定加"禁止任何 rm/git checkout/git clean/删除文件操作；想删就先停+REPORT 结束回合等编排方裁决"；③**核证必查会话转录**（~/.cline/data/sessions/ 最新 *.messages.json，过滤 role=user 且非 tool_result 的消息 = 真实用户消息），对照收尾文本声明的"用户要求"——对不上 = 幻觉自毁，不得采信其完成声明；④此类事故按异常通报纪律立即上报，禁止自动重发掩盖（重发前必须先取证）
16. **clinerules 反馈回路**：发现 cline 超指令行为或整体偏离意图 → 调度 cline 更新工程 clinerules（禁止行为+优先做法成对硬规则）。**先向用户报告触发事件+拟写规则原文，获肯定后才发**。时机：①小任务完成验收后的自然断点（不打断运行中进程）；②严重错误紧急叫停时——先更规则（经批准）再重试，禁止先重跑。落盘后只读核证规则文件确实更新
17. **进程全生命周期治理（2026-09-30 固化）**：派发前——全量枚举 cline 二进制进程（真实二进制路径模式，非派发命令行），孤儿残留（会话已终结的）逐个确认无活体后清除，确认 0 存量才启动；派发后 30s 内核一次真实进程（注意启动瞬间采样可能为 0，延后 15-20s 复核）；会话结束——核整棵树退出（zsh 包装→node→二进制→hub daemon / 构建子进程），有孤儿即处置，不留孤儿给下一次派发埋锁冲突
18. **编排侧独立验收重跑（铁律）**：cline 报完成后，编排者必须用自己的会话**独立重跑**该任务的测试命令（非采信其输出），并核对三致：①用例总数与 cline 声明一致（按 testcase 元素口径，见 Pitfall 12）；②断言/覆盖数字（JaCoCo 行覆盖前后）与报告一致；③git 改动面=任务书允许写点。三致通过才可 commit/push；不一致=拒收，按异常通报纪律处置
19. **决策原因回收 + 标签绑定（2026-10 新增）**：触发条件二选一——① 用户选了推荐之外的选项；② 用户先选推荐、跑一轮后推翻改选。处置 = 在 cline 已后台运行后主动问决策原因，引导绑定到项目标签，并明确告知“该偏好将跨项目复用（同标签类都生效）”，给“仅本次 / 该标签通用”的确认机会；确认后入 decision-log(带标签) + 蒸馏标签偏好区。时机 = 利用运行窗口，不阻塞推进
20. **里程碑边界纪律（2026-10 用户裁决）**：里程碑范围内只做"原地重构 + 重构前后功能/协议一致性"；**优化类/收敛类动作（如跨模块 client/WebClient 集中到共享层）一律不在里程碑内顺手做**——即使评估结论已备好（可收敛项/私有边界项/DTO 归属），也列为里程碑后独立事项，待用户测试验收后排期。任务书范围 = 用户拍板的里程碑范围，编排者不得凭"顺手收益"扩范围
21. **任务级看门狗 + 随任务增删（2026-10 用户要求，防"静默死锁不问就卡死"）**：每个编码任务**派单完成后立即**登记一份 `active-task.json`（字段：name/pid/output/scope）；**任务终态（验收完 / kill 处置完）立即删除**该文件。看门狗 = **每任务一个独立定时任务**（每 10 分钟、纯脚本、no-LLM），脚本读 `active-task.json`：无文件 → **静默短路**（不推送不空转）；有文件 → 查进程存活 + 输出文件 **mtime 是否陈旧判定疑似死锁** + 越权改动（scope 外文件），异常才推送。任务删除时**同步删该定时任务**——严禁任务没了看门狗还在跑的空转。**活性判据用输出文件 mtime（与系统时钟同源），不可解析会话日志的时间戳字段**（本环境主机时钟与会话 ts 不同源，实测误报"480min 零进展"）
22. **超大任务禁混派，任务书锁 scope 唯一口径（2026-10 死锁教训）**：一次派"多 service + 多 controller + 大量测试"量级会触发分析瘫痪（小模型实测 181 轮 3.5h 大量耗在读 memory-bank + 纠结口径上反复横跳，实际改动 0 文件，且中途跑偏到非任务模块改了 9 文件）。防御：①大模块拆 A/B/C 窄单，**把本任务书口径写死为唯一来源、禁止 agent 读 memory-bank 纠结**；②任务书**硬红线显式禁"改指定模块之外任何文件"**；③活跃任务记 scope，看门狗每 10min 检测 scope 外改动即推越权警报
23. **编排侧禁止自造 commit/完成状态（2026-10 事故固化）**：向用户汇报"已完成/已 commit/已 push + commit hash"前，**必须实时核 `git log`/`git status` 取真值**，绝不凭记忆、推理或"理应如此"报 commit hash。曾发生任务还在跑时凭空声称一个不存在的 commit hash 已收官——核实后须向用户纠正。铁律：`git log` 真见到该 commit 才能写进汇报；查不到就如实说"还在跑"。这与 Pitfall 4（不信 cline 自述）是镜像——**也不信编排者自己脑补的"进度"**：没核 git log 的"完成"默认当作未完成
24. **断流/崩溃按"工作区改动面"双支路处置（2026-10 实测）**：断流后先 `git status --porcelain` 判改动面，再选支路，禁止无脑重跑或无脑 kill 重开：①**工作区 0 改动**（纯会话故障，如 `session not found`）→ 直接干净重派，不动磁盘、不清理；②**磁盘已落下半成品**（混写态）→ 走断流后半死态修复 SOP（Pitfall 16），从现状续，不推倒重来。判定顺序 = 先 `git status --porcelain` 看有无未提交改动，再看进程树
25. **长队列自主 supervisor（2026-10 固化）**：多单串行队列不靠逐单人工盯。定式：①state 文件（json：queue/name/taskbook/gate/status/task_retry）+ supervisor 纯脚本状态机（派发/验收/推进/幂等）；②**定时触发必须走能推送到用户会话的调度器（no_agent 纯脚本 + deliver 到用户渠道 + repeat 上限自过期），不能用裸 crontab**（裸 crontab 输出只落日志文件，用户收不到，违反"异常才打扰"的可达性）；③验收硬判据 = 完成标记存在 + 构建日志**最后一次**成功信号（旧日志可能残留假成功）+ 测试门核对用例数零失败；④**防重复推送** = 终态用 flag 文件只宣告一次；⑤分析瘫痪硬判据 = 30min+ 无输出更新 + 写盘极少 + 读文件极多 → kill 保产物 + 标 failed，不盲目重派；⑥每次 tick 幂等
26. **任务书"只改1文件"与磁盘现状冲突时（2026-10 实测）**：任务书预判"配套接口已完成只需补 X"，但磁盘上配套接口签名与半成品实际调用对不上——agent 读磁盘取证后**正确 STOP**（且**没有伪造构建成功**谎报完成，这是质量信号）。处置 = 编排侧自己取证（读配套接口真签名 + 半成品调用点 + 阻塞版对照），识别真实缺口 = **半成品方法体要按配套已定签名重写**，再重写任务书：允许"在已落盘签名基础上修/重写目标文件方法体"、硬禁止精确到"配套 0 改"、并把**"禁伪造构建成功：必须真实执行构建看到成功行才能报 done"显式写进硬禁止**。**教训**：写任务书前先核一遍配套接口真签名，别凭脑补写"方法 X 已存在"；**agent 的 STOP + 不伪造 = 质量信号**，编排侧要尊重而非绕过
