AI 工程

Codex CLI v0.156.0 實戰:/tui 全螢幕、/usage 用量分析、worktree 平行開工一次搞懂

Codex CLI 的 rust-v0.156.0 在 2026-09-22 發布。release note 的新功能只有六條,大部分人會先注意到「語音預設開啟」和「六個新主題」。不過真正會改變你每天開 Codex 方式的是另外三件事:

  1. /tui:選擇下次啟動要不要換成全螢幕介面,裡面有 transcript 搜尋、滑鼠選取和右鍵複製。
  2. /usage 分析儀表板:token 總量、7 天或 30 天的趨勢,以及你實際用了哪些 plugin 和 skill。
  3. 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 建立 managed worktree 的流程:兩個入口、git worktree add --detach、綁定 thread

運作原理(從原始碼看)

核心在 codex-rs/worktree 這個 crate 的 WorktreeManager::create,大致分五步:

  1. 決定基準 commitgit rev-parse --verify <base>^{commit}。沒指定 base 時用 HEAD
  2. 配置目錄:預設在 $CODEX_HOME/worktrees/(通常是 ~/.codex/worktrees/),底下再用隨機 UUID 的前 4 碼開一層 bucket,最後是 repo 名稱,例如 ~/.codex/worktrees/3f9a/my-repo。在 macOS 上還會放一個 .metadata_never_index,讓 Spotlight 不去索引。
  3. 建立 worktreegit worktree add --detach --no-checkout <path> <sha>。注意是 detached HEAD,Codex 不會替你開新分支。
  4. 只寫目的地自己的 config:用 git config --file <config.worktree> core.worktree <path>,不動原 repo 的共用設定。接著執行 git reset --hard <sha> 把檔案展開。
  5. 綁定 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/mainorigin/mastermainmaster),不會 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。用 TabShift+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--remotecodex 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_transcriptglobal.focus_activitypager.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。建議這樣做:

  1. 打開 /usage → View analytics → 範圍選 30 天
  2. 看 Summary 裡「最常用的 plugin/skill」。30 天內從沒出現過的,就是可以拿掉的候選。
  3. 模型篩選看 token 分布。如果某個昂貴模型的佔比異常高,回頭檢查是不是 config.toml 的預設模型設錯了。
  4. 搭配 command center 每個 task 的 token 估算(#44970),可以找出單一任務特別燒 token 的模式。常見的原因是 prompt 沒有限定範圍,讓 agent 把整個 repo 讀了一遍。

數據與限制

這一版沒有公布任何效能或效率數字,以下是從原始碼和 PR 讀到的硬限制與預設值

  • Desktop 的 worktree 保留數預設 15DEFAULT_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)。

對工程團隊的意義:三條可以直接寫進團隊規範的做法

v0.156.0 三大變更的使用時機速查

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 可能會被擋下。

來源

整理:DataAgent · Coding Agent 實戰教學

成本可見度與「改了到底有沒有變好」的評估門檻,是團隊導入 coding agent 最常缺的一塊。完整做法:
coding agent 導入與治理 — 企業內訓與顧問 →

發表迴響

%d 位部落客按了讚: