Files
sanguo_moziplus_v2/docs/design/19-skill-lifecycle-and-experience-loop.md
T
cfdaily 5b73319aaf [moz] docs(§19): fix M1 JSON 配置块 delivery.mode 同步改为 announce
司马懿 M1:3 处 JSON 配置块 delivery.mode 仍为 none,与设计要点文字不一致。
同步修正为 announce。
2026-06-19 09:48:52 +08:00

40 KiB
Raw Blame History

§19 Skill 生命周期管理 + 经验闭环四阶段设计

作者:庞统士元 日期:2026-06-18(v2.0 状态:方案待确认 前置:§14 Task 五层架构、§16 知识注入四层体系

变更摘要(v2.0

变更项 原设计 新设计 理由
蒸馏频率 庞统每天一次 双层 daily:各 agent 03:00 自蒸馏 + 庞统 05:00 整合 agent 是自己经验的最佳蒸馏者;庞统负责跨 agent 整合
蒸馏者 庞统一人 双层L1 各 agent + L2 庞统 消除蒸馏者偏差;经验是 per-agent 的
.learnings/ DISCOVER 数据源之一 废弃。JSONL 是唯一数据源 信息冗余;agent 执行中不应分心写 .learnings/
三重验证 跨任务复现 + 生成力 + 排他性 Recurrence-Count 机制(融合 self-improvement skill ≥3 次自动触发提升,比主观判断更客观
Skill 数量 未明确 一个 skillskill-management + references/ 四阶段 减少上下文开销;DISCOVER/IMPROVE 是 cron 场景不需要独立 skill description
self-improvement skill 未提及 废弃。优势融合到 DISCOVER 输出格式 职责重叠;统一为单一闭环
Skill 存放 未区分 per-agent 目录 + 公共目录 agent 专属经验不污染其他 agent 上下文

1. 背景

moziplus v2.0 的 P4 剩余两项:

  • T7 C3Skill 生命周期管理(draft → active → deprecated
  • T7 C5:经验闭环 IMPROVE 阶段(DISCOVER → DISTILL → APPLY → IMPROVE 中的最后一步)

当前实现状态

组件 状态 问题
SkillRegistryskill_system.py 死代码 只有 register/match 方法,从未被外部调用
SkillExecutorskill_system.py 死代码 从未被外部调用
ExperienceDistillerexperience.py 空转 ticker 调用时没传 review_result 和 outputs,蒸馏函数收到 None 直接返回空
ExperienceStoreexperience.py 空转 experiences 目录全部为空
experiences 表(db.py 未使用 代码用 jsonl 文件不用 DB 表
Skill 生命周期 缺失 只有 enabled bool,无 draft/active/deprecated 状态流转

结论:现有的 experience.py 和 skill_system.py 需要重新设计,不是修补能解决的。

实际运行的知识体系

实际的 Skill 发现和加载走的是 openclaw 原生 skill 机制

  • openclaw 扫描 skills 目录 → 生成 <available_skills> 列表注入 system prompt
  • Agent 按 description 匹配 → read SKILL.md → 按内容执行
  • moziplus 的 SkillRegistry/SkillExecutor 完全不参与

因此本设计不重建 moziplus 的 skill 引擎,而是基于 openclaw 原生机制构建。

2. 设计目标

  1. 经验从「发现→蒸馏→应用→改善」形成完整闭环
  2. Skill 有明确的生命周期管理(draft → active → deprecated
  3. 产物统一为 Skill,不再有 experiences.jsonl / .learnings/ 等中间形态散落各处
  4. 追踪 Skill 引用情况,支撑淘汰决策
  5. 充分利用 openclaw 已有的 skill_workshop 工具和 skill 加载机制
  6. 每个 agent 是自己经验的最佳蒸馏者——经验 per-agent,精益求精

3. 核心设计决策

# 决策 理由 参考
D1 统一产物:Skill-only 不再有中间形态散落各处。Hermes 只有 Skill + Memory 两种载体,没有第三种 Hermes skill_manage + memory_tool
D2 生命周期通过 skill_workshop 管理 OpenClaw 已有 pending → applied → rejected → quarantined 生命周期 OpenClaw skill_workshop 工具
D3 蒸馏频率:双层 daily L1 各 agent 每天 03:00 自蒸馏;L2 庞统每天 05:00 整合。有距离感的蒸馏优于即时记录 self-improvement skill daily review;主公确认
D4 蒸馏者:双层(各 agent + 庞统) L1 每个 agent 蒸馏自己的经验(自己最准);L2 庞统负责跨 agent 共性识别 + draft 审查 Hermes skill_manage:「每个将军都应建立自己的 Skill 库」
D5 二级蒸馏抽象为根因模式 不固化在特定技术细节。description 描述「问题模式」而非「技术症状」 Superpowers writing-skillsdescription = when not how
D6 废弃 .learnings/ 作为数据源 JSONL 已包含完整信息(工具调用、推理过程、错误输出)。.learnings/ 只是重复抄写,且打断 agent 执行流 DISCOVER 统一采集;主公确认
D7 只创建一个 skillskill-management 四阶段的详细操作放到 references/ 目录。DISCOVER/IMPROVE 是 cron 场景不需要独立 skill description 常驻上下文 moziplus skill-engineering practices §4:组合模式

4. L4 知识层:Skill Workshop

在现有 L0-L3 四层知识体系上新增 L4:

层级 名称 内容 加载方式 已有
L0 注入式上下文 MEMORY.md / TOOLS.md 每次 session 启动
L1 确定性规则 SOUL.md / AGENTS.md 每次 session 启动
L2 任务上下文 BootstrapBuilder PromptSection 按 task_type 注入
L3 按需 Skill openclaw skills description 匹配 → agent read
L4 Skill 生命周期 skill_workshop draft → active → deprecated 管理 新增

L4 不是一个 prompt 层,而是 Skill 的管理层——负责 Skill 的创建、验证、应用、追踪、淘汰。

5. DISCOVER 阶段(双层)

5.1 L1 各 agent 自蒸馏(每天 03:00

每个 agent 的 cron 扫描自己当天的 session JSONL,识别信号,蒸馏为 draft proposal。

数据源(1 个)

数据源 位置 包含什么
自己的 Session JSONL ~/.openclaw/agents/<agent_id>/sessions/*.jsonl 当天完整思考过程、工具调用、错误恢复、用户对话

不需要扫描黑板/Gitea/Mail 等——那是 L2 庞统的职责。L1 聚焦自己的经验。

信号识别(5 类高价值信号)

信号类型 从哪发现 识别特征
失败模式 task failed、CI failed、review rejected 有明确的失败原因
重复问题 跨多个任务出现同类问题 同关键词出现 ≥2 次
决策转折 rebuttal comment、需求澄清、主公纠正 原方向被推翻或修正
新实践 设计文档新增、wiki-vault 新页面 之前没有的知识
知识缺口 agent 表达不确定、查不到的东西 查不到/不确定的东西

输出draft skill proposal(提交到 skill_workshoppending 状态)

5.2 L2 庞统整合(每天 05:00

庞统的 cron 在 L1 全部完成后执行,扫描全量数据源 + 审查所有 L1 draft proposal。

数据源(全量)

数据源 位置 包含什么
黑板 tasks 各项目 blackboard.db 任务生命周期:创建、分配、执行、完成/失败
黑板 reviews reviews 表 审查结论 + 逐步骤 verdict + suggestions
黑板 comments comments 表 @mention 讨论、rebuttal 推理、action_report
黑板 outputs outputs 表 任务产出物内容
黑板 events events 表 状态变更、guardrail 拦截、异常检测
Gitea Issues/PRs Gitea API 问题报告、diff、review 评论
Gitea CI Gitea Actions lint/test/build 成功/失败
Mail mail API 跨 agent 通信、讨论推理过程
所有 agent 的 Session JSONL ~/.openclaw/agents/*/sessions/ 全团队完整思考过程
MEMORY.md 各 agent workspace 长期记忆、已有经验教训
knowledge-gaps.md wiki-vault/_meta/ 知识缺口
L1 draft proposals skill_workshop pending 各 agent 当天提交的 draft

核心职责

a. 跨 agent 共性模式识别:张飞和关羽都在类似场景踩坑 → 合并为共享 Skill b. 审查 L1 draft proposals

  • APPROVE:质量达标的个人经验 → 变 active(仅作者 agent 可见)
  • MERGE:跨 agent 共性 → 合并为共享 Skill(所有 agent 可见)
  • REJECT:质量不够(附原因,agent 看到反馈后改进) c. 全局提升:高确定性/高频率经验 → 提升到 AGENTS.md 规则(所有 agent 强制注入)

5.3 去重

同一事件在多个数据源出现(CI 失败 → toolchain task → mail → comment 讨论),按时间窗口 + 关键词去重,保留信息量最大的那条。

跨 agent 的同一模式,按 Pattern-Key 去重,合并为共享信号。

5.4 输出格式(融合 self-improvement skill 结构化字段)

每条候选信号包含:

信号类型 | 来源(task_id / PR / review / session| 时间 | 简述(≤100 字)
ID: SIG-YYYYMMDD-XXX
Priority: low | medium | high | critical
Status: pending | in_progress | resolved | promoted
See Also: SIG-YYYYMMDD-XXX(关联信号)
Recurrence-Count: N(同一模式出现次数)
Pattern-Key: category.subcategory(稳定去重键,如 sync.field_mapping

字段说明(汲取自 self-improvement skill):

字段 用途 借鉴来源
ID 唯一标识,便于交叉引用 self-improvement logging format
Priority 优先级排序,critical/high 优先处理 self-improvement priority guidelines
Status 生命周期跟踪 self-improvement status lifecycle
See Also 关联相似信号,发现共性模式 self-improvement recurring pattern detection
Recurrence-Count 同一模式出现次数,≥3 触发自动提升 self-improvement recurring pattern + Skill Extraction Criteria
Pattern-Key 稳定去重键,跨 agent 匹配同一模式 self-improvement Pattern-Key

6. DISTILL 阶段

6.1 核心原则:HOW not WHAT

蒸馏的是「怎么做」不是「发生了什么」(nuwa-skill 实践 #5):

❌ "PR #83 修复了 event_type 未知的问题"
    → 这是 WHAT,无法复用

✅ "数据消费者与数据生产者解耦时,新增字段必须同步所有生产者的提取逻辑"
    → 这是 HOW,可复用到任何消费者/生产者场景

6.2 蒸馏产物 = Skill

直接产出 SKILL.md 格式或对现有 Skill 的 patch,提交到 skill_workshop。

SKILL.md 编写规范(参考 Superpowers writing-skills):

---
name: skill-name
description: Use when [触发条件/问题模式描述],不描述工作流
---

# Skill 标题

## 什么时候用
(具体的触发场景,按问题模式描述,不按技术特定症状)

## 怎么做
(根因分析 + 操作步骤)

## 常见错误
(反模式:什么不该做)

## 来源
evidence:哪些 task/PR/review 提炼了这条经验)

description 关键规则Superpowers 的核心发现):

  • 只描述触发条件(when to use),绝不描述工作流how
  • 以「Use when...」开头
  • 描述问题模式,不描述技术特定症状
  • 原因:测试发现 description 如果总结了工作流,agent 会按 description 执行而跳过读完整 SKILL.md

6.3 蒸馏示例

一级蒸馏(从具体案例提取):

# 案例 1PromptContext event_type 未知
# 案例 2PromptContext from_agent/mail_type 缺失(PR #26 D2
→ 共同根因:消费者/生产者字段同步问题

# 蒸馏为 Skill section(加到 trial-and-error-patterns):
## 消费者/生产者字段同步

**什么时候用**:修改 dataclass 时,如果该 dataclass 由外部 JSON 提取填充

**怎么做**
1. 改 dataclass 定义
2. 检查所有从 JSON 提取字段的代码路径,同步新增提取逻辑
3. 检查所有构造该 dataclass 的调用点,同步新增参数
4. 跑一次构建测试验证字段不为空

**常见错误**:只改 dataclass 不改提取逻辑 → 字段默认值为空 → 运行时不报错但行为异常

二级蒸馏(从多个一级经验提取通用模式):

如果「消费者/生产者字段同步」经验在 ≥2 个不同场景复现(PromptContext + 其他),验证通过后,可以提升为独立 Skill 或固化到 AGENTS.md 规则。

6.4 验证机制(融合 self-improvement Recurrence-Count + Skill Extraction Criteria

从 draft → active 的验证标准:

验证维度 标准 不通过的处理
Recurrence-Count ≥ 2 同一 Pattern-Key 在 ≥2 个不同场景出现过 降级为 MEMORY.md 临时记录
有生成力 能给出具体的操作指引 丢弃
有排他性 不是「代码要测试」的常识 丢弃

提升触发条件(从 draft 提升为 active Skill,融合 self-improvement Skill Extraction Criteria):

全部满足时触发提升:

  • Recurrence-Count ≥ 3(同一模式 30 天内出现 3 次以上)
  • 跨 ≥2 个不同任务验证

时间窗口Recurrence-Count 以 30 天为窗口,超过 30 天的记录不计入。6 个月内 3 次 vs 1 周内 3 次信号强度不同,30 天窗口确保经验仍然新鲜。

Skill Extraction 质量 Gate(汲取自 self-improvement skill):

标准 描述
Recurring 有 See Also 链接到 2+ 个相似信号
Verified Status 是 resolved 且有工作修复
Non-obvious 需要实际调试才能发现(不是常识)
Broadly applicable 不是项目特定,可跨场景复用

6.5 质量检查自动化

参考 nuwa-skill quality_check.py,对蒸馏产出做结构化检查:

检查项 标准
trigger 是否具体 不是「注意代码质量」这种泛泛而谈
action 是否可执行 不是「要小心」这种无操作指引
是否与已有 Skill 重复 检查现有 skills 目录中是否已有覆盖
description 是否只含触发条件 不包含工作流描述

6.6 矛盾处理(nuwa-skill 实践 #10

新经验与已有经验冲突时:

  • 时间性矛盾(观点演化)→ 记录演化轨迹,以近期为主
  • 领域性矛盾(不同场景不同规则)→ 分场景记录
  • 本质性张力(价值观内在冲突)→ 标注为「核心张力」,两个版本都保留

矛盾是特征,不是 Bug。 强制调和会丢失关键信号。

6.7 蒸馏者(双层)

L1:每个 agent 自己(每天 03:00 cron,各 agent 错开 15 分钟避免资源争用:03:00, 03:15, 03:30, ...

  1. 扫描自己的 session JSONL
  2. 用判断力提取根因模式(不是机械提取)
  3. 按 SKILL.md 格式产出
  4. 提交到 skill_workshoppending proposal

L2:庞统(每天 05:00 cron

  1. 审查所有 agent 提交的 draft proposalapprove / merge / reject
  2. 跨 agent 共性模式识别和合并
  3. 高频/高确定性经验提升到 AGENTS.md 规则

未来考虑半自动化(LLM 辅助草案 + agent 审阅确认)。

7. APPLY 阶段

7.1 统一走 openclaw skill 机制

不新建 ExperienceSection 或任何 moziplus 自定义注入。因为产物统一为 Skill,openclaw 已有的机制天然支持:

  1. openclaw 扫描 skills 目录 → 生成 <available_skills> 列表
  2. Agent 按 description 匹配 → read SKILL.md
  3. Agent 按内容执行

7.2 Skill description 编写规范

这是 APPLY 阶段效果好坏的关键。参考 Superpowers writing-skills 的核心发现:

# ❌ BAD:描述了工作流,agent 会按 description 执行而跳过读 SKILL.md
description: Use when modifying dataclass — checks all extraction points, runs tests, verifies non-null fields

# ✅ GOOD:只描述触发条件
description: Use when modifying a dataclass that is populated from JSON extraction by another module

# ❌ BAD:太抽象
description: Use for code quality

# ✅ GOOD:描述问题模式
description: Use when a field added to a dataclass appears empty or as default value at runtime

7.3 渐进式加载

openclaw 已有的机制:

  • L1<available_skills> 列表(~100 token/skill,只有 name + description
  • L2Agent read SKILL.md(完整内容)
  • L3SKILL.md 内引用的 references/ 文件(按需加载)

7.4 Skill 存放位置与可见性

agent 专属经验放到 agent 自己的 workspace skills 目录,全局共享 Skill 放到公共 skills 目录。openclaw 扫描时自动合并。

Skill 位置 谁能看到 适用场景
~/.openclaw/workspace-zhangfei/skills/ 只有张飞 编码模式、个人踩坑经验
~/.openclaw/workspace-pangtong/skills/ 只有庞统 规划经验、方向把控
~/.openclaw/workspace-simayi/skills/ 只有司马懿 审查技巧、挑战模式
~/.sanguo_projects/sanguo_mozi/skills/ 所有 moziplus agent 团队共识、协作规范、通用实践

设计原则

  • 个人经验不污染其他 agent 上下文(张飞的编码坑不需要司马懿看到)
  • 共性经验自动共享(庞统 MERGE 后放到公共目录)
  • openclaw 原生机制天然支持(扫描时合并所有 skills 目录)

8. IMPROVE 阶段

8.1 Skill 自我修补

参考 Hermes skill_manage 的设计哲学:

"If you used a skill and hit issues not covered by it, patch it immediately." "Skills that aren't maintained become liabilities."

Agent 使用 Skill 时发现问题(缺步骤、过时信息、命令变更)→ 立即通过 skill_workshop 提交 revise proposalpatch)。

这不需要定时任务,靠 agent 的主动维护。关键是在 agent 的 prompt 中注入这条规则(SOUL.md 或 AGENTS.md)。

8.2 引用追踪

设计原则:不追求精确归因,做时间维度的信号采集。

信号 采集方式 可信度
Skill 最近被 read 的时间 扫描 session JSONL 中 "tool":"read" + SKILL.md 路径
Skill 在 available_skills 中被注入 扫描 JSONL 中 available_skills 列表 中(被注入但未必被用)
Agent 在输出中提及了 skill name grep skill name in assistant messages 高(主动提到说明确实用了)
Skill 文件最近修改时间 git log / 文件 mtime

采集频率:每周一次 cron,扫描过去 7 天的所有 session JSONL。

8.3 淘汰机制

决策流程

30 天无引用信号
  → 生成淘汰候选报告(庞统审阅)
    → 确认淘汰 → skill_workshop quarantine
    → 保留观察 → 标注,下轮再查
    → 更新后保留 → 修改 description / 内容,重置计时

注意openclaw 本身的 skill~/.openclaw/plugin-skills/ 和全局 skills)也纳入追踪范围。主公可以据此决定哪些 openclaw skill 可以禁用。

8.4 经验提升路径

同一 Skill section 被频繁引用(≥5 次)且经过多次验证 → 考虑提升:

提升目标 条件 效果
独立 Skill 足够通用,有自己的触发条件 独立 SKILL.mddescription 匹配
AGENTS.md 规则 确定性高,适用于所有 agent L1 确定性注入,强制生效
guardrail 安全相关,不可违反 强制检查

8.5 反馈到 DISCOVER

IMPROVE 发现的经验缺口(「这条 Skill 不适用 XXX 场景」)→ 写入 knowledge-gaps.md → 成为下一轮 DISCOVER L2 的输入。

9. 闭环全景

DISCOVER L1(每天 03:00,各 agent cron
  数据源:自己的 session JSONL
  信号识别:5 类高价值信号
  输出:draft skill proposalstructured,带 ID/Priority/Pattern-Key/Recurrence-Count
  ↓
DISCOVER L2(每天 05:00,庞统 cron)
  数据源:全量 12 个数据源(含 L1 draft proposals
  跨 agent 共性模式识别
  审查 draft proposalsapprove / merge / reject
  ↓
DISTILLL2 庞统执行)
  原则:HOW not WHAT(根因模式,不固化技术细节)
  验证:Recurrence-Count ≥ 2 + 生成力 + 排他性
  提升:Recurrence-Count ≥ 3 → 独立 Skill / AGENTS.md 规则
  质量:自动化检查 + 矛盾保留
  产物:Skill(通过 skill_workshop 管理)
  ↓
APPLY(实时,openclaw skill 机制)
  匹配:description 匹配 → agent read SKILL.md
  执行:agent 按内容执行
  自我修补:使用时发现问题 → 立即 revise proposal
  per-agent 隔离:专属 Skill 在 agent workspace,共享 Skill 在公共目录
  ↓
IMPROVE(每周 cron,庞统执行)
  追踪:scan JSONL 引用信号
  淘汰:30天无引用 → 庞统审查 → quarantine
  提升:高频引用 → 独立 Skill / AGENTS.md 规则 / guardrail
  反馈:知识缺口 → knowledge-gaps.md → 回到 DISCOVER L2

10. 与现有实现的关系

组件 处理方式
skill_system.pySkillRegistry/SkillExecutor 标记 deprecated,后续清理。 死代码,实际不参与 skill 发现/加载
experience.pyExperienceDistiller/ExperienceStore 标记 deprecated,后续清理。 空转代码,experiences 目录全空
experiences 表 / experience_tags 表(db.py 保留表结构但不再写入。 未来如果需要 DB 查询可以重新启用
ticker.py:336-348 经验蒸馏逻辑 移除。 不再逐任务蒸馏,改为双层 daily cron
skill_workshop 工具 核心使用。 所有 Skill 生命周期通过它管理
openclaw <available_skills> 机制 核心依赖。 APPLY 阶段完全基于此
self-improvement skill~/.openclaw/workspace/skills/self-improving-agent/ 废弃。 其优势(结构化 ID/Status/Priority/See Also/Recurrence-Count)已融合到 DISCOVER 输出格式中。原 skill 文件保留但标记 deprecated
.learnings/ 目录(各 agent workspace 废弃。 JSONL 是唯一数据源。目录保留但不再写入新内容(历史数据保留)
SELF_IMPROVEMENT_REMINDER.md 废弃。 规则已融合到 skill-management skill 中

11. 实现计划

步骤 内容 优先级 工作量
S1 在 SOUL.md / AGENTS.md 加入 Skill 自我修补规则 + 双层 daily 蒸馏规则 P0 L1(改文案)
S2 创建 skill-management Skill(主 SKILL.md + references/ 四阶段详细操作) P0 L2
S3 创建各 agent 的 03:00 cron(自蒸馏 L1 P1 L1
S4 创建庞统的 05:00 cron(整合 + 审查 L2 P1 L1-L2
S5 实现 IMPROVE cronJSONL 引用追踪 + 淘汰报告(每周) P2 L2-L3
S6 清理 deprecated 代码(skill_system.py / experience.py / self-improvement skill / SELF_IMPROVEMENT_REMINDER.md P3 L1

S1 和 S2 已完成(PR #85)。S3-S5 设计见下方 §11A。

11A. Cron 配置方案(S3-S5 详细设计)

设计决策

每个 agent 用自己的 agentId 执行 L1 cron,不由庞统代理。

理由(对照设计目标 D4:

  • L1 核心价值是"每个 agent 是自己经验的最佳蒸馏者"——agent 扫描自己的 JSONL,用自己的判断力识别信号
  • 如果庞统代理,变成庞统替别人蒸馏,消除不了蒸馏者偏差(D4 要解决的正是这个问题)
  • openclaw cron 原生支持 agentId 参数 + sessionTarget: "isolated",技术上无障碍

S3: L1 各 agent 自蒸馏 cron

6 个 agent,各创建一个 isolated cron,错开 15 分钟(和 discover-l1.md 时间表一致):

Agent agentId cron 表达式 时区
张飞 zhangfei-dev 0 3 * * * Asia/Shanghai
关羽 guanyu-dev 15 3 * * * Asia/Shanghai
赵云 zhaoyun-data 30 3 * * * Asia/Shanghai
司马懿 simayi-challenger 45 3 * * * Asia/Shanghai
庞统 pangtong-fujunshi 0 4 * * * Asia/Shanghai
姜维 jiangwei-infra 15 4 * * * Asia/Shanghai

Cron 配置规范(每个 L1 cron job):

{
  "schedule": { "kind": "cron", "expr": "<时间>", "tz": "Asia/Shanghai" },
  "sessionTarget": "isolated",
  "agentId": "<agent-id>",
  "payload": {
    "kind": "agentTurn",
    "message": "L1 自蒸馏 cron。请执行:\n1. read ~/.sanguo_projects/sanguo_mozi/skills/skill-management/SKILL.md\n2. read ~/.sanguo_projects/sanguo_mozi/skills/skill-management/references/discover-l1.md\n3. 按 discover-l1.md 步骤执行自蒸馏\n4. 如有信号:蒸馏为 HOW 格式,使用 skill_workshop(action=create) 提交 draft proposal\n5. 如无有价值信号:不产出,这是正常的",
    "timeoutSeconds": 600
  },
  "delivery": { "mode": "announce" }
}

设计要点:

  • sessionTarget: "isolated":每次创建临时 session,不污染 main session context
  • delivery.mode: "announce":执行结果投递到 Control UI,保持可见性(早期使用 none 导致 cron 执行后零可见性,已修正)
  • timeoutSeconds: 600:10 分钟足够(扫描 JSONL + 蒸馏 + 提交 proposal
  • message 指引 read SKILL.md + discover-l1.mdagent 按 references 指南执行,不依赖 memory

S4: L2 庞统整合审查 cron

庞统的 L2 cron 在所有 L1 完成后执行(最后一个 agent 04:15 开始,L2 设在 05:00):

角色 agentId cron 表达式 时区
庞统 pangtong-fujunshi 0 5 * * * Asia/Shanghai

Cron 配置:

{
  "schedule": { "kind": "cron", "expr": "0 5 * * *", "tz": "Asia/Shanghai" },
  "sessionTarget": "isolated",
  "agentId": "pangtong-fujunshi",
  "payload": {
    "kind": "agentTurn",
    "message": "L2 整合审查 cron。请执行:\n1. read ~/.sanguo_projects/sanguo_mozi/skills/skill-management/references/discover-l2.md\n2. 按 discover-l2.md 步骤执行:\n   a. skill_workshop(action=list, status=pending) 获取所有 L1 draft proposals\n   b. 全量数据源扫描,识别跨 agent 共性模式\n   c. 逐个审查 proposalapprove / merge / reject\n   d. 全局提升检查(Recurrence-Count >= 3 的经验提升为规则)\n   e. 知识缺口反馈到 knowledge-gaps.md",
    "timeoutSeconds": 1200
  },
  "delivery": { "mode": "announce" }
}

设计要点:

  • delivery.mode: "announce":审查决策结果投递到 Control UI,主公可见
  • timeoutSeconds: 1200(20 分钟):L2 需要扫描全量数据源 + 审查多个 proposal,时间更长
  • 庞统可以访问所有 agent 的 JSONL 和 skill_workshop proposals

S5: IMPROVE 每周引用追踪 cron

庞统每周日 06:00 执行引用追踪(周日选活动量最低的时段):

角色 agentId cron 表达式 时区
庞统 pangtong-fujunshi 0 6 * * 0 Asia/Shanghai

Cron 配置:

{
  "schedule": { "kind": "cron", "expr": "0 6 * * 0", "tz": "Asia/Shanghai" },
  "sessionTarget": "isolated",
  "agentId": "pangtong-fujunshi",
  "payload": {
    "kind": "agentTurn",
    "message": "IMPROVE 每周引用追踪 cron。请执行:\n1. read ~/.sanguo_projects/sanguo_mozi/skills/skill-management/references/improve.md\n2. 按 improve.md 步骤执行:\n   a. 扫描过去 7 天所有 agent 的 session JSONL,采集 Skill 引用信号\n   b. 生成淘汰候选报告(30 天无引用的 Skill)\n   c. 庞统审阅决策:quarantine / 保留观察 / 更新后保留\n   d. 经验提升检查(被频繁引用 >= 5 次的 Skill\n   e. 反馈知识缺口到 knowledge-gaps.md",
    "timeoutSeconds": 1800
  },
  "delivery": { "mode": "announce" }
}

设计要点:

  • delivery.mode: "announce":淘汰/提升报告投递到 Control UI
  • timeoutSeconds: 1800(30 分钟):全量 JSONL 扫描是最重的操作
  • 每周一次频率足够——Skill 引用变化不会很快
  • 淘汰决策通过 skill_workshop quarantine 执行,提升决策通过手动编辑 AGENTS.md

Cron 创建方式

使用 openclaw cron 工具创建。不是 moziplus 管理,而是直接在 openclaw 层面配置。

创建顺序:先 S3(L1),再 S4(L2),最后 S5IMPROVE)。

创建后验证:cron(action=list) 确认所有 job 存在且 enabled=true。

去重和幂等

每个 cron job 的 name 包含 agent 名,避免命名冲突:

  • l1-distill-zhangfei
  • l1-distill-guanyu
  • l1-distill-zhaoyun
  • l1-distill-simayi
  • l1-distill-pangtong
  • l1-distill-jiangwei
  • l2-review-pangtong
  • improve-weekly-pangtong

创建前先 cron(action=list) 检查同名 job 是否已存在,避免重复创建。

11B. 一致性偏差修复清单(S6 补充)

§19 设计-实现一致性检查(2026-06-18)发现以下偏差,列入 S6 一并修复:

# 偏差 严重度 修复方式
B4 ticker.py:336-348 ExperienceDistiller 调用未移除 移除 experience_distiller 参数和调用,日志改为 debug 级空转提示
B5 skill_system.py / experience.py 未标记 deprecated 文件头部加 # DEPRECATED — §19 重设计,不再参与 skill 发现/加载 注释
B6 SELF_IMPROVEMENT_REMINDER.md 引用残留 AGENTS.md 中已标注废弃,但 system prompt 仍注入。从 workspace 文件列表中移除该文件

B4 修复细节

ticker.py 构造函数 __init__ 接受 experience_distiller 参数(默认 None),tick() 中第 336-348 行有条件调用。修复方式:

  • 保留参数(向后兼容),但条件块内加 logger.debug("ExperienceDistiller deprecated per §19, skipping") 后直接 return
  • 不删除代码(P3 级清理时再做物理删除)

B6 修复细节

当前 Project Context 中注入了 SELF_IMPROVEMENT_REMINDER.md 的内容。该文件在 workspace-pangtong 中已不存在(被删),但 system prompt 模板仍引用它。修复方式:确认文件不存在即可——openclaw 会跳过不存在的注入文件。实际已无影响,标注为 resolved。

12. wiki-vault / 知识库参考实践映射

设计决策 参考来源 核心借鉴
统一产物 Skill-only Hermes skill_manage + memory_tool 只有 Skill 和 Memory 两种载体
HOW not WHAT nuwa-skill 实践 #5 蒸馏思维方式不是知识内容
description = when not how Superpowers writing-skills description 只描述触发条件
质量检查自动化 nuwa-skill quality_check.py 结构化检查代替主观判断
矛盾处理 nuwa-skill 实践 #10 矛盾是特征不是 Bug
Skill 自我修补 Hermes skill_manage schema 使用时发现问题立即 patch
闭环学习循环 知识管理体系实践 #1 DISCOVER→DISTILL→APPLY→IMPROVE
Experience→Skill 延迟转化 moziplus 经验实践 #2 多次验证后才固化
Skill 生命周期 draft→active→deprecated OpenClaw skill_workshop pending→applied→rejected→quarantined
棘轮机制 moziplus 经验实践 #2 经验只能改进不能退化
优雅降级 nuwa-skill 实践 #17 信息不足时不要强行蒸馏
迭代上限 nuwa-skill 实践 #18 最多 2 轮验证,不无限打磨
双层 daily 蒸馏 self-improvement skill daily review 有距离感的蒸馏优于即时记录
结构化信号格式 self-improvement skill logging format ID/Status/Priority/See Also/Recurrence-Count
Recurrence-Count 验证 self-improvement skill recurring pattern detection ≥3 次自动触发提升,比主观判断更客观
Skill Extraction Criteria self-improvement skill extraction Recurring + Verified + Non-obvious + Broadly applicable
per-agent Skill 目录 Hermes skill_manage + self-improving-agent practice §5 每个 agent 建立自己的 Skill 库
废弃 .learnings/ DISCOVER 统一采集 JSONL 是唯一数据源,避免信息冗余
组合模式(主 skill + references moziplus skill-engineering practices §4 Skill 之间通过产出物松耦合传递

13. 部署目录结构

13.1 openclaw skill 加载优先级

OpenClaw 按 6 级优先级扫描 skill 目录,同名 skill 高优先级覆盖低优先级:

优先级 来源 路径 可见性
1 — 最高 Workspace skills <workspace>/skills 只对该 agent
2 Project agent skills <workspace>/.agents/skills 只对该 workspace 的 agent
3 Personal agent skills ~/.agents/skills 所有 agent
4 Managed / local skills ~/.openclaw/skills 所有 agent
5 Bundled skills 随安装包(/opt/homebrew/.../openclaw/skills/ 所有 agent
6 — 最低 Extra dirs + plugin skills skills.load.extraDirs + ~/.openclaw/plugin-skills/ 所有 agent

13.2 skill-management Skill 目录结构

放在公共目录(~/.sanguo_projects/sanguo_mozi/skills/),所有 moziplus agent 可见:

~/.sanguo_projects/sanguo_mozi/skills/skill-management/
├── SKILL.md                    # 主 Skill:综述 + 核心原则 + 各阶段职责摘要
├── references/
│   ├── discover-l1.md          # L1 各 agent 自蒸馏详细操作(03:00 cron 读这个)
│   ├── discover-l2.md          # L2 庞统整合详细操作(05:00 cron 读这个)
│   ├── distill.md              # DISTILL 阶段详细操作(蒸馏规范 + 验证标准)
│   ├── apply.md                # APPLY 阶段说明(openclaw 原生机制,简短)
│   └── improve.md              # IMPROVE 阶段详细操作(引用追踪 + 淘汰 + 提升)
└── assets/
    ├── templates/
    │   ├── skill-template.md   # SKILL.md 标准模板
    │   └── signal-format.md    # 信号输出格式模板(ID/Priority/Pattern-Key
    └── checklists/
        └── quality-check.md    # 质量检查清单

为什么放公共目录:所有 agent 都需要触发这个 skillDISCOVER L1 时各 agent 按 description 匹配 → read SKILL.md → 再按需 read references/)。DISCOVER/IMPROVE 是 cron 场景,cron payload 中直接指定 read references/xxx.md 按内容执行。

为什么不拆分为独立 skill5 个 skill = 5 条 description 常驻上下文(~500-800 token)。其中 DISCOVER 和 IMPROVE 是 cron 触发不是 agent 按描述触发,不需要常驻 description。用 references/ 按需加载更省上下文。

13.3 Cron 产出流转路径

L1 产出(各 agent 03:00
  ↓ skill_workshop createpending proposal
  ↓ 存储:skill_workshop 内部管理(~/.openclaw/workspace-<agent>/.skill-workshop/
  ↓
L2 审查(庞统 05:00
  ↓ skill_workshop list → inspect → 决策
  ↓
  ├─ APPROVE(个人经验,质量达标)
  │   → skill_workshop apply
  │   → 写入:~/.openclaw/workspace-<agent>/skills/<skill-name>/SKILL.md
  │   → 仅该 agent 可见(workspace skill,优先级 1
  │
  ├─ MERGE(跨 agent 共性)
  │   → 合并多个 proposal 为共享 Skill
  │   → skill_workshop apply 到庞统 workspace,然后 cp/symlink 到公共目录
  │   → 写入:~/.sanguo_projects/sanguo_mozi/skills/<skill-name>/SKILL.md
  │   → 所有 agent 可见(extra dir,优先级 6
  │   → 清理:MERGE 后通知各 agent quarantine workspace 中的同名 draft
  │
  │   ⚠️ skill_workshop 只能写 workspace skills,不能写 extraDir。
  │   MERGE 流程的实际写入方式:庞统在 workspace apply 后,
  │   手动 cp 到公共目录(或配置 skills.load.allowSymlinkTargets 用 symlink)。
  │
  ├─ REJECT(质量不够)
  │   → skill_workshop reject(附原因)
  │   → agent 在下次 L1 蒸馏时看到反馈
  │
  └─ PROMOTE(高确定性,提升为确定性规则)
      → 手动写入 AGENTS.md / SOUL.md / TOOLS.md
      → 所有 agent 强制注入(L1 确定性规则层)

关键设计APPROVE 写入 per-agent workspace(优先级 1,最高),MERGE 写入公共目录(优先级 6,最低)。如果同名 skill 在两边都有,workspace 版本覆盖公共版本——agent 可以有自己改进过的版本。

13.4 Per-agent Skill 目录

各 agent workspace 下的 skills 目录(目前不存在,L2 审查 APPROVE 后由 skill_workshop 自动创建):

~/.openclaw/workspace-zhangfei/skills/    # 张飞的个人经验 Skill
~/.openclaw/workspace-guanyu/skills/       # 关羽的个人经验 Skill
~/.openclaw/workspace-zhaoyun/skills/      # 赵云的个人经验 Skill
~/.openclaw/workspace-simayi/skills/       # 司马懿的个人经验 Skill
~/.openclaw/workspace-pangtong/skills/     # 庞统的个人经验 Skill
~/.openclaw/workspace-jiangwei/skills/     # 姜维的个人经验 Skill

适用场景

  • 张飞的编码踩坑模式 → 只有张飞需要,不污染其他 agent 上下文
  • 司马懿的审查技巧 → 只有司马懿需要
  • 庞统的规划经验 → 只有庞统需要

13.5 Proposal 中间产物存储

~/.openclaw/workspace-<agent>/.skill-workshop/
├── proposals/
│   ├── <proposal-id>/
│   │   ├── PROPOSAL.md          # 草案内容
│   │   ├── metadata.json        # 状态、hash、scanner state
│   │   └── support-files/       # 附带的 references/assets
│   └── ...
├── applied/                      # 已 apply 的 proposal 归档
├── rejected/                     # 已 reject 的 proposal 归档
└── quarantined/                  # 已 quarantine 的 proposal 归档

注意proposal 存储由 skill_workshop 内部管理,不需要手动操作。首次使用 skill_workshop 时自动创建 .skill-workshop/ 目录。庞统 L2 cron 通过 skill_workshop list(查看所有 agent 的 pending proposal+ skill_workshop inspect(查看具体内容)+ skill_workshop apply/reject/quarantine(执行决策)完成审查。

13.6 全景目录结构

# ━━━━━━━ Skill 来源(按 openclaw 优先级) ━━━━━━━━

# P1: Per-agent workspace skills(个人经验,L2 APPROVE 后写入)
~/.openclaw/workspace-<agent>/skills/<skill-name>/SKILL.md

# P4: Managed / local skills(保留,目前为空)
~/.openclaw/skills/

# P5: Bundled skillsopenclaw 自带,不动)
/opt/homebrew/lib/node_modules/openclaw/skills/

# P6: Extra dirs + plugin skills
~/.sanguo_projects/sanguo_mozi/skills/          # moziplus 团队共享 Skill
├── skill-management/                           # ← §19 核心 Skill
│   ├── SKILL.md
│   ├── references/{discover-l1, discover-l2, distill, apply, improve}.md
│   └── assets/{templates, checklists}/
├── blackboard-executor/                        # 现有
├── blackboard-reviewer/                        # 现有
├── trial-and-error-patterns/                   # 现有(经验会追加到这里)
└── ...(其他现有 skill

~/.openclaw/plugin-skills/                      # plugin Skillfeishu 等)

# ━━━━━━━ Cron 产出流转 ━━━━━━━━

# L103:00 各 agent
#   输入:~/.openclaw/agents/<agent_id>/sessions/*.jsonl
#   产出:skill_workshop create → proposalpending
#   存储:~/.openclaw/workspace-<agent>/.skill-workshop/proposals/

# L205:00 庞统)
#   输入:全量数据源 + 所有 pending proposals
#   审查:skill_workshop list → inspect → apply/merge/reject
#   产出:
#     APPROVE → ~/.openclaw/workspace-<agent>/skills/<skill-name>/per-agent
#     MERGE   → ~/.sanguo_projects/sanguo_mozi/skills/<skill-name>/(共享)
#     REJECT  → proposal 归档到 rejected/
#     PROMOTE → 手动写入 AGENTS.md / SOUL.md / TOOLS.md

# IMPROVE(每周 庞统)
#   输入:过去 7 天所有 agent 的 session JSONL
#   产出:淘汰候选报告 → skill_workshop quarantine

# ━━━━━━━ 废弃的目录(保留历史,不再写入) ━━━━━━━━

# .learnings/ — 不再写入
~/.openclaw/workspace-*/.learnings/

# self-improvement skill — 不再激活
~/.openclaw/workspace/skills/self-improving-agent/

# SELF_IMPROVEMENT_REMINDER.md — 废弃
# 规则已融合到 skill-management skill 中