Claude Code 核心概念详解:代理、子代理、代理团队、工具、技能、插件、钩子

24 阅读16分钟

本文基于 Claude Code 官方文档整理,结合实际使用经验,系统梳理 Claude Code 的七大核心概念。无论你是刚开始使用还是想深入定制,这篇文章都能帮你建立完整的认知框架。

前言

Claude Code 是 Anthropic 推出的 CLI 编程工具,它不是简单的 AI 聊天框,而是一个具备自主行动能力的编程代理。理解它的核心概念,才能真正发挥它的能力。

本文将覆盖以下七个概念:

概念一句话谁来创建
代理Claude Code 本身,负责与你对话并执行任务Anthropic 内置
子代理独立完成特定任务的专家助手Anthropic 内置 + 可自定义
代理团队多个独立 Claude 实例协同工作,适合大型并行任务你发起,代理协调
工具代理能做的具体动作(读文件、改文件等)Anthropic 内置 + MCP 扩展
技能预设好的专业工作流,可用 /命令 或自然语言触发Anthropic 内置 + 可自定义
插件打包好的扩展包,可包含子代理、技能、钩子等你自己创建
钩子特定事件发生时自动执行的命令你自己配置

一、代理(Agent)—— Claude Code 的大脑

代理就是你正在交互的 Claude Code 本身。你在终端里跟它说话,它理解你的意图,然后调用各种工具、子代理和技能来完成任务。

它的职责:

  • 理解你说的话
  • 决定用哪些工具完成任务
  • 决定要不要启动子代理协助
  • 最终把结果返回给你

它的特点:

  • 始终在运行,你不需要手动启动
  • 拥有对话记忆(当前会话内)
  • 统一协调工具、子代理、技能的使用
你 ←→ 代理(Claude Code)
         ↓  ↓  ↓
        工具 子代理 技能

你只需要跟代理对话,剩下的事情它会自己安排。


二、子代理(Sub-agent)—— 派出去的专家

子代理是代理派出去独立完成特定任务的「专家助手」。它们在后台独立运行,不占用主对话的注意力,完成后把结果返回。

内置子代理

Claude Code 内置了 3 个主要子代理和若干辅助子代理:

主要子代理:

子代理使用模型专长什么时候启动
Plan继承主对话Plan mode 下的代码库研究和上下文收集(只读)进入 plan mode 时
ExploreHaiku(快速)搜索和分析代码库(只读)需要定位代码时
General-purpose继承主对话复杂多步任务(全工具权限)需要独立调研时

辅助子代理(自动调用,通常不需要你关注):

子代理用途
Bash在独立上下文中执行终端命令
statusline-setup配置状态栏
Claude Code Guide回答 Claude Code 功能相关的问题

自定义子代理

有三种方式创建自定义子代理:

方式一:/agents 交互命令(推荐)

在 Claude Code 中输入 /agents,按引导式界面操作即可。

方式二:Markdown 文件(持久化,可提交到项目仓库)

# 项目级
.claude/agents/<名称>.md

# 用户级
~/.claude/agents/<名称>.md

文件内容示例:

---
name: code-reviewer
description: Reviews code for quality and best practices. Use after code changes.
tools: Read, Glob, Grep
model: sonnet
---

你是高级代码审查员,关注代码质量、可读性和安全性...

Markdown 文件还支持更多可选字段:disallowedTools(禁用工具)、permissionMode(权限模式)、skills(可用技能)、hooks(子代理作用域钩子)、memory(持久内存,可跨会话积累知识)等。

方式三:--agents CLI 参数(临时,仅当前会话)

claude --agents '{
  "code-reviewer": {
    "description": "专门负责代码审查",
    "prompt": "你是高级代码审查员,关注代码质量和安全性",
    "tools": ["Read", "Grep", "Glob"],
    "model": "sonnet"
  }
}'

子代理运行流程:

主代理判断任务复杂 → 派出子代理
        ↓
子代理独立完成工作(后台运行)
        ↓
结果返回给主代理
        ↓
主代理整合结果给你

三、代理团队(Agent Teams)—— 多人协作的项目组

⚡ 这是一个实验性功能,需要手动开启。

代理团队是 Claude Code 最新推出的高级协作模式。与子代理不同,代理团队让多个完全独立的 Claude Code 实例组成团队并行工作。

子代理 vs 代理团队

先搞清楚它们的本质区别:

维度子代理代理团队
上下文共享主代理的上下文窗口每个队友独立上下文窗口
通信只能和主代理通信队友之间可直接通信
适合场景单步/有限步骤任务大型并行任务
Token 消耗较少较多(多个独立实例)
稳定性稳定实验性

简单理解:

  • 子代理 = 主代理派出去的助手,做完就回来汇报
  • 代理团队 = 组建了一个项目组,每个成员独立工作,还能互相沟通

启用方式

代理团队默认关闭,需要在 settings.json 中开启:

{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  }
}

或通过环境变量:

export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1

团队角色

角色说明
团队领导(Team Lead)主 Claude Code 会话,负责创建团队、分配任务、协调工作、汇总结果
队友(Teammates)独立的 Claude Code 实例,认领和执行任务,可彼此直接通信

协调机制

团队不是各干各的,有一套完整的协调机制:

机制说明
共享任务列表团队成员通过任务列表协调工作
任务依赖被阻塞的任务在依赖完成后自动解锁
消息邮箱队友间可通过 message(一对一)或 broadcast(广播)通信
文件锁防止多个队友同时认领同一任务

如何启动团队

用自然语言告诉 Claude Code 就行:

我在设计一个 CLI 工具,帮开发者追踪代码中的 TODO 注释。
创建一个代理团队从不同角度探索:
一个队友负责用户体验,一个负责技术架构,一个扮演"魔鬼代言人"

也可以指定团队规模和模型:

创建一个 4 人团队并行重构这些模块。每个队友使用 Sonnet 模型。

显示模式

{
  "teammateMode": "in-process"
}
模式说明要求
in-process队友在主终端运行,Shift+Down 切换任何终端都能用
tmux分屏显示每个队友需要安装 tmux
auto(默认)在 tmux 中时分屏,否则 in-process自动适配

常用快捷键(in-process 模式):

快捷键作用
Shift+Down切换到下一个队友
Enter查看队友会话
Escape中断队友当前任务
Ctrl+T切换任务列表

最佳实践

  • 给队友充足的上下文(队友不继承领导的对话历史)
  • 避免文件冲突:每个队友负责不同的文件
  • 每个队友分配 5-6 个任务为最佳平衡点
  • 先从研究/审查类任务开始,再做并行实现
  • 提前配置好权限设置,减少权限确认弹窗

当前限制

  • 不支持 /resume 恢复 in-process 队友
  • 每个会话最多一个团队,不能嵌套
  • 团队领导固定,不能切换
  • 分屏模式不支持 VS Code 集成终端和 Windows Terminal
  • Token 消耗显著增加(每个队友独立消耗)

四、工具(Tools)—— 大脑的双手

工具是代理(和子代理)能执行的具体操作能力。你不直接调用工具,代理自动判断并调用。

常用内置工具

工具作用使用规则
Read读取文件内容修改文件前必须先 Read
Write创建新文件直接创建,无需先 Read
Edit修改已有文件必须先 Read 再 Edit
Bash执行终端命令npm、git 等操作
Glob按模式查找文件支持 **/*.tsx 等模式
Grep搜索文件内容支持正则表达式
WebFetch获取和处理网页内容读取网页信息
WebSearch搜索网页搜索互联网信息
NotebookEdit编辑 Jupyter Notebook修改 .ipynb 文件
Task启动子代理代理内部调用

MCP 扩展工具

MCP(Model Context Protocol)是 Anthropic 制定的标准协议,让 Claude Code 通过工具接入外部服务(数据库、API 等)。

比如你可以通过 MCP 接入 MySQL 数据库,Claude Code 就能直接帮你查询和操作数据。MCP 工具的名称格式为 mcp__<server>__<tool>

限制工具

启动时可以限制代理能使用的工具:

# 禁止使用某些工具
claude --disallowedTools "Edit,Write"

# 只允许使用指定工具
claude --tools "Bash,Edit,Read"

五、技能(Skills)—— 预设的工作模板

技能是预设好的专业工作流,一个指令带动整套流程自动执行。

触发方式

方式一:斜杠命令(明确触发)
  你: /commit
  → 技能直接启动

方式二:自然语言(代理根据 description 字段匹配)
  你: "帮我提交代码"
  → 代理判断意图匹配 → 可能自动触发 /commit 技能

自然语言触发的可靠性取决于技能文件的 description 字段写得是否清晰。技能可以设置 disable-model-invocation: true 来禁止自然语言触发,也可以设置 user-invocable: false 让技能仅由 Claude 自动调用。

常用内置技能

技能命令作用适合场景
/commit自动生成 Git 提交信息并提交代码改完要提交时
/pdfPDF 的创建、合并、加密等全流程处理 PDF 文件时
/xlsxExcel 表格的读写、格式化处理 Excel 时
/pptx演示文稿的创建和编辑做 PPT 时
/frontend-design创建高质量 UI 组件和页面做前端界面时
/doc-coauthoring协作文档编写工作流写文档、规范时
/mcp-builder构建 MCP 服务器接入外部 API 时

自定义技能

技能文件存放位置:

位置作用范围
.claude/skills/<技能名>/SKILL.md当前项目
~/.claude/skills/<技能名>/SKILL.md你的所有项目

示例(.claude/skills/deploy/SKILL.md):

---
name: deploy
description: Deploys the project to production. Use when user asks to deploy or release.
allowed-tools: Bash
context: fork
agent: Explore
---

执行以下部署步骤:
1. npm run build
2. 上传到服务器
3. 重启服务

主要 frontmatter 字段

字段作用
name技能名称,成为 /命令名
descriptionClaude 根据此字段判断是否自动触发
allowed-tools技能激活时可免权限确认使用的工具
context设为 fork 则在隔离的子代理中运行
agentcontext: fork 时指定使用哪种子代理类型
model指定技能使用的模型
disable-model-invocation设为 true 则只能手动 /命令 触发
user-invocable设为 false 则从 / 菜单隐藏

/commit 技能执行流程示例

你: /commit
  ↓
技能启动
  ↓
工具(Bash): git diff 查看变更内容
  ↓
分析改动类型(fix / feat / chore 等)
  ↓
生成规范的提交信息
  ↓
工具(Bash): git commit 执行提交
  ↓
告诉你提交结果

六、插件(Plugins)—— 打包的扩展包

插件是一个完整的扩展包,把子代理、技能、钩子、MCP 工具等打包在一起,便于团队共享和复用。

没有团队协作或复杂定制需求时不需要使用。

插件能包含什么

插件可包含对应文件
技能skills/<名称>/SKILL.md
子代理agents/<名称>.md
钩子hooks/hooks.json
MCP 工具.mcp.json
LSP 语言服务器.lsp.json
默认设置settings.json

插件目录结构

my-plugin/
├── .claude-plugin/
│   └── plugin.json          # 插件清单(必需)
├── skills/
│   └── deploy/
│       └── SKILL.md         # 自定义 /my-plugin:deploy 技能
├── agents/
│   └── qa-expert.md         # 自定义 QA 子代理
├── hooks/
│   └── hooks.json           # 事件钩子配置
├── .mcp.json                # MCP 工具配置
├── .lsp.json                # LSP 语言服务器配置
└── settings.json            # 默认设置

插件中的技能名称带命名空间前缀,避免冲突,例如 /my-plugin:deploy

使用方式

# 加载插件
claude --plugin-dir ./my-plugin

# 加载多个插件
claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two

插件 vs 单独配置

不用插件(单独配置):
  自定义子代理  → .claude/agents/*.md
  自定义技能   → .claude/skills/*/SKILL.md
  钩子配置    → .claude/settings.json

用插件(打包配置):
  一个目录 → 子代理 + 技能 + 钩子 + MCP 全部打包
  团队共享:一行命令加载所有能力
  版本化管理:可发布到 GitHub 等代码仓库

七、钩子(Hooks)—— 自动触发的守卫

钩子是在特定事件发生时自动执行的命令,可以独立使用,不需要插件

配置位置

