
# Auto Skill Optimizer
**像训练模型一样优化你的 Claude Code Skills。**
受 [Andrej Karpathy 的 autoresearch](https://github.com/karpathy/autoresearch) 启发,将自主实验循环从模型训练搬到 Skill 优化领域。一个只能向前转的棘轮。
> [**查看可视化展示页 →**](https://alchaincyf.github.io/auto-skill-optimizer/)
---
## 核心循环
```mermaid
graph LR
A["🔍 评估"] --> B["🔧 改进"]
B --> C["🧪 实测验证"]
C --> D["👤 人类确认"]
D --> E{分数提升?}
E -->|Yes| F["✅ 保留 commit"]
E -->|No| G["↩️ git revert"]
F --> A
G --> A
style A fill:#D4532B,color:#fff,stroke:none
style B fill:#333,color:#fff,stroke:none
style C fill:#333,color:#fff,stroke:none
style D fill:#333,color:#fff,stroke:none
style E fill:#fafafa,color:#111,stroke:#D4532B,stroke-width:2px
style F fill:#2B8A3E,color:#fff,stroke:none
style G fill:#C92A2A,color:#fff,stroke:none
```
---
## 为什么做这个
Claude Code 的 Skill 生态在快速扩张。当你有 10 个 Skills 时可以手动维护;当你有 60+ 个 Skills 时,你需要一个系统。
传统的 Skill 审查是**纯结构性的**:检查格式对不对、步骤有没有编号、路径能不能访问。但一个格式完美的 Skill,跑出来的效果可能很差。
Auto Skill Optimizer 同时评估**结构质量**和**实际效果**,然后只保留真正有改进的修改。
---
## 从 autoresearch 到 Skill Optimizer
```mermaid
graph TB
subgraph autoresearch["🔬 Karpathy autoresearch"]
direction TB
AR1["program.md
目标与约束"]
AR2["train.py
被优化的代码"]
AR3["val_bpb
评估指标"]
AR4["git ratchet
只进不退"]
end
subgraph optimizer["⚡ Auto Skill Optimizer"]
direction TB
SO1["SKILL.md
评估标准与约束"]
SO2["每个 SKILL.md
被优化的资产"]
SO3["8 维加权总分
结构 60 + 效果 40"]
SO4["keep / revert
只保留改进"]
end
AR1 -.->|映射| SO1
AR2 -.->|映射| SO2
AR3 -.->|映射| SO3
AR4 -.->|映射| SO4
style autoresearch fill:#fafafa,stroke:#999,stroke-width:1px
style optimizer fill:#fdf2ec,stroke:#D4532B,stroke-width:2px
style AR1 fill:#f5f5f5,stroke:#999,color:#333
style AR2 fill:#f5f5f5,stroke:#999,color:#333
style AR3 fill:#f5f5f5,stroke:#999,color:#333
style AR4 fill:#f5f5f5,stroke:#999,color:#333
style SO1 fill:#D4532B,color:#fff,stroke:none
style SO2 fill:#D4532B,color:#fff,stroke:none
style SO3 fill:#D4532B,color:#fff,stroke:none
style SO4 fill:#D4532B,color:#fff,stroke:none
```
关键区别:autoresearch 全自主运行(loss 可以自动比较),Skill 优化增加了**人在回路**。因为 Skill 的「好坏」不像 loss 那样可以纯数值判断。
---
## 五条核心原则
```
01 单一可编辑资产 每次只改一个 SKILL.md,变量可控,改进可归因
02 双重评估 结构评分(静态分析)+ 效果验证(跑测试看输出)
03 棘轮机制 只保留改进,自动回滚退步,分数只升不降
04 独立评分 评分用子 agent,避免「自己改自己评」的偏差
05 人在回路 每个 Skill 优化完后暂停,用户确认再继续
```
---
## 8 维度评估体系
总分 100。结构维度靠静态分析(60分),效果维度必须实测(40分)。
```mermaid
graph LR
subgraph structure["结构维度 — 60 分"]
S1["Frontmatter 质量
8"]
S2["工作流清晰度
15"]
S3["边界条件覆盖
10"]
S4["检查点设计
7"]
S5["指令具体性
15"]
S6["资源整合度
5"]
end
subgraph effect["效果维度 — 40 分"]
E1["整体架构
15"]
E2["🎯 实测表现
25"]
end
structure --> TOTAL["总分
100"]
effect --> TOTAL
style structure fill:#f5f5f5,stroke:#999,stroke-width:1px
style effect fill:#fdf2ec,stroke:#D4532B,stroke-width:2px
style TOTAL fill:#D4532B,color:#fff,stroke:none
style E2 fill:#D4532B,color:#fff,stroke:none
style S1 fill:#fff,stroke:#ddd
style S2 fill:#fff,stroke:#ddd
style S3 fill:#fff,stroke:#ddd
style S4 fill:#fff,stroke:#ddd
style S5 fill:#fff,stroke:#ddd
style S6 fill:#fff,stroke:#ddd
style E1 fill:#fff,stroke:#ddd
```
> 实测表现权重最高(25分)。Skill 写得再漂亮,跑出来效果不好就是零。
---
## 优化循环:5 个阶段
```mermaid
graph TB
P0["Phase 0
初始化
确定范围 · 创建 git 分支 · 加载历史"]
P05["Phase 0.5
测试设计
为每个 Skill 设计 2-3 个测试 prompt"]
P1["Phase 1
基线评估
8 维度打分 · 建立优化前基准线"]
P2["Phase 2
优化循环
诊断 → 改进 → 重评 → keep/revert"]
P3["Phase 3
汇总报告
Before/After 分数表 · 关键改进摘要"]
P0 --> P05
P05 -->|"👤 人类确认测试 prompt"| P1
P1 -->|"👤 人类确认基线分数"| P2
P2 -->|"👤 每个 Skill 完成后确认"| P3
style P0 fill:#f5f5f5,stroke:#999,color:#333
style P05 fill:#f5f5f5,stroke:#999,color:#333
style P1 fill:#333,color:#fff,stroke:none
style P2 fill:#D4532B,color:#fff,stroke:none
style P3 fill:#333,color:#fff,stroke:none
```
**Phase 2 的核心逻辑**:
```mermaid
graph TB
A["找出得分最低的维度"] --> B["生成 1 个具体改进方案"]
B --> C["编辑 SKILL.md · git commit"]
C --> D["子 agent 独立重新评分"]
D --> E{"新分 > 旧分?"}
E -->|"Yes ✅"| F["保留改进"]
E -->|"No ❌"| G["git revert"]
F --> H{"达到 3 轮?"}
G --> I["跳到下一个 Skill"]
H -->|No| A
H -->|Yes| I
I --> J["👤 展示 diff + 分数变化
等待人类确认"]
style A fill:#333,color:#fff,stroke:none
style E fill:#fafafa,stroke:#D4532B,stroke-width:2px,color:#111
style F fill:#2B8A3E,color:#fff,stroke:none
style G fill:#C92A2A,color:#fff,stroke:none
style J fill:#D4532B,color:#fff,stroke:none
```
---
## 棘轮机制
分数只能上升。每一轮要么改进 Skill,要么干净地回滚。不会随时间积累局部退化。
```mermaid
graph LR
R0["72
基线"]
R1["78
✅ 保留"]
R2["75
❌ 回滚"]
R3["84
✅ 保留"]
R4["87
✅ 保留"]
R0 --> R1 --> R2 --> R3 --> R4
style R0 fill:#666,color:#fff,stroke:none
style R1 fill:#2B8A3E,color:#fff,stroke:none
style R2 fill:#fff,color:#C92A2A,stroke:#C92A2A,stroke-width:2px,stroke-dasharray:5 5
style R3 fill:#2B8A3E,color:#fff,stroke:none
style R4 fill:#2B8A3E,color:#fff,stroke:none
```
轮次 2 的 75 分低于当前最优的 78 分,被自动回滚。有效基线始终锁定在 78,后续改进从 78 继续。
---
## 为什么需要双重评估
```mermaid
graph TB
subgraph old["❌ 纯结构审查"]
O1["检查 frontmatter 格式"]
O2["验证步骤编号"]
O3["确认路径有效"]
O4["⚠️ 无法判断实际输出质量"]
O5["⚠️ 无法检测过度约束"]
end
subgraph new["✅ 双重评估"]
N1["结构评分 + 实测验证"]
N2["跑真实 prompt 对比输出"]
N3["子 agent 独立评分"]
N4["每轮只改一个维度"]
N5["分数不涨就回滚"]
end
style old fill:#f9f9f9,stroke:#ccc,stroke-width:1px
style new fill:#fdf2ec,stroke:#D4532B,stroke-width:2px
style O4 fill:#fff5f5,stroke:#C92A2A,color:#C92A2A
style O5 fill:#fff5f5,stroke:#C92A2A,color:#C92A2A
style N1 fill:#D4532B,color:#fff,stroke:none
style N2 fill:#D4532B,color:#fff,stroke:none
style N3 fill:#D4532B,color:#fff,stroke:none
```
---
## 快速开始
### 安装
```bash
# 将 SKILL.md 放入 Claude Code Skills 目录
mkdir -p ~/.claude/skills/huashu-auto-skill-optimizer
cp SKILL.md ~/.claude/skills/huashu-auto-skill-optimizer/SKILL.md
```
### 使用
```
# 评估所有 Skills(只评估不改)
> 评估所有 skills
# 优化指定 Skill
> 优化 huashu-slides 这个 skill
# 全量优化(推荐首次使用)
> 优化所有 skills
# 查看历史
> 看看 skill 优化历史
```
### 输出示例
```
┌──────────────────────────┬────────┬────────┬────────┐
│ Skill │ Before │ After │ Δ │
├──────────────────────────┼────────┼────────┼────────┤
│ huashu-proofreading │ 78 │ 87 │ +9 │
│ huashu-slides │ 72 │ 83 │ +11 │
│ huashu-publish │ 81 │ 88 │ +7 │
├──────────────────────────┼────────┼────────┼────────┤
│ 平均 │ 77 │ 86 │ +9 │
└──────────────────────────┴────────┴────────┴────────┘
```
---
## 设计灵感
这个项目的设计直接受 **Andrej Karpathy 的 [autoresearch](https://github.com/karpathy/autoresearch)** 启发。
autoresearch 证明了一个优雅的想法:你可以把「写论文」这件事变成一个自主实验循环。定义目标(`program.md`),让 agent 不断生成和测试变更(`train.py`),用可量化的指标(`val_bpb`)决定保留还是回滚。
Auto Skill Optimizer 把同样的思路搬到了 Claude Code Skill 优化。区别在于:
1. **评估更复杂**:需要 8 个维度的加权评分,单一数值说不清楚
2. **需要实测**:结构评分只是一半,另一半必须跑真实 prompt 看效果
3. **人在回路**:Skill 的「好」是主观的,需要人来做最终判断
核心机制完全相同:**只保留可测量的改进,其余全部回滚。**
---
## 约束规则
1. 不改变 Skill 的核心功能和用途
2. 不引入新依赖
3. 每轮只改一个维度,避免多变更无法归因
4. 优化后 SKILL.md 不超过原始大小的 150%
5. 所有改动在 git 分支上,用 git revert 回滚
6. 效果维度必须用子 agent 评分,不能自己改完自己评
---
## 文件结构
```
auto-skill-optimizer/
├── README.md # 你正在看的文件
├── SKILL.md # 核心:评估标准 + 优化流程 + 约束规则
├── showcase.html # Pentagram 风格的可视化展示页(可本地打开)
└── assets/
└── aso-hero.png # README 配图
```
---
## 致谢
- [Andrej Karpathy](https://github.com/karpathy) 的 [autoresearch](https://github.com/karpathy/autoresearch) 提供了核心设计灵感
- [Claude Code](https://claude.ai/code) 的 Skill 生态提供了优化场景
- [花叔](https://x.com/AlchainHust) 的 60+ Skills 实践提供了真实测试环境
---
**License**: MIT