源码阅读与工程文章

把复杂系统 拆成能讲清的路径

这里记录源码阅读、架构分析和工程实践。每个系列先从一个具体任务说明问题, 再按程序实际发生的顺序,追踪消息、状态、工具调用和恢复过程。

按关键词查找文章 →
Rememorio 工程阅读路径插图:从问题和源码出发,依次理解程序怎样运行、保存结果、验证输出并在失败后恢复

目录

文章

显示范围

搜索覆盖全部文章,不限于前 12 篇。

DeepSeek Harness 源码笔记 · 第七篇当 Agent 能扩展自己的运行时:从只读 Inspect 到持久化插件

沿两个只读 Inspect 工具、plugin_manager 与持久 Bundle,区分 profile 保存、Host 激活和浏览器验收。

DeepSeek Harness 源码笔记 · 第六篇多 Agent 不是多条消息

沿 spawn/fork、sendMessage、驻留容量、PTC workflow、Ralph 与 Team,区分消息接受、任务完成和资源清理。

DeepSeek Harness 源码笔记 · 第五篇压缩不是删历史:重写模型表面,还原请求前缀

从文本裁剪、图片卸载与摘要替换,读懂 system 消息、request/header 和缓存前缀怎样共同重建请求。

DeepSeek Harness 源码笔记 · 第四篇副作用不是一次函数调用:从 flush 到可恢复执行

沿 tool/call、durability checkpoint、approval、sandbox、JSONL 与 crash repair,拆开意图、授权、约束和结果未知。

DeepSeek Harness 源码笔记 · 第三篇Model-visible means logged 到底约束了什么

从四类消息、实时流结算与可重放投影,区分模型 surface 和人类时间线,再验证 v3 恢复边界。

DeepSeek Harness 源码笔记 · 第二篇Everything is a Plugin 怎样落到 Cordis

从 patch 合成、Context、Service、isolate、Fiber 生命周期与 HMR,读懂一棵可替换运行时怎样保持顺序和所有权。

DeepSeek Harness 源码笔记 · 第一篇 从 dsh web 到一次 turn/end

把 Profile、Bundle、Cordis、ReactLoopAgent、SessionEvent 与 Web/ACP 串成一条完整主线,再进入状态投影、副作用和恢复边界。

Agent 自进化 · 第一篇 SkillOpt-Lite:当 Coding Agent 成为自己的优化器

从失败轨迹和多次运行中找出共性,让 Coding Agent 修改 skill.md,再用同一套验证决定是否保留;同时检查 HarnessOpt 当前还没有接通的执行步骤。

OpenClaw 源码阅读 · 第八篇Heartbeat、Automation 与重启恢复怎样让 Agent 常驻

区分 heartbeat、定时任务和后台任务,看计划怎样保存、消息怎样避免重复投递,以及进程重启后哪些工作可以继续。

OpenClaw 源码阅读 · 第七篇多 Agent 怎样委派、继承与交付

区分配置级 Agent、native subagent 与 ACP harness,看子任务继承哪些上下文和工具权限、完成后怎样把结果送回父任务。

OpenClaw 源码阅读 · 第六篇Tool Policy、Sandbox、Approval 与 Elevated 怎样组成安全边界

先看哪些工具会被暴露,再看命令在哪运行、哪些操作需要用户同意,以及 elevated 何时允许跳出 sandbox。

OpenClaw 源码阅读 · 第五篇工具、技能、插件与 Hook 怎样装配成能力

看 OpenClaw 怎样发现工具、加载 Skills 和插件、按策略过滤可用能力、校验参数,并在调用前后执行 hooks。

OpenClaw 源码阅读 · 第四篇上下文、记忆与压缩怎样共同工作

从 workspace bootstrap、system prompt 与 ContextEngine 读到 transcript、memory、pruning 和 compaction,弄清模型本轮真正看到什么。

OpenClaw 源码阅读 · 第三篇路由、会话与队列怎样决定消息归属

看消息怎样匹配 Agent 和会话,再比较 steer、followup、collect 与 interrupt 如何决定新消息插队、等待或中断当前工作。

OpenClaw 源码阅读 · 第二篇Gateway 为什么是控制平面

区分 operator、node 与受限 worker 入口,跟随握手、授权和事件投递,理解断档后为何要重新读取状态。

OpenClaw 源码阅读 · 第一篇 一条消息怎样跑完整个 Agent 回合

跟随一条消息从 ChannelPlugin、sessionKey 和队列进入 embedded agent,再走到工具事件、完成状态与最终回复。