位置作用范围
~/.claude/settings.json你的所有项目
.claude/settings.json仅当前项目(可提交 git)
.claude/settings.local.json仅当前项目(不提交 git)

也可以在交互模式中用 /hooks 命令通过引导式界面管理,不需要手动编辑 JSON。

常用事件

官方共支持 17 种事件,以下为常用的:

事件触发时机
PreToolUse代理使用工具前
PostToolUse代理使用工具后
PostToolUseFailure工具调用失败时
UserPromptSubmit你提交消息时
PermissionRequest权限确认对话出现时
StopClaude 完成回复时
SubagentStart / SubagentStop子代理启动/结束时
SessionStart / SessionEnd会话开始/结束时
PreCompact上下文压缩前
ConfigChange配置文件变更时

钩子的三种类型

类型说明适用场景
type: "command"执行 Shell 命令运行 lint、格式化等
type: "prompt"使用 LLM 评估是否允许/阻止操作智能判断是否放行
type: "agent"启动有工具权限的子代理来验证需要读取文件等复杂验证

配置示例

每次代理修改文件后自动运行 lint 检查:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npm run lint"
          }
        ]
      }
    ]
  }
}

matcher 字段用于匹配工具名称,支持 | 分隔多个工具。


它们之间的关系

层级关系图

┌─────────────────────────────────────────┐
│              你(用户)                  │
└───────────────────┬─────────────────────┘
                    │ 对话 / 命令
                    ↓
┌─────────────────────────────────────────┐
│           代理(Agent)                  │
│        Claude Code 主体                 │
│   ┌──────────┬──────────┬───────────┐   │
│   │  工具    │  子代理   │   技能    │   │
│   │  Read   │  Plan    │ /commit   │   │
│   │  Edit   │  Explore │ /pdf      │   │
│   │  Bash   │  自定义   │  自定义   │   │
│   │  Glob   │  ...     │  ...      │   │
│   │  Grep   │          │           │   │
│   │  MCP... │          │           │   │
│   └──────────┴──────────┴───────────┘   │
│                                         │
│   钩子(自动触发,监听各类事件)          │
└────────────┬────────────────────────────┘
             │ 可扩展
     ┌───────┴───────┐
     ↓               ↓
┌──────────┐  ┌───────────────────────────┐
│  插件    │  │    代理团队(Agent Teams) │
│ 打包扩展 │  │  领导 ←→ 队友1            │
│          │  │        ←→ 队友2            │
│          │  │        ←→ 队友3            │
│          │  │  (独立实例,并行工作)      │
└──────────┘  └───────────────────────────┘

调用关系一览

代理                    →  使用  →  工具(直接调用)
代理                    →  派出  →  子代理(独立运行,共享上下文)
代理(作为领导)         →  组建  →  代理团队(独立实例,并行工作)
你(/命令 或自然语言)   → 经代理  →  触发技能
技能                    →  依赖  →  工具(技能内部用工具完成工作)
子代理                  →  也用  →  工具(子代理有自己的工具权限)
队友                    →  彼此  →  直接通信(不需经过领导)
钩子                    →  监听  →  事件(自动执行,无需手动触发)
插件                    →  打包  →  子代理 + 技能 + 钩子 + MCP + LSP

谁是"指挥官"

你(提需求)
  ↓
代理(理解需求,统一协调)
  ├─ 简单任务    → 直接用工具
  ├─ 复杂任务    → 派出子代理
  ├─ 大型并行任务 → 组建代理团队
  ├─ 专业任务    → 触发技能
  └─ 后台监控    → 钩子自动执行

实战场景

场景 1:修复简单 Bug

你: "帮我修复 src/auth.ts 里 login 函数的 bug"

Claude Code 内部:
  工具 Glob  → 找到 auth.ts 文件
  工具 Read  → 读取文件内容
  工具 Edit  → 修复 bug
  工具 Bash  → 运行测试验证
  → 告诉你修复完成

用到: 代理 + 工具

场景 2:添加新功能

你: "给用户管理模块添加批量导出功能"

Claude Code 内部:
  子代理 Explore → 搜索现有用户管理代码
  工具 Read      → 读取相关文件
  工具 Write     → 创建新的导出功能文件
  工具 Edit      → 修改现有文件加入导出入口
  工具 Bash      → 运行测试
  技能 /commit   → 提交代码

