Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
检查点、加载顺序、临时 worktree:Agent 长跑这一周补上的三块地基
2026-10-06

检查点、加载顺序、临时 worktree:Agent 长跑这一周补上的三块地基

从 Pi Durable 的步骤级检查点与 Cloudflare 的托管 harness,到 Claude Code mods 与 DeepSeek 的兼容层,再到 JetBrains Air 的多会话委派:这一周三条更新分别在改 Agent 的恢复粒度、扩展闸门和任务归属。

AI Agent 面试洞察
AI Agent 面试洞察@2010987761
这一期的窗口是 2026 年 10 月 1 日到 10 月 6 日。上一期 10 月 2 日上午发出,写的是 9 月 28 日到 10 月 1 日的三条,实际落到 9 月 30 日;本期与它在 10 月 1 日有一天重叠,事件不重复。
三条更新落在理解地图的三块。Earendil 发布 Pi 1.0 与实验包 Pi Durable,两天后 Cloudflare 的 Agents SDK 把 Pi harness 接进自己的 Durable Object,落在 ③ Harness/运行时;Anthropic 发布 Claude Code mods,让扩展以 TypeScript 函数的形式住进 Claude Code 进程,两天后的 10 月 3 日 DeepSeek Harness 把 Mods API 当作自家插件能力的一个子集来验证,落在 ④ 工具与协议;JetBrains 把 Air 开放给 IDE,一次委派多个 agent、各占一个临时 worktree,落在 ① 目标与任务边界。
三件事分属一家开源 harness 团队、一家模型厂商的编码工具和一家 IDE 厂商,指向的是同一个问题:Agent 要长时间替人做事,harness 这一层得先交出三样东西——崩了从哪一步接着跑、扩展插进来之后谁挡得住它、一次开出去的多个任务归谁收尾。第 1 条讲状态,第 2 条讲扩展,第 3 条讲委派。

1. 每一步先落盘,重启后从断点继续

(对应地图 ③ Harness/运行时,兼及 ⑤ 环境与状态)
发生了什么: 10 月 1 日,Earendil 发布 Pi 1.0 与实验包 Pi Durable。1 Pi 1.0 是一个加固过的极简 agent harness,MIT 许可,官方称每周有几十万人在用它;这一版新加的东西里,与长跑直接相关的是 Codemode(原生支持 MCP)、延迟工具加载、Anthropic 模型的缓存预热,以及会话中途的系统消息——改 prompt 或改工具时,transcript 会记下改动发生的位置,支持中途改动的模型只接收变更部分,前缀缓存因此仍然有效。1 Pi Durable 写在同一份代码库里,专门为长跑、可恢复、可改造的 agent 应用而做。2
10 月 2 日,Cloudflare 在 Agents SDK 里加了 PiHarness 类,让 Pi Durable 跑进它的 Durable Object。3 在 Cloudflare 的写法里,两个 Pi 包是可选的 peer dependency,Pi Durable 提供 harness,Agents SDK 的 Lifecycle 能力负责让 agent 持续运行在 Durable Object 里,活过重启、崩溃与网络问题;Cloudflare 说这是它对第三方 harness 提供一等支持的第一步。3
Pi Durable 官方文档把 harness 定义得很省:一个 harness 就是存储,加上并发运行一个或多个会话所需的机械。2 围绕这个定义,它的规则写得非常具体。
  • 一次运行里的每一步都是一个 task,task 在往下走之前先写一个检查点。进程死掉之后,新进程打开同一份存储,找到没做完的 task,从它最后一个检查点继续。被切断的模型请求会重发一次,半截回答留在 transcript 里并标成 aborted。2
  • 工具调用能否重跑,由工具自己声明:标了 replay: "safe" 的(例如查 issue tracker)在崩溃后重跑;没标的(例如发版上线)保持原样,框架把「这次调用被打断了」和已经拿到的输出交给模型。2
  • 一次提交带上 requestId,崩溃后客户端重试拿到的是原来那次提交的结果,同一个任务只做一遍。排队中的消息仍然留在队列里。2
  • task 与 conversation 组成一棵所有权树:中止一个 task 会自下而上中止它拥有的东西,每个 task 先清理自己的副作用。前台 task 跟着会话走,用户按 Esc 会一并停掉;后台 task(一个要活过当前轮次的子 agent、一条明天要响的提醒)在会话空闲时照跑,普通的 Esc 碰不到它。2
  • 应用状态,比如一份 todo 列表、一个计划、一个沙箱,存在 document 里,与 transcript 在同一次原子提交中落盘。document 还会声明 fork 时取什么值:父会话在 fork 点的值、当前值,还是一个全新的值。2
  • 压缩(compaction)本身也是一个 task:上下文接近上限时先起一个后台摘要,下一个请求真的放不下时才等它。老的对话消息一直留在存储里,可以用 reset 从一页交接便签开始新的上下文,同时对旧消息的检索照旧。2
  • 存储后端自带内存、SQLite 与 JSONL 三种,后两种的代码不用 Node API,加一层小适配就能跑在 Bun 或 Cloudflare 的 Durable Object 里;同一时间由一个进程持有存储,其他客户端挂上去。注册表可以在会话运行期间替换扩展,已经跑起来的工具调用用旧代码跑完,下一次调用用新代码。2
还有两个数字值得记:整个 Pi Durable 的源码(不算测试)约 1.5 万行,折算成给模型读的 token 大约是 GPT 15 万、Claude 25 万,其中存储后端占约 3000 行。官方把这个数字写出来,为的是让 agent 自己读懂并改造这套 harness。2
机制是什么: 三件事。
第一,可恢复的粒度决定长跑的成本。会话级恢复要的是「把背景重新讲一遍」,步骤级恢复要的是「把没做完的那一步接上」。Pi Durable 把恢复的单位压到单次模型请求和单次工具调用;代价是每个动作前后都要落盘,收益是重启之后人接着往下走就行。
第二,副作用需要分类,而分类只有工具自己知道。读一次 issue 列表和发一次版,在崩溃恢复里的处理方向相反,框架无从替它们判断,于是 replay 标记成了工具声明的一部分。检查点只是必要条件,真正决定恢复后会不会出事的是工具的幂等声明。
第三,状态与对话要在同一次提交里。两者分开写,崩溃就有可能在它们之间留下一道缝,出现「对话里说做了、状态里没做」的分叉。Pi Durable 把 document 和 transcript 放进同一次原子提交,官方用的说法是让应用状态与产生它的对话保持一致。2
这一条可以和上一期的 Gemini 4 Argon 对一下:那条路把一次推理拉长到一百万 token,这条路把一次执行切成一层层可续的小步,两条路都在减少交接点。
面试可说句:
评估一个 Agent 的长跑能力,我会问四个问题:崩溃之后从哪一步继续;哪些工具允许重跑、哪些只能被告知「你被打断了」;应用状态和对话是不是同一次提交;谁有权把它停下,停下会连带撤掉哪些任务。前两问的答案写在工具声明里,后两问的答案写在所有权树和存储设计里。

2. 扩展住进 Agent 进程,闸门变成加载顺序

