现在位置: 首页 > Claude Code 教程 > 正文

Claude Code 自定义斜杠命令

Skills(技能)是 Claude Code 的扩展机制,通过自定义斜杠命令(如 /deploy/explain-code)来增强 Claude 的能力。

每个自定义命令本质上都是一个独立的 Skill 文件,可以封装复杂的工作流程、项目规范和常用操作,供你在任何会话中快速调用。

自定义命令已经被整合到 Skills 系统中——位于 .claude/commands/deploy.md 的命令文件和位于 .claude/skills/deploy/SKILL.md 的技能文件都会创建 /deploy 命令,以相同的方式工作。

本质上,.claude/commands/ 是 Skills 的简写形式,两种目录结构完全等价。


为什么使用自定义斜杠命令

自定义斜杠命令的核心价值在于标准化 + 复用

  • 固化工作流程:将常用的多步骤操作(如"部署到生产环境")封装为一条命令
  • 确保团队一致性:将项目规范(如"代码审查清单")固化为命令,确保团队成员遵循相同标准
  • 降低认知负担:无需记忆复杂的命令组合,一句话即可触发完整工作流程
  • 减少重复输入:高频任务从多步操作变成单次调用

Anthropic 内部团队的经验是:每天执行两次以上的任务就应该做成 Skill。一次做对,持续生效。


文件结构

每个 Skill 是一个目录,包含一个必需的 SKILL.md 文件:

my-skill/
├── SKILL.md           # 主指令文件(必需)
├── template.md        # Claude 填充的模板
├── examples/
│   └── sample.md      # 展示预期格式的示例
└── scripts/
    └── validate.sh    # Claude 可以执行的脚本

文件格式分为两部分:

  • YAML frontmatter(位于 --- 分隔符之间):用于配置元数据
  • Markdown 正文:Claude 调用时遵循的指令

创建你的第一个自定义斜杠命令

1、创建技能目录

在合适的位置创建技能目录。存放位置决定了命令的作用范围:

mkdir -p ~/.claude/skills/explain-code
# 或者在项目中创建
mkdir -p .claude/skills/explain-code

2、编写 SKILL.md 文件

在目录中创建 SKILL.md,包含 YAML frontmatter 和指令:

实例

---
name
: explain-code
description
: 用可视化图表和类比解释代码。当解释代码工作原理、
             讲解代码库或用户问"这是怎么工作的"时使用
---

当解释代码时,始终包含以下内容:
1. **从类比开始**:将代码比作日常生活中的事物
2. **画一个图表**:使用 ASCII 艺术展示流程、结构或关系
3. **逐步讲解代码**:逐步解释发生的事情
4. **指出一个坑**:常见的错误或误解是什么?

3、使用自定义命令

在 Claude Code 中直接调用:

/explain-code src/auth/login.ts

Claude 会自动匹配符合描述的技能,或者你可以显式调用。


配置字段详解