用到: 代理 + Explore 子代理 + 工具 + /commit 技能

场景 3:设计复杂系统架构

你: "我要添加支付功能,包括订单、支付、回调"

Claude Code 内部:
  进入 plan mode
  子代理 Plan    → 研究代码库,收集上下文信息
  代理           → 基于收集的信息设计支付系统架构方案
  你确认方案
  子代理 Explore → 查找现有代码中相关部分
  工具(系列)   → Write / Edit / Bash 实现各模块
  技能 /commit   → 提交完成版本

用到: 代理 + Plan 子代理 + Explore 子代理 + 工具 + 技能

场景 4:处理 PDF 报告

你: "/pdf""帮我把这几个文件合并成一个 PDF"

技能接管:
  根据技能配置,可能会进一步询问你的具体需求
  工具 Read  → 读取现有 PDF 内容
  工具 Bash  → 执行 PDF 操作命令
  工具 Write → 保存结果
  → 返回处理好的 PDF

用到: 技能 + 工具

场景 5:并行审查大型 PR(使用代理团队)

你: "这个 PR 比较大,帮我全面审查一下"

Claude Code 内部:
  代理(作为团队领导)→ 组建代理团队
  队友 1(安全审查员)→ 审查安全漏洞
  队友 2(性能审查员)→ 审查性能问题
  队友 3(测试审查员)→ 审查测试覆盖率
  三个队友并行工作,彼此通信
  领导汇总三方结果 → 给你完整审查报告

用到: 代理团队(领导 + 3 个队友)

场景 6:团队定制化工作流(使用插件)

需求: 团队统一的代码审查和部署流程

解决方案:创建团队插件

team-plugin/
├── .claude-plugin/plugin.json   # 插件清单
├── skills/deploy/SKILL.md       # 自定义 /team-plugin:deploy 技能
├── agents/qa-expert.md          # QA 子代理
├── hooks/hooks.json             # 文件修改后自动 lint
└── .mcp.json                    # 接入内部 API

加载:claude --plugin-dir ./team-plugin

用到: 插件(内含技能 + 子代理 + 钩子 + MCP)

场景 7:独立配置钩子

需求: 每次代理修改文件后自动运行代码格式化

在 .claude/settings.json 中添加:
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "npm run format" }
        ]
      }
    ]
  }
}

用到: 钩子(独立使用,无需插件)


自定义配置速查表

你想自定义配置方式位置
子代理/agents 命令(推荐)交互式界面
子代理Markdown 文件.claude/agents/<名称>.md
子代理CLI 参数(临时)--agents '{...}'
代理团队环境变量或 settings.jsonCLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
技能Markdown 文件.claude/skills/<名称>/SKILL.md
钩子/hooks 命令(推荐)交互式界面
钩子JSON 配置.claude/settings.json
MCP 工具JSON 配置~/.claude.json
插件创建目录 + 清单--plugin-dir 加载

你需要关注什么

概念你需要做的你不需要做的
代理和它对话,给清晰的需求不需要启动或管理
子代理知道它存在即可,会自动调用不需要手动触发(除非自定义)
代理团队大型并行任务时用自然语言发起简单任务不需要组建团队
工具了解有哪些能力不需要手动调用
技能/技能名 触发,或自然语言描述需求不需要了解内部实现
插件有团队复用需求时创建没有复用需求就不用管
钩子有自动化需求时配置没有自动化需求就不用管

一句话记忆法

代理     = Claude Code 本身(大脑)
工具     = 大脑的双手(Read / Edit / Bash / MCP...)
子代理   = 派出去的专家(Plan / Explore / General-purpose...)
代理团队 = 组建的项目组(多个独立 Claude 并行协作)
技能     = 预设的工作模板(/命令 或自然语言触发)
钩子     = 自动触发的守卫(事件发生时自动执行)
插件     = 打包好的扩展包(子代理 + 技能 + 钩子 + MCP + LSP)

信息来源:Claude Code 官方文档,部分内容来自实际使用观察。如有出入,以官方文档为准。