第 16 章
疑難排解、安全與資源管理
Codex CLI 是一個會直接動你電腦的 AI 工程師,而這一章是它的「健檢室 + 行車記錄器 + 帳單櫃台」。
想像你請了一位很厲害的助手在家裡幫你做事。大多數時候它都很順,但偶爾會卡住:可能是它連不上網(公司網路擋住了)、可能是它登入失敗(識別證過期了)、可能是它在 Windows 上跟你「斷線重連」鬧脾氣,也可能是你這個月的「使用點數」快用光了。
這一章就是教你:當 Codex 出狀況時,怎麼一步步把問題找出來、修好;以及怎麼盯著你的額度,不要莫名其妙就被擋下來。
你會學到:
- 「先做哪一步」的診斷三件套(健檢、開日誌、抓設定拼錯);
- 公司網路 / 代理伺服器 / 自簽憑證後面怎麼讓它連得上;
- Windows 與 WSL 上最常見的幾個坑;
- 你的方案、額度、5 小時視窗到底怎麼算,怎麼查還剩多少。
重要提醒
Codex CLI 更新極快(常常幾天就一版),指令與旗標會變。本章所有逐字旗標、設定鍵、模型名稱,最終都以你電腦上實機跑 codex --help、codex <子指令> --help、codex 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 的環境變數,用來控制「要錄多詳細的日誌」。等級由淺到深有五級:error、warn、info、debug、trace。
最常用的就是在指令前面加上 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.toml 找 sandbox_mode | read-only 的設計就是「任何改動都要核可」,不管 approval_policy 設多寬鬆都一樣會跳提示。改成 sandbox_mode = "workspace-write"(或啟動時直接下 --sandbox workspace-write)才是對症下藥 |
| 想寫的路徑落在工作區之外(常見於某些建置工具、套件快取路徑) | 看錯誤訊息裡有沒有提到工作區外的路徑 | 用 --add-dir <路徑> 額外授權那個目錄可寫,不要為了這個直接升級成 danger-full-access(見第 6 章) |
| 特定版本才有的已知迴圈 bug | 跑 codex --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_PROXY 與 https_proxy)。實際行為以實機為準。
企業 TLS 攔截 / 自簽憑證
很多公司會在中間「攔截」你的 HTTPS 連線做檢查(這叫 TLS 攔截),用的是公司自己的根憑證。這時 Codex 會因為「不認得這張憑證」而連線失敗。解法是告訴 Codex 信任公司那張憑證:
| 環境變數 | 用途 |
|---|---|
CODEX_CA_CERTIFICATE | 指向公司的 PEM 憑證檔(CA bundle),用於企業 TLS 攔截或私有根憑證 |
SSL_CERT_FILE | 當 CODEX_CA_CERTIFICATE 沒設時的後備憑證路徑 |
在公司代理後面登入失敗時,標準解法是先設憑證、再登入:
export CODEX_CA_CERTIFICATE=/path/to/corp-ca.pem
codex login
進階:Codex 內建的沙箱網路代理(experimental)
這是另一個完全不同的東西,別跟上面的公司代理搞混。Codex 自帶一個「沙箱內的網域白名單代理」,可以控制沙箱裡的程式只准連哪些網域。鍵在 features.network_proxy.* 底下:
| 鍵 | 預設值 | 說明 |
|---|---|---|
features.network_proxy.enabled | false | 啟用沙箱網路代理 |
features.network_proxy.domains | — | 網域規則(allow / deny 名單) |
features.network_proxy.proxy_url | http://127.0.0.1:3128 | HTTP 監聽位址 |
features.network_proxy.socks_url | http://127.0.0.1:8081 | SOCKS5 監聽位址 |
features.network_proxy.allow_upstream_proxy | true | 是否允許串接上游(公司)代理 |
features.network_proxy.enable_socks5 | true | 啟用 SOCKS5 |
啟用範例:
codex -c "features.network_proxy.enabled=true"
重要提醒
這是實驗性功能,而且 socks_url 的預設值官方原文標成 http:// 開頭(看起來怪怪的,但那是官方原文)。實機以 codex --help 與 Configuration 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 / 憑證擋住。處理方向:
- 改用裝置碼登入:
codex login --device-auth(不開瀏覽器,適合無頭 / 遠端環境); - 檢查 proxy 設定(見 16.2);
- 設好企業憑證
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 流量的中介層,都可能把一條長時間沒有新資料進出的連線當成異常砍斷。伺服器那頭的回應其實可能還在算,只是半路被攔腰打斷,回傳的錯誤訊息卻長得跟真的限流一模一樣。
遇到這句話,不要直接假設是配額問題,照這個順序排查:
- 跑一次
codex update,確認自己是最新版; - 檢查電腦上有沒有在跑 VPN 或防毒軟體的即時掃描,能不能先暫時關閉測試;
- 真的要確認額度,回頭用 16.4 教的
/status查實際剩多少,別只看錯誤訊息表面的字。
近期的 Windows 改善
官方 changelog 顯示 Windows / WSL 支援持續硬化中,包括:新增 /usr/bin/bash shell 後備、縮短 Linux proxy socket 路徑、改進 WSL 本地探索邊界、改善 Windows sandbox(沙箱)設定診斷。所以如果你遇到 Windows 專屬怪問題,先 codex update 升到最新版往往就好了。
官方參考
Changelog、Authentication、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 |
| Pro | From $100 / 月 | rate limit 為 Plus 的 5x 或 20x |
| Business | Pay-as-you-go(按用量,每席次) | 團隊席次 |
| Enterprise / Edu | Contact 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.5 | 15–80 |
| GPT-5.4 | 20–100 |
| GPT-5.4 mini | 60–350 |
Pro 5x 等級
| 模型 | 訊息數範圍 |
|---|---|
| GPT-5.5 | 75–400 |
| GPT-5.4 | 100–500 |
| GPT-5.4 mini | 300–1,750 |
Pro 20x 等級
| 模型 | 訊息數範圍 |
|---|---|
| GPT-5.5 | 300–1,600 |
| GPT-5.4 | 400–2,000 |
| GPT-5.4 mini | 1,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 / 1M | Cached Input / 1M | Output / 1M |
|---|---|---|---|---|
gpt-5.3-codex | Standard | $1.75 | $0.175 | $14.00 |
gpt-5.3-codex | Priority | $3.50 | $0.35 | $28.00 |
重要提醒
其他帶 codex 字樣的模型(gpt-5.5-codex / gpt-5.4-codex 等)目前沒有出現在 API 美元定價頁。模型陣容變動快,書中數字務必對照官方頁的當下版本——以 OpenAI API 定價頁 為準。
怎麼查我還剩多少額度?
兩個方法,記起來:
- 在 CLI session 裡——直接輸入 slash 指令
/status,官方原文:「If you want to see your remaining limits during an active Codex CLI session, you can use/status.」 - 開 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 --help、codex <子指令> --help、codex doctor、codex 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_manager、files)是社群實證的常用 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 有三個你必須知道的副作用,日常千萬別掛著:
- 拖慢執行:第三方觀察
trace/debug可能讓執行慢 10–50%。日常用info/warn,只在主動除錯時開。 - 撐爆本地 state:有一個已知問題(issue #17320)——開
TRACE時 Codex 底層的 SQLite 會過量寫入 WAL(寫前日誌),長時間掛 trace 會越跑越慢、本地狀態檔越長越大。 - 把機密寫進 log:
trace會把你的 prompt、環境變數、外接工具(MCP)的往來內容通通寫進日誌檔。
重要提醒
第 3 點最危險。開 trace 收集到的 log 檔,等同機密文件——裡面可能有你的 prompt 全文、環境變數(含路徑、甚至誤帶的 token)。絕對不要直接貼到公開 issue,也不要 commit 進 git。 要回報問題,優先用下一段講的 codex doctor --json(它會自動遮蔽敏感資料)。
已經肚子大了怎麼辦
如果第 2 點已經中鏢,本地那個 SQLite 狀態檔真的長到很誇張(社群回報過幾十 GB 這種等級的案例),與其乾等它自己變小,可以動手處理:
- 先到
~/.codex/底下用du -sh抓一下實際檔案大小,心裡有個底; - 在 Codex 沒有在跑的時候,對那個 SQLite 檔案跑一次
VACUUM(SQLite 內建的重整指令),把已刪除但還佔著位置的空間真正釋放掉——社群回報有案例從二十幾 GB 壓回不到 100MB; - 真的很在意頻繁寫入,也有人乾脆把整個 log 目錄軟連結(symlink)到記憶體型的暫存路徑(tmpfs),讓寫入落在記憶體而不是實體硬碟——這只是繞過症狀的權宜之計,重開機內容就沒了,別當成長期存檔方式;
- 最治本的還是回到第 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 等社群討論整理):
- prompt 全文:你問了什麼、貼了哪些檔案片段,全在裡面。
- 環境變數:
trace可能把繼承到子程序的環境變數印出來,萬一你的 shell 裡有API_KEY/TOKEN之類,就跟著進 log。 - 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。所以:
- 務必在你當前的版本實機驗證,不要假設它一定有效(這是 [待確認] 等級,以實機
codex --help與官方頁為準); - 若仍失敗,跑
RUST_LOG=debug codex收日誌,再對照codex doctor的 auth / network 區段; - 舊的 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 會被擋;要放行本機服務得顯式
allow加allow_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 |
|---|---|
| 系統 prompt | 2,000–5,000(但有快取,之後降到零頭) |
| 單一外接工具(MCP)server | 200–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 status、npm 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_mode卡read-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 應急;ZDRdisable_response_storage社群報失效須實機驗;企業 proxy / 自簽憑證 / 沙箱網域白名單是三件不同的事;tool_output_token_limit、/usage、早/compact把 token 當錢管;context window exceeded別狂壓/compact,開新 session 配resume --last常更省;.rules規則檔配execpolicy減少核准疲勞。
動手試試
- 跑一次
codex doctor --summary,看看你目前的環境狀態。 - 在 CLI session 裡輸入
/status,確認你還剩多少額度。 - (進階)用
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 與官方頁面為最終真相。