Skill: z1one0415/self-governor (version 1.0.0)

--- name: self-governor description: LLM 通用内部自裁决技能。在关键节点判断"当前这一层最优的下一步动作是什么"，再让主链继续执行。触发条件：(1) 路径分叉时——多个可行方案且无明显优先级；(2) 高代价动作前——搜索/生成/发布等消耗军费或不可逆操作；(3) 连续两步无明显增益时——进展停滞、输出质量未提升。禁止：改写主任务、输出并列动作、长篇规划、变成审批器、连续两轮要求补资料。适用于战略分析/搜索补全/研究/代码/多步工作流等agent。 --- # Self-Governor 在关键决策节点插入一个轻量自裁决层，输出**一个动作**，让主链继续。 ## 核心闭环 ``` Goal → Gap → Action → Update → (下一轮) ``` 不是复杂协议，是一个**关键节点微循环**。 ## 触发时机 以下三种信号出现时，主链立即插入一次裁决： 1. **路径分叉** — 2+ 可行方向，无明显优先级 2. **高代价动作前** — 不可逆操作或稀缺资源消耗 3. **连续两步无明显增益** — stage_goal 完成度未提升 详见 [references/triggers.md](references/triggers.md) ## 输入输出 详见 [references/input-output.md](references/input-output.md) ### 最小输入（3字段） - `stage_goal` — 当前阶段目标 - `current_gap` — 最大缺口 - `available_actions` — 候选动作子集 ### 最小输出 - `next_action` — 唯一动作（必填） - `reason` — 一句话（必填，≤30字） - `fallback_if_fail` — 失败兜底（可选） ### Update 环 **主链强制义务**: 每次 self-governor 输出动作并执行后，主链**必须**在下一步开始前完成 Update 回写。不回写则触发器3（连续无增益）将失效。 回写字段: `goal_achievement` / `gap_change` / `actions_taken` / `total_steps_in_stage` 详见 [references/input-output.md](references/input-output.md) ## 固定动作集合 6 个动作，详见 [references/actions.md](references/actions.md)： `anchor` · `time_bind` · `search` · `clean` · `synthesize` · `degrade_continue` ## 禁止项 - ❌ 改写主任务（你是裁决器，不是任务规划器） - ❌ 输出多个并列动作（只返回一个） - ❌ 生成长篇规划（reason 一句话） - ❌ 变成审批器（不要"建议暂停等待确认"） - ❌ 连续两轮默认要求补资料（最多一轮，第二轮必须 degrade_continue） ## 反官僚原则 - ✅ 默认选择动作，不默认停住 - ✅ 每次只返回一个动作 - ✅ reason 保持一句话 - ✅ 条件不理想时，优先 `degrade_continue` 而非空转 ## 不做什么 - 不写业务内容 - 不给最终结论 - 不替代主链分析 - 不充当审批器 - 不做多动作排序/评分/长链规划/状态机 **它只负责：先停一下，再选一步。** ## 示例 详见 [references/examples.md](references/examples.md)

path: references/actions.md
content: # Actions Reference

## anchor

**意图**: 将当前状态锚定，防止漂移。

- 显式确认 stage_goal 未被主链上下文覆盖
- 校验 current_gap 是否仍然成立（可能上一步已缩小）
- 不改变任何外部状态

**适用场景**: 长链路中间节点，防止目标被上下文稀释。

**reason 示例**:
- "目标未变，缺口仍存在，继续"
- "检测到目标漂移，已重新锚定"

---

## time_bind

**意图**: 为当前阶段绑定时间约束。

- 评估当前阶段已消耗时间
- 设定一个硬性截止点（如"此阶段最多再花3步"）
- 超出后自动降级为 degrade_continue

**适用场景**: 子任务可能无限膨胀（搜索、分析、优化）。

**reason 示例**:
- "此阶段已消耗4步，设定上限再2步"
- "搜索循环检测，绑定3步上限"

---

## search

**意图**: 获取外部信息以缩小缺口。

- 明确搜索目标（不是泛搜）
- 预期搜索后缺口应可量化缩小
- 最多一轮，下一轮禁止再次 search

**适用场景**: current_gap 明确源于信息缺失。

**reason 示例**:
- "缺少竞品配色数据，定向搜索一次"
- "需要验证信源时效性，单次搜索"

---

## clean

**意图**: 清理当前积累的冗余或噪声。

- 删除重复/过时/低质量中间产物
- 压缩上下文到核心要素
- 不生成新内容

**适用场景**: 连续操作后中间文件/上下文膨胀，影响后续判断。

**reason 示例**:
- "中间产物膨胀至5个文件，清理至2个核心"
- "上下文重复信息占比过高，压缩"

---

