本文介绍了如何通过在 Claude Code 中创建自定义斜杠命令来优化开发流程,解决手动输入重复指令导致的“提示词漂移”问题。文章详细列举了 10 个核心命令(如环境检查、代码审查、自动测试生成等)及一个额外奖励命令,旨在通过提示词标准化和版本控制来提升个人及团队的开发效率。

设置 Shell 别名(aliases)是终端工作的自然组成部分,大多数开发者几乎是反射性地在做这件事。如果你经常运行某个命令,你就会为它设置别名。
然而,在使用 Claude Code 提示词时,开发者通常会完全跳过这一步,凭记忆不断重复输入相同的 10-15 行指令,比如代码审查清单、测试生成约束、预提交扫描等……而且是在一个又一个会话中不断重复。

真正的成本不仅在于开发者的重复劳动,还在于提示词漂移(prompt drift)。
每次凭记忆重新输入提示词时,措辞都会略有变化。例如,你可能会忘记某个约束,或者对预期输出格式的表述有所不同。对于 Shell 命令来说,这无关紧要,因为它们是确定性的;但对于 LLM 来说,略有不同的表述可能会产生显著不同的输出。

Claude Code 的自定义命令(Custom Commands)解决了这两个问题。
你可以将 Markdown 文件保存在 .claude/commands/ 中,它就会变成一个斜杠命令,让你每次都能调用完全相同的指令。这些提示词通过 Git 进行版本控制,因此整个团队都可以运行相同的命令。当有人改进了提示词时,每个人都能在下次拉取代码时获得更新。
这正是 Boris Cherny 在关于 Claude Code 工作流的推文中描述的模式:将每一个重复的工作流变成一个命令,检入 Git,并与团队共享。

接下来,我们将了解如何设置这些命令,然后介绍在我的工作流中最有用的 10 个命令。我将在一个真实的 ML 推理服务(FastAPI, scikit-learn, Alembic)上演示每一个命令,以便你能看到实际输出,并提供可以直接放入你项目中的完整提示词模板。
自定义命令是 .claude/commands/ 目录下的一个 Markdown 文件,文件名即为命令名。
文件内容是运行该命令时发送给 Claude 的提示词。你可以使用 $ARGUMENTS 作为占位符,代表命令名后输入的任何内容。例如,运行 /dissect src/auth/session.ts 会将 $ARGUMENTS 替换为 src/auth/session.ts。
你还可以使用 ! 语法通过 Shell 命令注入动态上下文:
Claude 会在处理提示词之抢跑这些 Shell 命令,从而确保上下文始终是最新的。
最后,文件顶部可选的 YAML 前置元数据(frontmatter)允许你预先批准工具(这样 Claude 就不会在每次 git 调用时询问权限)、设置模型覆盖或添加描述。
这就是整个系统:一个 Markdown 文件、一个可选的 YAML 头部,以及用于动态输入的 $ARGUMENTS。
当你克隆一个项目(或在几周后重新访问)时,第一件事就是确保本地设置确实可用。它可能存在运行版本错误、缺少环境变量或未应用的迁移。
此命令可以一次性验证整个本地设置。

该命令一次性捕获了五类问题,包括 Python 版本不匹配、缺少虚拟环境、缺少三个包(ruff, structlog, pytest-cov)、环境变量缺失以及未应用的 Alembic 迁移。每个发现都包含了修复它的确切命令。
环境设置好后,你需要上下文:你在哪个分支?之前在做什么?
这在运行 /clear(你应该定期运行以避免上下文窗口退化)之后尤为重要。此命令读取未提交的更改、最近的提交和任何待办事项(TODO),以一举重建你的工作状态。

在零上下文的冷启动下,该命令识别了项目类型、当前分支目的、暂存工作的确切状态,以及提交前需要解决的三个特定问题。
现在你有了上下文并进行了一些更新,下一步是检查即将提交的代码是否整洁。
这是你在每次提交抢跑的命令。它扫描暂存的更改,查找不应发布的内容,如遗留的调试语句、TODO 标记、注释掉的代码块、硬编码的密钥、跳过的测试和调试标志。

它在暂存文件中发现了四个阻碍因素,并标记了两个未暂存的问题。
前面的预检命令捕获了明显的问题。对于特定文件的更深入审查,/dissect 提供了一个结构化分析,专注于真正导致生产事故的因素,如错误处理漏洞、竞争条件、缺失的边缘情况和静默失败。

审查从六个维度组织发现,重点捕获了标准 Linter 会完全忽略的问题,如损坏的 API 合约或错误的响应状态码。
AI 生成测试的一个大问题是它们往往不符合项目中现有的测试风格。
此命令先读取现有的测试,然后生成看起来像是由团队成员编写的新测试。它会匹配现有的断言库、命名约定和设置模式。

它为日志服务生成了 19 个测试,全部在第一次运行时通过,并且完美匹配了项目的 conftest.py 配置和依赖注入模式。
在审查和测试代码库时,你会遇到逻辑密集且实现背后的推理未记录的函数。
此命令生成行内文档,其特定规则是解释“为什么(why)”,而不是“是什么(what)”,因为代码已经展示了它在做什么。

该命令记录了两个函数,解释了为什么选择特定的实现方式,并标记了文件中最大的正确性风险。
如果 /dissect 标记了结构性问题,这就是修复它们的命令。
使用 AI 进行重构是有风险的,因为 Claude 倾向于“改进”你没要求它动的地方。此命令有一个明确的约束:公共 API 不得更改。它只专注于内部结构。

它将一个 45 行的单体处理程序拆分为一系列私有助手函数,同时保持公共 API 完全不变,并通过了所有现有测试。
代码经过审查、测试、记录和重构后,下一步是开启 PR。
此命令先运行测试套件,然后根据实际的提交和差异(diff)生成 PR 描述。它涵盖了变更内容、变更原因、验证方法以及潜在风险。

它在生成 PR 描述抢跑了完整的测试套件,并标记了任何阻碍提交的调试遗留物。
为了支持新功能,你通常需要更改数据库架构。
此命令生成包含 up 和 down 方法的迁移文件,以及安全检查清单。它还会检查现有迁移以推断 ORM 和命名模式。

它读取了现有的 Alembic 约定和应用代码,以理解表实际需要的列和索引。
最后一个命令用于退后一步观察整个项目的健康状况。
此命令扫描整个代码库中的常见债务模式,并输出一个你可以直接转化为工单的优先级列表:代码复杂度、依赖陈旧、测试覆盖率缺口和架构异味。

它在代码库中发现了 20 个问题,每个问题都有严重级别、文件位置、描述和估计修复时间。
功能开发完成,迁移已起草,现在你需要发布说明。
此命令读取最近的提交,检查每个差异以理解实际更改,并生成一份可供发布的、人类可读的变更日志。

它将提交分为“新增”、“修复”和“基础设施”类别,并描述用户侧的影响,而不仅仅是代码更改。
设置你的第一个命令只需三步:
mkdir -p .claude/commandsecho -e "Review the staged changes and suggest improvements.\n\n!git diff --cached" > .claude/commands/review.md/review对于你想在所有项目中使用的命令,请将它们放在 ~/.claude/commands/ 中。
注意:Anthropic 后来引入了 .claude/skills/ 作为新命令的推荐目录。Skills 支持更多功能,如捆绑支持文件、自动调用和子代理执行。本文使用的 .claude/commands/ 方法仍然有效,且是更简单的入门方式。
- 原文链接: x.com/_avichawla/status/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!