# Self Improving Skill

> 让任何 writing style skill 自动从人类修改中学习，并定期自我修剪。 observe: 记录 original→final | improve: 提取规则+去重 | prune: 月度修剪 完整闭环：增长（daily）+ 收敛（monthly）= 规则数稳定在合理范围。 兼容 Claude Code (~/.claude/skills/) 和 OpenClaw (ClawHub)。

- Skill: `jzocb/self-improving-skill` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add jzocb/self-improving-skill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jzocb/self-improving-skill/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jzOcb (https://skillmd.com/u/jzocb)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jzocb/self-improving-skill

---


# Self-Improving Skill Framework v2.0

**让你的 writing style skill 越用越准，同时不膨胀。**

---

## 🎯 核心概念

```
AI 写初稿 → 人类改到满意 → 对比两版 → 提取规则 → 更新 skill
     ↑                                              ↓
     └──────── 下次写作自动应用新规则 ←──────────────┘
                                                     ↓
                              月度 pruning ← 规则膨胀检测
                              (去重 + 合并 + 分层 + 删除)
```

**v2.0 新增：Pruning 闭环** — 规则只增不减 = 最终不可用。现在 improve 负责增长，prune 负责收敛。

**只有两个数据点：**
- **original**: AI 生成的第一版（不管用了什么 prompt/skill）
- **final**: 人类最终确认的版本（不管中间改了几轮、怎么改的）

中间过程不记录。Google Doc 来回改了 10 轮？无所谓，只比较首尾。

---

## 📋 使用流程

### 第一步：配置目标 skill

在你的 writing style skill 目录下创建 `self-improving.yaml`：

```yaml
# ~/your-skill/self-improving.yaml
target_skill: ~/path/to/your-writing-style/SKILL.md
log_dir: ~/clawd/memory/skill-runs/your-skill-name/
proposal_dir: ~/clawd/memory/skill-proposals/your-skill-name/
backup_dir: ~/clawd/memory/skill-backups/your-skill-name/
```

或者用环境变量 / 命令行参数覆盖（见下文）。

### 第二步：Agent 写完内容后，记录原稿

```bash
python3 ~/clawd/skills/self-improving-skill/scripts/observe.py record-original <file> \
  --skill ~/path/to/your-writing-style/
```

或直接传文本：
```bash
python3 observe.py record-original --text "AI 生成的内容..."
```

**输出：**
```
✅ 记录原稿: a3f8c2e1
📝 字数: 1234
```

记住这个 hash（`a3f8c2e1`），后面配对用。

### 第三步：人类确认最终版后，记录 final

```bash
python3 observe.py record-final <file> --match a3f8c2e1
```

**如果人类没改直接用了？** 也 record-final，脚本自动检测内容一致 → 标记为无修改（正反馈）。

### 第四步：提取改进规则

```bash
# 手动提取
python3 ~/clawd/skills/self-improving-skill/scripts/improve.py extract --days 7

# 或自动模式（适合 cron）：提取 + 自动应用 P0 规则
python3 improve.py auto
```

### 第五步：查看 / 应用 / 回滚

```bash
python3 improve.py show        # 查看所有提案
python3 improve.py apply <id>  # 应用某个提案
python3 improve.py rollback    # 回滚上次应用
```

---

## ⚙️ 自动化（推荐）

### 集成到你的内容创作流程

在你的 contentgen / writing skill 中加入：

```markdown
## 写完内容后必须做的事

1. 写完初稿 → `observe.py record-original <file>`
2. 人类确认最终版 → `observe.py record-final <file> --match <hash>`
```

### Cron Job

```bash
# 每晚自动提取 + 应用 P0 规则
# schedule: 0 23 * * * (每晚 11pm)
python3 ~/clawd/skills/self-improving-skill/scripts/improve.py auto \
  --skill ~/path/to/your-writing-style/
```

OpenClaw 用户可以用内置 cron：
```
cron add --name "skill-daily-extract" --schedule "0 23 * * *" --tz "America/New_York" \
  --payload "运行 improve.py auto 自动提取写作风格改进"
```

---

## 📂 数据结构

```
~/clawd/memory/
├── skill-runs/your-skill/
│   └── YYYY-MM-DD.jsonl        # 每日观察日志
│       ├── {type: "original", content_hash, content, context}
│       └── {type: "final", content_hash, original_content, final_content, no_change}
│
├── skill-proposals/your-skill/
│   └── YYYYMMDD-HHMMSS.md     # 改进提案（P0/P1/P2 分级）
│
└── skill-backups/your-skill/
    └── SKILL-YYYYMMDD-HHMMSS.md  # apply 前自动备份
```

---

## 🔄 循环原理

### 为什么只看 original vs final？

1. **中间过程有噪音** — 人类可能改了又改回来，中间状态不代表最终偏好
2. **指令不等于规则** — "把开头改一下"是一次性指令，不是通用规则。但如果 final 里开头确实更直接，diff 能自动捕捉
3. **简单就是可靠** — 两个数据点不会出错，复杂流程容易断

### 什么算好的学习数据？

| 数据 | 价值 |
|------|------|
| AI 原稿 2000 字 → final 1800 字（删了废话）| ⭐⭐⭐ 高 |
| AI 原稿 → final 完全不变（直接用）| ⭐⭐ 正反馈 |
| AI 原稿 500 字 → final 2000 字（大幅扩写）| ⭐ 低（扩写靠 prompt 不靠 style） |
| AI 原稿 → final 只改了一个错别字 | ⭐ 低（不是风格问题）|

### P0 / P1 / P2 规则分级

- **P0**: 高置信度（多次出现同一模式），cron 自动应用
- **P1**: 中置信度，需要人工确认后应用
- **P2**: 低置信度（只出现 1 次），存档观察

---

## ✂️ 月度 Pruning（v2.0 新增）

**问题：** 规则只增不减，3 个月后 SKILL.md 变成 100+ 条规则的怪物。Agent 读不完，互相矛盾，执行效果反而下降。

**解法：** 每月跑一次 LLM 辅助的 pruning。

### 工具

```bash
# 提取当前所有规则
python3 prune.py extract --skill ~/path/to/your-writing-style/

# 触发频率统计
python3 prune.py stats --skill ~/path/to/your-writing-style/

# 生成 pruning 报告（供 LLM 或人工审核）
python3 prune.py report --skill ~/path/to/your-writing-style/
```

### LLM Pruning 流程

1. `prune.py report` 生成输入 JSON + 报告模板
2. LLM 读取全部规则 + learnings 统计，做四件事：
   - **语义去重**：找重叠规则，建议合并
   - **冲突检测**：找矛盾规则，标注适用边界
   - **优先级排序**：P0 红线（≤5）/ P1 风格（≤10）/ P2 技巧（剩余）
   - **删除建议**：被覆盖或过于细碎的规则
3. 人类确认后执行合并/删除/重排

### 与 improve.py 的联动

`improve.py` v2.0 内置了去重和膨胀检测：

- **extract 阶段**：新规则候选会自动比对现有规则列表，语义重复的标注"已覆盖"或"建议合并"
- **apply 阶段**：新规则默认加到 P2 区域末尾，不破坏 P0/P1 分层
- **auto 完成后**：自动检查 P2 规则数，超过 25 条输出 ⚠️ 提醒提前 pruning

### Cron 月度 Pruning

```bash
# schedule: 0 10 1 * * (每月 1 号 10am)
# 建议用 LLM agentTurn 执行：读 report → 分析 → 写结果 → announce 给人类审核
```

### 闭环图

```
Daily (improve.py auto):
  观察 → 提取 → 去重检查 → 应用 P0 → 膨胀检测
                                          ↓ (P2 > 25?)
Monthly (prune.py + LLM):               ⚠️ 提前触发
  生成报告 → LLM 分析 → 人类确认 → 合并/删除/重排
                                          ↓
  规则数回到合理范围 (目标: P0≤5, P1≤10, P2≤25, 总≤50)
```

---

## 🛡 安全机制

1. **每次 apply 前自动备份** SKILL.md → `skill-backups/`
2. **一键回滚**: `improve.py rollback`
3. **auto 模式只应用 P0** — P1/P2 需要人工确认
4. **提案可审核** — 所有提案以 markdown 保存，可读可编辑

---

## 📊 CLI 参考

### observe.py

| 命令 | 功能 |
|------|------|
| `record-original <file>` | 记录 AI 原稿 |
| `record-original --text "..."` | 直接传文本 |
| `record-final <file> --match <hash>` | 记录最终版 |
| `pending` | 查看待配对原稿 |
| `stats` | 总体统计 |

### improve.py

| 命令 | 功能 |
|------|------|
| `extract` | 提取改进建议（默认今天）|
| `extract --days 7` | 最近 7 天 |
| `auto` | 自动提取 + 应用 P0 + 去重检查 + 膨胀检测（cron 用）|
| `show` | 查看所有提案 |
| `apply <id>` | 应用指定提案（新规则加到 P2 末尾）|
| `rollback` | 回滚上次应用 |

### prune.py（v2.0 新增）

| 命令 | 功能 |
|------|------|
| `extract` | 提取所有规则到 JSON（含 P0/P1/P2 分层）|
| `stats` | 显示 learnings 触发频率统计 |
| `report` | 生成 pruning 报告模板（供 LLM/人工审核）|

---

## 💡 适用场景

这个 framework 不限于写作风格，任何 "AI 生成 → 人类修改" 的循环都适用：

- Writing style skill（推文、文章、小红书）
- Code review rules（AI 写代码 → 人类 review）
- Email drafting（AI 写邮件 → 人类调整语气）
- Translation style（AI 翻译 → 人类润色）

核心不变：**记录 original + final，自动 diff 提取规则。**

---

## 🔧 安装

### Claude Code 用户

```bash
# 方式 1: 直接复制到 skills 目录
cp -r self-improving-skill ~/.claude/skills/

# 方式 2: 项目级 skill
cp -r self-improving-skill ./your-project/.claude/skills/
```

数据自动存储在 `~/.claude/memory/skill-runs/` 下。

### OpenClaw / ClawHub 用户

```bash
# 方式 1: ClawHub 安装
npx clawhub@latest install self-improving-skill

# 方式 2: 手动复制
cp -r self-improving-skill ~/clawd/skills/
```

数据自动存储在 `~/clawd/memory/skill-runs/` 下。

### LLM 依赖

`improve.py extract/auto` 需要一个 LLM CLI 来分析 diff。自动检测：

| CLI | 安装 | 说明 |
|-----|------|------|
| `claude` | Claude Code 自带 | 优先使用 |
| `llm` | `pip install llm` | Simon Willison 的通用 CLI |
| 自定义 | `IMPROVE_LLM_CMD=...` | 任意接受 stdin 的命令 |

`observe.py` 不依赖任何 LLM，纯 Python，零依赖。

### 自定义存储路径

```bash
# 环境变量
export SKILL_BASE_DIR=~/my-custom-path/memory

# 或命令行参数
python3 observe.py stats --log-dir ~/my-path/skill-runs/my-skill/
```

