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环境变量配置
使用配置文件配置
- 修改
~/.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"- 修改
~/.codex/auth.json:
{
"OPENAI_API_KEY": "YOUR_MAOMAO_API_KEY"
}将 YOUR_MAOMAO_API_KEY 替换为你在 MaomaoToken 控制台 生成的真实密钥。
通过 CC Switch 配置
- 运行 CC Switch,添加供应商
- 在预设列表中选择「MaomaoToken」
- 在「API Key」栏填写你的密钥并点击「添加」保存设置
- 返回首页,在供应商列表中选择「MaomaoToken」,点击「启用」即可使用
使用 Codex
在终端中使用
进入你的项目目录,运行:
cd /你的项目路径
codex启动后根据需求设置权限、选择模型,输入自然语言指令,若正常响应说明配置成功。
在 Codex 桌面端使用
- 打开 Codex 桌面端,选择工作目录
- 在输入框输入任务,若正常响应说明配置成功
实用命令参考
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_instructions、availability_nux、upgrade、supports_reasoning_summaries、support_verbosity、default_verbosity、apply_patch_tool_type、truncation_policy、supports_parallel_tool_calls、experimental_supported_tools 缺一不可。少任何一个,整份目录都会被丢弃并回退到内置目录,表现为「/model 里一个自定义模型都看不到」。
批量生成前 30 个模型(需要 curl、python3 和已安装的 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 步:验证是否生效
- 输入
/model,确认能看到并切换到自定义模型 - 随便提一个问题验证链路打通
不要靠「你是哪个模型」来判断——
base_instructions里写着「You are Codex」,所有模型都会照此自称。要确认实际调用的模型,去 MaomaoToken 控制台「调用记录」页查看真实model_id。
常见问题
/model 里看不到自定义模型?
- 先跑
codex debug models,若报missing field ...说明条目缺必填字段,用上方脚本重新生成 - 确认
model_catalog_json写在config.toml根级别,不在[model_providers.*]段里 - 确认 JSON 用 snake_case 字段,
visibility为list - 若
codex debug models能看到模型但桌面端只剩一两个,这是桌面端已知 bug(官方 slug 白名单过滤)。建议改用终端codexCLI/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