Problem
The Settings UI exposes "Codex binary path" and "Codex home path" fields, but neither value reaches the server. The user can type a custom path, but the server ignores it and always spawns the default codex binary.
Steps to reproduce
- Open Settings and set a custom Codex binary path (e.g.,
/usr/local/bin/codex-nightly)
- Start a new chat session
- Observe that the server still invokes the default
codex binary
Expected behavior
When codexBinaryPath is set in Settings, the server should use that value when spawning Codex CLI commands (both for sessions and health checks).
Relevant files
The server-side plumbing exists but never receives data. The gap is in the orchestration layer:
apps/web/src/appSettings.ts — stores codexBinaryPath in localStorage
packages/contracts/src/provider.ts — defines providerOptions.codex.binaryPath schema
packages/contracts/src/orchestration.ts — ThreadCreateCommand and ThreadTurnStartCommand lack a providerOptions field, so the web app has no way to send the setting
apps/server/src/orchestration/Layers/ProviderCommandReactor.ts — never reads or forwards providerOptions
apps/server/src/codexAppServerManager.ts — readCodexProviderOptions() (line ~1510) and startSession() (line ~551) already handle custom paths, but always receive undefined
apps/server/src/provider/Layers/ProviderHealth.ts — runCodexCommand() hardcodes "codex", ignoring any custom path
Problem
The Settings UI exposes "Codex binary path" and "Codex home path" fields, but neither value reaches the server. The user can type a custom path, but the server ignores it and always spawns the default
codexbinary.Steps to reproduce
/usr/local/bin/codex-nightly)codexbinaryExpected behavior
When
codexBinaryPathis set in Settings, the server should use that value when spawning Codex CLI commands (both for sessions and health checks).Relevant files
The server-side plumbing exists but never receives data. The gap is in the orchestration layer:
apps/web/src/appSettings.ts— storescodexBinaryPathin localStoragepackages/contracts/src/provider.ts— definesproviderOptions.codex.binaryPathschemapackages/contracts/src/orchestration.ts—ThreadCreateCommandandThreadTurnStartCommandlack aproviderOptionsfield, so the web app has no way to send the settingapps/server/src/orchestration/Layers/ProviderCommandReactor.ts— never reads or forwardsproviderOptionsapps/server/src/codexAppServerManager.ts—readCodexProviderOptions()(line ~1510) andstartSession()(line ~551) already handle custom paths, but always receiveundefinedapps/server/src/provider/Layers/ProviderHealth.ts—runCodexCommand()hardcodes"codex", ignoring any custom path