Codex 低侵入扩展架构:CMUX 与 Ducx 的可复用思想
你要的不是“某个产品怎么做”,而是要一个可迁移的架构心智模型。
这份笔记把 CMUX 与 Ducx 放在同一框架下对比,目标是提炼:
在不改 Codex 内核的前提下,如何优雅地扩展行为能力。
核心命题
问题是:
- 我如何让 Codex 在“恢复能力、监控治理、身份归因”上更强?
- 同时又不破坏其原本体验和稳定性?
答案是统一答案:
统一入口 + 生命周期事件 + 外挂控制面(Sidecar)+ 可观测闭环。
这是一种典型的“边界优先、低侵入”设计。
一、统一入口(入口层):把所有调用收束
目的
防止“有些调用绕过你搭建的能力层”。
实践
- 让用户从
codex/codex入口改为你自己的启动脚本(wrapper); - wrapper 只做很少事情:收集上下文、设置环境变量、再
exec codex; - 对上层系统来说,真正被增强的是“调用路径”,不是 “核心命令”。
关键价值
- 覆盖率高(不容易漏掉会话);
- 可插拔(后续替换 wrapper 不影响核心 CLI);
- 易治理(入口统一方便统计和策略落地)。
二、上下文绑定(绑定层):给会话一个可定位身份
问题
一个会话要可恢复、可追踪,必须能回答:
- 这是哪个终端/窗口/面板?
- 属于哪个工作目录?
- 属于哪个用户?
- 和哪个 Codex session 绑定?
方式
- wrapper/终端层生成并注入
surface_id之类标识; - 结合
cwd、用户身份、会话 id; - 将这些信息保存在本地映射表中(可用于恢复与归因)。
三、生命周期事件化(事件层)
Codex 提供的 hook 是天然的“事件网关”。
常用事件:
SessionStartUserPromptSubmitPreToolUsePostToolUseStop
思想
与其在网络层猜语义,不如在事件层拿到用户行为语义:
- 会话什么时候开始;
- 什么时候提交了 prompt;
- 工具何时被调用、耗时;
- 什么时候终止。
四、外挂能力层(Sidecar):负责增强,不干扰主逻辑
分离边界
Codex 只负责 LLM + 工具主流程。
外挂层(脚本/进程)负责:
- 会话映射持久化;
- 上报/采集;
- 恢复命令生成;
- 异常降级和重试策略。
设计收益
- 主能力稳定性不被影响;
- 上报逻辑可独立迭代;
- 失败时不阻断用户主任务。
五、可观测闭环(可运维性)
要能回答“为什么没生效”必须有闭环:
- 本地日志(本地可查);
- 失败分类(hook 执行失败、网络失败、认证失败);
- 指标聚合(成功率、错误率、采集延迟);
- 看板消费(治理层决策)。
flowchart TD U["用户发起命令"] --> W["统一入口 Wrapper"] W --> C["Codex Runtime(不改内核)"] W --> Ctxt["上下文注入: surface/cwd/user"] C --> H["Hook 事件"] H --> S["Sidecar 控制层"] S --> R["恢复映射/策略执行"] S --> P["上报平台/看板"] R --> L["可观测日志"] P --> D["Dashboard 与治理"]
CMUX 与 Ducx:同一架构,两个目标
CMUX 方向
- 目标:恢复能力
- 侧重:
surface/pane -> codex session映射 - 输出:恢复后可恢复到原始工作上下文(pane 对应)
Ducx 方向
- 目标:行为治理与指标
- 侧重:身份绑定 + hook 事件上报
- 输出:谁在什么场景用了多少、如何使用、出错在哪里
共同底层
- 启动都要经过 wrapper;
- 事件都靠 hook;
- 逻辑增强都在外部程序/脚本;
- 都依赖“可观测 + 可恢复”而非改内核。
统一模板(可复用于任何 AI CLI)
flowchart LR A["入口统一(脚本/别名)"] --> B["上下文注入"] B --> C["CLI 内核"] C --> D["官方生命周期事件"] D --> E["外部处理器"] E --> F["本地状态仓库"] E --> G["上报与治理服务"] F --> H["恢复/调度"] G --> I["看板/审计/成本视图"]
设计原则(简版)
- 不改内核,先改边界。
- 事件优先,日志只是证据,不是模型。
- 辅助能力失败不阻断主任务。
- 所有增强都有回退路径与可视化日志。
- 先解决身份/上下文正确绑定,再谈指标口径。
可直接拿去做评审的问题清单
- 入口是否统一?是否有直连绕过?
- 身份是否可归因?
- 哪些事件是必须采集?
- 上报失败时是否不影响任务执行?
- 是否有本地日志支撑排障?
- 字段是否涉及敏感数据?是否已做最小化和脱敏?
- 是否支持快速降级与快速回滚?
一句话总结
CMUX 与 Ducx 的技术价值,不在“它们用了哪些命令”,而在于:
它们把扩展能力放到可控边界层,而不碰 Codex 主体。
这正是工程上最容易长期演进的一种 AI 工具治理方法。