配置覆盖

MiMo Code 的运行参数来自三处:用户配置文件、命令行选项、进程级环境变量。三者作用场景不同,环境变量并不是配置字段的通用后备来源,需要分类理解。CLI 可执行文件名是 mimo


环境变量的三类作用

环境变量在 MiMo Code 里承担三类职责,互不交叉。完整变量表见环境变量

  1. 资源定位与注入MIMOCODE_HOME 决定 profile 根目录,MIMOCODE_CONFIG / MIMOCODE_CONFIG_DIR / MIMOCODE_CONFIG_CONTENT 直接指向配置来源,MIMOCODE_PERMISSION 内联注入 permission 段。
  2. 运行时开关MIMOCODE_DISABLE_*MIMOCODE_ENABLE_* 系列控制某个能力是否启用,语义是"在配置之上额外开关"。例如 MIMOCODE_DISABLE_AUTOUPDATE 即便配置里写了 autoupdate: true 也会关闭自动更新。
  3. 鉴权与端点MIMOCODE_AUTH_CONTENT / MIMOCODE_CONSOLE_TOKEN / MIMOCODE_SERVER_PASSWORD 等供 CI 与服务模式注入凭证。

普通运行参数的优先级

非环境变量类参数的解析顺序是:命令行选项 > 配置文件。但有几点要先理清。

  • 多数 CLI flag(--model / --agent / --variant / --prompt / --continue 等)只作为本次 prompt 的运行参数,不写回 mimocode.json,下一次会话仍读配置文件中的值。
  • 网络相关 flag(--port / --hostname / --mdns / --mdns-domain / --cors)只有在命令行中真正传入时才覆盖 config.server.*。其中 --cors追加到配置 CORS 列表,不是替换。
  • 少数环境变量会明确覆盖配置字段:例如 MIMOCODE_AUTO_SHARE=true 等价于 share: "auto"MIMOCODE_DISABLE_AUTOCOMPACT=true 等价于关闭 compaction.auto。这种"环境变量覆写配置字段"的情况是个例,参见各字段说明。
NOTE

没有 --config--config-file 这样的 flag。 要指定配置文件,只能通过 MIMOCODE_CONFIGMIMOCODE_CONFIG_CONTENT。要切换整个 profile 根目录,用 MIMOCODE_HOME


配置文件

配置文件的位置由 MIMOCODE_HOME 控制;未设置时,全局配置默认在 $XDG_CONFIG_HOME/mimocode/(macOS 与 Linux 上等价于 ~/.config/mimocode/)。

MIMOCODE_HOME 必须是绝对路径(不接受 ~/ 前缀),否则启动直接报错。设置后下列四个基础目录整体迁移到该路径下:

$MIMOCODE_HOME/ ├── config/ ← 全局配置文件 ├── data/ ← auth.json、会话数据库 ├── state/ └── cache/

文件名规则:

  • 全局目录接受 config.json / mimocode.json / mimocode.jsonc,按此顺序依次合并(后者覆盖前者)。
  • 项目目录只接受 mimocode.json / mimocode.jsonc,从当前目录向上查找到 worktree 根,父目录在前、当前目录在后逐层合并。其他名称(如 opencode.json)不会被加载。
  • .mimocode/MIMOCODE_CONFIG_DIR 内同样使用 mimocode.json(c)

合并规则:

  • 通用合并是 deep merge,对象逐 key 递归。
  • 数组默认整段替换;instructions 例外,去重拼接。
  • plugin / mcp 同名条目后写者覆盖(与 deep merge 一致)。例外:Claude Code 兼容层向 mcp 注入 ~/.claude.jsonmcpServers 时,若 mcp 中已有同名条目则跳过,避免覆盖用户显式配置。
  • tools 字段会被翻译为派生的 permission 项,但用户显式写的 permission 优先
  • theme / keybinds / tuimimocode.json被静默丢弃并提示迁移到 ~/.config/mimocode/tui.json
  • macOS MDM 管理偏好/Library/Managed Preferences/.../ai.opencode.managed.plist)在所有用户层配置(含 MIMOCODE_CONFIG_CONTENT)之上整段覆盖,普通用户无法绕过。

字段定义见配置文件


供应商凭证

凭证(API key、OAuth token 等)不放在 mimocode.json,独立存放在 auth 文件:

  • 默认从 $XDG_DATA_HOME/mimocode/auth.json 读取,权限 0o600MIMOCODE_HOME 设置后随之迁移。
  • MIMOCODE_AUTH_CONTENT 接收一整段 JSON 文本作为内联凭证,CI 场景用。
  • 在默认的 mimo-only 模式MIMOCODE_MIMO_ONLY=true)下,不会从 shell 中读取 ANTHROPIC_API_KEY / OPENAI_API_KEY 等 provider 环境变量作为后备。MIMOCODE_MIMO_ONLY=false 能恢复这种回退;单独设 MIMOCODE_DISABLE_PROVIDER_ENV=false 无效(mimo-only 为 true 时该 flag 永远为 true)。
  • 若希望将凭证写入 mimocode.json 而又不暴露在版本控制中,使用 {env:VAR}{file:path} 占位符(见配置文件 · 变量替换)。

