Codex CLI反代CPA配置
Claude Code Pro 5小时一重置,不够用?反向代理来补足。
一 账号 data_group_329.7z GXt41TQCnqf22hzM mac自带的软件无法解压缩,需要终端
接着输入密码GXt41TQCnqf22hzM即可
二 cliproxyapi 2.1 Mac安装
1 2 brew install cliproxyapi brew services start cliproxyapi
2.2 配置 ~/.cli-proxy-api/config.yaml
secret-key:MGT-123,是WebUI的登录密码。
your-api-key-1要改成sk开头的
1 2 3 sk-001 sk-12345678901234567890 ABC-12dafasdfasdf8883236
如果修改配置,改密码之后需要重启:
1 brew services restart cliproxyapi
三 配置WebUI 3.1http://localhost:8317/management.html http://127.0.0.1:8317/management.html
认证文件管理,导入认证文件。
3.2 配置访问网络 开启TUN模式; 或者配置代理URL: socks5://host.docker.internal:7890
Base URL:
1 http://localhost:8317/v1
3.3 获取API Key,在”配置面板“中查看API密钥列表,其实就是刚才在~/.cli-proxy-api/config.yaml配置的
3.4 Codex API 配置 Base URL (必填):
1 http://localhost:8317/v1
API密钥:
点击”从 /v1/models 获取”,可以找到gpt-5.3-codex等模型。
如果用终端验证,可以使用命令:
1 curl -v -H "Authorization: Bearer sk-001" http://localhost:8317/v1/models
也能返回支持的模型
3.6 其他连通性测试方法 Cherry Studio设置apikey和baseUrl,可视化的界面,也能判断baseurl, apikey是否可用。
Codex使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 model = "gpt-5.3-codex" model_reasoning_effort = "xhigh" reasoning_effort = "xhigh" personality = "pragmatic" model_provider = "cpa" [features] skills =true [projects."/Users/kk/Documents/kCode/AIRule"] trust_level = "trusted" [projects."/Users/ll/.codex"] trust_level = "trusted" [model_providers.cpa] name = "cpa" base_url = "http://localhost:8317/v1" wire_api = "responses" requires_openai_auth = false
这里如果配置env_key,则会从本地变量OPENAI_API_KEY取值;否则会从auth.json中的OPENAI_API_KEY取值
~/.codex/auth.json
1 2 3 4 5 { "auth_mode" : "apikey" "OPENAI_API_KEY": "sk-001" }
奇葩报错 服务器地址无效或管理接口未启用 在http://localhost:8317/management.html 登录的时候,如果提示:服务器地址无效或管理接口未启用 以下命令不生效
1 2 brew services stop cliproxyapi brew services start cliproxyapi
那么使用
1 2 3 killall cliproxyapi cliproxyapi --config ~/.cli-proxy-api/config.yaml
看到management routes registered after secret key configuration 即可登录了。
Codex使用时,401 1 2 3 4 • Reconnecting… 1/5 (6s • esc to interrupt) └ Unexpected status 401 Unauthorized: Incorrect API key provided: sk-001. You can find your API key at https:// platform.openai.com/account/api-keys., url: https://api.openai.com/v1/responses, cf-ray: 9d8a8f81eedcc0cc-LAX, request id: req_07d439c5b38747f8a7f567fd5bf3eef2
使用AI搜索的经历 Gemini, ChatGPT说配置zshrc, export OPENAI_BASE_URL=””http://localhost:8317/v1" export OPENAI_API_KEY=”sk-001” 看起来就不对。
最后还是Grok看出来问题了。 我之前配置如下(因为我单独改过model_provider,而且是在信任路径之后改的)
1 2 3 [projects."/Users/kk/Documents/kCode/Workspace"] trust_level = "trusted" model_provider = "cpa"
Grok发现了问题的原因:
1 2 你的 cat ~/.codex/config.toml 显示 model_provider = "cpa" 被错误地放在了 [projects."..."] 表里面! TOML 解析规则:一旦进入 [projects.xxx] 这个 section,后面的 key(直到下一个 [)都属于这个表。所以全局 model_provider 实际上不存在,Codex 直接回退默认 openai provider → 强制走 https://api.openai.com/v1/responses(这就是你一直看到的错误)。
格式问题,容易解决 在 CPA 的 config.yaml 末尾添加 payload 覆盖规则:
1 2 3 4 5 6 7 8 9 10 11 12 payload: override: - models: - name: "gpt-*" protocol: "codex" params: "reasoning.effort": "xhigh" filter: - models: - name: "gpt-*" params: - "response_format"
~/.cli-proxy-api/config.yaml 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 # 服务器绑定主机/接口,默认空字符串同时绑定 IPv4/IPv6。 # 使用 "127.0.0.1" 或 "localhost" 可限制仅本机访问。 host: "" # 服务器端口 port: 8317 # TLS 设置:启用后使用提供的证书与私钥监听 HTTPS。 tls: enable: false cert: "" key: "" # 管理 API 设置 remote-management: # 是否允许远程(非 localhost)访问管理接口。 # 为 false 时仅允许 localhost,仍需管理密钥。 allow-remote: false # 管理密钥。若填写明文,启动时会自动哈希后生效。 # 所有管理请求(包括本地)都需要该密钥。 # 留空则完全禁用管理 API(所有 /v0/management 路由返回 404)。 secret-key: "$2a$10$ed06tCcxP4L9jJ33PoYu..BWTtA9VatA9XJsYFFAlhusQfw3AvBz2" # 为 true 时禁用内置管理面板资源下载与路由。 disable-control-panel: false # 管理面板的 GitHub 仓库,可填写仓库 URL 或 releases API URL。 panel-github-repository: "https://github.com/router-for-me/Cli-Proxy-API-Management-Center" # 认证目录(支持 ~ 展开为主目录) auth-dir: "~/.cli-proxy-api" # 用于请求认证的 API 密钥 api-keys: - "sk-001" - "sk-12345678901234567890" - "ABC-12dafasdfasdf8883236" # 是否启用调试日志 debug: false # 为 true 时禁用高开销 HTTP 中间件以降低高并发下的内存占用 commercial-mode: false # 为 true 时将应用日志写入滚动文件而非 stdout logging-to-file: false # 日志目录的最大总大小(MB);超过后会删除最旧的日志。0 表示不限制。 logs-max-total-size-mb: 0 # 为 false 时禁用内存用量统计聚合 usage-statistics-enabled: false # 代理地址。支持 socks5/http/https,例如 socks5://user:pass@192.168.1.1:1080/ proxy-url: "" # 为 true 时,无前缀模型请求只会匹配无前缀凭据(除非前缀与模型名相同)。 force-model-prefix: false # 请求重试次数;当响应码为 403/408/500/502/503/504 时重试。 request-retry: 3 # 冷却中的凭据等待的最长时间(秒),超过则触发重试。 max-retry-interval: 30 # 配额超限时的处理 quota-exceeded: switch-project: true # 配额超限时是否自动切换其他项目 switch-preview-model: true # 配额超限时是否自动切换预览模型 # 多凭据匹配时的路由策略 routing: strategy: "round-robin" # 轮询(默认)或 fill-first # 是否为 WebSocket API (/v1/ws) 启用认证 ws-auth: false # 当 > 0 时,为非流式响应每隔 N 秒发送空行以防止空闲超时 nonstream-keepalive-interval: 0 # 当为 true 时,为 Codex API 请求启用官方 Codex 指令注入 # 当为 false(默认)时,CodexInstructionsForModel 立即返回而不修改 codex-instructions-enabled: false # 流式传输行为(SSE keep-alive 与安全启动重试) streaming: keepalive-seconds: 15 # 默认:0(禁用);≤0 关闭 keep-alive。 bootstrap-retries: 1 # 默认:0(禁用);首字节前的重试次数。 # Gemini API 密钥 gemini-api-key: - api-key: "AIzaSy...01" prefix: "test" # 可选:需要以 "test/gemini-3-pro-preview" 访问 base-url: "https://generativelanguage.googleapis.com" headers: X-Custom-Header: "custom-value" proxy-url: "socks5://proxy.example.com:1080" models: - name: "gemini-2.5-flash" # 上游模型名 alias: "gemini-flash" # 客户端别名 excluded-models: - "gemini-2.5-pro" # 精确排除 - "gemini-2.5-*" # 前缀通配 - "*-preview" # 后缀通配 - "*flash*" # 子串通配 - api-key: "AIzaSy...02" # Codex API 密钥 codex-api-key: - api-key: "sk-atSM..." prefix: "test" # 可选:需以 "test/gpt-5-codex" 访问 base-url: "https://www.example.com" # 自定义 Codex 端点 headers: X-Custom-Header: "custom-value" proxy-url: "socks5://proxy.example.com:1080" # 可选:单独代理 models: - name: "gpt-5-codex" # 上游模型名 alias: "codex-latest" # 客户端别名 excluded-models: - "gpt-5.1" # 精确排除 - "gpt-5-*" # 前缀通配 - "*-mini" # 后缀通配 - "*codex*" # 子串通配 - api-key: sk-001 base-url: http://localhost:8317/v1 proxy-url: "" models: - name: gpt-5.2-codex alias: "" - name: gpt-5.4 alias: "" - name: gpt-5.3-codex alias: "" # Claude API 密钥 claude-api-key: - api-key: "sk-atSM..." # 使用官方 Claude API 时无需 base-url - api-key: "sk-atSM..." prefix: "test" # 可选:需以 "test/claude-sonnet-latest" 访问 base-url: "https://www.example.com" # 自定义 Claude 端点 headers: X-Custom-Header: "custom-value" proxy-url: "socks5://proxy.example.com:1080" # 可选:单独代理 models: - name: "claude-3-5-sonnet-20241022" # 上游模型名 alias: "claude-sonnet-latest" # 客户端别名 excluded-models: - "claude-opus-4-5-20251101" # 精确排除 - "claude-3-*" # 前缀通配 - "*-thinking" # 后缀通配 - "*haiku*" # 子串通配 cloak: # 可选:为非 Claude Code 客户端进行请求伪装 mode: "auto" # "auto"(默认):仅当客户端不是 Claude Code 时伪装 # "always":始终应用伪装 # "never":从不应用伪装 strict-mode: false # false(默认):将 Claude Code 提示前置到用户系统消息 # true:删除所有用户系统消息,仅保留 Claude Code 提示 sensitive-words: # 可选:用零宽字符混淆的词汇 - "API" - "proxy" # OpenAI 兼容提供商 openai-compatibility: - name: "openrouter" # 提供商名称,用于 UA 等 prefix: "test" # 可选:需以 "test/kimi-k2" 访问 base-url: "https://openrouter.ai/api/v1" # 提供商基础 URL headers: X-Custom-Header: "custom-value" api-key-entries: - api-key: "sk-or-v1-...b780" proxy-url: "socks5://proxy.example.com:1080" # 可选:单独代理 - api-key: "sk-or-v1-...b781" # 无代理 models: # 提供商支持的模型 - name: "moonshotai/kimi-k2:free" # 上游模型名 alias: "kimi-k2" # 客户端别名 - name: codexCustom base-url: http://localhost:8317/v1 api-key-entries: - api-key: ABC-12dafasdfasdf8883236 proxy-url: socks5://host.docker.internal:7890 models: - name: gpt-5.2-codex alias: "" - name: gpt-5.3-codex alias: "" # Vertex API 密钥(Vertex 兼容端点,使用 API key + base URL) vertex-api-key: - api-key: "vk-123..." # x-goog-api-key 头 prefix: "test" # 可选前缀 base-url: "https://example.com/api" # 例如 https://zenmux.ai/api proxy-url: "socks5://proxy.example.com:1080" # 可选单独代理 headers: X-Custom-Header: "custom-value" models: # 可选:别名到上游模型 - name: "gemini-2.5-flash" # 上游模型名 alias: "vertex-flash" # 客户端别名 - name: "gemini-2.5-pro" alias: "vertex-pro" # Amp 集成 ampcode: # Amp CLI OAuth 与管理功能的上游地址 upstream-url: "https://ampcode.com" # 可选:覆盖 Amp 上游 API Key(否则使用环境变量或文件) upstream-api-key: "" # 按客户端的上游 API Key 映射 # 将顶层 api-keys 中的客户端密钥映射到不同的 Amp 上游密钥。 # 若未匹配到则回退到 upstream-api-key。 upstream-api-keys: - upstream-api-key: "amp_key_for_team_a" # 供这些客户端使用的上游密钥 api-keys: # 使用该上游密钥的客户端密钥 - "your-api-key-1" - "your-api-key-2" - upstream-api-key: "amp_key_for_team_b" api-keys: - "your-api-key-3" # 是否将 Amp 管理路由 (/api/auth, /api/user 等) 仅限 localhost(默认 false) restrict-management-to-localhost: false # 是否在检查本地 API 密钥前强制执行模型映射(默认 false) force-model-mappings: false # Amp 模型映射:当请求的模型不可用时路由到本地可用模型 # 适用于 Amp CLI 请求不可用模型(如 Claude Opus 4.5)但本地有相似模型的情况 model-mappings: - from: "claude-opus-4-5-20251101" # Amp 请求的模型 to: "gemini-claude-opus-4-5-thinking" # 路由到的可用模型 - from: "claude-sonnet-4-5-20250929" to: "gemini-claude-sonnet-4-5-thinking" - from: "claude-haiku-4-5-20251001" to: "gemini-2.5-flash" # 全局 OAuth 模型名称别名(按渠道) # 这些别名同时用于模型列表和请求路由的模型 ID 重命名。 # 支持的渠道:gemini-cli、vertex、aistudio、antigravity、claude、codex、qwen、iflow。 # 注意:别名不适用于 gemini-api-key、codex-api-key、claude-api-key、openai-compatibility、vertex-api-key 或 ampcode。 # 您可以使用不同的别名重复相同的名称,以暴露多个客户端模型名称。 oauth-model-alias: antigravity: - name: "rev19-uic3-1p" alias: "gemini-2.5-computer-use-preview-10-2025" - name: "gemini-3-pro-image" alias: "gemini-3-pro-image-preview" - name: "gemini-3-pro-high" alias: "gemini-3-pro-preview" - name: "gemini-3-flash" alias: "gemini-3-flash-preview" - name: "claude-sonnet-4-5" alias: "gemini-claude-sonnet-4-5" - name: "claude-sonnet-4-5-thinking" alias: "gemini-claude-sonnet-4-5-thinking" - name: "claude-opus-4-5-thinking" alias: "gemini-claude-opus-4-5-thinking" # gemini-cli: # - name: "gemini-2.5-pro" # 该渠道下的原始模型名 # alias: "g2.5p" # 客户端可见别名 # fork: true # 为 true 时保留原名并同时增加别名作为额外模型(默认:false) # vertex: # - name: "gemini-2.5-pro" # alias: "g2.5p" # aistudio: # - name: "gemini-2.5-pro" # alias: "g2.5p" # claude: # - name: "claude-sonnet-4-5-20250929" # alias: "cs4.5" # codex: # - name: "gpt-5" # alias: "g5" # qwen: # - name: "qwen3-coder-plus" # alias: "qwen-plus" # iflow: # - name: "glm-4.7" # alias: "glm-god" # OAuth 提供商的模型排除列表 oauth-excluded-models: gemini-cli: - "gemini-2.5-pro" # 精确排除 - "gemini-2.5-*" # 前缀通配 - "*-preview" # 后缀通配 - "*flash*" # 子串通配 vertex: - "gemini-3-pro-preview" aistudio: - "gemini-3-pro-preview" antigravity: - "gemini-3-pro-preview" claude: - "claude-3-5-haiku-20241022" codex: - "gpt-5-codex-mini" qwen: - "vision-model" iflow: - "tstars2.0" # 可选的 payload 配置 payload: override: - models: - name: "gpt-*" protocol: "codex" params: "reasoning.effort": "xhigh" filter: - models: - name: gpt-* protocol: "" params: - response_format