夜雨聆风学习资料网

ARTICLE · 1047162

LoopX 源码解析(一):LoopX 是什么,它是如何支撑长任务

LoopX 源码解析(一):LoopX 是什么,它是如何支撑长任务

先给一个具体场景。你想让 agent 干一件大活:给一个开源仓库做一系列贡献——读代码、改代码、跑测试、提 PR,这个任务不是一次对话能做完的,预计要跨好几天、几十次会话。

不用任何框架直接做,会遇到四件事:

  1. 会话一断,全忘。 Claude Code 或 Codex 的会话结束后重开,agent 不知道昨天改到哪了、哪些方案试过失败了、下一步该干什么
  2. 跑偏没人管。 agent 干着干着忘记原始目标,开始重复劳动或者自己发明新需求,token 消耗没有人拦截
  3. 花钱没数。 一晚上烧了多少调用、值不值,没有记录
  4. 交接说不清。 你换了个模型或换个工具接着干,上一步的进度和教训传不过去

LoopX 就是解决这四件事的工具。本篇讲它的设计理念,以及这些理念怎么支撑长任务执行;

代码:github.com/huangruiteng/loopx

LoopX 是什么

一句话:LoopX 把任务状态持久化在项目目录的文件里(目标、待办清单、证据、预算记录),agent 每个工作回合开始前先调 LoopX 命令检查"现在允许跑吗、跑哪个待办",结束时必须写回执行结果和证据、扣除预算;涉及高风险操作时,LoopX 生成一个具体问题暂停等人回答。

装完 LoopX 后,项目里多出一个 .loopx/ 目录存这些状态文件。agent 的每个工作回合(LoopX 叫一个 turn)变成固定流程:

loopx quota should-run   →  现在能跑吗?预算还够吗?(不能跑就停,返回原因)loopx todo claim         →  从待办清单认领一项(加锁,其他 agent 不会重复领)   ... agent 执行这一小段工作,产出证据(diff、测试结果)...loopx todo update        →  写回结果和证据,更新待办状态loopx quota spend-slot   →  记录:这一回合消耗了预算

注意执行工作的仍然是 Codex、Claude Code 这些你本来用的 agent 工具——LoopX 不包含任何模型,不执行任何业务工作。它只做管理:持久化状态、限制消耗、拦截高风险操作、结构化交接。这就是"控制平面"的含义:agent 负责执行,控制平面决定能不能执行、记录结果、拦截危险操作。

四条设计理念

LoopX 的所有机制都从下面四条理念推出来。

理念一:治理决策不依赖模型

整个 control_plane/ 目录里没有一次模型调用。"能不能跑"(配额决策)、"谁来做"(待办分配)、"做完没有"(验证)——全部是确定性代码。LLM 只出现在被驱动的 agent 工具里面。

这条理念来自对长任务失败的判断:会话丢失、目标漂移、超额消耗这些问题的根源,是把这些治理决策交给了概率性的模型输出。LoopX 的选择是把治理全部收进确定性代码,模型只负责执行。前面系列文章讲过的原则——"凡是能用确定性代码判定的,都不要让模型自己判定"——LoopX 把它做成了整个系统的架构。

理念二:状态在文件里,上下文每轮重建

任务的目标、待办、证据、决策记录都存在磁盘文件里,不依赖任何会话。agent 每个回合的上下文从这些文件重新组装,而不是延续聊天历史。

会话在 LoopX 里是可以随时丢弃的:进程崩溃、换模型、换工具,都不影响任务——下一个回合读文件恢复认知。这是"跨几天、几十次会话"能成立的前提。

理念三:长任务切成有界小段,每段必须留下证据

一个 turn 只做一小段有边界的工作,做完必须写回可验证的证据(代码 diff、测试结果、命令输出),然后记账。没有证据的执行不算进展。

这对应软件工程里已经被验证的实践:小步提交、每次提交可审查、可回退。区别在于 LoopX 用确定性代码强制它——agent 不写证据,这个回合就无法结算。

理念四:默认只读,风险操作交还给人

新任务的默认权限是只读。写文件、发布、删除这类高风险动作会触发门禁:LoopX 生成一个具体的问题("是否同意先执行只读探查?"),暂停等待人回答,批准附带具体命令且不等于授予写权限。

人对任务的控制不靠盯着,靠在关键节点回答具体问题。

这套设计怎么支撑长任务

把开头的四个问题和 LoopX 的应对一一对应:

长任务问题
LoopX 的支撑
背后的理念
会话一断,全忘
状态在文件里,每回合从文件重建上下文;崩溃重启后从检查点继续
理念二
跑偏没人管
待办清单约束每回合只做认领的一项;连续多回合无实际产出会被强制暂停
理念一、三
花钱没数
配额按时间槽记账,超额自动停;等待外部结果期间配额冻结,不许空转
理念一
交接说不清
交接是结构化数据(做了什么、为什么、试过什么、下一步),且绑定当时的待办状态,状态变了交接自动失效
理念二、三
危险动作失控
默认只读,高风险操作前生成具体问题等人回答
理念四

