自定义 Slash Command:把团队规范变成 /xxx
📍 Claude Code 进阶 4/6 · 上一篇:← MCP(外部服务连接器)

那个让洁柔团队 4 个人都满意的瞬间
Section titled “那个让洁柔团队 4 个人都满意的瞬间”某天下午,洁柔在 Slack 上看到队友 A 又发了一条:
“提交代码记得先跑
pytest tests/ && ruff check .,然后 commit message 用feat:或fix:开头,最后git push --no-verify跳过 pre-commit hook 别用,直接走 CI…”
队友 A 已经第 5 次发这同一段话了。每个新人都要被这一段轰炸一次。
洁柔说:“为什么每个人都要打这一大段?能不能让 Claude 直接知道我们的规范?”
我说:“能。把这一段写成一个项目级 slash command,推到 git,所有同事 clone 项目就有 /commit 这个命令——他们打一句 /commit 自动按你们规范走。”
3 小时后,他们项目里多了一个 .claude/skills/commit/SKILL.md,所有人都不用再背规范——/commit 出来即是公司方法论。
这一篇讲的就是:把团队规范打包成 /xxx 命令,通过 git 推给全员。
一个重要变化:自定义命令 = Skill
Section titled “一个重要变化:自定义命令 = Skill”2026 年 Anthropic 官方把”自定义 Slash Command”合并进 Skill 系统了。意思是:
- 你之前在 02-9 学的 Skill 写法 → 现在就是 slash command
.claude/commands/deploy.md跟.claude/skills/deploy/SKILL.md都创建/deploy,效果一样- 新写命令推荐用 Skill 形式(
.claude/skills/<name>/SKILL.md),因为支持更多功能(参数、动态上下文、子智能体执行等)

