Codex 用GPT5.5的时候,总是会出现Remote Compact Error。是它把后端的压缩放到了远程的API上面。如果你的网络不是特别稳定的话,会经常出现压缩报错,在执行长任务的时候。
即使网络稳定,也很经常出现这种状况。这个不只是国内的开发者,全球的开发者都会出现这种的问题。本质就是OpenAI的5.5的模型对于remote compact 任务的bug。
当然我也出现了,所以去找了一些的解决方案。最基础的就是切换到5.4的模型,手动 /compact,压缩完成再去切换到5.5,继续任务。
如果你的任务不是特别的长,还是可以接受的。但是如果是长任务加多并发,就特别的难受。
最终我还是和GPT 5.5的沟通当中找到了解决办法,所谓的用魔法打败魔法。
就是把Codex CLI的代码去拉到本地,用Rust重新编译,实现一个local compact本地压缩的效果。本地压缩的效果可能会逊色于远程的压缩,但是对于长任务的连续性,收益肯定是大于Remote Compact Error。
那我真实的测试情况,用Mac Rust 编译的时间是一个小时,用Linux Rust编译了5个多小时,让我很无语。。
那用编译过后的版本再去执行长任务的时候,完全不会中断,从根本解决了这个问题。
我把编译和迁移过程整理成了一份完整文档,直接放在下面。这个不是外部资料引用,而是我自己的实操记录,所以更适合按正文继续往下写;如果整段做成引用,反而会影响目录、代码块和后续维护。
如果只是临时绕过,也可以先用手动切换模型再 /compact 的方式解决。下面这份文档适合长期用 Codex 跑长任务的人参考。


