Codex 開發流程分享:從需求、修改到驗證的完整實戰封面

Codex 開發流程分享:從需求、修改到驗證的完整實戰

剛開始使用 Codex 時,我常會期待它像一位很能幹的工程師:只要交代一句需求,它就自己找到檔案、完成修改,最後回報可以了。但實際使用一段時間後,會發現「程式改好了」和「整件事完成了」是兩回事。畫面可能還沒有測過,登入流程可能完全沒驗證,甚至連原本的錯誤原因都還沒有找清楚。

這篇文章將整理我目前和 Codex 一起開發時,從接到需求、開始修改,到最後交付的完整流程,與大家一同分享交流。

我會用在 Veggie Finder 專案實際處理過的「行程規劃與手機分享」問題來進行案例說明:使用者直接打開一個分享的行程網址時,按返回不一定回得去上一頁;在手機上,行程底部的分享、匯出和儲存按鈕也可能被螢幕底部遮住。看起來只是幾個畫面問題,實際上同時牽涉瀏覽器歷史、行程資料、手機版面和測試。下面每個步驟,都用這個需求一起走一次。

※ Veggie Finder 是一個幫助使用者尋找蔬食餐廳的 Web App,可以用地圖搜尋、篩選與比較餐廳、查看詳細資訊、AI 推薦餐廳,也能把幾間餐廳排成一趟行程。完整開發背景可以參考:如何用 Google Antigravity 從零打造全端 App? 5 個步驟完成「Veggie Finder:AI 素食地圖 App」開發與部署 (完整實戰經驗分享)

PremLogin 優惠碼與方案說明

兩個貫穿全程的原則

再分享實際的開發流程之前,我目前有兩個從頭到尾都不變的開發原則:主要負責人要對整個任務負責,Hooks 要在工作前後看守必要的安全與完成條件。

主要負責人一路追到最後

主要負責人(主要 agent)會從需求理解、問題調查、工作分配,一路追蹤到整合、驗證和回報。其他協作者(subagent)可以幫忙,但不能因為其中一個人說「這一段完成了」,就直接對使用者宣布整件事完成。

我過去曾嘗試把不同開發階段直接以交接方式接力傳遞給不同 agent 繼續開發,希望減少每個對話需要攜帶的背景資料(Context);但實際執行後,我發現交接就算設計的再嚴謹以及結構化,仍然很容易遺漏資訊,導致後面的 agent 可能只按照表面結果繼續,最後每個階段都完成了,整體方向卻已經偏離我當初的要求。

因此目前改成由一個主要負責人掌握完整背景。只有工作真的能切成互不影響的小塊時,才啟用協作者;而且協作者只拿到完成自己工作所需要的資料,而不載入主要 agent 的 context,也不能自行提交程式、發布到線上,或再找下一個協作者。

Hooks 看守工作前後

Hooks 可以想成工作場所的護欄:它不負責做決定,而是在工作開始、使用工具前後和準備收尾時提醒、檢查,必要時才阻擋危險動作或不完整的完成宣告。

想看這兩個原則和各個工具名稱的對照,可跳到下方的名詞與實際設定總表

從需求進來,到最後交付的完整過程

我把整個開發流程拆成幾個清楚的關卡,具體而言,先讓 Codex 讀懂專案規則、確認需求和風險,再依序完成調查、規劃、修改、驗證與回報。這套流程的重點不是讓 AI 做更多事,而是避免它把「程式改完」誤報成「整件事完成」。

1. 先確認現況,不急著動手

每次進入專案,主要負責人會先做一次開工檢查,確認:

  • 現在在哪個專案和資料夾。
  • 目前有哪些未完成的修改。
  • 有沒有規格文件、測試或錯誤紀錄可以參考。
  • 這次需求會碰到哪些檔案和功能。

這不是靠主要負責人每次「記得」才做,而是先執行一段開工檢查(bootstrap)。它會確認是不是 Git 專案、盤點目前的修改、叫出工作開始時的檢查,並找出規格、現況總覽和進行中的變更。多花一點時間,能避免一開始就在錯的地方動手。

接著先讀專案的 AGENTS.md。它就像工作場所的規定,會說明哪些地方不能碰、哪些資料不能提交,以及完成前需要做哪些檢查。

如果專案有 MASTER.md,主要負責人也會在這時候讀,這是整個專案的現況總覽和規格地圖:目前有哪些功能、哪一份規格是現行版本,以及接下來應該去哪裡找更完整的說明。

主要負責人也會讀 lessons.md 或同類型的踩雷紀錄,避免以前犯的錯再犯一次。

接著才判斷這次要不要深入讀 OpenSpec。OpenSpec 可以把它想成「開工前的施工圖」:先把需求、設計、修改範圍和完成條件寫清楚,才開始動手。如果只是改文字或修一個已知的小錯誤,不需要把所有規格資料夾全部讀完;如果需求會改變既有功能,或分流後需要走 OpenSpec,以下是我使用 OpenSpec 的方式:

名稱白話意思在流程中的位置
(檔案)ProposalDelta SpecDesignTasksOpenSpec 裡的四種文件:為什麼做、行為改什麼、怎麼做、要做哪些事實作前建立,實作中追蹤,收尾時逐項對照
(路徑)openspec/specs/目前真的成立的完整功能規格實作、驗證和下一次開工時的現況依據
(路徑)openspec/changes/正在提議或進行中的變更放這次變更的規劃和任務,讓實作前後都對著同一份施工圖
(路徑)openspec/changes/archive/已完成變更的歷史記錄收尾時保留完整 Change,不是刪除或只留一份摘要

先確認現況很重要,因為一個專案不可能永遠只有一個對話。每當開啟新的對話時,主要 agent 都要先知道專案目前的狀態:原本的修改做到哪裡、這次是要繼續往下,還是要開始實作新功能。如果搞不清楚狀況就直接修改,很容易讓整個專案越做越亂。

案例情境: 先分清楚「這次是在修正行程分享和手機操作」和「資料夾裡剛好有其他尚未完成的地圖、聊天或餐廳功能」。後者不是這次需求的一部分,就不能因為看到了問題而順手一起整理。

這一步會用到(查看完整 Skill、Hook 和 Prompt 總表):

  • 開工檢查(不是 Skill)| codex-project-bootstrap.sh:確認專案位置、Git 修改、工作規則和規格入口,讓主要 agent 不會在錯的專案或不完整的背景下開始工作。
  • Hook| SessionStart:在新工作開始時載入專案提示與開工提醒。
  • 文件| AGENTS.md 管工作規則,MASTER.md 做規格地圖,lessons.md 保存過去的踩坑紀錄。

2. 接著判斷這件事需要多嚴謹

主要負責人不會讓每個需求都走同樣厚重的流程,而是先看它的影響範圍:

工作類型常見例子主要負責人怎麼做
小修改改文字、修已知的顯示錯誤同一個主要工作者完成修改與基本檢查
中型功能新增一個完整功能,牽涉多個畫面或資料先寫清楚目標、行為和完成條件
高風險工作登入、權限、付款、密鑰、刪除資料、正式環境增加安全檢查、獨立驗證,必要時要求使用者確認

簡單來說就是出錯的代價越高,交付前就要有越多證據。

案例情境: 這不只是改一個按鈕。它會同時修改行程頁、返回邏輯、手機底部操作列,以及儲存行程後的資料更新方式,所以主要負責人會把它視為中型修改,先寫清楚影響範圍,再補手機版和回歸檢查。

