MaoMaoToken 文档

Codex CLI

Codex CLI 是 OpenAI 官方的终端编程工具。接入 MaomaoToken 后,你只需一个 API Key 就能在终端里调用并自由切换 GLM、Claude、Gemini、DeepSeek 等各家模型,无需绑定单一厂商。

本文覆盖两种接入方式:基础方式(profile + 固定单模型,最快上手)与自定义模型方式(用 model_catalog_json 目录文件,在 /model 列表里随时切换)。


安装

官网下载(macOS)

https://openai.com/zh-Hans-CN/codex/

命令行安装

npm install -g @openai/codex

环境变量配置

使用配置文件配置

  1. 修改 ~/.codex/config.toml,增加如下配置:
profile = "maomaotoken"

[model_providers.maomaotoken]
name = "maomaotoken"
base_url = "https://api.maomaotoken.com/v1"
personality = "pragmatic"
wire_api = "responses"

[profiles.maomaotoken]
model = "gpt-5.2"
model_provider = "maomaotoken"
model_reasoning_effort = "high"
  1. 修改 ~/.codex/auth.json
{
  "OPENAI_API_KEY": "YOUR_MAOMAO_API_KEY"
}

YOUR_MAOMAO_API_KEY 替换为你在 MaomaoToken 控制台 生成的真实密钥。

通过 CC Switch 配置

  1. 运行 CC Switch,添加供应商
  2. 在预设列表中选择「MaomaoToken」
  3. 在「API Key」栏填写你的密钥并点击「添加」保存设置
  4. 返回首页,在供应商列表中选择「MaomaoToken」,点击「启用」即可使用

使用 Codex

在终端中使用

进入你的项目目录,运行:

cd /你的项目路径
codex

启动后根据需求设置权限、选择模型,输入自然语言指令,若正常响应说明配置成功。

在 Codex 桌面端使用

  1. 打开 Codex 桌面端,选择工作目录
  2. 在输入框输入任务,若正常响应说明配置成功

实用命令参考

codex -h   # 显示帮助信息

完整命令选项:

Usage
  $ codex [options] <prompt>

Options
  -h, --help                 显示帮助信息并退出
  -m, --model <model>        指定使用的模型 (默认: codex-mini-latest)
  -i, --image <path>         包含图像输入的文件路径
  -v, --view <rollout>       查看之前保存的会话记录
  -q, --quiet                非交互模式,仅打印助手的最终输出
  -a, --approval-mode <mode> 覆盖审批策略: 'suggest', 'auto-edit', 或 'full-auto'
  --auto-edit                自动批准文件编辑;仍会提示确认命令
  --full-auto                自动批准沙箱环境中的编辑和命令
  --no-project-doc           不自动包含仓库中的 'codex.md' 文件
  --project-doc <file>       包含指定的 Markdown 文件作为上下文
  --full-stdout              不截断命令输出的 stdout/stderr
  -f, --full-context         以"完整上下文"模式启动,将整个仓库加载到上下文中

示例
  $ codex "编写并运行一个打印 ASCII 艺术的 Python 程序"
  $ codex -q "修复构建问题"

在 Codex 中使用自定义模型

Codex 默认只在 /model 列表里展示 OpenAI 官方模型。如果你想直接从列表中选择 MaomaoToken 上的任意模型(GLM、Claude、Gemini、DeepSeek、Kimi、Qwen……),可以用官方支持的「自定义模型」机制:通过一个本地 JSON 文件(model_catalog_json)声明可选模型。

两种接入方式对比:

基础方式(profile + 单模型)自定义模型方式
配置内容config.toml 里写死 model = "xxx"额外维护一个 model_catalog_json 目录文件
切换模型改配置文件后重启直接在 /model 列表里点选
适合场景长期固定用某一个模型多个模型间频繁对比/切换
复杂度

整体流程:生成目录文件 → 改 config.toml → 设环境变量 → 重启选模型

第 1 步:生成模型目录文件

目录文件格式为 { "models": [ ... ] },每个条目描述一个可在 /model 里选择的模型。

下面是已验证可被 Codex 解析的最小完整条目:

{
  "models": [
    {
      "slug": "glm-5.2",
      "display_name": "GLM 5.2",
      "description": "GLM 5.2 (via MaomaoToken)",
      "context_window": 1000000,
      "max_context_window": 1000000,
      "supported_reasoning_levels": [
        { "effort": "low",    "description": "Fast responses" },
        { "effort": "medium", "description": "Balanced" },
        { "effort": "high",   "description": "Deeper reasoning" }
      ],
      "shell_type": "shell_command",
      "visibility": "list",
      "supported_in_api": true,
      "priority": 0,
      "availability_nux": null,
      "upgrade": null,
      "base_instructions": "You are Codex, a coding agent.",
      "supports_reasoning_summaries": true,
      "support_verbosity": false,
      "default_verbosity": null,
      "apply_patch_tool_type": null,
      "truncation_policy": { "mode": "tokens", "limit": 10000 },
      "supports_parallel_tool_calls": true,
      "experimental_supported_tools": []
    }
  ]
}

