Per-session lane
像每个会话都有自己的单行轨道,同一时间只能让一辆车过去。
Concepts 导读
Agent Loop 是 OpenClaw 中一次真实 Agent 运行的完整路径,包含消息接收、上下文组装、模型推理、工具执行、流式回复和持久化。理解这条链路,才能看懂 session 状态如何保持、工具调用如何串行、以及队列如何防止竞态。
先讲这一页到底在解决什么
Agent Loop 是 OpenClaw 中一次真实 Agent 运行的完整路径,包含消息接收、上下文组装、模型推理、工具执行、流式回复和持久化。理解这条链路,才能看懂 session 状态如何保持、工具调用如何串行、以及队列如何防止竞态。
第一幕
官方一开头就把入口点点出来了:Gateway RPC 的 agent / agent.wait,还有 CLI 的 agent 命令。
agent像前台收下任务,先登记 runId 和时间,再把任务送去后场排队。
agent.wait像有人站在前台问:“那张工单现在做完没?”它负责等结果,不负责替你干活。
agent像你不是从网页前台递单,而是从命令行窗口直接敲门。
入口的工作是收件、编号、排队,不是立刻神奇地产生答案。
第二幕
官方列了 5 步。翻成人话后,会非常顺。
agent RPC 先验一下参数、找对会话、把元数据存好,然后立刻回你一个 { runId, acceptedAt }。像前台先给你领号单。
agentCommand 开始真正干活:挑模型、带上默认 thinking/verbose、加载技能快照,再把工单交给嵌入式 agent runtime。
runEmbeddedPiAgent 负责排队、建会话、订阅事件、超时中止。像车间主管在盯整条流水线。
subscribeEmbeddedPiSession 会把工具事件、assistant 文本、生命周期状态一路翻成 OpenClaw 自己的流事件。
agent.wait 只等“结束铃声”它等的是 lifecycle 里的 end 或 error。所以它像前台屏幕上的“已完成 / 出错 / 超时”,不是替车间再造一遍产品。
最关键的规矩
这部分特别重要。OpenClaw 会按 session key 串行跑,同一会话一次只跑一条真实 loop。
像每个会话都有自己的单行轨道,同一时间只能让一辆车过去。
必要时还会再经过总闸口,避免整座站台同时挤爆。
不然工具调用和会话写入会互相踩脚,最后聊天记录像两支笔同时在同一页乱画。
一次一轮,慢一点,但账本不乱。
开跑前
模型还没开始想之前,官方会先准备工作区、skills、bootstrap 文件和 session lock。这很像小工人出门前先把装备装包。
像确认今天到底在哪张桌子上工作。沙箱模式时,可能换到另一张受控桌子。
像把今天可能要翻的小册子先放进包里,别到一半临时乱找。
像把桌上的身份卡、规则卡、用户卡、工具卡先扫一遍。
像先把这本会话工作本锁在自己手边,别让别的工人同时来抢笔。
命令与事件
很多人以为 streaming 只是打字机效果。其实它更像车间在不停往外喊:“我开始了,我在调工具,我这里有中间结果,我结束了。”
stream: "assistant"像工人边想边把能展示的文字片段往外递。
stream: "tool"像工人一边拿工具干活,一边告诉你“我正在敲哪颗钉子”。
stream: "lifecycle"像值班牌从“开始”翻到“结束”或“出错”。
delta / final像先不断收到草稿纸条,最后再收到一张正式盖章版。
插手点
官方列了很多 hook。别硬背名字,先记住它们是在不同环节给你“插手一下”的机会。
before_model_resolve像在工人开工前,先把今天要用的脑子换掉。
before_prompt_build像在工人真正读题前,再塞一张额外说明卡进它手里。
before_tool_call / after_tool_call像工具拿起来前先查一下,放下后再验一下。
message_sending像回信要出门前,门口最后再看一眼:这封信到底让不让寄。
结束方式
官方最后把“哪里会提前结束”写得很实在。这种地方最适合翻成人话。
像车间闹钟响了,时间到了,必须停工。
像外面有人举手喊停,这一轮就收住。
像桥断了,前台和后场暂时说不上话。
agent.wait timeout只是等的人等烦了,不等了。并不代表后场那位工人一定已经停工。
最后总结
Agent Loop 就是一张工单完整跑过一条流水线:先收件编号,再串行排队,带上书包开工,边调工具边播报,最后把结果、日志和状态稳稳收尾。
如果你想看“开工前到底塞了哪些固定提示给模型”,下一页就去 /concepts/system-prompt。