模型内部 · 第五篇Activation Steering、Reflection Training 与 Alignment Auditing

对照 ActAdd 与 CAA 的注入位置,区分推理时干预、reflection training 与独立审计,以及各自的验证和回滚条件。

模型内部 · 第四篇Persona、自我模型与 Post-training

从角色方向的提取、Assistant axis 与单侧 capping,理解 post-training 如何稳定角色,以及自我模型证据的限度。

模型内部 · 第三篇CoT Monitoring、NLA、SAE 与 Latent Reasoning

比较 CoT、NLA、SAE 与 J-lens 的证据边界,并从 Coconut 源码理解连续思维。

模型内部 · 第二篇J-space 与 Silent Reasoning

区分 J-lens 读取、稀疏重构与因果干预,跟随官方 jlens 实现核对拟合、读数和复现边界。

模型内部 · 第一篇 从 Activation 到 Agent 行为

跟随一次文件修改,分清模型计算、工具调用提案、runtime 执行,以及 activation、KV 缓存和持久记录。

Go 从请求到生产现场 · 第九篇升级 Go,究竟改变了什么

用 Go 1.22 循环变量实验分清工具链、语言版本与兼容默认,再看 timer、容器调度、GC 和版本迁移。

Go 从请求到生产现场 · 第八篇 连接复用之后,瓶颈藏在哪里

沿 Transport.getConn、persistConn、bodyEOFSignal 与 HTTP/2 stream/flow control,最后用 httptrace、metrics、pprof、trace 和 race 联合诊断。

Go 从请求到生产现场 · 第七篇 一个请求为什么在堆上

沿编译器逃逸图、slice backing array、mallocgc、每 P 的 mcache、并发 GC、写屏障与 mark assist,拆开分配速率和 live heap。

Go 从请求到生产现场 · 第六篇 context 取消之后,goroutine 结束了吗

沿 cancelCtx、Cause、timer、AfterFunc、WithoutCancel、request context 与 Server.Shutdown,拆开 signal、cleanup 和 join。

Go 从请求到生产现场 · 第五篇 interface、泛型与反射的边界

沿 interface 的两个 word、getitab/itabInit、convT、gc shape 与字典、reflect.Value,拆开三种抽象各自保留的类型信息。

Go 从请求到生产现场 · 第四篇 什么时候 channel,什么时候锁

沿 hchan、chansend/chanrecv、sudog、selectgo、Mutex 与 runtime semaphore,拆开通信、背压和临界区。

Go 从请求到生产现场 · 第三篇 goroutine 到底跑在哪里

从 go h.fetch 进入 newproc、local/global runq、findRunnable、work stealing、抢占与 runnable latency。

Go 从请求到生产现场 · 第二篇 赋值复制了什么,slice 又共享了什么

从 URL slice、result channel 与 JSON 聚合出发,沿规范与 runtime 源码拆开值复制、别名、append 扩容、interface 和 range 变量。

Go 从请求到生产现场 · 第一篇 一条请求怎样穿过 net/http 与 runtime

跟随一个并发抓取请求,从 Server.Serve、请求 context 与 Transport 一直读到 internal/poll、netpoll 和 runnable goroutine。

AI Engineering · 第七篇Evals:怎样知道 Agent 真的做好了

从一道可重复的任务开始,逐步建立结果、过程、安全与运行检查。

AI Engineering · 第六篇Outer Loop:让一次次运行接力完成长期工作

一次运行会结束,任务怎样保存进度、恢复、验证和决定下一次。

AI Engineering · 第五篇Agent Loop:让 Agent 一步一步把任务做完

跟着读取、修改、测试和再判断的多轮过程,理解一次运行怎样前进。

AI Engineering · 第四篇Harness Engineering:给 Agent 一套安全做事的环境

看一句“运行测试”怎样经过工具、权限、隔离和记录,变成真实动作。

AI Engineering · 第三篇Context Engineering:把当前需要的材料准备好

区分资料库、检索候选和模型此刻真正能看到的材料。

AI Engineering · 第二篇Prompt Engineering:把任务要求说清楚

从一句模糊请求开始,逐步补齐目标、背景、限制、完成标准和输出。

AI Engineering · 第一篇 一个 Agent 任务是怎样完成的

沿支付测试任务认识六类工程职责,用 Codex 源码区分受理、运行结束与验收。

AI 视频生产系统 · 第二篇 OpenMontage:当 coding agent 负责推进一支视频

沿 manifest、stage director、checkpoint、render lock 与 final review,分清 Agent 操作指引、代码检查和项目文件恢复;检查点不会自动续跑执行流程。

