# MiMo Code 是什么

> 小米 MiMo 团队基于 OpenCode 改出的长程编码 Agent：安装与登录、13 个内置智能体及开关、博客三层设计对应的篇目，以及与站内其他专栏的关系。

- 作者：David（道雾轩）
- 专栏：MiMo Code 源码解读（https://daiw.org/manual/mimo-code.md）
- 最后更新：2026-09-17
- 原文：https://daiw.org/manual/mimo-code/what-is-mimo-code
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

MiMo Code 的 README 在标题下只放了一句口号：“MiMo Code: Where Models and Agents Co-Evolve”（`README.zh.md:7`）。中文 README 的自我介绍是终端原生的 AI 编程助手：能读写代码、执行命令、管理 Git，并靠持久化记忆在多次会话之间保持对项目的理解，还能自我进化（`README.zh.md:19`）。官方博客（2026-06-10）把它定位为面向长程（long-horizon）任务的编码 Agent。

这一篇先把它当成产品来看：怎么装、怎么登录、有哪些智能体、博客讲的三层设计落在本书哪几篇。实现细节留给后面各篇。

## 开源与仓库

- 仓库是 `XiaomiMiMo/MiMo-Code`，MIT 许可证。`LICENSE` 里并列两行版权声明，一行属于 MiMo Code 与小米，一行属于 opencode；README 另外要求遵守 `USE_RESTRICTIONS.md` 里的使用限制（`README.zh.md:530`）。
- 2026-06-10 以一个整体提交开源，没有保留上游的 git 历史。本专栏基准为 tag `v0.1.14`（commit `2a0eb70`，2026-09-02）。
- 命令叫 `mimo`，npm 包是 `@mimo-ai/cli`（`packages/opencode/package.json:4`）。但源码目录仍叫 `packages/opencode`，根 `package.json` 的 `name` 也还是 `opencode`。运行时是 Bun，根 `package.json` 的 `packageManager` 是 `bun@1.3.14`。

## 与 OpenCode 的关系

README 说得很直接：MiMo Code 基于 OpenCode fork 构建，保留多 Provider、TUI、LSP、MCP、插件等核心能力，再在上面加持久化记忆、智能上下文管理、子智能体编排、目标驱动的自主循环、Compose 工作流，以及通过 dream/distill 实现的自我进化（`README.zh.md:510`）。

