Claude Code 自定义斜杠命令教程:/命令 怎么写(2026)
在 Claude Code 里,如果你发现自己反复往对话框里粘同一段提示词——「帮我审一下这次改动」「按规范写 commit」「修复这个 issue」——那就该把它存成一个自定义斜杠命令了。Claude Code 自定义命令的本质,就是把一段可复用的提示词(甚至多步流程)保存成一个 Markdown 文件,之后输入 /命令名 就能一键调用。这篇教程从创建第一个 /命令 讲起,覆盖传参、注入实时上下文、frontmatter 配置,以及 2026 年一个很多老教程还没跟上的重大变化:自定义命令已经并入了 Skills。
什么是 Claude Code 自定义斜杠命令
斜杠命令就是你在 Claude Code 里输入 / 开头触发的命令。除了内置的 /help、/clear、/compact,你还可以自己造命令:在 .claude/commands/ 目录下放一个 Markdown 文件,文件名就是命令名——commit.md 对应 /commit,文件正文就是 Claude 收到的提示词。这样一段精心打磨的提示词,就变成了你和团队人人可用、随手可调的固定入口。
一句话定位
自定义斜杠命令 = 把「一段常用提示词 / 多步流程」存成一个 /命令。写一次,之后 /命令名 一键复用,还能提交进 git 让整个团队共享。
2026 重大变化:自定义命令已并入 Skills
如果你看到有些教程写 .claude/commands/,有些写 .claude/skills/<名>/SKILL.md,别懵——它们现在是一回事。按官方文档,自定义命令已经并入 Skills:.claude/commands/deploy.md 和 .claude/skills/deploy/SKILL.md 都会生成同一个 /deploy,用法完全一致。你已有的 .claude/commands/ 文件继续有效、无需迁移;新建时官方推荐用 skills 目录形式,因为它多了一个可以放脚本、模板等支持文件的目录。当同名的 command 和 skill 同时存在时,skill 优先。
该用哪种写法?
只是一段提示词、想快速上手 → 继续用 .claude/commands/名字.md,最简单。命令要配套脚本 / 模板 / 参考文档 → 用 .claude/skills/名字/SKILL.md,能带支持文件。两者触发方式和 frontmatter 完全相同。
第一个命令:3 步创建 /commit
下面这个 /commit 命令会自动读取当前 git 状态和暂存改动,然后让 Claude 写一条规范的提交信息并提交。创建它只需三步:
# 1. 在项目根目录建命令目录
mkdir -p .claude/commands
# 2. 写一个命令文件(文件名 = 命令名)
cat > .claude/commands/commit.md <<'EOF'
---
description: 暂存并提交当前改动,自动生成规范 commit message
allowed-tools: Bash(git add *), Bash(git commit *), Bash(git status *), Bash(git diff *)
disable-model-invocation: true
---
当前仓库状态:
!`git status`
已暂存的改动:
!`git diff --cached`
根据以上改动,写一条清晰规范的 git commit message 并完成提交。
EOF
# 3. 在 Claude Code 里直接调用
# > /commit保存后回到 Claude Code 输入 /commit,Claude 就会拿着实时的 git diff 生成提交信息。frontmatter 里的三个字段后面会逐一讲:allowed-tools 预授权工具、disable-model-invocation 让它只能你手动触发、description 用于 /help 和自动匹配说明。
命令放哪里:项目级 vs 个人级
命令放在不同位置,决定了谁能用它、在哪些项目里能用:
| 位置 | 路径 | 作用范围 |
|---|---|---|
| 个人级 | ~/.claude/commands/ 或 ~/.claude/skills/<名>/SKILL.md | 你本机的所有项目 |
| 项目级 | .claude/commands/ 或 .claude/skills/<名>/SKILL.md | 当前项目(可提交进 git 团队共享) |
| 插件 | <插件>/skills/<名>/SKILL.md | 启用该插件的地方,命令带「插件名:」前缀 |
| 企业级 | 组织托管设置目录 | 组织内全体成员 |
同名时的优先级:企业级 > 个人级 > 项目级;任意层级的同名 skill 还会覆盖同名的内置命令。团队协作最常用的是项目级——把 .claude/commands/ 提交进仓库,所有人 clone 下来就自带这套命令。
给命令传参数:$ARGUMENTS 与 $0 $1
命令可以接收你在命令名后面输入的参数。用 $ARGUMENTS 拿到「全部参数」的原始字符串,最常见:
---
argument-hint: [issue-number]
description: 按编号修复一个 GitHub issue
---
修复 GitHub issue #$ARGUMENTS,遵循项目编码规范:
1. 读 issue 描述,理解需求
2. 实现修复
3. 补上测试
4. 生成一次提交调用 /fix-issue 123 时,$ARGUMENTS 会被替换成 123。如果要按位置取单个参数,用 $ARGUMENTS[N] 或简写 $N——注意是 0 基索引:$0 是第一个参数、$1 是第二个、$2 是第三个。
---
description: 把组件从一个框架迁移到另一个框架
---
把 $0 组件从 $1 迁移到 $2,保留全部现有行为和测试。
# 调用:/migrate-component SearchBar React Vue
# 结果:$0=SearchBar $1=React $2=Vue别被 $1 坑到:这里是 0 基索引
Claude Code 官方最新文档里 $N 是 0 基的($0 才是第一个参数)。而不少早期社区教程把 $1 当第一个参数写(1 基)。跨版本可能有差异,第一次用务必本机实测一下,或用最稳妥的 $ARGUMENTS 拿全量。含多个词的参数要加引号:/cmd "hello world" second 时 $0 才等于 hello world。
注入实时上下文:! 执行命令、@ 引用文件
命令最强的地方,是能在提示词发给 Claude 之前,先把实时数据塞进去。用 !命令 这种行内写法,Claude Code 会先执行这个 shell 命令,把输出替换到原位——Claude 看到的是命令的「输出结果」,而不是命令本身。前面 /commit 里的 !git status、!git diff --cached 就是这么工作的。
## 环境信息
```!
node --version
npm --version
git status --short
```
## 相关代码
请审查 @src/lib/auth.ts 的实现,重点看错误处理。多行命令用 ! 开头的代码块(如上)。@路径 则会把某个文件的内容直接引入提示词。要点:! 注入需要 allowed-tools 放行对应的 Bash 命令;! 只在行首或空白后才被识别(KEY=!cmd` 这种紧跟字符的不会执行);命令输出只替换一次,不会被再次扫描。
frontmatter 配置速查
命令文件顶部 --- 之间的 YAML 就是 frontmatter,全部可选,但 description 强烈建议写。常用字段:
| 字段 | 作用 |
|---|---|
| description | 命令用途说明,出现在 /help 与自动匹配里(最推荐填) |
| allowed-tools | 本次调用免确认放行的工具,如 Bash(git add *) Bash(git commit *) |
| argument-hint | 自动补全时提示需要什么参数,如 [issue-number] |
| model | 指定该命令用哪个模型:sonnet / haiku / 完整模型 ID / inherit |
| disable-model-invocation | 设 true = 只能你手动 /命令 触发,Claude 不会自动调用 |
| user-invocable | 设 false = 只让 Claude 自动用、不在 / 菜单显示 |
| context: fork | 把该命令放到独立上下文的子代理里执行 |
谁能触发:手动 /命令 vs 让 Claude 自动调用
默认情况下,一个命令既能你手动 /命令 触发,也能被 Claude 在合适时机自动调用。像 /deploy、/commit、/send-slack 这类有副作用、你想自己掌握时机的操作,一定要加 disable-model-invocation: true,免得 Claude「看代码差不多了」就自作主张部署。反过来,纯背景知识型的说明可以设 user-invocable: false,只给 Claude 用、不在菜单里露出。
| frontmatter | 你能手动触发 | Claude 能自动触发 |
|---|---|---|
| (默认) | 能 | 能 |
| disable-model-invocation: true | 能 | 不能 |
| user-invocable: false | 不能 | 能 |
想更细地控制 Claude 能调用哪些命令,可以在权限设置里用 Skill(名字) 精确放行、Skill(名字 *) 前缀放行,或直接把 Skill 工具加进 deny 规则禁用全部自动调用。
命令、Skills、Hooks、Subagents 怎么分工
| 机制 | 适合做什么 |
|---|---|
| 斜杠命令 / Skill | 把常用提示词、多步流程存成 /命令 复用(本文) |
| Hooks | 在工具调用前后自动跑脚本,强制确定性行为(如提交前必过 lint) |
| Subagents | 把任务丢给独立上下文的子代理并行处理,主线程不被塞满 |
| MCP | 给 Claude 接入外部工具和数据源(数据库、API、文档) |
自定义斜杠命令是把「你怎么用 AI」这件事沉淀成团队资产的第一步——重复的提示词变成 /命令,多步流程变成一键操作,新人 clone 仓库即得同一套工作流。想系统学会用 Claude Code 及各类 AI 编程工具把想法真正做成可交付的产品,欢迎来 IMAI 看看我们的体系化实战课程。
想系统学会用 AI 编程,从入门到做出真实产品?
查看系统课程