Agent 循环
Agent 循环
Agent 循环属于 Bolt。发送消息会持久化一条会话消息及其指令,一条持久的应答任务把该运行准入一个隔离调用。等待推理或宿主工具时会让出,由宿主执行 I/O,随后恢复同一调用。循环始终受当前主体的工作区策略约束。
循环
每次运行都从平台基线、src/+agents.md 中的工作区提示词开始;如由 envoy 发起,再加入它的任务与当前计划。随后交替执行完整提供商消息与工具调用。Bolt 会先为完整的助手消息和工具调用批次设置栅栏,再让该批次中的调用一起执行,并在下一次提供商迭代前按调用顺序存储每条规范工具结果。Token 增量只是临时显示状态,不属于持久历史。提供商失败会终止本次运行;继续必须显式恢复。
conversations.send ─► conversation + user message + directive
│
▼
durable admission ─► one run
│
┌─────────────────────────┼──────────────────────┐
▼ ▼ ▼
assistant batch await host I/O provider failure
fences first same invocation terminal run
│ resumes │
▼ ▼
tool effects run together explicit resume
│
▼
tool results in call order ─► next provider iteration 进入循环的两道门
同一循环服务两个入口。网页聊天与 envoy 入站都会先原子持久化规范用户消息与收件箱回执,然后才通知调度器:
- 网页聊天——已登录用户,以自己的账户行动
- envoy——声明的策略下的 envoy 主体
权限边界
规则是 权限约束 Agent,而非其工具列表 :无论循环能命名哪些工具,数据操作都在操作主体的策略下非特权运行。
预算
Colony 的宿主策略是每个让出点之间最多连续占用 guest 线程 CPU 2,000 毫秒(COLONY_EXECUTION_COMPUTE_MS),而不是墙钟超时。每次模型、数据库或工具设施回复都会开始一个新的 CPU 时段;等待期间仍保留槽位与上下文,但不消耗 CPU 时段,也不计入计算用量。源码中不存在可声明的令牌预算:一步会在停止、提供商失败、重试耗尽或模型完成时结束,而 invocation budget 约束入队工作(自动化与子任务)可嵌套的深度。上下文增长由模型窗口处的自动检查点处理,超过内联时限的宿主工具调用会成为用 wait 收集的后台作业。
子 Agent
对于狭窄的子任务,根循环通过单一的 subagent 工具委派,动作包括 spawn、read、message、await、stop 与 resume。子任务是它自己的持久任务:spawn 立即返回其会话 id 并在后台运行,多个子任务可并行;子任务结算后会向父任务报告,父任务空闲时会被唤醒。只有根任务能委派——子任务不能再生子任务——且都继承同一权限边界。
记录
整个过程——完整消息、工具调用与结果——都写入规范聊天集合。每个会话只有一个持久收件箱和一条活动通道;已被某次运行领取的输入不会改变,后来的消息等待下一次兼容运行。每条已提交消息都通过与其它集合数据相同的实时 findMany 路径到达客户端。
相关指南
编写面是 Norbius 。