如何写一个自己的skill

1. 前言

为什么同样用 Claude,你的效率差这么多,本文将会带大家了解 Skill,不管你是什么语言,没写过的情况下,你都可以学会他

2. 背景

如果你用过 Claude Code ,大概率遇到过这样的场景: 每次让 Claude Code 写代码,让部分代码风格保持一致, 你会告诉他项目的编码风格,或者是一段样本代码,或者是指定某个文件;

也就是,重复描述具体的某一流程,为了解决这个问题,那么就要引出今天我们要说的 Skill

核心速览: Skill 的本质就是一个文件夹里面放了一个 SKILL.md 文件,通过编写重复的指令,Claude 就会识别这个文件,执行特定的功能

3. 初始 Skill

在开始讨论 Skill 之前,我们要区分一个事情,它和CLAUDE.md 的区别是什么,CLAUDE.md 里的内容每次对话都会加载,而 Skill 只在需要时才加载,不用的时候几乎不占上下文。

Skill 遵循的规范 (Specification - Agent Skills)。

3.1 Skill 的位置存放

位置 路径 适用范围
个人 ~/.claude/skills/<name>/SKILL.md 你所有的项目
项目 .claude/skills/<name>/SKILL.md 仅当前项目
插件 <plugin>/skills/<name>/SKILL.md 启用了该插件的地方

3.2 一个最小的 Skill

接下来我们就按项目级别的 Skill 来给大家说一下,如何实现,这也是你能看完本文快速能落地的方案,聪明的你,就知道如何去提取 Skill 然后省下自己的token,并且在简历猛吹,自研xxxSkill 这是我的路径: .claude\skills\my-skill\SKILL.md

yaml 复制代码
my-skill/
└── SKILL.md

SKILL.md 由两部分组成------YAML 头部(frontmatter)和 Markdown 正文:

yaml 复制代码
---
name: hello-world
description: 一个示例 skill,用于演示基本结构
---

当用户打招呼时,用中文回复,并附上一个冷笑话。

创建之后,你可以通过 /hello-world 手动调用,也可以让 Claude 在匹配到 description 时自动调用。

你执行的时候 在对话框输入 / ,就可以得到下图:

注意: 如果没有,记得创建好上面的步骤,重启你的 Claude

最终执行,我们将得到:

常用 frontmatter 字段速查:

字段 作用
name 名称,也是 /hello-world 的名字
description 最重要的字段,Claude 根据它决定是否加载
disable-model-invocation 设为 true 则只能手动调用,Claude 不会自动触发
allowed-tools 该 skill 激活时允许 Claude 免确认使用的工具
context 设为 fork 可在子代理中隔离运行

具体的东西,可以在上面的规范中去查询,值得注意是 description 你尽量要写的通俗易懂,上图的内容,你可以再去看看,就知道指的是哪里

4. 如何高效写出一个 Skill

掌握基本结构之后,关键在于写得 "好用"。以下是从官方文档和实践中总结的核心要点:

第一,description 是触发器,不是摘要。

Claude 决定是否加载一个 Skill,完全依赖 name + description。不要写 "这是一个帮助生成代码的工具",而要写 "生成 Vue 3 组件。当用户要求创建组件、页面或 Vue 文件时使用"。把触发词和使用场景写进去,Claude 才能准确匹配。说白了,把 Claude 当成你的合伙人,他要阅读这个说明书,才能懂你意思。

第二,指令用命令语气,按步骤编号。

写 "提取颜色主题",不要写 "你应该提取颜色主题"。

第三,SKILL.md 控制在 500 行以内。

当你的项目特别庞大的时候,此时你的内容也会越来越多,我们可以把详细的参考资料、模板、示例拆到同目录下的独立文件里,在 SKILL.md 中引用它们:

yaml 复制代码
my-skill/
├── SKILL.md           # 主指令(必须)
├── template.vue       # 组件模板
├── examples/
│   └── sample.vue     # 示例输出
└── scripts/
    └── validate.sh    # 辅助脚本

SKILL.md 中这样引用:

markdown 复制代码
## 参考资料
- 组件模板见 [template.vue](template.vue)
- 输出示例见 [examples/sample.vue](examples/sample.vue)

第四,善用动态注入。

``!`command``` 语法可以在 skill 加载前执行 shell 命令,把输出注入到提示词中:

yaml 复制代码
---
name: pr-review
description: 审查当前 PR 的代码变更
---

## 当前变更
!`git diff --stat`

## 变更详情
!`git diff`

请审查以上代码变更,关注潜在的 bug 和规范问题。

Claude 看到的不是命令本身,而是命令的输出结果。

第五,用 $ARGUMENTS 接收参数。

yaml 复制代码
---
name: fix-issue
description: 修复 GitHub issue
disable-model-invocation: true
---

修复 GitHub issue #$ARGUMENTS:
1. 阅读 issue 描述
2. 实现修复
3. 编写测试
4. 创建 commit

调用 /fix-issue 42 时,$ARGUMENTS 会被替换为 42。也支持 $0$1 按位置取参数。

编号可以让 Claude 按顺序执行,减少遗漏。

第六,区分"谁来调用"。

有副作用的操作(部署、发消息)加 disable-model-invocation: true,防止 Claude 自作主张。

5. 总结

建议从你日常最重复的流程开始操作,把它封装成第一个 Skill。写好之后提交到项目的 .claude/skills/ 里,这样团队成员都能受益。(前提不是古法编程)

注意: description 写成触发条件而非摘要;指令用命令语气并编号;大文件拆分引用;善用动态注入和参数传递。

相关推荐
zadyd13 小时前
vLLM Linux 双卡部署大模型服务器指南
linux·人工智能·python·机器学习·vllm
接着奏乐接着舞13 小时前
sse 两种调用方式
前端·javascript·vue.js
j_xxx404_13 小时前
Linux命名管道:跨进程通信实战指南|附源码
linux·运维·服务器·人工智能·ai
不会敲代码118 小时前
手写 Mini React:从 JSX 到虚拟 DOM 再到 render,搞懂 React 底层原理
前端·javascript·react.js
agicall.com19 小时前
座机通话双方语音分离技术解决方案详解
人工智能·语音识别·信创电话助手·座机语音转文字·固话座机录音转文字
AI机器学习算法19 小时前
《动手学深度学习PyTorch版》笔记
人工智能·学习·机器学习
kyriewen19 小时前
你的代码仓库变成“毛线团”了?Monorepo 用 Turborepo 拆成“乐高积木”
前端·javascript·面试
身如柳絮随风扬19 小时前
你知道什么是 Ajax 吗?—— 从入门到原理,一篇彻底搞懂
前端·ajax·okhttp
Goboy19 小时前
「我的第一次移动端 AI 办公」TRAE SOLO 三端联动, 通勤路上就把活干了,这设计,老罗看了都想当场退役
人工智能·ai编程·trae
qq_4523962319 小时前
第二十篇:《UI自动化测试的未来:AI驱动的智能测试与低代码平台》
人工智能·低代码·ui