Skip to content

子代理

把有边界的工作交给子 agent:它们有自己的工具面、模型和权限姿态,可以并行、可以后台,父会话继续干活。

子代理是主会话为一件有边界的工作拉起的子 agent。它拿到全新的模型选择、全新的权限姿态和独立的“写前先读”状态;同时它绕不过父级 —— 只有宿主能重建的核心工具才会被继承。

典型用法:对一个 diff 做只读评审、只带两个工具的窄口径修复、允许抓取但绝不写盘的调研子代理,或者在工作能干净切分时并行开几个。

工作怎么派下去

agent 通过 subagent 工具拉起子代理。彼此独立的子代理可以作为一波并行执行,耗时的可以放后台跑,父会话继续干活。父与子之间随时可以提问:子代理需要决策时会问,答案会回到同一个会话里。

每个子代理的记录在父会话生命周期内驻留内存,所以续接的对话能把它接回来,而不是从头再来。

Kind:可复用的预设

一个 kind 就是一份子代理预设 —— 名字、描述、工具白名单、模型、推理档位、权限模式,外加一段提示模板。定义它有两个地方。

文件放在 .cetas/agents/<name>.md,可以按用户放,也可以按项目放:

---
name: reviewer
description: 只读的 diff 评审员
tools: read, grep, glob
effort: low
mode: readonly
---

你在不动工作区的前提下评审改动。

来自调用方的指令:
<fillin>
{{instructions}}
</fillin>

frontmatter 里的 name 必须和文件名一致。未知 key 会被忽略;缺 name / description、列表项非字符串、块没有闭合、mode 不认识,都是解析错误 —— 坏 frontmatter 会被拒绝,不会被修。列表可以写成逗号分隔的字符串,也可以写成短横线列表。

settings 里的条目更轻,写在 settings.json 的 subagent.kinds 下,字段名一致,只是换成 JSON 语法。body 可以省略,省略时会用 name 和 description 生成一段通用模板。

按 kind 名的优先级:项目 .md → 用户 .md → settings 条目 → 内置。

工具白名单

三种状态:

tools 含义
不写 继承宿主默认的核心工具集
[] 一个工具都没有
一个列表 就是这些工具

默认模型与限额

子代理的默认模型、推理档位和全部限额走 settings 的 subagent 段,每个字段的默认值见 Settings 参考;不配就是默认值。模型选择的优先级链:显式传参 → kind 绑定 → default_model → 父级当前选择。

注意事项

  • 子代理不继承宿主动态工具和装饰器。需要某个工具的 kind 要显式写出来,并且宿主能重建它。
  • 子代理的权限姿态是自己的。父级是 yolo 时,一个 readonly 子代理依然写不了。
  • spawn_budget 是防止跑偏的计划变成一百个 agent 的护栏;要抬就明确地抬。
Navigation

Type to search…

↑↓ navigate↵ selectEsc close