Codex CLI 接入
Codex CLI 是在终端中读取、修改和验证代码的编码 Agent。此方式适合只在终端中使用 codex,或希望 CLI 不影响 ChatGPT 桌面端配置的用户。Lumoswitch 通过启动参数接入,不修改 ~/.codex/config.toml 或 ~/.codex/.env。
如果你只安装了 ChatGPT 桌面端,终端中没有 codex 命令,请使用 ChatGPT 桌面端(Codex)接入,不要继续本页。
1. 确认 Codex CLI 已安装
codex --version若提示 codex: command not found,选择一种官方安装方式:
# macOS / Linux 独立安装器
curl -fsSL https://chatgpt.com/codex/install.sh | sh
# 或使用 npm
npm install -g @openai/codex
# 或使用 Homebrew
brew install --cask codex安装完成后打开新终端,再运行 codex --version。
在 Windows 上使用 WSL 时,请选择 WSL2,并在 WSL Shell 内执行 Linux 安装器;项目建议放在 ~/code/project 这类 Linux 路径,而不是 /mnt/c。不要复用 Windows 中安装的 Codex 可执行文件;WSL 导入会特意把隔离的 CODEX_HOME 写入当前发行版。Codex 0.115 及更高版本不再支持 WSL1。
2. 准备四个配置值
以下命令中的占位符需要替换为你的配置 API 完成页所显示的真实值:
| 占位符 | 填写内容 |
|---|---|
{{api_base_url}} | Lumoswitch API 地址,通常以 /v1 结尾 |
{{access_key}} | 配置 API 的 Access Key,请勿分享或提交到 Git |
{{model}} | 完成页显示的下游模型名称,不是上游平台的展示名称 |
{{codex_model_catalog_base64}} | 按有效能力生成并经 Base64 编码的 Codex 模型目录 |
配置 API 必须启用 Responses 输出。
3. 选择使用方式
| 模式 | 适合情况 | 本地写入 | 以后怎么启动 |
|---|---|---|---|
| 仅本次启动 | 临时测试或偶尔使用 | 不写入 Lumoswitch 启动器,也不改 Codex 共享配置 | 下次重新运行临时命令 |
| 永久使用 | 经常在终端使用 Lumoswitch | 写入原生 Codex Home 与可选维护启动器 | 运行 codex |
| 清除接入 | 停止 CLI 使用 Lumoswitch | 删除原生接入与可选维护启动器 | 以后运行普通 codex |
仅本次启动
在需要工作的项目目录运行:
(
set -e
LUMOSWITCH_CODEX_CATALOG="$(mktemp "${TMPDIR:-/tmp}/lumoswitch-codex-models.XXXXXX")"
trap 'rm -f "$LUMOSWITCH_CODEX_CATALOG"' EXIT
printf '%s' '{{codex_model_catalog_base64}}' | base64 --decode > "$LUMOSWITCH_CODEX_CATALOG"
chmod 600 "$LUMOSWITCH_CODEX_CATALOG"
LUMOSWITCH_CODEX_API_KEY="{{access_key}}" codex --model "{{model}}" \
-c 'model_provider="lumoswitch"' \
-c 'features.multi_agent=false' \
-c 'web_search="disabled"' \
-c "model_catalog_json=\"$LUMOSWITCH_CODEX_CATALOG\"" \
-c 'model_providers.lumoswitch.name="Lumoswitch"' \
-c 'model_providers.lumoswitch.base_url="{{api_base_url}}"' \
-c 'model_providers.lumoswitch.env_key="LUMOSWITCH_CODEX_API_KEY"' \
-c 'model_providers.lumoswitch.wire_api="responses"' \
-c 'model_providers.lumoswitch.http_headers={ "X-Lumoswitch-Agent" = "codex-v1" }' \
-c 'model_providers.lumoswitch.requires_openai_auth=false'
)关闭这次 Codex 会话后配置即失效,本机不会新增启动器。
永久使用
永久导入会把 Access Key 保存到仅当前用户可读的受管环境文件中。请只在可信的个人设备上使用。
在可信终端运行一次:
set -e
LUMOSWITCH_ROOT="$HOME/.config/lumoswitch/agents/codex"
LUMOSWITCH_ENV="$LUMOSWITCH_ROOT/env.sh"
LUMOSWITCH_LAUNCHER="$HOME/.local/bin/lumoswitch-codex"
mkdir -p "$LUMOSWITCH_ROOT" "$(dirname "$LUMOSWITCH_LAUNCHER")"
umask 077
if [ -f "$LUMOSWITCH_LAUNCHER" ]; then
LUMOSWITCH_BACKUP="$LUMOSWITCH_LAUNCHER.backup.$(date +%Y%m%d-%H%M%S)-$$"
cp "$LUMOSWITCH_LAUNCHER" "$LUMOSWITCH_BACKUP"
chmod 600 "$LUMOSWITCH_BACKUP"
fi
LUMOSWITCH_CODEX_HOME="$LUMOSWITCH_ROOT/codex-home"
LUMOSWITCH_CODEX_CONFIG="$LUMOSWITCH_CODEX_HOME/config.toml"
LUMOSWITCH_CODEX_CATALOG="$LUMOSWITCH_ROOT/model-catalog.json"
mkdir -p "$LUMOSWITCH_CODEX_HOME"
printf '%s' '{{codex_model_catalog_base64}}' | base64 --decode > "$LUMOSWITCH_CODEX_CATALOG"
cat > "$LUMOSWITCH_CODEX_CONFIG" <<LUMOSWITCH_CONFIG_EOF
model = "{{model}}"
model_provider = "lumoswitch"
model_catalog_json = "$LUMOSWITCH_CODEX_CATALOG"
web_search = "disabled"
[features]
multi_agent = false
[model_providers.lumoswitch]
name = "Lumoswitch"
base_url = "{{api_base_url}}"
env_key = "LUMOSWITCH_CODEX_API_KEY"
wire_api = "responses"
http_headers = { "X-Lumoswitch-Agent" = "codex-v1" }
requires_openai_auth = false
LUMOSWITCH_CONFIG_EOF
cat > "$LUMOSWITCH_ENV" <<'LUMOSWITCH_ENV_EOF'
export CODEX_HOME="$HOME/.config/lumoswitch/agents/codex/codex-home"
export LUMOSWITCH_CODEX_API_KEY="{{access_key}}"
LUMOSWITCH_ENV_EOF
case "$SHELL" in
*/zsh) LUMOSWITCH_PROFILE="$HOME/.zshrc" ;;
*/bash) LUMOSWITCH_PROFILE="$HOME/.bashrc" ;;
*) LUMOSWITCH_PROFILE="$HOME/.profile" ;;
esac
touch "$LUMOSWITCH_PROFILE"
LUMOSWITCH_PROFILE_MARKER='# Lumoswitch Agent: codex'
LUMOSWITCH_SOURCE_LINE='[ -f "$HOME/.config/lumoswitch/agents/codex/env.sh" ] && . "$HOME/.config/lumoswitch/agents/codex/env.sh"'
if ! grep -Fqx "$LUMOSWITCH_SOURCE_LINE" "$LUMOSWITCH_PROFILE"; then
printf '\n%s\n%s\n' "$LUMOSWITCH_PROFILE_MARKER" "$LUMOSWITCH_SOURCE_LINE" >> "$LUMOSWITCH_PROFILE"
fi
printf '%s\n' "$LUMOSWITCH_PROFILE" > "$LUMOSWITCH_ROOT/profile-path"
cat > "$LUMOSWITCH_LAUNCHER" <<'LUMOSWITCH_LAUNCHER_EOF'
#!/usr/bin/env bash
set -e
LUMOSWITCH_ROOT="$HOME/.config/lumoswitch/agents/codex"
LUMOSWITCH_ENV="$LUMOSWITCH_ROOT/env.sh"
LUMOSWITCH_LAUNCHER="$HOME/.local/bin/lumoswitch-codex"
if [ "$1" = "--lumoswitch-clean" ]; then
if [ -f "$LUMOSWITCH_ROOT/profile-path" ]; then
LUMOSWITCH_PROFILE="$(cat "$LUMOSWITCH_ROOT/profile-path")"
if [ -f "$LUMOSWITCH_PROFILE" ]; then
LUMOSWITCH_PROFILE_MARKER='# Lumoswitch Agent: codex'
LUMOSWITCH_SOURCE_LINE='[ -f "$HOME/.config/lumoswitch/agents/codex/env.sh" ] && . "$HOME/.config/lumoswitch/agents/codex/env.sh"'
LUMOSWITCH_PROFILE_TMP="$LUMOSWITCH_PROFILE.lumoswitch.$$"
awk -v marker="$LUMOSWITCH_PROFILE_MARKER" -v source="$LUMOSWITCH_SOURCE_LINE" '$0 != marker && $0 != source' "$LUMOSWITCH_PROFILE" > "$LUMOSWITCH_PROFILE_TMP"
mv "$LUMOSWITCH_PROFILE_TMP" "$LUMOSWITCH_PROFILE"
fi
fi
if [ -d "$LUMOSWITCH_ROOT" ]; then
find "$LUMOSWITCH_ROOT" -depth \( -type f -o -type l \) -delete
find "$LUMOSWITCH_ROOT" -depth -type d -exec rmdir {} \; 2>/dev/null || true
fi
find "$(dirname "$LUMOSWITCH_LAUNCHER")" -maxdepth 1 -type f -name 'lumoswitch-codex.backup.*' -delete
rm -f "$LUMOSWITCH_LAUNCHER"
printf '%s\n' 'Lumoswitch native setup and optional launcher removed. Open a new terminal to refresh the environment.'
exit 0
fi
if [ -f "$LUMOSWITCH_ENV" ]; then . "$LUMOSWITCH_ENV"; fi
exec codex "$@"
LUMOSWITCH_LAUNCHER_EOF
chmod 600 "$LUMOSWITCH_ENV"
find "$LUMOSWITCH_ROOT" -type f -exec chmod 600 {} \;
chmod 700 "$LUMOSWITCH_LAUNCHER"
. "$LUMOSWITCH_ENV"
printf '%s\n' 'Native Lumoswitch setup saved. Future command: codex'
printf '%s\n' 'Optional maintenance launcher: ~/.local/bin/lumoswitch-codex'
codex命令会先备份已有启动器和模型目录,再以仅当前用户可读或可执行的权限写入新文件。它不会改变 ChatGPT 桌面端或 Codex IDE 扩展的共享配置。模型目录只开放模型与 Lumoswitch 实际路由共同支持的推理档位;没有可信请求侧控制能力的模型默认使用 none。Codex 多智能体 namespace 与原生网页搜索保持关闭,普通函数工具、终端命令和文件操作仍可使用。
4. 日常启动
选择永久使用后,在需要工作的项目目录运行:
codex若 Access Key、API 地址或下游模型名称改变,替换占位符后重新运行上面的永久使用命令。已经运行的 Codex 进程不会自动更新。
新会话使用模型目录中的有效默认档位。只有经过能力校验的档位才会出现在 /reasoning 中;DeepSeek 这类开关式推理模型只显示一个等效的开启档位。
Windows PowerShell 原生导入
以下命令在 Windows PowerShell 中原生运行,不需要 WSL。它们与本页的 macOS/Linux 模板使用同一组连接值。
仅本次使用(Windows)
& {
$ErrorActionPreference = 'Stop'
$lumoswitchConfig = Join-Path ([IO.Path]::GetTempPath()) ('lumoswitch-' + [Guid]::NewGuid().ToString('N') + '.json')
[IO.File]::WriteAllBytes($lumoswitchConfig, [Convert]::FromBase64String('{{codex_model_catalog_base64}}'))
$lumoswitchEnvironmentNames = @('LUMOSWITCH_CODEX_API_KEY')
$lumoswitchPreviousEnvironment = @{}
foreach ($lumoswitchName in $lumoswitchEnvironmentNames) {
$lumoswitchPreviousEnvironment[$lumoswitchName] = [Environment]::GetEnvironmentVariable($lumoswitchName, 'Process')
}
$lumoswitchExitCode = 0
try {
[Environment]::SetEnvironmentVariable('LUMOSWITCH_CODEX_API_KEY', '{{access_key}}', 'Process')
$lumoswitchArguments = @('--model', '{{model}}', '-c', 'model_provider="lumoswitch"', '-c', 'features.multi_agent=false', '-c', 'web_search="disabled"', '-c', ('model_catalog_json="' + $lumoswitchConfig + '"'), '-c', 'model_providers.lumoswitch.name="Lumoswitch"', '-c', 'model_providers.lumoswitch.base_url="{{api_base_url}}"', '-c', 'model_providers.lumoswitch.env_key="LUMOSWITCH_CODEX_API_KEY"', '-c', 'model_providers.lumoswitch.wire_api="responses"', '-c', 'model_providers.lumoswitch.http_headers={ "X-Lumoswitch-Agent" = "codex-v1" }', '-c', 'model_providers.lumoswitch.requires_openai_auth=false')
$lumoswitchExecutable = Get-Command 'codex.cmd' -CommandType Application -ErrorAction SilentlyContinue
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'codex' -CommandType Application -ErrorAction Stop }
& $lumoswitchExecutable.Path @lumoswitchArguments
if ($null -ne $LASTEXITCODE) { $lumoswitchExitCode = $LASTEXITCODE }
} finally {
foreach ($lumoswitchName in $lumoswitchEnvironmentNames) {
[Environment]::SetEnvironmentVariable($lumoswitchName, $lumoswitchPreviousEnvironment[$lumoswitchName], 'Process')
}
Remove-Item -LiteralPath $lumoswitchConfig -Force -ErrorAction SilentlyContinue
}
if ($lumoswitchExitCode -ne 0) { throw 'codex exited with code ' + $lumoswitchExitCode }
}永久使用(Windows)
该命令会备份已有的 Lumoswitch 专用文件,并为配置和启动器收紧当前用户的访问权限。
& {
$ErrorActionPreference = 'Stop'
$lumoswitchRoot = Join-Path $env:LOCALAPPDATA 'Lumoswitch\agents\codex'
$lumoswitchLauncher = Join-Path $env:LOCALAPPDATA 'Lumoswitch\bin\lumoswitch-codex.ps1'
$lumoswitchBackupSuffix = (Get-Date -Format 'yyyyMMdd-HHmmss') + '-' + $PID
function Protect-LumoswitchFile([string] $Path) {
$lumoswitchSid = [Security.Principal.WindowsIdentity]::GetCurrent().User.Value
& icacls.exe $Path '/inheritance:r' '/grant:r' ('*' + $lumoswitchSid + ':(F)') '*S-1-5-18:(F)' '*S-1-5-32-544:(F)' | Out-Null
if ($LASTEXITCODE -ne 0) { throw "Could not restrict access to $Path" }
}
function Install-LumoswitchFile([string] $Path, [string] $Content) {
[IO.Directory]::CreateDirectory((Split-Path -Parent $Path)) | Out-Null
if (Test-Path -LiteralPath $Path) {
$lumoswitchItem = Get-Item -LiteralPath $Path -Force
if ($lumoswitchItem.PSIsContainer -or ($lumoswitchItem.Attributes -band [IO.FileAttributes]::ReparsePoint)) {
throw "Lumoswitch refused to replace a directory or link: $Path"
}
$lumoswitchBackup = $Path + '.backup.' + $lumoswitchBackupSuffix
Copy-Item -LiteralPath $Path -Destination $lumoswitchBackup
Protect-LumoswitchFile $lumoswitchBackup
}
$lumoswitchTemporary = $Path + '.' + [Guid]::NewGuid().ToString('N') + '.tmp'
try {
[IO.File]::WriteAllText($lumoswitchTemporary, $Content, [Text.UTF8Encoding]::new($false))
Move-Item -LiteralPath $lumoswitchTemporary -Destination $Path -Force
Protect-LumoswitchFile $Path
} finally {
Remove-Item -LiteralPath $lumoswitchTemporary -Force -ErrorAction SilentlyContinue
}
}
[IO.Directory]::CreateDirectory($lumoswitchRoot) | Out-Null
$lumoswitchCodexHome = Join-Path $lumoswitchRoot 'codex-home'
$lumoswitchCatalog = Join-Path $lumoswitchRoot 'model-catalog.json'
$lumoswitchCatalogContent = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('{{codex_model_catalog_base64}}'))
Install-LumoswitchFile $lumoswitchCatalog $lumoswitchCatalogContent
$lumoswitchCatalogToml = $lumoswitchCatalog.Replace('\', '/')
$lumoswitchConfig = Join-Path $lumoswitchCodexHome 'config.toml'
$lumoswitchConfigContent = @'
model = "{{model}}"
model_provider = "lumoswitch"
model_catalog_json = "__LUMOSWITCH_CATALOG__"
web_search = "disabled"
[features]
multi_agent = false
[model_providers.lumoswitch]
name = "Lumoswitch"
base_url = "{{api_base_url}}"
env_key = "LUMOSWITCH_CODEX_API_KEY"
wire_api = "responses"
http_headers = { "X-Lumoswitch-Agent" = "codex-v1" }
requires_openai_auth = false
'@.Replace('__LUMOSWITCH_CATALOG__', $lumoswitchCatalogToml)
Install-LumoswitchFile $lumoswitchConfig $lumoswitchConfigContent
$lumoswitchEnvironment = [ordered]@{}
$lumoswitchEnvironment['CODEX_HOME'] = (Join-Path $lumoswitchRoot 'codex-home')
$lumoswitchEnvironment['LUMOSWITCH_CODEX_API_KEY'] = '{{access_key}}'
foreach ($lumoswitchEntry in $lumoswitchEnvironment.GetEnumerator()) {
[Environment]::SetEnvironmentVariable($lumoswitchEntry.Key, $lumoswitchEntry.Value, 'User')
[Environment]::SetEnvironmentVariable($lumoswitchEntry.Key, $lumoswitchEntry.Value, 'Process')
}
$lumoswitchLauncherContent = @'
param([Parameter(ValueFromRemainingArguments = $true)][string[]] $AgentArgs)
$ErrorActionPreference = 'Stop'
$lumoswitchRoot = Join-Path $env:LOCALAPPDATA 'Lumoswitch\agents\codex'
$lumoswitchLauncher = Join-Path $env:LOCALAPPDATA 'Lumoswitch\bin\lumoswitch-codex.ps1'
function Remove-LumoswitchFile([string] $Path) {
if (-not (Test-Path -LiteralPath $Path)) { return }
$lumoswitchItem = Get-Item -LiteralPath $Path -Force
if ($lumoswitchItem.PSIsContainer -or ($lumoswitchItem.Attributes -band [IO.FileAttributes]::ReparsePoint)) {
throw "Lumoswitch refused to remove a directory or link: $Path"
}
Remove-Item -LiteralPath $Path -Force
}
if ($AgentArgs.Count -gt 0 -and $AgentArgs[0] -eq '--lumoswitch-clean') {
foreach ($lumoswitchName in @('CODEX_HOME', 'LUMOSWITCH_CODEX_API_KEY')) {
[Environment]::SetEnvironmentVariable($lumoswitchName, $null, 'User')
[Environment]::SetEnvironmentVariable($lumoswitchName, $null, 'Process')
}
if (Test-Path -LiteralPath $lumoswitchRoot -PathType Container) {
$lumoswitchRootItem = Get-Item -LiteralPath $lumoswitchRoot -Force
if ($lumoswitchRootItem.Attributes -band [IO.FileAttributes]::ReparsePoint) { throw 'Lumoswitch refused to clean through a linked directory.' }
foreach ($lumoswitchFile in @(Get-ChildItem -LiteralPath $lumoswitchRoot -File -Recurse -Force)) { Remove-LumoswitchFile $lumoswitchFile.FullName }
foreach ($lumoswitchDirectory in @(Get-ChildItem -LiteralPath $lumoswitchRoot -Directory -Recurse -Force | Sort-Object FullName -Descending)) {
if ($null -eq (Get-ChildItem -LiteralPath $lumoswitchDirectory.FullName -Force | Select-Object -First 1)) { Remove-Item -LiteralPath $lumoswitchDirectory.FullName -Force }
}
if ($null -eq (Get-ChildItem -LiteralPath $lumoswitchRoot -Force | Select-Object -First 1)) { Remove-Item -LiteralPath $lumoswitchRoot -Force }
}
$lumoswitchBin = Split-Path -Parent $lumoswitchLauncher
if (Test-Path -LiteralPath $lumoswitchBin -PathType Container) {
foreach ($lumoswitchBackup in @(Get-ChildItem -LiteralPath $lumoswitchBin -Filter 'lumoswitch-codex.ps1.backup.*' -File -Force)) { Remove-LumoswitchFile $lumoswitchBackup.FullName }
}
Remove-LumoswitchFile $lumoswitchLauncher
Write-Host 'Lumoswitch native setup and optional launcher removed. Open a new terminal to refresh the environment.'
exit 0
}
$lumoswitchEnvironment = [ordered]@{}
$lumoswitchEnvironment['CODEX_HOME'] = (Join-Path $lumoswitchRoot 'codex-home')
$lumoswitchEnvironment['LUMOSWITCH_CODEX_API_KEY'] = '{{access_key}}'
foreach ($lumoswitchEntry in $lumoswitchEnvironment.GetEnumerator()) {
[Environment]::SetEnvironmentVariable($lumoswitchEntry.Key, $lumoswitchEntry.Value, 'Process')
}
$lumoswitchExecutable = Get-Command 'codex.cmd' -CommandType Application -ErrorAction SilentlyContinue
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'codex.exe' -CommandType Application -ErrorAction SilentlyContinue }
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'codex' -CommandType Application -ErrorAction Stop }
$lumoswitchArguments = @()
& $lumoswitchExecutable.Path @lumoswitchArguments @AgentArgs
if ($null -ne $LASTEXITCODE) { exit $LASTEXITCODE }
'@
Install-LumoswitchFile $lumoswitchLauncher $lumoswitchLauncherContent
Write-Host 'Native Lumoswitch setup saved. Future command: codex'
Write-Host 'Optional maintenance launcher:' $lumoswitchLauncher
$lumoswitchExecutable = Get-Command 'codex.cmd' -CommandType Application -ErrorAction SilentlyContinue
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'codex.exe' -CommandType Application -ErrorAction SilentlyContinue }
if ($null -eq $lumoswitchExecutable) { $lumoswitchExecutable = Get-Command 'codex' -CommandType Application -ErrorAction Stop }
$lumoswitchArguments = @()
& $lumoswitchExecutable.Path @lumoswitchArguments
if ($null -ne $LASTEXITCODE -and $LASTEXITCODE -ne 0) { throw 'codex exited with code ' + $LASTEXITCODE }
}导入会写入 Agent 支持的持久化配置,并直接启动 codex。保存的 Lumoswitch 维护脚本不是启动 Agent 的必需入口;需要恢复或移除此接入时,运行它并追加 --lumoswitch-clean。
5. 清除接入
Windows PowerShell
先退出该 Agent 的所有 Lumoswitch 会话,再运行下面的命令。可选维护启动器会删除受管原生配置、恢复已保留的共享文件、清除 Lumoswitch 用户环境变量,并移除自身。
& {
$lumoswitchLauncher = Join-Path $env:LOCALAPPDATA 'Lumoswitch\bin\lumoswitch-codex.ps1'
if (-not (Test-Path -LiteralPath $lumoswitchLauncher -PathType Leaf)) {
throw 'The optional Lumoswitch maintenance launcher is missing. Run persistent import again before cleanup.'
}
& powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File $lumoswitchLauncher --lumoswitch-clean
}macOS / Linux
先退出正在运行的 Lumoswitch Codex 会话,再执行:
"$HOME/.local/bin/lumoswitch-codex" --lumoswitch-clean临时命令把 Access Key、模型目录和兼容开关限制在 Codex 进程内,退出后临时目录会自动删除。上面的命令会删除专属 Codex Home、受管环境、可选维护启动器及其 Lumoswitch 备份;它不会改动 ChatGPT 桌面端、Codex IDE 扩展或 ~/.codex 共享配置。
6. 验证连接
进入 Codex 后先运行 /status,确认当前模型与提供方,再发送一个简单请求并查看 Lumoswitch 请求日志。
如果请求失败,请检查:
- API 地址以
/v1结尾,但不要再加/responses; - 下游模型名称与配置完成页完全一致;
- 当前
/reasoning档位来自最新生成的能力目录;旧目录请重新执行一键导入命令刷新; - 永久导入后已打开新终端,再直接运行普通
codex; - Access Key 没有多余空格且尚未失效。
发布维护字段
- 平台 ID:
codex - 展示名称:
Codex CLI - 下游协议:
responses commandTemplate:复制本页「仅本次启动」代码框的完整内容- 永久策略:
native persistentCommandTemplate:复制本页「永久使用」代码框的完整内容futureCommand:codex- 展示顺序:
10 - 最近核验:
2026-08-27
常见问题
- 执行命令仍提示
codex: command not found:CLI 未安装或新终端尚未加载安装路径,先让codex --version成功。 - 直接运行
codex没有走 Lumoswitch:请打开新终端,让受管CODEX_HOME环境生效,再运行codex。 - 桌面端没有变化:这是预期的隔离行为。需要两端共用时选择 ChatGPT 桌面端 + Codex CLI。
- 一直等待但没有请求日志:确认已打开新终端,并从目标项目目录启动新的
codex进程。