(对应地图 ④ 工具与协议,兼及 ③ Harness/运行时、⑥ 权限、安全与熔断)
发生了什么: 10 月 1 日,Anthropic 发布 Claude Code mods:一个 mod 就是几个 TypeScript 函数,装在插件里,按插件的方式安装和分发,CLI 与桌面端都能用。4 官方给的四个例子是:在请求送到模型之前重写 prompt、拦截或改写或重试一次工具调用、批准或拒绝一次权限请求、在 Claude 读到之前抹掉工具输出里的密钥。mod 还能画界面,加一个面板、在输入框上方加一条带,甚至替换 Claude Code 自己绘制的部分。同一个事件上挂了多个 mod 时,它们按加载顺序执行,先加载的先看到事件、最后拿到结果。4
代价写在同一条发布里:mod 与 Claude Code 同权限,落在沙箱覆盖范围之外,只从可信来源安装。4 文档把这句话展开成一张清单:mod 能以你的身份读写文件、起进程、发网络请求;能读环境变量和设置文件里的 API key;能看到你发出的每条 prompt 和 Claude 的每次工具调用;能改写 prompt 或工具调用、以你的身份提交一条 prompt、给你的另一个会话发消息;能在你被问到之前批准一次工具调用;能花掉你的用量额度。打开沙箱时,被隔离的是 Claude 执行的那条 Bash 命令,mod 起的进程不在沙箱内。5
组织这一层的答案是一个先加载的内置 mod。Team、Enterprise 计划,以及任何配置了托管设置的机器上,一个叫 sec-default 的内置 mod 会最先加载,挡住用户自己安装的 mod 做危险动作,例如覆盖你的权限拒绝规则;它的源码是公开的。管理员可以改成先加载自己的 mod,条件是记得把 sec-default 加回列表。4 审查被设计成不需要运行:claude plugin validate ./some-mod 会列出这个 mod 处理了哪些事件、会向 Claude Code 请求哪些动作,比如读文件、发网络请求。5 关掉它也分几档:单个 mod 在 /plugin 里禁用;--safe-mode 关掉一次会话里的全部自定义;disableAllHooks 关掉你安装的全部 mod,组织托管的那部分继续运行;组织侧还有 allowManagedModsOnly,只停掉插件带的 mod 代码,插件的 skills、commands、agents 与 MCP server 照常加载。5
两天后的 10 月 3 日,DeepSeek Harness 发布 v0.2.1-alpha.1,加入实验性的 Claude Code Mods 兼容层。6 发布说明写明这一层的目的是验证「Claude Code Mods API 的功能大致是 DeepSeek Harness 插件能力的一个子集」,现阶段瞄准能力对照。同一个仓库的模型访问层用的是 Earendil 的 pi-ai:9 月 29 日的 v0.2.0-rc.2 把第三方模型目录与兼容适配更新到了 pi-ai 0.87.1。6
机制是什么: 三件事。
第一,扩展跑在 Agent 进程内部时,「谁能先加载」就成了权限设计的一部分。设置文件里的钩子从外面执行一个脚本,Agent 还有机会在外面站一层;mod 是同一进程里的函数,能在事件被处理之前接管它,于是加载顺序成了唯一可靠的先后关系:先加载的先看到事件、最后拿到结果,sec-default 这类守卫 mod 的全部效力就来自它排在最前面。文档同时标出这条路的边界:一个会批准工具调用的 mod 可以批准本该弹 ask 的调用,权限提示自身的画面仍由 Claude Code 绘制。
第二,可审查性来自 API 面收窄。mod 想读写文件、发网络请求、调用模型,都必须走 mods API,没有第二个出口;因此可以在不运行它的前提下,把它处理的事件和要发起的调用列成一张清单。「装一个扩展」这个决定由此从信任作者变成读一份清单。
第三,兼容层的出现说明扩展接口开始分层。一个 harness 把另一家 harness 的扩展 API 当作自家插件能力的子集来验证,底下还共用同一个模型访问包(pi-ai);这与 MCP 让工具层可移植是同一件事,发生在扩展层。
面试可说句:
判断一个 Agent 的扩展机制,我会问四件事:扩展跑在 Agent 进程里还是进程外;它出界的每个动作是否都必须走一个能枚举出来的 API;同一个事件上多个扩展按什么顺序执行、顺序由谁定;组织能不能只关掉插件带的代码,同时留下它的技能、命令和 MCP server。Claude Code 给出的答案是:跑在进程里、API 收窄到可静态列举、顺序决定效力、allowManagedModsOnly 管最后一问。

3. 一次委派多个 Agent,收尾留在人手上

(对应地图 ① 目标与任务边界,兼及 ⑤ 环境与状态、⑧ 产品形态与落地)
发生了什么: 10 月 1 日,JetBrains 开放 Air 在 IDE 内的早期访问:JetBrains Marketplace 上有插件,2026.3 的 EAP 版本里直接内置。7
Air 的定位是一条通道:它把你已经在用的 agent 接进 IDE——Codex、Gemini、GitHub Copilot、Claude Agent、Junie,其他按 ACP 协议接;模型、计费和账号都沿用你原有的订阅,JetBrains AI 订阅在这里只是可选。7 官方在「你还在控制中」这一节列了三条默认值:Air 是一个工具窗口,在你登录某个 agent 或 JetBrains AI 计划之前,机器上没有任何东西被启动;用第三方订阅时,数据走你与那家 provider 已有的协议,JetBrains 不经手;关掉插件,其余一切照旧。7
面向并行的那一半更具体。所有 agent 会话集中在一处,显示活动、未读更新、变更的文件与待推送的提交,并显示每个会话的花费;双击 Ctrl 从 IDE 任意位置发起一次委派,当前上下文自动带上;会话可以开在编辑器标签页里、终端里,或一个图形聊天界面上。7 并行工作用临时 worktree 隔离:会话从任意分支开始,改完在对话里跟踪变更与提交,等到合适的时候再 cherry-pick 回主项目。7 需要长跑或后台执行的任务可以放到云端,关掉自己的机器;云端运行目前需要 JetBrains AI 订阅,面向有 AI 席位的组织,移动端跟进尚在路上。7 另外,IDE 自己的技能与工具会开放给受支持的 agent,用于调试、性能剖析、数据库探索和语义代码搜索,官方称这能让某些任务少用一些 token。7
同一周的企业侧有一条对照。10 月 5 日 Cohere 发布 North 2,把跨会话记忆、可共享的 agent 与自动化,以及逐用户、逐 agent 的 token 用量、消费层级与上限放进同一个管理台,再配上逐 agent 的自主性策略:agent 只做被授权的动作,关键动作找人复核。8 第三方报道补了一条细节:用量能追到单个用户和单个 agent,管理员可以按请求数与 token 速率给用户和群组划档、设公司级上限,并设预警阈值。9
机制是什么: 三件事。
第一,委派的单位从「一次提问」变成了「一个会话」。一个会话要带自己的状态、自己的执行环境和自己的成本可见性,否则两个 agent 并行跑起来会互相踩,人也只能看到一个总数。JetBrains 把这三样摆进同一个视图,Cohere 把话语权放进管理台,做法不同、单位相同。
第二,隔离要落在文件系统这一层。临时 worktree 把「两个 agent 同时改代码」变成「两份互不干扰的改动」,人再决定把哪一份 cherry-pick 回主线。合并这个动作留在人手上,是任务边界的一个具体答案:Agent 拿到的是分支,主线上留下什么由人决定。
第三,默认值本身就是边界。Air 不预装 agent、数据不经 JetBrains,把「这台机器上允不允许 agent 跑、数据去哪」的开关交给使用者和组织;企业平台把同一个问题的答案做成逐 agent 的用量上限与动作范围。长跑 Agent 的边界,越来越多地写在默认值和配额里。
面试可说句:
把多个 Agent 并行放进生产,我会先定三件事:一个任务对应一个会话还是多个会话;每个会话的环境怎么隔离、改完之后由谁合并;默认状态下这台机器上有哪些 agent 可以跑、数据往哪里去。JetBrains Air 给出的答案分别是:一会话一环境、临时 worktree 隔离且由人 cherry-pick、默认不装 agent 且数据走你原有的 provider。

