Codex
Codex 是一线接入对象。它使用 OpenAI Responses 协议,网关暴露在 /v1/responses。
Codex 的策略 ID 在后端是
codex_direct/codex_auto(与 Chat 风格 OpenAI 分属不同 app family)。UI 显示成Direct/Auto。只有用 HTTP 直接签发 key 时你才会注意到下划线形式。
ATM 自动检测什么
ATM 通过这两个文件识别 Codex:
~/.codex/auth.json— 存 API key。~/.codex/config.toml— Codex 主配置。
ATM 读取激活的 model_provider、model、以及自定义的 [model_providers.*]。
最简方案
桌面 UI 的 Codex 一键启用 是最稳的路径。Agents 页 → Codex → Enable ATM for Codex。ATM 会:
- 签发
agentType: codex、policyId: codex_direct的atm-…key。 - 写到
~/.codex/auth.json的OPENAI_API_KEY。 - 在
~/.codex/config.toml里追加[model_providers.ATM]块。 - 把
model_provider切到"ATM"。
之后重启 Codex(或开新终端会话——Codex 会话启动时重读 config.toml)。
手动接入
要手工配,两份文件都得改。
~/.codex/auth.json
{
"OPENAI_API_KEY": "atm-xxxxxxxxxxxx"
}
~/.codex/config.toml
model_provider = "ATM"
model = "<your-model-id>"
[model_providers.ATM]
name = "ATM"
base_url = "http://127.0.0.1:4317/v1"
wire_api = "responses"
requires_openai_auth = true
注意:
model_provider和[model_providers.<key>]大小写要一致 ——ATM匹配ATM,atm不匹配ATM。wire_api = "responses"必填。写成chat会被 ATM 拒绝,因为 Codex 实际发的是 Responses 形状的请求体。requires_openai_auth = true让 Codex 用Authorization: Bearer <key>,而不是它老的自定义 header。
手动签发 key
curl -s -X POST http://127.0.0.1:4317/api/keys/issue \
-H 'Content-Type: application/json' \
-d '{
"employeeName": "Alice Example",
"employeeContact": "alice@example.com",
"agentName": "Codex General",
"agentType": "codex",
"sourceTool": "Codex",
"configPath": "~/.codex/config.toml",
"policyId": "codex_direct"
}'
验证
- 发一次真实 Codex 命令。
- 打开
GET http://127.0.0.1:4317/api/logs?agent_type=codex&limit=5(或 Overview → Recent Requests 按 Codex 筛选)。 - 确认日志行存在,
resolved_provider是预期值。
如果没行 → Codex 还在直连 OpenAI,回头检查 model_provider 和 base_url。
切换模型
改顶层 model = "..."。不动 model_provider 和 [model_providers.ATM]。
Direct 策略下,model 就是用的 model。codex_auto 下,ATM 可能根据意图选 Codex 家族里的别的目标。
Chat / Responses 模型列表分离
Codex Provider 端的模型配置拆成两张表:
chat— 走/v1/chat/completions的模型。responses— 走/v1/responses的模型。
避免把 Codex(永远 Responses 形状)的请求路由到只支持 Chat 的模型。
如果你在 Routing 页写自定义 Codex 策略,target 编辑器里能看到这个分离——从 responses 列表选。
故障排查
| 现象 | 原因 | 处理 |
|---|---|---|
| Codex 启动了但每个请求超时 | model_provider 还指向旧上游。 |
检查 config.toml,从终端 head -1 ~/.codex/config.toml。 |
| Codex 报 "no such model" | model 不在策略 responses target 列表里。 |
在 Routing 页加,或换 model。 |
| Codex 返回 400 "model_provider response check failed" | 早期 ATM 版本的 model 匹配过严。 | 升级到当前版本。 |
| Codex Auto 策略不挑 coding target | codex_auto 绑定了,但策略没配 coding target。 |
编辑策略,给 coding 意图加一个 (provider, model)。 |