长任务执行的整体图景:心跳或定时触发 → 确定性决策(能不能跑、跑什么)→ 认领待办、加锁 → 从状态文件重建上下文 → agent 执行一小段 → 写证据、记账 → 调度下一轮。每一环都是确定性代码把关,模型只出现在"执行一小段"那里。

这个循环没有内存中的累积状态——每次心跳都完整重走决策链,所以任何时刻崩溃都不会污染决策。

设计亮点

把"不信任模型"做成架构而不是规范。多数系统的做法是在提示词里要求模型守规矩;LoopX 的做法是让模型在结构上没有越界的通道——治理决策它做不了(无 LLM)、状态它改不到(只有 Kernel 能写)、高风险操作它执行不了(门禁在前)。可迁移的判断:约束模型行为,机制比劝说可靠

用"回合"作为长任务的基本单位。"把任务切成有界小段 + 每段留证据 + 每段记账"这个结构,同时解决了审查(每段可查)、恢复(每段是检查点)、预算(每段是计量单位)三个问题。一个原语解决三个问题,这是这个设计经济的地方。

人的角色被重新定义为"回答具体问题"。长任务里人的介入方式不是盯着看(不可持续),也不是放开不管(不可接受),而是在门禁处回答系统生成的具体问题。问题具体、附带命令、批准不扩权——这让人的监督成本降到了可承受的水平。

代价与局限

复杂度是真实成本。对跑几小时的任务,这套基础设施的复杂度远超收益;它的目标场景是周级、多 agent、多运行时的长任务。

每个回合都有固定开销。决策、加锁、重建上下文、结算,这些管理动作本身消耗时间和 token。任务切得越碎,管理开销占比越高——有界切片的粒度是使用时需要调的参数,不是免费选择。

确定性治理的灵活性有限。目标会随探索演化的一类任务(开放式研究),写在文件里的目标和待办需要频繁人工修订,门禁和配额的硬约束在这个场景下反而碍事。LoopX 适合边界清晰、可验证的任务(编码、修复、迁移)。

一个完整的例子:跨三天的编码任务

用一个具体任务把上面的理念和流程串起来。任务:给一个开源仓库添加深色模式支持——涉及前端组件、样式变量、测试,预计跨三天。agent 运行时用 Claude Code,你白天上班,只有晚上看一眼。

第 0 步,初始化。你运行 LoopX 的配置命令创建 goal,设定配额(比如每天最多 40% 的时间槽有活动)。.loopx/ 目录生成,初始待办清单是 agent 扩展出来的:调研现有样式结构、设计变量方案、改组件、补测试、提 PR。

第 1 天,正常回合。心跳触发,LoopX 跑 quota should-run:配额没超、没有挂起的门禁、有待办可领——允许跑。agent 领取"调研现有样式结构"(加锁),LoopX 从状态文件组装这个回合的上下文(目标 + 这条待办 + 之前的证据),Claude Code 执行:读组件代码、输出一份样式结构分析、写入 dark-mode-notes.md。回合结束,todo update 把分析文件记为证据、标记完成,spend-slot 记账。后面几个回合依次做完设计、改完组件。每天配额用完,should-run 返回 throttled,agent 停下——第二天窗口滑动自动恢复。

第 2 天,崩溃。你重启了电脑,Claude Code 的会话全没了。没有影响:心跳再次触发时,LoopX 从状态文件重建上下文——已完成三项、证据在哪、下一步是补测试。agent 直接从"补测试"继续,不重复已做的工作。这是理念二在起作用。

第 2 天晚上,门禁。测试补完,待办清单下一项是"提 PR"——推送到远端仓库属于高风险操作,触发门禁。LoopX 生成具体问题等你回答("是否同意推送分支并创建 PR?"),agent 暂停。你晚上回来看一眼测试结果,批准,附带的是这一次的推送命令,不等于以后都能推。这是理念四。

第 3 天,交接。你想换 Codex 接手做最后的文档和 CI 收尾。LoopX 的交接是结构化数据:做了什么、关键决策(为什么选 CSS 变量而不是主题类)、试过什么失败了(直接覆盖样式不可行)、下一步。Codex 的第一个回合读这份交接继续,不需要读三天的对话历史。

完成。最后一条待办(CI 通过)由确定性检查判定——测试结果和 CI 状态是证据,不是 agent 自己说"我做完了"。goal 标记完成,全程的配额消耗、证据、每回合记录都在状态文件里,可回查。

这个例子里没有出现任何一次"模型自己决定接下来干什么"——每个回合的启动、停止、记账、拦截都是确定性代码做的,模型只在回合内部执行具体工作。这就是 LoopX 支撑长任务的方式。

相关学习资料