如果你在 Windows 上用过 Codex CLI,一定有过这种体验:代码正跑得起劲,鼠标刚点进终端窗口想复制一行报错,结果整个终端立刻进入“选中”状态,滚轮失灵,鼠标想挪到旁边浏览器窗口,它却被终端“拽”着不放,光标要么在终端里原地打转,要么直接变成文本选择状态——那种感觉,真的就像它在跟你抢鼠标。我这两天终于把这个问题从根上解决了,顺手把 Windows 上 Codex 从安装、登录到对接 DeepSeek、再到日常顺手使用的一整套配置经验整理了出来。这篇文章不整虚的,先解决抢鼠标这个烦心事,再带你把手上的 Codex 调成 Windows 上的趁手工具。
1. 先搞清楚:Codex 是什么,为什么 Windows 用户值得装
1.1 它解决什么问题
Codex 是 OpenAI 推出的命令行式 AI 编程智能体,核心能力不是让你在网页里和 AI 聊代码,而是直接在终端里帮你读项目、改文件、跑命令、解释报错,甚至自动完成一次“改代码—编译—看结果”的完整循环。你给它一个任务,比如“把这个 Python 脚本改成支持并发下载”,它会先看文件结构,梳理逻辑,然后动手改,改完还能告诉你改了哪里、为什么这么改。
和 Cursor、Copilot 这类图形化工具相比,Codex 最大的特点就是“无头”:它长在终端里,不吃 GUI 资源,不占据编辑器面板,全靠命令行交互。对喜欢键盘流、习惯用 Vim 或不打算开一堆 IDE 窗口的开发者来说,这个工作流非常对路。而且它天然适合远程服务器场景——只要 SSH 进去,装一个 Codex 就能用,不牵扯图形界面。
1.2 适合的人群
我体感下来,下面这几类 Windows 用户最值得装:
- 终端爱好者:天天用 Windows Terminal、PowerShell、WSL 写命令的人,Codex 跟你的工作流零冲突。
- 做配置类、脚本类任务的开发者:改 Dockerfile、调 YAML、写自动化脚本,这类任务用 Codex 比开 IDE 快得多。
- 想省鼠标的人:如果你厌恶“写完代码还要伸手去点按钮”,Codex 的口令式交互能让你尽量少碰鼠标。
- 想用国产模型省钱的人:Codex 可以通过配置接入 DeepSeek 等第三方模型,用 ChatGPT 同款智能体外壳,跑国产模型的价格,很香。
当然,如果你完全离不开图形界面,不习惯在终端里做任何操作,那 Codex 上手会有一定门槛。但我觉得,只要肯花十分钟适应,这个工具在 Windows 上的表现值得你留下。
2. 安装前必须确认的几件事
2.1 环境要求:版本不对,后面全白搭
Codex CLI 是基于 Node.js 写的,所以 Windows 上第一步不是下载安装包,而是确认 Node.js 版本。官方要求 Node 18 以上,但我实测下来,Node 20 以上最稳,Node 18 在某些版本的 Codex 上会出现依赖安装警告,Node 16 及以下基本没戏。
检查版本很简单,打开 PowerShell 或者 Windows Terminal 输入:
node -v npm -v如果 node 版本太低,直接去 Node.js 官网下 LTS 版本安装包。装完重启终端再验证一次,这一步不做,后面npm install跑出乱码你不要慌,大概率是版本问题。
顺带说一句,网上搜索“codex 安装 windows 桌面版”会看到一些打着“桌面版”旗号的下载源。Codex 官方目前主推的是命令行版,没有独立的 Windows 桌面客户端,那些所谓的桌面版要么是第三方封装,要么就是壳子套网页,不建议装。认准 npm 包名@openai/codex或者官方 GitHub 仓库就够了。
2.2 从 npm 安装到登录验证:完整流程
装 Codex 的命令一句话:
npm install -g @openai/codex这条命令会全局安装 Codex,装完后命令行里直接敲codex就能启动。这里有个 Windows 特有的坑:如果全局安装时提示权限不足、无法写入 npm 全局目录,大概率是 npm 全局路径被改到了系统盘 Program Files 下面。解决办法是用管理员打开 PowerShell 重装,或者把 npm 全局缓存目录改到用户目录:
npm config set prefix "$HOME\AppData\Roaming\npm"装完先看看版本能不能正常打印:
codex --version能打印出版本号,说明安装阶段成功了。接下来是登录,方式取决于你的账号类型。如果你用的是 ChatGPT 付费账号,直接运行:
codex login它会跳浏览器让你授权,授权完自动回写一个本地令牌。如果你用的是 OpenAI API 平台,不想搞登录态,也可以直接配置环境变量OPENAI_API_KEY。注意,codex login之后仍然可能需要 API Key,或者反过来,两种方式在某些版本里会有优先级差异。我的建议是:优先走官方登录流程,它能自动处理鉴权刷新,省心。
2.3 模型提供方配置:接入 DeepSeek 的完整写法
登录完默认用的是 OpenAI 官方模型链。但很多人没有官方 API 额度,或者觉得太贵,就会考虑接 DeepSeek。这块也是社区里问得最多的。
新版 Codex 用一个config.toml管理所有配置,在 Windows 上位于:
%USERPROFILE%\.codex\config.toml首次运行 Codex 后会自动生成这个文件。要让 Codex 走 DeepSeek,我用的配置如下:
model = "deepseek-chat" model_provider = "deepseek" [model_providers.deepseek] name = "DeepSeek" base_url = "https://api.deepseek.com/v1" env_key = "DEEPSEEK_API_KEY" wire_api = "chat"然后到系统环境变量里新建一个DEEPSEEK_API_KEY,值填你在 DeepSeek 开放平台申请的 Key。配置完重启终端,再运行codex,Codex 就会走 DeepSeek 的接口了。
这里有两个容易踩的坑,我分开说:
- 第一,
wire_api这个字段很重要。DeepSeek 兼容 OpenAI 的 chat completions 接口,所以要填chat。有些模型走的是 responses 接口,填错会报“model is not supported”之类的错误。 - 第二,
base_url要写到/v1这个层级,有的教程只写https://api.deepseek.com,结果请求路径拼出来不对,直接 404。别问我怎么知道的,问就是填错过。
另外,某些版本的 Codex 在配置自定义 provider 时要求同时指定requires_openai_auth = false或者调整鉴权参数,如果在启动时报鉴权错误,去官方文档查一下对应版本说明,通常一两个字段就能解决。
3. “抢鼠标”问题的完整拆解与解决办法
3.1 为什么在 Windows 上会有“抢鼠标”的感觉
先说结论:这不是 Codex 自己在捣鬼,而是Windows 控制台窗口的“快速编辑模式” + 终端输出刷新 + 鼠标交互策略三者叠加的结果。
Windows 传统控制台和 Windows Terminal 在默认状态下都开了“快速编辑模式”。这个模式的原本目的是让你能用鼠标选中终端里的文本并复制。但它有个副作用:只要鼠标左键在终端窗口内按下并拖动,终端就会进入“文本选择状态”,输出会自动暂停,滚轮滚动变成选择扩展。
Codex 的交互界面是一个基于终端的 TUI(文本用户界面),它会不断渲染新输出、重绘界面。当你在 Codex 运行过程中想从终端区域把鼠标挪到别的窗口时,鼠标在“经过”终端窗口的过程中只要点了一下(哪怕你是想点旁边的窗口,手滑点到终端),终端就会立刻捕获这次点击,进入文本选择模式。于是你的鼠标就像被终端“锁”住了,想点外面点不到,得先按一下 Esc 或者点击其它区域取消选择状态。表现出来就是:它跟你抢鼠标。
另外还有一个容易被忽略的因素:Codex 是全屏 TUI,它启动后会把整个终端窗口切换成一个“专属界面”,很多 TUI 程序会开启终端的“替代屏幕缓冲”。在这个状态下,终端的鼠标事件处理会比普通命令行更积极。如果你的终端模拟器开启了鼠标事件转发,Codex 本身也可能在监听鼠标滚动和点击。两者叠加,抢鼠标的感觉就更明显了。
3.2 关闭快速编辑模式:最直接的解法
既然元凶之一就是快速编辑模式,那第一步就是把它关掉。这里要分两种情况,因为 Windows Terminal 和传统 conhost 控制台的设置方式不一样。
如果你用的是 Windows Terminal 打开 Codex,方法是在标签页标题栏上点下拉箭头,选择“设置”,左侧选“交互”,然后把“自动将鼠标输入转发到窗口”和“快速编辑模式”相关的开关都检查一遍。Windows Terminal 现在的设置项比较细,不同版本名称略有区别,核心就是把鼠标相关的“选择/复制”和“自动聚焦”选项调成不干扰输出的状态。
如果你用的是传统控制台窗口(比如直接双击 npm 的 cmd 快捷方式启动 Codex),在窗口标题栏点右键 → 属性 → 选项,把“快速编辑模式”前面的勾去掉,然后点确定。这个设置只对当前窗口生效,下次重新打开可能又恢复默认,所以更彻底的做法是改注册表。
我用的是注册表方案,关一次就全局生效。传统控制台的默认选项存在这里:
HKEY_CURRENT_USER\Console把QuickEdit这个 DWORD 值改成0,然后把InsertMode也顺手改成0。改完重新打开终端,快速编辑模式就永久关闭了。命令行可以这样操作:
reg add "HKCU\Console" /v QuickEdit /t REG_DWORD /d 0 /f关掉快速编辑之后,鼠标在终端窗口里点击就不会再自动进入文本选择状态了,Codex 的输出也不会因为你点一下就暂停。这一步做完,抢鼠标的问题已经解决了八成。
3.3 Windows Terminal 的焦点策略与布局调整
关掉快速编辑只是治本的一半,另一半是窗口焦点控制。很多 Windows Terminal 用户不知道,终端在“点击标签页切换窗口”这件事上的行为是可配置的。
在 Windows Terminal 设置里,有个“启动”相关的选项,建议把“新实例行为”设置成“附加到当前窗口”,这样每次启动 Codex 都是一个新的标签页,不会弹出独立窗口抢焦点。同时,把“焦点模式”里的“鼠标悬停获得焦点”关掉。这个开关开启时,鼠标只要“路过”某个终端窗格,那个窗格就会自动获得焦点——听上去方便,实际用起来非常可怕,尤其是在分屏布局里,鼠标一抖焦点就被切走,Codex 的输出没看完就被另一个窗格顶掉了。
我推荐的布局方案是:用一个 Windows Terminal 标签页专门跑 Codex,旁边开另一个标签页跑其它命令。需要并行看输出时,用 Alt + Shift + + 做一个垂直分屏,两边窗格互不干扰。这里注意别开“悬停聚焦”,否则还是等于喊着要抢鼠标。
3.4 更顺手的窗口管理方案:让 Codex 待在“后台”
如果你希望 Codex 在跑长任务时能自己安静待着,不占据前台窗口,Windows Terminal 的“Quake 模式”(下拉终端)是个好帮手。按 Win + ` 全局呼出一个从屏幕顶部滑落的终端窗口,这个窗口失焦后会自动隐藏,鼠标自然不会被它“抢”走。
把 Codex 放在 Quake 模式窗口里运行,平时该干嘛干嘛,想看进度就按快捷键呼出来,看完再切走,整个过程鼠标完全不用碰终端窗口。这个方法我觉得才是真正的终极解法——治本不是去跟终端抢鼠标,而是让终端学会“该让位就让位”。
如果你用的是 Windows 11,还可以用系统自带的“贴靠布局”(Win + Z)把 Codex 终端固定到屏幕左侧,主编辑器放在右侧,鼠标在两侧切换时只要点一下对应窗口即可。只要快速编辑模式关了,这种切换就不会再出现“点过去但点不动”的情况。
4. 实测可用的配置清单与体验调优
4.1 一套可复制的 config.toml 推荐
折腾完鼠标之后,我顺手把 Codex 的日常配置也整理了一遍。下面这份是我目前在 Windows 上实际在用的config.toml,可直接参考:
model = "deepseek-chat" model_provider = "deepseek" model_reasoning_effort = "medium" approval_policy = "on-request" stream_stdout = true [model_providers.deepseek] name = "DeepSeek" base_url = "https://api.deepseek.com/v1" env_key = "DEEPSEEK_API_KEY" wire_api = "chat"几个字段我解释一下:
approval_policy = "on-request":让 Codex 每次要执行命令前先问我,而不是自作主张一路往下跑。对刚上手的用户来说,这个设置非常重要,能避免它在项目里乱改文件。stream_stdout = true:让输出实时滚动而不是等整段生成完再刷屏,配合关闭快速编辑模式后,体验非常顺滑。model_reasoning_effort:控制模型的推理投入度,medium 平衡速度和效果。DeepSeek 的接口对 reasoning 相关的参数支持有限,这个字段不一定每次都生效,但保留无害。
这份配置的核心思想就一句话:让 Codex 成为一个“听话的助手”,而不是一个“自动化的莽夫”。在 Windows 上调试 AI 工具本来就要比 Linux 多点耐心,把安全阀打开,后面省事。
4.2 中文交互与提示词技巧
Codex 本身支持中文提示词,但根据我的体感,在中文环境下有两个小技巧能让输出质量明显提升:
- 第一,把任务描述得“像对实习生说话”一样具体。比如不要说“优化这个函数”,而要说“读取 utils.py 里的 download_image 函数,找出网络重试不足的问题,改成最多重试 3 次,每次间隔 2 秒,保留原有日志”。
- 第二,让它先给计划再动手。在提示词末尾加上“请先列出 3 步以内的执行计划,我确认后再开始”。Codex 会先输出计划并等待确认,这样能在 Windows 项目里避免它一口气跑出几十个文件改动。
另外,如果你的终端里中文出现乱码,先检查终端编码。Windows Terminal 默认用 UTF-8,一般没问题。但传统控制台可能会出现乱码,解决办法是在启动 Codex 前执行:
chcp 65001把控制台代码页切成 UTF-8。
4.3 让 Codex 更配合鼠标操作的几个小设置
关闭快速编辑之后,鼠标选中文本复制这个高频操作怎么补回来呢?我的方案是:把文本选择改到“按住 Alt 拖动选中”。
在 Windows Terminal 里,按住 Alt 拖动鼠标可以进行矩形文本选择,这个操作模式和快速编辑不冲突,而且更符合现代终端的使用习惯。这样你就可以既保留鼠标选中复制的能力,又不会因为误点而让 Codex 输出锁定。
还有一个影响交互的细节:Codex 界面支持鼠标滚轮滚动历史输出,但如果你在 Windows Terminal 里把“鼠标滚轮发送到窗口”开成了“始终”,滚动事件会直接发给 Codex 的 TUI 而不是终端本身,可能导致你想往上翻历史,Codex 却在往下滚动页面。遇到这种情况,去 Windows Terminal 设置里把鼠标滚轮事件改成“仅在按住 Shift 时发送到窗口”,这样普通滚动仍然归终端管,Codex 内部翻页用 Shift + 滚轮。
这套组合拳打下来,鼠标在 Codex 周围的操控体验基本就恢复到正常水平了:不误锁、不抢焦点、能复制、能翻页。
5. Windows 常见报错排查实录
5.1 “local proxy failed while handling codex endpoint”这类报错怎么查
不少人在 Windows 上第一次跑codex时,会遇到类似这样的报错:
cc switch local proxy failed while handling codex endpoint /responses. provider...乍一看很懵,其实思路很简单:Codex 在发起 HTTP 请求时,会优先读取系统环境变量里的代理设置。如果在 Windows 环境变量里配置了HTTP_PROXY或HTTPS_PROXY,但对应的代理服务没有正常启动,或者地址端口填错,请求就会在出口处失败,于是报出“local proxy failed”这种提示。
排查步骤我建议按顺序来:
- 打开系统环境变量设置,检查
HTTP_PROXY、HTTPS_PROXY、ALL_PROXY这三个变量是否存在,值是否指向一个当前真实可用的本地端口。 - 在 PowerShell 里确认一下:
echo $env:HTTPS_PROXY - 确认变量能删则先删掉,然后重启终端再运行 codex 测试,如果报错消失,基本就是代理环境变量配置导致。
这种情况多半和某些抓包工具、网络调试软件、或内网临时代理有关,工具退出之后环境变量没清理,遗留在了系统里。这本身是通用网络配置问题,别纠结在 Codex 身上。清掉无效变量、保证网络连通,问题基本就解决了。
还有一类相近的报错是error: start the windows daemon from a non-elevated terminal; shared clients,这个提示出现在某些依赖本地守护进程的工具中。遇到这个先确认你是不是用管理员权限启动的终端,如果是,换普通权限的 PowerShell 再跑一次。很多命令行工具的 Windows 守护进程在提权状态下反而无法正常共享端口和会话。
5.2 启动闪退与 Node 版本冲突
Codex 在 Windows 上启动闪退,我见过的最常见原因就是 Node 版本不匹配。闪退表现有两种:一种是双击之后屏幕闪一下立刻退回命令行,没有任何报错;另一种是打印几行依赖警告后进程悄悄退出。
前者基本跑不掉是 Node 版本问题。先执行node -v确认版本,再执行npm ls -g @openai/codex看安装的 Codex 版本。如果 Codex 版本很新而 Node 还是 18 以下的 LTS,建议直接升到 Node 20 LTS。我不想说得太玄,实测下来就是 Node 18 在某些组合下会崩溃,升到 20 之后再也没遇过闪退。
第二种情况,输出里能看到类似Cannot find module '@openai/codex/dist/...'的报错,通常是全局安装过程中 npm 缓存出问题了。解决方式是:
npm cache clean --force npm uninstall -g @openai/codex npm install -g @openai/codex重装搞定。Windows 下 npm 的全局目录如果和系统权限纠缠不清,也可能导致模块文件没写全,这就对应到 2.2 节里说的把 prefix 改到用户目录。
5.3 终端选中文本后 Codex 无响应的正确处理
如果你没有关快速编辑,在 Codex 输出过程中用鼠标拖动选中了一段文字,很可能发现终端直接“卡住”了——不是 Codex 死了,而是终端进入了暂停输出状态。这是 Windows 控制台的经典机制:快速编辑模式下选中文本会自动暂停后续输出,相当于给终端上了个“冻结”。
遇到这种情况,不要急着关窗口,处理方法有两种:
- 最直接:按一下 Esc 取消选中,冻结解除,输出继续。
- 根治:回到 3.2 节,把快速编辑模式关掉。
另外有人会遇到鼠标在 Codex 界面里点击后选中了一整块区域,导致界面布局错乱。这是 TUI 程序接收到了终端传来的鼠标事件,把点击当成了选择操作。解决办法是检查 Windows Terminal 的“鼠标事件转发”设置,确保 Codex 没有开启鼠标捕获。如果 Codex 的 TUI 界面里有“启用鼠标支持”之类的选项,按需关掉即可。
这套配置我实际用了两周多,才把“抢鼠标”这个老大难彻底驯服。回头来看,最核心的就一件事:Windows 终端默认的鼠标交互模式不适合密集型 TUI 工具,改掉快速编辑 + 调整焦点策略,体验立刻上一个台阶。如果你刚在 Windows 上装完 Codex,还没被各种报错和抢鼠标折磨退,恭喜你,这家伙调校好之后,确实是个能陪你从早干到晚的干活搭档。下次遇到类似终端工具在 Windows 上表现怪异的,不妨先往“控制台交互模式”这个方向查,十有八九能救回来。