完整配置与迁移文档:Codex Local Compact / cxl
这份文档记录本机 cxl 的实现、启动方式、配置参数、升级方式,以及如何把同一套方案复制到其他电脑。目标是绕过容易断流的远程压缩接口,同时保留官方 Codex、原有登录、配置、MCP 和会话记录。
1. 当前结论
长任务优先用:
cxl
cxl 是本地编译版 Codex。它通过环境变量关闭 remote compact,让自动压缩和手动 /compact 都走本地压缩路径,不再请求:
https://chatgpt.com/backend-api/codex/responses/compact
官方 codex 没有被覆盖。cxl 只是另一个 alias,和官方命令可以并存。
2. 适用场景
适合这些情况:
- Codex CLI 长任务经常报:
Error running remote compact task: stream disconnected before completion。 - 错误 URL 指向:
/backend-api/codex/responses/compact。 - ChatGPT auth 可用,普通对话能跑,但进入自动压缩或手动
/compact时容易断。 - 你已经确认网络出口不稳定,或者不想继续依赖 remote compact 接口。
不解决这些问题:
- 普通模型请求
/backend-api/codex/responses断流。 - WebSocket 长连接超时。
- VPN / 代理本身不稳定。
- 账号额度、登录态、MCP 配置错误。
判断方法:看报错 URL。
/responses/compact:cxl这套方案能绕过。/responses:这是普通模型请求断流,仍然要处理网络或代理。
3. 本机当前状态
本地源码目录:
/codex
当前分支:
local-compact
当前版本:
codex-cli 0.140.0
当前本地提交:
7d38cdb6c3 Update local compact build to 0.140 release
本地可执行文件:
/codex/codex-rs/target/release/codex
Shell alias 位置:
~/.zshrc
Alias 内容:
alias cxl='RUST_BACKTRACE=1 CODEX_DISABLE_REMOTE_COMPACT=1 "/codex/codex-rs/target/release/codex"'
新终端可直接运行:
cxl
当前终端要先加载:
source ~/.zshrc
4. 实现原理
修改文件:
codex-rs/core/src/compact.rs
核心逻辑:
pub(crate) fn should_use_remote_compact_task(provider: &ModelProviderInfo) -> bool {
if std::env::var("CODEX_DISABLE_REMOTE_COMPACT")
.ok()
.as_deref()
== Some("1")
{
return false;
}
provider.supports_remote_compaction()
}
含义:只要启动进程带 CODEX_DISABLE_REMOTE_COMPACT=1,Codex 就不会使用 remote compact。
这不是手动复制聊天记录,也不是手动写摘要。它仍然走 Codex 内部的压缩流程,只是把“远程专用 compact 接口”改成“普通模型请求生成压缩摘要”。压缩效果仍由当前模型决定;差别主要是稳定性和接口路径,不是把上下文简单截断。
5. 共享状态
cxl 没有设置单独的 CODEX_HOME,所以它和官方 codex 默认共享:
~/.codex/config.toml- ChatGPT 登录态
- MCP 配置
- skills / plugins
- profiles
- 会话记录和本地状态
不要把本地编译版复制覆盖到官方 codex 路径。也不要把 alias 写成 alias codex=...,除非明确想替换默认命令。
6. 当前压缩参数
用户级配置文件:
~/.codex/config.toml
当前压缩相关配置:
model_context_window = 272000
# cxl 已绕过 remote compact;200K 在 272K 上下文内减少压缩频率并保留安全余量
model_auto_compact_token_limit = 200000
model_auto_compact_token_limit_scope = "total"
tool_output_token_limit = 8000
说明:
160000比较保守,压缩更频繁。200000适合当前272000上下文窗口,能减少压缩频率,同时保留约72000token 缓冲。- 不建议直接提高到
240000+,否则长任务、工具输出和推理摘要更容易挤满上下文。 - 如果后续出现压缩质量下降、上下文遗忘或临近满窗错误,把
model_auto_compact_token_limit改回160000。
7. 复制到其他电脑:从零部署步骤
其他电脑不能只复制 cxl 这个二进制文件。不同 Mac 架构、Rust 版本、系统依赖可能不同。更稳的做法是在那台电脑上重新拉源码、打同一个 patch、release 编译。
7.1 准备目录
mkdir -p "$HOME/code/github-project"
cd "$HOME/code/github-project"
git clone "https://github.com/openai/codex.git"
cd "$HOME/code/github-project/codex"
如果目录已经存在:
cd "$HOME/code/github-project/codex"
git fetch origin --tags
7.2 切到官方版本
当前本机使用 rust-v0.140.0。其他电脑建议先用同一个版本,减少变量:
git checkout "rust-v0.140.0"
git switch -c "local-compact"
如果以后要跟随官方新版本,把 rust-v0.140.0 换成新的官方 tag。
7.3 打本地 patch
打开:
codex-rs/core/src/compact.rs
找到:
pub(crate) fn should_use_remote_compact_task(provider: &ModelProviderInfo) -> bool {
provider.supports_remote_compaction()
}
改成:
pub(crate) fn should_use_remote_compact_task(provider: &ModelProviderInfo) -> bool {
if std::env::var("CODEX_DISABLE_REMOTE_COMPACT")
.ok()
.as_deref()
== Some("1")
{
return false;
}
provider.supports_remote_compaction()
}
提交本地 patch:
git add "codex-rs/core/src/compact.rs"
git commit -m "Add local compact switch"
7.4 Release 编译
cd "$HOME/code/github-project/codex/codex-rs"
cargo build --release --bin codex
编译完成后验证:
"$HOME/code/github-project/codex/codex-rs/target/release/codex" --version
应看到类似:
codex-cli 0.140.0
7.5 添加 cxl alias
推荐写绝对路径。把下面这一行加入 ~/.zshrc,注意把 /Users/你的用户名 改成那台电脑的真实路径:
alias cxl='RUST_BACKTRACE=1 CODEX_DISABLE_REMOTE_COMPACT=1 "/Users/你的用户名/code/github-project/codex/codex-rs/target/release/codex"'
也可以用 $HOME,但不要直接放在单引号内部当成可展开变量。可写成这个形式:
alias cxl='RUST_BACKTRACE=1 CODEX_DISABLE_REMOTE_COMPACT=1 "$HOME/code/github-project/codex/codex-rs/target/release/codex"'
这个形式在 alias 执行时会展开 $HOME。
加载配置:
source "$HOME/.zshrc"
验证 alias:
zsh -ic "alias cxl; cxl --version"
8. 其他电脑的配置同步
如果其他电脑也要共享同样体验,主要同步这些内容:
- 这份文档:
LOCAL_COMPACT_SETUP.md ~/.zshrc里的cxlalias~/.codex/config.toml里的 compact 参数- 官方 Codex 登录态需要在那台电脑上正常登录;不要直接复制不确定的认证文件
~/.codex/config.toml 可参考:
model_context_window = 272000
model_auto_compact_token_limit = 200000
model_auto_compact_token_limit_scope = "total"
tool_output_token_limit = 8000
如果那台电脑的模型上下文窗口不是 272000,不要照抄 200000。原则是:自动压缩阈值要低于上下文窗口,并留出足够余量。
9. 日常使用与验证
启动:
cxl
进入 Codex 后检查状态:
/status
手动触发压缩测试:
/compact
如果压缩时不再出现这个 URL,说明绕过生效:
/backend-api/codex/responses/compact
如果仍然出现普通请求断流:
/backend-api/codex/responses
那是网络长连接问题,不是 remote compact 问题。
10. 常见提示含义
OpenAI Codex (v0.140.0) / codex-cli 0.140.0:
这是当前本地 release build 的版本显示,说明 cxl 已经指向 0.140.0。
Limits: refresh requested; run /status again shortly.:
额度信息正在刷新,稍后再运行 /status 即可。
Falling back from WebSockets to HTTPS transport. request timed out:
WebSocket 连接超时,Codex 自动降级到 HTTPS。偶发正常;频繁出现说明代理或网络长连接不稳。
Stream disconnected before completion ... /backend-api/codex/responses:
普通模型请求断流,不是 compact 接口错误。cxl 只能绕过 /responses/compact,不能修复所有网络长连接问题。
attempt to add with overflow:
这是 Rust debug build 的整数溢出检查触发的 panic。当前 cxl 已切到 release binary,正常不应再因为 debug-only overflow check 退出。cxl alias 仍带 RUST_BACKTRACE=1,如果以后仍然崩溃,终端会显示更完整的源码调用栈,便于定位真正的 Codex 代码路径。
11. 更新官方源码后的维护步骤
进入本地仓库:
cd "$HOME/code/github-project/codex"
拉取上游 tag:
git fetch origin --tags
更新到新的官方 tag。示例:
git checkout "rust-v0.141.0"
git switch -C "local-compact"
重新套用 CODEX_DISABLE_REMOTE_COMPACT patch。如果已有本地提交,也可以用 rebase/cherry-pick,但最稳的是确认 compact.rs 里仍然有这段判断。
重新编译:
cd "$HOME/code/github-project/codex/codex-rs"
cargo build --release --bin codex
验证:
"$HOME/code/github-project/codex/codex-rs/target/release/codex" --version
zsh -ic "alias cxl; cxl --version"
12. 清理 debug 构建产物
如果已经确认 cxl 指向 release binary,并且下面命令通过:
cxl --version
可以删除 debug 目录释放空间:
rm -rf "$HOME/code/github-project/codex/codex-rs/target/debug"
不要删除整个 target,因为 release binary 在:
codex-rs/target/release/codex
13. 回滚方式
只停用 cxl:继续运行官方版。
codex
恢复保守压缩阈值:
model_auto_compact_token_limit = 160000
删除 alias:从 ~/.zshrc 移除这一行:
alias cxl='RUST_BACKTRACE=1 CODEX_DISABLE_REMOTE_COMPACT=1 "codex/codex-rs/target/release/codex"'
然后重开终端,或执行:
source "$HOME/.zshrc"