进程级环境变量

进程级环境变量的实际作用集中在以下方向,与上文"三类作用"对应:

  • 资源根目录与配置注入MIMOCODE_HOME / MIMOCODE_CONFIG / MIMOCODE_CONFIG_DIR / MIMOCODE_CONFIG_CONTENT / MIMOCODE_PERMISSION
  • 运行时开关MIMOCODE_DISABLE_* / MIMOCODE_ENABLE_* / MIMOCODE_PURE
  • 鉴权与端点MIMOCODE_AUTH_CONTENT / MIMOCODE_SERVER_PASSWORD / MIMOCODE_SERVER_USERNAME / MIMOCODE_CONSOLE_TOKEN / MIMOCODE_WORKSPACE_ID
  • 诊断与内部MIMOCODE_SHOW_TTFD / MIMOCODE_AUTO_HEAP_SNAPSHOT 等,不建议常规使用。

完整变量、默认值与语义见环境变量


命令行选项

下表为最常用的全局选项;按子命令归类、仅与配置交互或改变本次运行行为的项。完整列表见命令行运行

选项适用子命令作用
-m, --model <provider/model>根 / run本次会话使用的模型
--agent <name>根 / run本次会话使用的代理
--variant <name>run推理强度(reasoning effort),自由字符串,常见值 high / max / minimal
-c, --continue根 / run / attach继续上一次会话
-s, --session <id>根 / run / attach指定会话 ID
--fork根 / run / attach从指定会话 fork(需与 --continue--session 同用)
--prompt <text>TUI 初始 prompt
-f, --file <path>run附加文件,可多次
--sharerun本次会话开启分享
--dangerously-skip-permissionsrun自动通过非显式 deny 的权限请求
--format <default|json>runrun 的事件流输出格式
--port <n>根 / serve / web / acp / run监听端口;显式传入时覆盖 config.server.port
--hostname <host>根 / serve / web / acp监听主机名;显式传入时覆盖 config.server.hostname
--mdns根 / serve / web / acp启用 mDNS 服务发现
--mdns-domain <domain>根 / serve / web / acpmDNS 域名
--cors <origin>根 / serve / web / acp允许的 CORS 来源;追加config.server.cors,不替换
--pure跳过所有外部插件(等价 MIMOCODE_PURE=1
--print-logs日志输出到 stderr
--log-level <level>DEBUG / INFO / WARN / ERROR
-p, --password <pwd>run / attach远端 server 的 basic-auth 密码(等价 MIMOCODE_SERVER_PASSWORD
--dir <path>run / attach工作目录;attach 模式下指远端路径

attach 子命令需要一个位置参数 <url> 指向远端 server:mimo attach <url> [flags...]

互斥与依赖关系:

  • --continue--session 不可同时指定一个新会话来源;--fork 必须与其中之一同用。
  • --mdns 启用时若既没传 --hostname 也未在配置里写 server.hostname,hostname 才默认 0.0.0.0;任一处指定了 hostname 都以指定值为准。
  • --shareMIMOCODE_DISABLE_SHARE 限制;后者为 true 时本 flag 失效。
  • --dangerously-skip-permissions 仅在 run 子命令下有效;TUI 内由斜杠命令开启。

典型场景

切换 profile 根目录用于隔离测试。

MIMOCODE_HOME=/tmp/mimo-test mimo

在 CI 中内联注入配置与凭证,不依赖磁盘文件。

MIMOCODE_CONFIG_CONTENT='{"model":"mimo/mimo-v2.5-pro","share":"disabled"}' \
MIMOCODE_AUTH_CONTENT='{"anthropic":{"apiKey":"sk-..."}}' \
  mimo run "Generate release notes"

本次启动跳过所有权限提示(仅 run)。

mimo run --dangerously-skip-permissions "Format all TypeScript files"

本次运行临时换模型,不改写默认。

mimo run -m mimo/mimo-v2.5-pro "Summarize the diff"

serve 启用 basic 认证并切换端口。

MIMOCODE_SERVER_USERNAME=alice MIMOCODE_SERVER_PASSWORD=s3cret \
  mimo serve --port 4096

已废弃的"远程端点"名称

历史文档将远程 well-known 端点写作 .well-known/mimocode源码实际请求的是 .well-known/opencode,自建组织默认值时请使用后者。