Pysolate 为什么存在
一句话
Pysolate 要解决的矛盾是:Agent 写的 Python 需要 fresh、受控地执行,但每次使用新 Guest 不应迫使系统放弃所有安全的提前准备和复用机会。
先看一个例子
Agent 要读取一份数据,计算摘要,并在条件满足时调用 Host capability。最省启动成本的办法,是让同一个 Python interpreter 一直活着。可它也会保留旧 globals、module mutation、handle 和权限上下文;下一次任务可能意外继承这些状态。
另一种办法是每次都启动全新的 Guest。状态更干净,但初始化、读取和解码也可能重复发生。若为了提速直接提前执行代码里的所有调用,又可能碰到 branch-not-taken、earlier exception 或 source drift:物理操作做了,原程序却从未真正走到那里。
Pysolate 选择第三条路。Guest 保持 fresh,Host 只提前执行已经明确授权、identity-bound、预算允许且可以安全丢弃的 physical work;原程序的 exact dynamic occurrence 仍决定 logical effect 是否发生。
真实机制
一次请求中的 Agent Program 是普通 Python。if、for、函数和数据变换由 Guest 执行。Request 不能自行携带 capability grant、credential、mount 或 resource budget;这些由 Host-owned RunConfig、Plan 和 Broker 决定。
系统把原本容易混在一起的事件分开:
代码里可能出现调用
→ Host 判断是否有 authority
→ Host 可以准备 physical work
→ Guest 实际到达 occurrence
→ logical claim 或 orphan/cleanup
因此,代码中出现函数名不等于获得权限,physical completion 也不等于 logical success。分支未走、代码身份变化或 Guest 提前失败时,提前结果可以被 cancel、discard 或标为 orphan。
Fresh Guest 切断旧 Python/WASM hidden state;Host 则可以在更长生命周期内保存受验证 artifact、编译产物、immutable record 和 effect evidence。优化复用的是明确命名的物理对象,而不是继续保留一个持有旧 authority 的解释器。
为什么重要
技术上: Authority、physical work、logical effect 和 cleanup 有不同 owner。系统可以优化有界工作,同时保留原 Python 程序的动态语义和 fresh execution。
产品和业务上: Agent 仍能编写熟悉的 Python,平台可以集中控制外部能力、预算、workspace 和失败处置。Operator 能区分未启动、完成、未消费与结果不确定,而不必根据异常文字猜测是否安全重试。
不能推出什么
- Pysolate 当前不是支持任意 Python、native extension 和生产 workload 的通用 sandbox。
- Fresh execution 不是免费启动,也不是完整 determinism 或 transaction rollback。
- 提前执行的安全机会不表示每个 workload 更快;staging、join、materialization 和 orphan 都有成本。
- Receipt 记录 Host 观察,不证明外部世界最终状态。
术语卡
- Fresh Guest:不继承上一 Run 隐式 Guest 状态的新执行实例。
- Authority:Host 对某项外部能力的实际授权。
- Physical work:读取、解码或准备等真实计算。
- Logical effect:原程序在匹配动态位置消费能力后成立的逻辑事件。
- Orphan:已准备但最终没有被合法 occurrence 消费的结果。
继续阅读
- 后续:Host、Guest 与 Run、一次 Run 从请求到清理
- 说明文档:
claims/main-claim.md、claims/innovation-inventory.md、implementation/01-execution-core.md - 源码 owner:
runtime/request.go、runtime/config.go、根README.md