Skip to content

子代理

子代理是一个特殊的会话:由主会话的 AI 创建,相当于替你向一个新会话发了条消息,它会像普通会话一样自动开始工作。子代理有独立的上下文和完整的工具能力,可以和主会话并行干活;你也能随时点进去看进度、自己发消息或暂停它。

子代理分两种:默认通用子代理(继承父会话的模型和全部工具)和自定义子代理(你自己定义提示词、模型、工具集)。

怎么用

在对话里让 AI 派子代理,例如:

  • 「派个子代理去审查 app/build.gradle.kts,把问题列出来」
  • 「创建两个子代理,一个研究数据库迁移方案,一个调研 UI 组件库选型」
  • 「派个只读调研 agent 去搞清登录流程」

AI 会先征求你同意(权限弹窗),创建后立刻返回,不阻塞主对话,子代理在后台自动开始工作。

内置的 Explore

首次启动会自动释放一个内置的 Explore 子代理到 ~/.aicode/agents/explore.md,开箱可用。

它用来做只读的代码库探索:搞清某个功能怎么实现的、某处逻辑在哪、某个改动要碰哪些文件。工具只给了 readFilelistsearchwebsearchwebfetchloadSkill——没有写文件和执行命令的工具,所以它不会改动任何东西,也不会触发权限弹窗。模型默认继承父会话,想给它换个便宜的模型,在 explore.md 里加 providermodel 即可。

这个文件只在不存在时释放,所以你改过的内容不会被 App 升级覆盖;删掉后下次启动会重新释放一份默认的。

自定义子代理

一个 .md 文件定义一个子代理,放在两处之一:

  • 全局~/.aicode/agents/<name>.md,跨项目共享,升级保留。
  • 项目级<项目根>/.aicode/agents/<name>.md,随工作区走,可以提交到 git。

同名定义项目级优先。文件格式是 YAML frontmatter 加正文,正文就是这个 agent 的系统提示词:

markdown
---
name: researcher
description: 只读调研:大范围搜代码、查资料、汇总结论,不改文件
provider: DeepSeek
model: deepseek-reasoner
reasoningEffort: high
tools: [readFile, list, search, websearch, webfetch]
disallowedTools: [Bash, terminal]
inject: [base, projectRules]
---
你是代码库调研专家。先用 search 定位入口,再用 readFile 逐层确认,
结论里必须给出 `文件路径:行号` 引用,不确定的地方明说未核实。

frontmatter 字段

字段必填说明
nameagent 名,派发时用它。省略则取文件名
description建议填什么时候该派这个 agent。这段会注入主代理的提示词,主代理靠它判断该不该派
provider提供商,写设置里看到的名称即可。省略则继承父会话
model模型名。省略则继承父会话
reasoningEffort思考强度:none / minimal / low / medium / high / xhigh / max
tools工具白名单。省略等于给全部工具,不是"没有工具"
disallowedTools工具黑名单,优先于白名单。支持 mcp__server__* 通配
inject要注入的提示词片段,见下表

工具名就写「设置 → 工具授权」里看到的那些(readFilewriteFileeditFileBashterminallistsearchwebsearchwebfetchtodomemoryloadSkillaskUserQuestionsendFileviewImagemanageMcp 等)。派子代理的工具永远会被剔除——子代理不能再派子代理。

inject 可选值

取值含义
base子代理专用的精简基线:工具用法、路径约定、安全边界。不含模式切换、结尾总结这些主代理专属规则
mainRules主代理的完整规则基线。需要子代理行为和主代理完全一致时用,比 base 费 token
skills可用技能清单,让子代理能加载技能
memory全局与项目记忆的摘要清单
projectRules项目规则(AGENTS.md / CLAUDE.md

省略 inject 等于 [base, skills, memory, projectRules]。写 inject: [none] 则只用 agent 自己的提示词,不注入任何额外内容。

MCP 工具不需要单独注入说明,工具集里包含 mcp__* 工具就能直接调用;不想给就用 disallowedTools: [mcp__*] 全禁掉。

派发时必须给足上下文

子代理看不到主会话的历史

你们聊过什么、主代理读过哪些文件、已经得出什么结论,子代理一概不知道。派发时给它的那段话就是它拥有的全部信息。

主代理的提示词已经要求它在派发时写清四件事:目标与完成标准、已知上下文(文件路径、已核实的结论、已排除的方向、你定下的选型)、边界(不该动哪些文件、不要提交)、期望的产出形式。

反方向也一样:主代理只能读到子代理的最后一条回复,中间过程和工具结果它拿不到。你自己点进子会话能看到完整过程,但主代理看不到。

在设置里查看

「设置 → 子代理」按「当前项目 / 全局」分组列出已定义的 agent。点行进详情可以看模型、工具集、注入项、定义文件路径和提示词正文;左滑可删除定义文件。

详情页是只读的,要改就直接编辑那个 .md 文件(可以让 AI 帮你写)。

主代理怎么知道该派哪个

已定义的 agent 会以清单形式注入主代理的系统提示词(只含名称和 description,不含提示词正文)。任务和某个 agent 对口时,AI 会按名字派发;名字写错会报错并列出可用的名字,不会悄悄退回成通用子代理。你也可以直接说「用 researcher 子代理去查 X」来指定。

和普通会话的区别

能力普通会话子代理会话
你查看 / 发消息 / 暂停支持支持,界面完全一样
AI 替你发消息不支持,只有你能发支持,创建它的 AI 可以替你发
独立上下文与完整工具支持支持
与主会话并行运行支持,可同时派多个

侧边栏里在哪找

侧边栏顶部有「会话」和「文件」两个标签页。子代理不单占一页,而是挂在它所属的会话下面:

  • 派生过子代理的会话,行尾会显示子代理数量和一个展开箭头。
  • 点箭头展开,子代理缩进列在下方(运行中的有绿色状态点),再点收起。
  • 点子代理项就切换过去,界面和普通会话一样,长按同样可以置顶、重命名、导出、删除。
  • 回主会话就在「会话」页点父会话。

没有子代理的会话不会出现展开箭头。

完成后会怎样

子代理跑完后,主会话会收到一条后台通知,主代理据此知道它结束了,然后可以读取它的最后输出。除了读取,AI 还能主动停止某个子代理(已产出的内容保留)、删除子代理会话,或者列出当前会话的全部子代理及状态。

限制

  • 最多同时运行 5 个。超限时创建会报错,需要等某个跑完或者先停掉一个。实际用起来通常 1 到 2 个就够,5 是硬上限而不是推荐值。
  • 子代理不能再派子代理。
  • 子代理和主会话共用同一套权限体系,需要授权的操作仍然会弹确认。权限弹窗是全局串行的,多个子代理同时请求授权会排队。想让某个 agent 完全不碰需授权的操作,用 tools 白名单只给只读工具。
  • 删除父会话时,它下面的所有子代理会话会一并删除。
  • 自定义子代理的定义在创建子会话时读取。改了 .md 文件对正在跑的子代理不生效,对之后新派的生效。

基于 GPL-3.0 协议开源