1. 先说清楚:Agent Skills到底是什么
最近AI编程圈子里,“skills”这个词几乎无处不在。Claude官方的Agent Skills发布之后,GitHub上冒出大量技能仓库;Codex这边也跟进了一整套skills实践;社区里的讨论已经从“它和MCP有什么区别”进化到了“你写了几个skills”。如果你关注过这些讨论却始终没弄明白它和普通prompt模板、MCP工具服务到底有何不同,那这篇文章应该能帮你把整条线彻底捋顺。
简单说,Agent Skills就是把一类专业知识、操作流程、输出规范打包成结构化的文件,放进AI助手的配置目录里,让它能够边思考边读取这些说明,在实际任务中按步骤、按格式调用。它不是一段写死的指令,而是一个可以反复使用、可以被组合、可以被分享的“专业技能包”。我习惯把它类比成:给一个聪明但缺乏行业经验的实习生,准备一套带案例、带步骤、带禁忌说明的入职手册。智商是模型自带的,能不能在真实业务里干得漂亮,取决于你有没有给对手册。
谁适合看这篇文章?如果你是经常用Claude Code、Codex这类编程代理工具的人,或者你正在团队里推进Agent落地,又或者你只是好奇“为什么有人能把AI调教得这么顺手”,都值得坐下来把后面的内容读完。我下面会从机制原理讲到实际操作,从开发自研技能讲到问题排查,中途会穿插大量我踩过的坑。
2. 从第一性原理拆解Skills的工作机制
2.1 它本质上是一个“按需加载的专业手册系统”
要理解Skills,先要理解编程Agent(代理)的工作方式。这类工具运行在命令行或者IDE插件里,拿到用户指令后,会自主规划、调用工具、阅读代码、修改文件。它的思考能力来自大模型,但对“怎么做才专业”这件事,模型不一定知道——它可能知道怎么写JavaScript,但不知道你们团队要求的分支命名规范;它可能知道怎么写API接口,但不了解你所在业务域里的那些术语和边界条件。
Skills解决的正是这个问题。每个Skills就是一个目录,里面包含一份核心说明文件(多数叫SKILL.md),并且可以附带示例、模板、参考文档、脚本等辅助材料。当用户明确要求使用某个技能时,AI会主动去读取这份说明文件,把里面描述的工作流程、输出格式、注意事项加载进自己的上下文。
有意思的是它的加载时机。它不是一次性把所有技能塞进上下文的,而是被调用时才去读,这大大降低了上下文占用。打个比方,这就好比一个工具箱,里面放着几十种专用工具,但你不是把所有工具都摆在桌面上,而是要做某个工序时才打开对应抽屉。原因在于上下文窗口对于大模型来说是稀缺资源,一次性塞进大量指令不光费钱,还会稀释模型的注意力——模型在处理任务时,会被背景里那些无关文字干扰,最终影响输出质量。
2.2 目录结构、元数据与SKILL.md的协作关系
一个标准的Skill目录通常长这样:
my-skill/ ├── SKILL.md ├── assets/ │ ├── sample-input.txt │ └── template.md └── scripts/ └── format-tool.py核心的SKILL.md采用Markdown格式,文件开头有一段YAML元数据,用来声明这个技能的名称、描述、适用场景和兼容性。后面的正文才是真正的“干货”:这部分通常描述该技能适用的任务类型、执行步骤、注意事项、输出规范,还可以嵌入例子。
元数据里的description字段特别重要,因为它是面向模型或者市场索引的“门面”。我在做技能开发的时候,会花大量时间打磨这段描述——它需要精确表达技能的边界和应用场景。比如,你不能简单写“帮助写代码”,而要写“该技能适用于迁移遗留PHP项目到Node.js场景,提供代码分析清单、风险识别方法和分阶段迁移模板”。描述越具体,调用时越准确。
这里还有个容易被忽略的设计细节:SKILL.md内部可以通过相对路径引用同目录下的其他文件。比如正文里写“参照assets/template.md中的输出格式”,模型读到这句话之后,会自己决定要不要进一步打开那个文件。这种“分级加载”机制非常实用,可以把主文件控制得简短清晰,而把大量细节放进子文件,需要时再展开。
2.3 Skills与MCP、Prompt模板三者的定位差异
很多人问:Skills和MCP(Model Context Protocol,即模型上下文协议)到底是不是一回事?真不是,两者解决的是完全不同的层面。
MCP解决的是“AI如何获取外部数据、调用外部工具”。它通过标准化的服务端协议,把数据库查询、网页检索、第三方API调用这些能力暴露给模型。本质上是给Agent接入了很多“手脚”。
Skills解决的是“AI如何知道该用什么样的专业姿势完成一类任务”。它不需要调用任何服务,只是给模型提供结构化、领域化的知识和流程。本质上它是给Agent补上了“脑子里的专业知识”。
Prompt模板则是另外一回事。它通常是一小段写死的指令文本,用在某个固定环节里。它的问题是零散、难以管理和复用,每次要改都得去动配置文件。而Skills把指令、示例、模板、脚本组织成了一个自洽的单元,可以像Git仓库一样被版本管理。
我来打个比方:MCP像餐厅的食材采购渠道,决定了你能端上来什么菜;Skills是厨师的操作规范手册,决定了每道菜的地道程度;Prompt模板充其量是一张写着“少放盐多放醋”的便利贴。真正能改变出品质量的,是那本手册。
3. 新手上手指南:安装与使用现成Skills
3.1 在Claude中配置官方市场Skills
在Claude系列工具中,安装Skills目前主要有两条路径:一种是通过配置文件指定本地路径,另一种是从官方Skills市场直接添加。官方市场里的Skills经过一定审核,质量相对有保障,新手从这个入口进入会比较稳妥。
具体的安装流程其实不复杂。你只需要在配置管理界面打开Skills市场,浏览分类列表,找到你需要的技能(比如“PDF表单填写”“前端代码评审”“数据分析报告生成”),点击安装,然后重启会话。重启这一步非常关键——我见过太多人装完之后不重启,然后跑来问“为什么Skills没生效”,其实需求是新的配置只有在新会话里才会被加载。
对于那些没有进入官方市场的Skills,比如GitHub上开源的那些,你通常需要把它clone到本地,然后在配置文件里填写目录路径。以Claude Code为例,以下是一个典型的配置方式:
{ "skills": { "paths": [ "./skills/my-custom-skills", "./skills/frontend-review" ] } }配置完之后,在对话中输入类似“使用frontend-review技能检查src目录下的代码”这样的指令,Agent就会自动加载对应的SKILL.md并开始执行。
3.2 在Codex中集成各种Skills
OpenAI的Codex在Skills上走了另一条路线。它更强调把Skills作为一组可组合的模块化指令或脚本嵌入工作流中。你可以在项目根目录建立一个.codex/skills目录,每个子目录同样是一套技能。在一些社区实践中,Codex Skills被大量用于自动化代码审查、生成单元测试、自动整理提交信息等场景。
我试过把同一个“分镜脚本生成”技能同时配置在Claude和Codex里,两者表现各有千秋:Claude的文本表达能力让它擅长细化叙事节奏;而Codex对结构化脚本、批量处理的执行更利索。这里想强调的是,同一份Skills定义通常无法在两个平台上无差别运行,你需要根据平台特性微调SKILL.md里的措辞和步骤指示。
3.3 如何验证Skills确实生效
装了技能之后,别急着把时间花在复杂任务上,先做一次快速验证。我自己的做法是:直接在一个测试目录里,用最简单的输入触发该技能,观察Agent的中间推理过程是否提到了SKILL.md中的关键内容。
比如你安装了一个“自动撰写周报”的技能,你可以这样测试:新建一个空目录,初始化一个只有两个提交记录的Git仓库,然后让Agent“用周报技能总结今天的工作”,接着看它是否按照SKILL.md中描述的模板结构来输出,包括它是否提到那些细节要求,比如“按照项目维度拆分”“突出阻塞事项”。如果Agent的输出跟技能编写者定义的规范一致,说明加载链路是通的。如果输出看起来完全没受过技能影响,那就要去检查目录权限、路径配置,或者观察日志里有无读取失败的记录。
3.4 在“打开新世界”的瞬间,你要学会选Skills
看到社区里铺天盖地的“今天学会了skills,打开新世界”这类分享,我的建议是:不要盲目安装一堆技能。Skills这东西和浏览器插件一样,数量一多,反而会拖慢Agent的启动效率和决策速度。每当你让Agent“在所有技能里找一个能处理当前任务的”,它要遍历索引、阅读描述、判断匹配度,这一套过程本身就会消耗时间。
一个比较理性的做法是遵循二八原则:先装你认为周工作量最大的三类技能。比如你是前端开发者,那就装前端代码评审、组件测试生成、响应式布局检查;你是内容创作者,那就装分镜脚本生成、视频脚本文案、素材检索整理。先用一段时间,体会每个技能的加载方式、输出风格,再逐步扩充装备库。
4. 进阶玩法:开发自己的Skills
4.1 为什么你值得自研Skills而不是只靠现成的
社区里现成的Skills数量已经非常多了,GitHub上随便一搜就是几百个仓库,但你很快就会撞到天花板:别人的技能解决的是通用场景,你的业务里总有它覆盖不到的角落。
比如你所在项目里有一套特殊的状态机设计模式,你们的数据表字段命名有自己的约定,你们的代码评审标准是公司内部多年沉淀下来的。这些东西很难指望社区技能的编写者替你考虑到。所以,自研Skills最大的意义不是炫技,而是把团队内部那些“课堂上学不到、文档里懒得写、只有老员工脑子里的知识点”,固化成可以被AI读取和执行的显性资产。
从这个角度看,自研Skills是知识管理的一次升级——以前知识沉淀靠文档库,但文档库是死的;现在技能包是活的,能被AI按需加载并应用到日常工作里。我在团队里推行这件事的时候,用的口号是“把你们脑子里那些东西,交给AI去跑腿”。
4.2 从零开始手写一个SKILL.md
来,实战一次。我们做一个团队代码规范检查技能,目标场景是:当Agent被要求审查某段前端代码时,它除了看一般的语法错误之外,还能结合团队规范给出意见。
第一步,创建目录结构:
team-frontend-review/ ├── SKILL.md └── assets/ └── code-review-checklist.md第二步,编写SKILL.md的核心元数据:
--- name: team-frontend-review description: 当需要审查前端React代码时使用本技能。该技能会结合团队内部的命名规范、组件拆分原则与状态管理约定,输出结构化评审意见。 metadata: version: 1.0.0 tags: [frontend, react, code-review] --- # 团队前端代码评审 ## 适用场景 本技能适用于React/TypeScript项目的代码评审任务,包括但不限于PR审查、代码走查、新手代码指导。 ## 执行步骤 1. 读取目标文件,先做全局扫描:识别组件数量、层级关系、hook调用顺序。 2. 针对每个组件,检查是否遵循团队命名规范: - 文件名使用PascalCase - 组件内私有函数使用useMemo包裹的必须加use前缀 3. 检查状态管理:判断是否存在组件内部状态可以提升至全局store的情况。 ## 输出格式 评审结论必须包含三部分: - 阻塞问题:会引发bug或严重性能缺陷的点。 - 建议改进:不阻塞合入但可以优化的点。 - 亮点记录:写得好的地方,也要明确出来。 ## 参考 请参阅 assets/code-review-checklist.md 获取更详细的逐项检查清单。发现没?这份SKILL.md的要点在于:它用结构化方式把团队约定“翻译”成了Agent可执行的步骤,还规定了输出格式。这比单纯在prompt里说“请审查这段代码,注意团队规范”要可靠得多。
第三步,完善辅助资产文件。code-review-checklist.md里可以列非常细的检查项,比如“禁止在render函数中定义匿名函数并直接传给子组件”这一类的具体规则。SKILL.md主文件控制节奏,子文件提供细节,这个分工要记住。
4.3 好Skills的四个判断标准
写了几套Skills之后,我总结出自己的一套好技能标准。
第一,单一职责。一个技能只解决一类任务。你如果把“代码评审”和“生成单元测试”塞进同一个技能,模型在执行时就会犹豫到底是先评审还是先写测试,加载时也会多消耗不必要的上下文。
第二,步骤可操作性。里面写的内容必须是Agent能直接执行的指令,而不是抽象的价值观表达。你写“保证代码质量”是废话,你写“检查所有导出函数是否包含JSDoc注释”才是有效指令。
第三,输入输出边界明确。好的技能会明说:它期望什么样的输入,会产出什么样的输出。这样你的Agent在调用技能之前就能预判行为,不会中途卡壳。
第四,示例驱动。如果条件允许,在assets目录里放一两个完整的输入输出对。模型是一流的小样本学习器,给它看一次标准成品,比在正文里写十句解释更有用。
4.4 调试与迭代:让技能越用越顺手
自研技能的调试过程,本质上是一个“跑样例-观察问题-修正定义”的循环。
我第一次写“分镜脚本生成”技能时,SKILL.md里只写了分镜头的数量、景别、时长,结果生成的脚本非常死板,每个镜头都像模子刻出来的。后来我在assets里加了一个优秀脚本的完整示例,并在SKILL.md里补充了“注意镜头切换的叙事逻辑,不要机械套用景别组合”的提示,生成结果立刻灵活了一个档次。
调试时建议用一个固定的测试集,反复跑同一类任务,记录每次输出的差异,然后顺着差异往回找定义里的不足。可以把测试集放在技能目录下,比如tests/子目录,方便回归测试。这个做法和软件开发里的测试驱动开发理念是一致的:先定义你期望的行为,再通过调整技能定义去逼近这个行为。
5. 实战场景:Skills在内容创意、研究写作、网络安全测试中的具体用法
5.1 分镜脚本生成:从一句话到一版可用脚本
内容创作领域,最让我惊艳的Skills用例之一是分镜生成。短视频团队每天要产出大量分镜脚本,常规做法是编导自己写,或者让AI直接写。但直接写出来的东西常常缺镜头感、缺景别意识,粗看能用,一开拍就露馅。
有了分镜Skills之后,动作品质明显上来了。你只需要把自己定义好的技能写好,里面包含常用景别词汇表(远景、全景、中景、近景、特写)、转场方式库(硬切、叠化、跳切)、节奏控制要求(每镜时长、镜头数上限),再附上两个完整的分镜示例,然后一句“写一个产品宣传片分镜脚本,60秒,情绪由平静到高潮”,Agent输出的就是一套结构化程度极高的脚本:每个镜头里包含画面内容、台词、音效、字幕、时长。
对内容团队来说,这个技能带来的提升不在于“写得多快”,而在于它把“编导脑子里的镜头思维”变成了AI的默认思维。即使是一个刚入职的实习生,也能靠这个技能在十分钟内产出一个及格线以上的分镜初稿。
5.2 论文写作辅助:从文献梳理到结构化输出
科研写作是另一个高价值场景。学术写作本身有强烈的格式约束:摘要的结构、引言的逻辑推进、论证段落的组织、参考文献的引用格式,每个环节都有讲究。通用AI对话可以做“写作助手”,但很难自动遵守某个特定期刊的格式规范。
一个优秀的论文写作Skills可以在SKILL.md里写清楚:摘要写作采用“背景-缺口-方法-结果-结论”五句法;引言部分先泛后专,在第三段末必须亮出核心研究问题;正文段落采用“论点-证据-分析”三段结构。再加上一个已发表论文的示例片段,Agent在生成初稿时会自动对齐这些要求。
这类技能的实际价值在写作流程前段特别突出。很多研究者在面对空白文档时真正卡住的地方是:不知道怎么组织已有素材、不知道先写哪一段。论文写作技能可以提供一份“写作顺序建议”,例如先写方法和结果,再补引言和讨论,最后回头写摘要——这种操作层面上的指引,恰恰是教科书里不教、通用AI也说不出、但每个有经验的写作者都在用的策略。
5.3 自动化安全检测:Skills如何改变挖洞流程
网络安全测试领域也在快速吸收Skills这套方法论。所谓“自动挖洞”,在合规语境下指的是用AI辅助进行代码审计和漏洞发现,这本身就是网络安全测试里耗时最高的环节之一。
传统的做法是安全工程师手动浏览代码,查找敏感函数、追踪输入输出路径、判断是否存在注入或逻辑漏洞。这个过程极其依赖经验,因为具体哪些函数是危险函数、哪些上下文是敏感上下文,很难简单用一个搜索规则覆盖。现在可以把这些经验编码进Skills:SKILL.md里列出常见的危险函数清单(如命令执行类、SQL拼接类、文件操作类),描述输入污染源识别步骤,定义审计顺序——先定位外部输入入口,再追踪数据流,最后确认危险函数是否在可达路径上。
我把这类技能应用在了一次内部系统的安全走查中,效果相当可观:AI先按技能定义好的流程做第一轮静态扫描,把疑似问题按置信度排序,我只需要人工复核排在前面的那些点。这完全改变了过去我从头读到尾的工作模式。需要强调的是,这类技能必须应用在自身授权测试范围内,这是行业的底线,不分工具还是流程,越线都是零容忍的。
5.4 前端开发的超级能力:Skills改变日常研发节奏
前端应该是Skills最成熟的应用领域之一。原因不难理解:前端工程化的约束极其明显(框架、构建工具、样式方案、代码规范),而这类约束非常适合写进技能文件里。
我给自己维护了一套“前端重构”技能,内容大致包括:分析现有组件的依赖关系、识别重复代码、制定重构顺序、生成兼容性检查清单。这套技能对我最大的帮助在做存量项目改造时。以前接手一个老旧项目,最先要做的事情就是花时间“人肉”摸清楚代码结构;现在直接让Agent按技能定义的分析流程跑一遍,我拿到的是结构化的依赖图和重构建议。
这几年,社区里大量讨论集中在Claude Agent Skills和Codex Skills的使用心得、GitHub上的开源技能库,其实本质上大家都是在做同一件事:把过去散落的经验沉淀成可以被AI复用的技能资产。对这个趋势,我的判断是它会像当年的代码规范一样,逐渐变成团队的标配。
6. 常见问题与排查技巧实录
6.1 “装上了但好像没生效”的六个排查步骤
这是我在社区里看到最多的提问,我自己也经历过。如果你发现Agent完全没有表现出技能中定义的输出,按这个顺序排查:
第一步,确认路径。检查配置文件中填写的技能路径是否真实存在,是否有大小写错误。一个很隐蔽的坑是:在Windows上clone技能仓库后,路径使用反斜杠导致解析失败,改成正斜杠就好了。
第二步,确认元数据。SKILL.md开头的YAML元数据是否格式正确?name和description字段是否缺失?模型在判断“该用哪个技能”时主要靠description,如果这段是空的,技能等于不存在。
第三步,确认加载方式。你是通过名字显式调用的,还是希望模型自动发现?多数情况下,显式调用更可靠,你需要在指令里直接说“使用XX技能”。
第四步,排查权限问题。技能目录的读取权限是否对运行Agent的进程开放?在Linux服务器上,SSL证书目录和技能目录的权限问题是我踩过最多的坑。
第五步,观察日志。打开Agent的调试模式,查看模型在选择工具和读取文件时的日志输出,里面会明确写出它有没有尝试读取SKILL.md。这一步能直接定位是调用方的问题还是技能本身的问题。
第六步,隔离测试。新建一个空目录,只保留最基本的技能文件和一条最简指令,排除其他技能或插件的干扰。
6.2 “技能给出的结果太泛了”如何调优
如果你发现技能虽然生效了,但给出的结果不够专业、缺乏亮点,问题通常不在模型能力,而在技能定义的“颗粒度”。
针对性地看两点:一是示例是否充分。两步法的规则:至少提供一组“输入样例+期望输出”的完整对;二是描述是否给了模型足够的约束。你写的SKILL.md里如果只有“提供评审建议”这种空泛描述,模型自然给你一套绕来绕去的通用说辞。反过来,如果你明确写出“评审必须分为阻塞问题、建议改进、亮点记录三部分,且每个阻塞问题必须引用具体行号”,输出的针对性立刻就不一样了。
6.3 “多个技能同时匹配”的冲突处理
当技能库大了之后,你会遇到一个尴尬场景:让Agent处理一个复杂任务,它同时觉得两个技能都合适,两个都想加载,结果上下文里挤满了无关内容,输出变混。
两个办法解决。一个是在调用时做更精确的限定,比如把“帮我处理一下project X的文档”改成“用docs-refactor技能重构project X目录下的文档结构”,掐死选择空间。另一个是给SKILL.md里的description写清互斥条件,比如在“前端代码评审”技能里写明“本技能不处理样式优化,样式优化请参考design-review技能”,帮助模型做排除法。
6.4 主流平台的Skills生态差异速查
前面讲了Claude和Codex两条路线,这里做个小结,帮你在不同工具间切换时少走弯路。
以表格形式呈现:
| 对比维度 | Claude Agent Skills | Codex Skills |
|---|---|---|
| 配置目录 | 用户级或项目级配置,指向本地路径 | 项目目录下.codex/skills |
| 加载机制 | 显式调用优先,支持自动发现 | 偏向模块化脚本组合 |
| SKILL.md格式 | 带YAML元数据,描述+正文结构 | 描述风格更轻量,可嵌shell脚本 |
| 适用人群 | 偏内容、研究、代码混合场景 | 偏纯工程自动化、CI集成场景 |
| 社区生态 | 官方市场+GitHub仓库数量庞大 | 开源社区活跃,试验性项目多 |
这个表格只是基于我自己使用的总结,两个平台迭代速度都很快,你不要把它当成永久定论。但理解这些差异,可以避免你在跨平台迁移技能时产生“明明写法一样,怎么就不转”的困惑。
7. 我用Skills这一路的一点体会
如果你问我在这些实际操作中最值得分享的经验是什么,我想说:别把Skills当成另一个需要学习的工具,而要把它当成一次思考习惯的迁移。我们过去习惯了用对话方式教AI“一次做一件事”,而Skills的本意是让你把“一类事怎么做”完整地交给AI。从开发第一套自研技能到稳定使用到现在,我最大的改变是:我不再写“帮我做某某”的指令,而是想“这个任务背后沉淀了什么可以被复用的方法论”。
另外还有一个很实用的小技巧,放在最后分享吧。我现在写每一个SKILL.md,都会在上面标注日期和版本号,并且在保险的目录路径里保留上一个大版本。技能文件是活文档,随着业务和团队规范的变化,它需要持续维护。一旦你更新了技能定义,记得在下一次任务里先让Agent“重新读取”该技能,否则它可能还在用旧版本的记忆工作。这一点,和更新依赖库必须重启服务是一个道理。
Skills这套体系还在快速进化中,社区里每天都有新的玩法冒出来。但无论外面的工具怎么变,底层逻辑始终稳如泰山:把专业经验结构化,然后交给AI去执行。看懂了这一点,你其实就已经跑在大多数人的前面了。