AI编程助手Skills实战:从零搭建可复用能力包
1. 从“skills”这个标题说起它到底在解决什么问题第一次看到“skills”这个标题很多人会以为是某个泛泛的能力清单或者一份简历上的技能标签。但结合热搜词里反复出现的 Claude Code、Codex、plugin、agents 这些词就能判断出这里说的 skills 不是人力资源语境下的“技能”而是 AI 编程助手生态里一个非常具体的概念——给 AI Agent 挂载的可复用能力包。我最早接触这个概念是在折腾 Claude Code 的时候。当时我的诉求很朴素每次让 AI 帮我写代码都要重复交代一堆上下文比如“这个项目用 pnpm 不用 npm”“提交信息要遵循 Conventional Commits”“测试文件放在tests目录下”。说一次两次还行说一百次就是纯浪费。后来发现 Claude Code 支持一种叫 skills 的机制可以把这些约定、流程、脚本打包成一个目录Agent 在需要的时候自动加载。这一下就把我从重复劳动里解放出来了。所以这篇内容我想聊的就是围绕 skills 这一整套东西它是什么、为什么值得投入时间、怎么从零搭一个能用的 skill、踩过哪些坑、以及 Claude Code 和 Codex 这两个主流工具在 skills 支持上的差异。适合两类人看一类是已经在用 AI 编程助手、但还停留在“聊天式提问”阶段的开发者另一类是团队里想把 AI 使用规范沉淀下来的技术负责人。哪怕你之前完全没接触过 skills跟着走一遍也能上手。需要先说明一点skills 这个概念目前在不同工具里的实现细节不完全一样Claude Code 有自己的一套目录约定Codex 那边又略有不同社区里还有各种第三方 plugin 市场。我会尽量把通用的部分讲透工具特有的部分单独标注避免你照着做的时候发现对不上。2. skills 的核心设计思路为什么是“目录 描述”而不是“插件”2.1 从 prompt 堆砌到能力封装思路的转变在哪早期用 AI 编程助手大家的做法基本是往对话里塞 prompt。项目规范写在一个巨大的 system prompt 里或者每次开新会话手动粘贴一段说明。这种做法在项目小的时候没问题一旦项目变大、规范变多就会遇到几个硬伤。第一个硬伤是上下文窗口的浪费。你把所有规范都塞进去不管这次任务用不用得上模型都要读一遍。一个前端项目可能同时有组件规范、样式规范、测试规范、提交规范、部署规范但这次只是改一个工具函数读那么多纯属浪费 token。第二个硬伤是维护困难。规范散落在各个 prompt 模板里改一处要同步好几处时间一长就没人记得哪份是最新的。skills 的设计思路正好针对这两点。它把能力拆成一个个独立的目录每个目录里有一个描述文件说明这个 skill 是干什么的、什么时候该用。Agent 启动时只读这些描述很轻量真正需要执行某个任务时才把对应 skill 的完整内容加载进来。这就像图书馆书架上的索引卡片很薄你按需去取那本书而不是把整个图书馆搬回家。提示这个“按需加载”的机制是 skills 最核心的价值。理解这一点后面所有的目录结构、描述写法、拆分粒度逻辑都能串起来。2.2 一个 skill 的最小构成目录、描述、正文一个能用的 skill最小构成其实就三样东西。我用 Claude Code 的约定来举例因为它的结构最清晰其他工具大同小异。一个独立目录通常放在项目的.claude/skills/或者用户级的~/.claude/skills/下目录名就是 skill 的名字比如commit-helper、api-test。一个描述文件一般是SKILL.md开头有一段 frontmatter写明 name 和 description。description 是给 Agent 看的决定它什么时候会想起这个 skill。正文内容描述文件的后半部分写具体的操作步骤、命令、注意事项。这部分只在 skill 被激活时才进入上下文。这里最关键的是 description 的写法。很多人第一次写 skilldescription 写成“这是一个提交辅助工具”结果 Agent 从来不主动用它。原因很简单Agent 判断要不要用某个 skill靠的是把当前任务和 description 做语义匹配。“提交辅助工具”这种描述太抽象匹配不上“帮我把这次改动提交了”这种具体请求。正确的写法应该把触发场景写进去比如“当用户要求提交代码、生成 commit message、或整理暂存区改动时使用”。2.3 为什么不做成传统插件轻量与可读的取舍有人会问既然要封装能力为什么不直接做成传统意义上的插件写代码、注册钩子、走一套完整的生命周期我的理解是skills 刻意选择了“轻量”这条路。传统插件功能强但门槛高。你要懂它的 API、要处理版本兼容、要打包发布。而 skills 本质上就是一堆 Markdown 加脚本任何人打开目录就能看懂改一行字就能调整行为不需要编译、不需要发布流程。这种低门槛带来的好处是团队里每个人都能贡献自己的 skill而不是只有少数懂插件开发的人才能参与。代价当然也有。skills 不适合做复杂的逻辑编排它更像“给 Agent 的一份操作手册”而不是“一个独立运行的程序”。如果你需要的是复杂的条件分支、状态管理、外部服务调用那还是得走插件或者自己写工具。判断标准很简单如果这件事用一段自然语言说明加几条命令就能讲清楚就用 skill如果讲不清楚才考虑插件。3. 动手搭第一个 skill从目录结构到实际生效3.1 环境准备与目录约定动手之前先把环境理清楚。以 Claude Code 为例你需要先确认它已经装好并且能正常跑起来。安装方式各平台不太一样Windows 桌面版、macOS、Linux 都有对应的包社区里也有大量安装教程可以参考。装完之后在终端里能调起claude命令就说明基础环境没问题。接下来是目录。skills 一般有两个存放位置作用范围不同位置路径示例作用范围适用场景用户级~/.claude/skills/当前用户所有项目个人通用习惯如提交规范项目级项目根/.claude/skills/仅当前项目项目特有规范如目录约定我的建议是个人习惯放用户级项目约定放项目级。这样换项目的时候个人习惯跟着走项目约定不会污染其他项目。如果你在团队里协作项目级的 skills 可以提交到仓库所有人共享这比在群里发一份 Word 文档靠谱得多。注意不同工具对目录名的要求不完全一样。Claude Code 认.claude/skills/Codex 那边可能是别的路径。写之前先查一下你用的工具当前版本的文档别照着旧教程硬套。3.2 写一个能真正被触发的 description前面强调过 description 的重要性这里给一个具体的对比。假设我要做一个“生成 commit message”的 skill。反面写法description: 帮助生成提交信息正面写法description: 当用户要求提交代码、生成 commit message、整理暂存区改动、或询问如何写提交说明时使用。适用于 Git 仓库中已有 staged 改动的场景。差别在哪正面写法里包含了动作词提交、生成、整理、对象词代码、commit message、暂存区、场景限定已有 staged 改动。Agent 在做语义匹配时这些词都能提高命中率。我实测下来description 里把用户可能说的原话写进去触发率会明显提升。还有一个技巧如果两个 skill 的职责有重叠description 里要写清楚边界。比如你有一个“提交”skill 和一个“代码审查”skill提交 skill 的 description 里可以加一句“不负责代码质量检查那是 review skill 的职责”。这样能减少 Agent 选错 skill 的情况。3.3 正文写法把 Agent 当成一个聪明但没上下文的新同事description 决定“用不用”正文决定“怎么用”。正文的写法我总结成一句话把 Agent 当成一个聪明但完全不了解你项目的新同事你要把操作步骤讲到他能照着做。具体来说正文里应该包含这几类信息前置检查执行前要确认什么。比如“先运行 git status 确认有 staged 改动如果没有就提示用户先 add”。操作步骤一步一步写清楚。命令用代码块标出来参数写明白。判断逻辑遇到什么情况怎么处理。比如“如果改动涉及多个不相关的模块建议拆成多个 commit”。输出格式最终产物长什么样。给一个示例Agent 会照着模仿。禁止事项明确不能做什么。比如“不要自动执行 git push”。我踩过的一个坑是正文写得太抽象全是“根据情况灵活处理”这种话。结果 Agent 每次行为都不一样有时候靠谱有时候离谱。后来我把能确定的分支都写死只在真正需要判断的地方留余地稳定性一下就上来了。能写死的就别留给模型判断这是用 skills 的一条重要经验。4. Claude Code 与 Codex 的 skills 差异别拿一套经验硬套4.1 加载机制与触发时机的不同Claude Code 和 Codex 都支持类似 skills 的能力但加载机制有差异直接影响到你怎么组织内容。Claude Code 的 skills 更偏向“描述驱动”。它会在会话开始时读取所有 skill 的 description建立一个索引然后在对话过程中根据语义匹配决定加载哪个。这意味着 description 的质量直接决定触发效果而正文可以写得比较长因为不触发就不占上下文。Codex 那边根据社区反馈和实际使用体验它对 skills 的处理更偏向“显式引用”。有时候你需要在任务描述里明确提到 skill 的名字或者通过配置指定加载哪些。这种机制下description 的重要性相对降低但你需要更主动地管理哪些 skill 处于激活状态。这个差异带来的实操建议是如果你同时用两个工具skill 的正文可以共用但 description 要针对各自机制优化。Claude Code 那边把触发词写足Codex 那边保证 skill 名字好记好引用。4.2 配置文件的坑那些报错信息在说什么热搜词里有一堆报错信息比如 “cc switch local proxy failed while handling codex endpoint /responses”、“codex 无法加载组织设置”、“the gpt-5.6-sol model is not supported when using codex”。这些看着吓人其实大部分和 skills 本身没关系是工具配置和模型接入的问题。我挑两个和 skills 使用间接相关的说一下。一个是模型不支持的问题通常是因为你在配置里指定了一个当前环境不认识的模型名解决方法是检查配置文件里的 model 字段换成实际可用的。另一个是组织设置加载失败多半是网络或者认证配置的问题和 skill 内容无关但会让人误以为是 skill 写错了。提示遇到报错先别急着改 skill。把报错信息里的关键词单独搜一下确认是工具层问题还是 skill 层问题。我见过太多人把配置错误当成 skill 写错白白折腾半天。4.3 跨工具复用的现实做法如果你团队里有人用 Claude Code有人用 Codex怎么让 skills 复用我的做法是维护一份“源文件”放在项目里的docs/skills/目录每个 skill 一个 Markdown。然后用一个简单的脚本把源文件转换成各工具需要的目录结构和格式。这样改一处两边同步。脚本本身不复杂无非是读文件、解析 frontmatter、写到目标路径。关键是养成“改源文件、跑脚本、不同步手改”的习惯。一旦有人图省事直接改目标目录两边就会漂移过段时间就没人搞得清哪份是对的。5. 常见问题与排查那些文档里不会写的坑5.1 skill 不触发怎么办这是最高频的问题。排查顺序我一般是这样的确认目录位置对不对。放错目录是最常见的原因尤其是项目级和用户级搞混。确认 description 有没有触发词。把用户可能说的原话列出来看 description 里覆盖了几个。确认 skill 名字有没有冲突。两个 skill 名字太像Agent 可能选错。确认工具版本支持。老版本可能不支持 skills或者支持的方式不一样。如果以上都没问题还有一个偏方在对话里显式提一下 skill 的名字比如“用 commit-helper 帮我提交”。如果这样能触发说明 skill 本身没问题是 description 的匹配度不够回去改 description。5.2 skill 触发了但行为不对这种情况通常是正文写得不够明确。我遇到过一次skill 里写“根据改动内容生成合适的提交信息”结果 Agent 有时候生成中文有时候生成英文。后来我在正文里明确写“提交信息使用中文格式为 type(scope): description”问题就解决了。另一个常见原因是正文里的命令有环境依赖。比如你写pnpm test但用户环境里只有 npm。解决办法是在正文里加一句前置检查或者写成“优先使用项目 lock 文件对应的包管理器”。5.3 多个 skill 互相干扰当 skill 数量多起来互相干扰是必然的。表现是 Agent 在一个任务里加载了不相关的 skill或者该加载 A 却加载了 B。我的处理原则是职责单一。一个 skill 只做一件事description 里写清楚边界。如果两个 skill 确实有重叠就在各自的 description 里互相引用说明分工。比如“代码格式化”和“代码审查”两个 skill格式化 skill 里写“只处理格式不评价代码质量”审查 skill 里写“只评价质量不自动改格式”。5.4 常见问题速查表现象可能原因排查动作skill 完全不触发目录位置错误检查.claude/skills/路径skill 偶尔触发description 触发词不足补充用户原话中的动作词触发了但输出不稳定正文判断逻辑太模糊把能确定的分支写死加载了错误的 skill多个 skill 职责重叠拆分或明确边界命令执行失败环境依赖不匹配加前置检查或写清依赖跨工具行为不一致两套机制差异针对各工具优化 description6. 把 skills 用出复利从个人习惯到团队资产6.1 从“我自己的 skill”到“团队的 skill”个人用 skills解决的是自己的效率问题。但 skills 真正的价值放大是在团队层面。我经历过一次转变一开始只有我自己写 skill后来我把几个通用的 skill 提交到项目仓库同事拉下来就能用。再后来团队里每个人都开始贡献自己的 skill慢慢形成了一套“团队 AI 使用规范”的活文档。这个过程中最关键的一步是建立 review 机制。skill 也是代码也会出错也需要维护。我们现在的做法是skill 的改动走和代码一样的 PR 流程有人 review合并后生效。这样能避免有人写了个有问题的 skill 把大家都带偏。6.2 版本管理与更新策略skills 的版本管理有个特殊之处它不像代码那样有明确的版本号但行为会随工具版本变化。我的做法是在 skill 目录里放一个CHANGELOG.md记录每次改动的原因和影响。同时在 description 或正文里标注“适用于 Claude Code x.x 及以上版本”这类信息。更新策略上我倾向于小步快跑。发现 skill 行为不对当天就改不要攒着。因为 skill 的问题会持续影响每一次使用拖得越久损失越大。6.3 什么样的 skill 值得沉淀不是所有东西都值得做成 skill。我判断的标准是这件事我重复做过至少三次且每次步骤基本一致。满足这个条件做成 skill 才有复利。如果一件事只做一次或者每次情况都不同那临时处理就好别为了 skill 而 skill。另外那些“我知道该怎么做但每次都要想一下”的事情也特别适合做成 skill。比如发布流程、回滚流程、环境初始化流程。这些流程平时不常用用的时候容易漏步骤做成 skill 就相当于给自己留了一份不会忘的检查清单。6.4 我个人的几条经验最后分享几条我实际用下来觉得最有价值的经验。第一条是先写 description 再写正文因为 description 决定了 skill 会不会被用正文写得再好不触发也是白搭。第二条是skill 要短一个 skill 超过两屏就该考虑拆了太长的 skill 加载慢、维护难、还容易让 Agent 抓不住重点。第三条是定期清理过时的 skill 比没有 skill 更糟因为它会误导 Agent我一般每季度过一遍删掉不再用的。还有一条偏门但很有用的给 skill 写测试。不是自动化测试而是手动测试。写完一个 skill故意用几种不同的说法去触发它看行为是否一致。我靠这个习惯发现了不少 description 的盲区。这套东西说到底核心就一句话skills 是把你的经验和规范变成 Agent 能理解和执行的形式。它不神秘也不复杂难的是持续维护和团队协作。但只要开始做哪怕只有一个 skill你就能感受到那种“不用重复交代”的轻松。

