Claude Code 源码精读 | 06 Skill 为何是AI工作流必备?
这是「Claude Code 源码精读」系列的第 6 篇。上一篇梳理了 CC 上下文的设计思路。这一篇我们讨论 AI 工作流必备的「Skill」。
读完这篇,你会搞清楚以下3件事:
-
• 什么是 Skill?有什么价值? -
• 有哪些案例场景? -
• CC Skill 的设计思路?
目录
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
装了就停不下来的 Skill
最近在体验 hermes 等各种 Agent 产品的时候,有一个绕不过去的流程,就是装 skill。
推荐几个比较好用的:做项目立项的gstack.skill、做开发很好用的superpowers.skill、做内容的db.skill。还有一些技术向的,操纵浏览器的agent-browser.skill、生成动态html视频的 hyperframes.skill。
这些好的 Skill,用顺手了就跟软件一样。它能让 AI 在处理某项任务的时候,有一个标准的规范流程,避免每次都要重新交代一遍。
所以换 Agent 环境的时候,遇到写稿、做开发这些任务的时候,总会把它给装回来。
如果不装回来,总感觉这个 Agent 用起来就没那么顺手。
而且最近还体验了一些很有意思的 skill。比如前段时间那个爆火的同事.skill。你导入已经离职的同事的消息记录,这个 Skill 就能用他的风格和工作能力来做事,用 ai 把他们蒸馏成了数字生命,继续给你打工。
它就像一些传统软件的插件一样,它不是软件(AI)必需的,但在一些场景下又很好用。帮你极大地拓展了软件(AI)本身的能力。
3 个 skill 的案例场景
这里举了三类 Skill 的应用场景:前端设计规范的frontend-design;内容工作流中的源码精读封面skill;以及完整封装了完整产品研发流程的superpowers.skill。
frontend-design

这是 CC 官方内置的一个 skill,可以产出一个更好的前端设计。比如说同一个提示词,上图是使不使用这个 skill 的前后对比。相当于它内置了一些设计规范,让 AI 输出的效果更好。
源码精读的封面skill


源码精读系列的封面图,也有个 skill。现在每次需要生成封面图的时候,我只要说”给我出第 05 期封面”,它就能调用这个 skill,根据我的文章标题和内容,完成文案替换,生成对应的 HTML,并按照公众号封面的尺寸截好图,保存到指定的文件夹给我备用。
superpowers


Superpowers 目前在 GitHub 有 166K 的 star。它封装了从需求分析、设计方案,到开发、测试的工作流程规范。
调用这个 Skill,每一次的写代码之前,都会跟你明确的对齐需求,沉淀设计文档,并自带了测试规范做严格的交付验收,相当于雇佣了一个完整的产品研发团队。能极大提升了 Agent 做 coding 的输出效果。
类似的 Skill 的应用场景还有很多很多。
往夸张点说,所有工作流,不管是写软件、做内容,还是市场营销、金融分析,只要它能够拆分环节,都可以规范和定义为 Skill 。
源码解析:Skills
SkillTool:Skills 和 tools的关系

之前的文章(Claude Code 源码精读 | 03 Tool工具如何让模型长出双手?)我们讲过,Skill 在设计上是一种Tool工具。所有 skill 都通过 SkillTool 被调用。
Tool 属于能力层,定义了各种模型的原子化能力,但并不会深入到业务和策略层面。而 Skill 是一种基于 Tool 的策略层。把各种能力组合成为具体的解决方案。
Skills 的两种调用方式

Skills 有两种触发调用的方式:一种是自动调用,每一次模型对话时,都会带有可用 Skills 的上下文范围。模型会根据你的输入上下文,主动判断要不要调用。但这种方式,有时候会出现不符合预期的情况,想调用的时候不调用,不想调用的时候又调用。
另一种是斜杠命令,靠输入”/skill名称”来调用,这种方式在代码层做了强制调用,能做到稳定必现。所以确定要使用某个技能时,更推荐斜杠命令。
就和其他的 tools 一样,当触发调用之后,CC 才会将 Skill 的具体内容注入到上下文,实现按需加载。
Skills 的来源

Skill 有本地、内置、第三方(插件、Mcp)、远程这几个来源。
本地,就是你自己创建的 Skill。Skills 是文件即配置的逻辑,只要按照 CC 约定的文件位置和格式配置相应的文件,就会被加载为 Skill。
第三方,就是你在CC 插件市场及Github 等平台发现并安装的 Skill。
内置和远程的就是 CC 自己配置的 Skill,只是一个在软件内一个在云端。
为了避免 Skill 过多,造成上下文过度占用。CC 有一个Token 预算管理逻辑,技能列表只占用上下文窗口的 1%,限制 8000 个字符。并对不同来源的Skill,设计了一个三阶段降级策略:
|
|
|
|
|---|---|---|
| 阶段 1 |
|
|
| 阶段 2 |
|
|
| 阶段 3 |
|
|
内置 Skill 的优先级最高,永远不被截断,从而保证核心功能(commit、review 等)对 Claude 始终可见。
Skills 的组成

一个 Skill 本质上是一个文件规范。它由一个 Skill.md 定义文件,加上scripts、assets、 references、agents 几个附属资源来确保架构的扩展性。
附属资源不是必须的,最核心的模块就只有 Skill.md,很多简单的 Skill,其实就是一个封装好的大型提示词文件,定义好了什么时候用,怎么用的执行步骤规范。
Skill.md 的组成
# Skill的元数据层参数export function parseSkillFrontmatterFields( frontmatter: FrontmatterData, markdownContent: string, resolvedName: string, descriptionFallbackLabel: 'Skill' | 'Custom command' = 'Skill',): { displayName: string | undefined description: string hasUserSpecifiedDescription: boolean allowedTools: string[] argumentHint: string | undefined argumentNames: string[] whenToUse: string | undefined version: string | undefined model: ReturnType | undefined disableModelInvocation: boolean userInvocable: boolean hooks: HooksSettings | undefined executionContext: 'fork' | undefined agent: string | undefined effort: EffortValue | undefined shell: FrontmatterShell | undefined}
-
name、description 是必填项,他们是模型看到的这个 Skill 的主要信息,并根据这些信息,决定 Skill 的调用。 -
可以通过 arguments 来定义 skill 的输入参数。比如前面说的封面skill,就可以配置封面的文案、简介参数,在调用 Skill 的时候,准确的根据这些参数生成封面。
-
同时,也可以配置 model、effort 设定 skill 的指定模型和推理强度等。
指令层就是具体的告诉 AI,怎么执行这个 Skill:输入什么、按什么顺序做、用哪些工具、最后输出什么格式。
总之,通过 skill 的架构到 skill.md 的元数据和具体指令,可以支持非常丰富的场景构建。
这也是为什么 skill 是 AI 工作流必备的能力。只要你的工作内容能够拆分环节,它都可以规范和定义为 Skill,并构成一个标准的工作流。
写在最后
这期我们搞清楚了 Skill 到底是什么,通过三个案例,看到了Skill在工作流上的价值。最后深入 CC 源码,理清了 Skill 的机制和结构。
下一期,我们通过Skill-Creator,看 CC 如何设计一个 Skill?
我们下期见。
「Claude Code 源码精读」系列持续更新,关注我,带你理解最顶尖的 Agent 设计。
夜雨聆风