无限上下文的困局
假设你让Claude研究项目认证机制。它开始读取文件。大量文件。转眼间上下文已消耗5万token,而这些代码你只需要查阅而非记忆。
响应变慢了。成本增加了。当你想处理其他事务时,这些上下文依然占据着思维空间。
解决方案:子代理。启动专属代理在隔离上下文中处理脏活,返回摘要后自动消失,主会话保持清爽。
何为子代理
子代理是Claude的独立实例,具有以下特性:
- 专属上下文(不污染主会话)
- 可限制工具权限(仅读/仅bash等)
- 可选用不同模型(简单任务用Haiku,复杂任务用Opus)
- 支持前台(阻塞式)与后台(并行)执行
将其视为专业助理:分配任务后独立工作,完成后汇报结果。
内置子代理
Claude Code预装多个子代理:
| 代理类型 | 模型 | 用途 | 工具权限 |
|---|---|---|---|
| Explore | Haiku | 代码检索分析 | 仅读 |
| Plan | 继承主模型 | 规划阶段调研 | 仅读 |
| general-purpose | 继承主模型 | 复杂多步任务 | 全权限 |
| Bash | 继承主模型 | 独立环境执行命令 | 仅Bash |
| Claude Code指南 | Haiku | 解决Claude Code相关问题 | 文档查询 |
其中Explore最实用。当Claude需要检索代码库时,会启动Explore代理疯狂读取文件,处理后仅返回相关部分。
启动子代理
通过REPL(常规对话)
直接使用自然语言指令:
使用子代理研究缓存系统原理
启动Explore代理查找所有API端点
请并行研究认证机制,我继续处理其他任务
Claude能理解这些请求并调用Task工具启动对应子代理。
通过Skill技能
在技能配置中通过context: fork指定隔离执行:
---
name: deep-analysis
description: 架构深度分析
context: fork
agent: Explore
---
进行项目全架构分析
生成包含以下内容的报告:
- 目录结构
- 核心依赖项
- 识别到的设计模式
context: fork使技能在子代理运行,agent: Explore指定代理类型。
指定代理类型启动
如需精确控制:
使用Explore代理映射项目结构
使用general-purpose代理重构支付模块
使用Bash代理运行完整测试套件
前台与后台执行
前台(阻塞模式)
默认子代理前台执行,主会话等待结果:
研究速率限制实现原理
[Claude启动子代理,等待,返回结果]
适合需要即时结果的场景。
后台(并行模式)
两种方式启动后台子代理:
1. 显式请求:
请后台研究缓存系统,我先检查其他内容
2. 运行中按Ctrl+B:
子代理运行时按Ctrl+B转为后台执行:
> 分析项目所有测试用例
[开始执行...]
[按下Ctrl+B]
> 现在请解释这个文件的功能
[主会话继续,分析任务后台运行]
查看后台任务
使用/tasks命令查看运行状态:
/tasks
显示所有后台任务的ID、状态和进度。
子代理交互
监控进度
前台子代理实时显示进度(读取文件/执行命令)。后台任务通过/tasks查看状态,完成时自动通知结果。
追加指令
运行中补充要求:
注意:忽略测试文件,只分析生产代码
Claude会尝试将新要求传递给子代理。
终止子代理
停止后台任务:
停止分析任务
取消当前运行中的子代理
或通过/tasks按ID取消特定任务。
恢复会话
子代理会话历史在任务周期内保留。可延续之前进度:
继续先前认证分析
并新增授权机制检查
Claude会恢复包含之前上下文的子代理。
创建自定义子代理
使用/agents命令(推荐)
/agents
选择Create new agent,设置作用域(用户/项目),描述需求后自动生成配置文件。
手动创建
在.claude/agents/(项目)或~/.claude/agents/(全局)创建Markdown文件:
---
name: security-scanner
description: 主动扫描代码漏洞,尤其认证/数据处理变更后执行
tools: Read, Grep, Glob
model: opus
---
你是一名安全专家。执行以下检查:
- SQL注入风险
- XSS漏洞
- 硬编码密钥
- 输入验证不足
- 脆弱依赖项
按严重等级报告:紧急>高危>中危>低危。
禁止修改代码,仅报告结果。
配置参数说明
| 字段 | 必填 | 说明 |
|---|---|---|
name | 是 | beiden(仅小写字母和连字符) |
description | 是 | 触发条件(Claude读取该描述) |
tools | 否 | 允许工具(默认全权限) |
disallowedTools | 否 | 禁用工具 |
model | 否 | haiku/sonnet/opus/inherit |
permissionMode | 否 | 权限处理模式 |
skills | 否 | 预置技能注入 |
hooks | 否 | 生命周期钩子 |
权限模式
| 模式 | 行为 |
|---|---|
default | 常规权限询问 |
acceptEdits | 自动接受文件编辑 |
dontAsk | 自动拒绝非明确指令 |
bypassPermissions | 跳过所有权限检查(危险) |
plan | 只读模式 |
示例:只读代理
---
name: code-reader
description: 仅分析代码不执行修改
tools: Read, Grep, Glob
disallowedTools: Write, Edit, Bash
permissionMode: plan
---
分析目标代码
禁止建议修改,仅描述发现内容
示例:测试代理
---
name: test-runner
description: 执行测试并报告。代码变更后使用
tools: Bash, Read
model: haiku
---
1. 执行:`uv run pytest -x --tb=short`
2. 发现失败时读取相关文件
3. 报告:
- 通过测试数
- 失败测试数
- 各失败详情(文件/实训线/错误信息)
禁止修复测试,仅报告结果
典型应用场景
1. 代码库调研
使用Explore代理理解通知系统工作原理
Explore代理读取必要文件后仅返回摘要,不污染主会话。
2. 并行分析
并行执行以下研究:
- 认证机制
- 支付系统
- 邮件发送逻辑
Claude同时启动三个子代理分别执行。
3. 后台测试
后台运行测试,我继续开发新功能
无需等待,测试通过/失败时自动提醒。
4. 隔离代码审查
使用子代理安全检查近期变更
在独立上下文中完成审查,反馈不干扰主会话。
5. 安全重构
---
name: safe-refactor
description: 带验证的重构
tools: Read, Edit, Bash
hooks:
PostToolUse:
- matcher: "Edit"
hooks:
- type: command
command: "uv run pytest -x"
---
每次编辑后自动触发测试。
子代理vs技能:如何选择
| 需求场景 | 选用方案 |
|---|---|
| 主上下文中可复用指令 | 技能 |
| 产生大量输出的任务 | 子代理 |
| 限制工具权限的操作 | 子代理 |
| 独立并行工作 | 子代理 |
| 需可视化步骤的过程 | 技能 |
| 无需记忆的调研 | 子代理 |
二者可组合使用:通过context: fork的技能会启动子代理。
限制条件
- 不可嵌套:子代理无法启动下级子代理
- 后台权限:后台任务自动拒绝非预授权操作
- 会话级持久:子代理上下文仅限当前会话
高级技巧
禁用特定子代理
在settings.json中配置:
{
"permissions": {
"deny": ["Task(Explore)", "Task(自定义代理)"]
}
}
提前压缩
子代理默认在上下文达95%时自动压缩,可调整阈值:
export CLAUDE_AUTOCOMPACT_PCT就是超量了空]=50
查看执行记录
子代理日志存储于:
~/.claude/projects/{project}/{session}/subagents/agent-{id}.jsonl
用于调试或审计。
禁用后台任务
如需全阻塞式执行:
export CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1
总结
子代理是扩展Claude Code应用边界而不引爆上下文的方案。它们承担脏活、保持主会话清洁、支持并行执行。
适用于:代码调研、分析任务、测试执行等产生大量临时输出的场景。可通过创建定制代理实现带特定限制的重复任务。
组合运用技能(执行内容)+子代理(执行环境)+钩子(验证时机),可以对Claude的工作流程实现精细化控制。
精简版:子代理是Claude的隔离实例,适用于专项任务。保持上下文清洁,支持并行执行(Ctrl+B),自定义代理存储在.claude/agents/。使用/tasks监控,/agents管理。
官方文档:子代理 - Claude Code文档
本文原文为西班牙语,借助AI翻译。