Codex / 使用教程

Codex 使用教程:安装 CLI、IDE 插件与 App,config.toml 配置、AGENTS.md 与常用命令

本文按“选形态 → 安装 → 登录 → 配置 → 写规则 → 日常命令 → 权限 → 科研使用 → 排错”的顺序整理 Codex 的用法。命令、子命令和配置字段按 npm 上的最新版 Codex CLI 0.162.1 与官方文档(2026 年 10 月)核对,旧版教程中已失效的写法单独列出。

直接答案

Codex 有四种用法:终端里的 Codex CLI、VS Code / Cursor / JetBrains 中的插件、ChatGPT 桌面 App 中的 Codex,以及在云端运行的 Codex Cloud。前三种在本机运行,共用 ~/.codex 下的配置和登录;Codex Cloud 只能用 ChatGPT 账号登录。CLI 用 npm install -g @openai/codex 或官方安装脚本安装,在项目目录运行 codex 后选择 ChatGPT 账号或 API Key 登录。默认设置写在 ~/.codex/config.toml,项目规则写在仓库根目录的 AGENTS.md。当前版本已移除 untrusted 审批策略、[profiles] 表和 chat 协议,照抄旧教程会启动失败;改完配置用 codex exec --strict-config 或 codex doctor 检查。

第一步

四种形态调用的是同一个 Codex 智能体,差别在运行位置、能访问的文件和登录要求。CLI 和 IDE 插件读同一份 ~/.codex/config.toml 和同一份登录缓存,在一处登录后另一处直接可用。

数据只在本机或课题组服务器上时,选 CLI 或 IDE 插件。Codex Cloud 的任务只能访问云端环境里的仓库和服务,本机文件、已登录的浏览器和 VPN 不会带过去,大体量原始数据也不适合放进 GitHub 仓库。

在课题组服务器上工作时,先把 CLI 在服务器上跑通,再配 IDE 插件的 Remote-SSH。CLI 能单独验证代理、证书和登录,插件出问题时更容易定位。

免费版和 Go 套餐只能在桌面 App 中使用 GPT-6 Luna(逐步开放);Plus(每月 20 美元)起可以在网页、CLI、IDE 插件和 iOS 上使用,并包含 GPT-6.1 Sol。

形态安装入口在哪里运行登录适合
Codex CLIinstall.sh / PowerShell 脚本、npm、Homebrew本机终端;也可装在 SSH 登录的服务器上ChatGPT 账号或 API Key实验室服务器、脚本批量运行、需要精确控制权限
IDE 插件VS Code / Cursor / Windsurf 扩展市场搜索 openai.chatgpt;JetBrains 在 AI Assistant 的 AI Chat 中选择 Codex本机或 Remote-SSH 连接的服务器ChatGPT 账号或 API Key边看代码边改,审阅改动
ChatGPT 桌面 Appchatgpt.com/download(macOS、Windows),Linux 另有安装说明本机;可选 Local、Worktree 或 CloudChatGPT 账号或 API Key多个课题并行、要看图表和文件预览
Codex CloudChatGPT 网页、桌面 App 或手机中选择 Work in > CloudOpenAI 托管的云端容器,需要先创建环境并连接 GitHub 仓库只能 ChatGPT 账号代码在 GitHub 上、关机后仍要继续的任务
来源:官方 Codex CLI、IDE extension、ChatGPT desktop app、Codex Cloud、Authentication 文档。

安装

官方给出四种安装方式,安装和升级用同一条命令。装完先运行 codex --version 和 codex doctor,确认二进制、配置、登录和网络。

安装与验证bash
# macOS / Linux:官方安装脚本(安装与升级相同)
curl -fsSL https://chatgpt.com/codex/install.sh | sh

# Windows:在新的 PowerShell 窗口中运行
powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"

# npm(Node 16+;国内可加 --registry=https://registry.npmmirror.com)
npm install -g @openai/codex

# Homebrew
brew install --cask codex      # 升级:brew upgrade --cask codex

# 验证
codex --version                # 本页核对版本:codex-cli 0.162.1
codex doctor --summary         # 安装、配置、登录、网络、沙箱逐项检查
现象原因处理
运行 codex 报 Missing optional dependency @openai/codex-darwin-arm64(或 linux-x64 等)npm 包本身只有一个启动脚本,真正的程序在按平台拆分的可选依赖里。可选依赖下载失败时 npm 只记一条 reify failed optional dependency,仍然返回成功重新安装;网络不稳定时加 --registry=https://registry.npmmirror.com,或改用官方安装脚本 / Homebrew
npm 安装耗时十几分钟平台包很大:0.162.1 的 darwin-arm64 包压缩后 136.6 MB,解压后 323 MB使用镜像源或官方安装脚本
WSL1 中无法运行沙箱命令0.115 起 Linux 沙箱改用 bubblewrap,WSL1 只支持到 0.114wsl --set-version <发行版> 2 升级到 WSL2
Windows 10 上终端显示异常或无法启动需要 ConPTY,官方要求 Windows 10 1809 及以上,Windows 11 为推荐环境更新系统,或在 WSL2 中运行
codex update 提示无法自更新codex update 只对支持自更新的安装方式生效用安装时的同一种方式升级(npm 重装、brew upgrade、重跑安装脚本)
本页实测:2026-10-11 在 macOS arm64、Node 24.19、npm 11.17 上执行 npm install @openai/codex@0.162.1,耗时 16 分 55 秒后返回成功,但平台包未下载,运行时出现第一行的报错;手动下载平台包后正常。npmmirror 已同步 0.162.1 各平台包(核对了元数据)。

登录

本机的 CLI、IDE 插件和桌面 App 两种方式都支持。选择取决于你按套餐额度用还是按 token 付费,以及是否需要 Codex Cloud。

登录信息缓存在 ~/.codex/auth.json 或系统钥匙串,由 cli_auth_credentials_store(file / keyring / auto / ephemeral)决定。CLI 和 IDE 插件共用这份缓存,在任一处退出后两处都要重新登录。

设备码登录需要先在 ChatGPT 的安全设置中开启(工作区账号由管理员在工作区权限中开启)。登录失败时查看日志目录下的 codex-login.log。

在国内使用,操作层面需要稳定的国际网络和 ChatGPT 账号或 OpenAI API Key。代理建议写成 HTTP 代理变量:有用户在 Windows 上把 SOCKS5 代理变量改成 HTTP 代理变量并设置 NO_PROXY 后,ChatGPT 后端请求的断流消失(GitHub #20844)。接第三方网关时,网关需要支持 Responses 协议,只提供 Chat Completions 接口的服务无法接入当前版本。官方订阅、API 中转站、国产模型三种路线的比较见 /compare/codex-claude-code-china。

登录、查看状态与无浏览器登录bash
codex login                    # 浏览器登录 ChatGPT 账号
codex login --device-auth      # 设备码登录:服务器、无浏览器环境
printenv OPENAI_API_KEY | codex login --with-api-key   # API Key 登录
codex login status             # 已登录返回 0,未登录打印 Not logged in 并返回 1
codex logout

# 服务器无浏览器且设备码不可用:把回调端口转发到本机后再登录
ssh -L 1455:localhost:1455 user@server
codex login                    # 在本机浏览器打开终端打印的地址

# 或把本机的登录缓存复制过去(auth.json 等同密码)
ssh user@server 'mkdir -p ~/.codex && cat > ~/.codex/auth.json' < ~/.codex/auth.json
代理、证书与接口地址(国内网络环境下的操作)bash
# Linux / macOS 终端:用 HTTP 代理变量,本机地址不走代理
export HTTPS_PROXY=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,::1

# macOS 上从程序坞启动的 ChatGPT 桌面 App 不读 shell 变量,需要设到 launchd 后重启 App
launchctl setenv HTTPS_PROXY http://127.0.0.1:7890
launchctl setenv HTTP_PROXY http://127.0.0.1:7890

# 公司代理或自签根证书
export CODEX_CA_CERTIFICATE=/path/to/root-ca.pem   # 未设置时回退到 SSL_CERT_FILE

# 只换内置 OpenAI 服务的地址(不新建 provider),写在 ~/.codex/config.toml
openai_base_url = "https://gateway.example.com/v1"
比较项ChatGPT 账号登录API Key 登录
计费使用 ChatGPT 套餐内的额度,用完可在 Plus、Pro 购买额外额度按标准 API 价格从 OpenAI Platform 账户扣费
可用模型取决于套餐,Plus 起包含 GPT-6.1 Sol 和 GPT-6 Luna取决于这把 Key 在 API 中可用的模型
Codex Cloud、GitHub 代码审阅、Slack可用不可用
适合日常交互使用CI、定时脚本、套餐额度用完后的补充
自动化中的写法在可信机器上维护 auth.json只给 Codex 这一条命令设置 CODEX_API_KEY,不设成整个任务的环境变量
来源:官方 Authentication、Pricing、Non-interactive mode 文档。

配置

配置按以下顺序生效,排在前面的覆盖后面的:命令行参数与 -c 覆盖 → 项目内 .codex/config.toml(从项目根到当前目录,越近越优先,只对信任的项目生效)→ --profile 选择的 ~/.codex/<名称>.config.toml → ~/.codex/config.toml → 系统 /etc/codex/config.toml → 内置默认值。

可直接使用的完整示例toml
# ~/.codex/config.toml  (Codex CLI 0.162.1 用 --strict-config 校验通过)
# 根级键必须写在第一个 [表] 之前,写在表后会变成该表的字段并被忽略
model = "gpt-6.1-sol"              # 账号无权限时改为 gpt-6-luna
model_reasoning_effort = "medium"  # low / medium / high / xhigh,取决于模型
approval_policy = "on-request"     # 只有 on-request、never 两个值
sandbox_mode = "workspace-write"   # read-only / workspace-write / danger-full-access
web_search = "cached"              # cached(默认)/ live / indexed / disabled
file_opener = "vscode"             # 输出里的文件路径可点击打开
project_doc_max_bytes = 65536      # AGENTS.md 合计上限,默认 32768

[sandbox_workspace_write]
network_access = false             # 需要 pip/conda 联网安装时改为 true
writable_roots = []                # 额外可写目录,例如 ["/Users/me/scratch"]

[history]
persistence = "save-all"           # "none" 不在本机保存会话记录

# MCP:本地 stdio 服务器
[mcp_servers.papers]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/papers"]
startup_timeout_sec = 20           # 默认 10
tool_timeout_sec = 60              # 默认 60

# MCP:远程 HTTP 服务器,暂时停用
[mcp_servers.context7]
url = "https://mcp.context7.com/mcp"
bearer_token_env_var = "CONTEXT7_API_KEY"
enabled = false

# 自定义模型网关(只支持 Responses 协议)
[model_providers.mygateway]
name = "My OpenAI-compatible gateway"
base_url = "https://gateway.example.com/v1"
env_key = "MYGATEWAY_API_KEY"      # 写环境变量名,不写 Key 本身
wire_api = "responses"
request_max_retries = 4
stream_idle_timeout_ms = 300000

# 信任某个项目,使其 .codex/config.toml 生效
[projects."/Users/me/research/rnaseq-2026"]
trust_level = "trusted"
profile 文件与单次覆盖bash
# ~/.codex/gateway.config.toml  ——  codex -p gateway
model_provider = "mygateway"
model = "gpt-6.1-sol"

# ~/.codex/deep.config.toml  ——  codex -p deep
model_reasoning_effort = "high"

# 单次覆盖,值按 TOML 解析,字符串要带引号
codex -c model_reasoning_effort='"high"' -s read-only
codex exec -p deep "复核 scripts/02_model.py 的统计方法"
配置项可选值与默认值什么时候改
model账号可用的模型 ID,例如 gpt-6.1-sol、gpt-6-luna;未设置时 0.162.1 默认 gpt-6.1-sol账号无权限或要省额度时改为 gpt-6-luna。GPT-5.5 将于 2026-10-14 在 ChatGPT 登录的 Codex 中下线,写死 gpt-5.5 的配置需要更换
model_reasoning_effortlow / medium / high / xhigh 等,可用档位取决于模型统计方法推导、复杂调试用 high;批量改格式用 low。档位越高耗时和用量越大
approval_policyon-request、never,或 { granular = {...} }交互使用 on-request;codex exec 自动使用 never
sandbox_moderead-only / workspace-write / danger-full-access只看代码用 read-only;跑分析、改脚本用 workspace-write
[sandbox_workspace_write]network_access 默认 false;writable_roots 额外可写目录需要联网装包时开 network_access;结果要写到项目外的目录时加 writable_roots
model_provider + [model_providers.<id>]base_url、env_key(环境变量名)、wire_api(只能 responses)、http_headers、request_max_retries、stream_idle_timeout_ms 等接公司网关、Azure、Bedrock 或本地 Ollama 时。只改地址用顶层 openai_base_url
--profile 与 <名称>.config.toml0.134.0 起每个 profile 是一个独立文件,写顶层键在“日常”“高推理”“走网关”之间切换
[mcp_servers.<id>]stdio:command、args、env;HTTP:url、bearer_token_env_var;通用:startup_timeout_sec(默认 10)、tool_timeout_sec(默认 60)、enabled、required、enabled_tools / disabled_tools接文献库、数据库、浏览器等外部工具。每个 MCP 服务器都会占用上下文和额度,不用时设 enabled = false
project_doc_max_bytes默认 32768 字节AGENTS.md 总量超过 32 KiB 时调大,更好的做法是拆到子目录
[projects."<路径>"] trust_leveltrusted / untrusted让项目内 .codex/config.toml 生效,或对某个项目强制每条命令审批
来源:官方 Config basics、Advanced Configuration、Configuration Reference、Model Context Protocol 文档,按 Codex CLI 0.162.1 核对。
  • 改完配置运行 codex exec --strict-config "hi":配置中有当前版本不认识的字段时会报 unknown configuration field 并指出行号,配置无误时开始正常运行(未登录时随后报 401)。
  • codex doctor --all 的 config 一项会列出被忽略的字段,例如 Codex is ignoring 2 unrecognized configuration settings。
  • 交互会话中 /status 显示当前模型、审批策略、可写目录和剩余上下文;/debug-config 显示每一层配置来自哪个文件。
  • 项目内 .codex/config.toml 不能设置 model_provider、model_providers、openai_base_url、profile 等,写了会在启动时警告并忽略。
  • codex mcp add <名称> -- <命令> 或 codex mcp add <名称> --url <地址> 会写入 config.toml;codex mcp list 查看已配置的服务器及启用状态。

版本差异

Codex CLI 更新频繁,2025 年到 2026 年上半年的教程中有不少写法已经失效。下表的报错原文均为本页在 Codex CLI 0.162.1 中实际触发的输出。

旧写法0.162.1 的表现改法
approval_policy = "untrusted"启动失败:approval_policy = "untrusted" is no longer supported; remove this setting删除该行,用 on-request;需要每条命令都审批时在 [projects."<路径>"] 中设 trust_level = "untrusted"
codex -a untrusted 或 -a on-failureinvalid value ... [possible values: on-request, never]改为 -a on-request
profile = "fast" 加 [profiles.fast]legacy `profile = "fast"` config is no longer supported; use `--profile fast` with `fast.config.toml` instead把 [profiles.fast] 下的键移到 ~/.codex/fast.config.toml(写成顶层键),删除原表和 profile 行
只留 [profiles.fast] 表,运行 codex -p fast--profile `fast` cannot be used while ... config.toml contains legacy ... config同上
wire_api = "chat"`wire_api = "chat"` is no longer supported. How to fix: set `wire_api = "responses"`改为 responses;上游只支持 Chat Completions 时需要换支持 Responses 的网关
[model_providers.openai] 里改 base_urlmodel_providers contains reserved built-in provider IDs: `openai`删掉该表,改用顶层 openai_base_url,或换一个自定义 ID
codex exec --full-autoerror: unexpected argument '--full-auto' found(官方文档仍写“打印弃用警告”,0.162.1 已直接报错)改为 codex exec --sandbox workspace-write
model = gpt-6.1-sol(未加引号)string values must be quoted字符串加双引号
args = ["C:\Users\me\data"]too few unicode value digits(\U 被当作转义)改用单引号字面量 'C:\Users\me\data' 或正斜杠 C:/Users/me/data
model 写在 [sandbox_workspace_write] 等表之后不报错,模型设置无效;--strict-config 下报 unknown configuration field `sandbox_workspace_write.model`把所有根级键移到第一个 [表] 之前
model_reasoning_efort 等拼写错误;MCP 中照搬 Claude Code 的 type = "stdio"不报错,字段被忽略;doctor 中显示 `mcp_servers.x.type` is ignored删掉或改正,Codex 根据 command 或 url 判断类型

AGENTS.md

AGENTS.md 是普通 Markdown 文件,Codex 在每次启动会话时读取并放进第一轮上下文。它用来写这个项目长期有效的规则:目录约定、运行命令、哪些文件不能动、完成的标准。

本页用 codex debug prompt-input 查看实际注入模型的内容(Codex CLI 0.162.1,不需要登录):在项目根启动时,只加载全局文件和根目录 AGENTS.md,analysis/ 等子目录里的 AGENTS.md 不会加载;在 analysis/deseq/ 启动时,路径上的四个文件全部加载;analysis/ 中同时有 AGENTS.override.md 时,该目录只取 override。把根目录 AGENTS.md 加到 40 KB 后,在默认上限下根文件被截断,analysis/ 和 deseq/ 的规则都没有进入上下文。

因此,子目录专用的规则只有在该子目录启动 Codex(codex -C analysis/deseq)时才生效;需要始终生效的规则写在根目录,根目录文件保持精简。

/init 会在当前目录生成一份 AGENTS.md 草稿,提交前删到只剩必要规则。ETH Zürich 对 AGENTS.md 的评测(arXiv 2602.11988,ICLR 2026)发现,在 SWE-bench 等代码任务中,上下文文件总体略微降低任务成功率,推理成本增加 20% 以上;智能体会认真执行文件中的要求,多余的要求让任务更难。作者建议人工编写、只写最少的必要要求。官方计费文档也把“缩小 AGENTS.md”列为节省额度的方法。

检查加载了哪些文件:在交互会话中问“列出你加载的指令文件”,或用 codex -c log_dir=./.codex-log 启动后查看 codex-tui.log。

科研项目 AGENTS.md 范例markdown
# AGENTS.md(放在课题仓库根目录)

## 目录约定
- data/raw/:原始数据,只读。不修改、不移动、不覆盖、不重新编码。
- data/processed/:由 scripts/ 中的脚本从 data/raw 生成,可以整体删除重建。
- scripts/:按编号命名(01_qc.py、02_model.R),每个脚本只读上一步的输出。
- results/<日期>_<简述>/:每次运行一个目录,图表、表格、日志都放在里面。

## 运行要求
- 环境:conda 环境 rnaseq-2026(environment.yml)。缺包时先说明,不自行升级已有包。
- 随机过程固定种子 20261010,并写入运行日志。
- 每次运行在结果目录写 RUN.md:执行的命令、输入文件及其 md5、软件与包版本、参数、耗时、输出文件列表。
- 统计检验写明检验方法、多重校正方法和阈值,阈值不在运行中途修改。

## 修改范围
- 只改 scripts/ 和 results/。改动共享函数前先说明影响哪些脚本。
- 结果和预期不符时报告差异,不通过改阈值或删样本让结果"变好"。

## 完成标准
- 脚本可以从干净的 data/processed 重新跑出同样的结果。
- 回复中列出改动的文件和需要我人工核对的地方。
  1. 01

    全局层

    ~/.codex/AGENTS.override.md 存在时只读它,否则读 ~/.codex/AGENTS.md。适合写跨项目的个人习惯,例如回复语言、常用包管理器。

  2. 02

    项目层

    从项目根(默认是含 .git 的目录,可用 project_root_markers 修改)一路走到你启动 Codex 的当前目录,每个目录依次找 AGENTS.override.md、AGENTS.md、project_doc_fallback_filenames 中的文件,每个目录最多取一个。

  3. 03

    合并

    按“全局 → 根目录 → 当前目录”的顺序拼接,离当前目录越近的越靠后,冲突时以后出现的为准。空文件跳过。

  4. 04

    上限

    合计超过 project_doc_max_bytes(默认 32 KiB)时截断,路径上更深的文件会被整份丢掉。

命令

下表按 codex --help 与官方 Developer commands 文档整理,只列日常会用到的部分。

/model、/fast、/personality

切换模型与推理档位、切换 Fast 档、设置回复风格。

/permissions

在会话中切换 Auto(工作区可写)与 Read Only,查看当前沙箱和可写目录。

/status、/debug-config

查看当前模型、审批策略、可写目录和上下文余量;查看配置分层来源。

/compact、/new、/clear

压缩历史释放上下文;在同一终端开新会话;清屏并开新会话。

/diff、/review

查看包括未跟踪文件在内的 git diff;让 Codex 审阅当前改动。

/plan、/goal

先出执行计划再动手;给长任务设置持续跟踪的目标。

/init、/mention、/mcp

生成 AGENTS.md 草稿;把指定文件加入对话;列出可用的 MCP 工具。

/resume、/fork、/rename

恢复历史会话、复制当前会话、给会话改名便于之后查找。

/ps、/stop

查看后台终端的输出;停止所有后台终端,长时间运行的分析脚本可在这里查看。

快捷键

@ 搜索文件并插入路径;行首 ! 直接运行 shell 命令;运行中按 Enter 插入新指令、按 Tab 排队到下一轮;输入框为空时连按两次 Esc 编辑上一条消息并从该处分叉;Ctrl+R 搜索历史提示词;Ctrl+O 复制最近一次输出。

命令作用常用参数
codex [提示词]在当前目录开启交互会话-m 模型、-s 沙箱、-a 审批、-C 工作目录、--add-dir 额外可写目录、-i 附图、--search 实时联网搜索、-p profile
codex exec(别名 e)非交互运行,适合脚本-o 写出最终回复、--json、--output-schema、--ephemeral、--skip-git-repo-check、--ignore-user-config
codex resume / codex fork恢复或复制历史会话--last、--all、会话 ID 或名称
codex review对未提交改动、某个提交或分支做代码审阅也可在会话中用 /review
codex apply(别名 a)把 Codex Cloud 任务的 diff 用 git apply 应用到本地
codex mcp add / list / get / remove / login管理 MCP 服务器--url、--bearer-token-env-var、--env
codex login / logout登录与退出--device-auth、--with-api-key、status
codex doctor检查安装、配置、登录、网络、沙箱--summary、--all、--json
codex sandbox在 Codex 的沙箱里运行任意命令,用来测试权限设置-P 权限 profile、-C 目录
codex features list / enable / disable查看和切换功能开关
codex completion生成 bash / zsh / fish 补全脚本

非交互与会话

codex exec 运行完一个任务就退出,进度写到 stderr,只有最终回复写到 stdout,可以直接重定向或接管道。它和交互模式有三处默认值不同,写脚本前先确认。

会话记录保存在 ~/.codex/sessions 下。codex resume --last 默认只在当前目录的会话中找,换了目录要加 --all;会话保存的目录与当前目录不同时,Codex 会询问用哪个,可用 tui.resume_cwd 固定选择。--ephemeral 运行的会话不落盘,之后无法恢复。

需要固定格式的结果(例如每个样本的 QC 判定)时,用 --output-schema schema.json 约束最终回复为指定 JSON 结构,再配合 -o 写入文件。

脚本化运行分析与恢复会话bash
# 在项目目录运行一次分析,最终回复写入文件(进度输出到 stderr)
cd ~/research/rnaseq-2026
codex exec --sandbox workspace-write \
  -o results/2026-10-10_qc/codex_summary.md \
  "按 AGENTS.md 运行 scripts/01_qc.py,结果写到 results/2026-10-10_qc/,并生成 RUN.md"

# 需要逐步事件(命令、文件改动、token 用量)时输出 JSONL
codex exec --json --sandbox workspace-write "..." > run_events.jsonl

# 接着上一次非交互会话继续(--last 只在当前目录范围内找)
codex exec resume --last "把 01_qc 的过滤阈值改成 min_counts=10 并重跑"

# 交互会话
codex resume              # 列表选择
codex resume --last       # 当前目录最近一次
codex resume --all        # 跨目录查找
codex fork --last         # 复制一份会话,尝试另一种做法
默认行为后果处理
没有配置文件时沙箱为 read-only分析脚本跑完写不出结果文件加 --sandbox workspace-write,或在 config.toml 设 sandbox_mode
审批策略固定为 never需要审批的操作直接失败并把错误返回给模型,不会停下来等你把所需权限事先写进配置(可写目录、网络)
要求在 git 仓库或已信任目录中运行报 Not inside a trusted directory and --skip-git-repo-check was not specified.在数据分析目录 git init,或加 --skip-git-repo-check
本页实测:Codex CLI 0.162.1 未登录、--ignore-user-config 时,exec 输出头显示 approval: never、sandbox: read-only。

审批与沙箱

沙箱决定命令在技术上能做什么(写哪些目录、能否联网),审批策略决定什么时候停下来问你。两者独立设置。CLI 和 IDE 插件的沙箱由操作系统实现:macOS 用 Seatbelt,Linux 和 WSL2 用 bubblewrap / Landlock,原生 Windows 用专门的沙箱用户。

workspace-write 下仍有几处只读:工作区内的 .git、.codex、.agents 目录(因此 git commit 需要审批),以及主目录下的 ~/.cache 等位置。本页用 codex sandbox 实测:在工作区内写文件成功,写 ~/.cache 与 git commit 均报 Operation not permitted,curl 外网报 Could not resolve host。Python 包把缓存写到 ~/.cache 时会因此失败,可在 AGENTS.md 中约定把 MPLCONFIGDIR、HF_HOME 等缓存目录设到项目内或 /tmp。

/undo 已经从 CLI 移除。维护者在 GitHub #9203 中说明原实现问题较多,要恢复需要重新设计;社区的替代做法是让 Codex 用补丁逆向撤销本轮改动,但被删除的未跟踪文件无法找回。开始一轮任务前提交一次 git,是目前最可靠的回退方式。

需要比 sandbox_mode 更细的控制时,可以用权限 profile(beta):在 [permissions.<名称>] 中按路径设置 read、write、deny,并为网络设置域名白名单。下一节给出把原始数据设为只读的写法。

组合能做什么实际后果
read-only + on-request读文件、运行只读命令;写入和联网需要你批准适合第一次打开别人的代码或只做讲解;每次改动都要点批准
workspace-write + on-request(默认的 Auto)在工作目录、/tmp、$TMPDIR 内读写和运行命令;目录外写入和联网需要批准日常推荐。工作目录内的文件包括原始数据都可能被改动或删除
workspace-write + never同上,越界操作直接失败codex exec 的常见设置。越界失败后模型可能改用其他做法绕开
workspace-write + approvals_reviewer = "auto_review"越界请求先交给审查智能体判断减少打断;审查会额外消耗额度,审查拒绝后可用 /approve 放行一次
danger-full-access 或 --yolo(--dangerously-bypass-approvals-and-sandbox)无沙箱、无审批,可读写整台机器并联网官方只建议在已隔离的容器或虚拟机中使用。误删的未跟踪文件无法通过 Codex 恢复

科研代码

科研分析和普通软件开发的差别在于:原始数据不可再生,结果需要能追溯到具体命令和参数,任务时间长。下面按这三点给出做法。

权限 profile:data/raw 只读toml
# ~/.codex/config.toml:用权限 profile 把 data/raw 设为只读
# 这一段与 sandbox_mode / [sandbox_workspace_write] 二选一,两者同时存在时 profile 不生效
default_permissions = "research"

[permissions.research]
extends = ":workspace"              # 继承默认工作区权限(.git/.codex 只读、网络关闭)

[permissions.research.filesystem.":workspace_roots"]
"data/raw" = "read"                 # 相对每个工作区根目录
"**/*.env" = "deny"

# 本页实测(Codex CLI 0.162.1,macOS arm64,codex sandbox -P research):
#   echo ok > results/out.txt         -> 成功
#   echo x >> data/raw/counts.csv     -> Operation not permitted
#   rm data/raw/counts.csv            -> Operation not permitted
# 对照:使用内置 :workspace 时,追加写入 data/raw/counts.csv 成功
  1. 01

    第一层:操作系统层面把原始数据设为只读

    最简单的是 chmod -R a-w data/raw。只在 Codex 中生效的做法是权限 profile:继承 :workspace 后把 data/raw 设为 read(见下方代码)。这一段与 sandbox_mode 二选一,配置中任一层出现 sandbox_mode 或命令行传了 --sandbox,profile 就不生效。

  2. 02

    第二层:AGENTS.md 写明目录约定

    说明哪些目录只读、生成文件放哪里、怎样算完成。智能体会按文件要求执行,但规则本身不能阻止写入,所以要和第一层一起用。

  3. 03

    第三层:git 与运行目录

    原始数据不进 git 时,至少把脚本、配置和 RUN.md 纳入 git。每次运行写到新的 results/<日期>_<简述>/ 目录,不覆盖旧结果。

  4. 04

    要求可复现记录

    在 AGENTS.md 中规定每次运行生成 RUN.md:命令、输入文件 md5、软件与包版本(conda env export 或 sessionInfo())、随机种子、参数、耗时、输出文件列表。审阅时先看 RUN.md,再看结果。

  5. 05

    环境先装好

    workspace-write 默认不联网,pip / conda 安装会失败。在开始任务前自己建好环境,或只在装包的那一轮打开 network_access,装完关闭。

  6. 06

    上下文过长时

    用 /status 看剩余上下文;到达阈值后 Codex 会自动压缩(阈值可用 model_auto_compact_token_limit 调整),也可手动 /compact。GitHub #36642 报告 0.145 起自动压缩偶发丢失全部历史,0.150 仍有复现且 issue 未关闭。长任务中让 Codex 把进度、已确认的参数和待办写进 NOTES.md,压缩出问题或开新会话时让它先读这个文件。

排错

先看报错里的 URL 或路径:它说明请求实际发到了哪里、哪个文件被拒绝。然后运行 codex doctor,它会分别检查登录、WebSocket、代理变量和沙箱。

报错原文原因处理
unexpected status 401 Unauthorized: Missing bearer or basic authentication in header没有可用的登录凭据(auth.json 为空或 env_key 指向的变量在当前终端未导出)codex login status 确认;用 API Key 时确认变量已 export
stream disconnected before completion: error sending request for url (http://127.0.0.1:端口/v1/responses)config.toml 残留 model_provider,指向没有运行的本地代理删除 model_provider 行和对应的 [model_providers.x] 表;只改 model 不够
stream disconnected before completion: error sending request for url (https://chatgpt.com/backend-api/codex/responses)网络或代理中断长连接;SOCKS5 代理变量下更常见改用 HTTP 代理变量并设置 NO_PROXY;doctor 中 websocket 失败时 Codex 会尝试 HTTPS 回退
WSL 中 0.129.0 以后每个请求都 stream disconnectedGitHub #24511 报告的 WSL 网络回归,0.128.0 正常,issue 未关闭社区做法是启用 WSL mirrored 网络模式,或在 Windows 原生环境运行
Token exchange failed: error sending request for url (https://auth.openai.com/oauth/token)登录最后一步访问 auth.openai.com 失败检查代理是否覆盖该域名;服务器上改用 --device-auth
no native root CA certificates found服务器缺少系统根证书设置 CODEX_CA_CERTIFICATE 或 SSL_CERT_FILE 指向 PEM 文件,可用 Python certifi 自带的证书
Not inside a trusted directory and --skip-git-repo-check was not specified.codex exec 要求在 git 仓库或已信任目录中运行git init 或加 --skip-git-repo-check
Operation not permitted(写文件或 git commit 时)目标在沙箱可写范围之外,或在 .git、.codex 等受保护路径中--add-dir 增加可写目录,或在会话中批准越界操作
Could not resolve host(pip、curl、git clone)workspace-write 默认关闭网络设置 sandbox_workspace_write.network_access = true,或批准该次联网
Codex is ignoring N unrecognized configuration settings字段拼错、已废弃或层级放错按提示的字段路径修改;用 --strict-config 让它直接报错
Missing optional dependency @openai/codex-<平台>npm 平台包下载失败见“安装”一节
Windows 沙箱命令报错误 1385系统策略拒绝沙箱用户所需的登录类型请 IT 授予登录权限;临时把 [windows] sandbox 设为 unelevated
Skipped loading 1 skill(s) due to invalid SKILL.md files ... missing YAML frontmatter本地 skill 文件缺少 --- 包围的 name 和 description在文件开头补上 YAML 头
前两行与“本地代理残留”的案例来自作者实测的 CSDN 经验帖;401、Not inside a trusted directory、Operation not permitted、Could not resolve host 为本页在 0.162.1 中实际触发的输出。

中文社区经验

以下经验来自含报错原文或作者实测记录的帖子,已与官方文档或 GitHub issue 交叉核对,写明适用条件。

换回官方登录时要删干净自定义 provider

CSDN 作者(Codex 0.142.0,Windows)遇到请求发往 127.0.0.1:57321,原因是之前装过的本地代理工具在 config.toml 留下了 model_provider 和 [model_providers.CodexPlusPlus],代理已不运行。只把 model 改回官方模型仍然走旧 provider,删除这两段后 codex logout、codex login 恢复。之后登录时遇到 token_exchange_failed,更换代理节点后解决。

无外网、无 root 的实验室服务器

CSDN 作者实测的做法:在本机 ~/.ssh/config 中为服务器加 RemoteForward 17891 127.0.0.1:7890,把本机代理映射到服务器;服务器上导出 HTTP(S)_PROXY 指向 127.0.0.1:17891;缺根证书时用 certifi 的 cacert.pem 设置 SSL_CERT_FILE;VS Code 扩展通过 ~/.vscode-server/server-env-setup 加载同一组变量,修改后执行 Remote-SSH: Kill VS Code Server on Host 再重连。作者建议先跑通 CLI 再配扩展。

macOS 桌面 App 不读终端里的代理变量

在 .zshrc 中 export 的代理只对终端里启动的 codex 生效。从程序坞打开的 App 需要用 launchctl setenv 设置后重启(CSDN 经验帖)。GitHub #20844 中 Windows 用户同样是把系统代理和环境变量分别设成 HTTP 代理后才稳定。

配置不生效先看 doctor 的忽略警告

CSDN 经验帖记录的警告 mcp_servers.node_repl.type is ignored 与本页在 0.162.1 中用 codex doctor --all 看到的格式一致。从 Claude Code 迁移过来的 MCP 配置常带 type 字段,Codex 不使用它。

分歧:WSL 断流的处理

NodeSeek 用户通过 WSL mirrored 网络模式(networkingMode=mirrored、dnsTunneling=true)解决;GitHub #24511 的报告者在 Enterprise 账号下回退到 0.128.0 才恢复。两者的共同点是先在 WSL 内单独运行 codex doctor,确认 WSL 与 Windows 使用的是不同的代理变量和配置。

交给 Agent

指令示例:“这是我的 RNA-seq 课题仓库,原始计数在 data/raw。请先阅读 AGENTS.md 和 scripts/,在不修改 data/raw 的前提下跑通 01_qc 到 03_deseq,每一步写 RUN.md,最后列出结果与上一次运行的差异和需要我核对的地方。”

智能体会执行的步骤:在以 Codex 为基座的隔离云电脑中读取仓库和 AGENTS.md;使用预装的 pandas、SciPy、statsmodels、scikit-learn 等环境,缺少的 R 或 Python 包在工作区内安装;按编号运行脚本并记录命令、版本和参数;对结果做对抗审阅;任务持续运行,关闭本机后不中断,空闲时暂停并保留现场。

产出文件:修改后的脚本、每次运行的 results 目录与 RUN.md、日志,以及一份说明改动和异常的记录。

你仍需自己核对:统计方法和阈值是否符合你的研究设计,样本分组与批次信息是否正确,以及结果中的生物学解释。

参考资料

常见问题

codex 怎么用?最少需要几步?

三步:用 npm install -g @openai/codex 或官方安装脚本安装;在项目目录运行 codex,选择 ChatGPT 账号或 API Key 登录;直接用中文描述任务,例如“读一下这个仓库并解释 scripts/ 里每个脚本的作用”。开始改动前先提交一次 git。

免费账号能用 Codex 吗?

官方定价页显示,免费版和 Go 套餐可以在 ChatGPT 桌面 App 中使用 GPT-6 Luna(逐步开放)。CLI、IDE 插件和 Codex Cloud 从 Plus 套餐起可用;也可以用 API Key 在 CLI 和 IDE 插件中按量付费。

config.toml 改了不生效怎么办?

依次检查:运行 echo $CODEX_HOME,确认改的是正在使用的目录;用 codex exec --strict-config 找拼错或位置不对的字段;在会话中用 /debug-config 看是否被项目配置或 profile 覆盖;项目内 .codex/config.toml 只在信任该项目后生效,且不能设置 provider 相关的键。

Codex 能接 DeepSeek 等国产模型吗?

当前版本的自定义 provider 只支持 Responses 协议,wire_api = "chat" 会直接报错。上游只提供 Chat Completions 接口时,需要一个能转换成 Responses 协议的网关。Codex 按 OpenAI 模型调优,换模型后效果可能下降。

子目录里的 AGENTS.md 为什么没生效?

Codex 只读取从项目根到启动目录这条路径上的 AGENTS.md。在根目录启动时,子目录里的文件不会加载。到该子目录启动(codex -C 子目录),或把规则写进根目录文件。另外检查合计大小是否超过 32 KiB。

怎样防止 Codex 删掉或改动原始数据?

组合使用三层:文件系统层用 chmod 或权限 profile 把 data/raw 设为只读;AGENTS.md 写明目录约定;开始任务前提交 git 并把结果写到新目录。只写 AGENTS.md 规则不能阻止写入,/undo 也已从 CLI 移除。

在云端运行以 Codex 为基座的科研智能体

Scientify 的科学智能体在隔离云电脑中运行,预装分子模拟、生物信息与数值计算环境,需要 GPU 时按任务租用,关闭电脑后任务继续。同等模型用量价格约为标准 API 的 30%,新注册用户免费获得 5 美元等值额度。