# 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