常用字段说明:

字段作用
slug模型 ID,必须与接口返回的 model_id 一致
display_name/model 列表里显示的名字
context_window / max_context_window上下文窗口,不填会回退到很小的保守默认值
visibility设为 list 才会出现在选择器中
priority列表排序,数字越小越靠前

注意

所有字段均为必填base_instructionsavailability_nuxupgradesupports_reasoning_summariessupport_verbositydefault_verbosityapply_patch_tool_typetruncation_policysupports_parallel_tool_callsexperimental_supported_tools 缺一不可。少任何一个,整份目录都会被丢弃并回退到内置目录,表现为「/model 里一个自定义模型都看不到」。

批量生成前 30 个模型(需要 curlpython3 和已安装的 codex CLI):

mkdir -p ~/.codex/model-catalogs

# 取内置模型当模板(自带所有必填字段)
codex debug models --bundled > /tmp/_tpl.json

# 拉 MaomaoToken 模型列表
curl -s "https://api.maomaotoken.com/v1/models" \
  -H "Authorization: Bearer YOUR_MAOMAO_API_KEY" > /tmp/_maomao.json

# 克隆模板逐个生成条目
python3 - <<'PY' > ~/.codex/model-catalogs/custom-models.json
import json, sys
tpl = json.load(open("/tmp/_tpl.json"))["models"][0]
api = json.load(open("/tmp/_maomao.json"))["data"]
api = [m for m in api if "image_generation" not in (m.get("types") or "")][:30]
out = []
for i, m in enumerate(api):
    e = dict(tpl)
    mid = m.get("id") or m.get("model_id") or ""
    ctx = m.get("context_window") or m.get("context_length") or 200000
    e["slug"] = mid
    e["display_name"] = m.get("name") or m.get("model_name") or mid
    e["description"] = (m.get("name") or mid) + " (via MaomaoToken)"
    e["context_window"] = ctx
    e["max_context_window"] = ctx
    e["visibility"] = "list"
    e["supported_in_api"] = True
    e["priority"] = i
    e["availability_nux"] = None
    e["upgrade"] = None
    out.append(e)
json.dump({"models": out}, sys.stdout, ensure_ascii=False, indent=2)
PY

第 2 步:修改 config.toml

# model_catalog_json 必须写在根级别,不能放进 [model_providers.*] 段里
model = "glm-5.2"
model_provider = "maomaotoken"
model_catalog_json = "~/.codex/model-catalogs/custom-models.json"
model_reasoning_effort = "high"

[model_providers.maomaotoken]
name = "MaomaoToken"
base_url = "https://api.maomaotoken.com/v1"
wire_api = "responses"
env_key = "MAOMAO_API_KEY"

说明

wire_api = "responses" 是关键,漏写或写成 chat 都连不上。MaomaoToken 已原生兼容 Responses API,无需额外转换代理。

第 3 步:设置环境变量

export MAOMAO_API_KEY=sk-xxx

建议写进 ~/.zshrc / ~/.bashrc 持久化。

第 4 步:重启并选择模型

重启 Codex,然后在交互界面输入 /model 即可看到目录里声明的全部模型并切换。

第 5 步:验证是否生效

  1. 输入 /model,确认能看到并切换到自定义模型
  2. 随便提一个问题验证链路打通

不要靠「你是哪个模型」来判断——base_instructions 里写着「You are Codex」,所有模型都会照此自称。要确认实际调用的模型,去 MaomaoToken 控制台「调用记录」页查看真实 model_id


常见问题

/model 里看不到自定义模型?

  1. 先跑 codex debug models,若报 missing field ... 说明条目缺必填字段,用上方脚本重新生成
  2. 确认 model_catalog_json 写在 config.toml 根级别,不在 [model_providers.*] 段里
  3. 确认 JSON 用 snake_case 字段,visibilitylist
  4. codex debug models 能看到模型但桌面端只剩一两个,这是桌面端已知 bug(官方 slug 白名单过滤)。建议改用终端 codex CLI/TUI;桌面端只能直接在 config.toml 里写死 model = "你要的模型"

目录是「替换」不是「合并」

model_catalog_json 会替换整个模型列表,不是追加。如果想同时保留内置模型和自定义模型,把它们都写进自定义目录。

请求报协议错误 / 连不上?

多半是 wire_api 没配对,MaomaoToken 必须 wire_api = "responses"

频繁"Reconnecting"重连?

在 provider 段加 supports_websockets = false 强制走 HTTP。

解析报 missing field base_instructions

条目缺了必填字段,用「克隆内置模板」脚本重新生成。

桌面端只剩一两个模型?

桌面端已知 bug,有官方 slug 白名单过滤。建议用终端 CLI/TUI;或直接在 config.toml 写死 model = "你要的模型"


更多

如果使用 Codex CLI不想手动配置环境的同学可以参考:CC Switch 配置 Codex CLI

参考资料

On this page