Codex CLI cho người mới: tải, cài đặt và bắt đầu trên Windows

Tôi chọn một trang web nhỏ làm bài tập đầu tiên với Codex: một file mở được trong trình duyệt và có nút bấm để thử. Tôi sắp xếp hướng dẫn từ tải Node.js, cài Codex CLI, cấu hình CrazyRouter đến tạo file HTML, để người mới cũng có thể bắt đầu từ bước tải xuống.
1. Tải và cài Node.js
Tôi mở trang tải Node.js chính thức và chọn LTS → Windows → Windows Installer (.msi). Trong Settings → System → About, tôi xem loại hệ thống để chọn x64 hoặc ARM64.
Tôi mở file MSI trong Downloads, bấm Next, chấp nhận điều khoản và giữ thành phần mặc định gồm npm cùng Add to PATH. Tôi bấm Install, rồi Finish sau khi hoàn tất.
Tôi đóng terminal cũ và mở PowerShell mới từ Start. Tôi chỉ chép mã, không lấy prompt PS, và nhấn Enter ở từng dòng. Nếu Node.js đã được cài, tôi bắt đầu bằng hai lệnh sau:
node --version
npm.cmd --version

2. Cài Codex CLI
npm.cmd install -g @openai/codex@latest
codex.cmd --version
Tôi chờ cài đặt xong rồi mới kiểm tra phiên bản. Bản mới nhất có thể khác số trong ảnh minh họa.

3. Kết nối tài khoản CrazyRouter của tôi
Trong tài khoản CrazyRouter của mình, tôi kiểm tra quyền dùng gpt-5.6-sol, là model được cấu hình trong ví dụ này.

Tôi tạo API key trong tài khoản CrazyRouter của mình để cấu hình kết nối. Lệnh sau nhận key bằng chế độ nhập ẩn:
$codexKeySecure = Read-Host 'Dán CrazyRouter API Key rồi nhấn Enter' -AsSecureString
$codexKeyPointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($codexKeySecure)
try {
$codexKeyPlain = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($codexKeyPointer)
if ([string]::IsNullOrWhiteSpace($codexKeyPlain)) { throw 'Chưa nhập 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
}
Kiểm tra chỉ sự tồn tại của giá trị:
[bool]$env:OPENAI_API_KEY
$env:OPENAI_BASE_URL
True không chứng minh key hợp lệ, còn URL phải hiện https://cn.crazyrouter.com/v1. Không chạy $env:OPENAI_API_KEY vì lệnh đó sẽ in bí mật vào terminal history.
4. Cấu hình provider trong config.toml
Tạo thư mục cấu hình và backup file cũ trước khi mở Notepad:
$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
Thêm hoặc sửa đúng các trường sau, không lặp lại cùng một trường TOML:
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"
env_key là tên biến, không phải key. Hai dòng model và model_provider ở cấp đầu file; đặt chúng bên dưới một section khác có thể làm ý nghĩa thay đổi. Lưu bằng Ctrl + S và kiểm tra phần mở rộng là .toml, không phải .toml.txt.

5. Kiểm tra request trước khi yêu cầu tạo file
Mở PowerShell mới, tạo workspace riêng và khởi động Codex:
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
Nếu Codex hỏi trust directory, kiểm tra đúng thư mục hello-codex rồi mới chọn trust. Lần thử đầu trong biên bản bị sandbox chỉ đọc chặn việc ghi vì thư mục mới chưa được tin cậy. Sau khi trust và hoàn tất thiết lập sandbox Windows giới hạn, file mới được tạo.
Trong ô chat của Codex, gửi request nhỏ:
Chỉ trả lời CODEX_CONNECTION_OK.
Không đọc file, không sửa file, không chạy lệnh.

Chuỗi này là bằng chứng request đi qua provider, key, model và gateway. Số version chỉ chứng minh chương trình cục bộ khởi động.
6. Tạo trang HTML tối thiểu
Gửi nguyên khối yêu cầu sau, không tách thành nhiều tin nhắn:
Hãy thực sự tạo index.html trong thư mục hiện tại, không chỉ in code trong chat.
Tiêu đề trang là “我的第一个 Codex 网页” và nội dung hiển thị “你好,Codex”.
Thêm nút “点击打招呼”; khi bấm phải hiện “按钮可以正常工作”.
Đặt CSS và JavaScript trong cùng file HTML; không dùng ảnh, font, framework, CDN hay package bên ngoài.
Chỉ tạo hoặc sửa index.html. Nếu quyền ghi bị từ chối, hãy nói rõ và không tuyên bố đã tạo.
Thoát bằng /quit, rồi kiểm tra bằng PowerShell:
Test-Path .\index.html
Start-Process .\index.html
Tôi mở index.html trong trình duyệt và bấm nút. Trang hiện “你好,Codex”, sau đó đổi thành “按钮可以正常工作”. Cuối phiên có thông báo thiếu ngữ cảnh gốc, nhưng file đã lưu và nút trên trang vẫn hoạt động.

7. Bảng chẩn đoán nhanh
| Hiện tượng | Kiểm tra đầu tiên | Không nên làm ngay |
|---|---|---|
node không tồn tại |
Node.js, PATH, cửa sổ mới | Đổi model |
.ps1 bị chặn |
Dùng .cmd |
Tắt toàn bộ execution policy |
| 401 | Nguồn key, hạn dùng, URL | Dùng mật khẩu website |
| 403 | Quyền tài khoản/model và nội dung lỗi | Đoán nguyên nhân từ mỗi mã số |
| 404 hoặc model not found | Base URL, model ID, /v1 |
Cài lại Node.js |
| Model trả lời nhưng không ghi được | Trust directory, sandbox, vị trí hiện tại | Cho phép mọi thao tác |
Test-Path là False |
Get-Location và tên file |
Tin vào câu “đã tạo” trong chat |
All rights reserved