Codex 非交互模式支持跨平台运行,可在 Windows、Linux、macOS 环境执行无头自动化任务。跨平台特性让同一份 Codex 项目配置、任务脚本、MCP服务、规则钩子能够在多操作系统复用,是 CI/CD、多机器开发流水线、跨环境批量代码处理的基础。本文讲解跨平台支持范围、平台差异、配置适配、跨平台脚本编写、容器部署与兼容性排错。
一、跨平台支持概述
Codex 非交互模式核心程序原生支持三大操作系统:Linux、macOS、Windows。
同一份项目仓库(.codex/ 目录下全部配置)提交Git后,在不同操作系统拉取,加载相同规则、MCP服务、Agent Skills、子代理、钩子,无需大幅修改。
核心前提:非交互模式为无头执行,不依赖图形界面,因此天然适合跨服务器、容器、云主机环境。Computer Use 图形操控功能在非交互跨平台环境不可用。
| 平台 | 支持状态 | 运行方式 | 典型场景 |
|---|---|---|---|
| Linux | ✅ 完全支持 | 二进制 / 容器 | CI服务器、云主机、流水线 |
| macOS | ✅ 完全支持 | 二进制 | 本地开发工作站 |
| Windows | ✅ 支持 | exe / PowerShell | Windows服务器、本地Windows开发机 |
二、跨平台关键差异点
虽然 Codex 配置文件(toml/md/json)跨平台通用,但底层系统环境存在差异,编写自动化任务时需要重点注意。
2.1 路径分隔符
- Linux/macOS:
/正斜杠 - Windows:
\反斜杠
Codex 内部配置解析器自动兼容两种分隔符,在.codex/config.toml、rules.toml中统一推荐使用正斜杠写法,跨平台不会报错。
示例(全平台通用写法)
[file_protection]
protected = ["config/.env", "src/app.ts"]
2.2 可执行程序与命令差异
这是跨平台脚本最大的坑:
- Linux/macOS 使用
bash,Windows 使用powershell/ cmd。 - 程序名称不同:例如
ls(Linux/macOS)与dir(Windows)。
建议:钩子脚本、
codex exec任务描述内,尽量避免直接写平台专属shell命令;优先调用MCP服务完成文件查询,减少直接执行系统命令。
2.3 全局配置文件路径
全局用户配置不属于项目仓库,路径随操作系统变化:
- Linux / macOS:
~/.codex/config.toml - Windows:
%USERPROFILE%\.codex\config.toml
项目级配置
.codex/config.toml放在代码仓库,全平台路径完全一致,优先使用项目配置,减少全局配置依赖。
2.4 环境变量写法
- Linux/macOS:
${VAR_NAME} - Windows PowerShell:
$env:VAR_NAME
Codex配置文件内部${VAR_NAME}语法统一支持全平台,在toml配置中引用环境变量不需要修改写法。
三、跨平台非交互模式基础命令
命令行语法 codex exec 在三大平台保持一致,仅终端环境不同。
Linux/macOS 示例
codex exec --quiet --approval-mode=suggest "评审当前代码变更"
Windows PowerShell 示例
codex exec --quiet --approval-mode=suggest "评审当前代码变更"
管道输入跨平台注意:
- Linux/macOS:
git diff | codex exec "评审变更" - Windows PowerShell:
git diff | codex exec "评审变更"(PowerShell原生支持管道)
推荐:任务描述、参数、
--json、--output等参数全部跨平台一致,不需要修改。
四、跨平台钩子脚本适配
钩子(Hooks)是跨平台最容易出问题的模块,因为钩子会直接调用本机脚本。
方案1:多平台分支钩子(推荐)
在 config.toml 中使用平台判断,为不同操作系统绑定不同脚本。
[hooks]
pre-task.linux = "./.codex/hooks/pre-task-linux.sh"
pre-task.macos = "./.codex/hooks/pre-task-macos.sh"
pre-task.windows = "powershell ./.codex/hooks/pre-task-win.ps1"
方案2:跨平台统一脚本
使用 Python / Node.js 编写钩子脚本,脚本语言本身跨平台,一份脚本三大系统运行,不需要区分shell。
[hooks]
post-task = "python ./.codex/hooks/post_check.py"
最佳实践:钩子逻辑尽量用跨平台编程语言实现,减少bash/powershell平台专属脚本。
五、容器化跨平台部署(Docker)
容器是保证跨平台一致性的首选方案,在Docker容器内运行Codex非交互模式,屏蔽宿主机系统差异。
基础Dockerfile片段
FROM ubuntu:24.04
RUN apt update && apt install -y ca-certificates
# 安装 codex 二进制
COPY codex /usr/local/bin/codex
WORKDIR /workspace
# 启动非交互任务
CMD ["codex", "exec", "--quiet", "执行项目代码检查"]
容器优势:
- 环境固定,不受宿主机Linux发行版、Windows/macOS差异影响
- 可直接嵌入CI流水线,多平台CI均可复用同一个镜像
- 沙箱隔离,适合full-auto自动执行场景
六、跨平台MCP服务配置
MCP配置在 config.toml 中跨平台通用,但 stdio 模式下启动命令需要注意:
# 跨平台MCP示例,优先使用npx/uvx这类跨平台包管理器
[mcp_servers.git]
name = "git"
transport = "stdio"
command = "uvx"
args = ["mcp-server-git"]
sandbox_mode = "read-only"
避坑:不要硬编码绝对路径(如
/usr/bin/python或C:\python.exe),优先使用PATH内可执行程序,保证跨平台查找。
七、跨平台校验命令
Codex内置斜杆命令,在非交互模式下可用来检测当前平台环境,用于自动化脚本校验:
# 查看当前平台信息 codex env info --platform# 验证当前项目配置兼容性(跨平台检查)
codex config validate --cross-platform
输出会提示:路径、钩子脚本、MCP命令是否存在平台兼容性风险。
八、安全与最佳实践
- 项目配置全部相对路径,不要写绝对路径,保证仓库在Windows/Linux/macOS直接拉取可用。
- 钩子优先采用Python/Node.js跨平台脚本,尽量减少bash与powershell专属脚本。
- MCP服务使用包管理器(uvx/npx)启动,避免硬编码程序绝对路径。
- CI流水线优先使用Docker容器,消除宿主机环境差异带来的不稳定。
- 环境变量统一使用
${VAR_NAME}写法,不要使用平台特有的变量语法。 - 跨平台自动化任务,审批策略默认使用
suggest,仅隔离容器环境启用auto-edit。 - 提交代码前,执行
codex config validate --cross-platform检查兼容性问题。
九、常见问题
Q:Windows上非交互模式能否加载AGENTS.md、rules.toml和MCP配置?
A:可以。.codex目录下所有配置文件解析逻辑三大平台完全一致。
Q:同一个钩子脚本,Linux正常,Windows执行失败是什么原因?
A:大概率是脚本换行符、shell解释器、可执行权限问题。Windows不支持直接运行sh脚本,建议使用powershell脚本或者python跨平台脚本。
Q:跨平台非交互模式下子代理是否可用?
A:子代理、Agent Skills、MCP全部支持跨平台无头运行,行为在各平台保持一致。
Q:在Windows上使用stdio类型MCP服务有什么限制?
A:stdio模式在Windows支持良好,但部分原生Linux工具无法直接运行,优先选择跨平台的MCP服务。
十、总结
Codex非交互模式具备完整跨平台能力,支持Linux、macOS、Windows三大操作系统。项目内 .codex 的toml、md配置文件跨平台通用,主要差异集中在系统命令、钩子脚本、全局配置路径。
编写跨平台自动化任务时,尽量使用相对路径、跨平台脚本、容器化部署,减少操作系统专属命令。结合codex config validate --cross-platform提前校验兼容性,可实现一套项目配置,在本地工作站、服务器、CI流水线多环境复用。
0 条笔记