用 Codex 干活一直有个烦人的问题:上下文满了触发压缩(或者手动 /compact )之后,内建摘要是无差别转述,它不知道哪条工具输出是承重的。测试结果、报错栈这种东西经常被压成一句“测试全部通过”,之后模型就凭这句转述继续干活,或者再跑一遍工具把信息拿回来,费时费 token ,而且你根本不知道它丢了什么。
Claude Code 那边有 fast-jev-compaction ( tamaratran 写的),思路是压缩前用 TypeSafe 的 Jev 模型给消息打分,hook 直接返回新消息列表把压缩产物整个换掉,完全无损。我想在 Codex 上用同款,翻文档加扒二进制才发现 Codex 的 hook 协议做不到——PreCompact 只能放行或者拦停压缩,没有任何字段能把自定义结果提交回去。
所以换了个思路重写了一个,叫 jev-compact:
压缩前 PreCompact hook 把 transcript 里的工具调用挨个发给 Jev 打分(两个 noul 概率问题:这个调用本身还重要吗、它的输出还需要逐字保留吗),裁决落盘,然后照常放行压缩。压缩完成后 SessionStart hook 拿存档对照压缩结果,用 call_id / sha256 / 头部子串三级判定哪些“高分”输出真被丢了,丢了的把原文塞回下一轮请求。摘要照跑,但 Jev 说过必须逐字保留的东西,摘要丢不掉。
安装
codex plugin marketplace add https://github.com/fatelei/jev-compact.git codex plugin add jev-compact@fast-jev
TUI 里批准一下 hooks ,配个 TYPESAFE_API_KEY 就行
github: https://github.com/fatelei/jev-compact 欢迎点赞