用一句話改整個專案:讓 Codex 讀檔、跨檔修改、自己跑測試
前兩課你把 Codex 裝好、也搞懂了核准模式。但如果你到現在還只把它當成「會聊天的自動補全」——問一句、貼一段程式進去、複製它的回答貼回編輯器——那你根本沒用到它真正值錢的地方。
Codex 這種「跑在終端機、看得到你整個專案」的工具,真正的能力是:你只講目標,它自己去搜尋相關檔案、讀懂脈絡、提出計畫、跨多個檔案一起改、改完自己跑測試驗證,錯了再修到通過。你從「一行一行寫程式的人」變成「講需求、驗收成果的人」。這堂課就是要把這條完整的工作流,用一個真實的重構任務走給你看,讓它變成你每天開發的節奏。
這堂學什麼
- Codex 怎麼「讀懂」你的專案:它自己搜尋、開檔、建脈絡,你不用把程式碼一段段貼給它
- 最穩的工作流節奏:讀 → 計畫 → 改 → 自我驗證 → review,以及為什麼「先讓它講計畫再動手」比一上來就叫它改好用十倍
- 跨檔修改:用一句話改掉散在整個專案裡的同一件事(統一錯誤格式、換 logger、改 API 命名)
- 讓它自己跑測試 / 型別檢查,形成「改了就自我驗證」的自我修正迴圈——這是 Codex 最被低估的一招
- 用 2026 年新的
/review斜線指令做程式碼審查,比只看git diff更快抓到問題 - 怎麼選模型(
gpt-5.5/gpt-5.4/gpt-5.4-mini/gpt-5.3-codex-spark)以及「拆小任務」為什麼決定成敗
觀念一:它怎麼「讀懂」你的專案
新手最常犯的錯,是把 Codex 當成網頁聊天視窗:「我把這個檔案貼給你,你幫我改」。這完全誤用了它。Codex 跑在你的專案資料夾裡,它有一雙自己的眼睛——你只要描述目標,它會自己用模糊檔名搜尋、grep 整個專案、開啟相關檔案,把脈絡拼起來。

所以正確的用法是直接問目標,把找檔案這件苦工交給它:
> 我想新增一個「匯出 CSV」的功能,先幫我盤點要動到哪些檔案、你打算怎麼做
> 這個專案的 API 錯誤處理寫法不一致,幫我盤點目前總共有幾種寫法、分別在哪
它會先「偵察」——把相關檔案讀過一輪——再回你一份計畫。你也可以主動縮小範圍:在對話框打 @ 會跳出模糊檔名搜尋,選中就把路徑塞進訊息,適合你很確定「就是這幾個檔」時。但多數情況讓它自己找更全面,連你沒想到的關聯檔都會挖出來。
觀念二:最穩的節奏是「讀 → 計畫 → 改 → 驗證 → review」
這是整堂課的骨架,先把這張圖記進腦子:

關鍵在第二步和第三步之間要卡一下:先讓它把計畫講出來、你確認方向對了,再讓它動手。多花三十秒,能省下半小時的災難——AI 對需求的理解偏差,在「計畫」階段修正只要一句話;等它改了十個檔你才發現方向錯,得整包 git restore 重來。
實務上延續上一課的判斷:探索與要計畫用 Read Only(--sandbox read-only,只讀不改),方向對了切到 Auto 讓它動手。這樣「讀 + 計畫」全程零風險。
觀念三:跨檔修改,一次改掉散在整個專案的東西
真實世界的需求很少只改一個檔。「把所有 API 回應的錯誤格式統一」「這個函式改名,所有呼叫它的地方一起改」——這種橫跨數十個檔的機械式修改,是人最容易改漏、改到手軟的,卻正是 Codex 最擅長的。

> 把所有 API 回應的錯誤格式統一成 { error: string, code: number },
後端所有回傳錯誤的地方、還有前端接收錯誤的地方,都一起更新
它會把所有相關位置找出來、一次改完,結束時列出「我動了這幾個檔」。你要做的不是自己 grep 找漏,而是看它列出的清單合不合理——這才是該花注意力的地方。
觀念四:讓它自己跑測試,改完自我驗證
這是 Codex 最被低估、也最能拉開差距的一招。多數人改完就自己去手動測,其實你可以直接叫它改完自己跑測試,錯了繼續修到全過:

> 修好這個登入逾時的 bug,然後跑 npm test,
如果有測試失敗就繼續修,直到全部通過再停
它會形成閉環:改 → 跑測試 → 讀結果 → 再修 → 再跑,直到綠燈才回報你。你從「改一次測一次盯一次」的苦工,變成最後只需 review 一份「已自我驗證過會過測試」的成果。注意:這需要你在 Auto 模式(workspace-write),它才有權在專案內跑測試指令。
npm test、npm run typecheck),確認通過再停」。這一句會逼它自己抓錯、自己修,大幅減少你來回踢皮球的次數。沒有測試的專案,退而求其次也能叫它「跑一次建置 npm run build 確認沒編譯錯誤」。觀念五:review 成果——用 /review,不只 git diff
改完務必驗收,別因為它說「完成了」就直接 commit。2026 年的 Codex 除了讓你自己看 git diff,還內建了一個專門的 /review 斜線指令:在互動介面打 /review,它會叫出一個專屬的審查員,讀你選定的 diff(可選未提交的改動、對某個 base 分支、或指定 commit),回給你一份照優先級排好、可直接行動的問題清單——像是多了一個資深同事幫你 code review。

兩個一起用最保險:
/review # 叫出審查員,讀改動、回一份優先級問題清單
git diff # 你自己逐行看它到底動了哪些行(習慣還是要保留)
- 改得對、審查也沒揪出大問題 → 保留、commit。
- 改歪了 → 直接跟它說「這裡不對,應該要…」它會修正;或用上一課的
git restore .一鍵還原重來。
要在腳本 / CI 裡做審查,用非互動的 codex exec review --uncommitted,把審查結果印出來,適合當 commit 前的自動關卡。
觀念六:選對模型,和「拆小」比什麼都重要
Codex CLI 2026 年 7 月現行的模型有這幾個,用 --model(或設在 config.toml)切換,也可以在 TUI 裡用 /model 切:

| 模型 | 定位 | 什麼時候用 |
|---|---|---|
gpt-5.5 |
官方推薦、預設起手式 | 複雜重構、跨檔大改、需要規劃與多步推理——多數任務直接用它 |
gpt-5.4 |
一般能力款 | 日常一般任務,想省一點額度 |
gpt-5.4-mini |
輕量快速 | 簡單、反應要快的小任務 |
gpt-5.3-codex-spark |
ChatGPT Pro 專屬研究預覽 | 為即時互動迭代優化,只有 Pro 方案看得到 |
codex login 綁 ChatGPT 帳號就能用,不必另外付錢;要走 API 計費(按 token)也行。所以你大概率不用為 Codex 額外花錢,手上的 ChatGPT 訂閱就含了。但講真的,選哪個模型的影響,遠不如「你有沒有把任務拆小」。不要把大任務一次全丟給它(「幫我重寫整個後端」)。範圍越聚焦,AI 品質越好。正確做法是拆成小步:先盤點 → 改一塊 → 驗證 → 再下一塊。

