[!IMPORTANT] 🔴 测试覆盖范围说明
本项目当前仅对 Kimi For Coding、Xiaomi MiMo(Token Plan)两家供应商完成了端到端真机实际测试。
其他已内置的 chat-completions 兼容供应商(包括 DeepSeek、Kimi(月之暗面)、Xiaomi MiMo(Pay for Token)、智谱 GLM、智谱 GLM Coding、GLM(Z.ai)(zai-login)、GLM(BigModel)(bigmodel-login)、阿里云百炼(API Key / Token Plan)、MiniMax、OpenCode Go、WorkBuddy(腾讯 CodeBuddy;模型选择器显示 Credit 折扣倍率)、QoderWork CN(阿里 Qoder;模型选择器显示 Credit 折扣倍率))未做长期真机回归,仅停留在单元测试 + 偶发用户反馈层面。
如果你愿意提供其他供应商的 API key 用于测试,将万分感激!可通过 QQ:
3216202644或邮箱联系作者,作者保证 API key 仅用于本项目实际测试。
简体中文 | English | Changelog | Code Graph
Codex App Transfer 是一个面向 OpenAI Codex APP 的轻量桌面配置 + 转发工具。它在本机起一个网关,把 Codex APP 发出的 Responses API 请求(HTTP 流式 / 非流式 + /responses )翻译成 Chat Completions 等格式,转发到你选择的供应商,用桌面 UI 管理供应商、模型映射、转发端口、日志面板,让 Codex APP 无缝使用第三方 chat/completions 协议的推理服务。
启动转发后,Codex APP 通过本机 127.0.0.1:18080 与本工具通信。关闭窗口会缩到系统托盘继续运行,右键托盘"退出"才完全退出。
当前版本 v2.4.4(详见 Changelog 与 Releases)。
展示截图较多,统一收进下方折叠分组(默认折叠,点开查看;GitHub Markdown 不支持标签页,故用可折叠分组实现「整体展示区」)。
主界面 — 仪表盘 / 供应商 / 设置 / 日志
| 仪表盘 | 供应商 |
|---|---|
![]() |
![]() |
| 设置 | 日志 |
![]() |
![]() |
Codex APP 实际接入
启用任意供应商后,Codex APP 模型选择器会显示「 / 」形式的真实模型名,对话过程中工具循环 / previous_response_id 历史回放 / thinking 模式 reasoning_content 注入全部由本地代理透明处理:

Codex Desktop 背景主题(可选,11 套二次元主题)
为 Codex Desktop(Electron 客户端)注入背景图 + 半透明玻璃面板 CSS,内置 11 套二次元主题(每套按背景图独立配色)+ 自定义上传。不修改 Codex 的 binary,基于 Chromium DevTools Protocol 运行时注入。开关为持久化状态标记:开启时落盘保存并即时注入(best-effort),若当前 Codex 未经本工具启动 / 调试端口不可用,则弹确认提示是否重启 Codex 让主题生效;关闭时落盘清除偏好并 best-effort 即时 CDP 清除已注入主题(回原生 UI),与开启对称 —— 同样在调试端口不可用时清除失败,则保留至 Codex 下次重启移除。
| 长离 (Changli) | 碧蓝航线 (Azur Lane) |
|---|---|
![]() |
![]() |
| 乃琳 (Nailin) | 赞妮 (Zani) |
![]() |
![]() |
第 6 套 Carton 自带右下角漂浮立绘(随鼠标动)。自定义背景:Theme 页 → "+ 添加自定义" → 选 JPG/PNG → 16:9 crop 弹窗自由选截取区域(拖拽 + 滚轮缩放)→ 应用。Codex 启动时如已开启 toggle 会自动注入已选主题,不需手动操作。
Codex 内用量显示(可选)
在 Codex Desktop 顶栏「Toggle pinned summary」弹窗底部注入独立「Usage」分区:5 小时 / 每周 / 月度套餐额度(白名单 provider:antigravity gemini 系 + GLM Coding Plan + 小米 MiMo Token Plan + OpenCode Go + Kimi Code)、余额 / 已用额度数值(DeepSeek / Kimi 月之暗面 / anyrouter)、上下文用量、实时 Tokens 速率与累计、缓存命中率。其中上下文行可展开 Claude 风格的 by-source 明细下拉(按发往上游的内容分类:工具调用与输出 / 推理 / 开发者指令 / 对话消息 / 工具定义 / 系统提示),数据按对话持久化、启动即用。详见下方「能做什么」。

Codex 草稿暂存 Stash(可选)
输入框旁「暂存 / 恢复」按钮 + Usage 面板下方「Stash」列表:把预输入的文字 + 图片先暂存、腾出输入框去回复上一轮,随后选择性恢复到输入框或直接发送(多条时点恢复唤起下拉选)。
| Stash 面板(支持图片) | 快捷恢复下拉 |
|---|---|
![]() |
![]() |
gpt-5.5 / gpt-5.4 / gpt-5.4-mini / gpt-5.3-codex / gpt-5.2)映射到供应商真实模型 ID:streamGenerateContent)、Gemini CLI OAuth(Cloud Code Assist)、Anthropic Messages(/v1/messages)、Grok Web(/rest/app-chat/conversations/new)、Responses 透传等previous_response_id 历史回放 + autocompact 展开 + thinking / reasoning_content 注入全部对齐 OpenAI Responses API 协议;remote compact 新旧协议双轨支持:旧版 /responses/compact 端点 + 新版 remote compaction v2(普通流式 /responses 带 compaction_trigger 标记,响应回单个 compaction item 的 SSE 流)——新版 Codex 触发自动压缩时此前会报 expected exactly one compaction output item 已修(MOC-198)reasoning_summary_text.delta,实测官方 gpt-5.5 @ v26.623 即此单通道形态);早期 MOC-203 曾双发 content 通道兼容,后实测双发导致同一思考块重复更新、流式期间整段闪烁,已收敛回单通道(MOC-293)。chat 路径同时修复 reasoning 与 tool_call 流式事件交错(开工具前先闭合 reasoning)、gemini 修复工具调用折叠(functionCall 后空 text part 不再产生空 message item,同轮工具正常折叠成组)(MOC-203)phase 字段(工具轮铺垫 → commentary 归入折叠过程区,最终答复 → final_answer 展开);流式 output_item.added 一律先发临时 commentary,message 的 output_item.done 延迟到收尾侧(已知 stop_reason / has_seen_tool_calls)再带权威 phase emit——chat 路径 message 只在流末闭合天然权威,gemini / anthropic 路径在收尾侧 emit_terminal / emit_completed 时按终态信号(anthropic final_stop_reason / gemini has_seen_tool_calls)定 phase,保证折叠只在真最终答复收尾时触发一次、任务中途不抖动。注:最终答复流式期间先显示在过程区、收尾时提升为最终回复(第三方模型无法像 GPT 那样预先声明消息通道)。grok_web 与 Responses 直通不经此转换、不涉及apply_patch 工具(编辑文件 +/- diff UI)在 DeepSeek / Kimi / MiMo 等 chat-completions provider 上正常工作:adapter 双向桥接 Responses custom_tool_call ↔ chat function_call 形态,模型按 V4A 格式生成 patch,Codex APP 渲染为 diff(issue #235);Gemini 系(gemini_native + Cloud Code Assist / Antigravity,走 generateContent)已通过 MOC-75 修复同款桥接:请求侧把 freeform custom 工具降级成带 input 参数的 function(V4A description 复用 chat 常量),响应侧把 Gemini 回来的 functionCall 重打包成 custom_tool_call wire@@、Add File 漏 +、上下文 byte 失配、缺 *** Begin/End Patch 信封、漏空行、漏前缀、多个不连续 hunk 漏 @@ 分隔等)。中间层按白名单逐条恢复成合法格式再发 Codex —— 读盘把 @@ 锚点 / 上下文对齐成文件真实字节、补回漏写空行、空文件 / 空 rename 转 Delete+Add、多区编辑漏 @@ 时按文件真实位置自动切段插裸 @@(MOC-263 P0:仅唯一可分段才动,浮动 + 落点歧义则透过)等;非破坏性(不丢内容、不覆盖)、未知一律原样透过(交 Codex 报错让模型自纠,不猜)。读盘解析的 cwd 用最近若干 cwd 候选而非单一全局值,使并发多会话下兜底不再被别项目的 cwd 覆盖失效(MOC-263 P1)。针对模型给 Add File 终止符误加 +(+*** End Patch,逐行加 + 时的常见错)导致新建文件残留一行 *** End Patch:根治在注入指引(教模型终止符不加前缀);中间层遇这种带前缀的歧义终止符按文件类型消歧 —— 代码 / 结构化配置文件(裸 *** End Patch 不可能是合法源码末行)直接剥成裸终止符;文档 / 文本类无法排除是正文最后一行,则不猜、留 incomplete 让模型按指引重发(避免误删正文)。同时优化 chat 路径 apply_patch 指引(context 必须是已存在行 / 序列编辑别重删已删行 / memory 文件专属引导)(MOC-268)。思路镜像 Codex 给 GPT 用的 V4A lark 语法约束、在 chat 路径事后保证(致谢 openai/codex 的 apply_patch lark grammar)(MOC-194 / MOC-263 / MOC-268)image_gen 工具在 Antigravity provider 上真正出图(原生,非 CLI fallback)。模型在对话里调 image_gen 时,代理在 Gemini 响应流里截获该调用、发出图子请求(默认 gemini-3.1-flash-image,可在 provider 配置页 gpt-image-1 槽位覆盖),把返回的图片内联成 image_generation_call 回流给 Codex 渲染;文本/思考照常实时流式,出图轮记入历史避免重复出图。该工具仅对 Antigravity 暴露(其余 provider 无出图后端)。response.failed,且 error.code 对齐 Codex 的重试白名单:无歧义永久性错误(400 INVALID_ARGUMENT / 401 鉴权 / 403 权限)直接 surface 给用户 + 停手(可换模型),不再让 Codex 反复重发同一请求卡死;瞬时或不确定错误(超时 / 限流 / 配额 / 5xx)保留可重试语义(指数退避;真不可恢复的退避到上限后 surface)(MOC-79)invalid_prompt(永久,Codex surface + 停),不再让 Codex 反复重发卡死;瞬时错误(timeout / rate_limited / server_error)保留可重试语义(MOC-90)response.failed 流,400 请求错误 / 401 鉴权 / 403 权限 → invalid_prompt(永久,surface + 停手),429 瞬时限流(per-minute)/ 5xx / 超时等保留可重试语义;429 配额 / 使用窗口耗尽(保守强信号检测,如 GLM「已达到 N 小时的使用上限,将在 … 重置」)识别为永久态 → fail-fast,原样显示上游额度提示(含重置时间)+ 停手,不再反复「Reconnecting」重连(顺带消除重连触发的「proxy adapter error」误报);与 grok / gemini 同走 codex_retry_code 白名单(MOC-103 / MOC-264)~/.codex-app-transfer/sessions.db),.app 重启不丢历史。L2 按 sha256 内容寻址去重(图片走 blob 外置 + 文字/工具消息整条去重,逐轮快照共享部分只存一份,实测省约 97% 消息体积),体积极小,故持久化不过期(旧 30 天 TTL 已移除,老会话永远续得上);存量旧库在首次启动后台静默分批迁移回收(MOC-142 / MOC-168 / MOC-170)model_provider 过滤显示。cc-switch 等工具往 config.toml 写了第三方 model_provider,其留下的旧会话在 transfer(本项目刻意不写 model_provider,锚定 openai 以与官方互通)视图下被隐藏。设置页 → 高级 → 会话历史新增「导入」(把第三方会话就地归一成 openai,在 transfer 里重新显示)与「恢复」(把选中会话的 model_provider 写回某第三方值,让对应工具重新看到——导入的逆操作);transfer 启动检测到隔离会话时也弹窗提示导入。两者均需先关闭 Codex(写它独占的会话状态库 state_<N>.sqlite),确认后自动关闭 → 就地改写 → 重启 Codex~/.codex/sessions/ rollout JSONL,按对话 / 日 / 模型聚合 token 用量(解析层 vendor 自 ryoppippi/ccusage)。「按对话」视图显示每对话缓存命中率,点击数字弹出该对话逐轮命中率直方图(命中含于总计、双色,hover 看命中 / 总输入 / 输出);proxy 本地记录 session → 真实上游模型(本版本之后的新对话),「按对话」模型列因此显示真实上游模型而非 Codex 客户端占位名(gpt-5.x)codex login(账号开关统一走下方「插件解锁三态」选择器,MOC-257)。relay 保留 auth_mode=chatgpt + tokens 让 Codex 原生显示 Plugins 入口、消除 CDP 伪造的启动高延迟;第三方模型经 openai_base_url 走 proxy,账号 / 插件 backend 经 chatgpt_base_url 透传真 chatgpt.com。transfer 不刷新 single-use refresh token(与本机 Codex 双刷会 refresh_token_reused 烧号),刷新只归源头(本机 Codex 自刷 / codex login 自取)。配套系统代理连通检测:仪表盘「网络代理」状态卡 + 解锁 gate(账号有效 AND 系统代理可达才解锁,缺则引导开代理 / 登录 / 强制),探测只连代理端口、不碰 chatgpt.com。另:relay 下 transfer 不刷新 token、靠源头保鲜,但服务端撤销(双刷烧号 / 别处重登)本地 JWT exp 看不到 → 此前前端因本地 token 没到期而误显账号正常;现 proxy 透传探测到 chatgpt backend 401 即回灌「需重新登录」状态,前端及时提示重登(MOC-104 / MOC-114 / MOC-124)auth.json 仍 apikey → 通信不自洽、插件跑不通)。模拟账号:无真实 ChatGPT 账号时写一份合规伪造的 auth.json(auth_mode=chatgpt + 合成 JWT、远未来 exp 防 CLI 刷新、cas_synthetic 哨兵)让 Codex 原生显示 Plugins,proxy 把 Codex 发的 /backend-api/* 账号 / 插件请求逐条伪造 200(绝不 401,401 触发 Codex 重登),对话照常走第三方 provider(resolver 只验 JWT 形状不验签)。真实账号:用本机 ChatGPT 登录态 relay 透传真 chatgpt.com;账号失效(过期 / 服务端撤销)自动降级模拟账号(账号恢复可用自动升回),无账号时弹窗引导 codex login。关闭:真账号整文件转移备份、确保 ~/.codex 无 auth.json,退出 transfer 时还原原配置(三态切换全程真账号 tokens 无损)文档 → MCP → Marketplace 子区按分类浏览 OpenAI Codex 插件目录的镜像(178 个连接器 + 搜索 + 图标 + 官网链接),数据来自项目维护的公开 storage 仓库(codex-app-transfer-storage,后端经 raw.githubusercontent.com 直取 registry + 图标代理 + 缓存);多源聚合——官方源 + 「添加源」加自定义公开连接器目录(同 {connectors} schema)。仅展示浏览:这些连接器是 OpenAI 平台的 OAuth 远程连接器、由单一 plugin-runtime MCP server(chatgpt.com/backend-api/ps/mcp)统一 broker、无独立 MCP 端点,故镜像目录只含展示数据。另:文档 → MCP → Plugins 子页给已安装 plugin 显示图标(读 manifest interface.logo)+ 「Skills」按钮(弹窗看其 SKILL.md,多 skill 下拉选条)wham/remote/control/server 发起 WebSocket 握手;relay 下此前 transfer 把它当普通 HTTP 透传、不做 WS upgrade → chatgpt.com 返 404 → 远程控制建不起来、Codex enroll 死循环重试。现加真 WS 透传:接收侧 axum 接 Codex 的 WS upgrade,上游侧用独立 http1_only client(WS upgrade 需 HTTP/1.1,而 state.http 默认 ALPN 协商 h2)连 wss://chatgpt.com、注入 Codex 的 x-codex-installation-id / x-codex-server-id / authorization 等远程控制必需 header,再双向 frame pump。普通转发的 state.http(reqwest 0.12)完全不动,WS 单独走 reqwest 0.13 client,现有上游 CF/ClientHello 指纹零变化~/.codex/{config.toml,auth.json},退出 / 下次启动按 key 智能合并还原;强杀自愈:transfer 被强杀(kill -9 / 崩溃)来不及还原时,下次启动自动发现上个 session 遗留的快照并补跑还原(此前会残留 sandbox_mode / 指向已停代理的 openai_base_url,导致 GPT 账号报「无法设置管理员沙盒」且无法对话);拍快照时同步过滤残留特征字段,防脏配置固化进还原基线;MCP 授权可移植保险箱(默认开):把 MCP OAuth 凭据改存为可移植文件(~/.codex/.credentials.json,0o600),并在 ~/.codex 之外维护镜像(~/.codex-app-transfer/mcp-credentials.json);整个凭据文件被账号切换 / 误删 / 换机清掉时,下次启动弹窗逐条列出可恢复的 MCP 授权,每条可恢复 / 移除 / 忽略(多选 + 全选 / 全部恢复 / 全部删除 / 全部忽略;未处理与已忽略项持久保留、下次启动继续提示,绝不静默丢备份;设置页也有入口 + 待处理状态);单个 server 的主动登出会被尊重、不复活;注:不解决 OAuth 自然过期;另在设置页提供原配置完整性检查:扫描 ~/.codex/config.toml 与历史快照是否残留 transfer apply 写过的字段(model_catalog_json / openai_base_url 等),「显示残留字段」只读列出每个文件待清理的残留字段、「针对性清除」精准 strip(保留 model / personality / [projects.*] / mcp_servers 等其它配置)AGENTS.md raw 全文 read/write + 文件系统选择;系统目录 / 凭据目录会被拒绝,按 .git/ 自动分类 project-root / subdir 显示 chip~/.codex/memories/MEMORY.md(主索引)+ memory_summary.md(摘要),也可添加 HOME 下非敏感项目 MEMORY.md;系统目录 / 凭据目录会被拒绝~/.codex/skills/<name>/SKILL.md 全列表 raw 编辑,并强制限制在 skills 根目录内;"打开文件夹"按钮调系统 open 让用户在 Finder/资源管理器 改 SKILL.md 之外的子文件(scripts / examples / templates 等)~/.codex/config.toml 的 [mcp_servers.*] 节(toml_edit round-trip 保留注释 + 其他配置节)+ Plugins 子页扫 ~/.codex/plugins/cache/ 列已安装 plugin(enable toggle / uninstall);所有改动 atomic write + 独立 history 互不交叉(SHA-256 hash 路径);新增 / 编辑 / 一键添加 server 及 raw TOML 覆盖写盘前一律弹二次确认(stdio 展示将以你$ claude mcp add codex-app-transfer \
-- python -m otcore.mcp_server <graph>