Router One
返回博客

Claude Skills 详解:构建可复用的 Agent 能力

|Router One Team

Claude Skills 是那种 changelog 里看着小、用了之后会重新组织你写 agent 方式的功能。一个 skill 就是一个自包含单元——一份 markdown 文件加可选的资源——教 Claude 把某件具体的事情做好。Agent 按需加载 skill、按里面的指令执行,结果比同样的 prompt 自己跑可靠得多。

这篇文章拆解模型本身:skill 实际是什么、Claude 怎么决定何时用、怎么写第一个 skill,以及让 skill 在生产中扛得住而不是悄悄腐烂的几种模式。

Skill 是什么

形态故意做得很简单。Skill 是一个文件夹,至少包含一个文件:

my-skill/
├── SKILL.md          # 给 agent 看的指令
├── examples/         # 可选参考材料
│   └── example1.txt
└── scripts/          # 可选的 skill 可调用代码
    └── helper.py

SKILL.md 有一段 frontmatter 描述什么时候触发,正文讲怎么做:

---
name: refactoring-react-class-components
description: Use when migrating React class components to function components with hooks. Triggers on files containing class extends Component or class extends React.Component.
---

# Refactoring React Class Components

When you see a class component, follow these steps...

当 agent 遇到匹配 skill 描述的情境时,加载 SKILL.md,按里面的指令执行,相关时读 examples 或调 scripts。产出是 agent 本来也会产出的那种东西,但质量稳定,因为 skill 强制了步骤。

整个抽象就这些。其他的都是约定。

Claude 怎么决定用哪个 skill

激活逻辑是第一次用 skill 时让人觉得"魔法"的地方。Anthropic 的说法:skills 是老师,不是工具。Agent 开始任务时,扫一遍所有 skill 的描述,挑触发条件命中的全部加载。多个 skill 可以同时激活;它们的指令组合在一起。

激活可靠性看三件事:

  1. 描述是一切。Anthropic 的建议——也是我们的经验——描述要非常具体地说什么时候用,用具体的触发短语(用户可能说的、agent 可能遇到的)。"Use when X"远比"About X"好。
  2. Skill 可组合。"写测试"的 skill 和"TypeScript 风格"的 skill 可以在同一任务上同时激活。它们一个接一个被读,Claude 当成一套指令对待。设计时让 skill 互补而不是覆盖。
  3. **Skill 要小。**200 行的 SKILL.md 胜过 2000 行的。一个 skill 做太多,就拆开。

MCP 是给 agent 工具能力,skill 是给 agent 智慧——对比见 Claude Code 必装的 10 个 MCP Server。MCP 给能力;skill 给经验。

写你的第一个 skill

合适的第一个 skill,是你已经让 Claude 做过两次、两次结果不一样的事。例如:

  • "用我们项目风格写一个 Postgres 迁移。"
  • "从一组合并的 PR 列表生成 release note。"
  • "把一个 curl 例子转成我们内部的 Go HTTP client。"

挑一个。然后:

mkdir -p .claude/skills/postgres-migrations
cd .claude/skills/postgres-migrations

新建 SKILL.md

---
name: writing-postgres-migrations
description: Use when adding a new Postgres migration. Triggers on requests to "add a column", "drop a column", "create a table", or any change that requires a new file under db/migrations/.
---

# Writing Postgres Migrations

We use sqitch for migrations. Each migration has three files: deploy/, revert/, and verify/.

## Steps

1. Compute the next migration number with `ls db/migrations/deploy/ | sort | tail -1`.
2. Create three files under `db/migrations/{deploy,revert,verify}/{N}_{name}.sql`.
3. Deploy: the actual change. Always wrap in a transaction.
4. Revert: the inverse. Even for additive changes — make it safe to undo.
5. Verify: a SELECT that fails if the migration did not apply.

## Style

- Use lowercase `snake_case` for column names.
- All NOT NULL columns must have a default OR be backfilled in the same migration.
- Index changes go in their own migration, never bundled with schema changes.
- Foreign keys are declared inline, never as a follow-up.

## Avoid

- ALTER TABLE ... ADD COLUMN x NOT NULL without a default — locks the table.
- Multi-step migrations in a single file. Split them.

然后在 Claude Code 里:"给 users 表加一列 subscription_tier,默认 'free'。"Agent 加载 skill,知道要查迁移号、知道要写三份文件、知道要加默认值。产出形态稳定,因为 skill 把"形态稳定"是什么意思编码进去了。

扛得住的模式

写过几个 skill 之后,几种形态会经得起现实。

Skill 当项目记忆。最持久的 skill 抓的是团队做过的决定——命名约定、发布流程、偏好的测试风格。新工程师交了个让人困惑的 PR,去写一个 skill 而不是写一条评论。下一个 agent(或读 skill 的人)拿到组织知识。

