Skip to content

Realtime Voice startup fails when the projectless root is a valid directory symlink #38708

Description

@nos1609

What version of the Codex App are you using (From “About Codex” dialog)?

26.810.6296.0; also reproduced on 26.810.4967.0.

What subscription do you have?

ChatGPT subscription. The exact tier is not relevant because the failure occurs in local Desktop filesystem validation before Realtime Voice or any model request starts.

What platform is your computer?

Windows 11 Pro, Microsoft Windows NT 10.0.28000.0, ARM64.

What issue are you seeing?

Realtime Voice cannot start when the default projectless workspace root is a valid NTFS directory symlink.

The UI fails before audio starts:

Unable to start voice chat
Projectless thread directory must be a real directory

The Desktop log records the same causal failure:

Error starting realtime voice
Failed to start realtime in the avatar overlay
errorMessage="Projectless thread directory must be a real directory"

The link is valid and resolves to an existing directory:

C:\Users\<USER>\Documents\Codex
  -> D:\<USER>\Documents\Codex

Both .NET Directory.Exists(link) and PowerShell Test-Path -PathType Container return true.

On this system, the Windows Known Documents folder is already redirected to D:\<USER>\Documents. However, the current packaged Desktop code still builds the projectless root as path.join(homeDirectory, "Documents", "Codex"). It then reads metadata without following symlinks and explicitly rejects isSymbolicLink(), which produces the error above during Realtime Voice startup.

This reproduced multiple times in both app versions listed above.

What steps can reproduce the bug?

  1. In a test profile, create an existing writable directory outside the default path.
  2. Create an NTFS directory symlink from %USERPROFILE%\Documents\Codex to that directory.
  3. Confirm the link resolves as a directory.
  4. Open an existing projectless task in Codex Desktop.
  5. Select Start voice chat.
  6. Observe that the voice overlay fails before audio starts with Projectless thread directory must be a real directory.

Example setup in PowerShell, when the link path does not already exist:

New-Item -ItemType Directory -Path 'D:\CodexWork'
New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\Documents\Codex" -Target 'D:\CodexWork'
Test-Path -LiteralPath "$env:USERPROFILE\Documents\Codex" -PathType Container

What is the expected behavior?

Realtime Voice should start when the projectless root resolves to a real writable directory.

The Desktop app should resolve and validate the symlink target or use the OS Known Documents location. A valid directory symlink should not disable voice chat or projectless threads.

Additional information

Related: #32039 covers projectless chat creation being blocked by a valid symlink. This report isolates the separate Realtime Voice entry point, which performs the same validation before audio starts and makes voice unavailable.

#24534 tracks configuration of the projectless workspace root.

Paths, usernames, thread IDs, and log file locations are intentionally redacted.

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appbugSomething isn't workingwindows-osIssues related to Codex on Windows systems

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions