Claude Code 自定义斜杠命令与 Skill 实战:从零写一个「生成更新日志」的 /release-notes,含传参、预执行命令和调试

概念看过了,还是不知道从哪下手?本文按 Claude Code 官方「Extend Claude with skills」写一个完整可用的例子:用 /release-notes 根据 git 记录生成更新日志,覆盖目录、frontmatter、传参、预执行命令、预授权和调试。

NNathaniel bigo··原创首发·AI 辅助撰写
10 分钟读完
资料核对于 2026-11-05 · 依据官方文档与公开资料整理 Pro 账号
本文根据 Claude Code 官方文档《Extend Claude with skills》《Best practices for Claude Code》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。本站(bigolab.com)不是 Anthropic 官方网站。

适用于谁

  • 已经知道 Skill 是什么,但没有真正写过一个的人;
  • 总在聊天里重复粘贴同一段指令(比如「按这个格式写更新日志」)的人;
  • 想知道自定义斜杠命令和 Skill 到底是什么关系的人。

概念和字段规范站内已有文章:/guides/skill-md-format-spec-how-to-write 讲格式,/guides/skill-directory-structure-scripts-references 讲目录,/guides/claude-code-skills-directory-location-priority 讲放哪里、谁优先。本文只做一件事:把一个完整例子从头写出来。

结论先说

  1. 自定义命令和 Skill 现在是一回事。 官方说:.claude/commands/deploy.md 和 .claude/skills/deploy/SKILL.md 都会创建 /deploy,旧的 commands 文件继续有效;Skill 多了一个放支持文件的目录、控制谁能触发的字段,以及让 Claude 在相关时自动加载的能力。
  2. 什么时候该写。 官方的说法:当你总是把同一段指令、检查清单或多步流程粘贴进对话,或者 CLAUDE.md 里某一节已经变成「流程」而不是「事实」时,就写一个 Skill。它的正文只在使用时才加载,平时几乎不占上下文。
  3. 有副作用或要自己掌握时机的流程,加 disable-model-invocation: true,让它只能由你输入 /名字 触发,Claude 不会自己决定运行。
  4. 预执行命令(感叹号加反引号)会在 Claude 看到内容之前先运行,把输出直接塞进提示词;但它不会弹权限提示,没被允许就会让整个调用中止,所以要用 allowed-tools 预授权。
  5. 改了 SKILL.md 当前会话就能生效,不用重启,除非你新建了一个此前不存在的顶层 skills 目录,那时用 /reload-skills。

写一个 Skill 的步骤

图:本站根据 Claude Code 官方文档:Skills 整理的示意图

我们要做的东西

目标:在项目里输入 /release-notes v1.2.0,Claude 读出 v1.2.0 以来的提交,按「新功能、修复、其他」写成面向用户的更新日志,只输出给你看,不改任何文件。

选它做例子,是因为它刚好用到官方 Skill 的几个核心能力,又足够小。

第一步:建目录和 SKILL.md

放哪里?官方列了几个位置:个人技能在 ~/.claude/skills/<技能名>/SKILL.md,所有项目可用;项目技能在 .claude/skills/<技能名>/SKILL.md,提交进仓库全队共享。更新日志是项目相关的,我们放项目里:

bash
mkdir -p .claude/skills/release-notes

在里面建 SKILL.md:

text
---
name: release-notes
description: 根据 git 提交记录写面向用户的更新日志。当用户要写 release notes、更新日志、changelog,或想知道上个版本以来改了什么时使用。
argument-hint: "[上一个版本的标签,例如 v1.2.0]"
disable-model-invocation: true
allowed-tools: Bash(git log *) Bash(git tag *)
---

## 现有版本标签(按时间倒序)

!`git tag --sort=-creatordate`

## 任务

上一个版本:$ARGUMENTS(如果没有给,就取上面列表里的第一个;列表为空就告诉我并停止)。

1. 运行 `git log <上一个版本>..HEAD --oneline --no-merges`,读出这之后的所有提交。
2. 按 [template.md](template.md) 的格式,把提交归类为「新功能」「修复」「其他」,用面向用户的语言改写,不要照抄提交信息。
3. 不确定归类的提交,放到「待确认」并说明原因,不要猜。
4. 只在对话里输出结果,不要修改或创建任何文件。

逐段说明(对照官方文档):

  • description:官方说它帮助 Claude 判断何时用这个技能,要把关键用途放前面,写进用户会自然说的词。
  • argument-hint:输入 / 后在自动补全里提示该给什么参数。
  • disable-model-invocation: true:不让 Claude 自动调用。官方举的例子是 /commit、/deploy 这类你要自己掌握时机的流程。
  • allowed-tools:官方说它让 Claude 在这次调用期间使用列出的工具时不需要再询问,下一条消息发出后失效。这里同时是预执行命令能运行的前提。
  • ! 加反引号的行:官方说它会在内容发给 Claude 前运行命令,用输出替换这一行。要求 ! 在行首或空白之后。
  • $ARGUMENTS:你在命令后面输入的文字。官方还提供按位置取的 $0、$1。

第二步:加一个支持文件

官方说技能目录里可以放多个文件,主文件只写要点,详细的参考材料按需加载。我们加一个 template.md,规定输出格式:

text
# 更新日志 {版本}

## 新功能
- 用一句话说明用户能做什么新事情

## 修复
- 用一句话说明修好了什么问题

## 其他
- 内部改动、依赖更新等,没有就省略

## 待确认
- 提交编号:无法判断类别的原因

注意 SKILL.md 里要引用这个文件并说明什么时候读,官方也是这样要求的,Claude 才知道它的存在。

第三步:试运行

在项目目录里启动 claude,输入:

text
/release-notes v1.2.0

第一次可能会问你是否允许运行 git log,选择允许即可。如果出现 Shell command failed 之类的中止,官方的原因说明是:预执行命令失败,或权限检查不是「允许」,整个技能调用都会中止。排查办法:看 allowed-tools 是否包含该命令,命令本身能否在终端里单独运行。

第四步:让 Claude 帮你写、帮你改

提示词 1:让 Claude 起草 SKILL.md

text
请帮我在 .claude/skills/release-notes/ 下创建一个技能:
目标:/release-notes <上一个版本标签> 读取该标签以来的 git 提交,写成面向用户的更新日志,只输出不改文件。
要求:1)只能由我手动触发;2)用预执行命令列出现有 tag;3)预授权 git log 和 git tag;4)输出格式放在同目录的 template.md;5)description 里写上中英文触发词。
写完后告诉我每个 frontmatter 字段的作用。

提示词 2:用真实输出迭代

text
这次 /release-notes 的输出有几个问题:【把重复的提交合并了 / 把内部改动写进了「新功能」/ 语气太技术化】。
请修改 SKILL.md 和 template.md:补充归类规则和语气要求,并加两个「好的写法 / 坏的写法」例子。改完用 git diff 给我看,然后我重新运行。

官方说,技能内容在调用后会作为一条消息留在对话里,之后不会被重新读取,所以要把「整个任务期间都应遵守」的规则写成常驻指令。对话被压缩后,可能只保留技能内容的开头,把最重要的规则放在最前面。

提示词 3:改善触发描述(适用于允许自动触发的技能)

text
请检查这个技能的 description,看当我说「帮我整理一下这次发版改了什么」「写个 changelog」时能不能触发。给出三种改进写法,说明每种的优缺点,不要直接改文件。

本例设置了 disable-model-invocation,不会自动触发,这条只用于以后你写允许自动触发的技能。

Skill 出问题时先查什么

图:本站根据官方文档整理的示意图

调试清单(官方「Troubleshooting」)

  • 技能没有触发:看 description 是否含有用户会说的词;问 Claude「有哪些技能可用」确认它被识别;直接用 /名字 调用;若 /名字 也不认,检查名字里有没有特殊字符。
  • YAML 写错:官方说格式错误时技能仍会加载,但元数据为空,所以 /名字 能用、自动匹配却不行;用 claude --debug 看解析错误,或运行 claude plugin validate .claude/skills 检查(需要较新的版本,官方写明为 v2.1.233 及以后)。
  • Claude 后来不照着做了:必须每次都发生的规则,改用 Hook,见 /guides/claude-code-hooks;需要判断的规则,改成覆盖全任务的措辞。
  • 团队共享:项目技能提交进仓库即可共享。注意官方提醒:技能里的 allowed-tools 会直接生效,所以审查仓库里的技能再运行。

怎么选:Skill、Hook、MCP、子智能体

一句话区分:Skill 是「按需加载的做事流程」,Hook 是「每次必定执行的规则」,MCP 是「接外部系统」,子智能体是「隔离上下文的助手」。详细对比见 /guides/skill-vs-mcp-vs-subagent-vs-hook,旧式的自定义命令速查见 /guides/claude-code-slash-commands。

常见问题

Q:我已经有 .claude/commands/xxx.md,要迁移吗?

不用。官方说它们继续有效;同名时 skill 优先。新写的建议用 skill 格式。

Q:Windows 上预执行命令能用吗?

官方说明预执行命令通过 Bash 工具或 PowerShell 工具运行,没有 Git Bash 时用 PowerShell 工具;只有在 frontmatter 里写死 shell: bash 而电脑上没有 Git Bash 时才会失败。

订阅和额度

Skill 的正文只在调用时占上下文,比常驻在 CLAUDE.md 里省。订阅选择见 /chongzhi/claude-code,价格和额度以官方页面当前显示为准。

相关教程

参考资料

  • Claude Code 文档:Extend Claude with skills — https://code.claude.com/docs/en/skills
  • Claude Code 文档:Best practices for Claude Code — https://code.claude.com/docs/en/best-practices

Nathaniel 的更多内容

  1. 01

    Claude Code 在 Windows 上的常见坑:Git Bash 还是 PowerShell、路径反斜杠、假报错、WSL 怎么选

    Windows 上用 Claude Code,装好之后最容易踩的是:用哪个 shell、路径写法不一致、grep 没匹配就报错、钩子没生效、WSL 和原生怎么选。本文逐条按官方文档整理原因和处理办法,附三段提示词和一张对照表。

    Claude0
  2. 02

    Claude Code Hooks 实战「提交前自动跑测试」:PreToolUse 拦住 git commit,测试不过就退出码 2,附 Windows 注意点

    只写一个完整例子:让 Claude Code 每次要执行 git commit 之前,先自动跑项目测试,没通过就拦下并把输出交给它修。本文按官方 Hooks 文档给出脚本、settings.json 配置、测试方法、排错和 Windows 的两处坑。

    Claude0
  3. 03

    Claude Code 部署网站:先写 Dockerfile 和 compose 在本机跑通,再按清单上云服务器,别让它直接改线上

    想让 Claude Code 帮你把网站部署到云服务器。本文只写通用做法,按 Docker 官方文档讲:让它写 Dockerfile、.dockerignore 和 compose,在本机跑通,端口和数据卷怎么设,再给出上线清单,并说明为什么不要让它直接动线上机器。

    Claude0
  4. 04

    Claude Code 写爬虫与数据清洗:先查 robots.txt 和网站条款,控制频率,原始数据留一份再清洗

    想让 Claude Code 写爬虫抓数据再清洗。本文先讲合规:robots.txt 不是授权也不是安全措施、网站条款要自己读;再讲怎么用 Python 标准库检查规则、小样本先试、保存原始数据,以及用 pandas 清洗,附四段提示词。

    Claude0
  5. 05

    Claude Code 写 Chrome 扩展:按 Manifest V3 起步,加载未打包的扩展,改了哪些文件要重新加载

    想让 Claude Code 帮你写一个 Chrome 扩展。本文按 Chrome 官方扩展文档讲:manifest.json 的最小写法、在 chrome://extensions 加载未打包的扩展、哪些改动要刷新、怎么看控制台和报错,再给四段提示词,以及权限要尽量少。

    Claude0
  6. 06

    Claude Code 写安卓 App:Android Studio 建项目、让它用 gradlew 编译安装,报错和日志怎么喂给它

    想让 Claude Code 帮你写安卓 App。官方文档没有专门的安卓教程,本文把 Claude Code 官方工作流和安卓官方命令行文档拼在一起:Android Studio 建项目、gradlew 编译安装、模拟器和真机、测试与日志,附四段提示词。

    Claude0

同产品的其他教程

  1. 01

    Claude Code 用数据库 MCP 查数据、出报表:只读账号、先看口径再看数字,结果别一次拉太多行

    想用自然语言让 Claude Code 查数据库、出统计报表,而不是写后端接口。本文按官方 MCP 页面和 DBHub 说明讲:怎么连 PostgreSQL、MySQL、SQLite、输出太大怎么办、怎么让它先说明口径、怎么核对数字,附三段提示词。

    Claude0
  2. 02

    Claude Code 配 Figma MCP 还原设计稿:插件或一条命令安装,复制图层链接,小块小块地让它出代码

    想让 Claude Code 照 Figma 设计稿写前端代码。本文按 Figma 官方开发者文档讲:远程服务器地址、插件和手动两种安装、怎么复制图层链接、为什么要选小块、座位类型与调用次数限制,并给三段还原设计稿的提示词。

    Claude0
  3. 03

    Claude Code 管理 GitHub issue:用 gh 命令还是 GitHub MCP,怎么装、怎么限权、怎么让它分拣和回复 issue

    让 Claude Code 读 issue、分拣标签、起草回复、关联 PR,有两条路:装好 gh 命令行直接用,或连 GitHub 官方 MCP 服务器。本文按两边官方文档讲安装命令、令牌权限、只读模式,并给出三段分拣提示词和限权设置。

    Claude0
  4. 04

    Claude Code 配 Playwright MCP 做浏览器测试:一条命令安装,让它打开页面、点按钮、读控制台,再把流程写成测试

    想让 Claude Code 自己打开浏览器测试你的网页。本文按微软 Playwright MCP 官方仓库和 Claude Code 官方 MCP 文档讲:安装命令、怎么确认连上、有头无头与隔离参数、一次测试的提示词,以及它不是安全边界这件事。

    Claude0
  5. 05

    Claude Code 写文档、README 和代码注释:先让它读代码再动笔,指定风格,写完逐条核对命令能不能跑

    想让 Claude Code 给项目补 README、接口文档和注释,又怕它编造不存在的命令和参数。本文按官方「Handle documentation」工作流讲:先找没有文档的代码、指定风格、写完核对,附四段可复制提示词和验证办法。

    Claude0
  6. 06

    用 Claude Code 整理电脑文件、批量重命名、处理表格:先出清单再执行,副本操作和权限设置

    Claude Code 不只能写代码,官方说它能在任何文件夹里搜索、编辑和整理内容。本文讲非程序员怎么用它整理下载文件夹、批量重命名、处理表格:先出整理清单、用副本操作、权限怎么设,附四段提示词和撤销办法。

    Claude0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~