从会用到玩得溜
到这里你已经会用 Claude Code 处理日常工作了。但只停在"对话 + Plan Mode + 手写 Prompt"的用法,很快会注意到一些动作每天都在重复——commit message 要手动要求、格式化要提醒、review 要自己起个专门会话、写前端代码时它用的 API 可能还停留在训练数据截止那天的版本。这一篇讲 Claude Code 提供的几样把重复动作沉淀下来的机制:Slash Commands、Hooks、Subagents、MCP,以及非交互模式。把这些工具加上,Claude Code 从"能用"变成"顺手"。
Slash Commands:把重复 Prompt 做成一键操作
你要是发现自己每天都在敲"帮我看一下 staged 改动写一个 commit message 然后 commit",那就该把它做成 /commit。项目根目录下新建 .claude/commands/commit.md,写清楚这个命令背后要做的事:
---
description: 根据当前 staged 改动生成 commit message 并提交
---
1. 跑 git status 和 git diff --staged 看改动
2. 分析改动性质(feat / fix / refactor / docs / chore)
3. 按 Conventional Commits 风格写中文 message
4. git commit -m "..."
5. git log -1 显示结果
禁止跑 git push。
下次会话里输入 /commit 就按这个流程跑一遍。放在项目里的命令只对这个项目生效,放在 ~/.claude/commands/ 的则是全局的,所有项目都能用——我个人习惯把 /commit、/review、/update-deps 这类通用动作放在全局目录,项目专属的放在项目里。
命令还可以带参数。比如 .claude/commands/fix-issue.md 里用 $ARGUMENTS 占位:
---
description: 修复一个 GitHub issue
argument-hint: <issue-number>
---
Issue 号:$ARGUMENTS
1. gh issue view $ARGUMENTS 读需求
2. 进 Plan Mode 规划修复方案
3. 实现 + 写测试
4. 开 PR,body 里写 Fixes #$ARGUMENTS
之后 /fix-issue 123 直接把整条流水线跑完。社区有不少现成的命令集合可以抄——awesome-claude-code 是最集中的一个,里面从代码 review 到文档更新到部署检查都有,直接复制到自己的 commands 目录就能用。
Hooks:让自动化在合适的时机自己发生
Slash Commands 解决的是"我想做的动作",Hooks 解决的是"我不用特意想、但希望每次都发生的动作"。它绑定在特定事件上——编辑文件后、工具调用前、用户发消息时、会话结束时等——每次事件触发就自动跑你配置的命令。
最典型的用途是格式化。与其每次提醒 Agent "改完记得 prettier 一下",不如让它每次编辑完 TS/TSX 文件自动格式化:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "pnpm prettier --write $CLAUDE_FILE_PATHS 2>/dev/null || true"
}
]
}
]
}
}
放在 .claude/settings.json 就生效了。同样思路可以给编辑 TS 挂 tsc --noEmit 做类型检查、给所有 Bash 命令挂日志、给会话结束挂桌面通知。
Hooks 里最有价值的事件其实是 PreToolUse——它在工具调用前触发,而且可以拦截。这就意味着你可以写一个守卫,把 git push --force 到 main 分支这类危险操作拦下来,无论 Agent 在什么情境下想执行都绕不过。这一条比在 CLAUDE.md 里写"不要 force push"可靠得多,因为那是靠 Agent 自律,Hook 是机械执行。
其他还常用的事件有 UserPromptSubmit(用户发消息时)、Stop(回合结束)、SessionStart 和 SessionEnd。社区已经积累了很多现成 Hook 模板,日常场景基本上复制粘贴就能用。
Subagents:让支线任务不污染主上下文
主会话的上下文是有限的也是宝贵的资源。每塞一个大文件、每扩一次搜索结果,主线思路就被稀释一分。Subagents 就是解决这个矛盾的机制——把支线任务交给一个独立的子进程去做,它的上下文自生自灭,只把结论返回给主会话。
典型场景一个是"搜一下项目里哪些地方还用着 lodash"——主会话其实不关心搜索过程读了多少文件,只关心结论。你直接说出来 Claude Code 通常会自己起子代理跑,内置的 general-purpose agent 就是干这个的。另一类场景是角色分工:一个专门做代码 review,一个专门查官方文档。自定义 agent 写在 .claude/agents/ 下,比如一个严苛的 reviewer:
---
name: code-reviewer
description: 独立进行代码 review,不受主会话思路影响
tools: Read, Grep, Glob, Bash
---
你是一个严苛的 senior engineer,任务是 review 给定的改动。
重点:
- 明显 bug 或边界漏处理
- 安全问题(注入、XSS、认证绕过)
- 性能陷阱(N+1、大 O 恶化)
- 命名和项目风格一致性
只指出具体问题和行号。不要说"可以加注释"这种废话。
主会话里说"用 code-reviewer review 一下当前 branch",Claude 会起子进程跑这个 agent,review 结果回到主上下文,支线里读过的几十个文件不会占你的主 token 预算。这对复杂任务的长会话尤其重要——主线专注于决策,脏活累活丢给子代理。
MCP:把外部系统接进来
前面那个前端系列里有一整篇讲 MCP 协议本身,这里只说在 Claude Code 里怎么用别人写好的 Server。
最常被装上的几个:filesystem 让它能读 cwd 之外的目录(比如你的笔记库);github 让它原生操作 issues / PR / 讨论;postgres 让它直接查本地数据库;puppeteer 做浏览器自动化;memory 跨会话持久化记忆;context7 实时拉官方文档——这最后一个对前端开发者尤其有用。
配置方式在 ~/.claude.json 或项目 .mcp.json 里:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/you/notes"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx" }
}
}
}
重启 Claude Code 后 /mcp 可以看连接状态。
值得单独说一下 context7 的价值。大模型的训练数据有截止日期,前端生态又偏偏是 API 变化最快的领域——TanStack Query 从 v4 到 v5 改了大量命名,Next.js App Router 每个小版本都在推新写法,Tailwind v4 和 v3 配置完全不一样。模型凭记忆写出来的代码很容易用到已经过时的 API。挂上 context7 之后,"用最新的 TanStack Query v5 API 改写这段,查 context7 确认没用过时 API"这种指令就真的生效了——它会去实时拉官方文档。对付"知识截止日期"问题,这是目前最直接的解法。
非交互模式:接进 CI 和脚本
Claude Code 不只能在终端里交互跑,也能作为命令行工具被脚本调用。claude --print "..." 是一次性执行、打印结果、退出。管道进也行:cat error.log | claude --print "分析这个日志的可能原因"。
配合 GitHub Actions 可以搭各种小机器人——自动 PR 总结、AI 代码 review、PR 描述质量检查、文档自动更新。一个最小示例:
- run: |
echo "${{ github.event.pull_request.body }}" | \
claude --print --permission-mode plan \
"review 这个 PR 描述是否清晰,缺什么关键信息"
--permission-mode plan 让它在 CI 里只规划不动手,避免在自动环境里执行意料之外的命令——在非人工监督的环境里这一条很重要。
组合起来的用法图景
这几样工具如果分开看,每个都只是小功能;组合起来才看出威力。日常交互层用 Plan Mode 配合 /clear 管上下文;重复动作沉淀成 Slash Commands 一键触发;机械性步骤(格式化、类型检查、危险操作拦截)交给 Hooks;支线搜索和专家视角交给 Subagents 不占主线上下文;外部系统(数据库、文档、GitHub、浏览器)通过 MCP 接进来;跑批量或自动化的场景切到非交互模式进 CI。这套组合拳走通之后,Claude Code 就不再是一个通用助手,而是一套被你打磨过的专属工具链。
下一篇讲用一段时间之后必然会遇到的现实问题——账单怎么涨的、怎么省、上下文污染了怎么救、权限怎么配置才不会出事故。
参考资料
- Slash Commands 文档
- Hooks 文档
- Subagents 文档
- Model Context Protocol
- awesome-claude-code — 模板集合
- Claude Code Action — 官方 GitHub Action
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:进阶武器:Slash Commands、Hooks、Subagents、MCP
本文链接:https://www.sshipanoo.com/blog/ai/claude-code/09-进阶武器/
本文最后一次更新为 天前,文章中的某些内容可能已过时!