拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Claude Code Slash Commands 完全指南:从内置命令到自定义工作流

用过一段时间 Claude Code 的人都会有同一种感觉明明每天都在做差不多的事却要反复把同样的话敲进对话框里。清上下文敲一段换模型敲一段开子代理又敲一段等命令一长漏个参数就全白费。我自己是在被这种重复动作烦了大概两周之后才认真把 Slash Commands 从头到尾学了一遍结果就是——之前很多觉得“Claude Code 也就那样”的抱怨其实根本不是产品不行是我压根没学会用自己的工具。这篇文章是 Claude Code 学习系列的第 8 章专门讲 Slash Commands。我会从运行机制讲起把内置命令里哪些值得天天用、哪些有坑说清楚再给你一套可以直接抄的自定义命令模板最后把权限免确认、安装报错、编辑器联动这些热搜里天天有人问的工程问题一起收尾。适合已经装好 Claude Code、但还没把交互效率用起来的人。1. 运行机制Slash Commands 在 Claude Code 里到底是什么角色1.1 一个命令实际上是“提示词模板 参数插槽 工具白名单”很多人的误区是把 Slash Commands 理解成“快捷短语”——敲个/review等于把一段固定的话塞给模型。但实际它干的事情比这多得多。一条命令背后是一整套指令包里面至少包含四层东西你要模型执行的指令文本、允许用户追加的参数、允许命令调用的工具白名单、以及可选的模型指定。这么设计的原因很直接。Claude Code 里的操作不只是一种“对话”还涉及读文件、跑测试、改代码、执行命令。如果任何一条 slash command 都放开全量工具权限那一条命令就可能误伤整个项目。把工具权限收敛到命令级别等于给每个常用动作套了一层保险。我举个真实例子。我写过一条/release命令用来打版本号、更新 CHANGELOG、跑测试、提交推送。这条命令的allowed-tools里只放了Read、Edit、Bash模型能做的事被限制在“读取必要文件、改这少数几个文件、执行指定的 git 和 npm 命令”上。这样即使某次参数传得不对它也不会顺手把项目里别的目录改了。这种设计其实是把“权限”这个原本很重的话题拆散到了每一条命令里面。这也是为什么我建议不要只把 Slash Commands 当快捷输入它是你给 Claude Code 定义“操作边界”的手段。1.2 命令执行时哪些上下文会被送进模型理解了命令是什么接下来要搞清楚命令跑起来时模型到底看到了什么。你在终端里敲下/review回车的那一瞬间Claude Code 会把下面这些东西拼装起来一起发给模型当前的会话历史如果是新开会话至少包括系统提示词当前项目的目录树它会自己判断哪些目录值得展示你在命令后面追加的参数对应文件正文里的$ARGUMENTS或$1、$2命令文件正文里的全部文字命令文件 frontmatter 里声明的模型、工具白名单等信息这里最容易被忽略的是“会话历史”。也就是说/clear之前你聊过的内容模型在跑 slash command 时依然记得。这是个好消息也是坏消息好处是/review能结合你刚才改了什么来做评审坏处是如果上下文已经乱了跑出来的结果也是乱的。所以我的习惯是代码评审、重构这类命令前如果感觉聊偏了先/clear再跑命令。反正命令本身已经把该给的背景信息写清楚了不依赖之前聊了什么反而更稳定。1.3 Slash Commands 与子代理、CLI 的关系第三条要理清的是Slash Commands 并不是只能在主对话里用。新版 Claude Code 里子代理subagent也能加载命令文件而且非交互模式claude -p同样可以带命令参数跑。这给了我一个很舒服的用法把复杂的脏活封装成命令交给子代理去执行。举个例子我在.claude/commands/里写了一条bump-version.md然后在团队里需要统一做版本更新时直接开一个 task 类型的子代理让它调用这条命令去处理几个子项目。子代理的执行过程和主对话是隔离的但命令文件是共享的这样既保证了行为一致性又不会污染主会话。CLI 这边就更实用。我经常在 PyCharm 的终端里跑一句claude -p /review --files src/components/Button.tsx --permission-mode acceptEdits本质上是用非交互模式触发 slash command结果直接print到终端不需要开完整的交互界面。后面第 4 章我会详细说编辑器联动方案这里先把机制放在前面Slash Commands 可以作为命令行的子命令被外部工具调用这是它生命周期很强的原因。2. 内置命令拆解哪些值得天天用哪些有坑Claude Code 内置的 slash command 数量不少但真正高频的就那么十来个。我按用途分成四组把每个命令的实际体验、适用场景和坑一次说清。2.1 会话与上下文管理类这一组解决的是“对话越聊越脏”的问题。/clear清空当前会话但不会删除项目记忆。它的真正价值不是“重置”而是“换一个干净的起点”。我实测下来上下文一旦超过一定长度模型响应速度会肉眼可见变慢思考质量也下降。每隔一段时间主动/clear比等卡顿再清要舒服得多。/compact压缩当前会话把历史对话的关键信息浓缩成长文。它适合你不想丢失太多上下文、但会话又太长的时候。注意压缩是有损的如果之前聊了特别复杂的架构决策压缩后模型可能丢掉细节。关键决策还是应该写进项目文档或自定义命令里别指望/compact帮你在脑内留档。/init初始化或检查项目配置主要用来生成或更新 CLAUDE.md。第一次进入项目时跑一次Claude Code 会读取项目结构生成项目级说明文件之后每次对话模型都会参考它。我新建项目的固定动作就是先跑/init再补充项目特有关键约定到 CLAUDE.md 里。2.2 代码工程与审查类/review让模型对当前改动做代码评审。这是我认为内置命令里最被低估的一个。默认它会先读 git diff然后按照代码规范、潜在 bug、安全性等维度输出评审意见。坑在于如果你的项目没有 CLAUDE.md也没有在命令参数里指定评审范围/review可能会把大量不相关的文件也拉进来评审结果会变得很泛。我建议这样用/review --files src/features/payment,src/shared --focus 并发与幂等--files限定范围--focus让评审目标更明确。/cost查看当前会话累计消耗了多少 token 和费用。我接第三方 API 之后几乎每天都会用主要是防止某个长任务悄悄烧掉太多额度。它不是用来统计的是用来提醒你“该收手了”。/memory查看和编辑长期记忆。Claude Code 会把用户偏好、技术栈选择等信息写到记忆文件里。我建议定期清理因为记忆太多也可能让模型过度依赖旧信息忽略当前项目的实际情况。2.3 配置与运行类/model切换模型。这是接入第三方模型之后最常用的命令之一。默认你可能在用 Claude 官方模型但如果你想在同一会话里切到 DeepSeek或者切回官方模型直接输入/model选择即可。/config打开配置文件。Claude Code 的配置项散落在多个文件里用/config可以快速查看和编辑全局或项目的配置。遇到权限设置、输出格式问题先跑这个。/permissions管理权限模式。这就是热搜里“不用一直点确认”的正解后面第 4 章专门展开。2.4 子代理与扩展类/agents查看和管理子代理。新版 Claude Code 支持创建两种类型的子代理一种是 task 类型执行完任务就结束适合“帮我查一下这个依赖的版本”之类的一次性工作另一种是 process 类型启动后会持续存在可以跨多个请求复用状态适合“持续监控日志并定期汇报”这类长时任务。我第一次用/agents时有点懵因为它并不是直接输个名字就完事而是会打开一个子代理管理视图。在里面可以新建 agent、编辑 agent 文件、选择类型。等你创建完成后后续可以用函数名的方式在对话里调用它也可以让它去执行 slash command。/mcp管理 MCP 服务器列表。如果项目接了外部工具数据库、浏览器、API 服务通过 MCP 接入就在这里查看连接状态。坑其实不少MCP 服务器地址不可用、鉴权过期都会在运行 slash command 时静默失败。我第一次遇到时还以为是命令写错了后来才发现是某个 MCP 工具抛错导致整条命令中断。2.5 内置命令避坑清单我把自己踩过和见过的坑整理成一个表方便你直接对照命令常见坑建议/compact压缩后丢失关键决策细节复杂决策提前写入文档/review评审范围过大、输出泛化用--files和--focus限定/agentstask 和 process 类型选错一次任务选 task常驻状态选 process/mcp工具抛错导致命令中断先查看 MCP 状态再跑命令/model切换后上下文计量口径变化切换后先跑一次短任务验证3. 自定义 Slash Command从复制粘贴到变成自己的工具箱内置命令是“标准答案”但真正让 Claude Code 值回票价的是自定义命令。这一章我给出完整的自定义命令写法以及两个可以直接改来用的例子。3.1 存放位置与文件格式自定义命令本质上是 Markdown 文件放对位置就能被加载。有两类位置用户级~/.claude/commands/对所有项目生效适合放个人习惯类命令提交信息模板、代码风格说明。项目级.claude/commands/只对当前项目生效适合放业务相关命令本项目构建、测试、发布流程。命令名就是文件名去掉.md后的部分。比如~/.claude/commands/commit.md对应/commit。如果你放到了子目录里比如~/.claude/commands/git/commit.md调用方式会变成/git:commit可以用这种方式给命令分组。项目级命令会覆盖全局命令这个优先级要记住排查“为什么命令行为不对”时先看是不是项目里重名了。3.2 Frontmatter 字段和参数插槽命令文件的开头是一个 YAML frontmatter支持几个关键字段--- description: 简短描述输入 / 时展示 argument-hint: 提示用户输入什么参数 参数名 allowed-tools: [Read, Edit, Bash] model: 可以指定使用的模型 ---正文部分就是指令内容模型会严格按照这些文字执行。参数传递有两种方式$ARGUMENTS把用户输入的所有内容原样作为一大段文本插入$1、$2、$3分别对应按空格分隔的第 1、2、3 个参数这里我强烈建议需要用户输入自由描述时用$ARGUMENTS需要结构化参数时用$1$2。理解两者差异是命令能不能写得灵活的关键。allowed-tools也值得多说两句。它决定了这条命令能调用哪些工具。工具名包括Read、Edit、Write、Bash、Glob、Grep、WebSearch等。原则是够用就好因为工具开得越多模型在意外场景里乱来的空间就越大。3.3 实战例子Vue3 组件生成命令以最近热搜里很多人问的 Vue3 开发场景为例我写一条生成 Vue3 组件的命令。把下面这个文件保存为.claude/commands/vue3-component.md--- description: 生成一个 Vue3 组件及其配套测试文件 argument-hint: 组件名 [组件描述] allowed-tools: [Read, Edit, Write, Glob, Grep, Bash] --- 请帮我创建一个 Vue3 组件要求如下 组件名$1 需求描述$2 或 $ARGUMENTS 步骤要求 1. 先查看项目现有的组件目录结构和组合式 API 使用习惯参考 CLAUDE.md 中的代码规范 2. 组件使用 script setup 语法TypeScript 类型要完整 3. 如果命令中有测试两个字同时生成对应的 Vitest 测试文件 4. 生成后运行项目自带的 lint 命令检查语法和格式问题 5. 不要修改与本次组件无关的文件你会注意到我没有把组件“长什么样”写死而是强调“先查看项目现有习惯”。这是因为不同项目的组件写法差异很大如果直接在命令里写死模板生成结果大概率不符合项目规范。命令的任务应该是引导模型理解上下文而不是替代模型思考。实际使用时/vue3-component UserCard 展示用户头像、昵称和关注按钮模型会先读项目结构再按命令里的步骤生成组件和测试最后跑 lint。3.4 实战例子切换 DeepSeek 模型的辅助命令热搜里“claudecode 接入 deepseek”是这个系列绕不开的话题。在这里先说明思路Claude Code 允许通过环境变量把 API 地址指向 OpenAI 兼容或 Anthropic 兼容的第三方服务。以 DeepSeek 为例你通常会在启动或配置文件里设置export ANTHROPIC_BASE_URLhttps://api.deepseek.com/anthropic export ANTHROPIC_AUTH_TOKENsk-你的Key设置完成后在会话里用/model输入第三方模型的名称比如deepseek-chat就能切换。注意不同版本的字段可能变化接不通时先用一条最简单的 prompt 测试再排查环境变量是否生效。为了不每次手打环境变量我习惯写一条全局命令保存为~/.claude/commands/use-deepseek.md--- description: 切换到 DeepSeek 模型 argument-hint: [模型名] allowed-tools: [Read, Bash] --- 请帮我执行以下操作来切换到 DeepSeek 1. 检查当前会话中 ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN 环境变量是否已设置 2. 如果没有设置提示我使用 export 命令设置 3. 设置完成后提醒我在交互界面中输入 /model 并填入模型名$1 4. 模型名不传时默认为 deepseek-chat这条命令的价值不在自动化而在于把“改环境变量 切模型”这套容易遗漏的流程固定下来。尤其是隔了几天没用再回来接第三方 API你很容易忘记到底要配几个变量、配在哪。命令把这件事写清楚就是再给自己留一张操作卡。3.5 调试自定义命令的技巧命令写了不一定一次就对。我调试命令的套路是先写个极简版本只保留一条指令比如“把参数原样输出”然后运行命令确认$1、$ARGUMENTS是否按预期传递。之后再逐步加内容和工具限制。还有一个排查思路命令不生效时先检查文件路径对不对、文件名是不是小写、frontmatter 的 YAML 有没有语法错误。YAML 里如果 description 写太长或者漏了引号整个命令可能直接在列表里消失。这种错误不会报红你只会发现“命令不见了”特别容易让人怀疑人生。4. 落地到真实工作流权限、编辑器联动和安装排查一并说清4.1 先说“不用一直点确认”这件事“claudecode 如何不用一直点确认”这类问题核心是权限模式而 Slash Commands 在这里能起到关键作用。Claude Code 默认每次执行文件编辑、Bash 命令都要你确认多问几次确实烦。启动时加参数可以改模式claude --permission-mode acceptEditsacceptEdits会自动接受对文件的编辑但 Bash 等危险操作仍然会问。如果你在跑自定义命令时命令文件里声明了allowed-tools只包含Read和Edit那么在这种情况下编辑文件基本就不会弹确认了。如果你真的需要全自动还可以用--dangerously-skip-permissions但我强烈不建议日常使用。这个参数会跳过所有权限确认包括删除文件、执行任意命令。有一次我为了省事用它跑批处理脚本结果模型理解错了路径差点把临时目录当成构建目录清掉。从那以后我的红线就是允许自动编辑但绝不全局跳过权限。用自定义命令配合这套权限还有一个额外的好处你可以在命令文件里写清楚“执行结束后输出发生了什么”这样即使允许自动编辑结果也可审计。比如生成组件的命令会自动改文件但命令同时要求模型在结束时列出所有改动过的文件方便我快速扫一眼。4.2 安装报错和 exe 失效问题排查热搜里有一批安装类问题比如“claudecode 安装提示 iex 所在位置 行:1”还有“每次使用完 .exe 就失效”。这里我统一解释一下因为很多人卡在这一步就放弃了。PowerShell 那种iex安装脚本报错通常是执行策略或者脚本未完整下载导致的。第一步先看 PowerShell 的执行策略Get-ExecutionPolicy如果返回Restricted先改成允许当前用户执行远程签名脚本Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser然后再重新执行安装命令。安装后记得新开一个终端窗口让 PATH 环境变量重新加载。如果还是报“所在位置 行:1”大概率是下载过程出问题脚本内容没写完整。把安装命令的输出滚动条往上翻看看是不是有网络超时或字符集相关的错误提示。“每次使用完 .exe 就失效”这个现象在 Windows 上其实很常见。原因一般是安装目录没有被持久化到用户 PATH或者启动器把 claude 安装到了临时目录。排查时先执行where.exe claude如果输出为空说明 PATH 里根本没有。解决办法是把claude.exe所在的目录手动加入系统 PATH或者直接用 npm 全局安装npm install -g anthropic-ai/claude-code我用这种方式之后基本没再遇到重启终端就“命令消失”的情况。4.3 与 PyCharm / VS Code 的联动“pycharm 关联 claudecode”这个热搜很多人是想在 IDE 里一键触发 Claude Code。我的做法是给 PyCharm 配置一个 External Tool让它直接调用claude -p来执行 slash command。具体来说在 PyCharm 的设置里找到 External Tools新增一条Program程序claudeArguments参数-p /review --files $FilePath$ --permission-mode acceptEditsWorking directory工作目录$ProjectFileDir$这样你就可以在代码文件上右键一键触发/review命令只审查当前文件。VS Code 上逻辑类似用自定义 task 把同样的命令注册进去就行。核心思路其实只有一个把 slash command 变成 IDE 里的一个可执行动作。真正干活的是 Claude CodeIDE 只是负责传参。这里我要提醒一个容易踩的坑在 External Tool 里传参时路径参数最好用 IDE 提供的$FilePath$、$ProjectFileDir$这类现成变量不要自己拼绝对路径。否则项目路径一换配置就失效了。4.4 和 Codex 这类 CLI 工具的分工热搜词里有“codex 和 claudecode”我顺便聊聊分工。我目前在终端里其实同时装着两个 CLI 工具但并不会让它们做同一件事。Codex 在我这里主要处理一小部分与代码索引和模型行为相关的实验型任务而 Claude Code 承担日常的代码生成、重构、评审和自动化流程。两者之间的协作方式我也是通过 slash command 来衔接的。比如我写了一条/to-codex命令作用是把当前项目的变更摘要、待办问题整理成一段 markdown方便我复制给 Codex 继续处理。工具之间能配合靠的不是把两边功能搞重复而是让每一边都做好自己擅长的事。4.5 把命令升级为团队资产如果你和团队共用同一个项目仓库.claude/commands/里的命令文件是能直接提交进 Git 的。这意味着团队里任何一个人拉下代码就能用同一套/review、/release、/test命令。我实践下来觉得这一条被大多数团队低估了。它不光是提升效率更是一种“可版本化的操作流程”。新人入职后不用再靠口头传一遍“项目怎么跑、怎么发布”命令文件本身就是最好的文档。但团队用命令也有要注意的地方不要把私有信息写进命令文件比如个人 API Key、内部系统地址一提交就谁都看得到。建议敏感信息一律用环境变量传递命令里只写${VAR_NAME}的占位符。5. 反模式与我的使用红线命令用顺了以后很容易写出一堆自认为很厉害、实际上越用越乱的东西。这一章是我给自己定的五条红线也算是踩坑总结。5.1 最常见的五个反模式第一命令越写越长。有些人恨不得把整个项目的开发规范都塞进一条命令里结果模型跑起来重点全丢输出一堆正确但没用的废话。命令正文应该控制在“能说清楚目标 关键约束”的量级其他细节让模型自己去读 CLAUDE.md。第二工具权限开太宽。一条命令里放着Bash、Edit、Write、WebSearch等于把一把万能钥匙给模型。按理说allowed-tools越窄越安全但很多人因为怕命令失败就把能开的全开。我的原则是命令要跑什么动作就只给能支撑该动作的工具。第三命令不知道自己的上下文。/review里不限定文件范围/test里不告诉模型测试框架是什么全靠模型瞎猜。命令要明确告诉模型“项目上下文在哪里看”——项目级命令可以直接读 CLAUDE.md全局命令要学会先用Glob、Grep探索项目结构。第四敏感信息写进命令。这是团队场景的红线。任何账号、密码、内网地址都不应该出现在.claude/commands/里。命令文件一旦提交风险不可控。第五命令之间职责重叠。比如你同时有/commit、/git-commit、/generate-commit三条功能几乎一样的命令用一段时间后自己都记不清该敲哪条。命令是给人用的命名不统一就是在给自己制造记忆负担。5.2 我的命令体系分层经过几轮清理我现在的命令目录是这样组织的~/.claude/commands/ ├── commit.md # 通用提交信息生成 ├── explain.md # 解释选中代码 ├── review.md # 代码评审 ├── use-deepseek.md # 第三方模型切换 └── git/ ├── squash.md # 合并提交 └── blame.md # 追溯变更原因 项目名/.claude/commands/ ├── vue3-component.md # 本项目组件生成 ├── build-check.md # 本项目构建检查 └── release.md # 项目发布流程分层原则很简单通用的放全局业务相关的放项目一次性的用完就删。不要指望一个命令解决所有问题命令越短小、目标越单一越容易被记住和被正确使用。5.3 命令要像代码一样维护我把命令文件当作代码来维护用 Git 管理、定期 review、按使用频率清理。每次觉得“这条命令好像没用过”我会去看它的使用次数基本没被调用的就删掉不心疼。命令是给真实工作流服务的不是收藏品。另外一个很实用的习惯是每当我在交互式对话里连续两次手动输入同一段长指令时我就会停下来把这段指令提炼成一条 slash command。这就像你发现自己反复做同一个操作时就应该考虑封装成一个函数——Slash Commands 就是 Claude Code 里的“函数”。还有一个我最近才开始做的维护动作给命令文件写“测试”。当然不是自动化测试而是准备一组典型输入每次改完命令后用claude -p跑一遍确认输出还符合预期。这样比在交互界面里反复试快得多。这些东西用久了你会发现一个挺有意思的转变最开始你是在跟 Claude Code “对话”后来你开始给它“定义语言”而自定义 Slash Commands就是定义语言最直接的方式。今天这章其实只是把语法和机制讲透了真正属于你的命令体系还是得靠自己在真实项目里一遍遍打磨出来。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门