MiMo Code 源码解读
逐层拆读小米开源的终端编码 Agent“MiMo Code”的源码——它从 OpenCode 分叉而来,这本书讲它为长程任务加了什么:检查点与上下文重建、分层记忆、防空转、Actor 与 Workflow。
MiMo Code(命令行叫 mimo)是小米 MiMo 团队开源的终端编码 Agent:跑在终端里的全屏 TUI,能读写代码、执行命令、管理 Git,并靠持久化的记忆在多次会话之间保持对项目的理解。它不绑定模型,除了小米 MiMo 平台,也能接入各家厂商的 API。
它不是从零写的。MiMo Code 以 OpenCode 为底座,2026 年 6 月以一个整体提交开源,按源码比对最接近 OpenCode v1.14.19(2026-04-20),此后独立演进。底座之上,它把功夫下在长程任务上:一个任务跑上几百步、跨越好几个上下文窗口时,怎样不丢状态、不原地打转、不过早收工。
这个专栏把这些改动逐层拆开读。
源码基准
本专栏所有引用以下述快照为准:
| 项 | 值 |
|---|---|
| 仓库 | github.com/XiaomiMiMo/MiMo-Code |
| commit | 2a0eb706e95a77cba34a319e9f11f33f26d4450c(即 v0.1.14 标签) |
| 版本 | @mimo-ai/cli v0.1.14 |
| 快照日期 | 2026-09-02 |
| 上游基线 | OpenCode v1.14.19(2026-04-20) |
| 许可 | MIT |
| 运行要求 | 从源码开发需 Bun 1.3.14 |
所有路径都相对仓库根,例如 packages/opencode/src/session/checkpoint.ts。注意引擎目录仍叫 packages/opencode,产品层面的名字才改成了 MiMo:配置目录是 .mimocode/,环境变量以 MIMOCODE_ 开头。
规模:git 跟踪的 .ts/.tsx 文件(不含测试)全仓 1433 个、约 30.2 万行;其中引擎所在的 packages/opencode/src 有 674 个文件、14.1 万行,而上游 v1.14.19 的同一目录只有 443 个文件、8 万行。多出来的部分——新增 238 个文件约 4.2 万行、改动 254 个文件,外加约 5.3 万行的内置技能包——就是本书的主题,全景见从 OpenCode 分叉:增量全景。
读者预设:默认你会读 TypeScript。MiMo 沿用了 OpenCode 的 Effect 写法,不熟的话先读《OpenCode 源码解读》的“怎么读这份源码”。上游原有的机制,本书一两句带过并链接到那本书;但那本对照的是 OpenCode v1.18.30,比 MiMo 的基线新了近五个月,细节未必相同,凡本书涉及之处都以 MiMo 的代码为准。
这个专栏怎么读
每一章尽量走两条线:
- 怎么用——这个功能在
mimo里长什么样、怎么开启、怎么配置; - 怎么实现——翻到对应模块的源码,看它在底层到底怎么做,以及相对上游 OpenCode 改了什么。
侧重结构与数据流:讲清“一件事经过哪些模块、数据怎么流、边界契约是什么”,而不是逐行贴代码——关键处才引一小段源码点睛。MiMo 仓库自带不少设计文档与博客说明,本书逐条对照过代码,二者不一致时写代码的实际行为,并在正文里指出出入。
和站内其他专栏的关系
| 专栏 | 视角 |
|---|---|
| 《OpenCode 源码解读》 | 底座:MiMo 沿用的服务端架构、会话引擎、工具与提供方适配 |
| 《从 LLM 到 Coding Agent》 | 教学最小实现:一个 Coding Agent 在裸 LLM API 之上该做哪些事 |
| 《Grok Build 源码解读》 | Rust 生产实现:xAI 的终端 Agent 怎么做 |
| 《Kimi Code 源码解读》 | 另一种 TypeScript 生产实现:DI × Scope 引擎、vendored 的 pi-tui 与自研嵌入式数据库 |
| 《Claude Code 中文手册》、《Codex 中文手册》 | MiMo 能导入这两家的会话,也能在原地打转时把活交给它们的命令行 |
| 本专栏 | 在底座上做长程任务改造:状态怎么跨窗口、Agent 怎么自己判断该不该停、多个 Agent 怎么协作 |
它有什么特别的
读之前先知道这份源码值得看的地方:
- 一个会话,多段窗口。检查点按上下文用量分档在后台写入,由隐藏的 checkpoint-writer 子智能体按 11 节模板维护;用量越过触发线,就用检查点、用户原话和各级记忆重建上下文,写不出检查点才退回传统压缩。
- 记忆分层,定期整理。项目
MEMORY.md、会话笔记、任务进展都是磁盘上的文件,FTS5 只当检索缓存;dream与distill两个隐藏智能体回看近期会话(可手动触发,自动运行要在配置里打开),把知识并进记忆、把反复出现的手工流程打包成可复用的技能等资产。 - 防空转。
/goal让一次单独的裁判调用决定能不能收工;Try-Best 检测器(默认关闭)发现原地打转就暂停当前轮,可交给 Codex CLI 或 Claude Code CLI 接手;n-gram 监控打断复读;实验性的 Max 模式每一步并行生成多个候选再挑一个。 - 多智能体。actor 注册表取代了上游的 task 子代理,前台后台、同会话切片与独立子会话都能表达;持久化的收件箱把后台结果与权限请求送回父会话;实验性的 Orchestrator 用一个会话调度一群子会话。
- 可编程的编排。Workflow(实验开关,默认关闭)把多智能体流程写成跑在 QuickJS 里的脚本,内置 compose、deep-research、fact-check、research-experiment 四个;GPT 类模型顶层只看到一个
exec工具,在同一个沙箱里批量调用宿主工具。 - 为 token 与模型差异做的工程。配置打开后,actor、task、cron、session 四个工具可以改用受限的命令行语法调用,实验开关下 bash 输出还会按形状剪裁;系统提示词按模型家族挑选;每个实例还内置一套 OpenAI 兼容的
/v1接口,让技能和子进程借用已配置的模型。
路线图
- 第 0 部分 · 导论与全景——它是什么、从 OpenCode 分叉的增量全景、怎么读这份源码、一条消息的旅程。
- 第 1 部分 · 长程上下文——周期与检查点、检查点写手、上下文重建、压缩与修剪。
- 第 2 部分 · 记忆与自我进化——分层记忆、历史轨迹检索、Dream 与 Distill。
- 第 3 部分 · 自主运行——Goal 裁判、树状任务、Try-Best 与 Hand-off、复读检测与重试、Max 模式、定时任务。
- 第 4 部分 · 多智能体——Actor、收件箱与进度检查、Orchestrator。
- 第 5 部分 · 编排——Compose、Workflow 运行时、四个内置 Workflow、exec 与 QuickJS 沙箱。
- 第 6 部分 · 工具、技能与护栏——内置技能与检索、命令行式工具调用与 Token 精简、Git 隔离与安全护栏、MCP。
- 第 7 部分 · 模型、服务与终端——提供方与提示词路由、内置 LLM 服务、从其他 Agent 迁移、终端体验,以及全书回顾。
准备好了,就从 MiMo Code 是什么 开始。