声明: 本文档仅代表个人使用体验及尝试结论,不构成对 Trae 框架的官方判定。实际情况以官方文档及框架行为为准。

当前 SubAgent 相关基建总览

规则层(rules/)

文件

作用

skill-routing-and-execution-path.md

定义 SubAgent Dispatch 入口:M 路径提供 subagent-driven-development 作为 executing-plans 的备选

forced-escalation-guardrails.md

定义不得由主 agent 擅自 S 路径处理的场景

技能层(skills/)

技能

定位

触发方式

subagent-driven-development

将实现计划拆分为独立任务,分配给子 agent 执行,控制器做两阶段审查

writing-plans 输出推荐,或用户显式调用

dispatching-parallel-agents

将 2+ 个独立只读分析任务并行分配给子 agent

由主 agent 在执行流程中识别并调用

discovering-subagent-capabilities

运行时发现当前环境有哪些子 agent 可用

requesting-code-review 等技能内部调用,但主 agent 在委派决策前不会主动调用它来了解子 agent 能力

当前 M 路径流程图(简化)

writing-plans
  └── executing-plans (耦合任务/无子agent)
      └── subagent-driven-development (独立任务/有子agent)
            └── 逐任务: 分派 implementer → 接收结果 → 两阶段审查 → 验证

已做的优化努力

Choice Rule(M 路径选择标准)

新增选择标准,试图让主 agent 在两种执行模式间做出理性决策:

Prefer executing-plans when tasks are tightly coupled or the environment lacks reliable implementation subagents. Prefer subagent-driven-development when tasks are mostly independent and implementation subagents are available.

分派入口补全

  • dispatching-parallel-agents 在 Skill Routing Table 中独占一行

  • Subagent Dispatch 在 routing 规则中被单独列为一节,并加入 M/L 执行中的接入注记

dispatching-parallel-agentssubagent-driven-development 存在职责边界模糊:前者面向只读并行分析,后者面向实现性任务的子 agent 分派。两者均涉及"分派"行为,但使用场景不同,暂未合并。

Fast-Track Assessment(子代理简化分类)

subagent-driven-development 内部,提供一个简化的 T-Shirt Sizing 用于决定是否跳过独立审查代理:

  • Low Risk (S): 纯文档/样式微调 → Fast-Track(跳过独立审查)

  • Normal Risk (M/L): 功能逻辑 → Standard Flow(两阶段审查)

两阶段审查控制器

控制器按顺序执行 specs 合规性审查和代码质量审查,确保子 agent 输出不仅正确且符合项目规范。


未解决的局限性

核心矛盾:主 agent 优先自我执行

目前存在一个根本性的行为问题:

即使规则和触发条件都满足,主 agent 依然优先自己完成,而非委派给子 agent。

具体表现为:

条件

期望行为

实际行为

用户描述需要多项独立实现的任务

主 agent 自动拆分为子任务并委派

主 agent 独立串行执行

触发了 dispatching-parallel-agents 的匹配描述

主 agent 调用该技能做并行分派

主 agent 自己执行分析

触发条件满足、对应 agent 也存在

路由到专项 agent

除非用户显式说"调用某 agent 去做"

所有条件同时满足:提示词隐含并行信号、有对应专项 agent、技能描述被匹配

自主分派并并行执行

仍独立串行执行,除非用户显式指定"拆分任务并委派"

委派行为无法通过规则固化

规则(rules)和技能(skills)的触发机制是建议性的,而非强制性的:

  • alwaysApply: true 仅保证规则内容被注入上下文,即使改用更强硬的语气(如 "MUST delegate"),仍无法覆盖 agent 的内部决策

  • 技能描述匹配仅提高被调用的概率

  • 最终"是否委派"的决策权完全在主 agent 的内部推理中,规则无法强制执行委派行为

上下文依赖——新会话中归零

当用户纠正主 agent 的行为后,当前会话中 agent 能够"反思"并改进。但在新会话中,无上下文的条件下,上述所有问题会重新出现

  • agent 不记得上次项目的协作模式

  • 每条规则的 load 是独立的,agent 不会从历史记忆中学习"应当委派"的模式

  • 核心的记忆(Core Memory)系统只存储用户偏好和技术约定,不存储行为模式历史,因此在框架支持之前,无法通过 Core Memory 实现跨会话的委派行为一致性

缺少委派正当性判断

当前体系没有回答一个关键问题:主 agent 何时应该委派,何时应该自己完成?

缺乏以下决策维度:

  • 任务复杂度 vs 子 agent 能力的匹配度(缺少子 agent "能力注册表",主 agent 无法精确知道哪个子 agent 能做什么)

  • 委派带来的上下文切换开销

  • 子 agent 输出质量的可靠性

  • 串行 vs 并行的时间收益对比

子 agent 委派粒度过粗导致上下文膨胀

主 agent 在委派时缺少"任务拆分粒度"的判断能力,典型场景:

项目文件 30+,规则已声明"应按照标准拆分子 agent",但主 agent 仅委派了一个 search 子 agent,该子 agent 独立扫描并阅读全部 30+ 文件。由于子 agent 上下文容量有限,触发压缩后重新执行,再压缩再执行循环,效率极低。

核心问题:

  • 主 agent 将"委派"理解为"交给一个人做",而非"拆成多份并行做"

  • 子 agent 的上下文容量可能小于主 agent(或模型不一致),但主 agent 在委派前未做此评估

  • 同样的任务由主 agent 独立执行不会触发上下文压缩,因此用户感知到明显的效率落差

已做努力及仍然存在的问题

针对上述问题,已在规则和技能层面做了以下努力:

努力

位置

内容

仍然存在的问题

预拆分指示

dispatching-parallel-agents Step 5

"如果并行任务预计较大(5+ 文件或范围广),在分派前预拆分为更细粒度的子任务"

仅适用于该技能内部的只读分析场景;由主 agent 自行判断"是否算大",判断标准模糊

任务过大回退

subagent-driven-development State Rules

"如果任务过大 → 拆分或修复计划"

此检查在任务已开始执行后触发,上下文膨胀已经发生

上下文膨胀回退

subagent-driven-development Failure Handling

"如果任务反复失败、上下文无限膨胀 → 停止子 agent 路径,切换到 executing-plans"

回退是被动的——问题出现后才降级,消耗了时间且子 agent 的输出可能已污染上下文

提示词聚焦

dispatching-parallel-agents Step 5

"保持每个提示词聚焦且窄范围"

依赖主 agent 的自我约束,无法强制执行

文件范围阈值

skill-routing-and-execution-path File scope 维度

T-Shirt Sizing 用文件数 (≤3/4-10/cross-module) 界定任务规模

文件数本身无法衡量子 agent 的上下文压力,尤其当文件内容复杂或互相引用时

简化 T-Shirt 分类

subagent-driven-development Fast-Track Assessment

Low Risk (S) vs Normal Risk (M/L) 决定是否跳过独立审查

分类仍是定性的,没有子 agent 上下文容量的量化锚点

核心矛盾:所有努力的共同特征是事后响应(先出问题再降级),而非事前预防(在委派前精准评估子 agent 的上下文容量并据此拆分)。主 agent 缺少"子 agent 上下文有多大"的感知能力和"多大任务量会触发压缩"的预判能力。


根本原因分析

问题层:  主 agent 优先自我执行
           ↓
机制层:  规则/技能触发是建议性,非强制性
           ↓
架构层:  Trae 的 agent 体系是"主 agent 为中心"的单体架构
        子 agent 是辅助工具,而非平等协作节点
           ↓
设计层:  主 agent 的决策优先级: 自己完成 > 委派给子 agent
        主 agent 将"委派"理解为单次任务移交而非拆分并行
        子 agent 上下文容量可能低于主 agent,但无预检机制
        这是框架的设计选择,非 bug

结论

当前子 agent 体系的设计哲学是增强(Augmentation)而非替代(Delegation)。主 agent 是唯一的执行决策者,子 agent 只在其主动选择分派时才会被调用。规则和技能无法改变这一设计前提。

要使子 agent 自主分派成为稳定可靠的行为,需要框架层面的改变——让"委派"成为主 agent 的默认优先策略,而非当前"自我执行优先"的策略。具体而言,框架需要回答:主 agent 在何种条件下应当将子 agent 的"委派"优先级提升到"自己执行"之上,并以此重构决策优先级。


临时缓解方案

方案

效果

代价

在每个任务开始时显式要求:"拆分并委派给子 agent"

有效

用户需手动输入,无法自动化

将委派流程写入 project rules(alwaysApply: true

部分有效,但 agent 仍可能忽略

规则膨胀,且无法强制 agent 执行

新会话中复制上一轮的有效提示词模板

有效

手动操作,依赖用户记忆

在规则中使用更强硬的语气(如 "MUST delegate")

仅在 agent 恰好遵从时有效,无法覆盖内部决策优先级

无副作用,但不推荐作为主要策略


当前策略

等待官方优化(Wait for Framework)

上述所有局限性的根本原因是 Trae 框架的设计选择——主 agent 是唯一的执行决策者,子 agent 是辅助工具而非平等协作节点。规则和技能无法改变这一前提。

在此框架层面改变之前,任何规则层或技能层的修复都只能缓解症状,无法根治。不建议投入更多精力在规则层面继续尝试强制委派行为。