這一步會用(查看完整 Skill、Hook 和 Prompt 總表

  • Skill| phase-gated-task-router:按照修改範圍和風險,判斷這次只需基本檢查,還是要加入規格、安全檢查和獨立驗證。
  • Hook| OWNER-SPEC-REMINDER:在可能需要規格的工作開始前提醒主要負責人先做分流,不會因為看到提示就自動替工作建立一套規格。

3. 遇到問題時,先找原因再修

如果是錯誤、測試失敗、畫面壞掉或同一個問題反覆出現,AI 應該要先調查:

  1. 使用者實際看到什麼問題?
  2. 這個問題能不能穩定重現?
  3. 從輸入到錯誤,中間經過了哪些地方?
  4. 真正出錯的是哪個環節?
  5. 修改後要怎麼證明它真的好了?

案例情境: 按返回沒有反應時,原因可能不是行程頁本身壞掉,而是使用者從分享網址直接進入,瀏覽器根本沒有上一頁可以回去;手機按鈕被遮住,也可能是整頁在捲動,而不是按鈕位置單純下移。先把原因分清楚,才知道要修返回備援、頁面容器,還是底部安全距離。

這一步會用到(查看完整 Skill、Hook 和 Prompt 總表

  • Skill| root-cause-debugging:先重現問題、追蹤問題經過的路徑,再判斷真正該修改的地方,避免只看到畫面症狀就亂改。
  • Hook| PreToolUsePostToolUse:分別在使用工具前後提醒主要 agent 確認操作範圍、消化執行結果,必要時補做檢查。
PremLogin 優惠碼與方案說明

4. 功能比較大時,先畫施工圖

如果是新增完整功能,主要負責人會利用前面提到的 OpenSpec 先寫規格文件,再開始改程式。這份文件至少要回答四件事:

  • 使用者為什麼需要這個功能?
  • 使用者會看到什麼?
  • 程式和資料要怎麼配合?
  • 完成後要怎麼檢查?

當然,小修正不需要硬做完整規格。工作大小和風險,決定文件要寫到什麼程度。

案例情境: 先把施工圖寫清楚,像是直接打開分享連結時返回要去哪裡、手機版哪些區域可以捲動、底部操作列要避開多少空間,以及新增或修改行程後是否需要重新讀取整份行程資料。如此一來可以避免「新增一個按鈕」做到一半,才發現後面還牽涉資料欄位、權限規則、錯誤畫面和回復方式。

這一步會用到(查看完整 Skill、Hook 和 Prompt 總表

  • Skill| openspec:把需求、使用者會看到的行為、修改範圍和完成條件寫成施工圖;spec-review-router 則在開始修改前,確認這張施工圖和目前專案對得上。若測試分流判定這次需要測試,tdd-workflow 會在實作前先寫好測試情境、測試案例和完成條件;可行時先讓測試失敗,再開始修改。
  • Hook| OWNER-SPEC-REMINDER、DELTA-CHECK:前者提醒需要規格時先走正確分流,後者在收尾前對照現行規格、變更文件和專案索引,避免新舊文件各自變成一套說法。

5. 用不同角度確認結果

修改完成後,主要負責人會依照需求檢查幾個層次:

  • 程式能不能正常建置。
  • 基本格式和型別有沒有問題。
  • 最短的使用流程能不能跑通。
  • 如果是畫面,實際看到的內容和大小是否正確。
  • 如果是重要流程,是否需要另一個人只從使用者角度重新操作,以 Black-box QA 的方式驗證,也就是請另一個 agent 在沒有任何跟程式相關的 context,直接請他假裝自己是使用者,以人類使用實際的方法重新走一次流程。

案例情境: 即使改 code 的 agent 自己改考程式碼並回報「手機版修好了」,主要負責人也不能只看這一句話就向我回報完成。缺少必要的畫面或操作證據時,收尾 Hook 會擋住完成宣告;一般提醒型 Hook 則會提醒主要負責人補做檢查,像是實機操作或是截圖。必要時,主要負責人還會安排獨立驗證者重新操作,也就是 Black-box QA。

這一步會用到(查看完整 Skill、Hook 和 Prompt 總表

  • Skill| test-depth-router:先判斷這次修改需要哪一層測試;verification-loop:最後重新檢查建置、格式、安全、基本流程和差異;qa-black-box-verification:必要時由另一個驗證者只站在使用者角度重走流程。前面由 tdd-workflow 先寫好的測試案例,會在這一步拿來對照實際結果。
  • Hook| OWNER-REMINDER:提醒主要負責人消化 agent 的檢查結果並重跑必要驗證;UI-CHECK、UI-VERIFY-REQUIRED:畫面有變更時提醒實際操作與截圖,缺少必要畫面證據時阻擋完成宣告。

6. 最後才整理版本和交付

檢查都完成,而且可以清楚分開這次的修改後,主要負責人才會建立版本紀錄。只放入這次確認過的檔案,不把使用者原本的半成品一起放進去。此外提交、合併、推送、發布、刪除或對外寫入,對資料造成的影響不同。比較不可逆的動作,要另外得到使用者同意。

最後主要負責人會固定照這個順序向我回報:

  1. 這次實際完成了什麼。
  2. 對使用者來說,現在可以做什麼。
  3. 還有哪些事情沒有驗證,或目前還做不到。
  4. 下一步是什麼,以及是否需要使用者決定。

案例情境: 本機測試、型別檢查、畫面操作和手機尺寸都通過,和「所有使用情境都已經驗證」是兩件不同的事。這次雖然可以證明行程分享返回和手機操作列的主要情境,但如果還有其他正在實作的功能,例如需要登入的美食足跡頁,仍不能只靠未登入的瀏覽器測試宣稱完全通過;主要負責人只能回報已完成的範圍,不能把局部修正說成整個網站都驗證完成。

這一步會用到(查看完整 Skill、Hook 和 Prompt 總表

  • 前一步的驗證結果| 第 5 步已完成實作後、交付前的必要檢查;第 6 步不會固定重複同一套檢查,而是確認這些證據確實對應目前這次修改。若收尾前又修改檔案,或建立版本紀錄後改變了版本,就要重跑受影響的檢查。
  • Hook/收尾提醒| Stop、SESSION-CHECKLIST:收尾時逐項確認完成證據、尚未驗證的部分和授權界線;UI-VERIFY-REQUIRED 若發現 UI 缺少有效截圖,則不能宣稱畫面修改完成。
  • 有走 OpenSpec 時,文件也要收尾
    • 先確認驗證證據是新的。 第 5 步的 verification-loop 已經檢查目前版本;如果驗證後又改了檔案,或建立版本紀錄後內容又變了,就要重跑受影響的檢查。
    • 確認 Change 可以收尾。 先跑嚴格的規格檢查和作者預檢查,確認 Proposal、Delta Spec、Design、Tasks 都和實作及測試結果對得上,Tasks 也真的完成。
    • 把變更正式封存。 使用 openspec archive <change> --yes,把完整 Change 移到 openspec/changes/archive/,並把已完成的 Delta 同步進 openspec/specs/。對行為變更來說,不能只把資料夾移走,或用跳過規格同步的方式假裝完成。
    • 更新 MASTER.md 把現行規格、還在進行的 Change、限制和延後處理的事項重新對上;它是地圖,不需要把整份規格再複製一次。
    • 更新 lessons.md 只有這次真的發現新的坑、規則漏洞或更好的防呆方式才補記,但一旦補記,就要讓下一次開工能讀到。
    • 最後才整理版本和交付。 主要負責人檢查差異範圍,只放入已驗證的檔案;合併、推送、發布或對外寫入仍要另外確認授權。

專案文件、Skill、Hook的比較

名稱白話意思在流程中的位置
AGENTS.md專案工作守則一開始先讀,決定哪些事能做、哪些事不能做
MASTER.md專案規格地圖索引現行規格、進行中的變更、限制與入口;它是索引,不是第二份完整規格
lessons.md過去踩坑的紀錄開工前先讀;若這次發現新錯誤或新護欄,收尾時補記
OpenSpec把較大的功能變更寫成施工圖的規格流程分流判定需要時才使用,完成後要同步現行規格與歷史
Skill某一類工作的說明書需要調查、規劃、測試或驗證時使用
Hook自動護欄在工作前後提醒、檢查或阻止危險動作

目前實際使用的 Skill、Hook

Hooks

時機實際設定它做了什麼
進入或切換專案開工檢查(bootstrap)確認目前專案、分支、未完成修改、規格入口和踩坑紀錄;不會擅自清掉原有工作
開始工作SessionStart Hook提醒主要負責人讀 AGENTS.mdMASTER.mdlessons.md 和這次相關的規格
使用工具前PreToolUse Hook檢查即將執行的動作是否碰到機密、外部寫入、破壞性操作或協作者禁止做的事
使用工具後PostToolUse Hook留下檢查結果,並在需要時提醒測試、畫面驗證或清理暫存證據
Commit/Closeout 前[HOOK:DELTA-CHECK]對帳 active Change、archive、現行規格和 MASTER.md,避免新舊文件各自變成真相
準備收尾Stop[CODEX:SESSION-CHECKLIST]逐項確認驗證證據、尚未驗證的範圍、授權界線和最後回報內容

Skills

類型設定名稱作用
分流phase-gated-task-router判斷工作規模和風險;Registry 以 Owner workflow router 盤點
找原因root-cause-debugging先找真正原因再修改
測試分流test-depth-router先判斷這次修改需要哪一層測試
測試準備tdd-workflow在實作前先寫好測試情境、測試案例和完成條件;可行時先讓測試失敗,再開始修改
規格openspec先把需求、行為和設計寫清楚
安全security-review遇到登入、密鑰、輸入或敏感資料時檢查風險
規格審查spec-review-router實作前確認規格和目前程式對得上
驗證verification-loop交付前重新檢查建置、格式、安全和基本流程
獨立檢查qa-black-box-verification從使用者角度重新確認功能

結語

在我密集使用 AI 的這半年間,我認為 AI 最容易讓人產生錯覺的地方,是它很快就能給出一個看似完整的答案。程式碼改好了、畫面打得開、回覆也寫著「完成」,但這些只代表某些事情發生過,不代表原本的需求已經完整被滿足,或是你明明指教他改 A,但他連 BCD 都給改了。

真正可靠的流程,不是讓 AI 跑越多工具,也不是把每一個決定都交給 AI,而是讓每次工作都留下三個清楚的答案:

  • 這次到底要改什麼?哪些事情不在範圍內?
  • 用什麼實際證據,知道它真的改對了?
  • 還有哪些地方沒有驗證?誰需要知道這個限制?

當這三個問題都能回答時,Codex 才不只是快速修改檔案的工具,而是可以被管理、被檢查的協作者。

PremLogin 優惠碼與方案說明

常見問題

Q1:每次改一個小地方,都要跑完整套流程嗎?

不用。改一段文字或修一個已知的小錯誤,通常由同一個主要負責人完成基本檢查即可;只有牽涉多個功能、重要資料或高風險操作時,才需要增加規劃和獨立驗證。

Q2:Codex 說「完成」後,使用者還需要自己檢查嗎?

需要,但不一定要重新看每一行程式。比較有效的做法是確認它提供了哪些證據,再依需求走一次最重要的使用流程;如果是登入、付款或資料權限,更不能只相信文字回報。

Q3:一般人需要記住這些 Skill、Hook 和 Prompt 的名字嗎?

不需要。一般使用者只要知道:先看專案規則、先找原因、修改後要驗證、最後要說清楚限制;英文名稱主要是方便流程維護。

文章目錄

最新文章
Codex 開發流程分享:從需求、修改到驗證的完整實戰
Vocab Memorizer:AI 英日文單字學習、自主測驗與個人單字庫
Premlogin 評價與實測|ChatGPT、Claude、Adobe 合租體驗的完整心得與優缺點解析

相關文章

返回頂端