Codex CLI 0.169.0 實戰:多分頁 side chat、折疊工具雜訊,還有一個會改變 CI 行為的 --trust

Codex CLI 0.169.0 讓 side chat 變成可存檔的多分頁、能把每輪工具活動折起來只看問答,並要求 codex exec 明確用 --trust 才載入專案設定與 MCP server。本文整理怎麼開、怎麼用,以及 CI 升級前要檢查什麼。

AI Academy 編輯部2026年11月14日

你應該遇過這種時刻:Codex 正在幫你重構一整包 auth middleware,跑到一半,你突然想問一句「這個 API 回傳的 error code 到底有哪些?」。直接在主對話裡問,等於在 agent 的工作脈絡裡插一段不相干的東西,後面它可能因此分心;不問,又得切去瀏覽器或另開一個 terminal 從頭解釋專案背景。

OpenAI 在 2026-11-13 發布的 Codex CLI rust-v0.169.0,有三個改動剛好對準「長時間跟 agent 協作」的痛點:

  1. 多分頁 side chat:從主對話分叉出好幾個旁支對話,用分頁切換,重開 Codex 還找得回來。
  2. Collapse turn details:把每一輪已完成的工具呼叫、推理過程折疊起來,只留你的 prompt 和 agent 的回答。
  3. codex exec --trust:無人值守模式下,專案設定和 MCP server 改成「你明確說信任才載入」。

前兩個讓互動式 session 更好用,第三個是會影響 CI 腳本的行為改變,升級前一定要看。下面逐一拆開講怎麼開、怎麼用、要注意什麼。以下內容依據 release notes、對應 PR 說明和 rust-v0.169.0 tag 的原始碼整理;我們沒有在自己的專案上長時間實測,需要實測驗證的地方會標出來。

一、多分頁 side chat:主線不動,旁支開分頁問

它解決什麼

Codex 的 TUI 原本就有 /side:從目前對話分叉出一個 side chat,問完再回主線。問題是之前基本上只有「一個」旁支,問完一個問題想再開一條線,就得覆蓋掉前一個。

0.169.0 把它做成分頁。這組改動主要由 OpenAI 的 fcoury-oai 完成(PR #59739、#59767、#59784、#60152、#60181),從 PR 描述看,運作方式是這樣:

Codex 0.169.0 多分頁 side chat 運作示意:主對話分叉出多個分頁,各自保留草稿與歷史,存檔掛在主對話底下

  • 分叉,不是全新對話:side chat 是從主對話 fork 出來的,所以它知道你們剛剛在聊什麼,不用重新交代專案背景。它也會繼承主對話的權限設定(permission profile)。
  • 背景建立,不卡主線:建立 side chat 要等 fork 和初始化請求,PR #59767 把這段改成背景執行,載入中、失敗都有狀態顯示,失敗可以按 Enter 重試、Esc 返回。
  • 每個分頁有自己的草稿和歷史:切換分頁時,沒送出的輸入和對話紀錄都會保留。
  • 存檔是主對話的附件:PR #60152 讓 side chat 存成主對話的附件,重開 Codex 後可以從側欄重新打開;刪掉主對話時,底下的 side chat 會一起刪。

怎麼開啟

這是 opt-in 功能。原始碼裡對應的 feature flag 是 tui_workspace,目前標成 under development、預設關閉;另外它要求 TUI 自己接管全螢幕 transcript(tui.fullscreen_transcript,預設就是 true)。

在 ~/.codex/config.toml 加上:

[features]
tui_workspace = true

或只在這次啟動時打開:

codex --enable tui_workspace

因為還在開發階段,介面和快捷鍵之後都可能再調整,建議先在個人環境試,不要寫進團隊共用的設定範本。

操作速查

動作怎麼做
開一個新的 side chat 並直接問/side 你的問題
重開目前選中的 side chat/side(不帶參數)
把焦點移到分頁列leader t(動作名 focus_sidebar_tabs)
側欄有焦點時切換分頁Tab / Shift-Tab、↑ / ↓、j / k,會循環
用滑鼠點分頁、在分頁列上滾輪切換、分頁太多時點兩側箭頭
關閉分頁預設 Ctrl-X W(動作名 close_sidebar_tab),或滑鼠中鍵
幫存檔的 side chat 命名在該 side chat 裡下 /rename

幾個細節值得記住:

  • 關閉不等於刪除。關掉一個已存檔的 side chat,它還在選單裡;要從 Side chats 清單移除,得用封存(archive)。
  • 會丟東西的操作會先問你。關掉還在跑的 side chat、有沒送出的草稿、或只存在記憶體裡的暫時歷史,都會跳確認。
  • 快捷鍵都可以改,名稱就是上表的動作名(focus_sidebar_tabs、sidebar_up、sidebar_down、close_sidebar_tab)。leader 鍵是哪個組合取決於你的 keymap 設定,不確定的話打開 TUI 的 keymap picker 看最準。

實戰招式:把 side chat 當成「不污染主線的草稿紙」

主對話的 context 是 agent 做事的工作記憶,塞進去的東西越雜,後面越容易偏。side chat 適合用在這幾種情況:

1. 主線在跑,你想查資料。 例如:

/side 先不要改任何檔案。幫我列出 src/api/errors.ts 裡所有 error code,
以及每個 code 在哪些 handler 被丟出來。只回報,不要修。

開頭先講「不要改檔」是好習慣。side chat 繼承主對話權限,如果主線允許寫檔,旁支也能寫;兩條線同時改同一個 repo,很容易互相踩到。

2. 比較兩個方案。 開兩個分頁,一個問「用 middleware 做 rate limit 的寫法與風險」,一個問「改在 API gateway 做的寫法與風險」,各自問到底,再回主線做決定。主線只收到結論,不會被兩套討論過程塞滿。

3. 幫自己留一條「為什麼」紀錄。 對某個設計決策的來回討論放在 side chat,用 /rename 取名成「為什麼不用 Redis lock」,之後重開 Codex 還能翻到。這比把討論埋在主對話第 80 輪裡好找得多。

值得實測的點:side chat 是 fork 時的快照,主線之後的進展它看不到。如果主線已經改了很多檔,旁支要討論最新狀態,與其沿用舊分頁,不如開一個新的。

二、Collapse turn details:把工具雜訊折起來

它解決什麼

coding agent 每一輪都會留下一大串活動:讀檔、grep、跑測試、改檔、web search。對 agent 來說這是工作過程,對你來說,回頭找「它上一輪到底結論是什麼」時,這些輸出就是雜訊。

0.169.0 的 Collapse turn details 由 OpenAI 的 etraut-openai 實作(PR #60554 到 #60557),做了三層折疊:

  • 工具呼叫變成摘要:指令執行只顯示不含輸出的標籤;連續的工具呼叫合成一列,成功的指令組會顯示像 Explored files、Ran 2 commands 這樣的摘要,點開才看細節。範圍包含 MCP 工具、檔案編輯、圖片、plan 更新、agent 呼叫、web search 等。
  • 整輪活動折到 prompt 底下:已完成那一輪的評論、推理和工具活動,收進你的 prompt 下方的展開控制,控制項上會標完成耗時(沒有時間資訊時改顯示訊息數)。部分回答和最終回答不會被折掉。
  • 搜尋照樣找得到:被折起來的工具輸出仍然可以用 transcript 搜尋找到,也可以切到詳細檢視。

怎麼開啟

兩種方式擇一:

  1. 在全螢幕 transcript 的設定面板裡打開「Collapse turn details」開關。
  2. 寫進設定檔,每次都生效:
[tui]
collapse_turn_details = true

這個選項預設是 false,而且只作用在全螢幕 transcript。

實戰招式

  • 長 session 的 review 模式:一個任務跑了三四十輪之後,打開折疊,從上往下只看「你問了什麼、它答了什麼」,五分鐘就能重建整段決策脈絡。
  • 要追錯時就展開:agent 說「測試全部通過」,你想確認,就展開那一輪的 Ran N commands 看實際輸出。不要只看摘要就相信,摘要刻意不含輸出,正是為了讓你需要時自己點開。
  • 搭配 prompt 習慣:既然最終回答一定可見,可以要求 agent 每輪結尾用固定格式回報,例如:
每完成一個步驟,最後用三行回報:
改了哪些檔/跑了什麼驗證、結果如何/下一步打算做什麼

折疊後,這三行就是你瀏覽 transcript 時的目錄。

三、codex exec --trust:能寫檔不代表信任這個 repo

這一項列在 release notes 的 Bug Fixes 裡,但它會改變自動化腳本的行為,是升級時最需要注意的一項。實作是 PR #60041,作者 etraut-openai。

改了什麼

先講背景:Codex 會讀專案目錄裡的設定(project-local configuration),裡面可能定義了 MCP server,也就是 agent 可以呼叫的外部工具。對一個你不認識的 repo 來說,「打開就自動載入它指定的 MCP server」等於讓 repo 作者決定你的 agent 能執行什麼。

0.169.0 之前,codex exec 在 --sandbox workspace-write 下的處理有漏洞;現在規則變成:

codex exec 0.169.0 的信任判斷流程:未設定信任時停用專案設定與 MCP、加 --trust 寫入 trusted、明確 untrusted 時拒絕

  • 沒有信任紀錄的目錄:codex exec 照樣執行,但專案設定和 MCP server 保持停用,就算你給了 --sandbox workspace-write 也一樣。終端機會印出警告,提示你用 codex exec --trust。
  • 加上 --trust:把這個專案標為信任並存起來,這次和之後的對話都會載入專案設定與 MCP server,包含在 sandbox 之外執行的 MCP 指令。
  • 已被明確標為 untrusted 的專案:--trust 會被拒絕,你得先手動改掉那個信任設定。

另外三個邊界條件,來自 PR 說明與 CLI 參數說明:

  • 信任紀錄在加了 --ephemeral(不存 session 檔)時仍然會寫入。
  • --trust 不能和 --ignore-user-config 一起用。
  • codex review 也支援 --trust。

信任狀態寫在使用者層級的 config.toml,格式是 [projects."/path/to/project"] 底下的 trust_level = "trusted"(從原始碼 set_project_trust_level_inner 的註解看到)。

你的 CI 會受什麼影響

最常見的狀況:你在 GitHub Actions 或 cron 裡跑 codex exec,repo 裡有專案層級的 MCP 設定(例如接 issue tracker 或資料庫的 MCP server)。升級到 0.169.0 之後,如果那台 runner 從來沒有信任過這個專案,任務照樣會跑完,但 agent 少了那些工具。它不會報錯退出,只會在 log 裡留一行 warning,結果可能是 agent 改用比較笨的方式完成任務,或乾脆說做不到。

處理方式:

1. 先在 log 裡找這行警告

warning: Untrusted project-local configuration is disabled. Run `codex exec --trust` ...

2. 自己的 repo、自己的 runner:明確加 --trust

codex exec --trust --sandbox workspace-write \
  "跑完整測試,修掉失敗的測試,最後列出改了哪些檔"

因為信任會被保存,在常駐的 self-hosted runner 上第一次加過就會記住;在每次都是全新環境的 hosted runner 上,就每次都帶著。

3. 跑外部貢獻者的 PR:不要加 --trust

這正是這次改動要保護的場景。如果你的 workflow 會在 fork 來的 PR 上跑 codex review,PR 作者可以在專案設定裡加一個 MCP server。不加 --trust,那些設定就不會被載入。建議把兩種 workflow 分開寫:自己分支的用 --trust,外部 PR 的不用。

4. 想確認某個 MCP server 有沒有被載入,最直接的方法是在 prompt 裡要 agent 先回報它手上有哪些工具:

開始之前,先列出你目前可以使用的 MCP 工具名稱。如果預期中的 xxx 工具不在清單裡,直接停下來回報,不要用其他方式替代。

這招可以避免「工具沒載入,agent 就自己繞路」這種安靜的失敗。

四、順手值得知道的幾個改動

  • command center 可以搜尋舊任務(PR #60286):在 agent command center 裡,可以用名稱、prompt 預覽、工作目錄搜尋較舊的任務,不分大小寫,結果太多時有 Show more matches。以前只能搜已經載入的那一頁。
  • 「Yes, clear context and implement」更可靠了(PR #60763,dylan-hurd-oai):在 plan 模式核可計畫、選擇清掉 context 開新 session 實作時,完整計畫會存成附件交給新 session;寫入或讀取失敗時,改把完整計畫塞進新 session 的 context;連塞都塞不下,就報錯並保留原 session,不會讓你丟掉計畫。以前遇過「新 session 只拿到半份計畫」的人,可以再試一次這個流程。
  • Ctrl+S 存診斷 ZIP(PR #60542):在回報問題的編輯器裡按 Ctrl+S,可以把診斷 ZIP 存在本機,不上傳給 OpenAI,公司關掉上傳也能用。要跟內部 IT 或在 GitHub issue 回報問題時很方便,送出前記得自己檢查內容。
  • 在 TUI 裡新增或編輯自訂 model provider(PR #59779 等):開啟自訂 gateway 引導時,可以在登入時建立 provider,支援的 gateway 能用 device code 登入,SSH 遠端機器沒有瀏覽器也行。
  • 中斷後不再誤傷下一輪(PR #59910、#60700):被中斷的回合會乾淨結束,延遲的中斷或檔案核可取消不會再打斷後面的回合。

五、什麼時候該用、什麼時候別用

功能適合不適合/要小心
多分頁 side chat主線在跑時查資料、比較方案、留決策紀錄還在開發階段,快捷鍵和行為可能再改;旁支繼承寫檔權限,別讓兩條線同時改同一批檔
Collapse turn details長 session 回顧、交接給同事看 transcript正在除錯工具輸出時先關掉,或記得展開;摘要不含輸出,別只看摘要就下結論
codex exec --trust自己的 repo、受控的 runner、需要專案 MCP 的自動化任務外部 PR、陌生 repo;信任會被保存,在共用機器上加一次就一直有效

六、給工程團隊的升級檢查清單

  1. 盤點所有跑 codex exec 或 codex review 的地方,特別是 repo 裡有專案層級 MCP 設定的。
  2. 升級後跑一次,搜尋 log 裡的 untrusted 警告。看到的話,判斷那個 workflow 是處理自己的程式碼還是外部 PR,再決定要不要加 --trust。
  3. 在 prompt 開頭加「先列出可用工具」的檢查,讓工具沒載入變成明確失敗,而不是安靜地降級。
  4. 個人開發機試 tui_workspace 和 collapse_turn_details,用一兩週確認習慣後再決定要不要推廣;tui_workspace 目前是開發中功能,先別寫進團隊範本。
  5. 把 side chat 的使用規則講清楚:旁支只問不改,要改檔就回主線,或乾脆開另一個 session。

來源

整理:DataAgent · Coding Agent 實戰教學

文章裡這些把關做法,要在一個團隊裡真的落地、而不是只有你一個人在用,通常卡在流程與共識。我把這部分整理成企業內訓:

coding agent 導入與治理 — 企業內訓與顧問 →

最後更新:2026年11月14日