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: fork 和 agent 字段,可以让子代理在独立上下文中运行技能。
Q:如何让 Claude 记住常用技能?
在 CLAUDE.md 中列出所有可用的自定义命令和它们的使用场景,Claude 会根据描述自动匹配合适的技能。
