← 所有文章· Zayn OS

Agent 系统的运行状态思维模型

Zayn 在 Zouk / OpenViking / agent 协作里最该内化的 8 个工程判断:runtime contract、state transition、source of truth、evidence ladder 和完整验证闭环。

复杂 Agent 系统里,真正要管理的不是任务列表或记忆文本,而是可恢复、可验证、可归属的运行状态。

一页版

以后遇到任何 agent 系统问题,不要先听代码叙事,也不要先做抽象 taxonomy。先穿过这八个模型。

模型它防止什么误判一句话用法
Runtime Contract代码看起来做了,运行时其实没消费沿 UI -> API -> server -> daemon -> runtime 查谁真的决定行为
State Transition只看当前状态,忽略切换边界问 A 到 B 时谁清理、失效、广播、确认、持久化
Source-of-Truth Routing在错误 repo / 包 / 进程里修代码先确认 source repo、发布产物、运行版本、部署路径
Behavior Fix vs Cleanup把热修和架构清理混成一个 PR先修用户可见行为,再单独处理 cleanup
Evidence Ladder事实、推断、建议混写把 confirmed fact / inference / proposal 分层
User-Visible Feedback错误只在日志里,用户只看到卡住影响协作的错误要进入协作流
Default Path Contract默认路径只是 UI convenience默认打开就应该服务最高频判断
Small Patch, Full Verification小改动只跑脑内 happy path小 patch 也要完整闭环验证到运行产物

这篇不讲什么

这不是“系统思维”“第一性原理”“复杂系统涌现”这种大词集合。那些词不落到 runtime contract,就会变成装饰。

  • 不讲 agent swarm 自动化最大化。Zayn 当前更需要 ownership、review、handoff、状态可见性,不是多开 agent。
  • 不讲 CQRS、event sourcing、microservice boundary 这类架构炫技。当前很多问题不是缺复杂架构,而是 transition 和 source-of-truth 没画清。
  • 不讲纯 prompt engineering。对当前系统最有用的是工具、状态、部署、证据链,而不是把 prompt 写得更漂亮。
  • 不把 OpenViking 讲成抽象 memory database。更接近的上层抽象是 context lifecycle、checkpoint、provenance、rehydration。

1. Runtime Contract > 代码叙事

代码叙事是“这个函数名、注释、PR description 看起来在做什么”。Runtime contract 是“运行时到底由谁消费哪个字段,哪个值触发哪个行为”。复杂系统里,可信的是 runtime contract,不是命名。

   reset   runtime  contract    cold-start     session    reset  resume

2. State Transition > 静态状态

很多线上问题不是“状态错了”,而是“状态从 A 到 B 的过程没有守门”。连接重建、workspace 切换、daemon restart、agent stop/start、token 过期、activity 更新,这些 transition 如果没有 guard / invalidation / ack,就会制造漂移。

场景不要只问要追的 transition
iOS PWA eager WSWebSocket 现在连上了吗什么时候建连、断线后谁重连、旧连接如何失效
workspace switch stale write当前 workspace 是谁切换瞬间旧请求能不能写进新 workspace
activity stuck workingactivity 状态是什么agent idle / stop / error 如何广播并落到 UI
daemon restart进程是否 online新版本是否启动、连接、sent ready、旧进程是否还在写

Zayn 需要训练的不是“看状态”,而是“看状态转换边界”。真正的 bug 常常藏在边界上:A 已经不该写了但还在写,B 已经启动了但没有宣告 ready,旧 owner 已失效但仍被当成 source of truth。

3. Source-of-Truth Routing

复杂协作里,修错地方比修错代码更常见。一个行为可能经过 source repo、build artifact、npm/pip package、PM2 process、Cloudflare deploy、browser cache。任何一层搞错,代码正确也不会生效。

 routing source repo:   repo  publish artifact:  npm pip wheelDocker image build running process:  PM2 / Railway / Cloudflare  deployment path:  CI/CD  branchtagworkflow  verification:  线 commit / version

4. Behavior Fix 与 Cleanup 解耦

用户当前行为错了,应该先修 behavior contract;老接口、死代码、架构不干净,通常是另一个任务。把两者混成一个 PR,会让范围膨胀、验证困难、rollback 不清楚。

问题类型优先级交付标准
Behavior fix先做用户可见错误消失,有回归验证,有部署验证
Compatibility guard通常同 PR旧数据/旧 daemon/旧字段不会破坏新行为
Cleanup后做删除死代码、统一 helper、重命名、降低重复
Architecture cleanup单独评估有明确收益、迁移路径、风险边界

例如 reset 修复,立即要修的是 cold-start 不 resume;prompt / toolDefinitions / OV startup context 的死代码删除,可以是后续 cleanup。这个分离能保留 deployment-safe intermediate state。

