报错实质与快速定位
nodeRepl.fetch request failed 的含义是:Codex 已识别到 Chrome 或 Edge,却无法列出标签页或读取页面内容,即浏览器工具进程发出的请求未获得响应,而非浏览器本身损坏。Codex 的浏览器控制分为四步——发现浏览器、列出标签页、导航、读取页面,该报错卡在中间环节,与“浏览器根本没有出现”属于两类问题,排查方向截然不同。Windows 平台的案例记录最为充分,官方尚未确认存在通用修复方案。
报错文案相同,落点却可能不同,可先按下表对号入座:
- 浏览器未出现在列表中:多为 profile 不匹配或 Computer Use 开关未启用,优先做官方连接检查。
- 能发现浏览器,但列标签页或读页面时报错:多为工具进程未走代理路径、策略初始化或会话路由问题,优先做 TUN 路径对照。
- 侧栏聊天正常,仅浏览器控制失败:聊天与控制属不同链路,系统代理开启不代表子进程在用,需核对工具进程的网络路径。
- 更新客户端后开始报错:更新可能更换入口或覆盖本地配置,需备份回退对照。
五类成因与可控性对照
相同表现、时长或状态码并不代表同一成因,五类成因按可控性排列如下:
- 连接与授权环节:浏览器不出现或 Computer Use 未连接,完全可控,按官方检查处理。
- 浏览器工具进程未走代理路径:系统代理已开但子进程不继承,部分可控,取决于版本与后端类型。
- 策略初始化失败:文案含策略加载或 Statsig 相关字样,基本不可控,有一次受支持的重试。
- 会话路由与页面读取超时:IAB 读取超时,与外部 fetch 症状不同,不可控,存在有边界的绕行。
- 版本布局差异:可用方案在更新后失效、入口被更换,不可控,动手前需备份同版文件。
机制上,请求由客户端发起、经扩展转发到浏览器子进程,任何一环的网络栈未被代理覆盖,都会以 fetch 失败暴露。10 月中旬一份版本锁定记录显示,该版本原生 fetch 宿主进程不读取代理环境,这正是系统代理开着、聊天正常而控制失败的原因。
六步实操排查
每步只改一个变量并附带判定标准;若重装、换节点、改配置叠加进行,最终将无法判断哪一步起了作用。
第 1 步:官方连接检查(仅浏览器未出现时做)
核对 Chrome 或 Edge 的 profile;在 Settings 中确认 Computer Use 对应浏览器显示 Manage 且开关已启用;客户端升级后开新聊天,完全退出再重开。判定:真实页面能打开读取,说明问题在连接环节;仍旧失败则进入下一步。需注意,多份案例记录显示重启、重装后依旧失败,基础检查是排他步骤而非已确认修复。
第 2 步:固定证据与版本信息
记录报错原文与出现时间、桌面版与扩展版本、走 node_repl 还是 cua_repl、本机网络模式。判定:四项齐全对照才有意义,缺项需补齐后再动手。
第 3 步:TUN 路径对照(已持有可用网络工具时优先做)
保持账号、版本与出口条件不变,切到既有 TUN 路径重试:列标签页、打开公开页面、读一段正文。全程不同时重装、不换节点。判定:真实读取恢复,说明问题在工具进程原路径;仅报错文案变化不算成功。此方向有多份案例记录验证,但反例同样成立——开启 TUN 后仍遇策略失败、TUN 下复发均有记录,TUN 不是全局代理,更不是必然修复。
第 4 步:按当前后端配置项目级环境变量(仅确认走 node_repl 时)
此路径有明确版本边界(案例版本为 Windows 26.928.1915.0 与 Browser 26.928.20755)。先检查当前项目有效的 MCP 服务名与命令,不能固定猜测就是 node_repl;在项目级 .codex/config.toml 合并 env 块,并保留 NO_PROXY 条目:
- NODE_USE_ENV_PROXY = "1"
- HTTP_PROXY / HTTPS_PROXY / http_proxy / https_proxy = "http://127.0.0.1:7890"(7890 仅为占位端口)
- NO_PROXY / no_proxy = "localhost,127.0.0.1,::1"
需合并现有排除项,不要创建重复的 TOML 表。判定:完全退出重开后,在同一项目用真实浏览器操作验收;若走 cua_repl 后端则停止套用。反例:同版本仍走旧后端、变量到达原生宿主依然失败均有记录,它不是全版本修复。
第 5 步:进阶方案按个案对待
用户级启动器为浏览器子进程传入代理环境,在 Windows 包 26.1007.9446.0 上有个案实测通过记录,仅适用本地单一无凭证 HTTP 系统代理,不支持 PAC 与含凭证代理;旧版启动文件的最小补丁会在更新后被覆盖。判定:条件不满足即停止并走支持反馈;CODEX_NODE_REPL_PATH 等内部变量未见于官方清单,不能当作稳定接口。
第 6 步:区分策略初始化与会话路由,更新复发时留证
相邻报错需逐类区分:策略加载失败、Statsig 等待超时、read failed、kernel reset、路由缺失、签名标识缺失,都不是它的同义词。策略初始化类失败有一次受支持的重试:记录第一次错误,仅重试一次并检查任务标签是否创建。IAB 读取超时属于会话路由问题,指定目标浏览器拆步操作是有边界的绕行。更新会覆盖本地补丁,动手前备份同版文件,无效则回滚。
网络出口为何决定请求成败
浏览器控制是一串进程间请求:发现、列标签、导航、读 DOM。浏览器能打开网页只说明访问正常,不代表工具子进程的请求能走完同一条路径,这正是网页正常而工具报错的原因。共享出口的威胁更为具体:高峰拥塞会让进程间请求超时,出口归属中途跳变会让长连接被重置,足以打断多步请求。出口的固定归属与质量,决定这条请求能否走完。
对照链路可看三个硬指标:固定归属、出口记录连贯;底层运营商资源如 Cogent、GTT、NTT 骨干网络;可用性承诺与 7×24 监控。需要稳定参照链路时,IPxSS 海外AI网络方案可作候选路径之一,但代理交付必须到达实际的浏览器工具进程;更换出口不修复客户端路由、授权或策略缺陷。需要核对 ChatGPT 侧网络环境的,可参考 ChatGPT 网络专题。对照后仍失败,问题回到策略、会话路由与客户端版本,网络不是唯一变量。
常见问题解答
- 是 Node 自带 fetch 忽略了系统代理吗?不能一概而论。部分版本锁定记录显示原生 authenticated-fetch 宿主不读代理环境,也有变量生效仍失败、切 TUN 才恢复的反例,不能被证明就是 Node 全局 fetch。
- 打开 TUN 就能恢复吗?多份案例记录显示 TUN 路径下恢复,含一次完整 Chrome 打开、读取、关闭实测;也有开启后仍失败的反例。TUN 不是全局代理,失败后应回到策略、会话路由与后端日志。
- NODE_USE_ENV_PROXY=1 是全版本修复吗?不是。只对确认走 node_repl 后端的可信项目有意义,需合并进项目级配置并保留 NO_PROXY 条目,存在变量生效后依然失败的反例;走 cua_repl 的不要套用。
- 侧栏聊天正常能说明浏览器控制恢复了吗?不能。两者是不同链路,验收以真实页面打开、读取、点击与关闭任务标签为准。
综上,排查主线为:连接检查排他、固定证据、TUN 路径对照、按后端配置、真实操作验收,每步带判定,一次只改一个变量。TUN 是验证最充分的恢复方向但存在反例,NODE_USE_ENV_PROXY 有严格版本边界,验收以真实页面读取为准。若需将浏览器控制作为日常工具使用,可注册 IPxSS 海外AI网络方案固定一条参照链路再逐项对照。官方未确认通用修复,版本条件失效时应停止套用并保留记录。