Skip to content

Settings UI 'Codex binary path' has no effect #486

Description

@chuks-qua

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

  1. Open Settings and set a custom Codex binary path (e.g., /usr/local/bin/codex-nightly)
  2. Start a new chat session
  3. 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

Activity

  1. chuks-qua commented on Mar 8, 2026

    @chuks-qua
    ContributorAuthor

    Investigation notes

    Traced the full data flow from UI to server. The server-side code to consume a custom binary path already works — readCodexProviderOptions() in codexAppServerManager.ts extracts it, and startSession() spawns with the custom path. The contract schema (ProviderSessionStartInput.providerOptions) also exists.

    The break is in the orchestration layer: ThreadCreateCommand and ThreadTurnStartCommand in packages/contracts/src/orchestration.ts have no providerOptions field. The web app stores the setting in localStorage but has no channel to send it to the server.

    To fix this, the orchestration commands need a providerOptions field, ProviderCommandReactor needs to read it, and ProviderHealth.ts needs to stop hardcoding "codex".

  2. added a commit that references this issue on Mar 8, 2026
    ec7664e
  3. added a commit that references this issue on Mar 8, 2026
    a7ec017
  4. added a commit that references this issue on Mar 14, 2026
    bace8ce
  5. added a commit that references this issue on Jun 17, 2026
    3f2e438
  6. added a commit that references this issue on Jul 7, 2026
    7ab8708
  7. added a commit that references this issue on Aug 18, 2026
    c2c52e1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions