Ubuntu 无 sudo 权限下配置 Codex 使用小米 MiMo 模型:区分 Token Plan 和 API,并支持 /model 切换

最近想在 Ubuntu 服务器上使用 Codex,并接入小米 MiMo 模型。我的需求比较明确:

  1. 已经通过 npm 安装好了 Codex;
  2. 服务器是 Ubuntu,shell 是 zsh;
  3. 没有 sudo 权限;
  4. 不想把 API Key 直接写进 ~/.zshrc
  5. 希望 key 存放在单独的隐藏目录中;
  6. 希望在 terminal 中输入不同命令时,分别使用不同的 MiMo 服务;
  7. 希望进入 Codex 后可以用 /model 切换 MiMo 模型。

最终我希望实现的效果是:

codex-mimo

使用 MiMo Token Plan,也就是读取 tp- 开头的 Token Plan key。

codex-mimo-api

使用 MiMo 按量 API,也就是读取 sk- 开头的 MiMo API key。

进入 Codex 后,还可以输入:

/model

在以下模型之间切换:

mimo-v2.5-pro-ultraspeed
mimo-v2.5-pro
mimo-v2.5

需要注意的是,mimo-v2.5-pro-ultraspeed 是 MiMo API 里的模型。如果在 Token Plan 下切换到这个模型,而 Token Plan 本身不支持它,那么请求可能会失败。失败后再用 /model 切回 mimo-v2.5-promimo-v2.5 即可。

下面是完整配置过程。


一、前提:确认 Codex 已安装

由于我已经通过 npm 安装好了 Codex,所以这里只做检查:

which codex
codex --version

如果能看到 Codex 的路径和版本号,说明 Codex 已经可用。


二、创建 .secrets 文件夹保存 key

我不希望把 key 写到 ~/.zshrc,也不希望每次在终端里手动 export,所以选择把 key 存在:

~/.secrets/mimo.key
~/.secrets/mimo_api.key

其中:

~/.secrets/mimo.key        # MiMo Token Plan,tp- 开头
~/.secrets/mimo_api.key    # MiMo 按量 API,sk- 开头

先创建目录:

mkdir -p ~/.secrets
chmod 700 ~/.secrets


三、隐藏输入 key,避免出目前终端和 history 中

1. 保存 MiMo Token Plan key

执行下面命令:

print -n "Paste MiMo Token Plan key, tp-..., hidden: "
stty -echo
read -r MIMO_TP_KEY
stty echo
print

printf '%s
' "$MIMO_TP_KEY" > ~/.secrets/mimo.key
unset MIMO_TP_KEY
chmod 600 ~/.secrets/mimo.key

粘贴 tp- 开头的 Token Plan key。输入时终端不会显示内容。

2. 保存 MiMo API key

执行下面命令:

print -n "Paste MiMo API key, sk-..., hidden: "
stty -echo
read -r MIMO_API_KEY_TMP
stty echo
print

printf '%s
' "$MIMO_API_KEY_TMP" > ~/.secrets/mimo_api.key
unset MIMO_API_KEY_TMP
chmod 600 ~/.secrets/mimo_api.key

粘贴 sk- 开头的 MiMo API key。

检查文件是否存在,但不要打印 key 内容:

ls -l ~/.secrets/mimo.key ~/.secrets/mimo_api.key

正常情况下,权限应该类似:

-rw------- 1 user user ... /home/user/.secrets/mimo.key
-rw------- 1 user user ... /home/user/.secrets/mimo_api.key


四、创建 Codex 配置目录

mkdir -p ~/.codex/model-catalogs ~/.local/bin

这里会用到三个位置:

~/.codex/                         # Codex 配置目录
~/.codex/model-catalogs/          # 模型列表配置
~/.local/bin/                     # 自定义命令


五、创建统一模型列表,支持 /model 切换

创建模型 catalog:

cat > ~/.codex/model-catalogs/model-catalogs.json <<'EOF'
{
  "models": [
    {
      "slug": "mimo-v2.5-pro-ultraspeed",
      "display_name": "mimo-v2.5-pro-ultraspeed",
      "description": "MiMo-v2.5-Pro-Ultraspeed",
      "default_reasoning_level": "high",
      "supported_reasoning_levels": [
        {
          "effort": "none",
          "description": "Disable Thinking"
        },
        {
          "effort": "high",
          "description": "Enabled Thinking"
        }
      ],
      "shell_type": "shell_command",
      "visibility": "list",
      "supported_in_api": true,
      "priority": 0,
      "base_instructions": "You are MiMo, an AI assistant developed by Xiaomi. Today's date: {date} {week}. Your knowledge cutoff date is December 2024.",
      "supports_reasoning_summaries": true,
      "default_reasoning_summary": "none",
      "support_verbosity": false,
      "truncation_policy": {
        "mode": "bytes",
        "limit": 10000
      },
      "supports_parallel_tool_calls": false,
      "supports_image_detail_original": false,
      "context_window": 1048576,
      "max_context_window": 1048576,
      "effective_context_window_percent": 95,
      "experimental_supported_tools": [],
      "input_modalities": ["text"],
      "supports_search_tool": false
    },
    {
      "slug": "mimo-v2.5-pro",
      "display_name": "mimo-v2.5-pro",
      "description": "MiMo-v2.5-Pro",
      "default_reasoning_level": "high",
      "supported_reasoning_levels": [
        {
          "effort": "none",
          "description": "Disable Thinking"
        },
        {
          "effort": "high",
          "description": "Enabled Thinking"
        }
      ],
      "shell_type": "shell_command",
      "visibility": "list",
      "supported_in_api": true,
      "priority": 1,
      "base_instructions": "You are MiMo, an AI assistant developed by Xiaomi. Today's date: {date} {week}. Your knowledge cutoff date is December 2024.",
      "supports_reasoning_summaries": true,
      "default_reasoning_summary": "none",
      "support_verbosity": false,
      "truncation_policy": {
        "mode": "bytes",
        "limit": 10000
      },
      "supports_parallel_tool_calls": false,
      "supports_image_detail_original": false,
      "context_window": 1048576,
      "max_context_window": 1048576,
      "effective_context_window_percent": 95,
      "experimental_supported_tools": [],
      "input_modalities": ["text"],
      "supports_search_tool": false
    },
    {
      "slug": "mimo-v2.5",
      "display_name": "mimo-v2.5",
      "description": "MiMo-v2.5",
      "default_reasoning_level": "high",
      "supported_reasoning_levels": [
        {
          "effort": "none",
          "description": "Disable Thinking"
        },
        {
          "effort": "high",
          "description": "Enabled Thinking"
        }
      ],
      "shell_type": "shell_command",
      "visibility": "list",
      "supported_in_api": true,
      "priority": 2,
      "base_instructions": "You are MiMo, an AI assistant developed by Xiaomi. Today's date: {date} {week}. Your knowledge cutoff date is December 2024.",
      "supports_reasoning_summaries": true,
      "default_reasoning_summary": "none",
      "support_verbosity": false,
      "truncation_policy": {
        "mode": "bytes",
        "limit": 10000
      },
      "supports_parallel_tool_calls": false,
      "supports_image_detail_original": true,
      "context_window": 1048576,
      "max_context_window": 1048576,
      "effective_context_window_percent": 95,
      "experimental_supported_tools": [],
      "input_modalities": ["text", "image"],
      "supports_search_tool": false
    }
  ]
}
EOF

这里最重大的是每个模型的 slug,例如:

"slug": "mimo-v2.5-pro-ultraspeed"

slug 需要和后端 API 支持的模型名称一致。


六、创建 MiMo Token Plan 的 Codex profile

执行:

CATALOG_PATH="$HOME/.codex/model-catalogs/model-catalogs.json"

