Codex 桌面端更新后 Chrome 插件和 Computer Use 不可用,怎么排查和修复
1. Codex 桌面端更新后 Chrome 插件与 Computer Use 失效的典型现象Codex 桌面端在 Windows 上更新之后Chrome 插件和 Computer Use 同时不可用这个组合症状其实很有辨识度。它通常不是插件被卸载了而是插件文件还在、列表里也看得到但真正调用的时候拿不到底层运行时通道。我遇到的情况是插件面板里chromeopenai-bundled、browseropenai-bundled、computer-useopenai-bundled三个条目都显示 installed 且 enabled可一旦让 Codex 去读取当前浏览器标签页或者初始化 Computer Use就直接失败。Chrome 插件这一侧的典型表现是浏览器扩展本身还在扩展管理页里但 Codex 无法连接到 Chrome backend或者关键脚本scripts/browser-client.mjs缺失。Computer Use 这一侧更直接调用初始化入口时报出核心错误Computer Use native pipe path is unavailable这句话是整个排查的锚点。它说明当前 Codex 会话没有拿到 Computer Use 所需的本地管道路径也就是桌面端没有把 Windows 控制通道注入到会话里。插件文件可能存在但运行时桥接断了。适合谁看这篇在 Windows 上用 Codex 桌面端做浏览器自动化、Computer Use 桌面操作更新后突然失效又不想盲目重装或乱改权限的人。下面我按先备份、再分层验证、只修被证据确认的问题这个顺序走一遍每一步都给可复制的检查动作。先明确三层结构后面所有排查都围绕它展开层级组成断掉后的表现插件文件层bundled plugin 目录、latest 指针、入口脚本插件可见但脚本缺失运行时桥接层Chrome Native Messaging Host、native pipe扩展在但连不上 backend本地 helper 层Computer Use native runtime、pipe path 注入报 native pipe path is unavailable很多人一看到不可用就去改 sandbox 或重装结果把现场弄乱。真正有效的做法是先确认问题卡在哪一层。我试过直接重装反而把原本完整的 bundled 缓存覆盖成了残缺状态所以顺序很重要。2. 排查前的 TaoToken 前置准备与配置备份在动任何文件之前先把配置和插件状态备份出来。这一步不是形式主义因为后面要对比改之前和改之后的差异没有备份就只能靠记忆很容易越修越乱。需要备份的核心文件包括%USERPROFILE%\.codex\config.toml %USERPROFILE%\.codex\.codex-global-state.json %USERPROFILE%\.codex\chrome-native-hosts.json以及和插件缓存、marketplace、native host 相关的其他状态文件。可以直接用 PowerShell 做一次带时间戳的整目录备份$ts Get-Date -Format yyyyMMdd-HHmmss $src $env:USERPROFILE\.codex $dst $env:USERPROFILE\.codex-backup-$ts Copy-Item -Path $src -Destination $dst -Recurse -Force Write-Host backup done - $dst备份完成后如果你在 Codex 里接了自定义模型服务建议顺手确认一下模型侧的连通性避免把模型服务不通误判成插件坏了。我平时用 TaoToken 做模型接入它的 API 地址是https://taotoken.net/api控制台在https://taotoken.net/console密钥在https://taotoken.net/api-keys生成。这些和插件排查是两条独立的链路但排查时最好先排除掉模型侧干扰。如果你用的是 Claude Code 这类编码场景TaoToken 也提供了对应的接入文档地址是https://taotoken.net/docCoding Plan 在https://taotoken.net/coding-plan。模型对话入口在https://taotoken.net。这些链接只是方便你在排查插件的同时确认模型侧没掉线不是本次故障的根因方向。备份之后做三件只读的事先不动任何配置第一检查 bundled 插件缓存是否完整。重点看chrome/latest、browser/latest、computer-use/latest三个指针是否指向完整目录而不是临时目录或残缺目录。第二用最小调用测试 Chrome 和 Computer Use runtime确认失败发生在哪一层。第三读桌面端日志找computer-use native pipe startup failed这类上游错误。这个顺序的价值在于先确认问题在哪一层再决定是否修改配置。如果一上来就改 sandbox很可能把一个配置解析失败的问题误判成权限不足方向就偏了。3. 可复制的配置检查清单与修复片段这一节给可直接落地的检查与修复动作。先看插件缓存层。更新后常见问题是 bundled plugin 的缓存或 latest 指针异常表现为 Chrome 插件目录存在但缺关键脚本或者 latest 指向了临时目录。检查入口脚本是否存在$cache $env:USERPROFILE\.codex\plugins\cache\openai-bundled Get-ChildItem $cache -Directory | Select-Object Name Test-Path $cache\chrome\latest\scripts\browser-client.mjs Test-Path $cache\computer-use\latest\scripts\computer-use-client.mjs如果latest指针指向残缺目录修复方向是让它重新指向当前 Codex 安装包内完整的 bundled plugin 源。这里只修插件缓存和指针不要动模型配置、账号配置或系统权限。接着看 Chrome Native Messaging。Chrome 插件能否工作不只取决于扩展是否安装还取决于 Native Messaging Host 是否注册正确。检查注册表时要注意上下文如果用管理员上下文写注册表可能写到另一个 HKCU 视图里而 Chrome 实际读取的是当前用户上下文下的 HKCU。$hostName com.openai.codex.chrome $regPath HKCU:\Software\Google\Chrome\NativeMessagingHosts\$hostName Test-Path $regPath Get-ItemProperty -Path $regPath -ErrorAction SilentlyContinue如果注册缺失需要补回用户级注册表映射并确保写入的是普通用户上下文可见的那份。修复后 Chrome 侧可以通过两个信号确认恢复native host 校验通过以及 Codex 能发现 Chrome backend 并读取当前打开标签页。再看 Computer Use runtime。它的客户端入口依赖两样东西nodeRepl.nativePipe.createConnection和SKY_CUA_NATIVE_PIPE_DIRECTORY。如果这两项都没有客户端脚本即使存在也无法连接 Windows helper。用 Node REPL 做只读检查// 只读诊断不修改任何文件 console.log(sandbox:, nodeRepl.requestMeta?.sandbox); console.log(pipeDir:, nodeRepl.env?.SKY_CUA_NATIVE_PIPE_DIRECTORY); console.log(nativePipe:, typeof nodeRepl.nativePipe); console.log(createConnection:, typeof nodeRepl.nativePipe?.createConnection);如果pipeDir为空、createConnection不存在说明问题已经不在插件目录而在桌面端是否成功启动并注入 Computer Use native runtime。最后是配置文件层。继续查桌面端日志后可能发现更上游的错误Computer Use native pipe 启动失败根因是 Codex 配置文件解析失败而解析失败的原因是config.toml开头存在 UTF-8 BOM 隐藏字符。字节级检查$cfg $env:USERPROFILE\.codex\config.toml $bytes [System.IO.File]::ReadAllBytes($cfg) $bytes[0..2] -join , # UTF-8 BOM 为 239,187,191如果前三字节是239,187,191就是 BOM。修复方式是把文件重新保存为 UTF-8 without BOM只去掉 BOM保持原有内容不变不要顺手重写整份配置。如果你在 Codex 里配置了自定义模型服务config.toml里通常会有类似片段注意保持路径与原文一致# 示例模型服务接入片段按你实际配置保留 [model] provider custom base_url https://taotoken.net/api model_id your-model-id这里要强调三件套Base URL、Key、Model ID 必须齐全且对应。如果用了 CC Switch、Cline MCP 或 Codex 的auth.json同样要保证这三项一致否则会出现插件没坏但调用失败的假象。4. 验证请求与成功结果判定修完之后不要只看没报错要按层验证。每一层都有明确的成功信号缺一层都不算恢复。第一层配置文件开头字节正常。确认文件直接以配置正文开头不再有 BOM$bytes [System.IO.File]::ReadAllBytes($env:USERPROFILE\.codex\config.toml) if ($bytes[0] -eq 239 -and $bytes[1] -eq 187 -and $bytes[2] -eq 191) { Write-Host still has BOM } else { Write-Host BOM removed, ok }第二层bundled 插件缓存完整。确认 Chrome、Browser、Computer Use 的 latest 都指向完整目录且入口脚本存在。第三层Chrome Native Messaging 正常。确认 Chrome extension、native host、backend 三者能连通openTabs()能返回当前标签页。第四层在新线程里测试 Computer Use。重新启动 Codex 桌面端或重新加载插件后新开线程执行await setupComputerUseRuntime({ globals: globalThis }); const apps await sky.list_apps(); console.log(apps);判断结果的标准很直接如果list_apps()能返回应用列表说明 Computer Use native pipe 已经正常注入。如果仍然报Computer Use native pipe path is unavailable说明 native pipe 还没起来回到第 3 节检查SKY_CUA_NATIVE_PIPE_DIRECTORY和桌面端日志。如果你需要确认模型侧是否正常可以到模型对话入口https://taotoken.net做一次简单请求或者在编码场景用 Coding Planhttps://taotoken.net/coding-plan验证。接入文档在https://taotoken.net/doc密钥管理在https://taotoken.net/api-keys。这些验证和插件验证是并行的两条线分开确认能避免误判。一个完整的成功判定清单验证项成功信号config.toml 字节无 BOM直接以正文开头bundled 缓存三个 latest 指向完整目录Chrome Native Messagingnative host 校验通过openTabs 返回标签页Computer Use runtimepipeDir 存在createConnection 存在端到端sky.list_apps() 返回应用列表只有这五项都过才算真正恢复。任何一项没过都说明对应层还有问题。5. 本篇常见报错排查对照这一节把真实会遇到的报错和对应处理列出来方便对照定位。Computer Use native pipe path is unavailable这是最核心的报错说明当前会话没拿到本地管道路径。先查nodeRepl.env.SKY_CUA_NATIVE_PIPE_DIRECTORY是否存在再查桌面端日志里有没有computer-use native pipe startup failed。如果日志里同时出现config.toml解析失败优先处理 BOM。401或鉴权失败这类报错通常和插件无关而是模型服务侧的 Key 或 Base URL 不对。检查三件套是否齐全Base URL、Key、Model ID。如果用了auth.json确认里面的字段和config.toml一致。密钥可以在https://taotoken.net/api-keys重新生成后替换。local proxy failed本地代理连接失败通常是本地服务端口没起来或端口被占用。检查 Codex 桌面端是否正常启动以及本地服务监听的端口是否被其他进程占用。这类问题和 Chrome 插件层无关不要混在一起改。reading choices相关报错多出现在模型返回结构解析阶段通常是模型服务返回格式和客户端预期不一致。确认 Base URL 指向的是兼容接口模型 ID 拼写正确。接入文档https://taotoken.net/doc里有对应说明。OAuth相关报错出现在账号授权环节和插件运行时无关。重新走一次授权流程即可不要因此去改插件缓存或注册表。os error 740或请求的操作需要提升权限只有出现这类明确的权限错误时才考虑调整[windows] sandbox。不要一开始就盲目改 sandbox否则会把配置解析类问题误判成权限问题。Chrome 侧native host not found说明 Native Messaging Host 注册缺失或写错了上下文。回到第 3 节检查 HKCU 下当前用户可见的注册表项注意不要只写入管理员上下文可见的那份。browser-client.mjs缺失说明 bundled 插件缓存不完整latest 指针可能指向了残缺目录。修复方向是让 latest 重新指向完整源而不是手动补文件。排查时记住一条报错信息指向哪一层就查哪一层。native pipe指向运行时桥接层401指向模型服务层native host指向 Chrome 注册表层。混着改只会让现场更乱。6. 长期使用 Codex 与 Computer Use 的接入建议把这次问题修好之后更重要的是避免下次更新再踩同样的坑。几条实际经验。第一不要把插件可见当成插件可用。Codex 桌面端这类插件通常有三层插件文件、运行时桥接、本地 helper。任意一层断了表现都会像插件不可用。所以每次更新后按第 4 节的五项清单快速过一遍比出问题再查要省时间。第二不要一上来改 sandbox。只有出现明确的权限错误比如需要提升权限才考虑 sandbox。否则应先查 pipe、runtime 和配置解析。这次根因是 BOM 导致的配置解析失败和权限毫无关系。第三Windows 下修注册表要注意上下文。管理员上下文和普通用户上下文看到的 HKCU 可能不是同一个效果。Chrome Native Messaging 通常需要当前用户可见的注册表项写错上下文等于没写。第四隐藏字符问题要用字节级检查。BOM、不可见控制字符、错误编码都可能让配置看起来没问题实际解析失败。养成用ReadAllBytes检查文件开头的习惯。第五Computer Use 不建议用其他键鼠模拟方式绕过。如果官方 Computer Use runtime 没起来应该修 native pipe而不是用 PowerShell SendKeys 或其他方式假装可用。那会绕过插件的安全、中断和确认机制长期看是给自己埋雷。如果你在 Codex 里长期做编码或 Agent 任务模型侧建议用稳定的接入方式。TaoToken 的 Coding Plan 在https://taotoken.net/coding-plan适合长期编码场景模型对话入口在https://taotoken.net接入文档在https://taotoken.net/doc密钥管理在https://taotoken.net/api-keys。把这些配置和插件排查分开管理出问题时能快速判断是模型侧还是插件侧。最后给一个可以直接发给 Codex 的只读诊断指令方便下次快速定位只做只读诊断不要修改任何文件或配置。 请测试当前 Codex 桌面端新线程里 Computer Use 是否可用 读取 computer-use skill 后用 Node REPL 检查 nodeRepl.requestMeta 中的 sandbox、 nodeRepl.env.SKY_CUA_NATIVE_PIPE_DIRECTORY、 是否存在 nativePipe/createConnection 然后从 computer-use-client.mjs 调用 setupComputerUseRuntime({ globals: globalThis }) 并尝试 sky.list_apps()。 最后用简短中文报告sandbox、 SKY_CUA_NATIVE_PIPE_DIRECTORY 是否存在、 bootstrap/list_apps 成功或报错。按插件文件是否完整 - 入口脚本是否存在 - 浏览器/native host 是否连通 - Computer Use native pipe 是否启动 - 会话里是否注入 pipe path - 配置解析和桌面端日志是否正常这个顺序查基本可以避免反复重启和盲目修改配置。