MiMo Code 是什么

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

作者 David更新于 第 1 篇(共 33 篇)

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 是 [email protected]。

与 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 分叉:增量全景。

安装

README 给了三种方式(README.zh.md:28):

# 一键安装(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)。提供方、认证与模型路由见模型、提供方与提示词路由。

配置和数据目录都改了名。项目配置向上查找 .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说明
buildprimary默认智能体,额外放行 question 与 plan_exit
planprimary只读分析;“只能写计划文件”的限制放在配置无法放宽的 hardPermission 里(packages/opencode/src/agent/agent.ts:201)
composeprimaryCompose 编排模式,描述里已标为 deprecated,建议 Fable/Sol 级模型改用 build 加 /compose-next;内置智能体里只有它放行 compose:* 技能
maxprimary每步并行跑多个候选、由裁判挑一个执行;配置了 experimental.maxMode 才注册(agent.ts:153)
orchestratorprimary用 session 工具把工作派给子会话的协调者;MIMOCODE_EXPERIMENTAL_ORCHESTRATOR 或总开关 MIMOCODE_EXPERIMENTAL 为真才注册(agent.ts:233)
generalsubagent全能力子智能体,带 completionGate: true
exploresubagent只读探索,先全部拒绝再逐个放行,放行名单比上游多了 exec
title、summary、compactionsubagent(隐藏)生成标题、摘要与压缩;上游是 primary,MiMo 改为 subagent 并给了空的 toolAllowlist;title 用 modelRef: "lite" 引用 lite 模型分组,没配置该分组时退回默认模型
checkpoint-writersubagent(隐藏)检查点写手;没有 prompt 字段,运行时沿用父会话冻结下来的请求前缀
dream、distillsubagent(隐藏)记忆整理与经验蒸馏;工具限定为读写、搜索、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),见检查点写手。
  • 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。

还有几项能力由开关决定是否出现: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 裁判、命令行式工具调用语法、动态 WorkflowMax 模式、Goal、命令行式工具调用与 Token 精简、Workflow 运行时、四个内置 Workflow
记忆层周期与检查点、checkpoint writer、分层记忆、重建注入、notes.md周期、检查点写手、上下文重建与预算化注入、分层记忆
进化层Dream、DistillDream 与 Distill

博客没有单列、但代码里分量不小的部分,本书也各占一篇:第 1 部分的压缩、修剪与请求前缀,第 2 部分的历史轨迹与全文检索,第 3 部分的树状任务、Try-Best 检测与 Hand-off、复读检测与重试、定时任务与循环;第 4 部分的多智能体(Actor、收件箱与团队、Orchestrator);第 5 部分的 Compose 与 exec 沙箱;以及技能、Git 护栏、MCP、模型提供方、内置 LLM 服务、迁移导入和终端体验。

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

入口一览

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 服务),把 web 命令注释掉了(packages/opencode/src/index.ts:201)。仓库根的 AGENTS.md 也写明 Web、App、Desktop 目前不维护,重心在 TUI 和它底下的引擎。

和站内其他专栏对照

  • 《OpenCode 源码解读》是这本书的底座。但它对照的是 v1.18.30,比 MiMo 的基线新了近五个月:那边 TUI 已经拆成独立的 packages/tui,服务端换成了 Effect HttpApi,还有 packages/core 与 LayerNode;MiMo 这边 TUI 仍在 packages/opencode/src/cli/cmd/tui/,服务端路由仍是 Hono。引用那本书时要留意版本差,后面各篇遇到时会点出来。
  • 《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 中文手册》:模型 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 迁移。
  • 相比《从 LLM 到 Coding Agent》的最小实现,MiMo 多出的代码很多都围绕“让一次任务跑得更久”展开:检查点、记忆、目标裁判、复读恢复;《Grok Build 源码解读》则可以对照同类问题在 Rust 实现里的解法。

下一篇:从 OpenCode 分叉:增量全景——怎么确定上游基线,MiMo 在 packages/opencode/src 里加了、改了、删了哪些文件。

本页目录