按同路径文件比对，它的首个开源提交最接近上游 OpenCode **v1.14.19**（2026-04-20），之后独立演进，没有再整体同步上游。量级上，`packages/opencode/src` 的 TypeScript 代码（不含测试）从上游的 443 个文件、80081 行涨到 674 个文件、141012 行。基线怎么定、加了什么、删了什么，见[从 OpenCode 分叉：增量全景](https://daiw.org/manual/mimo-code/fork-map)。

## 安装

README 给了三种方式（`README.zh.md:28`）：

```bash
# 一键安装（macOS / Linux）
curl -fsSL https://mimo.xiaomi.com/install | bash

# 一键安装（Windows PowerShell）
powershell -ep Bypass -c "irm https://mimo.xiaomi.com/install.ps1 | iex"

# 或通过 npm 安装（全平台）
npm install -g @mimo-ai/cli

# 运行
mimo
```

- 安装脚本固定装到 `$HOME/.mimocode/bin`（仓库根 `install:68`），再按当前 shell 把这个目录追加进配置文件的 `PATH`。
- npm 包里的 `mimo` 和 OpenCode 一样只是个 Node 启动脚本：设了 `MIMOCODE_BIN_PATH` 就直接执行它；否则按平台与架构拼出形如 `@mimo-ai/mimocode-linux-x64` 的包名（`packages/opencode/bin/mimo:54`，x64 还区分 `baseline`，Linux 还区分 `musl`），在 `node_modules` 里找到预编译二进制后用 `spawnSync` 运行。二进制由 `packages/opencode/script/build.ts:250` 的 `Bun.build` 以 `compile` 选项产出，是自带 Bun 运行时的单文件可执行程序。
- README 还列了几条环境注意事项：WSL 复制乱码装 `xsel`、macOS 自带终端渲染异常改用 iTerm2、Windows 非 UTF-8 区域下的中文乱码；SSH 下卡顿时可以远端 `mimo serve`、本地 `mimo attach`，让 TUI 在本地渲染（`README.zh.md:70`）。

## 登录与配置位置

README 说首次启动会引导配置（`README.zh.md:41`）。TUI 里的 `/login` 与 `/connect` 打开的是同一个对话框 `DialogMimoLogin`（`packages/opencode/src/cli/cmd/tui/app.tsx:823`），最前面三项“推荐”：

| 选项 | 做什么 |
| --- | --- |
| 小米 MiMo 平台 | 对 `xiaomi` 提供方走 OAuth；成功后若该提供方有 `mimo-v2.5-pro`，就把它设为当前模型（`packages/opencode/src/cli/cmd/tui/component/dialog-mimo-login.tsx:196`） |
| Codex | 对 `openai` 提供方走 OAuth，说明文字是 ChatGPT Pro/Plus |
| 从 Claude Code 导入 | 读 `~/.claude/settings.json` 等文件 `env` 段里的 `ANTHROPIC_API_KEY` 与 `ANTHROPIC_BASE_URL`（找不到再读进程环境变量），写成 `anthropic` 提供方的凭据和地址 |

后面接着是完整的提供方列表（`dialog-mimo-login.tsx:159`）。没选到可用模型就发消息，输入框会弹出警告，一个提供方都没有时再打开连接对话框（`packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx:433`）。提供方、认证与模型路由见[模型、提供方与提示词路由](https://daiw.org/manual/mimo-code/providers)。

配置和数据目录都改了名。项目配置向上查找 `.mimocode` 目录（`packages/opencode/src/config/paths.ts:31`），主文件是 `mimocode.jsonc` 或 `mimocode.json`；全局的配置、数据、状态、缓存按 XDG 规范放在名为 `mimocode` 的目录里，设了 `MIMOCODE_HOME` 就统一改到它下面的 `config`、`data`、`state`、`cache` 四个子目录（`packages/shared/src/global.ts:26`）。

## 智能体

`packages/opencode/src/agent/agent.ts` 定义了 13 个智能体，其中两个只在开关打开时注册：

| 智能体 | mode | 说明 |
| --- | --- | --- |
| `build` | primary | 默认智能体，额外放行 `question` 与 `plan_exit` |
| `plan` | primary | 只读分析；“只能写计划文件”的限制放在配置无法放宽的 `hardPermission` 里（`packages/opencode/src/agent/agent.ts:201`） |
| `compose` | primary | Compose 编排模式，描述里已标为 deprecated，建议 Fable/Sol 级模型改用 build 加 `/compose-next`；内置智能体里只有它放行 `compose:*` 技能 |
| `max` | primary | 每步并行跑多个候选、由裁判挑一个执行；配置了 `experimental.maxMode` 才注册（`agent.ts:153`） |
| `orchestrator` | primary | 用 `session` 工具把工作派给子会话的协调者；`MIMOCODE_EXPERIMENTAL_ORCHESTRATOR` 或总开关 `MIMOCODE_EXPERIMENTAL` 为真才注册（`agent.ts:233`） |
| `general` | subagent | 全能力子智能体，带 `completionGate: true` |
| `explore` | subagent | 只读探索，先全部拒绝再逐个放行，放行名单比上游多了 `exec` |
| `title`、`summary`、`compaction` | subagent（隐藏） | 生成标题、摘要与压缩；上游是 primary，MiMo 改为 subagent 并给了空的 `toolAllowlist`；`title` 用 `modelRef: "lite"` 引用 `lite` 模型分组，没配置该分组时退回默认模型 |
| `checkpoint-writer` | subagent（隐藏） | 检查点写手；没有 `prompt` 字段，运行时沿用父会话冻结下来的请求前缀 |
| `dream`、`distill` | subagent（隐藏） | 记忆整理与经验蒸馏；工具限定为读写、搜索、`memory`、`bash`、`exec` 等少数几个 |

所有智能体共享一套默认规则（`agent.ts:109`），相比上游少了 `plan_enter`，多了一条 `skill` 规则，把 `compose:*` 技能默认拒绝。`Tab` 与 `Shift+Tab` 在主智能体之间切换（`packages/opencode/src/config/keybinds.ts:64`），但会话里一旦有了消息，就只允许在 `build` 与 `plan` 之间互切（`packages/opencode/src/cli/cmd/tui/context/local.tsx:50` 的 `FREE_SWITCH_GROUP`），进了 compose、max 或 orchestrator 就不能再换。

隐藏的三个“后台”智能体分别这样被拉起：

- `checkpoint-writer`：主循环在上下文用量跨过阈值时后台启动，环境变量 `MIMOCODE_DISABLE_CHECKPOINT` 可整体关闭（`packages/opencode/src/flag/flag.ts:142`），见[检查点写手](https://daiw.org/manual/mimo-code/checkpoint-writer)。
- `dream`、`distill`：用 `/dream`、`/distill` 手动跑（`packages/opencode/src/command/index.ts:130`）；配置里 `dream.auto`、`distill.auto` 为真时，顶层会话每轮对话的第一步会检查距上次运行是否满 7 天、30 天，满了就在后台新开一个会话去跑（`packages/opencode/src/session/auto-dream.ts:11`），见[Dream 与 Distill](https://daiw.org/manual/mimo-code/dream-distill)。

还有几项能力由开关决定是否出现：`workflow` 工具默认关闭，要设 `MIMOCODE_EXPERIMENTAL_WORKFLOW_TOOL`（`flag.ts:361`）；Try-Best 检测默认关闭，要设 `MIMOCODE_ENABLE_TRY_BEST_HANDOFF`（`flag.ts:280`）；定时任务默认开启，`MIMOCODE_EXPERIMENTAL_CRON=false` 才关（`flag.ts:366`）。

## 博客的三层设计与本书

官方博客把设计分成三层。对应到本书：

| 层 | 博客列出的机制 | 本书篇目 |
| --- | --- | --- |
| 计算层 | Max 模式、Goal 裁判、命令行式工具调用语法、动态 Workflow | [Max 模式](https://daiw.org/manual/mimo-code/max-mode)、[Goal](https://daiw.org/manual/mimo-code/goal)、[命令行式工具调用与 Token 精简](https://daiw.org/manual/mimo-code/token-efficient-shell)、[Workflow 运行时](https://daiw.org/manual/mimo-code/workflow-runtime)、[四个内置 Workflow](https://daiw.org/manual/mimo-code/builtin-workflows) |
| 记忆层 | 周期与检查点、checkpoint writer、分层记忆、重建注入、`notes.md` | [周期](https://daiw.org/manual/mimo-code/cycles)、[检查点写手](https://daiw.org/manual/mimo-code/checkpoint-writer)、[上下文重建与预算化注入](https://daiw.org/manual/mimo-code/context-rebuild)、[分层记忆](https://daiw.org/manual/mimo-code/memory) |
| 进化层 | Dream、Distill | [Dream 与 Distill](https://daiw.org/manual/mimo-code/dream-distill) |

博客没有单列、但代码里分量不小的部分，本书也各占一篇：第 1 部分的[压缩、修剪与请求前缀](https://daiw.org/manual/mimo-code/compaction-and-prune)，第 2 部分的[历史轨迹与全文检索](https://daiw.org/manual/mimo-code/history)，第 3 部分的[树状任务](https://daiw.org/manual/mimo-code/tasks)、[Try-Best 检测与 Hand-off](https://daiw.org/manual/mimo-code/try-best-handoff)、[复读检测与重试](https://daiw.org/manual/mimo-code/loop-recovery)、[定时任务与循环](https://daiw.org/manual/mimo-code/cron)；第 4 部分的多智能体（[Actor](https://daiw.org/manual/mimo-code/actors)、[收件箱与团队](https://daiw.org/manual/mimo-code/inbox-team)、[Orchestrator](https://daiw.org/manual/mimo-code/orchestrator)）；第 5 部分的 [Compose](https://daiw.org/manual/mimo-code/compose) 与 [exec 沙箱](https://daiw.org/manual/mimo-code/exec-sandbox)；以及技能、Git 护栏、MCP、模型提供方、内置 LLM 服务、迁移导入和终端体验。

<Callout type="info">
博客里的数字一律以代码为准。例如博客说检查点约在 20%、45%、70% 处触发，而 v0.1.14 的默认阈值按可用窗口大小分档：窗口在 2.5 万到 20 万 token 之间时是 20%、40%、60%、80% 四档，更大的窗口分得更密（`packages/opencode/src/session/prune.ts:44`），配置 `checkpoint.thresholds` 可以覆盖。
</Callout>

## 入口一览

`packages/opencode/src/index.ts` 用 yargs 注册命令，列表基本沿用上游：默认命令打开全屏 TUI，另有 `run`、`serve`、`attach`、`acp`、`mcp`、`models`、`providers`、`session`、`export`、`import`、`github`、`pr` 等。MiMo 的改动有两处：新增 `llm-server` 命令（`packages/opencode/src/index.ts:199`，见[内置 LLM 服务](https://daiw.org/manual/mimo-code/llm-server)），把 `web` 命令注释掉了（`packages/opencode/src/index.ts:201`）。仓库根的 `AGENTS.md` 也写明 Web、App、Desktop 目前不维护，重心在 TUI 和它底下的引擎。

## 和站内其他专栏对照

- [《OpenCode 源码解读》](https://daiw.org/manual/opencode/what-is-opencode)是这本书的底座。但它对照的是 v1.18.30，比 MiMo 的基线新了近五个月：那边 TUI 已经拆成独立的 `packages/tui`，服务端换成了 Effect HttpApi，还有 `packages/core` 与 LayerNode；MiMo 这边 TUI 仍在 `packages/opencode/src/cli/cmd/tui/`，服务端路由仍是 Hono。引用那本书时要留意版本差，后面各篇遇到时会点出来。
- [《Claude Code 中文手册》](https://daiw.org/manual/claude-code)：MiMo 对 Claude Code 用户做了大量兼容。上游本来就会读 `CLAUDE.md` 与 `.claude` 下的技能；MiMo 又加了 `.claude/commands` 斜杠命令、`.claude/workflows` 下的 Workflow 脚本（`packages/opencode/src/workflow/resolve.ts:24`），每次启动默认把 Claude Code 的会话导入自己的 SQLite（`packages/opencode/src/index.ts:163`，设 `MIMOCODE_DISABLE_CLAUDE_IMPORT` 可关），以及上面登录框里的一键导入凭据。
- [《Codex 中文手册》](https://daiw.org/manual/codex)：模型 ID 含 `gpt`（`gpt-oss` 除外）的模型会自动进入“Codex 模式”，换用 GPT 系统提示词与 Codex 风格的工具集（`packages/opencode/src/tool/gpt.ts:11`），`MIMOCODE_CODEX_MODE` 可强制开或关；技能目录也会扫描 `.codex`（`packages/opencode/src/skill/index.ts:23`），会话同样能从 Codex 导入。迁移细节见[从 Claude Code、Codex 与 OpenCode 迁移](https://daiw.org/manual/mimo-code/imports)。
- 相比[《从 LLM 到 Coding Agent》](https://daiw.org/manual/llm-to-agent)的最小实现，MiMo 多出的代码很多都围绕“让一次任务跑得更久”展开：检查点、记忆、目标裁判、复读恢复；[《Grok Build 源码解读》](https://daiw.org/manual/grok-build)则可以对照同类问题在 Rust 实现里的解法。

下一篇：[从 OpenCode 分叉：增量全景](https://daiw.org/manual/mimo-code/fork-map)——怎么确定上游基线，MiMo 在 `packages/opencode/src` 里加了、改了、删了哪些文件。