## synthesize

**意图**: 将已有信息/产物合并为下一阶段可直接使用的形态。

- 提取各来源的核心结论
- 输出一个可直接消费的合并产物
- 标注合并后的置信度

**适用场景**: 信息已足够，但分散在多个来源，需要整合。

**reason 示例**:
- "3份报告结论冲突，合并为对比矩阵"
- "搜索+报告数据充足，合成最终方案"

---

## degrade_continue

**意图**: 在条件不理想时，选择一个可接受的降级方案继续推进。

- 放弃完美，选择"够用"
- 标注降级内容和原因
- **这是默认兜底动作** — 当其他动作都不合适时，选这个

**适用场景**:
- 缺少理想条件但不应停住
- 连续两步无增益
- 上一步是 search 但信息仍不足

**reason 示例**:
- "信息未完全充分，以现有数据继续"
- "配色方案非最优但可区分，先执行"
- "搜索未补全缺口，降级用现有素材推进"


path: references/examples.md
content: # Examples Reference

## 示例 1: 路径分叉 — 配色选择

**上下文**: A版文章当前是珊瑚色，与B版暗红色视觉雷同。可以选择换淡雅绿、换暖金、或保持珊瑚色微调。

```yaml
# 输入
stage_goal: "A版排版配色与B版形成视觉区分"
current_gap: "珊瑚色与暗红色在手机屏幕上对比度不足"
available_actions: anchor, search, synthesize, degrade_continue
```

```yaml
# 输出
next_action: degrade_continue
reason: "换淡雅绿方案可行且区分度高，直接执行"
```

---

## 示例 2: 高代价动作前 — 发布前校验

**上下文**: 准备发布到微信公众号，发现标题显示为文件名而非文章标题。

```yaml
# 输入
stage_goal: "A版文章完整发布到草稿箱"
current_gap: "publisher不识别HTML标题，会用文件名作为标题"
available_actions: anchor, clean, degrade_continue
```

```yaml
# 输出
next_action: degrade_continue
reason: "发布后用户可在草稿箱手动改标题，不阻塞发布"
```

---

## 示例 3: 连续无增益 — 排版修改循环

**上下文**: 已换了两版配色（森林绿→珊瑚色），用户仍反馈雷同。

```yaml
# 输入
stage_goal: "排版配色用户确认通过"
current_gap: "两版修改后用户仍不满意，已消耗3次迭代"
available_actions: anchor, time_bind, clean, synthesize, degrade_continue
```

```yaml
# 输出
next_action: time_bind
reason: "迭代已3次未通过，绑定上限再2轮"
```

---

## 示例 4: 信息缺失 — 搜索决策

**上下文**: 要写AI行业分析，但缺少2025年Q4的模型发布数据。

```yaml
# 输入
stage_goal: "完成AI行业分析的数据支撑"
current_gap: "缺少2025年Q4前沿模型发布数量和间隔数据"
available_actions: search, synthesize, degrade_continue
```

```yaml
# 输出
next_action: search
reason: "关键数据点缺失，定向搜索一次"
```

> **注意**: 如果下一轮裁决时搜索结果仍不足以填补缺口，必须选 `degrade_continue` 而非再次 `search`。

---

## 反面示例 — 不应触发的场景

**场景**: 按SOP顺序执行 02→04→03→05 调度链路。

```
# 这是既定流程，不是分叉、不是高代价、不是停滞
# → 不触发 self-governor，直接执行
```

**场景**: 用户说"发布"。

```
# 这是明确的单一路径指令
# → 不触发（除非发布前检测到异常）
```


path: references/input-output.md
content: # Input-Output Reference

## 最小输入

三字段固定结构，不做扩展：

```json
{
  "stage_goal": "当前阶段要完成的目标",
  "current_gap": "离目标的最大缺口",
  "available_actions": ["从6个固定动作中选取"]
}
```

### 字段规格

| 字段 | 类型 | 约束 | 示例 |
|------|------|------|------|
| `stage_goal` | string | ≤50字，描述当前阶段目标 | "形成可下传最小合同" |
| `current_gap` | string | ≤80字，描述最大缺口 | "证据不足，无法稳定支撑主判断" |
| `available_actions` | string[] | 从6个固定动作中选取子集 | `["search", "synthesize", "degrade_continue"]` |

### 规则
- `available_actions` 必须是固定集合的子集，不得发明新动作
- 主链可根据上下文裁剪可用动作（如"不需要搜索"则不传入 search）
- 最少传入 2 个候选动作，最多传入 6 个

---

## 最小输出

两个固定字段 + 一个可选字段：

```json
{
  "next_action": "search",
  "reason": "最大缺口是证据不足，应先补材料再收束",
  "fallback_if_fail": "degrade_continue"
}
```

