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 是天然的“事件网关”。

常用事件:

  • SessionStart
  • UserPromptSubmit
  • PreToolUse
  • PostToolUse
  • Stop

思想

与其在网络层猜语义,不如在事件层拿到用户行为语义

  • 会话什么时候开始;
  • 什么时候提交了 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["看板/审计/成本视图"]

设计原则(简版)

  1. 不改内核,先改边界。
  2. 事件优先,日志只是证据,不是模型。
  3. 辅助能力失败不阻断主任务。
  4. 所有增强都有回退路径与可视化日志。
  5. 先解决身份/上下文正确绑定,再谈指标口径。

可直接拿去做评审的问题清单

  • 入口是否统一?是否有直连绕过?
  • 身份是否可归因?
  • 哪些事件是必须采集?
  • 上报失败时是否不影响任务执行?
  • 是否有本地日志支撑排障?
  • 字段是否涉及敏感数据?是否已做最小化和脱敏?
  • 是否支持快速降级与快速回滚?

一句话总结

CMUX 与 Ducx 的技术价值,不在“它们用了哪些命令”,而在于:
它们把扩展能力放到可控边界层,而不碰 Codex 主体。
这正是工程上最容易长期演进的一种 AI 工具治理方法。