Claude Code 自定义命令完全指南:提升开发效率的利器
Claude Code 的强大之处不仅在于其 AI 能力,更在于其高度可定制性。通过自定义命令,你可以将重复的开发任务转化为简单的斜杠命令,大幅提升开发效率。本文将手把手教你如何创建和使用 Claude Code 自定义命令。
什么是 Claude Code 命令?
Claude Code 命令本质上是存储在 Markdown 文件中的可复用提示词。你可以通过斜杠命令(如 /review 或 /test)在终端中快速调用它们,而无需每次都重新输入完整的指令。
命令类型
Claude Code 支持两种类型的命令:
1. 内置命令
/help- 查看帮助信息/clear- 清空对话历史/config- 配置设置/context- 查看上下文使用/catchup- 从 Git 加载变更/init- 初始化项目配置
2. 自定义命令
- 项目级命令:存储在
.claude/commands/,团队共享 - 个人命令:存储在
~/.claude/commands/,跨项目使用
必备基础:创建 CLAUDE.md
在创建自定义命令之前,强烈建议先创建 CLAUDE.md 文件。这个文件为 Claude 提供了理解项目所需的关键上下文。
CLAUDE.md 应包含的内容
# 项目名称
## 项目概述
简要描述项目目标和功能
## 技术栈
- 前端:React + TypeScript + Vite
- 后端:Node.js + Express
- 数据库:PostgreSQL
- 测试:Vitest + React Testing Library
## 开发命令
- `npm install` - 安装依赖
- `npm run dev` - 启动开发服务器 (http://localhost:3000)
- `npm run build` - 生产构建
- `npm run test` - 运行测试
- `npm run lint` - 代码检查
## 代码风格
- 使用 2 空格缩进
- 优先使用函数式组件和 Hooks
- 文件名使用 PascalCase (组件) 和 camelCase (工具函数)
- 所有导出的函数必须有 JSDoc 注释
## 关键文件位置
- 组件:`src/components/`
- API 路由:`src/api/`
- 工具函数:`src/utils/`
- 类型定义:`src/types/`
## 测试指南
- 所有组件必须有单元测试
- API 端点必须有集成测试
- 测试覆盖率 > 80%
## 已知问题
- 开发服务器热重载在 Windows 上偶尔失效
- API 限流:每分钟 100 次请求
快速生成 CLAUDE.md
使用内置命令生成模板:
/init
Claude 会根据项目类型生成一个初始的 CLAUDE.md 文件,你可以在此基础上进行完善。
重要提示:不要试图一开始就写出完美的 CLAUDE.md。将它视为活文档,在使用过程中逐步添加 Claude 重复询问的信息。
创建简单的项目命令
让我们从一个最简单的代码审查命令开始。
步骤 1:创建命令目录
在项目根目录创建 .claude/commands/ 文件夹:
mkdir -p .claude/commands
步骤 2:创建命令文件
创建 .claude/commands/review.md 文件:
审查提供的代码,重点关注:
1. 代码清晰度和可读性
2. 性能问题
3. 潜在的 Bug
4. 错误处理
不要提出纯粹的风格建议。
步骤 3:使用命令
在 Claude Code 会话中:
# 审查当前上下文中的代码
/review
# 审查特定文件
/review @src/components/Button.tsx
# 审查多个文件
/review @src/components/*.tsx
就是这么简单! 文件名 review.md 自动成为命令名 /review。
创建个人跨项目命令
如果某个命令在多个项目中都很有用,可以创建个人命令。
创建个人命令目录
mkdir -p ~/.claude/commands
示例:通用测试命令
创建 ~/.claude/commands/test-all.md:
执行以下测试流程:
1. 运行所有单元测试
2. 运行集成测试(如果存在)
3. 生成测试覆盖率报告
4. 总结测试结果,包括:
- 通过/失败的测试数量
- 代码覆盖率百分比
- 需要关注的失败测试
如果测试失败,提供修复建议。
这个命令现在可以在你的所有项目中使用!
高级功能:动态参数
通过参数让命令更加灵活。
使用 $ARGUMENTS
$ARGUMENTS 捕获命令后的所有内容。
示例:修复 GitHub Issue 命令
创建 .claude/commands/fix-issue.md:
请分析并修复 GitHub Issue:$ARGUMENTS
按照以下步骤执行:
1. 使用 `gh issue view $ARGUMENTS` 获取 Issue 详情
2. 理解问题描述和复现步骤
3. 在代码库中搜索相关文件
4. 实现修复方案
5. 编写并运行测试验证修复
6. 创建 commit,commit message 引用 Issue 编号
完成后提供修复总结。
使用:
/fix-issue 123
Claude 会自动将 123 替换到 $ARGUMENTS 的位置。
使用位置参数 $1, $2, $3
对于需要多个参数的命令,使用位置参数更清晰。
示例:创建新组件命令
创建 .claude/commands/new-component.md:
创建一个新的 React 组件:
- 组件名:$1
- 组件类型:$2 (如果未提供,默认为 "functional")
步骤:
1. 在 `src/components/$1/` 创建目录
2. 创建 `index.tsx` 文件,包含组件实现
3. 创建 `$1.test.tsx` 测试文件
4. 创建 `$1.module.css` 样式文件(如果需要)
5. 在组件目录添加 `README.md` 说明组件用法
确保:
- 使用 TypeScript 类型注解
- 添加 PropTypes 或 TypeScript 接口
- 包含基本的单元测试
- 添加使用示例
使用:
/new-component Button
/new-component Modal functional
YAML Frontmatter 配置
通过 YAML frontmatter 为命令添加元数据和权限配置。
基础 Frontmatter
---
description: 创建带有上下文的 git commit
argument-hint: [提交信息]
---
创建一个 git commit,提交信息为:$ARGUMENTS
使用 !"git status" 的输出来指导 commit 内容。
Frontmatter 字段说明:
description- 命令描述,在/help中显示argument-hint- 参数提示,帮助用户正确使用命令allowed-tools- 预授权的工具和脚本(见下文)
预授权工具:allowed-tools
最强大的 frontmatter 功能是 allowed-tools,它允许命令自动执行特定的 bash 命令或脚本,无需每次都请求用户批准。
示例:Git 提交命令
创建 .claude/commands/commit.md:
---
description: 创建语义化的 git commit
allowed-tools:
- Bash(git status:*)
- Bash(git diff:*)
- Bash(git add:*)
- Bash(git commit:*)
- Bash(git push:*)
---
执行 Git 提交流程:
1. 运行 `git status` 查看当前状态
2. 运行 `git diff --staged` 查看暂存的变更
3. 分析变更类型(feature/fix/refactor/docs 等)
4. 使用 `git add` 添加所有相关文件
5. 创建符合语义化规范的 commit message:
- feat: 新功能
- fix: 修复 Bug
- refactor: 重构
- docs: 文档更新
- test: 测试相关
- chore: 构建/工具变更
6. 使用 `git commit -m` 提交
7. 询问是否推送到远程(如果用户同意,执行 `git push`)
用户通过使用此命令明确授权执行这些 git 操作。
使用:
/commit
由于 allowed-tools 的配置,Claude 可以自动执行所有必要的 git 命令,无需每次都请求批准!
安全提示: 只对你信任的命令使用 allowed-tools,避免授权可能造成破坏的操作。
实战示例
下面是三个经过实战检验的命令模板,你可以直接使用或根据需求调整。
示例 1:智能 Git 自动化
.claude/commands/smart-commit.md:
---
description: 智能创建语义化 git commit 并推送
allowed-tools:
- Bash(git diff:*)
- Bash(git add:*)
- Bash(git commit:*)
- Bash(git push:*)
---
执行智能 Git 提交流程:
## 第一步:分析变更
运行 `git diff --staged` 获取已暂存的变更。
如果没有暂存的文件,运行 `git status` 查看未暂存的变更。
## 第二步:添加文件
使用 `git add` 添加所有修改和新增的文件。
## 第三步:生成 Commit Message
基于变更内容,生成简洁明了的单行 commit message,使用语义化规范:
- **feat**: 新功能
- **fix**: Bug 修复
- **refactor**: 代码重构(不改变功能)
- **perf**: 性能优化
- **docs**: 文档更新
- **style**: 代码格式调整(不影响逻辑)
- **test**: 测试相关
- **chore**: 构建工具或依赖更新
格式:`type(scope): description`
示例:
- `feat(auth): add Google OAuth login`
- `fix(api): handle null values in user endpoint`
- `refactor(utils): simplify date formatting logic`
## 第四步:创建 Commit
使用生成的 message 执行 commit。
## 第五步:推送到远程
将 commit 推送到 origin。
**重要**:用户通过调用此命令明确授权执行这些 git 操作。
示例 2:项目上下文初始化
.claude/commands/primer.md:
---
description: 系统性理解项目结构和当前任务
---
# 项目理解流程
当开始新会话时,按照以下系统化方法理解项目:
## 第一步:项目概览与结构
1. **阅读根目录的 README.md**
- 了解项目目标和功能
- 查看安装和运行说明
2. **获取完整文件清单**
- 运行 `git ls-files` 获取所有跟踪的文件
- 识别关键目录和文件组织方式
3. **查看项目结构**
- 运行 `tree -L 3 -I 'node_modules|dist|build'`
- 理解目录层级和组织逻辑
## 第二步:核心文档
1. **阅读 PLANNING.md**(如果存在)
- 了解架构和设计决策
- 理解技术选型原因
2. **阅读 TASK.md 或 TODO.md**(如果存在)
- 查看当前工作状态
- 了解优先级和待办事项
3. **阅读 CLAUDE.md**
- 理解项目规范和约定
- 熟悉开发命令和工作流
## 第三步:技术栈分析
1. **检查 package.json** (前端/Node.js 项目)
- 主要依赖和框架
- 可用的 npm scripts
2. **检查配置文件**
- TypeScript: `tsconfig.json`
- 构建工具: `vite.config.ts`, `webpack.config.js`
- 测试: `vitest.config.ts`, `jest.config.js`
- Linter: `.eslintrc`, `.prettierrc`
## 第四步:验证理解
在继续工作前,回答以下问题:
1. **项目目的**:这个项目的主要目标是什么?
2. **本地开发**:如何构建、测试和运行项目?
3. **架构组件**:主要的架构组件和模块有哪些?
4. **当前任务**:当前正在进行的工作和优先级是什么?
5. **技术栈**:使用了哪些主要技术和框架?
## 第五步:总结报告
提供一个简洁的项目总结,包括:
- 项目类型和用途
- 主要技术栈
- 目录结构概览
- 当前工作重点
- 需要注意的特殊配置或约定
如果有任何不清楚的地方,请提出具体问题。
示例 3:代码审查助手
.claude/commands/code-review.md:
---
description: 全面的代码审查,按优先级分类问题
---
# 代码审查助手
你是一位经验丰富的代码审查专家。你的主要职责包括:
## 第一步:代码库分析
1. **理解代码结构**
- 阅读相关文件的代码
- 理解代码的业务逻辑和数据流
- 识别使用的设计模式
2. **查看 CLAUDE.md**
- 了解项目的编码规范
- 熟悉项目特定的约定
## 第二步:问题识别
按照以下类别识别问题:
### 1. 安全性 (Security)
- SQL 注入、XSS、CSRF 漏洞
- 敏感数据泄露
- 不安全的依赖
- 认证和授权问题
### 2. 性能 (Performance)
- 不必要的循环和计算
- 内存泄漏风险
- 数据库查询优化机会
- 缓存策略改进
### 3. 代码质量 (Code Quality)
- 代码重复(DRY 原则违反)
- 过于复杂的函数
- 命名不清晰
- 缺少错误处理
- 不一致的代码风格
### 4. 最佳实践 (Best Practices)
- 违反 SOLID 原则
- 缺少类型注解(TypeScript)
- 测试覆盖不足
- 文档缺失
- 不符合项目规范
## 第三步:优先级排序
为每个发现的问题分配优先级:
- **Critical (严重)**: 安全漏洞、数据损坏风险、生产环境崩溃
- **High (高)**: 重大性能问题、关键功能 Bug、数据一致性问题
- **Medium (中)**: 可读性问题、小的性能优化、测试缺失
- **Low (低)**: 代码风格、命名改进、非关键文档
## 第四步:更新任务文件
1. **阅读现有的 TASK.md** 文件
2. **追加新发现的问题** 作为可操作的任务
3. **不要重复** 已存在的任务
4. **按优先级排序** 新任务
格式示例:
```markdown
## 代码审查发现 - [日期]
### Critical
- [ ] [安全] 修复 user API 中的 SQL 注入漏洞 (src/api/users.ts:45)
### High
- [ ] [性能] 优化产品列表查询,添加索引 (src/db/queries.ts:78)
- [ ] [Bug] 修复购物车更新时的状态不一致 (src/components/Cart.tsx:120)
### Medium
- [ ] [测试] 为 PaymentService 添加单元测试 (src/services/payment.ts)
- [ ] [重构] 简化 validateUserInput 函数逻辑 (src/utils/validation.ts:34)
### Low
- [ ] [文档] 为 API 端点添加 JSDoc 注释
- [ ] [风格] 统一使用单引号(部分文件使用双引号)
第五步:总结报告
提供一个简洁的审查总结:
- 总体评价:代码质量的整体印象
- 关键发现:最重要的 3-5 个问题
- 统计信息:按优先级分类的问题数量
- 建议的行动计划:优先处理的任务顺序
最后,展示更新后的 TASK.md 相关部分。
## 命令 vs Agent Skills:何时使用哪个?
Claude Code 提供了两种自动化机制,理解它们的区别很重要。
### 对比表格
| 方面 | 斜杠命令 (Commands) | Agent Skills |
|------|-------------------|--------------|
| **复杂度** | 简单提示词模板 | 复杂的多步骤工作流 |
| **文件结构** | 单个 `.md` 文件 | 目录 + `SKILL.md` + 资源文件 |
| **调用方式** | 手动(`/command`) | 自动(根据上下文触发) |
| **适用场景** | 可复用的提示词模板 | 标准化的团队工作流 |
| **学习曲线** | 低 | 中到高 |
| **灵活性** | 高(即时修改) | 中(需要更新结构) |
### 使用建议
**使用命令(Commands)当你需要:**
- ✅ 快速可复用的提示词
- ✅ 手动触发的工作流
- ✅ 简单的参数化任务
- ✅ 跨项目的通用操作
**使用技能(Skills)当你需要:**
- ✅ 复杂的多步骤工作流
- ✅ 自动化的上下文感知行为
- ✅ 团队标准化流程
- ✅ 需要额外资源文件的功能
**实例对比:**
| 任务 | 推荐方式 |
|------|---------|
| 快速代码审查 | 命令 `/review` |
| 完整的 PR 审查流程(包括测试、文档检查等) | Skill |
| 创建 git commit | 命令 `/commit` |
| 完整的发布流程(版本号、changelog、打标签等) | Skill |
| 运行特定测试 | 命令 `/test` |
| 智能测试套件选择和执行 | Skill |
## 命令管理最佳实践
### 1. 命令命名规范
**推荐的命名风格:**
- 使用动词开头:`review`, `test`, `commit`, `fix`
- 简洁明了:`new-component` 而不是 `create-a-new-react-component`
- 使用连字符分隔多个单词:`fix-issue` 而不是 `fixissue` 或 `fix_issue`
**避免:**
- ❌ 过长的名称:`review-code-for-bugs-and-performance`
- ❌ 含糊的名称:`do-stuff`, `helper`, `util`
- ❌ 与内置命令冲突:`clear`, `help`, `config`
### 2. 组织命令文件
对于大型项目,考虑使用子目录组织命令:
.claude/commands/ ├── git/ │ ├── commit.md │ ├── pr.md │ └── rebase.md ├── test/ │ ├── unit.md │ ├── integration.md │ └── e2e.md └── review/ ├── code.md ├── security.md └── performance.md
**使用:**
```bash
/git/commit
/test/unit
/review/security
3. 文档化你的命令
在项目根目录创建 COMMANDS.md 文档所有自定义命令:
# 项目自定义命令
## Git 工作流
### /commit
创建语义化的 git commit 并推送到远程。
- **用法**: `/commit`
- **权限**: 自动执行 git 命令
### /pr
准备并创建 Pull Request。
- **用法**: `/pr [target-branch]`
- **示例**: `/pr main`
## 代码审查
### /review
全面的代码审查,按优先级分类问题。
- **用法**: `/review [@file]`
- **示例**: `/review @src/components/Button.tsx`
## 测试
### /test-all
运行所有测试并生成覆盖率报告。
- **用法**: `/test-all`
### /test-changed
只测试变更的文件。
- **用法**: `/test-changed`
4. 版本控制
将项目命令纳入版本控制:
git add .claude/commands/
git commit -m "docs: add custom Claude commands"
不要提交个人命令:
个人命令(~/.claude/commands/)不应该提交到项目仓库。
5. 团队共享
在 README.md 中介绍自定义命令:
## Claude Code 命令
本项目包含以下自定义 Claude Code 命令:
- `/commit` - 智能 Git 提交
- `/review` - 代码审查
- `/test-all` - 完整测试
- `/primer` - 项目上下文初始化
详见 [COMMANDS.md](./COMMANDS.md) 获取完整文档。
6. 持续优化
收集反馈并改进:
- 记录命令使用频率
- 团队成员的改进建议
- 发现重复提示词的模式
- 定期更新命令以反映项目变化
常见问题
Q1: 命令文件可以有多大?
A: 理论上没有限制,但建议保持在 200 行以内。如果命令过于复杂,考虑:
- 将其拆分为多个更小的命令
- 或者创建一个 Agent Skill
Q2: 可以在命令中调用其他命令吗?
A: 不能直接调用,但可以在命令中提示 Claude 执行类似的任务:
首先执行代码审查(类似 /review 命令的功能),
然后运行所有测试(类似 /test-all 命令的功能)。
Q3: 如何调试命令?
A:
- 在命令中添加详细的步骤说明
- 使用
/context查看 Claude 如何理解命令 - 逐步测试命令,从简单到复杂
- 查看 Claude 的输出,调整提示词
Q4: allowed-tools 的安全性如何保证?
A:
- 只对可信的命令使用
allowed-tools - 避免授权危险操作(如
rm -rf) - 使用通配符时要谨慎(如
Bash(*:*)会允许所有命令) - 定期审查
allowed-tools配置
推荐的安全实践:
---
# ✅ 安全:明确指定命令
allowed-tools:
- Bash(git status:*)
- Bash(git diff:*)
- Bash(npm test:*)
# ❌ 不安全:过于宽泛
allowed-tools:
- Bash(*:*)
---
Q5: 个人命令会覆盖项目命令吗?
A: 是的。如果个人命令(~/.claude/commands/)和项目命令(.claude/commands/)同名,个人命令会优先。
优先级顺序:
- 个人命令 (
~/.claude/commands/) - 项目命令 (
.claude/commands/) - 内置命令
Q6: 命令支持哪些 Markdown 语法?
A: 命令文件支持所有标准 Markdown 语法:
- 标题(
#,##,###) - 列表(有序和无序)
- 代码块
- 链接
- 粗体和斜体
但 YAML frontmatter 必须在文件开头。
实用命令合集
以下是一些经过社区验证的实用命令,可以直接使用:
快速修复命令
.claude/commands/quick-fix.md:
---
description: 快速修复 linter 错误
allowed-tools:
- Bash(npm run lint:*)
- Bash(npx eslint:*)
---
1. 运行 `npm run lint` 查看所有 linter 错误
2. 分析错误类型和位置
3. 自动修复所有可自动修复的错误
4. 对于需要手动修复的错误,提供具体的修复建议
5. 显示修复前后的对比
依赖更新命令
.claude/commands/update-deps.md:
---
description: 安全更新依赖包
allowed-tools:
- Bash(npm outdated:*)
- Bash(npm update:*)
---
1. 运行 `npm outdated` 查看过期的依赖
2. 分析每个依赖的更新类型(major/minor/patch)
3. 优先更新 patch 和 minor 版本
4. 对于 major 版本更新,检查 CHANGELOG 和 breaking changes
5. 执行更新并运行测试
6. 如果测试失败,提供修复建议
文档生成命令
.claude/commands/gen-docs.md:
---
description: 为函数和组件生成文档
---
分析 $ARGUMENTS 指定的文件,为所有导出的函数和组件生成:
1. **JSDoc 注释**(JavaScript/TypeScript)
- 函数描述
- 参数说明(包括类型)
- 返回值说明
- 使用示例
2. **组件文档**(React)
- 组件用途说明
- Props 接口文档
- 使用示例代码
- 注意事项
3. **README 文件**(如果是目录)
- 模块概览
- 导出内容列表
- 使用指南
确保文档:
- 清晰易懂
- 包含实际示例
- 保持与代码同步
总结
Claude Code 自定义命令是提升开发效率的强大工具。通过本文,你已经学会了:
- ✅ 理解命令的基本概念和类型
- ✅ 创建项目级和个人级命令
- ✅ 使用动态参数和 YAML frontmatter
- ✅ 配置
allowed-tools实现自动化 - ✅ 区分命令和 Agent Skills 的使用场景
- ✅ 掌握命令管理的最佳实践
下一步行动:
- 在你的项目中创建第一个自定义命令
- 完善
CLAUDE.md文件 - 探索 Agent Skills 以处理更复杂的工作流
- 与团队分享你的命令,共同提升效率
记住:最好的命令是那些能解决你实际问题的命令。从小处着手,逐步完善,让 Claude Code 真正成为你的开发伙伴!
相关阅读: