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 文件中(虽然不推荐这样做),也可以将一个命令拆分成多个文件(同样不推荐)。
.claude/
└── commands/
├── review.md # /review 命令
├── test.md # /test 命令
├── deploy.md # /deploy 命令
├── docs.md # /docs 命令
└── custom/
├── security-audit.md
└── performance-check.md1.2 创建第一个自定义命令
# 创建命令目录
mkdir -p .claude/commands
# 创建简单的 hello 命令
cat > .claude/commands/hello.md << 'EOF'
# 命令: /hello
## 描述
向用户问好并显示当前项目信息。
## 执行
1. 输出问候语
2. 显示当前项目名称
3. 显示当前 Git 分支
4. 显示 Claude Code 版本
## 输出格式
以友好的格式展示信息。
EOF1.3 命令加载机制
Claude Code 在启动时扫描 .claude/commands/ 目录:
启动流程:
1. 扫描 .claude/commands/ 目录
2. 读取所有 .md 文件
3. 解析命令定义(# 命令: /xxx)
4. 注册到命令列表
5. 在 /help 中显示1.4 命令发现
# 在交互模式中
/help # 显示所有命令,包括自定义命令
/help /hello # 显示特定命令的帮助
# 列出命令文件
ls -la .claude/commands/
# 验证命令格式
claude commands validate .claude/commands/hello.md二、命令文件结构与格式
2.1 标准格式
# 命令: /command-name
## 描述
[命令的简短描述,出现在 /help 列表中]
## 参数
[参数说明,可选]
- $1: 第一个参数
- $2: 第二个参数
- --flag: 标志说明
## 执行
[命令执行步骤,Claude 将按照这些步骤操作]
1. 步骤一
2. 步骤二
3. 步骤三
## 输出
[期望的输出格式]
## 约束
[执行约束,可选]
- 不要修改生产数据库
- 仅处理 .py 文件2.2 命令元数据
# 命令: /deploy
## 描述
部署应用到目标环境
## 元数据
- 版本: 1.0.0
- 作者: 开发团队
- 最后更新: 2024-01-15
- 依赖: /test, /build
- 标签: deployment, production
## 参数
- $1: 目标环境 (staging/production)
- $2: 版本号 (可选,默认 latest)
## 执行
...2.3 命令模板引擎
命令文件支持简单的模板语法:
# 命令: /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 基本参数
# 命令: /search
## 描述
在项目中搜索代码
## 参数
- $ARGUMENTS: 搜索关键词
## 执行
搜索关键词: $ARGUMENTS
1. 使用 grep 搜索整个项目
2. 按文件类型分组结果
3. 统计匹配数量
4. 展示前 20 个匹配# 使用示例
/search "def login"
/search "class.*Exception" --include "*.py"3.2 位置参数
# 命令: /generate
## 描述
生成代码文件
## 参数
- $1: 文件类型 (model/view/controller)
- $2: 文件名称
- $3: 输出目录 (可选,默认 src/)
## 执行
文件类型: $1
文件名称: $2
输出目录: ${3:-src/}
1. 根据类型选择模板
2. 生成文件到指定目录
3. 更新相关导入# 使用示例
/generate model User
/generate controller auth src/api/
/generate view dashboard3.3 参数验证
在自定义命令中实现参数验证是确保命令正确执行的关键步骤。与普通的 shell 脚本不同,Claude Code 自定义命令的参数验证是通过"自然语言指令"来完成的——你告诉 Claude 什么参数是有效的、什么情况下应该停止执行,Claude 会理解并遵循这些指令。
这种基于自然语言的参数验证虽然不如编程语言的类型检查严格,但它更加灵活——你可以用人类可读的方式描述复杂的验证逻辑,比如"如果 $1 不是 'staging' 且不是 'production',输出错误并停止执行"。Claude 会理解这些语义并正确执行。
# 命令: /deploy
## 描述
部署应用
## 参数
- $1: 环境 (必须: staging 或 production)
## 执行
环境: $1
⚠️ 参数验证:
如果 $1 不是 "staging" 且不是 "production":
输出错误: "无效的环境: $1。必须是 staging 或 production"
停止执行
继续部署流程...3.4 可选参数与默认值
# 命令: /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 变量
# 命令: /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 环境变量
# 命令: /env-info
## 描述
显示环境信息
## 执行
Python: $(python3 --version 2>&1)
Node: $(node --version 2>&1)
Git: $(git --version 2>&1)
OS: $(uname -s)
Path: $PATH五、命令组合与链式调用
命令组合是将多个自定义命令串联起来,构建复杂工作流的核心技巧。通过将简单的命令组合在一起,你可以创建出功能强大的"宏命令",一键完成原本需要多步骤手动操作的任务。
命令组合有三种基本模式:管道式(前一个命令的输出作为后一个命令的输入)、条件式(根据前一个命令的结果决定是否执行后一个命令)和并行式(同时执行多个命令)。在实际应用中,这三种模式经常混合使用,构建出既灵活又强大的自动化工作流。
5.1 命令管道
# 命令: /full-review
## 描述
执行完整代码审查流程
## 执行
1. 运行 /lint 命令检查代码质量
2. 运行 /test 命令执行测试
3. 运行 /review 命令审查代码
4. 汇总所有结果生成报告
5. 如果有严重问题,阻止提交5.2 条件执行
# 命令: /smart-deploy
## 描述
智能部署(通过所有检查后部署)
## 执行
1. 运行 /test all yes
2. 如果测试失败:
- 输出错误信息
- 停止执行
3. 如果测试通过:
- 运行 /lint
- 如果 lint 通过:
- 运行 /deploy staging
- 等待确认
- 如果用户确认,运行 /deploy production
- 如果 lint 失败:
- 输出 lint 问题
- 停止执行5.3 并行执行
# 命令: /parallel-check
## 描述
并行执行多项检查
## 执行
同时执行以下检查:
1. /lint — 代码质量检查
2. /test unit — 单元测试
3. /security — 安全扫描
4. /performance — 性能基准
汇总所有检查结果并生成综合报告。六、团队共享与版本管理
6.1 Git 追踪命令
# 将自定义命令纳入版本控制
git add .claude/commands/
git commit -m "feat: 添加团队自定义命令"
# 排除个人命令
echo ".claude/commands/personal/" >> .gitignore6.2 命令库管理
# 创建命令库
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) — 完整测试
EOF6.3 命令分发
#!/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 命令版本控制
<!-- .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 审查
# 命令: /pr-review
## 描述
自动化 Pull Request 审查
## 参数
- $1: PR 编号或 URL
## 执行
PR: $1
1. 获取 PR 变更文件
2. 对每个变更文件执行:
a. 审查代码变更
b. 检查安全问题
c. 检查性能影响
3. 生成审查报告:
- 变更概览
- 问题列表(按严重程度)
- 改进建议
- 总体评分
4. 如果评分 >= 8,自动 approve
5. 如果评分 < 8,标记需要修改7.2 案例 2: 一键文档生成
# 命令: /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: 安全审计流水线
# 命令: /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 协作系统。