Skip to content
预计 1 分钟右侧目录可快速定位

跨进程继续代码任务:Sandbox Session、Snapshot 与 Resume ​

前置:如何证明 Coding Agent 真做完了:Tests、Artifacts 与 Manifest
核心问题:进程退出后怎样恢复 Coding Workspace,哪些 sandbox/session 信息要持久化,恢复前又必须重新验证什么?

同一个聊天 Session 可以先后创建两个隔离 sandbox;一个 sandbox 也可由多个 Runner call 复用。用户说“继续昨天代码”,Session 给出谈话背景,snapshot 恢复实际已修改文件;缺一都可能无法正确继续。

Sandbox Session ​

这里先分清三个对象:live sandbox session 是仍在运行的执行环境,serialized session state 是 backend 用来重新连接/定位该环境的控制信息,workspace snapshot 是可用于重建文件/环境状态的持久化内容。它们都不是 conversational Session。

Session State vs Workspace Snapshot ​

RunState 是一次执行事实,Session 提供跨 run 的交互连续性,Durable Task State 服务长任务恢复。三者生命周期不同,应分表/接口。

Workspace Snapshot 保存某时刻文件/环境状态。二者恢复目标不同,不能用 conversation transcript 代替磁盘快照。

Resume ​

Resume 根据 backend 当前事实选择两种路径:live session 仍存在就重新 attach;否则从 snapshot 创建新环境并 rehydrate Runtime/Workspace 状态。Adapter 应显式告诉调用方支持哪种恢复方式,而且任何恢复都要重新验证当前版本、capability 与权限。

🔍 源码对照:Restart 后后台 Shell 可以作为 reattached task 被重新观察 ​

完整源码与通用分析见 09-01 Run Lifecycle / State Machine。这里不重复代码;这里关注 resume:reattached shell / background task 必须重新进入 Observation owner,不能仅恢复 Workspace snapshot 就假设执行状态已知。

源码说明

Remote box/local exec/daemon 与 durable file policy 被分开,是理解 Sandbox Session 的好材料:execution environment 可以重建,但 workspace/file state、credentials、network capability、process state 的恢复语义各不相同。Snapshot 不是“把容器暂停”这一种技术实现。

工程边界

README 中的 optional local Docker sandbox 只是实验模式;Docker container 本身不提供完整 security sandbox,也不等价于 durable session。

Shadow Harness 对照

  • SandboxSession 用 opaque environment id + capability manifest;Checkpoint 保存引用和必要版本。
  • resume 时逐项 revalidate workspace、credential、network/tool capability。

验证

sandbox 被销毁后 resume:允许重建环境,但必须证明 workspace state 与 required tool versions 满足 checkpoint contract。

Run State 和 Workspace Snapshot 必须一起对齐 ​

Coding Agent 已经修改三个文件,然后因为高风险命令进入 approval。此时 checkpoint 只保存:

text
next_node = run_tests

是不够的。新 worker resume 时还必须看到 同一版本的 workspace,否则 Runtime 以为 patch 已完成,实际文件却回到了旧版本。

一种实现是 checkpoint 保存 workspace snapshot/commit/artifact reference:

text
checkpoint c17
  run_state_version = 17
  workspace_ref = git:temp-branch@a13f...
  pending_node = run_tests

Resume 先恢复/验证 workspace_ref,再把 Run 变回 executable。反过来,workspace 中存在新文件也不代表 Runtime 已经提交对应 node;文件事实和 Run execution fact 需要各自的 identity,再由 checkpoint 建立对应关系。

Failure Modes ​

Serialized State 被当成新的权限来源 ​

症状: resume 直接恢复旧 credential/capability decision。

为什么危险: 过期授权可能继续生效。

处理: snapshot 保存事实/reference;resume 重新注入 credential 并 current authorization。

如何验证 ​

Case断言
Serialized State 被当成新的权限来源改变权限后 resume,旧 snapshot 无法绕过新 policy。

关联源码 ​

自测 ​

  1. Sandbox 进程重启后,只有对话还在但工作目录丢失。为什么这不叫可 Resume?Snapshot 至少要覆盖哪些 Workspace 状态?
  2. 恢复 Snapshot 后仓库 HEAD 已变化,为什么还需要 environment revalidation 而不能立即继续 patch?

Sources ​

AI Engineering · Agent · Harness · Backend Systems