### 字段规格

| 字段 | 类型 | 约束 | 示例 |
|------|------|------|------|
| `next_action` | string | 必填，6个固定动作之一 | "search" |
| `reason` | string | 必填，≤30字，一句话 | "关键数据点缺失，定向搜索一次" |
| `fallback_if_fail` | string | 可选，6个固定动作之一 | "degrade_continue" |

### 规则
- `next_action` 必须且只能返回一个
- `reason` 禁止超过一句话，禁止分点展开
- `fallback_if_fail` 仅在 next_action 的执行依赖外部不稳定条件时填写（如：IP白名单不确定、网络超时风险、第三方服务不可控）。不需要量化概率，只需判断"外部条件是否在 self-governor 控制范围内"。

---

## Update 环

动作执行后，主链必须回写状态更新，供下一轮裁决使用。

### 回写格式

```json
{
  "goal_achievement": 70,
  "gap_change": "缺口缩小：已获取3份数据源",
  "actions_taken": ["search"],
  "total_steps_in_stage": 4
}
```

### 字段规格

| 字段 | 类型 | 说明 |
|------|------|------|
| `goal_achievement` | int | 0-100，当前阶段目标完成百分比 |
| `gap_change` | string | ≤50字，缺口的变化描述 |
| `actions_taken` | string[] | 本阶段内执行过的**去重**动作记录，如 `["search","synthesize"]`。仅记录本 stage 内已执行的不同动作，重复动作只记一次。 |
| `total_steps_in_stage` | int | 本阶段已消耗的总步数 |

### Update 的作用
- **增量检测**: 对比前后 `goal_achievement`，判断是否有增益
- **循环防护**: `total_steps_in_stage` + `actions_taken` 用于检测空转
- **触发器 3 判定**: 连续两步 `goal_achievement` 未变化 → 触发

### Update 不做什么
- ❌ 不改写 stage_goal（除非主链明确重定义）
- ❌ 不生成新动作
- ❌ 不输出分析报告


path: references/triggers.md
content: # Triggers Reference

## 何时触发 self-governor

self-governor 是被动插入的裁决层，不主动运行。以下三种信号出现时，主链应立即插入一次裁决调用。

---

## 触发器 1: 路径分叉

**信号特征**:
- 存在 2+ 个可行方向，且各有合理依据
- 上下文中出现"既可以A也可以B""两个方案都可行"等表述
- 任意单一选择的置信度 < 70%

### 反触发条件（以下情况禁止触发 self-governor）

1. **既定顺序流程**: SOP/协议中已规定 A→B→C 的步骤，按顺序执行即可
2. **单一明确指令**: 用户指令只有一个方向（如"发布""删除"），无分叉
3. **已有明确优先级**: 选项已排序（"优先A，备选B"），无需裁决
4. **纯机械操作**: 文件读写、格式转换等确定性操作
5. **已触发过且状态未变**: 同一节点刚裁决过，中间无新操作，不应重复触发

**判断规则**: 同时满足以下两项才触发：
- 存在 2+ 个可行方向 **且** 各有合理依据
- **且** 当前不在上述5种反触发条件中

**不应触发的误判案例**:
- 顺序执行的步骤（A做完做B）— 这是链路，不是分叉
- 已有明确优先级的选项（"优先A，备选B"）

**输入构造示例**:
```yaml
stage_goal: "确定文章排版主色调"
current_gap: "珊瑚色和淡绿色各有支持理由，未决策"
available_actions: anchor, synthesize, degrade_continue
```

---

## 触发器 2: 高代价动作前

**信号特征**:
- 即将执行不可逆操作（发布、删除、覆写）
- 即将消耗稀缺资源（搜索军费、API额度、长时计算）
- 即向用户发出请求/确认（中断用户流程）

**不应触发的误判**:
- 常规的 read/write 文件操作
- 已在既定流程中的标准步骤

**输入构造示例**:
```yaml
stage_goal: "发布A版文章到微信公众号"
current_gap: "封面上传+草稿提交，发布后需手动改标题"
available_actions: anchor, clean, degrade_continue
```

---

## 触发器 3: 连续两步无明显增益

**信号特征**:
- 连续 2 次操作后，stage_goal 的完成度未量化提升
- 输出质量评分未变化
- 出现"回到原点""修改无效"等循环迹象

**检测方法**:
- 每步操作后自评 stage_goal 完成百分比
- 连续两步完成百分比不变 → 触发

**输入构造示例**:
```yaml
stage_goal: "排版配色与B版形成明显视觉区分"
current_gap: "换了两版配色，用户反馈仍雷同"
available_actions: clean, synthesize, degrade_continue
```


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)