0.99.0
新增功能
- 运行直接 shell 命令不再中断进行中的 turn;当 turn 处于活动状态时,命令可并发执行。(#10513)
- 新增
/statusline,用于以交互方式配置 TUI 页脚中显示哪些元数据。(#10546) - TUI 恢复选择器现在可以在创建时间与最后更新时间之间切换排序顺序,并带有选择器内的模式指示。(#10752)
- App-server 客户端现在拥有专用 API,可用于引导活动中的 turn、列出实验性功能、恢复 agent,以及选择退出特定通知。(#10721, #10821, #10903, #11319)
- 企业/管理员要求现在可以通过
requirements.toml限制 Web 搜索模式并定义网络约束。(#10964, #10958) - 图片附件现在除现有格式外,还支持 GIF 和 WebP 输入。(#11237)
- 支持对 shell 环境和
rc文件进行快照 (#11172)
问题修复
- 修复了 Windows 启动问题:缓冲的按键可能导致 TUI 登录流程立即退出。(#10729)
- 必需的 MCP 服务器现在会在启动/恢复流程中快速失败,而不是以损坏状态继续运行。(#10902)
- 修复了文件监视器的一个 bug,该 bug 会发出虚假的 skills 重新加载事件,并可能生成非常大的日志文件。(#11217)
- 提升了 TUI 输入的可靠性:较长的选项标签现在可以正确换行,空闲时在 steer 模式下按 Tab 会提交,历史召回会保持光标位置一致,暂存的草稿会正确恢复图像占位符。(#11123, #10035, #11295, #9040)
- 修复了模型模态的边缘情况:在纯文本模型上会显示更清晰的
view_image错误,并在模型切换时移除不受支持的图像历史。(#11336, #11349) - 减少了换行/heredoc shell 命令的误报审批不匹配,并在 exec 策略评估中防止空命令列表。(#10941, #11397)
其他变更
- 重构了 npm 发布打包方式,平台专用二进制文件现通过
@openai/codex的 dist-tags 分发,在保留平台专属安装(包括@alpha)的同时减轻了包体积压力。(#11318, #11339) - 引入了针对
time的安全驱动依赖更新(RUSTSEC-2026-0009)。(#10876)
- 扩展了 app-server 文档和协议参考,涵盖
turn/steer、实验性功能发现、resume_agent、通知选择退出以及 nulldeveloper_instructions规范化。 (#10721, #10821, #10903, #10983, #11319) - 更新了 TUI composer 文档,以反映草稿/图像恢复、steer 模式下 Tab 提交行为以及历史导航光标语义。 (#9040, #10035, #11295)
Full Changelog: https://github.com/openai/codex/compare/rust-v0.98.0...rust-v0.99.0
- #10729 fix(tui): 在初始化时刷新输入缓冲区,以防止 Windows 上提前退出 @Ashutosh0x
- #10689 fix: 不稳定的 landlock @jif-oai
- #10513 允许用户 shell 命令与活动 turn 并行运行 @jif-oai
- #10738 nit: 加强 backfill @jif-oai
- #10246 在 fork 时添加 fork 信息 (UI) @pap-openai
- #10748 更新 explorer 角色默认模型 @jif-oai
- #10425 在指标中包含真实 OS 信息。 @iceweasel-oai
- #10745 feat: 可恢复的 backfill @jif-oai
- #10758 feat: 在
codex exec中接入 ephemeral @jif-oai - #10756 chore: 在 tui 中正确处理关闭 @jif-oai
- #10637 feat: 添加 memory 工具 @jif-oai
- #10751 feat: 在缺少行时修复 DB @jif-oai
- #10762 nit: 在差异记录中添加 DB 版本 @jif-oai
- #10621 利用 state DB 元数据生成 thread 摘要 @jif-oai
- #9691 添加 hooks 实现并接入
notify@gt-oai - #10546 feat(tui): 添加 /statusline 命令用于交互式状态栏配置 @fcoury
- #10752 feat(tui): 添加可排序的 resume 选择器,支持按创建/更新时间戳切换 @fcoury
- #10769 fix(tui): 修复 resume_picker_orders_by_updated_at 测试 @owenlin0
- #10423 fix(auth): 将 chatgptAuthTokens 概念隔离到 auth manager 和 app-server 中 @owenlin0
- #10775 nit: gpt-5.3-codex 公告 @jif-oai
- #10782 nit: gpt-5.3-codex 公告 2 @jif-oai
- #10711 将 sandbox policy 和 sandbox name 添加到 codex.tool.call 指标 @iceweasel-oai
- #10660 chore: 移除 web-search-eligible header @sayan-oai
- #10783 fix: prio 中的公告 @jif-oai
- #10721 [app-server] 添加列出实验性功能的方法。 @mzeng-openai
- #10787 chore: 将 0.98.0 NUX 更新限制为 < 0.98.0 版本 @sayan-oai
- #10655 为 /rename 和 /fork 添加分析 @pap-openai
- #10790 feat: 等待 backfill 就绪 @jif-oai
- #10693 添加支持 websocket 的 app-server 传输层 @maxj-oai
- #10818 其他公告 @jif-oai
- #10815 将 app-server requirements API 与刷新后的 cloud loader 同步 @xl-openai
- #10820 恢复为 azure 自动启用 web_search @sayan-oai
- #10727 在 websocket 连接时发送 beta header @pakrym-oai
- #10809 updates: 使用 brew api 进行版本检查 @magus
- #10793 为实验性 flags 添加 stage 字段。 @mzeng-openai
- #10821 feat(app-server): turn/steer API @owenlin0
- #10792 当配置不满足 requirements 时打印警告 @gt-oai
- #10699 feat: 向 runtime metrics 暴露详细指标 @apanasenko-oai
- #10784 将 app tooltip 限制为 macOS @aibrahim-oai
- #10843 收到 file watcher 事件时记录一个事件(仅 info) @etraut-openai
- #10852 Personality 设置不再在实验性菜单中可用 @etraut-openai
- #10840 移除了 "remote_compaction" feature flag @etraut-openai
- #10876 sec: 固定
time版本以防止漏洞 @jif-oai - #10892 nit: 测试 an @jif-oai
- #10894 feat: 再次异步 backfill @jif-oai
- #10902 跨组件处理必需的 MCP 启动失败 @jif-oai
- #10851 移除了 "exec_policy" feature flag @etraut-openai
- #10457 在生成 plan 时排队 nudges @charley-oai
- #10822 将 app 配置添加到 config.toml @canvrno-oai
- #10420 feat(network-proxy): 向 blocked 错误添加结构化 policy 决策 @viyatb-oai
- #10814 fix(linux-sandbox): 在 no-network seccomp policy 中阻止 io_uring 系统调用 @viyatb-oai
- #10698 core: 为首个 turn 预连接 Responses websocket @joshka-oai
- #10574 core: 在 compaction 替换历史后刷新 developer instructions @charley-oai
- #10914 chore(app-server): 更新 AGENTS.md 以说明 config + 可选 collection 指南 @owenlin0
- #10928 chore(app-server): 为相关字段添加 experimental 注解 @owenlin0
- #10927 将 compaction 失败视为失败状态 @aibrahim-oai
- #10861 支持替代 websocket API @by-openai
- #10826 向 otel 添加 originator @alexsong-oai
- #10855 TUI/Core: 在 submit + resume 之间保留重复的 skill/app mention 选择 @daniel-oai
- #10943 app-server: 启动 websockets server 时向控制台打印帮助消息 @JaviSoto
- #10938 将 Config.apps 标记为 experimental,修正 schema 生成问题 @canvrno-oai
- #10947 fix(tui): 使用 message phase 有条件地恢复状态指示器 @sayan-oai
- #10965 refactor(network-proxy): 将 network config 展平到 [network] 下 @viyatb-oai
- #10970 修复了一个不稳定测试 @etraut-openai
- #10710 针对 stdio MCP server 的进程组清理,以防止孤儿进程风暴 @etraut-openai
- #10964 feat: 在 requirements.toml 中添加对 allowed_web_search_modes 的支持 @bolinfest
- #10977 fix: 在 codex-rs/core/config.schema.json 中使用预期的行尾 @bolinfest
- #10973 使用 API Key 认证时不要轮询 usage @etraut-openai
- #10921 在 tui request_user_input 中显示左/右箭头以导航 @charley-oai
- #10988 fix: 在 Windows 上读取文件时规范化行尾 @bolinfest
- #10903 添加 resume_agent collab 工具 @jif-oai
- #10909 通过 user shell snapshot 引导 shell 命令 @jif-oai
- #10993 修复不稳定的 windows CI 测试 @etraut-openai
- #10987 修复了一个持续导致 CI 失败的 Windows 不稳定测试 @etraut-openai
- #10958 feat(core): 向 requirements.toml 添加 network constraints schema @viyatb-oai
- #10983 app-server: 将 null mode developer instructions 视为内置默认值 @charley-oai
- #11039 feat: 在 /debug-config 输出中包含 [experimental_network] 状态 @bolinfest
- #11040 简化 pre-connect @pakrym-oai
- #10966 feat: 为 websockets 启用 premessage-deflate @apanasenko-oai
- #9040 fix(tui): 重新水合草稿并恢复图像占位符 @Chriss4123
- #10824 在 UPGRADE_REQUIRED 时回退到 HTTP @pakrym-oai
- #11028 延迟 rollout 文件的持久化 @etraut-openai
- #10980 fix: 从 tag 检查中移除 config.schema.json @bolinfest
- #11051 根据 model input_modalities 限制 view_image 工具 @wiltzius-openai
- #11109 [bazel] 升级一些 rulesets 以准备启用 windows @zbarsky-openai
- #11114 chore: 重构 network-proxy,使 ConfigReloader 成为可注入行为 @bolinfest
- #10718 将 rmcp 升级到 0.14 @mzeng-openai
- #11044 feat: 在 <environment_context> 中包含 [experimental_network] @bolinfest
- #10994 [apps] 改进 app 加载。 @mzeng-openai
- #11121 chore: 反转 codex-network-proxy -> codex-core 依赖 @bolinfest
- #11105 feat: 通过 ExecParams 包含 NetworkConfig @bolinfest
- #11155 tui: 避免无操作的状态栏重绘 @rakan-oai
- #10799 feat: 不要跨 turn 关闭 unified exec 进程 @jif-oai
- #11172 chore: 启用 shell snapshot @jif-oai
- #11175 fix: 不要在
/agent中显示已关闭的 agent @jif-oai - #11173 chore: 启用 sub agents @jif-oai
- #11193 消除混合并行工具时序测试的不稳定性 @gt-oai
- #10770 在 windows 上加载 requirements @gt-oai
- #11132 core: 在 auto-compact token 检查中考虑所有 post-response 项目 @charley-oai
- #11198 tools: 移除 get_memory 工具和测试 @jif-oai
- #10937 翻译 websocket 错误 @rasmusrygaard
- #11217 修复 file watcher 中的 bug,该 bug 会导致虚假的 skills 更新事件和大型日志文件 @etraut-openai
- #11216 将 warmup 移到 task 层级 @pakrym-oai
- #11203 尝试停止小型 helper 方法 @pakrym-oai
- #11197 [bazel] 升级一些 rulesets 以准备启用 windows,第 2 部分 @zbarsky-openai
- #11158 chore: 移除 network-proxy-cli crate @viyatb-oai
- #11230 回滚 "chore: enable sub agents" @jif-oai
- #11123 TUI: 修复长选项标签下 request_user_input 的换行 @charley-oai
- #11133 core: 为 remote compaction 溢出添加聚焦诊断 @charley-oai
- #10657 feat: search_tool @apanasenko-oai
- #11199 state: 添加 memory consolidation 锁原语 @jif-oai
- #10835 feat: 扩展 skills/list 以支持额外的 roots。 @xl-openai
- #10960 skill-creator: 移除无效引用。 @xl-openai
- #11219 feat: 使用 notify 而非 grace 来关闭 ue 进程 @jif-oai
- #11231 feat: 将 shell snapshot 绑定到 cwd @jif-oai
- #10962 fix(tui): 将 unified exec 摘要保持在 working line @joshka-oai
- #11232 向 otel metadata tags 添加 originator @alexsong-oai
- #11237 为 gif 和 webp 添加图像支持 @natea-oai
- #10924 [apps] 为 Apps 添加受门控的 instructions。 @mzeng-openai
- #11228 使用最长 remote model 前缀匹配 @aibrahim-oai
- #11242 fix(feature) UnderDevelopment feature 必须关闭 @dylan-hurd-oai
- #11185 fix: 通过添加缺失依赖并修复 outputHashes 来修复 nix build @Philipp-M
- #10035 fix(tui): 在 steer 模式下没有任务运行时 tab 提交 @joshka-oai
- #11238 移除模型的离线回退 @aibrahim-oai
- #9739 更新 models.json @github-actions
- #11255 回滚 "Update models.json" @aibrahim-oai
- #11245 消除 linux-sandbox NoNewPrivs 超时的不稳定性 @joshka-oai
- #11256 回滚 "回滚 "Update models.json"" @aibrahim-oai
- #11262 chore: 更改 ConfigState,使其重新加载时不再依赖单个 config.toml 文件 @bolinfest
- #11263 test: 消除 MCP harness 中 nextest 子进程泄漏的不稳定性 @joshka-oai
- #11247 调整 Windows 的 shell 命令超时 @dylan-hurd-oai
- #11240 fix(app-server): 对于外部认证,将 id_token 替换为 chatgpt_acc… @owenlin0
- #11140 chore(deps): 在 /codex-rs 中将 insta 从 1.46.2 升级到 1.46.3 @dependabot
- #11139 chore(deps): 在 /codex-rs 中将 anyhow 从 1.0.100 升级到 1.0.101 @dependabot
- #11138 chore(deps): 在 /codex-rs 中将 regex 从 1.12.2 升级到 1.12.3 @dependabot
- #11239 为自定义 model provider 禁用动态模型刷新 @etraut-openai
- #11269 feat: 为 managed proxy 预留 loopback ephemeral 监听器 @bolinfest
- #11279 [apps] 添加 thread_id 参数,以可选地为 apps feature check 加载 thread 配置。 @mzeng-openai
- #11244 feat: 向 skill metadata 添加 SkillPolicy,并支持 allow_implicit_invocation @alexsong-oai
- #10215 chore(tui) 清理 /approvals @dylan-hurd-oai
- #11113 feat(sandbox): 在 sandbox 中强制执行 proxy-aware 网络路由 @viyatb-oai
- #10940 feat: 支持可配置的 metric_exporter @alexsong-oai
- #11294 chore: 将 crypto provider 逻辑放入共享 crate @bolinfest
- #11207 feat: 在适当时保留 NetworkProxy @bolinfest
- #11200 memories: 添加 extraction 和 prompt 模块基础 @jif-oai
- #11191 feat: 向 sub-agents 添加 connector 能力 @jif-oai
- #11304 修复 spawn_agent 输入类型 @jif-oai
- #11300 feat: 对齐 memory 阶段 1 并使其更强大 @jif-oai
- #11311 将 hooks 提取到专用 crate @jif-oai
- #11306 feat: 阶段 2 consolidation @jif-oai
- #11318 chore: 拆分 NPM packages @jif-oai
- #11322 修复 pending input 测试等待逻辑 @jif-oai
- #11265 移除 ApiPrompt @pakrym-oai
- #11295 tui: 将历史召回光标保持在行末 @joshka-oai
- #11288 fix(protocol): approval policy 从不提示 @fouad-openai
- #11323 回滚 "Add app-server transport layer with websocket support (#10693)" @maxj-oai
- #11162 Fix: 更新并行工具调用 exec approval,以按 request id 批准 @shijie-oai
- #11249 [apps] 改进 app 安装流程。 @mzeng-openai
- #11319 feat: 在 app-server 中选择退出事件 @jif-oai
- #11241 将首个 rollout session_meta 视为规范 thread 身份 @guinness-oai
- #11339 # 使用
@openai/codexdist-tags 作为平台二进制,而不是单独的包名 @bolinfest - #11330 test(core): 稳定 ARM bazel remote-model 和 parallelism 测试 @dylan-hurd-oai
- #11345 core: 移除 seatbelt 中过时的 apply_patch SandboxPolicy TODO @bolinfest
- #11343 为 websockets 增量性比较完整请求 @pakrym-oai
- #11344 fix: 减少
open_if_present的使用 @jif-oai - #11336 始终暴露 view_image 并返回不支持的 image-input 错误 @aibrahim-oai
- #11346 为纯文本模型清理 MCP 图像输出 @aibrahim-oai
- #11337 提取工具构建 @pakrym-oai
- #10941 fix(core): 规范化 wrapper approvals 并支持 heredoc 前缀 … @viyatb-oai
- #10946 在 turn metadata header 中包含 sandbox(seatbelt、elevated 等) @iceweasel-oai
- #11349 从 prompt history 中移除不支持的图像,以防止模型切换 @aibrahim-oai
- #11348 为 alpha Rust 发布构建使用 thin LTO @bolinfest
- #11334 chore: 统一 memory job 流程 @jif-oai
- #11364 feat: mem v2 - PR1 @jif-oai
- #11365 feat: mem v2 - PR2 @jif-oai
- #11366 feat: mem v2 - PR3 @jif-oai
- #11274 更新 models.json @github-actions
- #11361 # 将命令解析/安全性从
codex-core拆分到新的codex-command@bolinfest - #11369 feat: mem v2 - PR4 @jif-oai
- #11362 为常见本地网络代理用例启用 SOCKS 默认值 @viyatb-oai
- #11359 ci: 在没有 BuildBuddy key 的 fork 上回退到本地 Bazel @joshka-oai
- #11372 feat: mem v2 - PR5 @jif-oai
- #11374 feat: mem v2 - PR6 (consolidation) @jif-oai
- #11377 feat: 防止双重 backfill @jif-oai
- #11378 chore: 将 codex-command 重命名为 codex-shell-command @bolinfest
- #11376 更新 models.json @github-actions
- #11394 禁用非常不稳定的测试 @pakrym-oai
- #11386 当 model 选择加入时优先使用 websocket 传输 @pakrym-oai
- #11373 tui: 按 app-event 顺序排队非 pending rollback trims @charley-oai
- #11393 移除
deterministic_process_idsfeature,以避免重复构建codex-core@bolinfest - #11397 fix(exec-policy) 不允许空命令列表 @dylan-hurd-oai