5. Evidence Ladder:fact / inference / proposal 分层

Zayn 对 plausible narrative 的容忍度很低。不是因为不能接受推断,而是推断必须标注为推断。一个可靠技术更新应该让人一眼看出:哪些是事实,哪些是根因假设,哪些是建议动作。

Confirmed fact:  commitversionCI  Inference:   Proposal:  rollback  cleanup

这适用于 OpenViking permission denied、CLI result nesting、Remote Compact、Cloudflare deployment、agent stuck working。不要把 observation、interpretation、recommendation 写成同一种语气。

6. User-Visible Feedback Loop

Zouk 不是普通 UI,而是协作 runtime。协作 runtime 的错误不能只留在 server logs 或 activity panel 里;如果错误影响协作,它应该进入协作流,让用户和其他 agents 能共同处理。

  • daemon 重连失败:说明哪个 daemon、哪个 workspace、最后一次 ready 是什么时候。
  • tool bridge 失败:说明哪个 tool、哪类输入、是否可重试。
  • agent activity stuck:说明 owner、session、stop/idle 信号是否收到。
  • 部署未生效:说明当前线上 commit/version 和期望 commit/version 的差异。

这不是把错误吵闹化,而是把不可见状态变成可协作对象。用户看到“agent 没反应”时,系统已经失败;用户看到“哪个 bot 因为什么错误停住”时,协作还在。

7. Default Path as Product Contract

默认路径不是 UI convenience,而是产品对“用户一打开应该看到什么”的承诺。默认打开的东西应该服务最高频判断,不应该只是暴露原始树的第一层。

同样逻辑也适用于 notes、zaynjarvis.com、Studio、PWA。第一屏不是装饰,而是 product contract:它应该把最高频判断提前。

8. Small Patch, Full Verification

Zayn 可以接受快速 merge,但前提是验证闭环完整。小 patch 不等于小风险;很多协作系统 bug 恰恰来自“小改动 + 没验证部署产物”。

改动最低验证闭环
Zouk UItypecheck / build / lint / 关键 Playwright 或 screenshot 验证
daemontest / build / publish / PM2 定向 restart / version + Connected + Sent ready 日志
OpenViking packagesource test / wheel or package smoke / import or runtime smoke
Cloudflare static sitelocal build / pushed commit / CF deploy status / public URL smoke
notes 发布npm build / rendered routes / pushed commit / 线上路径或部署状态

验证不是仪式,而是 source-of-truth routing 的最后一步:证明运行中的系统真的吃到了这次改动。

把八个模型合成一个默认调试协议

1. State    transition  2. Runtime contract   owner  3. Source of truth    repo 4. Evidence ladder   confirmed fact / inference / proposal  5. Patch shape   cleanup  6. Feedback    7. Verification    8. Residual risk    transition rollback 

对 OpenViking / Zouk 的设计影响

  • OpenViking 不应只卖“记忆”。更强的 framing 是 context lifecycle:checkpoint、provenance、rehydration、source-of-truth、debug surface。
  • Zouk 不应只展示消息。它应该展示协作 runtime 的状态变化:谁在工作、谁卡住、哪个 daemon 断了、哪个 deploy 未生效。
  • Agent 协作不应只追求并行。并行之前先要有 ownership、handoff、review、验证和可见状态。
  • Notes 不应只是文章。它应该沉淀 Zayn 的判断协议,让未来的系统设计和 agent 行为可复用。

Knowledge Update Card

字段更新
这次解决的问题把 Louise 对 Zayn/Zouk/OpenViking 协作的工程判断,压缩成可复用的 8 个思维模型。
Zayn 读前的 prior大概率已经理解系统复杂,但容易在具体任务里被 repo、runtime、部署产物、transition 边界同时拉扯。
关键增量不要把复杂度理解成功能多;它主要来自 state 跨层漂移。
更新后的模型每个判断都要落到 runtime contract、source-of-truth routing、feedback loop。
适用边界适用于 Zouk、OpenViking、agent runtime、部署链路、协作系统调试;不适合替代深层算法/模型能力研究。
反例或 failure mode如果问题本身是业务方向或用户价值错了,只看 runtime state 会过度工程化。
对工程判断的影响先画运行链路和状态转换,再决定 PR 范围;先修 behavior contract,再 cleanup。
还没解决的问题这些模型还需要转成 Zouk/OV 的具体 checklist、PR template、agent handoff protocol。
下一步最小行动下一次 bugfix 或 deploy 复盘时,用八步协议写一版 evidence -> root cause -> validation -> risk。

最后压缩

复杂 Agent 系统的核心能力,不是“会做更多任务”,而是“状态不会漂移,漂移后能被看见、归因、恢复”。