Best for: <UNKNOWN>
---
name: laohan-skillcreator
version: 1.0
description: 创建、修改、优化 Claude Code agent skills。Use when 用户说"创建skill""写一个skill""新建skill""改skill""优化skill"或提到 skill 创建/修改相关的任何意图。
---
# laohan Skill 创建器
laohan 系列专属的 skill 创建标准。从构思到发布全流程。
## 参考来源
本 skill 融合了三个来源的最佳实践:
1. **anthropics/skills 的 skill-creator**
- 仓库:https://github.com/anthropics/skills
- 具体文件:`skill-creator/SKILL.md`(含 agents/、scripts/、eval-viewer/、references/ 子目录)
- 借鉴点:多文件结构规范、pushy description 策略、评估思路(简化为轻量级测试迭代,不含完整评估流水线)
- 核心理念:description 要"主动推销"自己,因为 Claude 倾向于欠触发(undertriggering),需要 description 主动匹配用户意图
2. **mattpocock/skills**
- 仓库:https://github.com/mattpocock/skills
- 核心文件:`write-a-skill/SKILL.md`(元技能,本 skill 最直接的参考)、`tdd/SKILL.md`、`diagnose/SKILL.md`(阶段门控示范)
- 安装命令:`npx skills add mattpocock/skills -g -y`
- 借鉴点:"Use when" 触发精准度、阶段门控(Phase Gating)、反模式示例(WRONG/RIGHT 对比块)、参考仅限一层深度、篇幅拆分阈值(100/500行)、核心理念先行(Philosophy first)
- 核心理念:description 是 Claude 决定加载哪个 skill 的唯一依据——它在与所有已安装 skill 竞争,必须赢
3. **thananon/9arm-skills**
- 仓库:https://github.com/thananon/9arm-skills
- 核心文件:`skills/engineering/debug-mantra/SKILL.md`(口诀植入示范)、`skills/engineering/post-mortem/SKILL.md`(跨 skill 组合示范)
- 安装命令:`npx skills add thananon/9arm-skills -g -y`
- 借鉴点:编号步骤 + 操作规则分离、口诀植入(verbatim recitation)、明确拒绝/门控条件、跨 skill 组合调用、反模式枚举
- 核心理念:每个步骤都有硬停止条件,不确定就停下来而不是猜
定期检查三个仓库是否有新 commit,看是否有新的可借鉴技巧。
---
## 核心理念
本 skill 遵循三个原则:**description 决定生死**(触发精准度是一切的前提)、**结构引导行为**(好的骨架比好的指令更有效)、**精简优于完整**(每个章节都要证明自己存在的价值)。三个来源的技巧都服务于这三个原则。
---
## 创建流程
### 1. 捕获意图
从对话中提取(或直接问用户):
1. 这个 skill 让 Claude 能做什么?
2. 什么时候该触发?(用户会说什么关键词/在什么场景下?)
3. 期望的输出格式是什么?
4. 是否需要 scripts/ 或 references/ 子目录?
如果对话中已包含这些信息,跳过提问直接确认即可。
- **如果用户说不清要做什么 → 停下来,列出不明确的部分,等用户补充**
### 2. 调研
如果现有 skill 有类似功能,先读它的 SKILL.md 看能否扩展而非新建。
检查 `~/.claude/skills/` 是否有重叠 skill。
- **完成条件:** 确认没有可扩展的已有 skill,或已决定新建并说明理由
### 3. 写 SKILL.md
按下面的骨架模板和规则写。先按骨架模板前的判断标准确定极简还是完整骨架,再填充。
- **完成条件:** SKILL.md 包含完整的 frontmatter(name + description 含 "Use when")和正文内容
### 4. 测试迭代
1. 放入 `~/.agents/skills/<skill-name>/`,symlink 到 `~/.claude/skills/<skill-name>`
2. **触发测试**:新开对话,说触发词,确认 Claude 加载了该 skill
3. **反触发测试**:说相似但无关的词,确认不会误触发
4. **执行测试**:实际运行 skill 流程,验证输出符合预期
5. **重复工作检查**:如果 Claude 每次执行都生成相同的辅助代码,提取到 scripts/
6. 不通过 → 回到第3步修改 → 重新测试
7. 如果 3 轮迭代仍未通过 → 停下来,可能是 SKILL.md 的结构有问题,不是小修补能解决的。重新审视核心理念和工作流设计
### 5. 发布
推送前先按安装清单的安全检查项确认。展示将要推送的文件清单和 commit 内容,**等用户说"推""确认""yes"后再执行** `git push`。
---
## 操作规则
创建过程中的全局约束,贯穿所有步骤:
- **保持精简**:每个指令都要产生价值。写完后逐条审查——删掉不影响输出的指令
- **Lazy creation**:只在有内容要写时才创建文件和目录,不要先建空结构"占位"
- **通用化而非过拟合**:测试发现问题时,不要针对单个用例做过于小众的调整
- **解释 why**:"因为 A,所以做 B"优于"MUST 做 B"——用因果解释而非命令
- **匹配目标用户语言**:laohan 系列默认中文,技术术语保留英文
---
## 不适用场景
- 创建 Claude Code agent(agent 和 skill 是不同概念) → 直接手动编写 agent 配置
- 创建非 Claude Code 平台的插件/扩展 → 本 skill 只适用于 Claude Code skill 格式
- 修改 npx 安装的第三方 skill → fork 后新建(`npx skills update` 会覆盖原地改动)
---
## SKILL.md 骨架模板
不是每个 skill 都需要完整骨架。Matt Pocock 证明了 **3-5 行指令式 skill 完全合法**——如果一个 skill 的逻辑简单到一句话能说清,直接写指令,不要为了"看起来专业"而加多余的章节结构。
**判断标准**:单步、无复杂条件分支(简单回退除外)、无角色区分 → 极简。多步、有条件分支、有多角色 → 完整骨架。
### 极简 skill 示例(5行)
```markdown
---
name: caveman
version: 1.0
description: 极简回应模式,只输出关键信息。Use when 用户说"caveman mode""极简""少说废话""简短"。
---
所有回应控制在 3 句话以内。只给结论和关键依据,不解释过程。如果用户要求详细解释,恢复正常模式。
```
### 完整骨架模板
以下骨架列出核心章节。实际 skill 只需包含相关的——标了"可选"的不加也行,不要为了"完整"而填空。口诀植入、降级级联、跨 skill 调用也是可选章节,按需在合适位置加入。
```markdown
---
name: skill-name
version: 1.0
description: 一句话说清做什么。Use when 用户说"触发词1""触发词2""触发词3"或提到[相关场景]。 # 上限1024字符,3-8个触发词
---
# Skill 标题
一句话定位。
## 核心理念(复杂 skill 必加,简单 skill 可省)
为什么这个 skill 存在、它遵循什么原则。
先告诉 Claude "为什么",再告诉它"怎么做"——这比直接列步骤更能引导正确行为。
## 工作流
### 1. [步骤名]
- 做什么
- **完成条件:** [怎么判断这步做完了]
- **如果无法确定 X → 停下来,明确告诉用户缺什么,不要跳过**
### 2. [步骤名]
- 做什么
- **完成条件:** [怎么判断这步做完了]
### 3. [步骤名]
- 做什么
- **涉及外部动作时 → 等用户确认再执行**
## 操作规则
跨步骤的常驻约束,独立于工作流步骤:
- [规则1]
- [规则2]
- 遇到 [异常情况] → [怎么处理]
## 不适用场景
- [场景 A] → 改用 [其他 skill] 或直接告诉用户
- 缺少 [必要输入] → 列出缺少项,不硬编
## 输出格式
# [标题模板]
## [章节1]
## [章节2]
## 反模式(可选,核心规则处加)
❌ 差:
"反例"
✅ 好:
"正例"
```
## 目录结构
```
skill-name/
├── SKILL.md # 必须,主体指令
├── references/ # 可选,超长内容拆分(仅一层深度)
│ └── platform-x.md
└── scripts/ # 可选,确定性操作脚本
└── helper.py
```
不要创建 assets/、evals/、agents/ 等子目录——laohan 系列不需要。
---
## Frontmatter 规则
```yaml
---
name: skill-name # kebab-case,与目录名一致
version: 1.0
description: 功能描述。Use when 触发场景列举。
---
```
### description 写法(最关键)
**description 是 Claude 决定是否加载该 skill 的唯一依据。** 它在与所有已安装 skill 竞争——必须赢。Claude 倾向于欠触发,所以 description 要"主动推销"自己。
必须包含两部分:
1. **功能描述**(一句话说清做什么)
2. **"Use when" 触发条件**(列举具体触发词和场景)
```
好的 description:
从互联网拿内容一站式(7+平台自动降级)。Use when 用户说"下载""帮我抓""读一下这个链接"或提到抖音/B站/YouTube等平台名。
差的 description:
下载工具
```
规则:
- 上限 1024 字符
- "Use when" 后列举 3-8 个常见触发词
- 包含用户可能说的自然语言,不只是技术术语
- 如果 skill 之间有竞争关系,在 description 里明确区分
---
## 正文写法规则
### 篇幅控制
| 行数 | 策略 |
|------|------|
| < 100 行 | 单文件即可 |
| 100-500 行 | 考虑拆 references/ |
| > 500 行 | 必须拆,SKILL.md 只保留工作流和规则 |
元 skill(如本 skill)因使用频率低、每次需全量参考,可例外保持单文件。
拆分时在 SKILL.md 中明确指向:详见 [references/douyin.md](references/douyin.md) 的抓取方法。
参考文件仅限一层深度——不要 references/ 下面再嵌套子目录。
### 核心理念先行
复杂 skill(3步以上)在工作流之前加"核心理念"章节。
这比在工作流中穿插解释更有效——先告诉 Claude 为什么这样做,让它带着理解执行步骤,而不是机械地走流程。简单 skill(1-2步)不需要。
### 工作流 + 操作规则分离
工作流是步骤序列,操作规则是跨步骤的常驻约束——两者是独立章节:
- **工作流**:编号步骤,每步有完成条件和门控
- **操作规则**:独立章节,放在工作流之后,包含"不要做X""遇到Y做Z"等全局约束
不要把操作规则写在某个步骤内部——它们应该在任何步骤中都生效。
### 阶段门控
关键步骤之间加硬停止条件——不确定就停下来,不要猜:
```markdown
### 2. 执行
- **如果无法确定 X → 停下来明确告诉用户缺什么,不要跳过**
```
门控写法:
- "如果无法确定 X → 停下来,说出来"
- "不要在步骤 N 完成前进入步骤 N+1"
- "缺少 Y → 列出来,等用户补充"
### 明确拒绝条件
定义 skill 什么时候不该触发或该拒绝执行:
```markdown
## 不适用场景
- 场景 A → 改用其他 skill 或直接告诉用户
- 缺少必要输入 X → 列出缺少项,不硬编
```
### 人为干预门
涉及外部动作(发布内容、调用 API、写入关键文件)时,先展示将执行的操作,等用户确认再执行:
```markdown
### 5. 发布
- 展示将发布的内容和目标
- **等用户说"发""确认""yes"后再执行**
```
### 反模式示例
重要规则用 WRONG/RIGHT 对比块,比纯文字更清晰:
```markdown
❌ 差(模糊):
"AI工具推荐"
✅ 好(动词+工具+结果):
"3步用Claude Code创建自定义Skill,告别重复劳动"
```
### 口诀植入
如果 skill 有核心纪律需要每次强调,用 verbatim 格式——Claude 输出这段话时会"锚定"自己的行为:
> **口诀:** 每次执行前先确认:1) 输入格式正确 2) 输出目标明确 3) 不跳步骤
规则:
- 口诀只输出一次(首次响应),不在会话中途重复
- 用户说"跳过口诀"→ 不输出但仍然遵守规则
### 输出格式
用模板定义输出,不给模糊指令:
```markdown
## 输出格式
# [标题]
## 概要
## 正文
## 下一步
```
模板要克制——只在真正增加价值的部分加模板,不要为了"看起来完整"而填充每个段落。
### 降级级联(可选)
如果 skill 涉及多方案选择(如多平台抓取),用严格优先级而非菜单:
```markdown
## 降级策略
1. 方案A(最快)→ 失败时
2. 方案B(较慢)→ 失败时
3. 方案C(兜底)
```
不是"选一个",而是"从上到下依次尝试"。
### 跨 skill 调用(可选)
如果 skill 完成后自然衔接另一个 skill,在正文中注明:
```markdown
## 下一步
完成后可触发 `/laohan-notebooklm <script.md>` 生成幻灯片。
```
### 写作原则
- 用祈使句("做 X"而非"你应该做 X")
- 给具体例子(Input/Output 对)
- 不用 ALL CAPS 的 ALWAYS/NEVER——改用自然的因果解释
- 不确定是否需要的功能,标注"可选"
- **内容创作类 skill 需定义语气**:如果 skill 输出面向读者的内容(口播稿、标题、文案),用具体规则定义语气(如"不用'众所周知'开头""不用感叹号"),而不是笼统说"口语化"
> 跨步骤的全局约束(保持精简、Lazy creation、通用化、解释 why、匹配语言)见上方"操作规则"章节。
---
## 何时用 scripts/
把确定性操作写成脚本:
- 格式转换、数据验证、文件处理
- 每次 Claude 都会重新生成的相同代码
- 需要精确控制的步骤(如 API 调用参数)
**判断标准**:如果测试中发现 Claude 每次执行都生成几乎一样的辅助代码,那应该提取到 scripts/——省 token、提可靠性。
## 何时用 references/
把参考内容拆出去:
- 平台专属方法(如各平台抓取规则)
- 长模板或配置示例
- 不需要每次都加载的背景知识
---
## 输出格式
最终产物是一个符合上述骨架模板和写作规则的 SKILL.md 文件,放在 `~/.agents/skills/<skill-name>/` 目录中。
---
## 安装清单
创建完成后按此清单操作:
- [ ] SKILL.md 写好,frontmatter 含 name + description(含 "Use when")
- [ ] 目录在 ~/.agents/skills/<skill-name>/
- [ ] symlink: ln -s ~/.agents/skills/<skill-name> ~/.claude/skills/<skill-name>
- [ ] 触发测试通过(说触发词能加载 skill)
- [ ] 反触发测试通过(说相似无关词不误触发)
- [ ] 执行测试通过(输出符合预期)
- [ ] 重复工作检查(无每次生成的相同辅助代码)
- [ ] 推送安全检查(无硬编码绝对路径、无内部昵称、无 API key)
- [ ] 复制到本地 laohan-skills 仓库对应目录
- [ ] git push
## 改造已有 skill
**只改造自研 skill(laohan 系列)。npx 安装的第三方 skill 应 fork 后新建,不要原地修改——`npx skills update` 会覆盖改动。**
当需要优化现有 skill 时,重点检查:
1. **description 是否有 "Use when"** — 没有,加
2. **SKILL.md 是否超过 500 行** — 超了,拆 references/
3. **是否有核心理念章节** — 3步以上的 skill 必加
4. **工作流是否有编号步骤 + 独立的操作规则** — 没有或混在一起,重构
5. **关键步骤是否有门控条件** — 没有,加硬停止
6. **是否有不适用场景** — 没有,加拒绝条件
7. **输出格式是否用模板定义** — 没有,加
8. **是否解释了 why** — 没有,补
9. **核心规则是否有反模式示例** — 加 WRONG/RIGHT 对比块
10. **涉及外部动作是否有人为干预门** — 没有,加确认步骤
11. **涉及多方案选择是否有降级级联** — 没有,加优先级级联(非菜单)
Creator's repository · hanzhcn/laohan-skills