
我把 Codex 的入門流程整理成這份教學:下載 Node.js、安裝 Codex CLI、設定 CrazyRouter,再建立一個能在瀏覽器按按鈕的網頁。下面從第一次下載開始,依序說明每個步驟。
我開啟 Node.js 官方下載頁,選擇 LTS → Windows → Windows Installer(.msi)。在 Windows「設定 → 系統 → 關於」查看系統類型,選擇 x64 或 ARM64。
下載後在下載資料夾雙擊 MSI 檔。依序按 Next、接受授權條款,保留預設元件並確認包含 npm 和 Add to PATH,按 Install,完成後按 Finish。
我關閉舊終端機,從開始功能表開啟新的 PowerShell。只複製程式碼,不包含 PS 提示符,每行貼上後按 Enter。如果已經裝好 Node.js,就從下面兩行開始確認:
node --version
npm.cmd --version

npm.cmd install -g @openai/codex@latest
codex.cmd --version
我等安裝完成、提示符重新出現,再確認版本。版本號比截圖更新是正常的。

我使用自己的 CrazyRouter 帳號,並在控制台確認可以呼叫這裡設定的 gpt-5.6-sol。

我在自己的 CrazyRouter 控制台建立 API Key,用它來設定 Codex 的連線。
$codexKeySecure = Read-Host '請貼上 CrazyRouter API Key,然後按 Enter' -AsSecureString
$codexKeyPointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($codexKeySecure)
try {
$codexKeyPlain = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($codexKeyPointer)
if ([string]::IsNullOrWhiteSpace($codexKeyPlain)) { throw '沒有輸入 Key' }
[Environment]::SetEnvironmentVariable('OPENAI_API_KEY', $codexKeyPlain.Trim(), 'User')
[Environment]::SetEnvironmentVariable('OPENAI_BASE_URL', 'https://cn.crazyrouter.com/v1', 'User')
$env:OPENAI_API_KEY = $codexKeyPlain.Trim()
$env:OPENAI_BASE_URL = 'https://cn.crazyrouter.com/v1'
} finally {
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($codexKeyPointer)
$codexKeyPlain = $null
}
輸入時畫面可能沒有回顯,貼一次後直接按 Enter。下面只檢查有沒有值,不會印出 Key:
[bool]$env:OPENAI_API_KEY
先建立設定目錄並備份既有檔案:
$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
加入以下設定;env_key 是環境變數名字,不是實際 Key:
model = "gpt-5.6-sol"
model_provider = "crazyrouter"
[model_providers.crazyrouter]
name = "Crazyrouter"
base_url = "https://cn.crazyrouter.com/v1"
env_key = "OPENAI_API_KEY"
wire_api = "responses"
按 Ctrl + S 儲存,確認是 config.toml 而不是 config.toml.txt。若原檔已有同名欄位,修改原欄位,不要重複貼上同名 TOML。

圖三:env_key 只是變數名稱;公開畫面不可出現完整密鑰。
重新開啟 PowerShell,建立專用資料夾並啟動:
New-Item -ItemType Directory -Path "$env:USERPROFILE\CodexProjects\hello-codex" -Force
Set-Location "$env:USERPROFILE\CodexProjects\hello-codex"
Get-Location
codex.cmd --sandbox workspace-write --ask-for-approval on-request
若詢問是否信任目錄,先核對路徑是 hello-codex,再選信任並按 Enter。複核時第一次因未信任新目錄被只讀沙箱阻止寫入;完成信任與受限 Windows 沙箱設定後才成功。
先送最小連線任務:
請只回覆 CODEX_CONNECTION_OK。
不要讀取檔案、不要修改檔案、不要執行命令。

接著在同一個 Codex 視窗貼上:
請在目前練習目錄實際建立 index.html,不要只在聊天中輸出程式碼。
頁面標題是「我的第一個 Codex 網頁」,顯示「你好,Codex」。
加入「點擊打招呼」按鈕,按下後顯示「按鈕可以正常工作」。
CSS 和 JavaScript 都放在同一個 HTML 檔案,不使用外部圖片、字型、框架、CDN 或套件。
只建立或修改 index.html。若權限不允許寫檔,請明確說明,不要聲稱已建立。
輸入 /quit 回到 PowerShell,確認成果:
Test-Path .\index.html
Start-Process .\index.html
我在瀏覽器開啟 index.html,頁面顯示「你好,Codex」,點擊按鈕後顯示「按钮可以正常工作」。那次會話的收尾曾出現缺少原始上下文的英文提示,但已儲存的網頁仍能開啟並操作。

| 現象 | 優先檢查 | 不要先做 |
|---|---|---|
node 找不到 |
Node.js、PATH、新終端機 | 改模型或 Key |
.ps1 被阻擋 |
改用 .cmd |
關掉全部腳本防護 |
| 401 | Key 來源、有效期、Base URL | 使用登入密碼 |
| 403 | 帳戶與模型權限、完整錯誤訊息 | 只憑狀態碼猜原因 |
| 404 / model not found | Base URL、模型 ID | 重裝 Node.js |
| 能回答但不能寫檔 | 目錄信任、sandbox、目前路徑 | 開放所有權限 |
Test-Path 是 False |
Get-Location、檔名和副檔名 |
只相信聊天中的完成句 |