<!-- title: Claude Code不止问答：八道暗门 -->
<!-- domain: tips-tricks -->

# Claude Code不止问答：八道暗门

你大概把 Claude Code 当成一个会写代码的聊天框——甩个需求进去，等它吐代码，再问一句改一处。但今天（2026-07-08）我从官方 `docs.claude.com` 把 hooks、sub-agents、skills 三份最新文档翻了一遍，结论是：**它本质上是一个可编程的 agent 平台**，绝大多数人只用了它 10% 的能力。下面这八道暗门，海外团队已经拿来当"半个工程师"用，国内还几乎没人提。

## 导语：信息差在哪

这是一道**认知差**。Reddit 上 r/ClaudeAI 和 HN 每周都在刷的玩法，核心就一句话——**别让模型在你眼皮底下现场发挥，要把它驯化成一条流水线**。八道暗门按"省 token、防翻车、自动化"三类排开，每一条都给到具体命令和落地场景，读完能立刻配进你的 `.claude/` 目录。

## 暗门一：把"常驻指令"从 CLAUDE.md 搬进 Skills，token 省到接近零

90% 的人把所有规矩塞进 `CLAUDE.md`——代码规范、部署流程、接口约定、踩坑笔记，越写越长。问题在于：**CLAUDE.md 每一轮对话都全文加载，你写 2000 字规矩，每轮就白烧 2000 字的上下文**。

官方 skills 文档原话点破了这件事：

> "Unlike CLAUDE.md content, a skill's body loads only when it's used, so long reference material costs almost nothing until you need it."（skill 正文只在被触发时才加载，长篇参考资料在用之前几乎零成本。）

**操作步骤：**
1. 把 `CLAUDE.md` 里那段"部署到生产环境的 30 步清单"剪出来，存成 `.claude/skills/deploy/SKILL.md`；
2. 文件头写 frontmatter：`name: deploy`、`description: 何时触发`（描述写得越准，模型越知道何时自动调用）；
3. 还能 `allowed-tools` 预授权工具、用 `$ARGUMENTS` 接参数。

**预期效果：** 主上下文瘦下来，等效会话变长，`/compact` 的频率大幅下降。**适用场景：** 一切"偶尔才用但一用就一大段"的 SOP——发版、迁移、安全审计。

> 彩蛋：官方已经把**自定义 slash command 合并进了 skills**——`.claude/commands/deploy.md` 和 `.claude/skills/deploy/SKILL.md` 现在是同一套东西，而且带 **live change detection（热重载）**和从父目录/嵌套目录**自动发现**，改完文件不用重启。

## 暗门二：Sub-agents 隔离"脏活"，主对话不被搜索结果淹没

你让 Claude Code 全仓搜一遍 `grep`，结果几十个文件路径 + 几千行代码全灌进主对话，没几轮就爆上下文。官方给的解法是 **sub-agents（子代理）**：派一个"分身"去干这种高吞吐量的脏活，它在自己独立的上下文里搜，**只把摘要交回来**。

**操作步骤：**
1. 新建 `.claude/agents/researcher.md`，写好专用的 system prompt；
2. frontmatter 里三件套：`model`（脏活挂便宜模型，比如 Haiku，省钱又快）、`tools`（只给 Read/Grep/Glob，锁死能力）、`allowed-tools` 限制它能调谁；
3. 需要时显式调用，或让主 agent 自动委派。

**预期效果：** 主上下文干净，复杂任务能跑得更久更深。**适用场景：** 全仓重构、依赖梳理、批量日志分析。

> 两个更少人知道的进阶：**① Fork the current conversation**——把当前对话分叉一份去试险招，主线不受污染，能观察和干预这条 fork；**② 给 subagent 单独 scope MCP 服务器**，并能在 frontmatter 里给它**单独挂 hooks**。官方还列了"并行 research""链式 subagent""嵌套 spawn"三种组合拳。

## 暗门三：Hooks 不止 shell——prompt-based 和 async 才是真杀手锏

很多人以为 hooks 就是"工具跑完执行个 shell"。错。官方 hooks 参考明确写了**四种形态**：shell 命令、**HTTP 端点（webhook）**、**prompt-based（用 LLM 当裁判）**、**agent-based**。还能**异步在后台跑**。

**prompt-based hook 是最被低估的暗门**——你可以让模型本身在某个生命周期点做判断。比如每次 Claude 要改文件前，先让一个 prompt hook 做一轮**安全审查**，命中危险模式（删库、写密钥、改 CI 配置）就直接 block。

**操作步骤（在 `.claude/settings.json`）：**
1. `PostToolUse` 钩子 → 编辑后自动跑 `eslint --fix` / `prettier` / 测试，官方文档示例就叫 "Run tests after file changes"；
2. `PreToolUse` + decision control → 高危操作直接 `block`，或 `defer`（把这次工具调用推迟到以后）；
3. `PostToolBatch` → 一批并行工具调用全部结算完、下一次模型调用之前，统一跑检查；
4. 勾上 async → 耗时的 lint/测试后台跑，不阻塞对话。

**预期效果：** 形成"改完即验"的闭环，bug 在你写完下一行前就被打回来。**适用场景：** 任何有 lint/test/pre-commit 流程的工程。

> 还有两个事件鲜有人提：`TeammateIdle`（**agent 团队**里某个队友要空闲时触发——Claude Code 已支持多 agent 协作编队）；`FileChanged` / `CwdChanged`（**文件系统监听**，文件一变就联动动作）。

## 暗门四：Headless `-p` 模式 + Setup hook，让 Claude Code 进 CI 当审 PR 的工人

Claude Code 不只能交互式聊天，它有完整的 **headless / print 模式**，能在命令行无界面跑。配合 `--init` / `--init-only` / `--maintenance` 和专门的 **`Setup` hook**，可以做成"一次性 CI 准备"。这是海外团队把它塞进 GitHub Actions 的标准姿势。

**操作步骤：**
```bash
# CI 里拉到 PR，让 Claude Code 非交互审查
claude -p "审查这个 PR 的 diff，只报告正确性 bug 和安全问题" \
       --output-format json
# 用 --resume 续接上一个会话，保留上下文
claude --resume
```

**预期效果：** 每个 PR 自动过一遍 AI code review，相当于白嫖一个初级 reviewer 7×24 待命。**适用场景：** 小团队没专职 review、开源项目处理海量 PR。结合 `run_in_background`（后台任务）还能跑大批量迁移脚本。

## 暗门五：权限 deny→retry + 白名单，杀掉无止境的 y/n 确认

新手最烦的就是 Claude Code 每动一下就弹"允许吗？"。官方的权限系统比你想的聪明：`PermissionRequest` 钩子能**自动决策**，`PermissionDenied` 钩子可以返回 `{retry: true}`——意思是"刚才那个工具被拒了，告诉模型可以换个方式重试"，而不是直接卡死。

**操作步骤：**
1. 在 `.claude/settings.json` 的 `permissions.allow` 里加白名单，把安全的只读/格式化命令（Read、Grep、`npm test`）一次性放行；
2. 高危命令（`rm`、`git push`、改 `settings.json`）保持需确认；
3. 进阶：用 `PreToolUse` 的 decision control 写规则——比如"非 `main` 分支才允许 push"。

**预期效果：** 确认弹窗从几十次降到一两次，又不失安全护栏。**适用场景：** 所有受够了反复点"yes"的开发者。

## 暗门六：Checkpointing——改崩了一键时间旅行回退

这个功能藏得最深：Claude Code 自带 **checkpointing（检查点）**，会在关键节点给工作区打快照。你让它重构一通跑飞了、把好端端的代码改烂了，不用翻 git、不用手动 `git stash`，直接回退到改崩前的快照。

**操作步骤：** 走 checkpoint / rewind 菜单（交互式里 `/rewind` 类指令），把文件状态和对话一起回到某个检查点。**预期效果：** 大胆试错零成本，再也不用"撤回 30 步"。**适用场景：** 重构、大范围改写、实验性改动——所有"怕改坏不敢下手"的时刻。

## 暗门七：`/compact` 不是清空——配 PreCompact 钩子 + MEMORY.md，压缩别丢魂

上下文满了，大家无脑敲 `/compact`。但它会**把细节压成摘要**，关键约定常常在压缩里蒸发。正确姿势是两件事叠起来：

1. **`PreCompact` / `PostCompact` 钩子**：在压缩发生前后注入一份"必须保留"的清单（项目约束、当前任务目标、已确认的决策），让摘要守住这些事实；
2. **跨会话记忆**：用 `MEMORY.md`（一条一个事实、带 frontmatter 的索引）把长期信息从会话里抽出来——下次开新会话它还在，不靠模型"记住"。

**操作步骤：** 把"任务验收标准、已读改的文件路径、测试结果、待办"写进记忆，配 PreCompact 钩子在压缩前强制重读一遍。**预期效果：** 长任务跨多轮、跨多天不丢魂。**适用场景：** 多日的大项目、需要交接续做的活。

## 暗门八：Plan mode + 任务清单，先给方案再动刀

最后一条是纪律，也是功能。遇到非小修小补的任务，别让它直接开写——先进 **Plan mode**：Claude Code 先探索代码、摸清结构，再拿出一份带步骤的方案等你点头，**批准后才动代码**。配合任务清单（TaskCreate/TaskUpdate），复杂多步任务会被拆成可追踪的子项，而不是一坨。

**操作步骤：** 让它"先别写代码，进 plan mode 给我方案"；交互里 Shift+Tab 可在模式间切换；批准计划后边做边勾任务。**预期效果：** 砍掉"方向错了返工"的浪费，方向对了再放手写。**适用场景：** 任何 3 步以上、影响多文件的改动。

## 一图看懂：八道暗门插在一轮请求的哪一层

```mermaid
flowchart TD
    U[你提交一句需求] --> US["UserPromptSubmit 钩子<br/>可注入上下文/拦截"]
    US --> SK["Skill 按需加载<br/>暗门一：token 省到零"]
    SK --> PM["Plan mode + 任务清单<br/>暗门八：先方案后动刀"]
    PM --> PT["PreToolUse 钩子<br/>暗门三：prompt-based 守门员"]
    PT --> SA["派 Sub-agent 隔离脏活<br/>暗门二：主上下文不被淹"]
    PT -->|工具真正执行| CH["Checkpoint 打快照<br/>暗门六：随时回退"]
    SA --> RS["仅回传摘要"]
    RS --> PO["PostToolUse / PostToolBatch<br/>自动跑 lint+test"]
    CH --> PO
    PO --> HP["Headless -p 进 CI<br/>暗门四：审 PR 工人"]
    PO --> ST[Stop 钩子 → 一轮结束]
    ST -.上下文快满.-> CP["/compact + PreCompact 钩子<br/>暗门七：压缩别丢魂"]
    CP -.跨会话.-> MEM["MEMORY.md 持久记忆"]
    HP -.权限.-> PR["Permission 白名单 + retry<br/>暗门五：杀掉 y/n"]
```

## 信息差总结：你知道的 vs 别人不知道的

| 维度 | 大多数人（你知道的） | 海外玩家（别人不知道的） |
|---|---|---|
| 项目指令 | 全塞 `CLAUDE.md`，每轮烧 token | 搬进 skills，按需加载，接近零成本 |
| 大范围搜索 | 灌进主对话，几轮爆上下文 | 派 sub-agent 干脏活，只回传摘要 |
| 自动化 | 没有 | hooks 四形态，prompt-based 当安全裁判 |
| CI 集成 | 手动用 | `-p` headless + Setup hook，自动审 PR |
| 确认弹窗 | 反复点 yes | 权限白名单 + deny→retry |
| 改崩了 | 翻 git 救场 | checkpointing 一键时间旅行 |
| 上下文满了 | 无脑 `/compact` | PreCompact 钩子 + MEMORY.md，压而不丢魂 |
| 复杂任务 | 让它直接开写 | Plan mode 先批方案再动刀 |

## 行动指南：今天就动手

按优先级排，从最高 ROI 开始：

1. **（10 分钟）瘦身 `CLAUDE.md`**：把里面的长 SOP 各拆成一个 skill，立刻看见上下文变轻；
2. **（30 分钟）配一个 PostToolUse 钩子**：编辑后自动 `prettier` + 单测，先把"改完即验"闭环跑通；
3. **（1 小时）写一个 `.claude/agents/researcher.md`**：专门干全仓搜索/依赖分析，挂便宜模型；
4. **（半天）把 `claude -p` 塞进 CI**：给每个 PR 加一道 AI review；
5. **（进阶）** 探索 `TeammateIdle` 的 agent 团队、`FileChanged` 文件监听、`Elicitation` 动态追问——这些是把 Claude Code 从"工具"变成"自动化中枢"的拼图。

> **价格提醒**：Claude Code 订阅 Pro 20 美元/月起，但脏活 sub-agent 强烈建议挂便宜模型（Haiku 4.5 级别），别全用顶配烧钱——这恰好是和"成本优化"那道暗门交叉的地方。

## 参考来源

- Claude Code Hooks Reference（官方，今日抓取）— https://docs.claude.com/en/docs/claude-code/hooks
- Claude Code Sub-agents（官方）— https://docs.claude.com/en/docs/claude-code/sub-agents
- Claude Code Skills（官方）— https://docs.claude.com/en/docs/claude-code/skills
- GitHub anthropics/claude-code README — https://github.com/anthropics/claude-code
- Claude Code CLI / Commands Reference（含 `-p`、checkpointing）— https://docs.claude.com/en/docs/claude-code/cli-reference

---
> 本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵**爱卫生**（微信ID: gprshome201101）维护。
> 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
