不是源码翻译
先回答“为什么这样设计”,再解释事件顺序、边界和代价。
从“为什么不只是一个 while 循环”开始,沿 Cordis 插件树、Turn / Step、事件事实、工具守卫、压缩投影、子代理与工作流,一直走到你能安全扩展自己的 Agent 产品。

先回答“为什么这样设计”,再解释事件顺序、边界和代价。
逐条校准官方 47f9438:49 个顶层包族、324 份文档。
每章都有可点击机制图、不变量、反例、自测与下一章桥接。
49 个包族并不等于 49 个孤岛。用六个平面把复杂度重新装进可推理的抽屉。
决定哪些插件存在、如何分层以及卸载时如何回收。
bootbundlepresetextensions先知道 Harness 解决什么问题,再学习它如何拆分复杂度。
沿着 Cordis 的上下文、effect、服务、事件、作用域与配置树读系统。
从 Agent 创建到 SessionEvent、Turn、Step、Prompt、LLM 与工具执行。
谁有权销毁一个 Agent?创建失败一半时又如何回滚?
为什么连原始 assistant/chunk 都要持久化,而不是只存最终消息?
为什么“用户发了一条消息”不等于“系统只会请求一次模型”?
插件如何增加模型可见上下文,又不让所有人共同编辑一份 systemPrompt?
DeepSeek、重放模型或其他 Provider 的流式事件为什么能进入同一 Agent Loop?
为什么一个后加载插件不能把前面已经 deny 的危险调用重新放行?
审批、沙箱、文件系统、压缩、持久化、投影与防御性不变量。
为什么“danger-full-access + never ask”仍然不等于所有工具都能执行?
为什么替换 subprocess provider,Bash、PTY、LSP 与外部子 Agent 会一起迁移?
如何缩短模型上下文,同时不破坏工具 call/result 配对、不删除原始事实?
会话列表为什么不应该为每一行加载完整 SessionEvent 日志?
为什么一个超时不能简单地 Promise.race 后忘掉仍在运行的工作?
目标、计划、待办、子 Agent、后台任务、工作流、调度和能力发现。
把理解落到工具、适配器、客户端表面、Profile 与 Bundle。
第一章只需要 12 分钟:先把 Harness 和 Agent Loop 的差别讲清楚。
开始深读