KangQingYu
Articles57
Tags21
Categories9
Codex CLI反代CPA配置

Codex CLI反代CPA配置

Claude Code Pro 5小时一重置,不够用?反向代理来补足。

一 账号

data_group_329.7z GXt41TQCnqf22hzM
mac自带的软件无法解压缩,需要终端

1
7z x data_group_329.7z

接着输入密码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.1
http://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密钥:

1
sk-001

点击”从 /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
~/.codex/config.toml
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(这就是你一直看到的错误)。

{“detail”:”Unsupported parameter: response_format”}

格式问题,容易解决
在 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

Author:KangQingYu
Link:http://example.com/2026/02/23/20260223Codex%20CLI%20%E5%8F%8D%E4%BB%A3%20CPA%E9%85%8D%E7%BD%AE/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×