相关新闻

agent-skills 实战:用 skills CLI 和 TDD 约束 Claude Code 编码代理

agent-skills 实战:用 skills CLI 和 TDD 约束 Claude Code 编码代理

1. 从"agent-skills"这个标题能读出什么第一次看到agent-skills这个仓库名,我的直觉是:这不是又一个"提示词大全",而是一套把 AI coding agent 的能力拆成可复用模块的工程化尝试。关键词里同时出现了skills CLI、Claude…

2026/10/9 15:30:45 阅读更多 →
claude-mem 持久化记忆系统:从设计到落地的工程实践

claude-mem 持久化记忆系统:从设计到落地的工程实践

1. 从零认识 claude-mem:它到底解决什么问题第一次看到claude-mem这个名字,我脑子里蹦出来的第一反应是:这不就是给 Claude 配了个“外挂记忆”吗?事实也确实如此。claude-mem是一个围绕 Claude 生态构建的持久化记忆层&#xff0…

2026/10/9 15:42:46 阅读更多 →
RAG系统优化六处分水岭:从流水线到工程化实践

RAG系统优化六处分水岭:从流水线到工程化实践

1. 那条被做烂的流水线,到底烂在了哪里先把话说直白点:RAG 这套东西之所以让人觉得“烂大街”,不是因为它的思路过时了,而是因为绝大多数人做出来的东西,本质上就是一条**“切块—向量化—检索—拼进提示词”**的流水线…

