自定义 Slash 命令允许开发者将常见工作流封装为可复用的命令,通过 `.claude/commands/` 目录进行管理。本文将深入探讨自定义命令的创建方法、参数传递机制、模板变量使用、命令组合技巧,以及团队共享和版本管理最佳实践。

Claude Code 自定义 Slash 命令 — .claude/commands/ 目录与 $ARGUMENTS

简介

自定义 Slash 命令允许开发者将常见工作流封装为可复用的命令,通过 .claude/commands/ 目录进行管理。本文将深入探讨自定义命令的创建方法、参数传递机制、模板变量使用、命令组合技巧,以及团队共享和版本管理最佳实践。

如果说内置 Slash 命令是 Claude Code 提供的"标准工具集",那么自定义命令就是你可以根据团队需求"量身定制"的专属工具。想象一下,你的团队有一套标准的代码审查流程、一个固定的部署步骤、一套特定的文档生成规范——将这些流程封装为自定义命令后,所有团队成员只需输入 /review/deploy/docs,就能自动执行完整的流程。

自定义命令的本质是将"最佳实践"代码化。通过将团队积累的经验和规范写入命令文件,你不仅减少了重复性的沟通成本,更确保了每次执行的一致性。这在快速迭代的团队中尤其重要——新成员加入后,无需逐一学习复杂的操作流程,只需了解有哪些自定义命令可用即可。

目录

一、自定义命令基础

1.1 命令目录结构

自定义命令的目录结构支持层级组织,这意味着你可以按功能类别对命令进行分组。比如,将所有与代码审查相关的命令放在 .claude/commands/review/ 子目录中,将部署相关的命令放在 .claude/commands/deploy/ 中。这种组织方式在命令数量较多时特别有用,可以保持目录的整洁和可维护性。

需要注意的是,无论命令文件位于 .claude/commands/ 目录的哪个层级,Claude Code 都会自动扫描并注册它们。命令的名称由文件内容中的 # 命令: /xxx 声明决定,而不是由文件名决定。这意味着你可以将多个命令放在同一个 Markdown 文件中(虽然不推荐这样做),也可以将一个命令拆分成多个文件(同样不推荐)。

text
.claude/
└── commands/
    ├── review.md           # /review 命令
    ├── test.md             # /test 命令
    ├── deploy.md           # /deploy 命令
    ├── docs.md             # /docs 命令
    └── custom/
        ├── security-audit.md
        └── performance-check.md

1.2 创建第一个自定义命令

bash
# 创建命令目录
mkdir -p .claude/commands

# 创建简单的 hello 命令
cat > .claude/commands/hello.md << 'EOF'
# 命令: /hello

## 描述
向用户问好并显示当前项目信息。

## 执行
1. 输出问候语
2. 显示当前项目名称
3. 显示当前 Git 分支
4. 显示 Claude Code 版本

## 输出格式
以友好的格式展示信息。
EOF

1.3 命令加载机制

Claude Code 在启动时扫描 .claude/commands/ 目录:

text
启动流程:
1. 扫描 .claude/commands/ 目录
2. 读取所有 .md 文件
3. 解析命令定义(# 命令: /xxx)
4. 注册到命令列表
5. 在 /help 中显示

1.4 命令发现

bash
# 在交互模式中
/help                    # 显示所有命令,包括自定义命令
/help /hello             # 显示特定命令的帮助

# 列出命令文件
ls -la .claude/commands/

# 验证命令格式
claude commands validate .claude/commands/hello.md

二、命令文件结构与格式

2.1 标准格式

markdown
# 命令: /command-name

## 描述
[命令的简短描述,出现在 /help 列表中]

## 参数
[参数说明,可选]
- $1: 第一个参数
- $2: 第二个参数
- --flag: 标志说明

## 执行
[命令执行步骤,Claude 将按照这些步骤操作]

1. 步骤一
2. 步骤二
3. 步骤三

## 输出
[期望的输出格式]

## 约束
[执行约束,可选]
- 不要修改生产数据库
- 仅处理 .py 文件

2.2 命令元数据

markdown
# 命令: /deploy

## 描述
部署应用到目标环境

## 元数据
- 版本: 1.0.0
- 作者: 开发团队
- 最后更新: 2024-01-15
- 依赖: /test, /build
- 标签: deployment, production

## 参数
- $1: 目标环境 (staging/production)
- $2: 版本号 (可选,默认 latest)

## 执行
...

2.3 命令模板引擎

命令文件支持简单的模板语法:

markdown
# 命令: /report

## 描述
生成项目报告

## 执行
生成以下报告:

### 项目概览
项目名称: $PROJECT_NAME
当前分支: $BRANCH
最后提交: $LAST_COMMIT

### 代码统计
$(git log --oneline | wc -l) 次提交
$(find . -name "*.py" | wc -l) 个 Python 文件

### 测试结果
$(pytest --tb=no -q 2>/dev/null || echo "测试未运行")

三、参数传递与 $ARGUMENTS

3.1 基本参数

markdown
# 命令: /search

## 描述
在项目中搜索代码

## 参数
- $ARGUMENTS: 搜索关键词

## 执行
搜索关键词: $ARGUMENTS

1. 使用 grep 搜索整个项目
2. 按文件类型分组结果
3. 统计匹配数量
4. 展示前 20 个匹配
bash
# 使用示例
/search "def login"
/search "class.*Exception" --include "*.py"

3.2 位置参数

markdown
# 命令: /generate

## 描述
生成代码文件

## 参数
- $1: 文件类型 (model/view/controller)
- $2: 文件名称
- $3: 输出目录 (可选,默认 src/)

## 执行
文件类型: $1
文件名称: $2
输出目录: ${3:-src/}

1. 根据类型选择模板
2. 生成文件到指定目录
3. 更新相关导入
bash
# 使用示例
/generate model User
/generate controller auth src/api/
/generate view dashboard

3.3 参数验证

在自定义命令中实现参数验证是确保命令正确执行的关键步骤。与普通的 shell 脚本不同,Claude Code 自定义命令的参数验证是通过"自然语言指令"来完成的——你告诉 Claude 什么参数是有效的、什么情况下应该停止执行,Claude 会理解并遵循这些指令。

这种基于自然语言的参数验证虽然不如编程语言的类型检查严格,但它更加灵活——你可以用人类可读的方式描述复杂的验证逻辑,比如"如果 $1 不是 'staging' 且不是 'production',输出错误并停止执行"。Claude 会理解这些语义并正确执行。

markdown
# 命令: /deploy

## 描述
部署应用

## 参数
- $1: 环境 (必须: staging 或 production)

## 执行
环境: $1

⚠️ 参数验证:
如果 $1 不是 "staging" 且不是 "production":
  输出错误: "无效的环境: $1。必须是 staging 或 production"
  停止执行

继续部署流程...

3.4 可选参数与默认值

markdown
# 命令: /test

## 描述
运行测试

## 参数
- $1: 测试类型 (unit/integration/all),默认: all
- $2: 是否生成报告 (yes/no),默认: no
- $3: 覆盖率阈值 (数字),默认: 80

## 执行
测试类型: ${1:-all}
生成报告: ${2:-no}
覆盖率阈值: ${3:-80}

1. 运行 ${1:-all} 测试
2. 如果 ${2:-no} 为 yes,生成报告
3. 检查覆盖率是否 >= ${3:-80}%

四、高级模板变量

4.1 系统变量

变量 说明 示例值
$PROJECT_NAME 项目名称 my-project
$PROJECT_ROOT 项目根目录 /home/user/project
$CURRENT_FILE 当前文件 src/main.py
$CURRENT_DIR 当前目录 src/
$BRANCH Git 分支 main
$LAST_COMMIT 最后提交哈希 abc1234
$CLAUDE_VERSION Claude Code 版本 1.0.0
$MODEL 当前模型 claude-sonnet-4
$TIMESTAMP 当前时间戳 2024-01-15T10:30:00Z

4.2 Git 变量

markdown
# 命令: /pr-info

## 描述
显示当前 PR 信息

## 执行
分支: $BRANCH
目标分支: $TARGET_BRANCH
提交数: $(git rev-list --count $TARGET_BRANCH..HEAD)
变更文件: $(git diff --name-only $TARGET_BRANCH..HEAD | wc -l)

PR 变更摘要:
$(git diff --stat $TARGET_BRANCH..HEAD)

4.3 环境变量

markdown
# 命令: /env-info

## 描述
显示环境信息

## 执行
Python: $(python3 --version 2>&1)
Node: $(node --version 2>&1)
Git: $(git --version 2>&1)
OS: $(uname -s)
Path: $PATH

五、命令组合与链式调用

命令组合是将多个自定义命令串联起来,构建复杂工作流的核心技巧。通过将简单的命令组合在一起,你可以创建出功能强大的"宏命令",一键完成原本需要多步骤手动操作的任务。

命令组合有三种基本模式:管道式(前一个命令的输出作为后一个命令的输入)、条件式(根据前一个命令的结果决定是否执行后一个命令)和并行式(同时执行多个命令)。在实际应用中,这三种模式经常混合使用,构建出既灵活又强大的自动化工作流。

5.1 命令管道

markdown
# 命令: /full-review

## 描述
执行完整代码审查流程

## 执行
1. 运行 /lint 命令检查代码质量
2. 运行 /test 命令执行测试
3. 运行 /review 命令审查代码
4. 汇总所有结果生成报告
5. 如果有严重问题,阻止提交

5.2 条件执行

markdown
# 命令: /smart-deploy

## 描述
智能部署(通过所有检查后部署)

## 执行
1. 运行 /test all yes
2. 如果测试失败:
   - 输出错误信息
   - 停止执行
3. 如果测试通过:
   - 运行 /lint
   - 如果 lint 通过:
     - 运行 /deploy staging
     - 等待确认
     - 如果用户确认,运行 /deploy production
   - 如果 lint 失败:
     - 输出 lint 问题
     - 停止执行

5.3 并行执行

markdown
# 命令: /parallel-check

## 描述
并行执行多项检查

## 执行
同时执行以下检查:
1. /lint — 代码质量检查
2. /test unit — 单元测试
3. /security — 安全扫描
4. /performance — 性能基准

汇总所有检查结果并生成综合报告。

六、团队共享与版本管理

6.1 Git 追踪命令

bash
# 将自定义命令纳入版本控制
git add .claude/commands/
git commit -m "feat: 添加团队自定义命令"

# 排除个人命令
echo ".claude/commands/personal/" >> .gitignore

6.2 命令库管理

bash
# 创建命令库
mkdir -p claude-command-library/
cd claude-command-library/

# 按类别组织
mkdir -p review/ test/ deploy/ docs/ security/

# 复制常用命令
cp ../project/.claude/commands/review.md review/standard.md
cp ../project/.claude/commands/test.md test/comprehensive.md

# 创建索引
cat > INDEX.md << 'EOF'
# Claude Code 命令库

## 代码审查
- [standard](review/standard.md) — 标准代码审查
- [security](review/security.md) — 安全审查
- [performance](review/performance.md) — 性能审查

## 测试
- [unit](test/unit.md) — 单元测试
- [integration](test/integration.md) — 集成测试
- [comprehensive](test/comprehensive.md) — 完整测试
EOF

6.3 命令分发

bash
#!/bin/bash
# install-commands.sh — 安装团队命令库

REPO_URL="https://github.com/team/claude-commands"
COMMANDS_DIR=".claude/commands"

echo "📦 安装团队 Claude Code 命令库..."

# 克隆或更新命令库
if [ ! -d "claude-command-library" ]; then
  git clone $REPO_URL claude-command-library
else
  cd claude-command-library && git pull && cd ..
fi

# 创建命令目录
mkdir -p $COMMANDS_DIR

# 安装命令
cp claude-command-library/review/*.md $COMMANDS_DIR/
cp claude-command-library/test/*.md $COMMANDS_DIR/
cp claude-command-library/deploy/*.md $COMMANDS_DIR/

echo "✅ 命令安装完成"
echo "📋 已安装命令:"
ls $COMMANDS_DIR/

6.4 命令版本控制

markdown
<!-- .claude/commands/CHANGELOG.md -->

# 命令变更日志

## v1.2.0 (2024-01-15)
- 新增 /security-audit 命令
- 改进 /review 命令,支持自定义规则
- 修复 /test 命令参数解析问题

## v1.1.0 (2024-01-10)
- 新增 /deploy 命令
- 改进 /lint 命令,支持多语言

## v1.0.0 (2024-01-01)
- 初始版本
- /review, /test, /lint, /docs 命令

七、实战案例

7.1 案例 1: 自动化 PR 审查

markdown
# 命令: /pr-review

## 描述
自动化 Pull Request 审查

## 参数
- $1: PR 编号或 URL

## 执行
PR: $1

1. 获取 PR 变更文件
2. 对每个变更文件执行:
   a. 审查代码变更
   b. 检查安全问题
   c. 检查性能影响
3. 生成审查报告:
   - 变更概览
   - 问题列表(按严重程度)
   - 改进建议
   - 总体评分
4. 如果评分 >= 8,自动 approve
5. 如果评分 < 8,标记需要修改

7.2 案例 2: 一键文档生成

markdown
# 命令: /generate-docs

## 描述
一键生成项目文档

## 参数
- $1: 文档类型 (api/user/developer),默认: all
- $2: 输出格式 (markdown/html/pdf),默认: markdown

## 执行
文档类型: ${1:-all}
输出格式: ${2:-markdown}

1. 扫描项目代码
2. 提取函数/类签名
3. 解析 docstring
4. 生成文档结构
5. 输出到 docs/ 目录
6. 更新文档索引

7.3 案例 3: 安全审计流水线

markdown
# 命令: /security-audit

## 描述
全面安全审计

## 执行
1. 依赖安全检查
   - 运行 npm audit / pip audit
   - 分析已知漏洞

2. 代码安全扫描
   - 检查硬编码密钥
   - 检查 SQL 注入风险
   - 检查 XSS 风险
   - 检查路径遍历

3. 配置安全检查
   - 检查 .env 文件是否提交
   - 检查调试模式是否开启
   - 检查 CORS 配置

4. 生成安全报告
   - 漏洞列表
   - 风险评级
   - 修复建议
   - 合规检查

八、总结

自定义 Slash 命令是将 Claude Code 深度集成到团队工作流中的强大工具。通过 .claude/commands/ 目录,你可以将常见任务封装为可复用的命令,利用 $ARGUMENTS 和模板变量实现灵活参数传递,通过命令组合构建复杂工作流。

关键要点:

  • 命令文件放在 .claude/commands/ 目录中
  • 使用 $ARGUMENTS$1, $2 传递参数
  • 利用系统变量和项目信息动态执行
  • 通过命令组合构建复杂工作流
  • 将命令库纳入版本控制实现团队共享
  • 定期维护命令文档和变更日志

九、下篇预告

自定义子 Agent 深度指南 — 学习如何在 .claude/agents/ 目录中定义专业角色的子 Agent,掌握角色配置、能力声明、@mention 调用机制,以及如何构建多 Agent 协作系统。