0020-codex-fork-on-config-change.md 1.6 KB

ADR-0020 Codex 会话配置变化时分叉

  • 状态:Accepted · 日期:2026-10-23 · 补充 ADR-0003

背景

AgentServer 每轮对话都会把最新配置(Profile 的文件访问策略、权限模式、技能、全局禁止项、功能开关、系统提示词)通过 thread/resume 传给 Codex。但会话一旦加载进 app-server 进程,Codex 就沿用首次加载时的配置。

  • 验证结果(codex 0.164):resume 时放开某个目录,命令仍然读不到
  • thread/unsubscribe 不会卸载会话
  • turn/start 没有权限覆盖项

这样后台收紧安全设置(例如新增全局禁止项)后,进行中的 Codex 会话要到服务重启才会受约束。

决策

  • 适配器为当前 app-server 进程中每个已加载的会话记录配置指纹:线程参数的 SHA-256,模型除外,模型每轮单独传入。
  • 下一轮的配置与指纹相同时直接继续,指纹不同时调用 thread/fork,传入新配置:
    • 新会话保留全部历史,采用新配置
    • 会话映射更新为新的 thread id,旧会话取消订阅
    • 已验证:放宽后可以读取,再收紧后又被拒绝,历史轮数不变
  • 分叉失败时新建会话,宁可丢失上下文,也不在旧配置下继续。
  • app-server 重启后,已加载记录清空,下一轮按正常流程 resume。

后果

  • 配置修改在下一轮立即生效,不需要重启服务
  • 分叉后,Codex 在本会话中"本会话内允许"的审批记录不再保留,需要重新审批
  • 旧会话的记录留在 Codex 自己的历史中,不影响 AgentServer