學Codex的第一個練習,可以從一個小到容易檢查的工具開始:輸入待辦事項、勾選完成、刪除項目,再重新整理頁面,看看資料是否還在。
這篇使用Windows上的Codex CLI,帶你完成這個練習。重點是學會三件事:**在哪裡輸入指令、怎麼描述需求、如何確認產出的檔案能用。**不需要先學會網頁語法,也不用架設伺服器。

圖1:本文的操作路線,屬於教學示意圖。
Codex可以依照你的要求讀取專案、編寫程式,並在權限允許時執行指令。本文使用的是CLI,也就是在終端機操作的版本。
| 操作位置 | 要放什麼 | 怎麼辨認 |
|---|---|---|
| PowerShell | 安裝、切換資料夾、啟動程式的指令 | 通常能看到PS C:\…>提示字元 |
| 記事本 | config.toml設定內容 |
一般文字編輯視窗 |
| Codex對話輸入區 | 「請幫我建立待辦清單」等需求 | 啟動Codex後,依介面提示輸入 |
先記住這張表,後面就不會把設定貼進終端機,或把中文需求當作PowerShell指令執行。
本文沿用2026年10月8日核對的環境:Windows 10(組建19045)、PowerShell7.6.6、Node.jsv24.21.0、npm11.19.0、Codex CLI0.160.1。這是核驗環境,不是要求你鎖定相同的修補版本。
這裡採用npm安裝方式。先到Node.js下載頁,選擇LTS、Windows及.msi安裝程式。處理器架構可在Windows「設定→系統→關於」查看,依電腦選擇x64或ARM64。
安裝時保留npm及加入PATH的選項。完成後關閉舊終端機,從開始功能表搜尋PowerShell,開啟新視窗,逐行執行:
node --version
npm.cmd --version
兩條都有顯示版本,再安裝Codex:
npm.cmd install -g @openai/codex@latest
等安裝結束、提示字元重新出現,再檢查:
codex.cmd --version
看到codex-cli及版本號,就可以往下走。本文使用.cmd入口,避免部分PowerShell環境把指令解析成受執行原則限制的.ps1。複製時只取程式碼,不要連PS C:\…>一起複製。
安裝Codex不等於取得模型額度。使用官方帳號時,啟動後依畫面登入,可用功能以帳號權益為準;如果使用第三方API,則需設定對應服務的金鑰與模型。ChatGPT訂閱和第三方API帳戶分開計費。
已能正常對話的讀者,可以直接跳到第三步。以下以Crazyrouter示範自訂provider設定;provider就是「模型請求要交給哪個服務」。欄位可對照Codex接入指南。
先在服務控制台建立API Key,確認模型權限與可用額度。在PowerShell執行這一行:
$codexSecureKey = Read-Host '請貼上 Crazyrouter API Key,然後按 Enter' -AsSecureString
看到提示後才貼上Key,按Enter。輸入不顯示明文是正常現象。回到PowerShell提示字元後,再執行整段:
$codexKeyPtr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($codexSecureKey)
try {
$codexPlainKey = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($codexKeyPtr).Trim()
if ([string]::IsNullOrWhiteSpace($codexPlainKey)) { throw '尚未輸入 Key,請重新操作' }
[Environment]::SetEnvironmentVariable('CRAZYROUTER_API_KEY', $codexPlainKey, 'User')
$env:CRAZYROUTER_API_KEY = $codexPlainKey
} finally {
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($codexKeyPtr)
$codexPlainKey = $null
$codexSecureKey.Dispose()
}
這會儲存至目前Windows使用者的環境變數,並套用到目前視窗。環境變數不是加密保險箱,不要存到共用帳號,也不要把Key放進專案檔案或截圖。
在PowerShell執行,開啟設定檔;原本有檔案時會先備份:
$codexConfigDir = if ($env:CODEX_HOME) { $env:CODEX_HOME } else { Join-Path $env:USERPROFILE '.codex' }
New-Item -ItemType Directory -Path $codexConfigDir -Force | Out-Null
$codexConfigFile = Join-Path $codexConfigDir 'config.toml'
if (Test-Path -LiteralPath $codexConfigFile) {
Copy-Item -LiteralPath $codexConfigFile -Destination ($codexConfigFile + '.bak.' + (Get-Date -Format 'yyyyMMdd-HHmmss'))
}
notepad.exe $codexConfigFile
記事本若詢問是否建立新檔案,選擇建立。空檔案可貼入下列內容:
model = "gpt-5.6-sol"
model_provider = "crazyrouter"
[model_providers.crazyrouter]
name = "Crazyrouter"
base_url = "https://api.crazyrouter.com/v1"
env_key = "CRAZYROUTER_API_KEY"
wire_api = "responses"
模型ID採用核驗當天的接入頁範例。實際使用前確認帳戶有該模型權限,且服務支援Codex所需的Responses API。
這裡最容易混淆的是env_key:填環境變數名稱,不填金鑰本身。base_url則是API位址,不是官網首頁,也不要自行接上/responses或追蹤參數。
已有設定時不要整份覆蓋。修改同名欄位,缺少provider區段才新增;model與model_provider必須位於第一個方括號區段之前。儲存後確認檔名是config.toml,不是config.toml.txt;可在檔案總管開啟「副檔名」顯示。

