2484 字
约 8 分钟
22
S24-X07 · 斜杠命令与自定义命令:把重复指令固化
每天开场那几句几乎一字不差:"先看 git log 再动手""改完跑一下单测""顺手把 CHANGELOG 补上"。说一次是沟通,说一百次是浪费,而且每次措辞不同,产出也就不同。
斜杠命令解决的就是这件事:把一段固定流程写成一个文件,之后输入 / 加名字就够。
1. 内置命令:先认清手上有什么
| 命令 | 作用 | 什么时候用 |
|---|---|---|
/help |
列出可用命令与用法 | 记不清命令名时先看它 |
/clear |
清空当前上下文 | 换话题,旧上下文完全不需要了 |
/compact |
压缩上下文 | 同一话题继续,但 token 快满了 |
/model |
切换模型 | 简单任务换小模型,复杂推理换大模型 |
/config |
打开配置界面 | 改主题、模型等常规项 |
/permissions |
查看与管理权限规则 | 确认某条 deny/allow 是否生效 |
/memory |
查看与编辑记忆文件 | 确认这次会话加载了哪些 CLAUDE.md |
/init |
生成初始 CLAUDE.md |
新仓库第一次接入 |
/agents |
管理子代理 | 查看有哪些 subagent 可委派 |
/mcp |
管理 MCP server | 确认外部工具是否连上 |
/status |
查看会话状态 | 核对当前模型、账号、工作目录 |
/resume |
恢复历史会话 | 接着昨天没做完的活 |
/exit、/quit |
退出 | —— |
内置命令集合随版本变化,以 /help 的实际输出为准,别看旧文章背。/clear 与 /compact 的差别值得单独记:前者是"忘掉",后者是"揉碎再放进上下文"——换话题用 clear,同一个话题嫌长用 compact。
2. 自定义命令放在哪
| 位置 | 作用域 | 进 git | 适合 |
|---|---|---|---|
.claude/commands/<name>.md |
当前项目 | 是 | 团队共用的流程 |
~/.claude/commands/<name>.md |
所有项目 | 否 | 个人习惯、跨仓库复用 |
.claude/commands/<dir>/<name>.md |
项目 | 是 | 带命名空间,如 /review:pr |
~/.claude/commands/<dir>/<name>.md |
所有项目 | 否 | 个人的分组命令 |
mkdir -p .claude/commands/review .claude/commands/release
ls .claude/commands/
文件名就是命令名,扩展名必须是 .md。目录名变成命名空间前缀——review/pr.md 对应 /review:pr,这是避免命令名爆炸最省事的办法。
3. 文件格式:frontmatter + 模板
命令文件是"YAML 头 + 提示词模板",模板就是你要说的话,只不过写一次:
---
description: 按团队规范审一遍当前改动
argument-hint: <branch-or-path>
allowed-tools: Read, Grep, Bash(git diff:*)
model: MODEL_ID
---
审查范围:$ARGUMENTS
步骤:
1. `git diff --stat` 看改动面,超过 400 行的文件单独列出来
2. 逐文件检查:命名、错误处理、日志、边界条件
3. 输出格式:按严重程度分组的清单,每条给"文件:行 + 问题 + 改法"
4. 最后一行写"结论:可合并 / 需修改 / 需讨论"
| frontmatter 字段 | 作用 | 不写的后果 |
|---|---|---|
description |
在命令列表里显示用途 | 只剩文件名,别人不敢用 |
argument-hint |
提示参数怎么写 | 用户不知道要不要带参数 |
allowed-tools |
限定这次可用的工具 | 沿用当前会话权限 |
model |
指定模型 | 用会话默认模型 |
| 其他字段 | 如禁用模型自动调用一类 | 按当前版本核对字段名 |
字段名与取值各版本有增删,配之前按当前版本核对,写错的字段会被忽略而不是报错。
4. 参数占位:把命令变成"可调用函数"
| 写法 | 含义 | 例子 |
|---|---|---|
$ARGUMENTS |
全部参数原文 | /review 123 → 123 |
$1 $2 $3 |
位置参数 | /fix 123 fast → 123、fast |
@path/to/file |
引用文件,内容进上下文 | @docs/api-style.md |
!`cmd` |
执行命令,把输出注入 | !`git diff --stat` |
---
description: 给指定 PR 做一次自审
argument-hint: <pr-number> [focus-area]
---
PR 号:$1;关注点(可选):$2
先跑:!`git log --oneline -15`
再看:@docs/review-checklist.md
如果 $2 为空,按"正确性 → 可维护性 → 性能"顺序全覆盖。
位置参数的最大价值是让模板不必依赖猜。写清"$2 为空时怎么办",比让模型自行判断稳得多。
5. 命令里引用文件与跑命令的注意点
@ 与 ! 都很有用,也都有代价:
参考规范:@docs/api-style.md
当前改动:!`git diff --stat`
@会把文件读进上下文。引用一份 2000 行的规范,等于开局就烧掉大半预算。只引用真正需要的段落,或者把规范拆成小文件。!在本地真实执行。命令要快、要幂等、不能有副作用——git status没问题,npm install会让每次调用都等一分钟。!的输出会进上下文,git log不带参数在大型仓库里能刷出几千行,用-n限制条数。
这两条合起来是一句:命令模板的每个字符都在花预算,引用等于加倍花。
6. 命令、skill、subagent 怎么分工
| 维度 | 斜杠命令 | skill | subagent |
|---|---|---|---|
| 触发方式 | 用户显式输入 /名字 |
按描述匹配,或显式调用 | 主流程委派 |
| 上下文 | 与主会话共用 | 加载进主会话 | 独立上下文 |
| 适合 | 固定流程模板 | 领域知识 + 方法 | 独立子任务、脏活、防止污染 |
| 典型例子 | /review、/release:changelog |
某类系统的排查方法论 | "把这个模块的测试补齐" |
| 分发方式 | 一个 .md 文件 |
一个目录 + SKILL.md |
一个 .md 文件 |
| 复用粒度 | 单次流程 | 跨任务的知识 | 跨任务的工作单元 |
判断方法很直接:
- 你每次都要说同一段话 → 命令;
- 你希望模型在合适时机自己想起某套方法 → skill;
- 这件事会读一大堆文件、产出很长,不想污染主上下文 → subagent。
三者可以组合:一个命令里写"委派 subagent 去做 X",模板负责流程,subagent 负责隔离。
7. 团队共享:按任务域分目录
.claude/commands/
├── review/
│ ├── pr.md
│ └── security.md
├── release/
│ ├── changelog.md
│ └── tag.md
├── db/
│ └── migration.md
└── test/
└── coverage.md
命名三条习惯:
- 动词 + 对象:
review:pr比pr-thing清楚,release:changelog比changelog2清楚; - 小写短横线,不用空格、中文、大小写混排——命令名是要手打的;
- 一个命令只做一件事,需要串联就在命令里写"下一步调用
/release:tag"。
团队落地时,命令文件和代码一样要 review:description 写清楚、模板里不写死个人路径、不引用只有你有权访问的文件。
8. 排错:六个高频坑
| 现象 | 原因 | 处理 |
|---|---|---|
/ 列表里没有新命令 |
放错目录、扩展名不是 .md、frontmatter 语法错 |
对照第 2 节的位置表;--- 必须顶格闭合 |
| 输入命令后提示找不到 | 与内置命令同名被遮蔽,或命名空间写错 | 换名;目录名与输入的前缀要一致 |
| 模板里的路径找不到 | 用了相对路径,基准是 cwd 不是仓库根 |
用仓库相对路径,必要时在模板里先 pwd 确认 |
| 命令跑完质量很差 | 模板太长,关键步骤被稀释 | 拆成两三条命令,每条只做一件事 |
| 参数没生效 | 用了 $ARGUMENTS 但用户没传;或 $1 与 $2 顺序写反 |
加 argument-hint,并在模板里写"为空时怎么办" |
| frontmatter 报错/被忽略 | YAML 里值含冒号未加引号,如 description: 审查: PR |
加引号;改完在 / 列表里确认出现 |
第 4 条容易被低估:命令不是越长越强。一份 80 行的模板,模型很可能只遵守了前 10 行。命令的最佳长度是"刚好写完流程,没有背景介绍"。
9. 边界:什么时候别写命令
| 需求 | 更合适的做法 | 理由 |
|---|---|---|
| 一次性任务 | 直接在对话里说 | 写成文件还要维护 |
| 需要独立上下文的探索 | subagent | 命令与主上下文共用,会互相污染 |
| 领域知识与方法论 | skill | 需要"按需加载"而不是"每次全量" |
| 必须每次都执行的检查 | CI / hook | 命令要靠人记得输入 |
| 长文档参考 | 引用具体小节 | 整篇塞进模板等于浪费预算 |
| 需要参数的复杂编排 | 命令 + subagent 组合 | 单靠模板难以控制分支 |
10. 自测
/clear与/compact分别在什么场景下用?review/pr.md对应哪条命令,命名空间是怎么形成的?$ARGUMENTS与$1的差别是什么,什么情况下必须用后者?- 模板里
@docs/x.md与!`cat docs/x.md`有什么实质区别? - 一段流程该做成命令、skill 还是 subagent,判断依据有哪三条?
- 命令模板写到 80 行后效果反而变差,原因是什么,怎么改?
S24-X07 · 斜杠命令与自定义命令:把重复指令固化
https://www.clxhxhhr.top/posts/5699/ 评论
0 条
还没有评论,先写一条吧。