Hub Codex CLI 完整教學

第 16 章

疑難排解、安全與資源管理

Codex CLI 是一個會直接動你電腦的 AI 工程師,而這一章是它的「健檢室 + 行車記錄器 + 帳單櫃台」。

想像你請了一位很厲害的助手在家裡幫你做事。大多數時候它都很順,但偶爾會卡住:可能是它連不上網(公司網路擋住了)、可能是它登入失敗(識別證過期了)、可能是它在 Windows 上跟你「斷線重連」鬧脾氣,也可能是你這個月的「使用點數」快用光了。

這一章就是教你:當 Codex 出狀況時,怎麼一步步把問題找出來、修好;以及怎麼盯著你的額度,不要莫名其妙就被擋下來。

你會學到:

  • 「先做哪一步」的診斷三件套(健檢、開日誌、抓設定拼錯);
  • 公司網路 / 代理伺服器 / 自簽憑證後面怎麼讓它連得上;
  • Windows 與 WSL 上最常見的幾個坑;
  • 你的方案、額度、5 小時視窗到底怎麼算,怎麼查還剩多少。

重要提醒

Codex CLI 更新極快(常常幾天就一版),指令與旗標會變。本章所有逐字旗標、設定鍵、模型名稱,最終都以你電腦上實機跑 codex --helpcodex <子指令> --helpcodex doctor 的輸出為準。本章是「2026-06-17 研究時點」的快照,對照版本 Codex CLI 0.140.0。

16.1 診斷三件套(doctor / RUST_LOG / strict-config)

東西壞了別慌。修任何疑難雜症之前,先用這三招把問題「照出來」,你才知道要修哪裡。

可以把它們想成:

  • codex doctor = 健檢,一次幫你量血壓血糖,告訴你哪裡不對勁;
  • RUST_LOG = 行車記錄器,把 Codex 背後每一步都錄下來,出事好回放;
  • --strict-config = 拼字檢查員,專抓你設定檔裡打錯的字。

第一招:codex doctor(先跑這個)

任何「登入怪怪的」「環境好像不對」的問題,第一步永遠先跑 codex doctor。它會產生一份診斷報告,告訴你目前的登入狀態、設定、環境細節有沒有問題。

codex doctor              # 產生完整診斷報告
codex doctor --summary    # 只看摘要(趕時間)
codex doctor --json       # 機器可讀格式(給程式 / 貼工單用)
codex doctor --all        # 展開所有長清單
codex doctor --ascii      # 用純 ASCII 顯示狀態標籤(終端機顯示亂碼時)
codex doctor --no-color   # 關掉顏色

✅ 預期會看到:一份分區塊的報告,每項標 OK 或有問題的提示。

小技巧

要把問題貼到 GitHub issue 或問同事時,用 codex doctor --json 把輸出存起來一起貼,對方一眼就知道你的環境狀況,省去來回問。

第二招:RUST_LOG 開日誌(看背後到底發生什麼)

Codex CLI 是用 Rust 寫的,它認得一個叫 RUST_LOG 的環境變數,用來控制「要錄多詳細的日誌」。等級由淺到深有五級:errorwarninfodebugtrace

最常用的就是在指令前面加上 RUST_LOG=debug,讓它把啟動 / 登入的每一步都印出來:

🍎 Mac: / 🐧 Linux:

RUST_LOG=debug codex                          # 全域 debug(查登入 / 啟動問題最常用)
RUST_LOG=info,codex_core=debug codex          # 只把核心模組拉到 debug,其餘維持 info
RUST_LOG=trace codex                           # 最詳盡(很吵,只在真的卡住時用)

🪟 Windows(PowerShell): 環境變數要分開設,寫法不一樣:

$env:RUST_LOG="debug"; codex

Codex 主要有兩個內部模組(crate)可以單獨過濾:codex_core(核心邏輯)和 codex_tui(終端介面)。如果你要查 MCP(外接工具,詳見第 9 章)連線問題,可以更精準:

RUST_LOG=codex_core::mcp_connection_manager=trace codex exec

重要提醒

debug / trace 等級會讓 Codex 跑慢(第三方觀察約慢 10–50%),而且洗版很兇。日常別開,只在主動除錯時開,查完關掉。

日誌存在哪? TUI(互動介面)模式會把帶時間戳記的日誌寫到一個固定檔案:

🍎 Mac: / 🐧 Linux:

tail -F ~/.codex/log/codex-tui.log

🪟 Windows(PowerShell):

Get-Content "$env:USERPROFILE\.codex\log\codex-tui.log" -Wait

如果你想把日誌寫到別的資料夾,可以用 log_dir:

codex -c log_dir=./.codex-log
tail -F ./.codex-log/codex-tui.log

或寫進設定檔 ~/.codex/config.toml:log_dir = "/絕對路徑/codex-logs"

小技巧

codex exec(非互動 / 自動化模式,詳見第 10 章)預設日誌等級是 error,而且訊息直接印到畫面(stderr)、不寫檔。所以在 CI 裡除錯時,直接看指令輸出就好,不用去翻檔案。(此細節隨版本可能變動,以實機為準。)

第三招:--strict-config 抓拼錯

你設定改了半天「都沒效果」,十之八九是設定鍵的名字打錯了,或者放錯地方。Codex 預設遇到不認識的設定欄位會默默忽略,所以你以為改了,其實它根本沒看。

加上 --strict-config,只要設定檔裡有它不認識的欄位,就直接報錯給你看:

codex --strict-config

還有一招「乾淨環境重現」:如果你懷疑是自己 ~/.codex/config.toml 裡某個設定搞鬼,用下面這招暫時把它整個跳過,看問題會不會消失:

codex exec --ignore-user-config "你的指令"   # 跳過 ~/.codex/config.toml

重要提醒

「設定改了沒效果」最常見的真正原因,是把鍵放錯層級——有些鍵只能放在使用者層級 ~/.codex/config.toml,放到專案層級 .codex/config.toml 會被靜默忽略。下一節 16.2 會詳細講哪些鍵不能放專案層。

抓最常見的病灶:approval 卡關與「retry without sandbox」三個真根因

三件套學完,派上用場最多的實戰案例,十之八九是這一種:你只是叫 Codex 改一個檔案,畫面卻一直跳出「command failed; retry without sandbox」,按了同意又跳、按了又跳,像卡進無限迴圈。這句錯誤訊息很容易讓人誤會成「我權限給太少」,但背後常見的根因其實不只一種,而且彼此的修法完全不一樣——方向抓錯,只會一直在錯的地方繞圈。

遇到這個錯誤,先別急著一路按同意,照下面這張表由上到下排查:

可能根因怎麼確認怎麼修
bubblewrap 沒裝好,或撞到 Ubuntu 23.10+ 之後的核心層限制command -v bwrap 看有沒有裝;或跑 bwrap --dev-bind / / --unshare-net echo ok 看回什麼詳細診斷與 AppArmor profile 修法,見第 6 章「Linux 沙箱校正」
sandbox_mode 卡在 read-only/status 看目前的沙箱顯示什麼,或翻 ~/.codex/config.tomlsandbox_moderead-only 的設計就是「任何改動都要核可」,不管 approval_policy 設多寬鬆都一樣會跳提示。改成 sandbox_mode = "workspace-write"(或啟動時直接下 --sandbox workspace-write)才是對症下藥
想寫的路徑落在工作區之外(常見於某些建置工具、套件快取路徑)看錯誤訊息裡有沒有提到工作區外的路徑--add-dir <路徑> 額外授權那個目錄可寫,不要為了這個直接升級成 danger-full-access(見第 6 章)
特定版本才有的已知迴圈 bugcodex --version 記下版本號去 GitHub releases / issue tracker 查有沒有同版本回報,別看到迴圈就一路照按同意(第 4 章有更完整的處理方式)

先測沙箱行為,但別把它當成乾跑

codex sandbox 不會啟動 agent,卻會真的執行你指定的命令。先用沒有副作用的指令確認沙箱會不會擋:

codex sandbox macos "pwd"      # macOS
codex sandbox linux "pwd"      # Linux / WSL

例如 npm install 仍可能改動 node_modules/lockfile、執行 lifecycle script,並依政策嘗試連網。想測安裝,請在乾淨 worktree 或可丟棄環境執行,不要在有未提交變更或正式環境直接測。需要看拒絕細節才加 --log-denials

重要提醒

codex sandbox 官方標示為 Experimental(實驗性),行為可能隨版本調整,旗標細節以你實機 codex sandbox --help 為準。

16.2 網路、代理、企業 TLS 與 ZDR

如果你在公司、學校,或任何「網路被管控」的環境用 Codex,最常見的災情就是:它連不上 OpenAI。這一節教你怎麼讓它穿過防火牆、代理伺服器與企業憑證攔截。

設定層級:有些鍵只能放在「你自己」的設定檔

先講一個會害你白忙半天的觀念。Codex 的設定檔有兩種層級:

層級路徑誰擁有
使用者層級~/.codex/config.toml你這台機器
專案層級.codex/config.toml(放在專案資料夾)跟著專案走(需先「信任專案」才載入)

有一類「機器本地擁有」的鍵——像是 provider(供應商)、通知、telemetry(遙測)、profile 選擇——只能放使用者層級。如果你把它們放進專案層級的 .codex/config.toml,Codex 會忽略並警告。官方明列這些不可被專案覆寫的鍵:

openai_base_url
chatgpt_base_url
apps_mcp_product_sku
model_provider
model_providers
notify
profile
profiles
experimental_realtime_ws_base_url
otel

重要提醒

簡單記:provider(連去哪)、通知、telemetry 這三類,一律放 ~/.codex/config.toml 放到專案層會被當作沒看到。這也是「設定改了沒效果」的頭號元兇。

標準代理環境變數

如果你的網路要透過代理伺服器(proxy)才能上網,Codex 認得作業系統通用的標準代理環境變數:

🍎 Mac: / 🐧 Linux:

export HTTPS_PROXY=http://proxy.corp:8080
export HTTP_PROXY=http://proxy.corp:8080
export NO_PROXY=localhost,127.0.0.1
codex

🪟 Windows(PowerShell):

$env:HTTPS_PROXY="http://proxy.corp:8080"
$env:HTTP_PROXY="http://proxy.corp:8080"
$env:NO_PROXY="localhost,127.0.0.1"
codex

重要提醒

這幾個變數是「作業系統 / HTTP 通用慣例」,不是 Codex 官方自家列出的專屬變數,精確的大小寫行為官方沒細講。保險起見,大小寫兩種都設(例如同時設 HTTPS_PROXYhttps_proxy)。實際行為以實機為準。

企業 TLS 攔截 / 自簽憑證

很多公司會在中間「攔截」你的 HTTPS 連線做檢查(這叫 TLS 攔截),用的是公司自己的根憑證。這時 Codex 會因為「不認得這張憑證」而連線失敗。解法是告訴 Codex 信任公司那張憑證:

環境變數用途
CODEX_CA_CERTIFICATE指向公司的 PEM 憑證檔(CA bundle),用於企業 TLS 攔截或私有根憑證
SSL_CERT_FILECODEX_CA_CERTIFICATE 沒設時的後備憑證路徑

在公司代理後面登入失敗時,標準解法是先設憑證、再登入:

export CODEX_CA_CERTIFICATE=/path/to/corp-ca.pem
codex login

進階:Codex 內建的沙箱網路代理(experimental)

這是另一個完全不同的東西,別跟上面的公司代理搞混。Codex 自帶一個「沙箱內的網域白名單代理」,可以控制沙箱裡的程式只准連哪些網域。鍵在 features.network_proxy.* 底下:

預設值說明
features.network_proxy.enabledfalse啟用沙箱網路代理
features.network_proxy.domains網域規則(allow / deny 名單)
features.network_proxy.proxy_urlhttp://127.0.0.1:3128HTTP 監聽位址
features.network_proxy.socks_urlhttp://127.0.0.1:8081SOCKS5 監聽位址
features.network_proxy.allow_upstream_proxytrue是否允許串接上游(公司)代理
features.network_proxy.enable_socks5true啟用 SOCKS5

啟用範例:

codex -c "features.network_proxy.enabled=true"

重要提醒

這是實驗性功能,而且 socks_url 的預設值官方原文標成 http:// 開頭(看起來怪怪的,但那是官方原文)。實機以 codex --helpConfiguration Reference 為準。

ZDR(零資料保留)與 disable_response_storage

ZDR(Zero Data Retention,零資料保留)是 OpenAI 給企業 / 組織的政策:伺服器端不保留你的請求資料。聽起來很安心,但它會跟 Codex 的某個機制衝突——Codex 預設會引用「上一個回應」來接續對話(stateful),而 ZDR 禁止伺服器保留上一個回應,於是就被擋下來。

典型錯誤訊息長這樣:

Status: 400, Code: unsupported_parameter, Type: invalid_request_error,
Message: 400 Previous response cannot be used for this organization due to Zero Data Retention

社群提供的解法是在 ~/.codex/config.toml(使用者層級)設:

disable_response_storage = true

重要提醒

disable_response_storage 不在官方 Configuration Reference 裡,屬社群來源,而且有使用者回報在 Rust 版的 Codex 上這個鍵不一定生效(設了仍出現 400 / 401)。ZDR 使用者務必在你當前的版本實機驗證,不要假設它一定有效。若仍失敗,跑 RUST_LOG=debug codex 收日誌,再比對 codex doctor 的輸出。最終以實機 codex --help 與官方頁面為準。

16.3 Windows / WSL 常見坑

好消息:Codex 在 Windows 上的支援一直在進步。但壞消息是,Windows(尤其搭配 WSL)有幾個專屬的坑,這一節幫你先避開。

小技巧

一般建議,Windows 上優先用 WSL2(Windows 內建的 Linux 子系統)。遇到問題,標準流程一樣是先 codex doctor,再開 RUST_LOG=debug 看連線。

坑 1:WSL1 已不再支援

如果你還在用舊的 WSL1,Codex 會跑不起來。

重要提醒

WSL1 只支援到 Codex 0.114;從 0.115 起不再支援 WSL1,必須用 WSL2。 此資訊來自社群整理,精確版本號以官方 changelog / release notes 為準。升級到 WSL2 即可解決。

坑 2:登入時 Token exchange failed

在 WSL / Windows 上登入,有時會卡在這個錯誤:

Token exchange failed: error sending request for url
(https://auth.openai.com/oauth/token)

這通常是 OAuth 登入流程的瀏覽器回呼(callback)無法傳回 CLI,或被 proxy / 憑證擋住。處理方向:

  1. 改用裝置碼登入:codex login --device-auth(不開瀏覽器,適合無頭 / 遠端環境);
  2. 檢查 proxy 設定(見 16.2);
  3. 設好企業憑證 CODEX_CA_CERTIFICATE(見 16.2)。

小技巧

登入流程的 OAuth 回呼位址預設約為 localhost:1455(精確 port 以實機登入時畫面提示為準),這個位址可以透過 SSH 通道轉發。所以遠端 / SSH 登入卡住時,--device-auth 幾乎是最省事的解法。

坑 3:桌面 WSL 模式一直「reconnecting」

有使用者回報,在桌面版 WSL 模式下,即使背後的連線(app-server)其實已經連上,畫面卻一直顯示 reconnecting(重新連線中)。可能成因很多:上游連線不穩、session 正在恢復、VS Code 擴充干擾、WSL2 網路問題。

處理方向:先跑 codex doctor,再用 RUST_LOG=debug codex 看 app-server 連線狀況,確認你是在 WSL2(不是 WSL1)。

坑 4:原生 Windows 沙箱設定失敗(Error 1385 等)

如果你是在 Windows 原生環境(不是 WSL2)跑 Codex,啟動時「建立沙箱」這個動作本身就可能失敗,常見的錯誤碼是 1385——意思是 Windows 拒絕了沙箱使用者所需要的登入類型。這跟前面幾個坑不一樣,不是連線或帳號問題,而是 Codex 想建立一個受限的本機使用者來執行沙箱,結果被 Windows 的權限政策擋下來。

會導致這種設定失敗的常見情境還有:UAC(使用者帳戶控制)提示被按了拒絕、公司的群組原則禁止程式自行建立本機使用者或群組、防火牆規則異動被擋下、沙箱使用者缺少必要的登入權限。如果畫面上看到「Everyone(每個人)這個帳戶對某個目錄有寫入權限」的警告,代表權限設定比預期寬鬆,需要手動移除該權限並重新開啟 Codex,警告才會消失。

重要提醒

要找 IT 或系統管理員求助時,可以附上診斷紀錄 CODEX_HOME/.sandbox/sandbox.log(CODEX_HOME 預設就是 ~/.codex)。但絕對不要CODEX_HOME/.sandbox-secrets/ 這個資料夾分享出去或貼上網——顧名思義,那裡放的是機敏資訊。

小技巧

這類設定失敗多半跟企業的群組原則有關,個人電腦上比較少見。真的常常踩到,前面提過的建議依然成立:優先考慮 WSL2,直接繞開原生 Windows 沙箱這整套建立流程。

坑 5:卡很久後跳「stream disconnected」,別急著當成限流

另一個容易誤判的狀況:Codex 想得比較久(長時間 reasoning)、畫面安靜了一陣子沒有動靜,結果最後跳出:

stream disconnected before completion: Rate limit is exceeded.

看到「Rate limit」幾個字,直覺會以為是額度用完了(見 16.4)。但社群回報,在 Windows / WSL 環境下,這句話有不小的機率其實跟額度無關,而是網路連線在「安靜等待」的這段時間被中間的某個環節掐斷了——VPN、防毒軟體的封包深度檢查、或壓縮 HTTP 流量的中介層,都可能把一條長時間沒有新資料進出的連線當成異常砍斷。伺服器那頭的回應其實可能還在算,只是半路被攔腰打斷,回傳的錯誤訊息卻長得跟真的限流一模一樣。

遇到這句話,不要直接假設是配額問題,照這個順序排查:

  1. 跑一次 codex update,確認自己是最新版;
  2. 檢查電腦上有沒有在跑 VPN 或防毒軟體的即時掃描,能不能先暫時關閉測試;
  3. 真的要確認額度,回頭用 16.4 教的 /status 查實際剩多少,別只看錯誤訊息表面的字。

近期的 Windows 改善

官方 changelog 顯示 Windows / WSL 支援持續硬化中,包括:新增 /usr/bin/bash shell 後備、縮短 Linux proxy socket 路徑、改進 WSL 本地探索邊界、改善 Windows sandbox(沙箱)設定診斷。所以如果你遇到 Windows 專屬怪問題,codex update 升到最新版往往就好了。

官方參考

ChangelogAuthentication、GitHub issue #7623#21693

16.4 方案、額度與用量追蹤(5 小時視窗、credits vs 美元)

最後這節講「錢」與「額度」。搞懂它,你就不會某天工作到一半莫名被擋,卻不知道為什麼。

先記住一句最重要的話:

重要提醒

Codex CLI 跟 Codex 網頁版 / IDE 共用同一份 5 小時額度,不是各有各的桶子。 你在 CLI 狂操一場,會跟你在網頁版的工作搶同一份配額。官方原文:「The usage limits for local messages and cloud tasks share a five-hour window.」

CLI 本身免費,費用來自帳號

Codex CLI 是開源、免費的工具。它自己不收錢——費用來自你用來驅動它的帳號,二選一:

模式怎麼算錢適合誰
A. 用 ChatGPT 方案登入吃方案內含的額度 / credits(點數)已有 ChatGPT 訂閱的人 ✅
B. 用 OpenAI API key 登入按 token 用量,標準 API 美元費率想精準照用量付費、做自動化的人

重要提醒

這是兩套完全不同的計費制度,數字別混。模式 A 用的是 credits(點數),模式 B 用的是美元逐 token——同一個模型在兩制下的數字天差地別。

小技巧

官方 README 建議:有 Plus / Pro / Business / Edu / Enterprise 訂閱的人,直接用 ChatGPT 帳號登入(模式 A)最划算。登入細節詳見第 3 章

方案與月費

(數字為 2026-06-17 查核,官方頁面無版本標示,定價變動快,以官方頁面為準。)

方案月費定位(官方描述)
Free$0 / 月基本探索
Go$8 / 月輕量任務
Plus$20 / 月專注編碼 session
ProFrom $100 / 月rate limit 為 Plus 的 5x 或 20x
BusinessPay-as-you-go(按用量,每席次)團隊席次
Enterprise / EduContact sales(聯絡業務)組織級部署
API Key按用量依標準 API 費率

重要提醒

Free 與 Go 的具體 rate limit 數字,官方 pricing 頁沒有列(表格從 Plus 才開始)。Pro 分 5x 與 20x 兩個子等級,差 4 倍,別搞混(官方頁列「From $100」與「5x / 20x」;社群指 20x 對應 $200 / 月,以官方頁為準)。

5 小時視窗怎麼算

所有方案共用一個 5 小時滾動視窗(rolling window),涵蓋「Local Messages(本地訊息,含 CLI)」與「Cloud Tasks(雲端任務)」。重點:

  • 這是「滾動」視窗,代表你可以在一場 2 小時的高強度 session 裡就把整份額度燒光,不是平均分到每天 / 每月;
  • 官方還提到「另有每週限制可能套用」(Additional weekly limits may apply),但具體每週數字官方沒公布

下面是官方逐字的「每 5 小時視窗訊息數」範圍(2026-06-17 查核;模型名 / 數字以官方 pricing 頁為準):

Plus 等級

模型訊息數範圍
GPT-5.515–80
GPT-5.420–100
GPT-5.4 mini60–350

Pro 5x 等級

模型訊息數範圍
GPT-5.575–400
GPT-5.4100–500
GPT-5.4 mini300–1,750

Pro 20x 等級

模型訊息數範圍
GPT-5.5300–1,600
GPT-5.4400–2,000
GPT-5.4 mini1,200–7,000

小技巧

範圍(像 15–80)為什麼這麼寬?因為每則訊息「分量」不同——一則塞滿大檔案的重訊息很吃額度、能發的次數就少;短訊息很輕、能發很多次。

Credits(點數)制度

2026-04-02 起,Plus / Pro / Business 與新 Enterprise 改為 token-based credit(按 token 的點數)計費,取代舊的「每訊息固定 N 點」。幾個官方數字:

  • GPT-5.5 平均每則訊息消耗 5–45 credits;
  • 圖片生成會更快用掉額度——官方原文:「Image generations use included limits ~3-5x faster on average, depending on image quality and size.」(平均快 3–5 倍,視圖片品質與尺寸而定);
  • 用完額度時,Plus 與 Pro 使用者可以加買 credits 繼續用,不必升級方案

重要提醒

「1 credit = 幾美元」「每個方案每月內含幾 credits」這類換算,官方 pricing 頁沒有公布。網路上若有人給你精確換算,那不是官方數字,別當真。以官方頁面與你帳號實際顯示為準。

用 API key 時的美元定價

如果你走模式 B(API key),計費就完全不同,是 OpenAI Platform 的標準 API 美元費率。目前官方 API 定價頁裡唯一明列的 Codex 專用模型是 gpt-5.3-codex(2026-06-17 查核):

模型層級Input / 1MCached Input / 1MOutput / 1M
gpt-5.3-codexStandard$1.75$0.175$14.00
gpt-5.3-codexPriority$3.50$0.35$28.00

重要提醒

其他帶 codex 字樣的模型(gpt-5.5-codex / gpt-5.4-codex 等)目前沒有出現在 API 美元定價頁。模型陣容變動快,書中數字務必對照官方頁的當下版本——以 OpenAI API 定價頁 為準。

怎麼查我還剩多少額度?

兩個方法,記起來:

  1. 在 CLI session 裡——直接輸入 slash 指令 /status,官方原文:「If you want to see your remaining limits during an active Codex CLI session, you can use /status.」
  2. 開 usage dashboard——官方說「You can find your current limits in the Codex usage dashboard.」(在 Codex 用量儀表板查看目前限制)。
/status

小技巧

你也可能看到 /usage 之類的相關指令——CLI 的 slash 指令清單會隨版本變動,實際以你 session 裡輸入 / 跳出的清單為準。完整 slash 指令速查見附錄 A

重要提醒:小心「幽靈限流」

社群回報過一種令人困惑的狀況:/status 明明顯示額度還很充足,CLI 或 App 卻還是回報「已達使用上限」。這是社群在 GitHub 上追蹤中的已知怪象,不是你設定錯了,目前也沒有本機能自己修的方法。真的遇到,先用 /status 確認一次是不是真的沒額度了,別急著為了它去升級方案或苦等——比較保險的作法是照官方管道回報這個帳號的情況。

16.5 🎓 高手進階

前面四節是「出事怎麼自救」的入門地圖。這一節把同樣的主題往下挖一層:怎麼用更精準的日誌看穿問題、怎麼讀懂 codex doctor 的六大區段、開 trace 時別不小心把密碼錄進 log、企業 / ZDR 環境的安全強化,以及把 token 真的當錢來管。 都是進階場景才用得到,日常不必背。

一句話前提

這節很多旗標 / 鍵都標了實驗性或社群來源,逐字一律以你實機 codex --helpcodex <子指令> --helpcodex doctorcodex features list 的當下輸出為最終真相。Codex 數天一版,下面是 2026-06-18 對 0.140.0 的快照。

16.5.1 RUST_LOG 進階:per-module 精準除錯

入門的 16.1 教了 RUST_LOG=debug(全域)和兩個主要模組 codex_core / codex_tui。高手的差別在於:不要全域開,而是只把「你懷疑的那一段」拉到 trace,其餘維持安靜。 這樣 log 不會洗版,訊號也更乾淨。

Codex 用的是 Rust 標準的 RUST_LOG 過濾語法,可以精準到「某個 crate 裡的某個子模組」(用 :: 串):

🍎 Mac: / 🐧 Linux:

# 只把 codex_core 拉 debug,其餘維持 info(最常用的折衷)
RUST_LOG=info,codex_core=debug codex

# MCP 連線握手深度 trace(外接工具連不上 / 逾時時用,詳見第 9 章)
RUST_LOG=codex_core::mcp_connection_manager=trace codex exec

# 檔案讀寫 / patch 流程 trace(懷疑改檔卡住)
RUST_LOG=codex_core::files=debug codex

# exec 模式深挖(看每一條 shell 指令與輸出,詳見第 10 章)
RUST_LOG=codex_exec=trace,codex_core=debug codex exec "run tests"

小技巧

上面的子模組名稱(mcp_connection_managerfiles)是社群實證的常用 target,精確名稱會隨版本變動。若某個 target 沒反應,先用 RUST_LOG=codex_core=debug 全開該 crate,從日誌裡看真正的 module 路徑長什麼樣,再縮小。實機為準。

日誌格式也能換——有一個環境變數 RUST_LOG_FORMAT,可以把日誌印成 JSON(方便丟給 jq 或日誌系統解析)或 compact(人讀更省行):

RUST_LOG_FORMAT=json RUST_LOG=debug codex      # JSON,給 jq / 日誌系統
RUST_LOG_FORMAT=compact RUST_LOG=debug codex   # 精簡,人讀

重要提醒

RUST_LOG_FORMAT 不在官方環境變數頁的逐字清單裡,json / compact 兩值是社群實證。用之前先在你的版本實測一下有沒有效,以實機與官方環境變數頁為準。

16.5.2 trace 的三宗罪:慢、膨脹、洩密

入門已提醒過 debug / trace 會拖慢。這裡把代價講清楚——trace三個你必須知道的副作用,日常千萬別掛著:

  1. 拖慢執行:第三方觀察 trace / debug 可能讓執行慢 10–50%。日常用 info / warn,只在主動除錯時開。
  2. 撐爆本地 state:有一個已知問題(issue #17320)——開 TRACE 時 Codex 底層的 SQLite 會過量寫入 WAL(寫前日誌),長時間掛 trace 會越跑越慢、本地狀態檔越長越大。
  3. 把機密寫進 log:trace 會把你的 prompt、環境變數、外接工具(MCP)的往來內容通通寫進日誌檔。

重要提醒

第 3 點最危險。開 trace 收集到的 log 檔,等同機密文件——裡面可能有你的 prompt 全文、環境變數(含路徑、甚至誤帶的 token)。絕對不要直接貼到公開 issue,也不要 commit 進 git。 要回報問題,優先用下一段講的 codex doctor --json(它會自動遮蔽敏感資料)。

已經肚子大了怎麼辦

如果第 2 點已經中鏢,本地那個 SQLite 狀態檔真的長到很誇張(社群回報過幾十 GB 這種等級的案例),與其乾等它自己變小,可以動手處理:

  1. 先到 ~/.codex/ 底下用 du -sh 抓一下實際檔案大小,心裡有個底;
  2. 在 Codex 沒有在跑的時候,對那個 SQLite 檔案跑一次 VACUUM(SQLite 內建的重整指令),把已刪除但還佔著位置的空間真正釋放掉——社群回報有案例從二十幾 GB 壓回不到 100MB;
  3. 真的很在意頻繁寫入,也有人乾脆把整個 log 目錄軟連結(symlink)到記憶體型的暫存路徑(tmpfs),讓寫入落在記憶體而不是實體硬碟——這只是繞過症狀的權宜之計,重開機內容就沒了,別當成長期存檔方式;
  4. 最治本的還是回到第 1 點:trace 用完就關,不要長時間掛著,才不會一直生出新的膨脹量。

重要提醒

上面幾招都是社群整理出來的權宜排除法,不是官方工具或官方建議的標準流程。動手前先確認自己動的是可以重建、壞了也不心疼的狀態檔;還沒讀過的 session 逐字稿(見第 7 章)之類的重要資料,動手前先備份。

16.5.3 codex doctor 進階:六大區段與安全的除錯順序

入門的 16.1 教了 codex doctor 的基本旗標。進階的重點是:讀懂它的報告分成哪幾塊,以及為什麼它該是你除錯的「第一動」而不是 RUST_LOG。

codex doctor 產出的是一份「給技術支援看的」診斷,橫跨六大區段:

區段看什麼什麼時候特別有用
runtime(執行環境)Codex 版本、平台、執行細節怪問題先看版本對不對
auth(認證)token 狀態、能不能 refresh「登入怪怪的」第一站
terminal(終端)終端能力;0.139.0 起含 editor 與 pager 環境細節外部編輯器 / 分頁器行為怪
network(網路)連線 / proxy / 憑證狀態連不上 OpenAI 時
config(設定)設定有沒有被正確讀到「改了沒效果」搭 /debug-config 一起看
local state(本地狀態)session / 快取等本地檔狀態狀態錯亂時

兩個高手才知道的細節:

  • --json 已自動遮蔽敏感資料(redact)。官方原文描述 --json 輸出是「redacted JSON」,所以貼工單 / 問同事時,優先用 codex doctor --json,不要直接貼 RUST_LOG 的原始 log(後者沒遮蔽,見上一段)。
  • /feedback 會盡力附上 doctor 報告。當你在 TUI 裡用 /feedback 把問題回報給維護者時,Codex 會盡力把一份 codex-doctor-report.json 一起送出。所以回報前先確認 doctor 沒紅燈,維護者就能一次拿到完整環境。

小技巧(進階除錯三段式,順序別顛倒)

codex doctor --summary --no-color    # 1. 已遮蔽、最安全,先跑
codex doctor --json                  # 2. 取細節(也已遮蔽,可貼工單)
RUST_LOG=info,codex_core=debug codex # 3. 仍不明朗才開 debug(未遮蔽,自己看就好)

把「已遮蔽、安全」的工具排前面,「會洩密」的 RUST_LOG 排最後,是降低自己不小心外洩機密的好習慣。

16.5.4 trace 看到敏感資料怎麼辦?——redact 的三宗罪

承接上面:當你真的非開 trace 不可,要先有心理準備——log 裡會有三類最容易出事的敏感資料(issue #17320 等社群討論整理):

  1. prompt 全文:你問了什麼、貼了哪些檔案片段,全在裡面。
  2. 環境變數:trace 可能把繼承到子程序的環境變數印出來,萬一你的 shell 裡有 API_KEY / TOKEN 之類,就跟著進 log。
  3. MCP payload:外接工具往來的請求 / 回應內容(可能含第三方憑證)。

處理原則很簡單:

  • 能用 codex doctor --json(自動 redact)就別用裸 RUST_LOG。
  • 真要貼 trace log,先自己手動把疑似 token / 路徑 / email 的字串塗掉再貼。
  • trace log 檔用完就刪,別留在 repo 或共用目錄裡。

重要提醒

上述「trace 會洩這三類」與 WAL 暴衝是社群 issue 觀察,屬實驗性 / 版本相關行為。但「log 等同機密、別外傳」這個原則永遠成立,跟版本無關。

16.5.5 ZDR / disable_response_storage(社群報失效,務必實機驗)

入門的 16.2 已介紹過 ZDR(零資料保留)與 disable_response_storage。這裡補一個進階使用者最容易踩的雷:這個鍵在新版 Rust 的 Codex 上,社群多次回報「設了也沒用」。

複習一下背景。ZDR 環境下,OpenAI 伺服器不保留你上一個回應,而 Codex 預設會「引用上一個回應」來接續對話,於是被擋,典型錯誤是 400 Previous response cannot be used for this organization due to Zero Data Retention。社群解法是在使用者層級 ~/.codex/config.toml 設:

disable_response_storage = true

重要提醒

這個鍵不在官方 Configuration Reference 裡,屬社群來源;而且有使用者在 Rust 版 Codex(issue #1188)回報設了仍 400 / 401。所以:

  1. 務必在你當前的版本實機驗證,不要假設它一定有效(這是 [待確認] 等級,以實機 codex --help 與官方頁為準);
  2. 若仍失敗,跑 RUST_LOG=debug codex 收日誌,再對照 codex doctor 的 auth / network 區段;
  3. 舊的 Node 版 CLI 曾有旗標 --disable-response-storage,新版未必沿用,別照舊文抄。

16.5.6 企業網路:proxy、自簽憑證與沙箱白名單(三件不同的東西)

「公司網路用 Codex」常把三個完全不同的機制搞混,先分清楚:

機制是什麼怎麼設
作業系統 HTTP proxy讓 Codex 透過公司代理伺服器上網HTTPS_PROXY / HTTP_PROXY / NO_PROXY 環境變數(見 16.2)
企業 TLS 憑證信任公司攔截 HTTPS 用的自簽根憑證CODEX_CA_CERTIFICATE 指向 PEM(見 16.2)
沙箱網路白名單代理限制沙箱內的程式只准連哪些網域features.network_proxy.* 或 profile 的 [permissions.<name>.network](見下)

第三個——沙箱網域白名單——是企業安全強化的重點,它跟「公司 proxy」不是同一回事。它讓 Codex 跑出來的指令只能連你允許的網域,擋掉資料外洩 / 供應鏈攻擊。新版的權限 profile 寫法(詳見安全章節)長這樣:

[permissions.net-allowlist]
extends = ":workspace"

[permissions.net-allowlist.network]
enabled = true

[permissions.net-allowlist.network.domains]
"registry.npmjs.org"      = "allow"   # 確切 host
"*.npmjs.org"             = "allow"   # 只 subdomain(不含 apex)
"**.example.com"          = "allow"   # apex + 所有 subdomain
"ads.example.com"         = "deny"    # deny 勝出
# 其餘未列即不放行;另有 private-IP guard 防 DNS rebinding

幾個高手才知道的網域語意(官方逐字):

  • example.com → 只該 host;*.example.com只 subdomain、不含 apex;**.example.com → apex 加所有 subdomain;*只能用於 allow,不能用於 deny
  • 同網域同時命中 allow 與 deny 時,deny 勝出
  • 預設有 DNS rebinding / 私網防護:解析到非公開(private)IP 的 host 會被擋;要放行本機服務得顯式 allowallow_local_binding = true

重要提醒

沙箱網路白名單有一個已知 bug(issue #16242):某些版本下 codex sandbox 會正確擋(回 403),但 codex exec 與互動模式卻直接放行(白名單沒生效)。所以企業部署前,務必用一個「不在白名單」的網域實測它真的有擋到(例如讓 agent curl 一個未列的域,看是否被拒)。狀態以你當前版本為準。

重要提醒

danger-full-access 模式下就算加了集中 deny 名單(experimental_network.danger_full_access_denylist_only),官方也明文那是 best-effort、不是真隔離——模型仍可能繞道。真要全放,只在隔離 VM / 容器 / CI 裡做。

16.5.7 把 token 當錢:用量與成本進階追蹤

入門的 16.4 教了 /status 查剩餘額度。進階使用者還會用這幾招把 token 用量盯得更細:

內建工具(TUI 內輸入):

指令看什麼
/status當前 model、token 用量、overhead;session 設定
/usage帳號的 daily / weekly / cumulative(每日 / 每週 / 累積)token 活動(0.140.0 新增)

小技巧

/usage 是 0.140.0 才加進來的內建用量檢視。CLI 的 slash 指令清單會隨版本變動,實際以你 session 裡輸入 / 跳出的清單為準,完整速查見附錄 A

為什麼 context 一開始就被吃掉?——隱藏的 token overhead。很多人沒意識到,還沒輸入任何字,光是「載入工具」就先燒掉一堆 token(第三方量測,僅供量級概念):

來源每回合大約 overhead
系統 prompt2,000–5,000(但有快取,之後降到零頭)
單一外接工具(MCP)server200–500
工具很多的 MCP server(例:93 個工具的 GitHub MCP)可達數萬 / 回合,還沒輸入就吃掉
讀一個 500 行的檔約 15,000 input(無自動截斷,整檔進 context)

第一省錢動作

/mcp(詳見第 9 章)盤點外接工具,關掉用不到的 MCP server。工具越多、每回合固定 overhead 越高。

用 config 控制成本——幾個跟省 token 直接相關的設定鍵:

# 蓋住「單次工具輸出 / 檔案讀取」最多吃多少 token
tool_output_token_limit = 12000

# 比預設更早觸發自動壓縮(避免拖到滿才壓)
model_auto_compact_token_limit = 64000

# 回應更精簡 / 不要 reasoning 摘要,省 output token
model_verbosity = "low"
model_reasoning_summary = "none"

小技巧

與其等系統在 context 快滿(約 95%)才自動壓縮,不如約 60% 就手動 /compact 一次乾淨的。多次連環壓縮會累積資訊流失,大型重構任務寧可早壓一次。

重要提醒

tool_output_token_limit / model_auto_compact_token_limit 這類鍵名與上面的 overhead 數字,部分來自第三方量測 / 社群整理,鍵名以官方 Configuration Reference 實機為準,數字只當量級概念,不是保證值。

還有一種情況比「快滿了」更棘手:根本沒讓你來得及手動處理,就直接跳出 context window exceeded(上下文視窗爆了)這種錯誤,對話卡住動彈不得。這時候與其一路猛按 /compact 想把它壓回去,更多時候更好的做法是乾脆開一條全新的 session,再用第 7 章教過的 codex resume --last 把剛剛那條接回來——它接回的是「對話記憶」,你可以趁機讓它只帶回真正需要的部分,而不是把整包已經爆掉的脈絡硬塞回一個已經滿出來的視窗。

另外有個容易被忽略的爆表元凶:不是對話講太久,而是單一次工具輸出太肥大。叫它跑一次測試,結果印出幾百筆結果原封不動塞進對話裡,單單這一次就可能直接把預算炸穿,跟「講了多久」完全無關——這正是前面 tool_output_token_limit 值得設的理由,它擋的就是這種一次性的巨量輸出。

小技巧

順帶一提,resume --last 接續舊 session 還有個隱藏好處:AGENTS.md、對話歷史、先前的工具輸出這類「被延續下來」的內容,有機會吃到 cache 折扣價(第三方觀察約九成折扣,實際依帳號與版本而定)。長任務養成「先 resume 再開工」的習慣,通常比每次都重新開一條、讓它整包重新讀一次專案上下文划算。

16.5.8 用 .rules 規則檔配 execpolicy,減少「核准疲勞」

如果你發現自己每天都在對同一類指令按核可——像 git statusnpm run lint 這種你早就知道無害的動作,卻一直被跳出來問,問到最後養成「看到提示就反射性按同意」的壞習慣(這就是所謂的核准疲勞,approval fatigue),那其實可以把這些「已知安全」的指令模式事先寫成規則,讓 Codex 自己判斷、不用每次都問。

規則檔用 Starlark 語法寫(語法長得像 Python,但設計成不能有副作用,執行起來相對安全),放在使用者層級 ~/.codex/rules/,或專案裡的 .codex/rules/(專案層級,一樣要先信任這個專案才會被讀取)。核心是一個 prefix_rule() 函式:

# ~/.codex/rules/default.rules
prefix_rule(
    pattern = ["git", "status"],
    decision = "allow",
    justification = "唯讀查詢,安全",
)

prefix_rule(
    pattern = ["rm", "-rf"],
    decision = "forbidden",
    justification = "毀滅性操作,一律擋下",
)

每條規則給一個指令前綴(pattern)、一個判定(decision,可以是直接放行的 allow、照舊詢問的 prompt、或直接擋下不給跑的 forbidden),再加一句給自己看的理由(justification)。同一個指令如果同時命中好幾條規則,採用最嚴格的那個結果——forbidden 蓋過 prompt,prompt 蓋過 allow

寫完不用直接拿去正式環境賭一把,先離線驗證規則判定得對不對:

codex execpolicy check --rules ~/.codex/rules/default.rules "git status"

小技巧

想再嚴謹一點,可以把這行驗證指令放進 CI,當作規則檔案自己的 lint 關卡——規則檔案哪天改壞了(例如手滑把 forbidden 打成 prompt),CI 先幫你抓到,不用等到正式環境才發現「這個危險指令怎麼直接放行了」。

重要提醒

execpolicy 跟前面提過的 codex sandbox 一樣,官方標示為 Experimental(實驗性),語法與行為都可能隨版本調整。這裡示範的 pattern / decision / justification 三個欄位,以官方文件與你實機 codex execpolicy --help 為準。

16.6 本章小結

走到這裡,你已經會在 Codex 出狀況時自己救自己了:

  • 三件套照妖鏡:codex doctor 健檢、RUST_LOG=debug 開日誌、--strict-config 抓拼錯;「retry without sandbox」迴圈的三個真根因(bwrap 未裝、sandbox_moderead-only、寫到工作區外),外加 codex sandbox 先乾跑再讓 agent 動手;
  • 連不上網:設好 HTTPS_PROXY 代理、CODEX_CA_CERTIFICATE 企業憑證;ZDR 用 disable_response_storage(但要實機驗);
  • Windows / WSL:用 WSL2、登入卡住改 --device-auth、怪問題先 codex update;原生沙箱建立失敗(Error 1385 等)先疑企業原則,「stream disconnected」別急著當限流,先排查 VPN / 防毒;
  • 額度管理:CLI 跟網頁 / IDE 共用 5 小時視窗,/status 隨時查,credits 制與 API 美元制是兩套;/status 顯示還有額度卻仍被擋,留意「幽靈限流」這個已知怪象;
  • 高手進階(16.5):RUST_LOG 可 per-module 精準 trace;codex doctor 六大區段 + --json 自動遮蔽,該排在除錯第一動;trace 三宗罪(慢 / WAL 暴衝 / 洩 prompt·env·MCP)所以 log 等同機密,WAL 真的爆了用 VACUUM 或 tmpfs symlink 應急;ZDR disable_response_storage 社群報失效須實機驗;企業 proxy / 自簽憑證 / 沙箱網域白名單是三件不同的事;tool_output_token_limit/usage、早 /compact 把 token 當錢管;context window exceeded 別狂壓 /compact,開新 session 配 resume --last 常更省;.rules 規則檔配 execpolicy 減少核准疲勞。

動手試試

  1. 跑一次 codex doctor --summary,看看你目前的環境狀態。
  2. 在 CLI session 裡輸入 /status,確認你還剩多少額度。
  3. (進階)用 RUST_LOG=info,codex_core=debug codex 啟動一次,觀察日誌多了哪些訊息,再 tail -F ~/.codex/log/codex-tui.log 看寫進檔案的內容。

總提醒

本章所有逐字旗標、設定鍵、模型名與數字,都是 2026-06-17 對 Codex CLI 0.140.0 的快照。Codex 更新極快,使用前請以實機 codex --help / codex doctor / /model 與官方頁面為最終真相。