圖2:金鑰與設定分開保存,變數名稱兩邊一致。
先建立一個空資料夾。以下指令全部在PowerShell執行:
$codexProject = Join-Path $env:USERPROFILE 'CodexProjects\first-checklist'
New-Item -ItemType Directory -Path $codexProject -Force | Out-Null
Set-Location -LiteralPath $codexProject
Get-Location
最後的路徑應以CodexProjects\first-checklist結尾;若裡面已有重要檔案,換個新的資料夾名稱。接著啟動:
codex.cmd --sandbox workspace-write --ask-for-approval on-request
第一次可能出現目錄信任或Windows沙箱設定。核對路徑後依畫面操作;遇到執行許可時,確認指令和目標檔案屬於這次練習。
在Codex對話輸入區先輸入:
請只回答「連線成功」,不要讀取檔案、修改檔案或執行指令。
收到回覆後,再貼上正式需求:
請在目前資料夾實際建立 index.html,製作繁體中文待辦清單。
使用方式:
- 輸入待辦事項後,按「新增」或 Enter 加入清單。
- 不接受只有空白的項目。
- 每個項目可以勾選完成,也能單獨刪除。
- 顯示尚未完成的項目數量。
- 使用 localStorage 儲存,重新整理後恢復清單及完成狀態。
- 如果本機儲存失敗,顯示提示,讓使用者知道資料尚未保存。
實作範圍:
- HTML、CSS、JavaScript 都放在 index.html。
- 不安裝套件,不載入外部框架、圖片、字型或 CDN。
- 只修改這個檔案,使用者輸入當作純文字顯示。
- 手機上也要能閱讀和操作。
完成後告訴我檔案位置、開啟方式,以及每個功能的檢查方法。
若無法寫入檔案,請明確說明;不要只貼出程式碼就說完成。
把「單一檔案、不安裝套件」寫進需求,可以讓第一次練習維持在容易理解的範圍。
完成後依介面提示退出Codex,回到PowerShell;可按Ctrl + C,若畫面要求再按一次就照提示操作。看到PowerShell提示字元後執行:
Set-Location -LiteralPath (Join-Path $env:USERPROFILE 'CodexProjects\first-checklist')
Test-Path .\index.html
回傳True代表檔案存在,再執行:
Start-Process .\index.html
若開啟的是編輯器,到檔案總管右鍵點選該檔案,使用「開啟檔案」或「開啟方式」選擇Edge、Chrome。
| 你做的操作 | 通過條件 |
|---|---|
| 輸入「整理讀書筆記」,按新增 | 清單出現一個項目 |
| 輸入另一件事,按Enter | 只新增一次,輸入框清空 |
| 輸入空白後送出 | 清單沒有空項目 |
| 勾選完成,再取消勾選 | 狀態與未完成數量同步改變 |
| 刪除其中一項 | 其他項目仍存在 |
| 新增及勾選後重新整理 | 可用本機儲存時,內容及狀態恢復 |
localStorage只保存於目前瀏覽器,沒有跨裝置同步。清除瀏覽資料、換瀏覽器或移動檔案可能影響恢復;直接以file://開啟時,儲存行為也因瀏覽器而異。重要待辦另做備份。
假設新增成功,但重新整理後資料消失,可以在原資料夾重新啟動Codex,描述實際現象:
我用Edge直接開啟 index.html。
新增「整理讀書筆記」後看得到項目,但重新整理後消失。
請先讀取檔案,檢查 localStorage 的寫入與載入流程,
也確認儲存失敗時是否有提示。
保留新增、完成及刪除功能,只修改 index.html。
提供「在哪裡操作、做了什麼、實際發生什麼、希望怎麼運作」,通常比只說「有問題」更有幫助。若有錯誤訊息,一併貼上文字。
基本功能通過後,再練習新增「只看未完成」篩選,並要求切換篩選不刪除資料。一次改一項,改完重新走過驗收表。
| 現象 | 優先檢查 |
|---|---|
找不到node或npm |
安裝是否完成、是否重新開啟終端機、PATH是否生效 |
無法載入npm.ps1 |
使用npm.cmd;不要先放寬整台電腦的執行原則 |
找不到codex.cmd |
npm安裝是否成功;用npm.cmd prefix -g查全域安裝位置 |
| 缺少環境變數 | 用[bool]$env:CRAZYROUTER_API_KEY確認非空,並對照env_key |
| 401或403 | 看完整回應,核對Key、服務位址、模型權限與帳戶狀態 |
| 404或模型不存在 | 檢查模型ID、/v1路徑及Responses相容性 |
| 429 | 依回應判斷限流或額度問題,避免連續重試 |
| TOML解析錯誤 | 檢查英文引號、重複欄位、欄位所屬區段與副檔名 |
| 有回答,卻找不到網頁 | 核對工作目錄、寫入權限和實際檔案,不只看最後一句回覆 |
環境變數檢查回傳True只代表有值,不代表Key有效。若新視窗讀不到變數,先完全關閉Windows Terminal,再從開始功能表開啟。
檔案會留在練習目錄。下次開啟PowerShell,可以回到原目錄選擇之前的對話:
Set-Location -LiteralPath (Join-Path $env:USERPROFILE 'CodexProjects\first-checklist')
codex.cmd resume
也可以啟動新對話,請Codex先讀取現有index.html再修改。做較大改動前,先在PowerShell留一份備份:
Copy-Item .\index.html ('.\index.backup-' + (Get-Date -Format 'yyyyMMdd-HHmmss') + '.html')
完成這個練習後,你已經走過一次「提出需求→建立檔案→檢查功能→回報問題」的循環。下一個小工具,也可以從同樣清楚的需求與驗收條件開始。
使用說明:本文整理Windows入門操作、可複製指令與驗收方法,資料核對日期為2026年10月8日。配圖用於教學示意;介面與模型權限可能隨版本及帳戶而異,請對照目前設定與所用服務的說明。模型呼叫費用以實際服務的最新計費規則為準。