AI 视频生产系统 · 第一篇 Temporal:当一次 AI 视频生成不能随着进程消失

跟随一支 AI MV 走过 Workflow、Activity、Event History、replay、heartbeat 与外部幂等边界,看长任务怎样活过 worker。

AI 视频生产系统 · 第零篇 从任务存活到成片交付:两种“恢复”差在哪里

先分开 Temporal 保存的任务身份与事件历史,以及 OpenMontage 保存的创作阶段、工件和人工批准,再进入两篇源码。

Agent Memory · 第零篇 Agent Memory 系列:长期记忆不只是向量检索

先比较 Mem0、Letta、Graphiti、LangMem、TencentDB、OpenViking、Cognee 与 Supermemory 分别保存什么、何时写入、怎样召回,再进入每篇源码。

Agent 框架源码阅读 · 第十三篇 tRPC-Agent-Go Evolution 怎样学习,也怎样拒绝坏 Skill

分别跟随在线复盘与 Skill 发布、独立的 GEPA 离线优化及 SkillCraft 评测,区分候选改写、验证证据和实际生效。

Agent 框架源码阅读 · 第十二篇 tRPC-Agent-Go Memory 怎样把经历变成可检索知识

跟一条用户环境事实走完 delta、extract、reconcile、Fact/Episode 与混合检索,再用 LoCoMo-10 检查质量、成本和拒答退化。

Agent 框架源码阅读 · 第十一篇 tRPC-Agent-Go 怎样运行任务与整理上下文

先沿 Runner、Agent、Model 和服务组件走完一次请求,再看 Summary、Context Compaction 与 Session Recall 分别何时压缩、怎样重建、从哪里找回原始事件。

Agent 框架源码阅读 · 第十篇 Eino 怎样把 Agent 应用编译成 Go 执行图

从 Component、Runnable 与 compose Graph 看一张图怎样编译成可运行的 Go 代码,再追踪 checkpoint、callback、ADK Runner、ChatModelAgent 和 AgentTool。

Agent 框架源码阅读 · 第九篇 CrewAI 把 Agent 写成团队流程,而不是消息总线

从 Agent、Task、Crew、Process 和 Flow 源码看 CrewAI 如何把团队自治和生产控制拆开建模。

Agent 框架源码阅读 · 第八篇 AutoGen 到 Microsoft Agent Framework:从多 Agent 对话到生产编排

AutoGen 已进入 maintenance mode。本文从 Core runtime、AgentChat team 读到 MAF 的 Agent、Workflow、Orchestrations 和 Hosting。

Agent 框架源码阅读 · 第七篇 Agno 把 agent 做成平台,而不是只做成对象

看 AgentOS 如何注册 Agent、Team 与 Workflow,提供运行 API 和存储,并把审批、RBAC、定时任务与外部接口接到同一套服务中。

Agent 框架源码阅读 · 第六篇 ADK Python 为什么把 Agent 和 Workflow 放在一起

看 ADK 2.0 如何让同一个 Runner 执行自主 Agent 与确定性 Workflow,并把过程写成 Session Event、通过 Task API 暴露长任务。

Agent 框架源码阅读 · 第五篇 Agent 协议到底在连接谁

用一个合同续约任务确认 MCP、A2A、AG-UI、Agent Client Protocol 与模型 Provider API 分别连接哪两端、传递什么,以及不能替代谁。

Agent 框架源码阅读 · 第四篇 Agent 的工作现场在哪里

用同一项脚本任务拆开 Coding / General 与 Local / Cloud,再看 workspace、sandbox、session、artifact 和 memory 分别存在哪里,沙箱销毁后哪些还能留下。

Agent 框架源码阅读 · 第三篇 跟 AgentScope 的 reply_stream 走一遍

在 Pi 的最小基线上,沿 AgentScope 的回复主线看事件怎样流动、状态怎样记录、工具何时获准执行,以及 Responses API 与 Chat Completions 的适配差异。

Agent 框架源码阅读 · 第二篇 Pi 为什么把 Coding Agent 做成可扩展的 Harness

沿 pi-ai、agent-core 和 coding-agent 看最小实现怎样运行工具循环、保存会话树并压缩上下文,又把 plan、sub-agent、MCP 与权限策略留给扩展。

Agent 框架源码阅读 · 第一篇 Agent 框架到底在框什么

从 Claude Code 和 Codex 的运行主线回看通用框架:比较模型调用、工具执行、状态保存与权限检查分别由哪些组件完成。

Agent Memory · 第一篇 Mem0 记忆算法怎么演进:从可更新记忆、图关系,到 ADD-only 写入与多信号检索

从 paper mem0、mem0g 到 2026 年 4 月的 v3,读 Mem0 为什么走向只追加写入、实体索引和多信号检索。

Agent Memory · 第二篇 Letta / Letta Code:Agent 恢复运行时,哪些记忆会一起回来

区分已归档 V1 的 Block 与 AgentState 恢复,以及当前 Letta Code 本地后端怎样编译 Git 已提交记忆并让后续轮次读取。

Agent Memory · 第三篇 Graphiti / Zep:事实变化后,怎样保留历史与当前状态

从 episodes、EntityEdge、valid_at / invalid_at 和 hybrid retrieval,读 Graphiti 怎样让事实失效但保留历史。

Agent Memory · 第四篇 LangMem / LangGraph:记忆何时立刻写,何时后台整理

从 manage_memory、BaseStore、checkpointer 和 background manager,读记忆到底由哪条执行路径改写。

Agent Memory · 第五篇 TencentDB Agent Memory:从本地记忆,到团队记忆服务器

从 Context Offload 和 L0-L3,到 Gateway、Memory Hub、Memory Proxy,读团队资产怎样进入 Agent 上下文。

Agent Memory · 第六篇 OpenViking:当 Memory、Resource 与 Skill 进入同一棵上下文树

沿一个 coding-agent 任务,读懂 viking://、L0/L1/L2、find/search 与两阶段 session commit,以及哪些内容最后会进入模型请求。

Agent Memory · 第七篇 Cognee / Supermemory:当多个 Agent 共用一套记忆服务

比较 Cognee 的 add / cognify / recall 与 Supermemory 的 add / profile / search / connectors,看多个 Agent 怎样共用写入、检索与用户资料。

Claude Code 源码阅读 · 第一篇 先跟一次任务走完 Claude Code 的运行主线

先沿公开镜像源码把 CLI、REPL、队列、query loop、模型调用、工具执行、 transcript 和 resume 串成一条可继续深入的阅读路线。

Claude Code 源码阅读 · 第二篇 Memory 不是聊天记录,而是长期指令层

沿 CLAUDE.md 与各类 memory 文件,区分缓存读取、失效重载和不同请求入口;文件写入不等于下一次请求立即更新。

Hermes Agent 源码阅读 · 第二篇 Hermes Agent:一条信息究竟该放在哪

区分 stable、context、volatile 与 turn-only,判断事实、证据、流程和临时状态分别应该写进哪个位置。

Hermes Agent 源码阅读 · 第三篇 Hermes Agent:任务收尾时,经验怎样进入后台复盘

沿 finalizer、受限后台复盘与独立 Curator 周期,区分候选提案、已应用写入和后续可见状态。

Hermes Agent 源码阅读 · 第四篇 Hermes Agent:一条 /learn 请求怎样变成 Skill

跟着指定资料的读取、归一化、写入、关系更新和后续加载,理解主动学习真正改变了哪份长期状态。

Hermes Agent 源码阅读 · 第五篇 Hermes Agent:训练、验证与留出怎样分工

从任务记录、rubric 和数据来源开始,先建立公平比较的尺子,再启动任何 Skill 优化。

Hermes Agent 源码阅读 · 第六篇 Hermes Agent:DSPy 与 GEPA 怎样改写 Skill

把 Skill 接成可修改的 instruction,跟完执行、反馈、改写与复测,再确认 Self-Evolution 原型实际接通了哪些步骤。

Hermes Agent 源码阅读 · 第七篇 Hermes Agent:代码改完之后,什么才算真的交付

检查项目命令、hermes verify 与可选证据记录;结束前验证默认关闭,开启后也只有有界提醒,交付结论仍需核对实际结果。

Claude Code 源码阅读 · 第三篇 上下文快爆了,Claude Code 不是直接总结

沿公开镜像源码拆解基础上下文、模型实际收到的内容、microcompact、auto compact 和 compact 后恢复,说明上下文为什么不是一段普通聊天记录。

Claude Code 源码阅读 · 第四篇 工具调用先检查,再执行

从 query()、runTools() 和 runToolUse() 看模型提出 tool_use 后,runtime 怎样校验、调度、过权限闸并回填结果。

Claude Code 源码阅读 · 第五篇 权限不是弹窗,而是副作用刹车

沿权限上下文、allow/deny/ask 规则、PreToolUse、PermissionRequest 和拒绝回填, 看本地副作用怎样被客户端运行时约束。

Claude Code 源码阅读 · 第六篇 命令、Skills 与 MCP,能力是怎样进上下文的

从 getCommands()、slash command、SkillTool 和 MCP 连接出发, 看扩展能力怎样进入本轮命令表与工具池。

Claude Code 源码阅读 · 第七篇 Subagent 不是另一个聊天窗口,而是隔离的工具上下文

从 AgentTool、runAgent() 和 createSubagentContext() 看普通子代理与 fork path 怎样重建一份可控上下文。

Claude Code 源码阅读 · 第八篇 Hooks 不是脚本回调,而是运行时关口

从 HOOK_EVENTS、hook matcher、工具权限交互、UserPromptSubmit、 SessionStart、Stop 和 compact hooks 出发,看每个 hook 何时运行、能修改什么或阻止什么。

Claude Code 源码阅读 · 第九篇 Resume 不是续聊天,而是重建运行时状态

从 transcript 写入、反序列化、SessionStart(resume)、session restore、 worktree、agent 和 content replacement 出发,看旧会话怎样恢复成可继续执行的 runtime。

Claude Code 源码阅读 · 第十篇 Prompt cache 不是开关,速度来自请求形状

从 cache_control、稳定前缀、动态工具避让、fork cache-safe params、 cached microcompact 和 cache break detection 出发,看速度为什么来自请求形状。

Codex 源码阅读 · 第一篇 先跟一次请求走完 Codex 的运行主线

跟随一次请求进入 session 与 turn,区分每步上下文、可选工具循环、客户端通知和用于恢复的持久记录。

Codex 源码阅读 · 第二篇 会话记录怎样变成下一次模型请求

看历史记录与 StepContext 怎样分别准备,再由 for_prompt、WorldState 更新和 compaction 组成下一次模型输入。

Codex 源码阅读 · 第三篇 protocol 与事件流,客户端怎样共享同一套事实

区分 turn/start 的新建与补充输入、接受回执与完成事件,以及实时通知和筛选后的持久记录。

Codex 源码阅读 · 第四篇 模型的工具请求怎样变成本地执行

从工具注册表和调用路由走到 UnifiedExec,区分调用结果、仍在运行的进程和回到模型的工具输出。

Codex 源码阅读 · 第五篇 权限与 sandbox 怎样约束一次执行

看审批策略、统一审查与 SandboxAttempt 怎样决定运行、拒绝或沙箱受阻后的受控重试。

Codex 源码阅读 · 第六篇 运行时事件怎样变成客户端界面

沿 core、app-server 与客户端跟踪事件,区分流式显示、审批请求和从 rollout 重建的 turn/item。

Codex 源码阅读 · 第七篇 Skills、plugins、MCP 与 subagents 怎样进入一次 turn

分清技能指令、插件资源、MCP 工具暴露与子任务的职责,以及它们怎样进入当前步骤。

Codex 源码阅读 · 第八篇 Hooks 在 turn 的哪些时刻运行,能改变什么

按各自触发条件理解 prompt、tool、permission、compact、stop、interrupt 与 session end,判断 hook 能改变什么。

Codex 源码阅读 · 第九篇 Codex 怎样构造可复用的请求前缀

区分请求前缀、缓存计量与 WebSocket 增量续传,核对不同模型的缓存契约和普通 Responses / Lite 请求形状。

Codex 源码阅读 · 第十篇 从 Rollout 记录重建会话与分叉

跟随 JSONL 写入、反向扫描和尾部重放,理解会话恢复、分叉快照以及旧 rollback 记录的兼容处理。

Codex 源码阅读 · 第十一篇 SDK 与 app-server 怎样把外部调用转成 thread 和 turn

看初始化、thread 与 turn 请求怎样接入 app-server,并区分事件订阅、输入接受和任务完成。

Codex 源码阅读 · 第十二篇 Codex 怎样从旧 thread 提取并复用经验

看两阶段后台任务怎样提炼经验,隔离 v1/v2 记忆、处理污染来源,并在未来请求中按需复用。

Codex 源码阅读 · 第十三篇 Windows sandbox 怎样限制文件写入与网络访问

看受限账户、令牌、ACL、网络规则与服务所有权检查怎样共同约束 Windows 命令执行。

Hermes Agent 源码阅读 · 第一篇 Hermes Agent:一轮任务如何运行,并把经验留给以后

从用户消息走到 finalizer,看模型与工具怎样接力、记录怎样保存、任务怎样恢复,以及完成后的经验怎样留给以后。