Lumoswitch 文档

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:复制本页「永久使用」代码框的完整内容
  • futureCommandcodex
  • 展示顺序:10
  • 最近核验:2026-08-27

常见问题

  • 执行命令仍提示 codex: command not found:CLI 未安装或新终端尚未加载安装路径,先让 codex --version 成功。
  • 直接运行 codex 没有走 Lumoswitch:请打开新终端,让受管 CODEX_HOME 环境生效,再运行 codex
  • 桌面端没有变化:这是预期的隔离行为。需要两端共用时选择 ChatGPT 桌面端 + Codex CLI
  • 一直等待但没有请求日志:确认已打开新终端,并从目标项目目录启动新的 codex 进程。

参考:Codex CLICodex 的 WSL 指南自定义模型提供方配置参考

On this page