字段 说明
name 显示名称;会成为斜杠命令(格式:小写字母、数字、连字符,最多 64 字符)
description 技能功能和何时使用(推荐填写,Claude 自动调用依赖此字段)
argument-hint 自动补全时显示的提示(如 [filename] [format]
disable-model-invocation 设为 true 时,阻止 Claude 自动调用;只有你显式调用才生效
user-invocable 设为 false 时,从 / 菜单隐藏;只有 Claude 可以调用
allowed-tools Claude 无需询问即可使用的工具列表
context 设为 fork 时,在分支子代理中运行
agent 设置 context: fork 时使用的子代理类型
paths Glob 模式列表,限制技能激活的文件范围

调用控制

通过 frontmatter 控制谁可以调用该技能:

配置 你可以调用 Claude 可以调用
(默认)
disable-model-invocation: true
user-invocable: false

变量替换

在技能内容中使用变量,Claude 会自动替换:

变量 说明
$ARGUMENTS 调用时传递的所有参数
$ARGUMENTS[N] 按 0 基索引访问特定参数
$N $ARGUMENTS[N] 的简写
${CLAUDE_SESSION_ID} 当前会话 ID
${CLAUDE_SKILL_DIR} 技能 SKILL.md 文件所在的目录

技能存放位置

技能可以存放在多个位置,作用范围不同:

位置 路径 作用范围
企业级 由托管设置决定 组织内所有用户
个人 ~/.claude/skills/<skill-name>/SKILL.md 所有项目
项目 .claude/skills/<skill-name>/SKILL.md 仅当前项目
插件 <plugin>/skills/<skill-name>/SKILL.md 插件启用范围内

.claude/commands/ 中的文件仍然有效,支持相同的 frontmatter。如果技能和命令同名,技能优先。


高级示例

示例一:部署命令(仅手动调用)

实例

---
name
: deploy
description
: 将应用部署到生产环境
disable-model-invocation
: true
---

将 $ARGUMENTS 部署到生产环境:
1. 运行测试套件
2. 构建应用程序
3. 推送到部署目标

示例二:带参数的组件迁移命令

实例

---
name
: migrate-component
description
: 将组件从一个框架迁移到另一个框架
---

将 $0 组件从 $1 迁移到 $2。
保留所有现有行为和测试。

用法:/migrate-component SearchBar React Vue

示例三:带动态上下文的 PR 总结命令

实例

---
name
: pr-summary
description
: 总结 Pull Request 的变更
context
: fork
agent
: Explore
allowed-tools
: Bash(gh *)
---

## Pull Request 上下文
- PR diff
: !`gh pr diff`
- PR 评论
: !`gh pr view --comments`
- 变更文件
: !`gh pr diff --name-only`

## 你的任务
总结这个 Pull Request...

内置斜杠命令

Claude Code 提供了一些开箱即用的内置命令:

命令 功能
/batch <instruction> 编排跨代码库的大规模变更
/claude-api 加载 API 参考材料
/debug [description] 启用调试日志
/loop [interval] <prompt> 按间隔重复运行提示
/simplify [focus] 审查代码质量问题

最佳实践

1、description 怎么写

description 是 Claude 自动调用的依据,务必写得清晰:

  • 明确触发时机:当用户要求审查 / 分析 / 检查代码质量时调用
  • 说明前置条件:在规格文档确认后使用
  • 写清楚边界:什么情况下不应该调用

2、单一职责原则

每个技能只做一件事,给出清晰的输入/输出:

  • /deploy:只负责部署
  • /test:只负责运行测试
  • /review:只负责代码审查

3、按需设置调用权限

  • 危险操作(部署、删除):设置 disable-model-invocation: true
  • Claude 辅助任务:设置 user-invocable: false
  • 通用流程:使用默认配置

4、利用 allowed-tools 限制权限

为安全关键的操作设置最小权限:

实例

---
name
: read-only-analyzer
description
: 只读代码分析,用于审查和理解代码
allowed-tools
: Read, Grep, Glob, Bash(gh *)  # 只允许这些工具
---

执行只读代码分析...

团队共享策略

将项目级技能提交到 git,让团队共享:

my-project/
├── .claude/
│   ├── skills/
│   │   ├── deploy/
│   │   │   └── SKILL.md
│   │   ├── test/
│   │   │   └── SKILL.md
│   │   └── review/
│   │       └── SKILL.md
│   └── commands/  # 也可以用 commands/ 目录
└── CLAUDE.md

在 CLAUDE.md 中引用和说明项目特有的技能:

## 自定义斜杠命令

本项目提供以下自定义斜杠命令:

- `/deploy [env]` — 部署到指定环境(dev/staging/prod)
- `/test [module]` — 运行测试套件或指定模块
- `/review` — 执行标准代码审查

详细使用说明请参考 @.claude/skills/README.md

常见问题

Q:技能和命令目录有什么区别?

本质上没有区别。.claude/commands/.claude/skills/ 的简写形式,两种写法都能正常工作。如果同名,技能优先。

Q:如何在调用时传递多个参数?

使用引号包裹多个参数:/migrate SearchBar "from:React to:Vue",然后在技能中使用 $ARGUMENTS 获取完整字符串。

Q:技能可以在子代理中使用吗?

可以。通过设置 context: forkagent 字段,可以让子代理在独立上下文中运行技能。

Q:如何让 Claude 记住常用技能?

在 CLAUDE.md 中列出所有可用的自定义命令和它们的使用场景,Claude 会根据描述自动匹配合适的技能。