2026/10/11 11:29:46 阅读更多 →

最新新闻

你的项目不是一次性的:vibe-vibe 迭代思维实战指南——从“做完“到“好用“

你的项目不是一次性的:vibe-vibe 迭代思维实战指南——从“做完“到“好用“

文档教程Vibe Coding示例工程 【免费下载链接】vibe-vibe The First Systematic Vibe Coding Open-Source Tutorial | From Zero to Full-Stack, Empowering Everyone to Build Products with AI | Live at: www.vibevibe.cn ;首个系统化 Vibe Coding 开源教程 | 零…

2026/10/12 5:47:24 阅读更多 →
Openblocks Drawer 抽屉组件实战:布局定位、尺寸控制与 openDrawer/closeDrawer 事件触发

Openblocks Drawer 抽屉组件实战:布局定位、尺寸控制与 openDrawer/closeDrawer 事件触发

低代码后端前端开发工具 【免费下载链接】openblocks 🔥 🔥 🔥 The Open Source Retool Alternative 项目地址: https://gitcode.com/gh_mirrors/op/openblocks 点击查看 免费下载 Drawer(抽屉)是 Openblo…

2026/10/12 5:47:24 阅读更多 →
Unsloth 3行代码微调:合成数据质量把控与实战指南

Unsloth 3行代码微调:合成数据质量把控与实战指南