**带例子的 skill。**说"按这种格式输出错误"的 skill 应该附两个例子。Claude 读了之后照模式来。三行例子常胜过三段描述。

**调用脚本的 skill。**当工作里某些部分是确定性的——版本号自增、跑代码格式化、读 CSV——把它放进 skill 调用的脚本里。Agent 专注于真正需要判断的部分。

**带显式"不要"的 skill。**告诉 agent 不要做什么往往比告诉它做什么更有用。"调用方已校验输入的函数里不要再加错误处理"能阻止一整类过度工程。

悄悄腐烂的模式

两种失败模式随时间出现。

Skill 过期。半年前写的 skill 引用了一条已不存在的构建命令。Agent 老老实实照办,产出坏 commit。修法是让 skill 贴近它描述的东西。skill 在 repo 里应该和底层代码一样,每次代码改动时进入 review 候选。

**Skill 膨胀成手册。**一个 skill 从 200 行涨到 800 行,加上边界情况、加上免责声明。到那时它就不会被仔细读了。如果一个 skill 在变成手册,拆开:把"写测试"那一节抽成单独 skill,原 skill 留下更紧凑的部分。

Skills + MCP + 子 Agent:2026 的栈

Skills 和两个邻居特性配合时威力倍增。

MCP server 给 agent 访问外部状态——数据库、工单、可观测性。Skill 可以引用"用 linear MCP 查父 issue",agent 就去做。

子 Agent 让一个 agent 派生另一个,角色不同、skill 集不同。"代码 review"子 agent 可以只配相关 skill、指着一个 diff 跑。

L5 编排叙事在这里变得具体:顶层 agent 装着知道何时委派的 skill、装着预算控制和追踪每步做了什么的 trace。更宏观的模式见 生产环境 AI Agent 完整指南,与路由的关系见 AI 模型路由详解

反模式

  • 每个文件一个 skill。太细。Skill 关心的是工作类型,不是文件。
  • **互相矛盾的 skill。**两个 skill 可能同时激活而意见不一致,agent 行为变不可预测。保持 skill 之间一致。
  • 试图覆盖 Claude 判断的 skill。"JavaScript 里永远用 var"是在和模型对抗。用 skill 在 Claude 已经做得好的事情之内编码品味。
  • **写死模型特定行为。**避免"Claude Sonnet 4.6 这样回应最好..."——那些 workaround 老化得很快(4.7/4.8 用不了多久就来)。

分发和共享

Skill 就是文件夹,分发就是 git。常见模式:

  • 项目级.claude/skills/ 在 repo 里,提交进来。每次 clone 拿到同一组 skill。
  • 个人级~/.claude/skills/ 跨项目用自己的约定。
  • 团队 registry:单独一个共享 skill 的 repo,通过脚本或 git submodule 拉。
  • 公开anthropics/skills repo 加上一个不断扩张的社区 skill 包生态。

Router One 内部团队用两层:项目特定 skill 给代码库 + 跨项目 skill 给公司约定(事故复盘格式、发布流程、on-call 礼仪)。两层都进 git 让变更走 review。

常见问题

Skill 和 system prompt 是一回事吗? 不是。System prompt 是 agent 每轮都看到的。Skill 只在描述匹配情境时加载。你可以有几百个 skill;某次任务只加载相关的几个。

Skill 在 Codex CLI 里能用吗? Skill 是 Anthropic 概念。Codex CLI 不加载。Codex 世界里最接近的是项目自己的 README 加针对性的 prompt 注入。见 Codex CLI 平替方案指南

Agent 能编辑 skill 吗? 能——这是一个有用的模式。当你纠正 agent 告诉它规则时,可以让它顺手更新对应 skill,让纠正下一次就能起作用。

Skill 里要包含代码吗? 适度。一个 skill 用 10 行代码示范一个模式没问题。包含 500 行库的 skill 应该改成 skill 调用的脚本,或者独立工具。

Skill 跟隐私的关系? Skill 是内容;它跟着 prompt 一起走。不要把秘密、不愿粘到 chat 里的内部 URL、或在模型提供方日志里会成问题的东西放进去。通过 Router One 路由时,skill 内容和请求其他部分一样处理——代理转发,不持久化。

Skill 市场怎么样? 2026 年好几个公开 registry 出现了。当成 npm 包对待:有用,但要审核安装的内容。Skill 是 agent 会照办的指令;恶意 skill 是攻击向量。

结论

Skill 是团队知识可以复利的地方。每次你纠正 agent 同时心里闪过"我之前讲过这个"的瞬间,就是一个等着被写出来的 skill。从你最常重复任务里挑三四个高价值 skill 起步,保持小、底层东西改时 review、让它们累积。

Claude Code 本身从零跑起来见 配置指南;让 skill 在 agent 循环里更有威力的工具,见 MCP Server Top 10

相关阅读