这一篇的重点跟 02-9 区别:
- 02-9 教你写个人级简单 Skill(写周报 / 改简历)
- 03-4(本篇) 教你写团队级 + 高级特性 Skill——参数 / 动态注入 / 跑在子智能体 / 按文件路径自动激活 / 通过 git 团队共享
3 种安装范围(scope):谁能用到这个命令
Section titled “3 种安装范围(scope):谁能用到这个命令”
| 范围 | 路径 | 谁能用 |
|---|---|---|
| 企业级(管理员下发) | managed settings 配置 | 整个组织所有人 |
| 个人级 | ~/.claude/skills/<name>/SKILL.md | 你所有项目 |
| 项目级(本篇重点) | 项目/.claude/skills/<name>/SKILL.md | 这个项目所有协作者 |
| 插件提供 | <插件>/skills/<name>/SKILL.md | 装了这个插件的人 |
优先级:企业 > 个人 > 项目(同名时高优先级覆盖低优先级)。
项目级的杀手锏:把 .claude/skills/ 整个目录推到 git——队友 clone 项目就自动获得整套命令。团队规范从口口相传变成 git 同步。
例子 1:团队 commit 命令
Section titled “例子 1:团队 commit 命令”新建文件 项目/.claude/skills/commit/SKILL.md:
---description: 按本项目规范提交代码——跑测试、写 commit message、推到远程disable-model-invocation: trueallowed-tools: Bash(pytest *) Bash(ruff *) Bash(git *)---
按团队规范提交代码 $ARGUMENTS:
1. 先跑测试:`pytest tests/ -v`,**失败就停,不要提交**2. 跑 lint:`ruff check .`,如果有错先修3. `git status` + `git diff --staged` 看一遍改了啥4. 写 commit message,**严格按 conventional commits 规范**: - `feat:` 新功能 - `fix:` bug 修复 - `refactor:` 重构(不改行为) - `docs:` 文档 - `test:` 测试 - 标题不超过 50 字5. `git commit -m "..."` + `git push`6. **永远不用 `--no-verify`** —— pre-commit hook 是为了保护你推到 git:
git add .claude/skills/commitgit commit -m "feat: add /commit skill for team"git push队友 pull → /commit 立刻能用。整个团队规范一次同步。
例子 2:参数化命令
Section titled “例子 2:参数化命令”
很多命令需要参数(比如 fix-issue 要传 issue 号)。Claude Code 提供几种参数引用方式:
| 写法 | 含义 |
|---|---|
$ARGUMENTS | 整段用户输入(空格分隔的原文) |
$0 或 $ARGUMENTS[0] | 第 1 个参数 |
$1 或 $ARGUMENTS[1] | 第 2 个参数 |
$N | 第 N+1 个参数 |
$自定义名 | 用 frontmatter arguments: 命名的参数 |
例子 1:全部参数当一坨用
---description: 按本项目规范修复一个 GitHub issue---
修复 issue $ARGUMENTS,流程:1. 读 issue 描述2. 写代码3. 加测试4. 提交 PR用:/fix-issue 123 优先紧急 → $ARGUMENTS = "123 优先紧急"
例子 2:按位置传
---description: 从一个框架迁移组件到另一个框架argument-hint: <组件名> <源框架> <目标框架>---
把 $0 组件从 $1 迁移到 $2,保留所有现有行为跟测试。用:/migrate-component SearchBar React Vue → $0=SearchBar / $1=React / $2=Vue
例子 3:命名参数(更清晰)
---description: 修一个 issue + 推到指定分支arguments: [issue, branch]---
修复 issue #$issue,推到 $branch 分支。用:/fix-and-push 123 fix/login → $issue=123 / $branch=fix/login
小窍门:
argument-hint: <issue 号> <分支>字段会在 Claude Code 的/菜单里显示提示,队友打到一半看得到该传什么。
例子 3:动态注入上下文(!command 语法)
Section titled “例子 3:动态注入上下文(!command 语法)”
最强大的特性——命令可以预先跑 shell 命令,把输出注入到 prompt 里,Claude 收到的就是「带数据的指令」。
写法:在 SKILL.md 里用 !`命令` 行内,或者 ```! 代码块。
例子:让 Claude 总结当前 git diff
---description: 总结当前未提交的改动,标出风险---
## 当前改动!`git diff HEAD`
## 任务用 2-3 句话总结上面的改动,然后列出你看到的风险(比如没加错误处理 / 硬编码值 / 缺测试)。如果 diff 为空,说没有未提交改动。怎么工作:
- 用户打
/summarize-changes - Claude Code 先跑
git diff HEAD—— 把输出替换到!git diff HEAD“ 的位置 - Claude 看到的 prompt 已经包含真实 diff —— 不需要它自己去查
这就是动态上下文注入——比让 Claude “自己去看”快很多 + 准很多。
更强的多行命令(用 ```! 块):
## 环境信息\`\`\`!node --versionnpm --versiongit status --short\`\`\`4 个高价值团队命令模板
Section titled “4 个高价值团队命令模板”
直接抄走改你团队用:
1️⃣ /deploy — 部署到生产
Section titled “1️⃣ /deploy — 部署到生产”---description: 部署当前分支到生产环境disable-model-invocation: trueallowed-tools: Bash(npm *) Bash(wrangler *) Bash(git *)---
部署当前代码到生产 $ARGUMENTS:
1. 跑全套测试 `npm test`,失败立刻停2. 跑生产构建 `npm run build`3. 部署 `npx wrangler pages deploy dist`4. 验证线上 URL 2005. git tag 标记本次发布版本6. 通知 Slack #releases 频道⚠️ 建议加 disable-model-invocation: true —— 不让 Claude 自己决定要不要部署,只在用户主动打 /deploy 时才跑。
2️⃣ /review-pr — 自动 review 当前 PR
Section titled “2️⃣ /review-pr — 自动 review 当前 PR”---description: 自动 review 当前分支的改动,找 bug + 风格问题context: forkagent: Exploreallowed-tools: Bash(gh *) Bash(git *)---
## PR 信息- diff: !`gh pr diff`- 评论: !`gh pr view --comments`- 文件清单: !`gh pr diff --name-only`
## 任务review 上面这个 PR,找:1. 🐛 潜在 bug2. 🎨 风格 / 命名问题3. ⚡ 性能问题4. 🧪 缺测试的地方
按严重程度排序输出。context: fork + agent: Explore —— 跑在隔离的子智能体里,不污染主对话。
3️⃣ /test-all — 跑全套测试
Section titled “3️⃣ /test-all — 跑全套测试”---description: 跑全套测试 + lint + 类型检查allowed-tools: Bash(npm *) Bash(pytest *) Bash(ruff *) Bash(mypy *)---
跑全套质量检查:
\`\`\`!npm run lint 2>&1 | tail -20\`\`\`
\`\`\`!pytest tests/ -v --tb=short 2>&1 | tail -40\`\`\`
\`\`\`!mypy . 2>&1 | tail -10\`\`\`
总结结果:- ✅ 全过 → 报告"OK"- ❌ 有失败 → 列出哪里失败 + 怎么修4️⃣ /standup — 写日报
Section titled “4️⃣ /standup — 写日报”---description: 生成今天的开发日报allowed-tools: Bash(git *)---
## 今天的提交!`git log --oneline --since="6am" --author="$(git config user.email)"`
## 今天的改动统计!`git log --since="6am" --author="$(git config user.email)" --stat | tail -30`
## 任务基于上面的提交记录,写一份日报(3-5 行),格式:- 完成的事(主要)- 进行中- 明天的计划
风格:克制、动词起头、不夸大。按文件路径自动激活(高级技巧)
Section titled “按文件路径自动激活(高级技巧)”paths frontmatter 字段让 skill 只在你工作于匹配的文件时自动激活:
---description: 写 Python 测试的规范paths: tests/**/*.py---
写 Python 测试要按本团队规范:- 用 pytest 不用 unittest- 测试函数名必须 `test_<被测>_<场景>_<预期>` 格式- 用 fixture 不用 setUp- mock 用 unittest.mock,不引入第三方- ...效果:当 Claude 在 tests/ 下改 .py 文件时,这个 skill 自动激活——团队规范”按上下文出现”。
3 个新手最容易踩的坑
Section titled “3 个新手最容易踩的坑”❌ 坑 1:命令越写越长
Section titled “❌ 坑 1:命令越写越长”新手把团队规范一股脑塞进一个 /dev-rules —— 800 行 markdown,每次激活都炸 context。
修正:一个 skill 一个明确动作。规范太长就拆:/commit / /test-all / /deploy / /review-pr —— 各管一摊,互不重叠。
❌ 坑 2:把敏感操作开放给 Claude 自动调用
Section titled “❌ 坑 2:把敏感操作开放给 Claude 自动调用”不加 disable-model-invocation: true 的 /deploy —— Claude 可能自己判断”代码看着 OK”就调用部署,误部署的事真发生过。
修正:所有带副作用的命令(部署 / 发邮件 / 删数据)强制加 disable-model-invocation: true。
❌ 坑 3:!command 命令吐出爆炸输出
Section titled “❌ 坑 3:!command 命令吐出爆炸输出”!`git log` —— 项目历史几千条 commit,直接把 context 吃爆。
修正:所有 !command 都加 | tail -N 或 | head -N 限制输出大小:
!`git log --oneline | head -20`怎么发给团队
Section titled “怎么发给团队”方式 1:推到项目 git(最常用)
Section titled “方式 1:推到项目 git(最常用)”git add .claude/skills/git commit -m "feat: add team skills"git push队友 pull → 立刻可用。
方式 2:打包成 Plugin 分享给社区
Section titled “方式 2:打包成 Plugin 分享给社区”Plugin 发布 —— 把 .claude/skills/ 打包成 plugin 推到 Anthropic Marketplace,任何团队都能 install。
方式 3:GitHub gist 单独分享
Section titled “方式 3:GitHub gist 单独分享”把单个 SKILL.md 发 gist —— 其他人 wget 一下放到自己目录就能用。
一份给团队装的”起步包”
Section titled “一份给团队装的”起步包””如果你今天就想让团队上手,这 5 个命令是性价比最高的:
| 命令 | 干啥 |
|---|---|
/commit | 按规范提交代码 |
/review-pr | 自动 review PR |
/test-all | 跑全套测试 + lint |
/deploy | 一键部署生产 |
/standup | 写每日日报 |
把这 5 个文件放进项目 .claude/skills/,推到 git,团队所有协作者 5 分钟内就能用上。
读完这一篇你应该会:
- 理解 自定义 Slash Command 现在就是 Skill(merged)
- 用 项目级 + git 同步 把规范推给全员
- 用 参数
$ARGUMENTS / $0 / $1 / $自定义名让命令灵活 - 用
!command动态注入上下文 让命令带数据 - 用
paths让 skill 按文件路径自动激活
接下来 03 区还有:
→ Subagents(子智能体):多个 Claude 并行干不同活(即将上线)
→ Git Worktree:多个 Claude 改同一个 repo 不打架(即将上线)
想第一时间收到,可以收藏 niuxue.org 主页。
你团队装的最实用的 slash command 是什么?发邮箱 [email protected],精选会进社区团队命令模板集。
评论
不记名、不需要注册——不要邮箱,不要手机号,不要任何身份信息,填个昵称就能留言。放心说。