手把手實戰:一個真實的重構任務
我們用一個常見情境走完整條工作流:一個 Node 專案的 API 錯誤處理寫法五花八門,要統一成同一種格式,並確認測試全過。找一個已經是 Git 倉庫、工作區乾淨的專案跟著做。
先確認版本與環境
不同版本用字會微調,先對一下:
codex --version # 這篇對到 0.142.5,你的接近就行
進到互動介面後打 /status,看目前用的是哪個模型、哪個 sandbox。開工前先確保工作區乾淨(上一課的鐵律):
git status # 確認沒有一堆未提交的改動混在一起
用 Read Only 讓它先偵察、給計畫
先別讓它動手。用唯讀模式讓它讀懂現況、盤點問題:
codex --sandbox read-only
然後丟需求,並要求它只給計畫:
這個專案的 API 錯誤回應格式不一致,我想統一成 { error: string, code: number }。
先幫我盤點目前有幾種寫法、分別在哪些檔,然後列出你的修改計畫和會動到的檔案清單。
先不要動手。
它會偵察一輪,回你「目前有 3 種寫法,分別在 A、B、C…,我打算這樣改…」。這一步零風險,而且幫你把範圍看清楚。
確認方向,切到 Auto 讓它動手
計畫看起來對,不用重開。直接在對話框用 /permissions 切到 Auto(對應 --sandbox workspace-write --ask-for-approval on-request),然後放行:
計畫 OK,照這個計畫改。所有相關的後端回傳處和前端接收處都要一起更新。
改完自己跑 npm test,如果有測試失敗就繼續修到全部通過再停。
現在它會在專案資料夾內自己改檔、跑測試。過程中若需要越界(例如 npm install 要連網),它會停下來問你——這時你看清楚再放行。
盯它的自我驗證迴圈
它會邊改邊跑測試:你會看到它跑 npm test、某幾個測試紅了、它回去修、再跑一次。這就是自我修正迴圈在運作,你不用每次插手,讓它跑完閉環。若它卡在同一個測試修不動(三四輪還紅),再介入給提示,別放它無限打轉。
用 /review + git diff 雙重驗收
它回報「全部通過」後,先叫審查員看一遍:
/review
讀它給的優先級清單,有沒有它自己沒注意到的問題(漏改、格式不一致、順手動到不該動的東西)。接著自己也掃一遍原始差異:
git diff
滿意就 commit;哪裡不對就跟它說「這個檔的第 N 處不該改,還原它」,或直接 git restore <檔> 局部還原再讓它重跑那一塊。
需要接續 / 自動化時,用 exec 與 resume
過了一天想接續,用 codex resume --last(互動)接回最近的 session,不用重講脈絡;想從歷史節點分岔出新方向,用 codex fork。要塞進腳本(跑完就結束、沒人按 Enter),用非互動的 codex exec——它本來就不會停下來問你核准,所以 --sandbox 是你唯一的防線,要設好:
codex exec --sandbox workspace-write \
"把所有 console.log 換成專案的 logger,改完跑 npm test 確認沒壞"
想接續前一個非互動任務,用 codex exec resume --last "把漏掉的檔也改了"。
常見坑
坑 1:一上來就叫它「重寫整個 X」,結果改得又慢又亂
這是最普遍的坑。範圍太大時,AI 抓不住重點、東漏西漏,甚至順手動壞無關的地方。解法:拆小、分步。 先用 Read Only 讓它盤點、切成幾個小任務,一次只做一塊、做完驗證再下一塊。「先盤點 → 改一塊 → 驗證 → 再下一塊」永遠比「一句話重寫全部」品質高。
坑 2:它說「測試都過了」,你一跑卻是紅的
有時它在自己的沙盒裡跑過了,但你環境不同、或它根本沒真的跑到那個測試指令。看到它宣稱通過,自己一定要再跑一次驗證:
Tests: 3 failed, 27 passed, 30 total
看到這種輸出,把失敗的測試名稱和錯誤訊息原封不動貼回去:「這幾個測試在我這邊還是紅的,錯誤是 XXX,幫我修到真的過」。以你機器上實際跑出來的綠燈為準,別接受口頭保證。
坑 3:它卡在同一個測試,修了好幾輪還是紅的
自我修正迴圈不是萬能。有時它會在同一個錯誤上鬼打牆,改了 A 壞了 B、改回 B 又壞 A。看到它第三、四輪還在同一個測試打轉,停下來介入——通常是它誤解了需求。給它更多脈絡(「這個測試期待的行為是…因為…」),或先 git restore 回到動手前重講一次。放它無限打轉只會燒你的額度。
坑 4:改完想 review,卻看到滿滿一大包 diff 分不清哪些是這次改的
git diff 顯示上百行,混著你之前沒 commit 的手動改動
九成是你動手前沒先 commit(上一課的鐵律)。Codex 的改動跟你之前殘留的未提交改動混在一起,git diff 一片汪洋根本 review 不動。解法:每次放手讓 Codex 改之前,先 git status 確認乾淨、或 git commit 一次當存檔點。 這樣改完的 git diff 就是純粹這次的改動,清清楚楚。
坑 5:codex exec 在腳本裡直接報錯或什麼都沒做
codex exec 是非互動模式,不會停下來等你核准(所以它不像互動模式那樣會卡住問你),但常見兩種失敗。一是不在 Git 倉庫裡跑,直接被擋:
Not inside a trusted directory and --skip-git-repo-check was not specified.
解法是先 git init 或加 --skip-git-repo-check。二是它要動的東西超出 --sandbox 範圍(例如要寫專案外的檔),它會做不動或報權限不足——用 --add-dir <路徑> 開放額外可寫目錄,別直接跳 danger-full-access。想把結果撈給後續流程,加 -o result.txt(寫最後訊息到檔)或 --json(JSON Lines)。
作業
- 找一個有測試的 Git 專案,完整走一遍工作流:
codex --sandbox read-only讓它盤點並給計畫 →/permissions切 Auto → 下一個跨檔修改任務,結尾加「改完自己跑測試通過再停」→ 用/review+git diff驗收。全程感受五步循環的節奏。 - 刻意練「先計畫再動手」:給它一個稍大的任務,第一句先要求「只列計畫和會改的檔案,先不要動手」,確認方向後才放行。對比一下這樣做,跟一上來就叫它改,結果差多少。
- 體驗自我驗證迴圈:給一個會讓某些測試失敗的改動,加上「跑 npm test,失敗就修到全過」,觀察它怎麼改 → 測 → 再改的閉環。如果它卡住鬼打牆,練習在對的時機介入。
- 選做:用
codex exec --sandbox workspace-write "..."把一個明確的小重構寫成一行非互動指令,體驗它跑完就結束,並想想能塞進什麼自動化流程。
下一課預告
走完這堂,你已經會用 Codex 讀檔、跨檔改、自我驗證了。但你大概也發現一件煩事:每次都要跟它重講一遍專案的規矩——用哪個套件管理器、測試指令是什麼、程式碼風格要怎樣、哪些資料夾不要碰。講到嘴痠。第 4 課教你寫 AGENTS.md:一份放在專案根目錄的「給 AI 的說明書」,用 /init 就能生出骨架,讓 Codex 每次自動記住你的技術棧、指令與慣例,不用你再重複交代。把這堂的工作流,升級成「連規矩都不用再講」的順手狀態。