直接正文开始。1. 为什么要用合成数据微调,以及为什么是Unsloth做微调这件事,最大的成本往往不是机器,而是数据。很多人一上来就到处找数据集,或者手工标注几百条样本,结果发现任务本身太垂直,公开数据根本…

2026/10/12 5:47:24 阅读更多 →
掉地面包背后:烘焙食安全链条拆解与门店现场管理落地

掉地面包背后:烘焙食安全链条拆解与门店现场管理落地

一家开了五年的连锁面包店,因为一段“员工把掉在地上的面包捡起来放回货架”的视频,一夜之间登上热搜,总部电话被打爆,门店营业额当周腰斩。这类事这几年并不少见,每次出现都会让整个烘焙行业跟着紧张一次。你可能会觉…

2026/10/12 5:47:24 阅读更多 →
C语言联合体与枚举:从内存利用到类型安全的实战指南

C语言联合体与枚举:从内存利用到类型安全的实战指南

写之前先说实话,这个标题我一开始真以为是个什么网红食谱,结果点进去才发现是个C语言的自定义类型话题。“嘎嘎滴辣虾”这个开场相当有迷惑性,但顺着这个味儿,今天这篇就想跟大伙儿聊聊联合体(union)和枚举…

2026/10/12 5:47:24 阅读更多 →
C++肉鸽游戏开发:随机地图生成与回合制AI实战解析

C++肉鸽游戏开发:随机地图生成与回合制AI实战解析

简介:由C与EasyX图形库实现的肉鸽游戏Slime-Hunter,是作者22级技科专业课程设计作品。游戏内含角色控制、敌人攻击动画与基础关卡机制,虽为中期版本,但核心玩法已具备完整雏形,适合正在学习C游戏开发的初学者参考。资源…

2026/10/12 5:46:23 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →