第三阶段:高级能力 ⚡
目标:能构建自动化工作流,大幅提升开发效率
本阶段学习地图
3.1 MCP 服务器(连接外部工具)
↓
3.2 Hooks 系统(工作流自动化)
↓
3.3 Skills 技能系统(复杂流程封装)
↓
3.4 多 Agent 并行工作
↓
3.5 实战练习
文件结构
# 第三阶段:高级能力/
├── 本文件(阶段导航)
├── 服务器配置与使用
├── 系统设计
├── 技能调用与理解
├── 多 Agent 并行工作
├── IDE 深度集成(WebStorm)
└── 实战练习题
核心理念
MCP + Hooks + Skills = 超能力组合
- MCP:让 Claude "看到"和操作外部系统(浏览器、IDE、数据库)
- Hooks:让重复性工作变成"触发就执行"的自动化
- Skills:让复杂的多步骤流程变成一个命令
阶段完成标准
- 成功连接 Chrome DevTools MCP,用它截图验证 UI
- 成功连接 WebStorm MCP,用它做 Go-to-Definition
- 配置了至少一个有用的 Hook
- 成功调用过
/dev-implement或/dev-fix-bug - 理解多 Agent 的任务分工模式
常见问题 FAQ
Q1:配置了 MCP 但 Claude 说"工具不可用"
排查步骤:
# 1. 确认 MCP 服务器进程在运行
lsof -i :9222 # Chrome DevTools
lsof -i :29173 # WebStorm
# 2. 手动测试 MCP 端点是否响应
curl http://localhost:9222/json
curl http://127.0.0.1:29173/index-mcp/sse
# 3. 重启 Claude 会话(MCP 连接在会话开始时建立)
Chrome DevTools MCP 特别注意:Chrome 必须以远程调试模式启动,普通启动的 Chrome 没有 MCP 端口。
Q2:连接了 WebStorm MCP,但 ide_find_definition 总是返回"未找到"
可能原因:
- WebStorm 正在索引(IDE 启动后需要等待索引完成)
- 文件路径不对(需要相对于项目根目录的路径)
- 光标位置不在符号上
正确用法:
# 提供精确的文件路径和行列号
> 用 ide_find_definition 查找 src/services/UserService.ts
第 45 行第 12 列的符号定义
Q3:Hook 配置了,每次会话开始都执行,但执行失败了
调试方法:
# 简化 Hook 命令,先验证基础功能
# 把你的 Hook 命令替换为:
"command": "echo 'Hook OK' > /tmp/claude-hook-test.txt"
# 再检查文件是否生成
cat /tmp/claude-hook-test.txt
确认基础 Hook 能工作后,再逐步恢复真实命令,找出失败的具体步骤。
Q4:Skills 的门控感觉很烦,能不能让 Claude 跳过?
强烈不建议跳过门控。门控的作用是防止 Claude 基于错误理解直接动手。
真正花时间的不是门控,而是修复"Claude 理解错了但直接动手"造成的问题。
如果觉得某个门控的内容太简单:
- 快速确认:"确认,继续" 即可
- 如果门控内容总是显而易见,说明 Skill 设计可以优化(门控放错位置了)
Q5:/dev-implement 执行到一半,Claude 停下来说需要更多信息,怎么办?
这是正常的——Skill 在澄清阶段需要你补充信息。不要绕过它。
提供信息的技巧:
Claude 问:这个功能需要支持哪些用户角色?
你回答:
- 商家角色:可以查看和编辑
- 审核员角色:只能查看,不能编辑
- 管理员:所有权限
Claude 问:接口的分页参数格式是什么?
你回答:参考 src/api/order.ts 里的 getOrderList 接口,格式一致
信息越具体,后续实现越少走弯路。
Q6:多 Agent 模式下,子 Agent 的结果不准确
子 Agent 的结果质量取决于给它的任务描述是否清晰。
提升子 Agent 准确性的方法:
# 不清晰的委派
> 帮我分析这个项目
# 清晰的委派(Claude 内部也应该这样委派)
> 在 src/services/ 目录下搜索所有包含 "calculatePrice" 的文件,
返回文件路径和对应的行号
Q7:Chrome DevTools MCP 截图了,但图片是空白/全黑的
可能原因:
- 截图的页面正在加载中,还没渲染完
- 页面需要登录,但截图时未登录状态
解决方法:
# 先确认页面状态
> 检查当前页面的标题和 URL,确认是目标页面
# 等待特定内容出现后再截图
> 等待 ".product-list" 元素出现后,再截一张截图
3.1 MCP 服务器配置与使用
MCP(Model Context Protocol)是让 Claude Code 连接外部工具的标准协议,极大扩展了 Claude 的能力边界。
什么是 MCP
没有 MCP:
Claude ←→ 只能读写本地文件,执行 shell 命令
有 MCP:
Claude ←→ MCP 服务器 ←→ 浏览器
←→ IDE
←→ 数据库
←→ GitHub API
←→ 任意外部系统
MCP 配置方式
在 ~/.claude/settings.json 中添加 mcpServers:
{
"mcpServers": {
"服务器名称": {
"type": "sse 或 stdio",
"url": "http://...", // SSE 类型用 url
"command": "node", // stdio 类型用 command
"args": ["server.js"] // stdio 类型用 args
}
}
}
SSE vs stdio:
sse:连接已独立运行的服务(如 Chrome 调试端口、IDE 插件启动的服务)stdio:由 Claude Code 启动和管理进程
Chrome DevTools MCP
安装与启动
方式一:通过 npm 包(推荐,stdio 模式)
# 安装 chrome-devtools MCP 包
npm install -g @modelcontextprotocol/server-chrome-devtools
配置(stdio 模式,Claude Code 自动管理进程):
{
"mcpServers": {
"chrome-devtools": {
"type": "stdio",
"command": "mcp-server-chrome-devtools",
"args": []
}
}
}
方式二:直连调试端口(SSE 模式)
需要先以远程调试模式启动 Chrome:
# macOS:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222
# Windows:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
# Linux:
google-chrome --remote-debugging-port=9222
配置(SSE 模式):
{
"mcpServers": {
"chrome-devtools": {
"type": "sse",
"url": "http://localhost:9222/json/mcp/sse"
}
}
}
验证是否生效:
# 确认 Chrome 调试端口开放
curl http://localhost:9222/json
# 应该返回当前打开的标签页列表
# 重启 Claude 会话后
/status
# 应该看到 chrome-devtools 显示为 connected
核心能力
截图(验证 UI 改动):
> 截一下当前页面的截图
DOM 分析(定位元素问题):
> 查看页面中 .product-list 元素的样式
性能分析(找性能瓶颈):
> 录制一次页面加载的性能 trace,分析 LCP 瓶颈
控制台日志(调试问题):
> 查看页面的控制台报错
网络请求(分析接口):
> 查看刚才页面加载了哪些接口
JavaScript 执行(动态操作):
> 在页面中执行 document.title,返回页面标题
典型工作流
1. 修改 CSS 代码
↓
2. 让 Claude 导航到目标页面
> 打开 http://localhost:3000/product-list
↓
3. 让 Claude 截图对比效果
> 截一张截图,确认按钮颜色是否改为了蓝色
↓
4. 发现问题继续修改,重复步骤 2-3
IDE MCP(VS Code / WebStorm)
安装 IDE 对应的 Claude Code 插件后,插件会自动启动 MCP 服务器, 配置格式参考 IDE 插件的说明文档获取具体端口。
核心能力
| 工具 | 用途 | 示例 |
|---|---|---|
ide_find_definition | 跳转到定义 | "UserService 的 createUser 在哪里定义的?" |
ide_find_references | 查找所有引用 | "哪些地方调用了 validateToken?" |
ide_find_implementations | 查找接口实现 | "IUserRepository 有哪些实现类?" |
ide_call_hierarchy | 调用链分析 | "sendEmail 最终会调用哪些方法?" |
ide_refactor_rename | 全局重命名 | "把 getUserInfo 重命名为 fetchUserProfile" |
ide_diagnostics | 代码错误检查 | "当前文件有哪些类型错误?" |
ide_type_hierarchy | 类型层级 | "BaseService 有哪些子类?" |
使用示例
# 安全重构:查找所有引用再修改
> 帮我把 src/api/user.ts 中的 getUserInfo 函数重命名为 fetchUserProfile,
先用 ide_find_references 确认影响范围,再执行重命名
# 代码导航:理解调用链
> 用 ide_call_hierarchy 分析 processOrder 方法的调用链,
找出所有可能调用到它的入口点
# 接口探索
> 找到 IPaymentService 接口的所有实现类,
对比它们的 processPayment 方法实现有什么不同
其他常用 MCP
GitHub MCP
{
"mcpServers": {
"github": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxx"
}
}
}
}
能力:查看 PR、Issue、代码审查评论、合并 PR 等。
Filesystem MCP
{
"mcpServers": {
"filesystem": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp", "/home"]
}
}
}
能力:访问项目目录以外的文件系统。
PostgreSQL MCP
{
"mcpServers": {
"postgres": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres",
"postgresql://localhost/mydb"]
}
}
}
能力:直接查询数据库,辅助调试数据问题。
MCP 故障排查
# 查看 MCP 连接状态
/status
# 检查服务是否运行
lsof -i :9222 # Chrome DevTools
# 手动测试端点
curl http://localhost:9222/json
# 常见问题:
# 1. 服务器未启动 → 检查服务是否运行
# 2. 端口被占用 → 修改端口配置
# 3. MCP 不可用 → 重启 Claude 会话(连接在会话开始时建立)
3.2 Hooks 系统设计
Hooks 是在特定事件发生时自动执行的脚本或提示,让工作流自动化成为可能。
所有 Hook 事件的完整参数说明详见Hooks 完整参考 。
Hook 事件类型
SessionStart ← 会话开始时
PreToolUse ← 工具调用前(可拦截)
PostToolUse ← 工具调用后
Notification ← Claude 需要通知时
Stop ← 会话结束/Claude 完成任务时
Hook 配置结构
在 ~/.claude/settings.json 中:
{
"hooks": {
"事件名": [
{
"type": "command",
"command": "bash 命令"
}
],
"PreToolUse": [
{
"matcher": "工具名",
"hooks": [
{
"type": "command",
"command": "命令"
}
]
}
]
}
}
SessionStart Hook
用途:每次会话开始时自动执行,适合初始化操作。
场景一:同步团队知识库
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "cd ~/Documents/git/team-knowledge && git pull --quiet 2>&1 || echo '知识库同步失败'"
}
]
}
}
场景二:打印环境信息
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "echo '=== 当前环境 ===' && git branch --show-current 2>/dev/null && node --version"
}
]
}
}
场景三:运行多个初始化步骤
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "bash ~/scripts/claude-session-start.sh"
}
]
}
}
# ~/scripts/claude-session-start.sh
#!/bin/bash
echo "=== 会话初始化 ==="
# 同步知识库
cd ~/Documents/git/team-knowledge && git pull --quiet
echo "✓ 知识库已同步"
# 打印当前项目信息
if [ -f "package.json" ]; then
echo "项目: $(jq -r .name package.json)"
fi
echo "分支: $(git branch --show-current 2>/dev/null || echo '非 git 仓库')"
PreToolUse Hook
用途:在工具执行前介入,可以用于安全检查、日志记录或前置验证。非 0 退出码会阻止工具执行,是最强的安全控制手段。
除了安全检查,还可以用来:
- 记录所有工具调用到日志(审计)
- 在 Edit 之前自动备份文件
- 在 Bash 执行前打印提示,提醒自己注意
场景:拦截危险的 Bash 命令
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash ~/scripts/check-command.sh"
}
]
}
]
}
}
# ~/scripts/check-command.sh
#!/bin/bash
# Claude Code 通过环境变量传入工具信息,stdin 作为备用
CMD="${CLAUDE_TOOL_INPUT:-$(cat -)}"
# 检查危险模式
if echo "$CMD" | grep -qE "rm -rf|DROP TABLE|DELETE FROM.*WHERE 1=1"; then
echo "ERROR: 检测到危险命令,已拦截" >&2
exit 1
fi
exit 0
PostToolUse Hook
用途:工具执行后触发,适合自动化后续步骤。
场景:文件修改后自动运行 lint
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "bash ~/scripts/auto-lint.sh"
}
]
}
]
}
}
Stop Hook
用途:Claude 完成任务或会话结束时触发,适合经验回写。
场景:自动检测是否有可回写的经验
{
"hooks": {
"Stop": [
{
"type": "command",
"command": "bash ~/scripts/check-team-learn.sh"
}
]
}
}
# ~/scripts/check-team-learn.sh
#!/bin/bash
# 检查会话中是否有值得记录的知识
# 如果有,提示用户执行 /team-learn
echo "[EVOLUTION_CHECK] 会话结束,如有新发现建议执行 /team-learn 回写经验"
Hook 执行结果处理
Hook 脚本通过退出码控制行为:
| 退出码 | 含义 |
|---|---|
0 | 成功,继续执行 |
非 0 | 失败,PreToolUse 中会阻止工具执行 |
脚本输出(stdout)会显示给用户,stderr 会记录到日志。
调试 Hooks
第一步:最小化验证 Hook 框架是否工作
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "echo 'Hook 测试成功' > /tmp/claude-hook-test.txt"
}
]
}
}
启动 Claude 后检查:
cat /tmp/claude-hook-test.txt
# 如果输出"Hook 测试成功",说明框架正常
# 如果文件不存在,说明 settings.json 格式有问题
第二步:验证 settings.json 格式
# JSON 不能有注释、尾逗号、单引号
python3 -m json.tool ~/.claude/settings.json
# 如果有格式错误,会提示具体行数
第三步:手动测试 Hook 脚本
# 确保脚本有执行权限
chmod +x ~/scripts/claude-session-start.sh
# 手动执行,观察输出
bash ~/scripts/claude-session-start.sh
# 如果脚本用了 stdin(PreToolUse),模拟测试
echo '{"command": "rm -rf test"}' | bash ~/scripts/check-command.sh
临时禁用 Hook:
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "echo 'disabled'"
}
]
}
}
完整的生产级 Hooks 配置
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "cd ~/Documents/git/team-knowledge && git pull --quiet 2>&1 | tail -1"
}
],
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash ~/scripts/safety-check.sh"
}
]
}
],
"Stop": [
{
"type": "command",
"command": "echo '[EVOLUTION_CHECK] 会话结束 - 有新发现请执行 /team-learn'"
}
]
}
}
3.3 Skills 技能系统
Skills 是封装了复杂多步骤工作流的扩展,通过 /skill-name 触发。
什么是 Skills
普通对话:
你 → "帮我修这个 bug" → Claude 随机发挥,质量不稳定
Skills(工作流命令):
你 → /bug-fix → Claude 按照固定的最佳实践流程执行
Step 1: 澄清问题
Step 2: 定位根因(门控)
Step 3: 修复方案(门控)
Step 4: 实施修复
Step 5: 验证
门控(Gate):流程中的暂停点,Claude 必须等你确认后才继续。防止 Claude 基于错误理解直接动手。
典型工作流 Skill 的结构
Bug 修复 Skill
步骤:
1. 你描述 bug 症状和复现步骤
2. Claude 澄清上下文(影响范围、日志等)
3. Claude 定位根因 → [门控] 确认根因正确
4. Claude 提出修复方案 → [门控] 确认方案
5. Claude 实施修复
6. Claude 给出验证命令,你执行确认
适用场景:
- 难以定位的 bug(需要系统排查)
- 生产环境紧急修复
- 想保留完整修复记录
不适用场景:
- 明显的拼写错误、单行修复 → 直接普通对话更快
- 已经知道根因,只需要改一行 → 不必走完整流程
需求实现 Skill
步骤:
1. 输入需求(文档/描述)
2. Claude 探索相关代码模块
3. Claude 列出澄清问题,你回答
4. Claude 输出技术方案 → [门控] 确认方案
5. Claude 分阶段实现
6. Claude 自动代码审查
7. Claude 给出自测方案,你验证
适用场景:
- 新功能开发(> 3 个文件改动)
- 复杂功能,需要先设计再实现
不适用场景:
- 给现有函数加一个参数 → 直接说明需求即可
- 修改样式、文案等不涉及逻辑的改动
代码审查 Skill
并行执行多维度审查:
├── 测试覆盖分析
├── 安全漏洞扫描(XSS、SQL 注入等)
├── TypeScript 类型安全 / 异步问题
├── 代码规范
└── 国际化合规
输出:评分报告 + 具体问题列表 + 修复建议
故障诊断 Skill
步骤:
1. 描述告警/故障现象
2. Claude 确认上下文(服务名、时间范围)
3. 制定数据采集计划 → [门控] 确认
4. 收集日志/监控数据
5. 根因分析 → [门控] 确认根因
6. 输出修复建议
如何高效使用 Skills
原则一:信任门控,不要跳过
# 错误方式
> 直接修复,不需要确认
# 正确方式
> (认真审阅根因分析后)确认,继续下一步
门控的意义:防止 Claude 基于错误理解直接改 10 个文件。
原则二:提供完整输入
Skills 在信息充分时效果最好:
# 信息不足
> 登录失败
# 信息充分
> 问题:用户登录后立即被退出
> 环境:生产环境,发生在今天下午 3 点后
> 错误信息:JWT token validation failed: token expired
> 错误日志:[粘贴具体日志]
> 最近变更:昨天更新了 JWT 密钥轮换逻辑
原则三:完成全流程,不中途放弃
Skill 的每个步骤都有意义,包括最后的验证和总结步骤,不要在"感觉差不多了"时提前退出。
安装 Skills
Skills 是存放在特定位置的 Markdown 文件:
~/.claude/skills/
└── skill-name/
└── skill.md
目录结构示例:
~/.claude/skills/
├── dev-fix-bug/
│ └── skill.md
├── dev-implement/
│ └── skill.md
└── pre-commit-check/
└── skill.md
获取方式:
- 自己编写(见 phase-4-expert/04-custom-skills.md)
- 团队共享(通过 git 同步共享仓库里的 skills/)
- 社区开源 Skill(GitHub 搜索
claude-code skills)
验证 Skill 是否安装成功:
# 查看已安装的 Skills
ls ~/.claude/skills/
# 启动 Claude 后查看可用命令
/help
# 已安装的 Skills 会出现在命令列表里
Skill 与普通对话的对比
同一个任务,有没有 Skill 的区别:
没有 Skill(普通对话):
> 帮我修这个 bug
→ Claude 直接开始猜测和修改
→ 可能没搞清楚根因就动手
→ 修完不一定对,也不一定验证
有 Skill(/dev-fix-bug):
→ Step 1: 你描述症状(充分的信息)
→ Step 2: Claude 搜索代码定位根因
→ [门控] 你确认根因正确
→ Step 3: Claude 提出修复方案
→ [门控] 你选择方案
→ Step 4: 实施修复
→ Step 5: Claude 给出验证命令,你确认
关键差别:Skill 有固定流程和门控,不允许跳步;普通对话 Claude 自由发挥,质量不稳定。
内置命令(无需安装)
Claude Code 自带的唯一工作流命令:
/commit # 自动生成 git commit message
其他工作流功能需要通过安装 Skill 获得,或直接用自然语言描述让 Claude 随机应变。
何时用自然语言代替 Skill:
- 任务很简单,不需要多步骤流程
- Skill 还没安装,但时间紧迫
- 想快速试探一个方向,不需要完整流程
# 没有安装 Skill 时,用自然语言模拟流程
> 帮我系统排查这个 bug,
流程:先分析根因(等我确认),再提方案(等我确认),最后实施修复
3.4 多 Agent 并行工作
多 Agent 是 Claude Code 实现大规模任务的核心架构,通过任务分工和并行执行大幅提升效率。
基本概念
主 Agent(Opus) ← 推理、编码、架构决策(高质量,高成本)
↓ 委派
子 Agent 1(Sonnet) ← 探索代码结构(省 token)
子 Agent 2(Sonnet) ← 查询文档知识(并行)
子 Agent 3(Sonnet) ← 分析相关模块(并行)
↓ 汇总结果
主 Agent ← 基于探索结果做决策
核心原则:
- 探索类任务 → 子 Agent(Sonnet,省 token)
- 编码/决策类任务 → 主 Agent(Opus,保质量)
何时需要多 Agent
| 任务特征 | 建议 |
|---|---|
| 需要读取 3+ 个无关联的文件 | 多个子 Agent 并行读取 |
| 需要同时分析多个维度 | 每个维度一个子 Agent |
| 需要跨模块代码探索 | 子 Agent 分别探索 |
| 单个任务预计 20+ 轮 | 分解为多个子任务 |
自动委派(无需手动操作)
在 CLAUDE.md 中配置模型策略,Claude Code 会自动委派:
# CLAUDE.md 中的模型策略配置
## 模型选择策略
以下任务自动委派子 Agent(Sonnet):
- 搜索代码位置
- 批量阅读代码(3+ 文件)
- 查询文档/知识库
- 生成 commit message
以下任务由主会话(Opus)执行:
- 编写业务代码
- 方案设计
- 复杂 bug 分析
Worktree 隔离并行开发
什么是 Worktree:git 的功能,允许同一仓库同时有多个工作目录,各自在不同分支上工作,互不影响。通俗理解:相当于把代码库复制了一份,在副本上工作,完成后再合并回来。
Worktree 让多个 Agent 可以同时在同一仓库的不同分支上工作,互不干扰:
# 告诉 Claude 在 worktree 中工作(隔离修改)
> 在一个独立的 worktree 中实现这个功能,
完成后告诉我需要合并哪些内容
Claude Code 会自动:
- 创建 worktree:
.claude/worktrees/feature-xxx/ - 在 worktree 中工作,不影响主分支
- 完成后报告需要合并的内容
Plan Mode(规划模式)
对于复杂任务,先规划再执行,通过告诉 Claude 创建规划文件来管理任务:
.claude/plans/<分支名>/
├── task_plan.md ← 任务分解和执行顺序
│ ├── 任务1: 探索现有 auth 模块
│ ├── 任务2: 设计新的 token 刷新方案(依赖任务1)
│ └── 任务3: 实现方案(依赖任务2)
│
├── findings.md ← 探索发现和关键决策记录
│ ├── 发现:现有 token 验证在 middleware.ts:45
│ └── 决策:使用 Redis 存储 refresh token
│
└── progress.md ← 实时进度追踪
├── ✅ 任务1: 探索完成
├── 🔄 任务2: 设计中
└── ⏳ 任务3: 等待
触发方式:
> 这是一个复杂任务,请先在 .claude/plans/ 下创建规划文件,
分解任务后再逐步执行
并行代码审查
你可以让 Claude 并行启动多个专项审查:
> 对这个 PR 的改动进行多维度并行审查:
同时检查:安全漏洞、TypeScript 类型问题、测试覆盖、性能问题
各维度独立分析,最后汇总报告
多 Agent 的限制
- 子 Agent 通常只读取分析,不修改文件
- 结果需要汇总到主 Agent 才能使用
- 不适合依赖关系强的任务(必须顺序执行的步骤)
什么时候不应该用多 Agent
| 情况 | 原因 | 替代方案 |
|---|---|---|
| 任务很简单(1-2 个文件) | 子 Agent 的启动开销反而更慢 | 直接在主会话中处理 |
| 任务有强依赖(步骤 A 完成才能做步骤 B) | 并行没有意义,还增加协调复杂度 | 顺序执行 |
| 需要跨子任务保持状态 | 子 Agent 之间无法直接通信 | 主 Agent 协调,中间结果写文件传递 |
| 希望精确控制每一步 | 子 Agent 自主执行,细节不可控 | 主会话逐步执行,每步确认 |
实战示例:并行探索大型项目
# 场景:需要理解一个陌生的大型项目
> 我需要快速了解这个项目的整体架构。
请并行探索以下几个维度:
1. 入口文件和路由结构
2. 主要的服务层(Service)有哪些
3. 数据库相关的模型定义
4. 对外暴露的 API 接口
这四个维度可以并行分析,完成后汇总给我。
Claude 会并行启动子 Agent 分别探索,然后汇总成一份整体架构说明。
实战示例:并行代码审查
# 场景:提交代码前做多维度审查
> 对 src/payment/ 目录的改动进行并行代码审查:
同时分析以下维度(每个维度独立,完成后汇总):
- 维度1:安全漏洞(XSS、SQL 注入、敏感信息硬编码)
- 维度2:TypeScript 类型安全(any 类型、未处理的 null)
- 维度3:测试覆盖(哪些分支没有测试)
- 维度4:业务逻辑(边界情况、异常处理)
与串行审查的对比:串行做 4 个维度可能需要 40 轮对话;并行只需要 10 轮,且每个维度更专注不受干扰。
3.5 IDE 深度集成(VS Code / WebStorm)
连接 IDE MCP 后,Claude 可以直接使用 IDE 的代码智能功能,大幅提升代码理解和重构能力。
连接 IDE
# 在 Claude Code 会话中执行
/ide
# 成功连接后会显示
# Connected to WebStorm.
# 或 Connected to VS Code.
前提:IDE 中需要安装 Claude Code 插件,插件会自动启动 MCP 服务器。
核心能力详解
ide_find_definition - 跳转到定义
最常用的能力,替代手动 Ctrl+Click:
# 找类的定义
> 找一下 UserService 这个类在哪里定义的
# 找接口定义
> IPaymentRepository 接口在哪个文件?
# 找方法的具体实现
> validateToken 方法的完整实现是什么?
何时使用:
- 看到一个类/方法名,想了解它的定义
- 追踪第三方库的实现
- 理解继承链
ide_find_references - 查找所有引用
了解某个函数/变量在哪里被使用:
# 重构前确认影响范围
> 我要删除 formatPrice 函数,先用 ide_find_references 看看有几个地方引用了它
# 理解某个常量的用途
> MAX_RETRY_COUNT 这个常量被哪些地方用到了?
# 追踪数据流
> userId 这个变量从哪里传入,到哪里被使用?
ide_find_implementations - 查找接口实现
对于接口和抽象类特别有用:
> IOrderService 接口有哪些实现类?
> AbstractValidator 抽象类的所有具体子类有哪些?
ide_call_hierarchy - 调用链分析
理解方法的调用关系:
# 向上追溯:谁调用了这个方法?
> 用 ide_call_hierarchy 分析 processPayment 方法,
找出所有可能触发它的入口
# 向下追溯:这个方法会调用什么?
> createOrder 方法内部会调用哪些其他方法?
ide_refactor_rename - 安全重命名
比全局搜索替换更安全(正确处理作用域、重载等边界情况):
# 方法重命名
> 把 UserService 中的 getUserInfo 方法重命名为 fetchUserProfile
# 类重命名
> 把 OrderProcessor 类重命名为 OrderExecutor,更新所有引用
重要:重命名前 Claude 会先用 ide_find_references 确认影响范围。
ide_diagnostics - 代码问题检查
获取 IDE 的实时诊断信息:
# 检查整个文件
> src/components/UserForm.tsx 有哪些类型错误?
# 检查特定区域
> 第 80-120 行有没有 ESLint 警告?
# 获取快速修复建议
> 这个错误有哪些可用的快速修复方案?
实战场景组合
场景一:安全重构
目标:重命名一个被多处引用的方法
步骤:
1. ide_find_references → 确认影响范围(10 个文件)
2. 评估:影响范围是否可接受?
3. ide_refactor_rename → 执行重命名
4. ide_diagnostics → 验证没有引入错误
场景二:理解陌生代码
目标:快速理解一个不熟悉的模块
步骤:
1. ide_find_definition → 找到核心类的定义
2. ide_type_hierarchy → 了解类的继承结构
3. ide_find_implementations → 找到所有实现
4. ide_call_hierarchy → 理解调用关系
5. 综合以上信息,Claude 给出模块说明
场景三:接口改动影响面分析
目标:修改一个接口前评估影响
步骤:
1. ide_find_implementations(接口)→ 找到所有实现类
2. 对每个实现类:ide_find_references → 找到调用方
3. 汇总生成影响范围报告
使用技巧
组合使用效果最好:让 Claude 根据任务自动选择工具组合:
> 我要修改 IProductRepository 接口,在 findAll 方法中加一个 filter 参数。
请帮我分析影响范围,并给出修改所有实现类的方案。
# Claude 会自动:
# 1. ide_find_implementations 找所有实现类
# 2. ide_find_references 找所有调用方
# 3. 给出完整的修改方案
明确要求用哪个工具:Claude 不会自动偏好 MCP 工具,需要你明确指定:
# 效果差(Claude 可能用 Grep)
> 找一下 UserService 在哪里定义的
# 效果好(明确要求用 IDE 工具)
> 用 ide_find_definition 找到 UserService 的定义
IDE MCP vs Grep:什么时候用哪个
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 找函数/类的定义 | ide_find_definition | 语义跳转,准确率 100% |
| 查找所有引用 | ide_find_references | 理解作用域,不会漏掉或误报 |
| 搜索关键词/字符串 | Grep | 更快,不需要 IDE 索引 |
| 查找接口所有实现类 | ide_find_implementations | Grep 做不到语义级的实现查找 |
| 全局重命名 | ide_refactor_rename | 安全,处理重载/作用域边界 |
| 查看代码错误 | ide_diagnostics | 实时 IDE 诊断,比手动运行快 |
| 搜索特定文件 | Glob | 更快,不需要 IDE |
经验规则:涉及代码语义(定义、引用、继承、调用链)用 IDE 工具;涉及文本匹配(关键词、日志、注释)用 Grep。
连接状态检查
# 在 Claude Code 会话中
/status
# 查看 MCP servers 一栏,IDE 应显示 connected
# 如果显示 disconnected
/ide
# 尝试重新连接
# 如果仍然失败,检查 IDE 是否开着且插件已启动
常见问题:IDE 关闭后 MCP 断开,重新打开 IDE 后在 Claude 中执行 /ide 重连即可。
3.6 实战练习
练习一:连接 Chrome DevTools MCP
目标:用 Chrome DevTools MCP 验证 UI 改动
步骤:
- 以远程调试模式启动 Chrome:
# macOS /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --remote-debugging-port=9222 - 配置
chrome-devtoolsMCP 到~/.claude/settings.json:{ "mcpServers": { "chrome-devtools": { "type": "sse", "url": "http://localhost:9222/json/mcp/sse" } } } - 对一个前端项目做一个 CSS 改动
- 让 Claude 截图验证改动效果:
> 截一张当前页面的截图,验证按钮颜色是否改为了蓝色
验收:Claude 能截图并分析 UI 状态 ✓
练习二:IDE MCP 代码导航
目标:用 IDE 工具做一次安全的方法重命名
步骤:
- 安装 IDE 对应的 Claude Code 插件
- 在 Claude Code 会话中执行
/ide连接 - 选择项目中一个方法,先分析影响范围:
> 用 ide_find_references 分析 validateUserInput 方法有多少个引用 - 确认影响范围后执行重命名:
> 把 validateUserInput 重命名为 verifyUserInput - 用
ide_diagnostics确认没有引入错误
验收:重命名成功,无遗漏,无类型错误 ✓
练习三:配置一个有用的 Hook
目标:配置 SessionStart Hook,在每次会话开始时自动输出有用信息
步骤:
- 编辑
~/.claude/settings.json:{ "hooks": { "SessionStart": [ { "type": "command", "command": "echo '=== 会话开始 ===' && git branch --show-current 2>/dev/null && node --version" } ] } } - 重启 Claude 会话
- 观察 SessionStart 时的输出
验收:每次启动 Claude 都能看到 Hook 执行的输出 ✓
练习四:调用工作流 Skill 实现一个小功能
目标:安装一个工作流 Skill,完整走一遍需求实现流程
步骤:
- 创建一个简单的需求实现 Skill(参考
phase-4-expert/04-custom-skills.md) - 选择一个小需求(例如:给某个函数添加缓存)
- 通过 Skill 触发工作流
- 认真看每个门控点,不要跳过
- 确认技术方案后再让 Claude 开始编码
- 完成后执行验证
验收:
- 技术方案在编码前得到了你的确认
- 实现完成且验证通过
- 没有引入计划外的改动 ✓
练习五:多 Agent 并行任务分工
目标:理解多 Agent 的任务分工,感受并行执行的效率提升
步骤一:串行对比
- 选择一个项目模块(5-10 个文件)
- 逐一让 Claude 分析每个维度:
> 分析 src/payment/ 模块的代码质量问题 (等完成) > 分析 src/payment/ 模块的安全问题 (等完成) > 分析 src/payment/ 模块的测试覆盖情况 - 记录完成时间
步骤二:并行对比
/clear重新开始- 用一句话触发并行分析:
> 对 src/payment/ 模块进行全面分析, 请同时并行分析以下四个维度: 1. 代码质量(命名、复杂度、重复逻辑) 2. 安全问题(输入验证、敏感数据处理) 3. 测试覆盖(哪些场景缺少测试) 4. 外部依赖(是否有过时或不安全的依赖) - 对比完成时间
步骤三:主动设计任务分工
> 我需要重构支付流程,请帮我同时:
- 探索 src/payment/ 现有的支付实现
- 探索 src/order/ 中与支付相关的逻辑
- 查阅 src/api/ 中支付相关的接口定义
这三个可以并行进行,完成后汇总给我
(等 Claude 完成并行探索后)
> 基于以上探索结果,设计重构方案
验收:
- 观察到并行 Agent 启动(多个工具调用同时出现)
- 理解哪类任务适合并行、哪类必须串行
- 能主动设计任务分工 ✓
综合挑战:构建完整的自动化工作流
目标:配置一套从开发到提交的自动化流程
流程设计:
会话开始 → SessionStart Hook 输出当前环境信息
开发中 → IDE MCP 辅助代码导航
完成功能 → 代码审查 Skill 自查
提交代码 → /commit 生成规范 commit
会话结束 → Stop Hook 提示提交代码
步骤:
- 配置 SessionStart 和 Stop Hooks
- 连接 IDE MCP
- 实现一个小功能,全程使用以上工具
- 记录整个流程的体验和发现
反思题:
- 哪个环节最节省时间?
- 哪个环节还可以进一步优化?
- 有什么新的 Hook 使用场景?