# Codex CLI（Mac/Linux）

> Mac / Linux 下安装并配置 Codex CLI 接入灵眸 API；含 config.toml 开启 1M token 长上下文的方法。

URL: https://docs.lmuai.ai/cn/docs/tools/codex-cli-mac





安装 Codex CLI 后，手动创建两份配置文件（`config.toml` + `auth.json`）即可接入灵眸 API，无需任何第三方配置工具。

***

## 第1步：安装 Node.js [#第1步安装-nodejs]

需要 &#x2A;*Node.js 20+** 版本，下载地址：[https://nodejs.org/en/download](https://nodejs.org/en/download)

一路点下一步安装完毕后，在终端验证：

```bash
node --version
# 显示版本号（如 v23.7.0）表示安装成功
```

## 第2步：安装 Codex CLI [#第2步安装-codex-cli]

```bash
npm i -g @openai/codex
```

如遇网络问题，先切换国内镜像源再安装：

```bash
npm config set registry https://registry.npmmirror.com
npm i -g @openai/codex
```

验证安装：

```bash
codex --version
# 显示版本号表示安装成功
```

## 第3步：创建配置文件 [#第3步创建配置文件]

配置文件目录为 &#x2A;*`~/.codex/`**（没有就新建，已有旧文件则覆盖）。在该目录下创建/覆盖以下两个文件：

### config.toml [#configtoml]

```toml
model = "gpt-5.4"
model_reasoning_effort = "xhigh"
disable_response_storage = true
sandbox_mode = "danger-full-access"
windows_wsl_setup_acknowledged = true
approval_policy = "never"
file_opener = "vscode"
model_provider = "codex"
web_search = "cached"
suppress_unstable_features_warning = true

[history]
persistence = "save-all"

[tui]
notifications = true

[shell_environment_policy]
inherit = "all"
ignore_default_excludes = false

[sandbox_workspace_write]
network_access = true

[features]
plan_tool = true
apply_patch_freeform = true
view_image_tool = true
unified_exec = false
streamable_shell = false
rmcp_client = true
elevated_windows_sandbox = true

[profiles.auto-max]
approval_policy = "never"
sandbox_mode = "workspace-write"

[profiles.review]
approval_policy = "on-request"
sandbox_mode = "workspace-write"

[notice]
hide_gpt5_1_migration_prompt = true

[model_providers.codex]
name = "codex"
base_url = "https://api.lmuai.ai"
wire_api = "responses"
requires_openai_auth = true
```

### auth.json [#authjson]

```json
{
  "OPENAI_API_KEY": "这里填入后台生成的sk-开头的密钥"
}
```

## 第4步：启动 Codex CLI [#第4步启动-codex-cli]

保存配置文件后重新打开终端，输入以下命令启动即可自动登录：

```bash
codex --dangerously-bypass-approvals-and-sandbox
```

或者简写：

```bash
codex --yolo
```

> 这是免安全审批的启动命令，不需要逐条批准自动执行。

启动成功后，界面显示当前使用模型为 `gpt-5.4 xhigh`（即 `config.toml` 中 `model` 字段指定的模型）。

<Callout type="info" title="关于模型切换">
  如不小心在会话内切换到了其他模型，可修改 `~/.codex/config.toml` 中的 `model` 字段改回 `gpt-5.4`，重启终端即可恢复。
</Callout>

***

## Codex 启用 1M 上下文（可选） [#codex-启用-1m-上下文可选]

`gpt-5.4` 支持 **1M token 长上下文窗口**（默认仅 272K），适合超大仓库梳理、长日志分析、跨多文件重构等场景。Codex 默认**不开启** 1M 窗口，需要在 `config.toml` 中显式声明。

### 配置方法：config.toml 追加两行 [#配置方法configtoml-追加两行]

编辑 `~/.codex/config.toml`，在文件**顶层**（任意 `[section]` 之前，例如紧跟 `model = "gpt-5.4"` 之后）追加：

```toml
model_context_window = 1000000
model_auto_compact_token_limit = 900000
```

保存后重新打开终端、重新进入 Codex 即生效。

**字段说明**

| 字段                               | 作用                                                                                           |
| -------------------------------- | -------------------------------------------------------------------------------------------- |
| `model_context_window`           | 声明当前模型可用的上下文窗口 token 数，`1000000` 即 1M；不配置时使用模型默认值（272K）                                      |
| `model_auto_compact_token_limit` | 触发自动压缩历史（auto-compact）的 token 阈值，建议设为窗口的 90%（1M 对应 `900000`）；超过窗口 90% 的取值会被 Codex 钳制，写更大没有意义 |

### 验证是否生效 [#验证是否生效]

重新进入 Codex 后输入 `/status`，查看 `context window` 是否显示为 1M 左右（部分版本显示约 950K，是 Codex 预留了 5% 安全余量）。也可以用 `/statusline` 把上下文用量加到状态栏实时观察。

### 使用 CC Switch 的用户 [#使用-cc-switch-的用户]

如果你用 [CC Switch](./cc-switch) 管理 Codex 配置，在其 Codex 配置编辑器中加入同样两行并应用即可，效果一致：

<img alt="CC Switch 中为 Codex 配置 model_context_window = 1000000 与 model_auto_compact_token_limit = 900000 开启 1M token 长上下文" src="__img0" />

<Callout type="warn" title="使用注意">
  * **必须写在顶层**：这两个字段写进 `[profiles.xxx]` 段不会生效（Codex 已知限制）；也请写在用户级 `~/.codex/config.toml`，项目级 `.codex/config.toml` 可能被忽略
  * **模型支持**：`gpt-5.4`、`gpt-5.5` 走 API 通道支持 1M；`gpt-5.3-codex` 等模型窗口上限为 272K，配置写再大也不会突破模型本身的上限
  * **消耗更大**：上下文越长，单次请求消耗的 token 越多；超过 272K 的部分按长上下文分档计费、单价更高，非超长任务不建议常开
  * **版本差异**：个别新版本 Codex 会优先从模型目录（model catalog）读取窗口大小，若 `/status` 仍显示旧值，先升级到最新版（`npm i -g @openai/codex@latest`）再试
</Callout>
