Codex CLI v0.156.0 實戰:/tui 全螢幕、/usage 用量分析、worktree 平行開工一次搞懂
Codex CLI 的 rust-v0.156.0 在 2026-09-22 發布。release note 的新功能只有六條,大部分人會先注意到「語音預設開啟」和「六個新主題」。不過真正會改變你每天開 Codex 方式的是另外三件事:
/tui:選擇下次啟動要不要換成全螢幕介面,裡面有 transcript 搜尋、滑鼠選取和右鍵複製。/usage分析儀表板:token 總量、7 天或 30 天的趨勢,以及你實際用了哪些 plugin 和 skill。- worktree 預設啟用:
--worktree和 agent command center 的w鍵不用再到/experimental打開,拿到就能用。
這篇會把這三件事拆開講:每個功能背後做了什麼(直接看 PR 和原始碼)、怎麼設定、什麼時候該用、什麼時候別用。先講清楚一點:以下機制都是從 openai/codex 的 PR 說明和 rust-v0.156.0 tag 的原始碼讀出來的,不是實測心得。需要自己驗證的地方會標成「值得實測」。
本文大綱
先更正一個容易誤讀的地方:「預設 worktree」不是「每個 session 都開 worktree」
release note 原文是 "worktree support is now enabled by default"。對應的 PR #44870(作者 @bc-openai)實際做的事是:把 worktrees 這個 feature flag 從實驗階段改成 Stable,而且 default_enabled: true,同時從 /experimental 選單移除。
所以意思是這個能力預設可以用,不是 Codex 會自動把每個新 session 丟進 worktree。你照常執行 codex,它還是在目前目錄工作。要開隔離環境得自己下指令,下面會講怎麼做。
想關掉的話,在 ~/.codex/config.toml 加:
[features]
worktrees = false
一、worktree:讓多個 agent 同時動同一個 repo,互不踩線
為什麼需要
平行跑兩三個 Codex session 已經很常見:一個修 bug、一個補測試、一個試重構。問題是它們都在同一個工作目錄改檔案。A 改到一半的檔案被 B 讀到,B 跑 git stash 把 A 的變更一起收走,最後 diff 混在一起分不開。
git worktree 是 Git 內建的解法:同一個 .git 資料庫,可以同時 checkout 出多個工作目錄。v0.156.0 做的事,是把「建 worktree → 把 session 綁上去 → 失敗時保留現場」這整段流程收進 Codex。

運作原理(從原始碼看)
核心在 codex-rs/worktree 這個 crate 的 WorktreeManager::create,大致分五步:
- 決定基準 commit:
git rev-parse --verify <base>^{commit}。沒指定 base 時用HEAD。 - 配置目錄:預設在
$CODEX_HOME/worktrees/(通常是~/.codex/worktrees/),底下再用隨機 UUID 的前 4 碼開一層 bucket,最後是 repo 名稱,例如~/.codex/worktrees/3f9a/my-repo。在 macOS 上還會放一個.metadata_never_index,讓 Spotlight 不去索引。 - 建立 worktree:
git worktree add --detach --no-checkout <path> <sha>。注意是 detached HEAD,Codex 不會替你開新分支。 - 只寫目的地自己的 config:用
git config --file <config.worktree> core.worktree <path>,不動原 repo 的共用設定。接著執行git reset --hard <sha>把檔案展開。 - 綁定 thread:session 啟動後,把 thread ID 綁到這個 checkout。如果啟動中途失敗,checkout 會留著,Codex 會印出路徑,並提示你用
git worktree remove <checkout-path>手動清理,而且明講「Do not use –force」。
裡面有兩個設計對日常使用影響很大:
- 你原本目錄裡未 commit 的變更不會被帶過去。 worktree 是從某個 commit 展開的乾淨副本,而且原目錄不會被動到(PR #45276 的說法是 "Preserve the selected subdirectory and source checkout edits")。
- CLI 版不會自動清理。
WorktreeSettings::for_cli會把auto_cleanup_enabled強制設成false。自動清理和worktree-keep-count(預設 15)是 Desktop 那邊的設定。用 CLI 開的 worktree,要自己收。
兩個入口,基準 commit 不一樣
這點很容易踩到,拆開講:
| 入口 | 基準 commit | 適合 |
|---|---|---|
codex --worktree "任務描述" |
目前 repo 的 HEAD |
接續你手上分支的進度,開一條平行支線 |
codex agents → 按 w |
專案預設分支(優先 remote HEAD,再退到 origin/main、origin/master、main、master),不會 fetch |
從主線開一個全新的獨立任務 |
第二列出自 default_worktree_base() 的實作和 PR #45276(作者 @etraut-openai)。「不會 fetch」代表如果你本機的 origin/main 很久沒更新,agent 就會在舊的主線上工作。開之前先 git fetch,這是最實用的一招。
另外,--worktree 能用在哪些指令,原始碼裡有明確限制:
# ✅ 支援
codex --worktree "把 auth middleware 抽成獨立模組"
codex exec --worktree "跑完整測試並修掉 flaky test"
codex exec fork --worktree <SESSION_ID>
codex fork --worktree <SESSION_ID> # fork 必須指定 session ID
# ❌ 會被拒絕
codex fork --worktree --last # 需要明確的 session ID
codex resume --worktree ... # 不能拿既有 session 開 worktree,要改用 exec fork
來源的專案如果被你明確標成 untrusted,--worktree 也會直接拒絕,錯誤訊息是 "cannot create a checkout from an explicitly untrusted source"。
手把手:三個 agent 平行開工
# 0. 先同步 remote,避免 agent 在舊主線上工作
git fetch origin
# 1. 開 agent command center(需要共享的本機 daemon)
codex agents
# 2. 在 command center 裡按 w,建立一個 worktree session
# 重複三次,分別貼入三個任務
v0.156.0 對 command center 也做了幾個改動(都是 @etraut-openai 的 PR):
- 狀態分頁(#46839):All / Needs you / Working / Ready / Inactive。用
Tab和Shift+Tab切換,可以跟搜尋一起用。平行跑三個 agent 的時候,停在「Needs you」就好,只處理在等你核可的那個。 - token 與用量估算(#44970):每個 task 旁邊直接顯示耗用。
- 啟動時只載入最近 10 個 session(#46579)。
做完之後的收尾流程建議這樣走:
# 3. 在 worktree 裡確認 diff,替 agent 的成果開一個分支(因為它是 detached HEAD)
cd ~/.codex/worktrees/3f9a/my-repo
git switch -c agent/extract-auth
git push -u origin agent/extract-auth
# 4. 合併或放棄之後,從原 repo 清掉
cd ~/code/my-repo
git worktree list
git worktree remove ~/.codex/worktrees/3f9a/my-repo
Prompt 小技巧:在 worktree session 的第一句 prompt 講清楚「你在一個隔離的 worktree,完成後請 commit 並告訴我 commit SHA,不要 push」。detached HEAD 上的 commit 如果沒人記下來,清掉 worktree 之後只能去 reflog 撈。
一個常見錯誤
如果你的本機 daemon 版本比較舊,不支援 thread/backgroundTerminals/list,Codex 會擋下 worktree 建立和 /cd,並提示你更新 daemon(#44870)。v0.156.0 同時加了 /daemon 選單(#45854),可以在 TUI 裡直接更新,選「最新 stable」或「用目前 CLI 的套件」。不想碰共享 daemon 的話可以用 codex --no-daemon(#46088),但要注意它跟 codex agents、--remote、codex queue 不能一起用,因為這些都需要 server 連線。
二、/tui:全螢幕模式,長 session 終於能回頭找東西
它改了什麼
PR #46883(作者 @fcoury-oai)加的 /tui 是一個下次啟動才生效的選擇器。你在 Scrollback(原本的模式)和 Fullscreen 之間選一個,確認後寫進 user config 的 tui.fullscreen_transcript,目前這個 session 不會變。所以選完要重開 Codex。
直接改設定檔也可以:
[tui]
fullscreen_transcript = true
原始碼裡的舊 feature flag 已經標成 deprecated no-op,註解明確寫著改用 [tui].fullscreen_transcript。如果你以前是靠 /experimental 開全螢幕,記得搬過來。
全螢幕模式裡能做的事
- 搜尋 transcript(#46734,@etraut-openai):按
F3,或在 transcript pager 裡按/。這是不分大小寫的字面比對(不是 regex),會視需要往前載入更早的歷史,可以雙向跳。關掉 Find 後會回到原本的閱讀位置。 - 逐段展開 activity:按
F4聚焦到某一組 activity,看某次工具呼叫的細節。 - 滑鼠選取與複製(#46732、#46895):可以選單字、選整行、拖曳時自動捲動,鍵盤選取用
Ctrl+Space。在 transcript 或輸入框按右鍵就會複製選取內容。複製時會保留原文的縮排、tab 和硬換行,但會排除顯示用的 gutter 和軟換行。這點對複製程式碼很重要,以前從終端機複製常會多出行號或斷行。 - 快捷鍵可以在
tui.keymap自訂,對應的 key 是global.find_transcript、global.focus_activity、pager.find。新的預設綁定會讓位給你已經設定好的自訂綁定。
什麼時候該開,什麼時候別開
- 該開:session 很長、要回頭找「剛剛那個 migration 指令是什麼」;需要從 agent 的回覆裡複製大段程式碼;常在 tmux 或 SSH 裡用(這版也修了 tmux/SSH 的剪貼簿轉送,#45457)。
- 先別開:你很依賴終端機原生的 scrollback 和選取行為,或者會把 Codex 輸出 pipe 或錄製起來。全螢幕模式會接管滑鼠,跟你習慣的終端機操作可能衝突。值得實測的點:你用的終端機(iTerm2、WezTerm、Windows Terminal)在右鍵複製時,會不會跟它自己的右鍵選單搶事件。
三、/usage:弄清楚 token 花在哪裡,順便看哪些 skill 真的有用
它顯示什麼
PR #45764 和 #45769(作者都是 @fcoury-oai)在 /usage 選單加了 "View analytics",會開一個全螢幕儀表板:
- Summary 分頁(預設):帳號身份、token 總量、連續使用天數(streaks)、活動洞察,以及最常用的 plugin 和 skill。
- 每日、每週、累計的 token 活動圖。
- 7 天或 30 天範圍、報表分組、每日明細、依模型篩選 token 用量、重新整理。
- 帳號類型不同,看到的東西也不同:一般消費者帳號看用量和訊息數,Business/Enterprise 看 credits 和 token 用量,兩種都能看 plugin 和 skill 的活動。
/usage weekly 這類明確模式會直接打開 Summary 並切到對應的視圖。
注意:PR 寫的是這個入口是給 ChatGPT 帳號用的。如果你是用 API key 登入,從 PR 說明看不出有沒有這個儀表板,這點我沒有查證到,先別期待。
實戰用法:拿它來做 skill 和 plugin 的斷捨離
多數人裝了一堆 skill 和 MCP plugin,卻不知道哪些真的有被呼叫。每個 skill 的描述都會佔一部分 context。建議這樣做:
- 打開
/usage→ View analytics → 範圍選 30 天。 - 看 Summary 裡「最常用的 plugin/skill」。30 天內從沒出現過的,就是可以拿掉的候選。
- 用模型篩選看 token 分布。如果某個昂貴模型的佔比異常高,回頭檢查是不是
config.toml的預設模型設錯了。 - 搭配 command center 每個 task 的 token 估算(#44970),可以找出單一任務特別燒 token 的模式。常見的原因是 prompt 沒有限定範圍,讓 agent 把整個 repo 讀了一遍。
數據與限制
這一版沒有公布任何效能或效率數字,以下是從原始碼和 PR 讀到的硬限制與預設值:
- Desktop 的 worktree 保留數預設 15(
DEFAULT_WORKTREE_KEEP_COUNT),CLI 不會自動清理。 - Command center 啟動時載入 10 個最近 session(#46579)。
/usage範圍只有 7 天或 30 天兩種。- worktree 建立不會 fetch,資料新不新取決於你本機的 remote refs。
- 所有入口都建立 detached HEAD,分支要自己開。
- 其他值得一提的修正:turn 失敗或中斷時保留已串流的回答和計畫(#45549、#46867)、resume 時會恢復 Plan mode(#45519),以及補上 Windows、Linux、macOS 的幾個 sandbox 隔離漏洞(#44639、#45984、#46500)。
對工程團隊的意義:三條可以直接寫進團隊規範的做法

1. 平行任務一律開 worktree,單一任務照舊。 worktree 的成本是磁碟空間加上收尾工作,一次只跑一個 agent 的時候不值得。規則很簡單:同時跑兩個以上 agent 動同一個 repo,就用 codex agents + w,或 codex --worktree。
2. 在 AGENTS.md 寫下 worktree 的收尾協定。 例如:
## Worktree 協定
- 若目前在 ~/.codex/worktrees/ 底下:完成後 commit,並回報 SHA 與建議分支名
- 不要 push、不要 rebase 主線
- 不要執行 git worktree remove(由人類收尾)
這樣 agent 在 detached HEAD 上做完的成果才不會消失。
3. 每月看一次 /usage 的 30 天報表。 把一次都沒被用到的 skill 和 plugin 移除,同時檢查模型用量分布。這是成本最低、又能同時省 context 的整理方式。
升級方式照舊:npm i -g @openai/codex@latest,或者用 release 頁的安裝腳本。升級後先執行 /daemon 確認本機 daemon 也是新版,否則 worktree 和 /cd 可能會被擋下。
來源
- openai/codex Release rust-v0.156.0(OpenAI Codex 團隊):https://github.com/openai/codex/releases/tag/rust-v0.156.0
- PR #44870 Enable worktrees by default(@bc-openai):https://github.com/openai/codex/pull/44870
- PR #45276 Add worktree session creation to the agents overview(@etraut-openai):https://github.com/openai/codex/pull/45276
- PR #46839 Status filter tabs in the agent command center(@etraut-openai):https://github.com/openai/codex/pull/46839
- PR #46883 Add
/tui(@fcoury-oai):https://github.com/openai/codex/pull/46883 - PR #46732 / #46734 Transcript selection, copying, search(@etraut-openai):https://github.com/openai/codex/pull/46732 、https://github.com/openai/codex/pull/46734
- PR #45764 / #45769
/usageanalytics dashboard(@fcoury-oai):https://github.com/openai/codex/pull/45764 、https://github.com/openai/codex/pull/45769 - PR #45854
/daemon、#46088--no-daemon(@etraut-openai):https://github.com/openai/codex/pull/45854 、https://github.com/openai/codex/pull/46088 - 原始碼
codex-rs/worktree/src/lib.rs、settings.rs、git.rs(tag rust-v0.156.0):https://github.com/openai/codex/tree/rust-v0.156.0/codex-rs/worktree/src
整理:DataAgent · Coding Agent 實戰教學
成本可見度與「改了到底有沒有變好」的評估門檻,是團隊導入 coding agent 最常缺的一塊。完整做法:
coding agent 導入與治理 — 企業內訓與顧問 →


