Darwin Skill 2.0
v2.1 · 2026-06-10 — keep/revert 棘轮从「绝对分数 delta」改为「paired 同-judge 比较 + 奇数 N 多数决」(绝对分数 ±8 judge 噪音淹没保守编辑的真实增益、是 false-revert 源;within-judge 比较消除换尺污染)。绝对分数降级为 triage-only。 v2.0 · 2026-05-28 — 吸收 Microsoft Research SkillLens(arXiv 2605.23899)的 9 维评分药方 + SkillOpt(arXiv 2605.23904)的 validation-gated 验证机制 + human in the loop 三层守关。
借鉴 Karpathy autoresearch 的自主实验循环,对 skills 进行持续优化。 核心理念:评估 → 改进 → 实测验证 → 人类确认 → 保留或回滚 → 生成成果卡片 GitHub: https://github.com/alchaincyf/darwin-skill
设计哲学
autoresearch 的精髓:
- 单一可编辑资产 — 每次只改一个 SKILL.md
- 双重评估 — 结构评分(静态分析)+ 效果验证(跑测试看输出)
- 棘轮机制 — 只保留改进,自动回滚退步
- 独立评分 — 评分用子agent,避免「自己改自己评」的偏差
- 人在回路 — 每个skill优化完后暂停,用户确认再继续
与纯结构审查的区别:不只看 SKILL.md 写得规不规范,更看改完后实际跑出来的效果是否更好。
评估 Rubric(9维度,总分100)
设计依据:基于 SkillLens 论文(arXiv 2605.23899)实证发现——LLM-as-judge 评估 skill 质量准确率仅 46.4%(接近随机),加入 meta-skill 三维度后提升到 73.8%。本 rubric 强化 dim3 / dim5 评分标准,新增 dim9「反例与黑名单」,权重平衡到 100。目的:让评分对真实质量更敏感,减少 LLM judge 的乐观偏差。
结构维度(59分)— 静态分析
效果维度(35分)— 需要实测
Meta-skill 维度(6分)— 反例与黑名单
评分规则
- 维度1-7、9:每个维度打 1-10 分,乘以权重得到该维度得分
- 维度8(实测表现):跑2-3个测试prompt,按输出质量打1-10分
- 总分 = Σ(维度分 × 权重) / 10,满分100
- ⚠️ 绝对总分只用于 triage(粗排「哪支最弱、先改谁」),绝不用于 keep/revert。实测:同一份未改文字换个 judge 评,总分可摆 ±8(一支只加了 3 个 🔴 字元的 skill、单评却 −8.5,全是 judge 换尺、非真实退步)。keep/revert 一律走 Phase 2 的 paired 比较。
- 为什么:LLM judge 给的是抽样、不是测量——分数住在「文字 × 该 judge 当下选的标准」里,不是文字属性。绝对总分 = 用两台未校准磅秤量节食前后,差值大半是磅秤差;paired = 同一台磅秤量前后,误差相减抵销。pairwise preference >> absolute scoring 是 LLM judge 的已知结论(RLHF 用 pairwise 不用绝对分同因)。
Rubric 的实证基础
rubric 设计依据来自 SkillLens 论文(arXiv 2605.23899) + 本机 controlled study:
- SkillLens 发现 LLM-as-judge 准确率仅 46.4%(接近随机),加入 meta-skill 三维度后升到 73.8%
- 本机对 huashu-research 做 4 类 degradation → 5 个独立 judge 盲测一致 V1>V2,Δ 均值 +46.5(5/5 high confidence)
结论:rubric 能识别 gross degradation,但 fine-grained quality difference 仍不可信,重要决策必须人审。
→ 详细论文证据 + 5 judges 完整数据 + HL 实战案例数字见 references/skilllens-evidence.md [blocked]
关于「实测表现」维度
这是与纯结构评分最大的区别。评分方式:
- 为每个skill设计2-3个典型用户prompt(不是边缘case,是最常见的使用场景)
- 用子agent执行:一个带skill跑,一个不带skill跑(baseline)
- 对比输出质量,从以下角度打分:
- 输出是否完成了用户意图?
- 相比不带skill的baseline,质量提升明显吗?
- 有没有skill引入的负面影响(过度冗余、跑偏、格式奇怪)?
若子 agent 不可用(超时/资源限制),退化为「干跑验证」:读完 skill 后模拟一个典型 prompt 的执行思路,判断流程是否合理;必须在 results.tsv 标注 dry_run。dry_run 比例 > 30% → 评估失效警告(来自本机 controlled study:dim8 实测维度权重 23%,无 full_test 验证时分数不可信)。
Runtime 适配性审查(gate 项,独立于 9 维度评分)
skill 应当能在 Claude Code / Codex / Cursor / OpenClaw / Hermes / Gemini CLI / OpenCode 等 50+ skills-compatible runtime 通用——否则其他 agent 解析时会被「在 Claude Code 里」「Claude Code skill」等措辞误判为「不是给我用的」直接拒装(实例:nuwa-skill 因此被 Marvis agent 拒绝)。
Phase 1 基线评估时强制跑一次红灯扫描
输出非空 = 红灯命中,但须先读命中行上下文排除假阳性(grep 命令本身/反例引用/讲解该规则的元陈述=假阳性,记 runtime_scan=false_positive 不改;判别表见 references/runtime-neutrality.md)→ 确认是真红灯(指令性用法)才强制把 Phase 2 第一轮定为 P0「runtime drift 修复」(写入 results.tsv 的 note 列 runtime_warn=N)。
例外(允许的「Claude Code 痕迹」)
frontmatter 触发词、花叔生态内部 skill 名引用、明确标注 runtime-specific 章节、commit message——这些正当出现,不算红灯。
→ 红灯/绿灯完整对照表 + 例外清单详细规则 + Phase 1/2/3 各阶段审查时机见 references/runtime-neutrality.md [blocked]
自主优化循环
Phase 0: 初始化
Phase 0.5: 测试Prompt设计
在评估之前,为每个skill设计测试prompt。这步很关键——没有测试prompt,「实测表现」维度就打不了分。
展示所有测试prompt给用户,确认后再进入评估。测试prompt的质量决定了优化方向是否正确。
Phase 1: 基线评估(Baseline)— triage 用途
本阶段绝对分数是 triage 排名(决定先改谁),不是 keep/revert 基准。judge 对 gross 差异会一致(「哪支最弱」可信),对 fine-grained delta 不可信(±8 噪音)。keep/revert 在 Phase 2 用 paired 比较。
如果子agent不可用(超时、环境限制),维度8用干跑验证打分,标注 dry_run。不要因为跑不了测试就跳过这个维度——哪怕是模拟推演也比完全不看效果好。
基线评估完成后,展示评分卡:
🔴 CHECKPOINT · 🛑 STOP:暂停等用户确认,再进入优化循环。
Phase 2: 优化循环
用户确认后,按基线分数从低到高排序,先优化最弱的。
Phase 2.5: 探索性重写(按需触发)
当 hill-climbing 连续2个skill都在 round 1 就 break(涨不动)时,提议一次「探索性重写」:
这解决了 hill-climbing 的局部最优问题——有时候需要「先拆后建」才能突破瓶颈。 🔴 CHECKPOINT · 🛑 STOP:必须征得用户同意后才执行。
Phase 3: 汇总报告
results.tsv 格式
eval_mode 列:paired(同 judge 比改前/改后,keep/revert 权威依据)|full_test(子agent 跑 prompt)|dry_run(模拟推演、仅供参考)。
paired 行:new_score 栏记 vote 比数(如 3-0 better),note 记一句裁断理由。例:
文件位置:.claude/skills/darwin-skill/results.tsv
实战 high-leverage 操作(精髓速查)
4 条经实战验证(huashu-gpt-image +10.85 / huashu-weread-advisor +14.9 / claude-design +16.5)。详细案例数据见 references/skilllens-evidence.md [blocked] 的「HL 实战案例」节。
- HL-1(dim4)显性视觉标记是杠杆:加 🔴 CHECKPOINT / 🛑 STOP,靠「必须」措辞不行——LLM 解析时扫描视觉标记。4 行改动撬动 dim4 +3 分
- HL-2(dim3)if-then 三段式 fallback 表:把「症状/解法」两列升级为「触发条件 / 一线修复 / 仍失败兜底」三段式。SkillLens failure-mechanism encoding 维度的落地
- HL-3(Phase 2 诊断)维度相关簇警告:dim2/3/4 是相关簇——修 dim3 时 dim2 常跟着涨。「找最大加权短板维度」时同时看相关簇短板再决定是否同步改
- HL-4(Phase 2 退出)触顶自动 break:连续 2 轮 Δ < 2 分 → break 进 Phase 3。+0.15 是停手信号不是继续信号;硬凑 MAX_ROUNDS=3 引入 over-engineering
优化策略库
按优先级排序,每轮只做最高优先级的一个:
P0: Runtime 适配性问题(gate 项命中 → 必须先修)
- README/SKILL.md 出现红灯措辞(如「在 Claude Code 里」「Claude Code skill」)→ 替换为 runtime-neutral 措辞
- Badge 钉死单一 runtime → 改为
Agent Skills Standard+skills.sh+Multi-Runtime三个中立 badge - 安装章节只给一种 runtime 的路径 → 改为「一行命令(auto-detect)+ 手动路径表 + 作为参考资料」三层结构
- 工作流硬编码 runtime-specific 工具且无 fallback → 给出通用替代方案或标注「仅在某 runtime 可用」
- 例外:skill 名明确标注单 runtime(如
xxx-codex)的,可跳过本项
P0: 效果问题(实测发现的)
- 测试输出偏离用户意图 → 检查skill是否有误导性指令
- 带skill比不带还差 → skill可能过度约束,考虑精简
- 输出格式不符合预期 → 补充明确的输出模板
P1: 结构性问题
- Frontmatter缺少触发词 → 补充中英文触发词
- 缺少Phase/Step结构 → 重组为线性流程
- 缺少用户确认检查点 → 在关键决策处插入
P2: 具体性问题
- 步骤模糊("处理图片")→ 改为具体操作和参数
- 缺少输入/输出规格 → 补充格式、路径、示例
- 缺少异常处理 → 补充 "如果X失败,则Y"
P3: 可读性问题
- 段落过长 → 拆分+用表格
- 重复描述 → 合并去重
- 缺少速查 → 添加TL;DR或决策树
异常与边界条件
流程假设环境理想,但实操常遇异常。以下预定义 fallback,保证优化过程不会「一跑就卡住」。
原则:异常先告知用户,再按规则处理;绝不静默跳过或静默失败。
darwin 操作反例黑名单(dim9 应用:darwin 自己优化时不要做的事)
来自本机 results.tsv 早期 40 次 0 revert 的教训 + Judge G/H 自指评估暴露的反模式。每条都是真实踩过的坑。
触发场景:每轮 Phase 2 改动前对照本表一次。任一反模式命中 → 改方案重写。
约束规则
- 不改变skill的核心功能和用途 — 只优化"怎么写"和"怎么执行",不改"做什么"
- 不引入新依赖 — 不添加skill原本没有的scripts或references文件
- 每轮只改一个维度 — 避免多个变更导致无法归因
- 保持文件大小合理 — 优化后SKILL.md不应超过原始大小的150%
- 尊重花叔风格 — 中文为主、简洁为上
- 可回滚 — 所有改动在git分支上,用git revert而非reset --hard
- 评分独立性 — 效果维度必须用子agent或至少干跑验证,不能在同一上下文里「改完直接评」
- Runtime 中立性 — skill 必须能在 Claude Code、Codex、Cursor、OpenClaw、Hermes 等任何 skills-compatible runtime 中正常运行。除非 skill 名明确绑定单一 runtime(如
xxx-codex、huashu-slides-codex),任何「在 Claude Code 里」「Claude Code skill」「单一 badge 钉死」「安装命令只给.claude/skills/一种路径」都视为 gate 不通过,须在 P0 优先修复(详见「Runtime 适配性审查」章节)
使用方式
全量优化(推荐首次使用)
单个优化
仅评估不改
查看历史
设计灵感
"You write the goals and constraints in program.md; let an agent generate and test code deltas indefinitely; keep only what measurably improves the objective." — Karpathy, autoresearch
本skill的对应关系:
- program.md → 本文件(评估rubric和约束规则)
- train.py → 每个SKILL.md
- val_bpb → ⚠️ 此处是 1.0 的概念错误源:autoresearch 的
val_bpb是确定性 loss(重跑同数),darwin 套到 LLM-judge 分数(随机抽样) 上却沿用「绝对值比大小」棘轮 → 不可重复的数当可重复用。修正:9 维 rubric 当 paired 比较准则、不当绝对 metric - git ratchet → 保留 paired 多数判「改后 ≥ 改前」的 commit(不是「绝对总分更高」的 commit)
- test set → 每个skill的test-prompts.json
区别:增加了人在回路(autoresearch是全自主的,skill优化需要人的判断力),以及双重评估机制(结构+效果),因为skill的「好坏」比loss数值更微妙。
学术依据 & Credits
- SkillLens(arXiv 2605.23899):9 维 rubric 的实证来源(LLM 自评 46.4% → 加 meta-skill 三维度后 73.8%)。
- SkillOpt(arXiv 2605.23904):validation-gated edits 形式化框架。代码 github.com/microsoft/SkillOpt(
pip install skillopt)、项目页 microsoft.github.io/SkillOpt。🤝 2026-06-03 微软官方仓库已把 darwin-skill 列入集成名单。 - autoresearch:github.com/karpathy/autoresearch,本 skill 1.0 的原始灵感。
成果卡片生成(Result Card)
每个skill优化完成后(或全量汇总后),自动生成视觉成果卡片,截图保存为PNG。
卡片模板
模板位置:templates/result-card.html
3种风格,每次随机选择一种:


