一、Claude Code 核心能力剖析
Claude Code 的诞生引领了 AI Coding 领域的技术范式,先后定义了 Skills、PTC 等前沿技术理念,推动了 AI Coding 技术的加速发展。包括 Cursor 在内的众多产品都在 Follow 其产品设计,非常值得我们借鉴和学习。
1.1 Claude Code 是什么?
Claude Code 的产品初衷——更好地发挥出模型的能力!
Claude Code 具有多种产品形态:
- TUI:交互式终端,低开销占用系统资源使用 Agent
- Headless Mode:非交互式,便于批处理脚本集成
- Agent SDK:基于 Claude Code 进行二次开发,快速享受最前沿的 Agent 能力设计

1.2 核心能力剖析
1.2.1 Command
通俗理解:Command 就是一个快捷方式,将预置的一段提示词发送至对话中。

Command 本质上是一个存放在指定位置的 Markdown 文件,通过 FrontMatter 定义配置属性(名称、描述等)。配置文件可存储在不同位置,对应不同的生效范围。
Claude Code 的命令分为两类:
1. 内置命令(/model、/help、/clear 等)
全部打包在一个压缩后的单文件 bundle 中:
~/software/node-v18.18.0-darwin-x64/lib/node_modules/@anthropic-ai/claude-code/cli.js
所有内置命令的代码都在里面,没有独立的命令文件。
2. 自定义命令
存放在以下目录:
| 级别 | 路径 | 说明 |
|---|---|---|
| 项目级 | <项目>/.claude/commands/ |
仅当前项目可用 |
| 用户级 | ~/.claude/commands/ |
所有项目可用 |
在这些目录下创建 .md 文件即可定义自己的斜杠命令。例如创建 ~/.claude/commands/my-cmd.md,就能在任何项目中使用 /my-cmd。

自定义扩展实践
你可以从日常任务中提取共性规则,整理为规范的 SOP 流程,并用自然语言描述。也可以借助大模型来帮助整理。
示例:git-diff-desc 命令
整理前,需要每次手工输入提示词:
分析当前Git分支与Master分支代码差别,总结100字左右的摘要给我。
整理后,创建为标准 Command 文件:
---
name: git-diff-desc
description: 分析当前Git分支与Master分支代码差别,总结100字左右的摘要给我
---
分析当前Git分支与Master分支的代码差异,并生成一段简洁的中文摘要。
## 执行步骤
1. 使用 `git rev-parse --abbrev-ref HEAD` 获取当前分支名称
2. 使用 `git merge-base HEAD master` 找到当前分支与 master 的共同祖先
3. 使用 `git diff master...HEAD --stat` 查看变更文件概览
4. 使用 `git diff master...HEAD` 查看具体代码差异
5. 使用 `git log master..HEAD --oneline` 查看当前分支的提交记录
## 输出要求
- 用中文输出
- 摘要控制在 100 字左右
- 包含以下要点:
- 当前分支名称
- 主要变更了哪些模块/文件
- 变更的核心内容(新功能、bug 修复、重构等)
- 变更的影响范围
- 格式简洁,一段话概括即可
1.2.2 Subagent
Subagent 是 Claude Code 中专门用于处理特定任务的子代理,每个 Subagent 拥有独立的上下文窗口、系统提示词和工具权限。通过合理使用,可以显著改善复杂任务的处理能力。
简单理解:Claude Code 为主 Agent 配置了多个"工具人",从关注过程转变为关注结果。
内置 Subagent 类型
| Subagent | 模型 | 工具权限 | 用途 |
|---|---|---|---|
| Explore | Haiku(快速低延迟) | 只读(无 Write/Edit) | 文件发现、代码搜索、代码库探索 |
| Plan | 继承主对话 | 只读(无 Write/Edit) | Plan Mode 下的代码库研究 |
| general-purpose | 继承主对话 | 所有工具 | 复杂研究、多步骤操作、代码修改 |
| claude-code-guide | — | — | Claude Code 使用指南 |
各 Subagent 详细说明:
-
Explore:当 Claude 需要搜索或理解代码库而不进行更改时,会委托给 Explore,使探索结果保持在主对话上下文之外。调用时可指定彻底程度:
quick(快速查找)、medium(平衡探索)、very thorough(全面分析) - Plan:在 Plan Mode 下,Claude 需要理解代码库时会委托给 Plan Subagent。可防止无限嵌套(Subagent 无法生成其他 Subagent),同时收集必要上下文
- general-purpose:当任务需要探索和修改、复杂推理或多个相关步骤时,Claude 会委托给 general-purpose
除了内置 Subagent,用户还可以创建自定义 Subagent,自行配置提示词、工具限制、权限模式、Hooks 和 Skills。

Subagent 的作用
1)处理更长程任务
在大模型存在上下文长度限制的前提下,Claude Code 将"大任务拆小任务",把原本只能塞进一个上下文里的信息拆分到多个子上下文中分别处理,从而在整体上突破单一上下文的实际可用上限,提升可处理任务的复杂度。
2)提升处理效率
Claude Code 可以同时唤起多个 Subagent 并行处理同一任务,并将不同 Subagent 的处理结果进行汇聚和总结,从而提升任务处理效率。
典型示例:代码库搜索时,主 Agent 自动唤起多个 Subagent 分别对不同代码目录进行并行搜索,最后聚合结果形成最终输出。
自定义 Subagent 配置
Subagent 由一个 Markdown 配置文件定义,包含 FrontMatter(name、description、model、color、tools)和 System Prompt。
配置路径:.claude/agents/<agent-name>.md
示例:hutool-check — 扫描项目代码,找出可用 Hutool 替代的地方
---
name: hutool-check
description: >
Use this agent when analyzing Java project code to find utility
classes and code snippets that can be replaced with Hutool equivalents.
Examples:
<example>
Context: User wants to optimize Java utility usage
user: "检查项目中哪些工具类可以用 Hutool 替代"
assistant: "I'll use the hutool-check agent to scan the project."
</example>
<example>
Context: User is reviewing custom utility code
user: "这些自定义的 StringUtils 能不能用 Hutool 代替"
assistant: "I'll use the hutool-check agent to analyze and suggest replacements."
</example>
model: sonnet
color: green
tools: ["Read", "Grep", "Glob"]
---
你是一个 Java 项目工具类优化专家,专注于识别项目中可以被 Hutool 替代的自定义工具类和代码片段。
**核心职责:**
1. 扫描项目中以 Util/Utils/Helper/Tool 结尾的自定义工具类
2. 识别代码中可被 Hutool 方法替代的片段
3. 给出具体的 Hutool 替代方案和写法示例
**扫描重点:**
- 字符串处理(判空、截取、拼接、转换)
- 集合操作(判空、转换、过滤、分组)
- 日期时间处理(格式化、解析、计算)
- 文件/IO 操作(读写、拷贝、遍历)
- Bean 拷贝与属性操作
- 加密解密(MD5、AES、RSA)
- HTTP 请求、JSON 处理、正则匹配
- 类型转换、唯一 ID 生成
**Hutool 工具类映射:**
| 工具类 | 用途 | 工具类 | 用途 |
|--------|------|--------|------|
| StrUtil | 字符串 | CollUtil | 集合 |
| DateUtil | 日期 | FileUtil | 文件 |
| BeanUtil | Bean | Convert | 类型转换 |
| ReflectUtil | 反射 | SecureUtil | 加密 |
| HttpUtil | HTTP | JSONUtil | JSON |
| ReUtil | 正则 | IdUtil | ID 生成 |
| MapUtil | Map | ObjectUtil | 对象 |
| NumberUtil | 数字 | ArrayUtil | 数组 |
**执行流程:**
1. 检查 pom.xml/build.gradle 是否已引入 Hutool 依赖
2. 搜索自定义工具类,分析方法功能
3. 扫描代码中可替代的模式
4. 匹配 Hutool 对应方案
**输出格式:**
### 1. 可替代的自定义工具类
| 自定义工具类 | 文件路径 | 方法 | Hutool 替代方案 | 替代写法示例 |
|---|---|---|---|---|
### 2. 可优化的代码片段
| 文件路径:行号 | 当前写法 | Hutool 替代写法 | 涉及 Hutool 类 |
|---|---|---|---|
### 3. 依赖配置建议
如未引入 Hutool,给出 Maven/Gradle 依赖配置。
### 4. 总结
- 可替代项数量
- 优先级建议(收益最大、风险最低的优先)
- 兼容性注意事项
如何唤起 Subagent
| 方式 | 说明 | 示例 |
|---|---|---|
/agents 命令 |
列出所有可用 Agent,选择启动 | 输入 /agents,选择 hutool-check
|
| 斜杠命令直接调用 | 通过 Agent 名称触发 | /hutool-check |
| 自然语言自动触发 | 对话匹配 description 中的 example 时自动调用 | "检查项目中哪些工具类可以用 Hutool 替代" |
| 对话中显式请求 | 在对话中提到 Agent 名称 | "用 hutool-check 帮我扫一下项目" |
最常用的方式是前两种:
/agents菜单选择 或/hutool-check直接调用。
主 Agent 与 Subagent 的上下文隔离机制
Claude Code 主 Agent 与 Subagent 采用相互隔离的上下文,目的是避免上下文污染。
1)发起任务
主 Agent 通过 Task 工具调用 Subagent,调用时自动生成以下参数:
| 参数 | 作用 |
|---|---|
description |
描述本次任务,主要用于 UI 展示 |
prompt |
给 Subagent 指派的具体任务 |
subagent_type |
具体的 Subagent 标识 |
2)返回任务结果
Subagent 执行完成后,以 prompt 作为第一条输入消息,将模型生成的最后一条消息作为 Task 工具的返回结果给到主 Agent。主 Agent 不关心 Subagent 的执行过程。
3)共享更多上下文
与分布式系统的设计思路一致,若不同 Subagent 之间需要共享更多数据,可以通过写入文件并传递文件路径的方式实现,避免模型处理过多的上下文内容,提升任务执行效果。
1.2.3 Skills
Skill 是 Claude Code 中将专业知识打包成可复用功能的机制,每个 Skill 包含一个 SKILL.md 文件,其中包含 Claude Code 在对应场景时读取的指令。
每个 Skill 本质上是一个文件夹,核心是 SKILL.md,里面用结构化方式描述:技能名称、解决什么任务、需要哪些步骤/脚本/资源,以及调用时应遵循的规则。
{skill-name}/
├── SKILL.md # 必需:主文件,包含 Skill 定义
├── reference.md # 可选:详细参考文档
├── examples.md # 可选:使用示例
├── scripts/ # 可选:辅助脚本
│ └── helper.py
└── templates/ # 可选:模板文件
└── template.txt
常见 Skills 分类
代码质量类
| 名称 | 用途 |
|---|---|
code-review |
审查代码规范、潜在 bug、性能问题 |
security-check |
扫描 SQL 注入、XSS、硬编码密码等安全隐患 |
dead-code-finder |
查找未使用的类、方法、变量、import |
exception-audit |
检查异常处理是否规范(吞异常、空 catch 等) |
架构分析类
| 名称 | 用途 |
|---|---|
dependency-analyzer |
分析 Maven/Gradle 依赖冲突、过期版本、冗余依赖 |
api-doc-gen |
扫描 Controller 层,生成接口文档 |
sql-review |
审查 MyBatis XML / JPA 中的 SQL 性能问题(全表扫描、缺索引等) |
layer-check |
检查分层架构是否合规(Controller 不直接调 Dao 等) |
测试相关类
| 名称 | 用途 |
|---|---|
test-gen |
为指定类自动生成单元测试(JUnit5 + Mockito) |
test-coverage |
分析哪些核心方法缺少测试覆盖 |
Skill 加载机制:渐进式披露
Claude Code 在对话前会先读取所有 Skill 的名字和简短描述,匹配当前任务是否适合用某个 Skill;只有匹配成功时,才按需加载该 Skill 的详细说明和脚本,这就是所谓的"渐进式披露"。
Skill 示例:design-pattern
功能:识别代码中适合引入设计模式的场景。
---
name: design-pattern
description: >
Use this skill when the user asks to analyze Java code for design
pattern opportunities, mentions "设计模式", "代码坏味道", "重构",
"if-else太多", "代码结构优化", or wants to identify code smells
and refactor with appropriate patterns.
allowed-tools: Read, Grep, Glob
---
# Java 设计模式识别与重构建议
识别 Java 项目代码中的坏味道(Code Smell),推荐合适的设计模式进行重构。
不过度设计,只在确实能提升可读性、可维护性、可扩展性时才建议引入。
## 适用场景
- 项目代码中存在大量 if-else / switch-case
- 对象创建逻辑复杂或散落各处
- 类职责过重,违反单一职责原则
- 多处重复的流程骨架,仅细节不同
- 需要对对象层层包装增强功能
- 一个对象变化需通知多个依赖方
## 坏味道 → 模式映射
| 代码坏味道 | 推荐模式 |
|---|---|
| 大量 if-else / switch-case 分支 | 策略模式、状态模式 |
| 对象创建逻辑复杂或散落各处 | 工厂模式、建造者模式 |
| 类职责过重,多种不相关逻辑 | 外观模式、中介者模式 |
| 多处重复流程骨架,仅细节不同 | 模板方法模式 |
| 需要层层包装增强功能 | 装饰器模式 |
| 对象变化需通知多个依赖方 | 观察者模式 |
| 需要兼容不同接口的实现 | 适配器模式 |
| 全局唯一实例管理混乱 | 单例模式(结合 Spring) |
| 复杂对象树形结构处理 | 组合模式 |
| 需要撤销/回滚操作 | 命令模式、备忘录模式 |
## 分析原则
1. **不过度设计** — 只有明确收益时才建议引入
2. **结合 Spring 生态** — 优先利用 Spring 已有支持(如依赖注入天然支持策略模式)
3. **考虑团队成本** — 评估引入后的学习成本和维护复杂度
4. **渐进式重构** — 优先影响范围小、风险低的改动
## 执行步骤
1. 扫描项目结构,了解整体架构和分层
2. 逐模块分析代码,识别坏味道
3. 匹配适合的设计模式
4. 评估引入收益和风险
5. 按格式输出重构建议
## 输出格式
### 1. 优化点总览
| 序号 | 文件路径 | 代码坏味道 | 推荐模式 | 收益评估 | 优先级 |
|---|---|---|---|---|---|
### 2. 重构详情(每个优化点)
- **当前问题**:现有代码的问题描述
- **推荐模式**:模式名称及选择理由
- **重构前**:关键代码片段
- **重构后**:引入模式后的代码示例
- **影响范围**:涉及哪些类需要改动
### 3. 总结
- 可优化点数量
- 按优先级排序的重构路线图
- 风险点提示
Skill 与 Command 的区别
Claude Code 并没有以 Command 形式展示 Skill,但支持在输入框中直接唤起。这说明 Claude Code 期望 Skill 的加载不需要用户关注,而是自动加载。
其中 <available_skills/> 标签包含了可加载的 Skill 名称和描述信息,模型会根据这些信息判断何时以及如何调用该工具进行 Skill 加载。
1.2.4 Hooks
Hooks 是 Claude Code 提供的接入 Agent 推理循环过程的一种能力,可以在 Claude Code 生命周期的不同阶段执行用户配置的脚本。Hooks 为 Claude Code 的行为提供了可预测的确定性,确保某些操作一定会发生,而不是依赖于让大模型自行决定。
常见用法:
- Agent 操作审计
- 用户输入改写
- 工具执行权限确认
- Agent 任务完成通知
Hook 示例
以下是一个 PostToolUse 类型 Hook,在 Edit 或 Write 工具调用后,自动对 .ts 文件执行 Prettier 格式化:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path' | { read file_path; if echo \"$file_path\" | grep -q '\\.ts$'; then npx prettier --write \"$file_path\"; fi; }"
}
]
}
]
}
}
Hook 事件一览
核心事件(最常用)
| Hook 事件 | 触发时机 | 用途 |
|---|---|---|
PreToolUse |
Claude 生成工具参数后、执行工具之前 | 最强大的 hook,可拦截/修改/放行工具调用。用于安全策略、文件保护、参数修正 |
PostToolUse |
工具执行成功之后 | 接收工具输入和返回结果,用于日志记录、结果后处理、触发下游操作 |
Stop |
Claude 认为回答结束时 | 用于最终检查、生成报告、自动格式化等收尾工作 |
SubagentStop |
子代理完成时 | 管理子代理生命周期、处理子代理结果(v1.0.41+) |
Notification |
Claude 发送通知时(如请求权限、需要用户输入) | 集成外部通知系统、自定义提醒方式 |
用户交互事件
| Hook 事件 | 触发时机 | 用途 |
|---|---|---|
UserPromptSubmit |
用户提交提示词时 | 预处理用户输入、自动补充上下文、输入校验 |
PermissionRequest |
Claude 请求工具使用权限时(v2.0.45+) | 自定义权限审批流程 |
会话生命周期事件
| Hook 事件 | 触发时机 | 用途 |
|---|---|---|
SessionStart |
会话开始时 | 初始化环境、加载上下文、设置变量 |
SessionEnd |
会话结束时 | 清理资源、记录日志、生成会话摘要 |
Setup |
通过 --init/--init-only/--maintenance 启动时(v2.1.10+) |
仓库初始化、维护任务 |
其他事件
| Hook 事件 | 触发时机 | 用途 |
|---|---|---|
PreCompact |
上下文压缩之前 | 自定义压缩策略、保留关键信息 |
ConfigChange |
配置变更时 | 响应配置变化、动态调整行为 |
PreToolUse 特别说明(最强大)
它是唯一能控制执行流程的 Hook:
| 返回值 | 效果 |
|---|---|
allow |
放行,跳过用户确认直接执行 |
deny |
拦截,阻止工具执行 |
ask |
交给用户决定 |
返回 updatedInput
|
修改工具参数后继续执行(v2.0.10+) |
exit code 2 |
阻止执行,并将 stderr 信息反馈给 Claude |
可匹配的工具名:Bash、Edit、Write、Read、Glob、Grep、Task、WebFetch、WebSearch 以及所有 MCP 工具。
Hook 配置位置
| 级别 | 路径 | 说明 |
|---|---|---|
| 全局 | ~/.claude/settings.json |
所有项目生效 |
| 项目级 | .claude/settings.json |
仅当前项目生效 |
| 组件级 | Skill / Agent 的 frontmatter 中 | 仅在该组件激活时生效 |
创建 Hook
在 Claude Code 中创建 Hook 的最快方法是通过 /hooks 交互式菜单。

1.3 技术对比与选型决策
Hooks 能力相对容易理解,对于外部系统集成是第一选择。
但很多人在使用 Command、Subagent、Skills 时存在使用困惑,比如:
- 代码提交功能既可以用
git-committerSubagent,也可以定义git-commitCommand - 节省上下文占用,Subagent 和 Skills 都能达到效果
因为都是对上下文中的提示词进行管理,所以容易产生技术决策问题。
1.3.1 通俗理解

- Command:是"人"给 Agent 下达指令,指令通常是"任务描述"和"任务要求"
- Subagent:主 Agent 通过 Task 工具唤起 Subagent"工具人"工作,提示词配置的是"人设描述"、"价值观"
- Skills:主子 Agent 进行工作的"指导方针"
- CLAUDE.md(AGENTS.md):长期记忆文件,包含"价值观"、"红线"、"员工手册"
Story 辅助理解相互关系:
- 用户通过 Command 让 Subagent 加载 Skill 完成某个任务
- Subagent 自动判断一个任务需要加载特定 Skill 来完成
- 多个 Subagent 都可以加载 Skill,如果 Skill 不够通用可以直接设置给 Subagent
- 常用的 Agent 执行准则可以放到 AGENTS.md 当中
1.3.2 特性对比
对 Command、Subagent 以及 Skill 三种特性的功能项对比:
