子代理
当一个任务能被干净地切分——可并行的编辑、机械重复的改动、或只读的调查——主代理可以通过 task 工具把子任务交给短生命周期的子代理。每个子代理在自己独立的上下文里运行;跨文件的推理和最终结果仍由主代理掌控。task 工具默认开启。
两种子代理
| 类型 | 能做什么 |
|---|---|
| explore 探索 | 只读调查——读取、搜索代码库来回答「在哪 / 怎么做」,返回结论。不能改文件。 |
| worker 执行 | 执行一个被精确指定的改动。可自由读取,但写入被限制在声明的 scope 范围内。 |
它们如何运行
- 子代理并行运行,同时最多
max_concurrent个,各自独立上下文。 - 每个子任务带一个难度:
simple路由到你的快速模型,hard路由到能力更强的模型——依据你所配置各 provider 的capable_model档位来选。只有单个 provider 时,子代理使用当前模型。 - 主代理在继续前会审阅每个结果——子代理提议,主代理定夺。
Worker 范围与安全
worker 子任务必须声明一个 scope:一组相对工作目录、允许写入的 glob,例如 ["src/auth/**", "Cargo.toml"]。这是强制的,不是建议:
- 范围之外的写入(
edit_file、write_file、search_replace)会被 WorkerScopeGate 直接拒绝——不弹审批。 - 读取和
bash不受范围限制。 - 只要一次派发里含有
worker,就被视为 Risky 操作,会先走审批并展示各自的范围。 - 多个 worker 同时跑时,给它们互不重叠的范围,避免相互覆盖。
配置
在 ~/.atomcode/config.toml 中调整子代理池:
[subagent]
max_concurrent = 3 # 同时并行的子代理数(最小 1)
timeout_secs = 900 # 每个子任务的墙钟超时,秒(最小 30)
max_rounds = 200 # 每个子任务的模型轮次上限(0 = 不限)
| 键 | 默认 | 含义 |
|---|---|---|
max_concurrent | 3 | 并行运行的子代理数 |
timeout_secs | 900 | 每个子任务的墙钟超时(下限 30 秒) |
max_rounds | 200 | 每个子任务的模型轮次上限;0 = 不限 |
环境变量覆盖:ATOMCODE_SUBAGENT_TIMEOUT 和 ATOMCODE_SUBAGENT_MAX_ROUNDS 优先于配置值。
关闭该功能
task 工具默认开启。若要彻底移除它,设置:
ATOMCODE_SUBAGENT=0 atomcode
0、false、off 任一都会关闭;不设置(或其它值)则保持开启。