从会用到玩得溜

到这里你已经会用 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(回合结束)、SessionStartSessionEnd。社区已经积累了很多现成 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 就不再是一个通用助手,而是一套被你打磨过的专属工具链。

下一篇讲用一段时间之后必然会遇到的现实问题——账单怎么涨的、怎么省、上下文污染了怎么救、权限怎么配置才不会出事故。

参考资料

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:进阶武器:Slash Commands、Hooks、Subagents、MCP

本文链接:https://www.sshipanoo.com/blog/ai/claude-code/09-进阶武器/

本文最后一次更新为 天前,文章中的某些内容可能已过时!