无限上下文的困局

假设你让Claude研究项目认证机制。它开始读取文件。大量文件。转眼间上下文已消耗5万token,而这些代码你只需要查阅而非记忆。

响应变慢了。成本增加了。当你想处理其他事务时,这些上下文依然占据着思维空间。

解决方案:子代理。启动专属代理在隔离上下文中处理脏活,返回摘要后自动消失,主会话保持清爽。

何为子代理

子代理是Claude的独立实例,具有以下特性:

  • 专属上下文(不污染主会话)
  • 可限制工具权限(仅读/仅bash等)
  • 可选用不同模型(简单任务用Haiku,复杂任务用Opus)
  • 支持前台(阻塞式)与后台(并行)执行

将其视为专业助理:分配任务后独立工作,完成后汇报结果。

内置子代理

Claude Code预装多个子代理:

代理类型模型用途工具权限
ExploreHaiku代码检索分析仅读
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翻译。