cat > ~/.codex/mimo-tokenplan.config.toml <

这里的:

env_key = "MIMO_TOKEN_PLAN_KEY"

不是把 key 写进配置文件,而是告知 Codex:启动时去环境变量 MIMO_TOKEN_PLAN_KEY 中读取 key。

这个环境变量后面会由 codex-mimo 启动脚本临时生成,不会写进 ~/.zshrc

如果你的 Token Plan 控制台给了专属 Base URL,就把这一行:

base_url = "https://token-plan-cn.xiaomimimo.com/v1"

替换成你的专属地址。


七、创建 MiMo 按量 API 的 Codex profile

执行:

CATALOG_PATH="$HOME/.codex/model-catalogs/model-catalogs.json"

cat > ~/.codex/mimo-api.config.toml <

这里默认模型设置成:

model = "mimo-v2.5-pro-ultraspeed"

也就是说,执行:

codex-mimo-api

默认会使用 MiMo API 的 mimo-v2.5-pro-ultraspeed 模型。

如果后续想切换成其他模型,可以在 Codex 里输入:

/model

再选择其他模型。


八、创建 codex-mimo 启动脚本

这个命令用于启动 MiMo Token Plan。

cat > ~/.local/bin/codex-mimo <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
set +x

KEY_FILE="$HOME/.secrets/mimo.key"

if [ ! -r "$KEY_FILE" ]; then
  echo "Error: cannot read $KEY_FILE"
  echo "Please create it and put your MiMo Token Plan key in it."
  exit 1
fi

MIMO_TOKEN_PLAN_KEY="$(tr -d '
' < "$KEY_FILE")"

if [ -z "$MIMO_TOKEN_PLAN_KEY" ]; then
  echo "Error: $KEY_FILE is empty"
  exit 1
fi

export MIMO_TOKEN_PLAN_KEY
exec codex --profile mimo-tokenplan "$@"
EOF

chmod +x ~/.local/bin/codex-mimo

这个脚本做了几件事:

  1. ~/.secrets/mimo.key 读取 Token Plan key;
  2. 去掉换行符;
  3. 临时设置环境变量 MIMO_TOKEN_PLAN_KEY
  4. 执行:

codex --profile mimo-tokenplan

key 不会写进 .zshrc,也不会写进 Codex 配置文件。


九、创建 codex-mimo-api 启动脚本

这个命令用于启动 MiMo 按量 API。

cat > ~/.local/bin/codex-mimo-api <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
set +x

KEY_FILE="$HOME/.secrets/mimo_api.key"

if [ ! -r "$KEY_FILE" ]; then
  echo "Error: cannot read $KEY_FILE"
  echo "Please create it and put your MiMo API key in it."
  exit 1
fi

MIMO_API_PAYG_KEY="$(tr -d '
' < "$KEY_FILE")"

if [ -z "$MIMO_API_PAYG_KEY" ]; then
  echo "Error: $KEY_FILE is empty"
  exit 1
fi

export MIMO_API_PAYG_KEY
exec codex --profile mimo-api "$@"
EOF

chmod +x ~/.local/bin/codex-mimo-api

这个脚本会从:

~/.secrets/mimo_api.key

读取 sk- 开头的 MiMo API key,然后启动:

codex --profile mimo-api


十、确保 zsh 能找到这两个命令

检查 ~/.local/bin 是否在 PATH 中:

echo $PATH | tr ':' '
' | grep "$HOME/.local/bin"

如果没有输出,执行:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
rehash

这里写进 ~/.zshrc 的只有 PATH,不包含任何 key。


十一、检查文件结构

执行:

ls -l ~/.secrets
ls -l ~/.codex
ls -l ~/.codex/model-catalogs
ls -l ~/.local/bin/codex-mimo ~/.local/bin/codex-mimo-api

再检查两个命令是否能找到:

which codex-mimo
which codex-mimo-api

正常应该看到类似:

/home/你的用户名/.local/bin/codex-mimo
/home/你的用户名/.local/bin/codex-mimo-api


十二、启动测试

1. 测试 MiMo Token Plan

执行:

codex-mimo

进入 Codex 后,输入:

/status

查看当前 provider 和 model。

然后输入:

/model

应该可以看到模型列表:

mimo-v2.5-pro-ultraspeed
mimo-v2.5-pro
mimo-v2.5

需要注意:Token Plan 下如果选择 mimo-v2.5-pro-ultraspeed,而你的 Token Plan 不支持它,请求可能会失败。再用 /model 切回:

mimo-v2.5-pro

或:

mimo-v2.5

即可。

2. 测试 MiMo 按量 API

执行:

codex-mimo-api

进入 Codex 后输入:

/status

默认模型应该是:

mimo-v2.5-pro-ultraspeed

也可以输入:

/model

切换到:

mimo-v2.5-pro
mimo-v2.5


十三、日常使用方式

如果想用 Token Plan:

codex-mimo

如果想用 MiMo 按量 API:

codex-mimo-api

也可以直接带任务启动:

codex-mimo "帮我检查当前项目结构"

或者:

codex-mimo-api "帮我优化这个 Python 脚本"


十四、最终配置结构

最后的文件结构大致是:

~/.secrets/
  mimo.key
  mimo_api.key

~/.codex/
  mimo-tokenplan.config.toml
  mimo-api.config.toml
  model-catalogs/
    model-catalogs.json

~/.local/bin/
  codex-mimo
  codex-mimo-api

其中 key 只保存在:

~/.secrets/mimo.key
~/.secrets/mimo_api.key

不会出目前:

~/.zshrc
~/.codex/mimo-tokenplan.config.toml
~/.codex/mimo-api.config.toml
~/.local/bin/codex-mimo
~/.local/bin/codex-mimo-api

Codex 启动时,wrapper 脚本会临时读取 key,并导出给 Codex 子进程使用。退出 Codex 后,这个临时环境变量也会随进程结束。


十五、常见问题

1. codex-mimo: command not found

大致率是 ~/.local/bin 没有加入 PATH。

执行:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
rehash

然后再检查:

which codex-mimo


2. 提示读取不到 key 文件

检查文件是否存在:

ls -l ~/.secrets/mimo.key
ls -l ~/.secrets/mimo_api.key

如果不存在,就重新创建。


3. Token Plan 认证失败

优先检查两点:

第一,~/.secrets/mimo.key 里是否是 tp- 开头的 Token Plan key;

第二,
~/.codex/mimo-tokenplan.config.toml
里的 base_url 是否需要改成你的 Token Plan 控制台专属 Base URL。


4. MiMo API 认证失败

检查:

ls -l ~/.secrets/mimo_api.key

确认里面保存的是 sk- 开头的 MiMo API key。


5. /model 切换到 mimo-v2.5-pro-ultraspeed 后失败

这一般说明当前服务不支持该模型。例如,在 Token Plan 下切换到 API-only 模型,可能会失败。

解决方法是在 Codex 中重新输入:

/model

然后切回:

mimo-v2.5-pro

或:

mimo-v2.5


总结

这套方案的核心思路是:

  1. ~/.secrets/ 保存 key;
  2. ~/.codex/*.config.toml 区分 MiMo Token Plan 和 MiMo API;
  3. ~/.local/bin/codex-mimo~/.local/bin/codex-mimo-api 做启动命令;
  4. 用统一的 model-catalogs.json 支持 Codex 内部 /model 切换模型;
  5. 不把 key 写进 .zshrc,也不把 key 写进 Codex 配置文件。

最终使用起来很简单:

codex-mimo

走 MiMo Token Plan。

codex-mimo-api

走 MiMo 按量 API。

进入 Codex 后:

/model

即可切换 MiMo 模型。

© 版权声明

相关文章

1 条评论

none
暂无评论...