本期填入地图的三块

更新地图模块关键机制面试抓手
Earendil 发布 Pi 1.0 与 Pi Durable,2026-10-01;Cloudflare Agents SDK 加入 PiHarness,2026-10-023③ Harness/运行时(兼⑤)每一步先写检查点;工具用 replay: "safe" 声明能否重跑;requestId 让一次提交恰好一次;应用状态与 transcript 同一次原子提交;压缩本身也是一个后台 task长跑四问:从哪一步继续、哪些能重跑、状态与对话是否同一笔提交、谁能停
Claude Code mods,2026-10-01;DeepSeek Harness 的 Mods 兼容层,2026-10-034④ 工具与协议(兼③⑥)mod 是跑在 Agent 进程里的事件函数,与宿主同权限;出界动作必须走可枚举的 API,因此能静态审查;多个 mod 按加载顺序执行,先加载的 sec-default 挡住后加载的扩展四问:进程内还是进程外、动作能否枚举、顺序由谁定、组织能否只关代码
JetBrains Air 进入 IDE 的 EAP,2026-10-017① 目标与任务边界(兼⑤⑧)委派单位为会话;并行工作用临时 worktree 隔离,合并权留在人手上;默认不预装 agent、数据走你原有的 provider并行三问:任务与会话的对应、环境隔离与合并归属、默认值
跨期口令再加一句:目标写清 → 工具接对 → 环境真隔离 → 权限默认最小 → 随时能停 → 环境可恢复、状态可序列化 → 监督看三个率 → 边界按「碰得到」限定,撤销要能打断在飞的会话 → 出网路径逐条清点,策略执行点放在 Agent 够不着的地方 → 评测先问判的是哪一段,授权先问怎么撤销 → 恢复按步骤存,扩展先读清单,并行留好归属。

References

  1. 1
    Pi 1.0(Earendil,2026-10-01)

    earendil.com

  2. 2
    Pi Durable(Earendil,2026-10-01)

    earendil.com

  3. 3
    Run the Pi Durable harness on Cloudflare with the Agents SDK(Cloudflare Changelog,2026-10-02)

    developers.cloudflare.com

  4. 4
    Customize Claude Code with mods(Anthropic,2026-10-01)

    claude.com

  5. 5
    Mods overview(Claude Code Docs)

    code.claude.com

  6. 6
    DeepSeek Harness v0.2.1-alpha.1(GitHub,2026-10-03)

    github.com

  7. 7
    A New Agentic Experience: JetBrains Air in IDEs – EAP Now Open(JetBrains,2026-10-01)

    blog.jetbrains.com

  8. 8
    North 2: Enterprise AI without compromises(Cohere,2026-10-05)

    cohere.com

  9. 9
    Cohere unveils North 2 AI agent platform with rebuilt orchestration and token spending caps(SiliconANGLE,2026-10-05)

    siliconangle.com

AI Agent 面试洞察
AI Agent 面试洞察@2010987761

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content

  • 1. 每一步先落盘,重启后从断点继续
  • 2. 扩展住进 Agent 进程,闸门变成加载顺序
  • 3. 一次委派多个 Agent,收尾留在人手上
  • 本期填入地图的三块