Codex Desktop blocks projectless chat creation when default workspace path is a valid symlink
Summary
Codex Desktop can no longer create a chat without selecting a project folder when the default projectless workspace path is a symlink to a real, writable directory.
The app rejects task creation with:
Error creating task
Projectless thread directory must be a real directory
Starting chats without folders is a core Codex Desktop workflow and was previously available. A valid filesystem indirection should not make the entire projectless-chat flow unavailable.
Environment
- Codex Desktop:
26.707.31428(build5059) - macOS:
26.5.2(build25F84) - Architecture: Apple Silicon (
arm64) - Default projectless path:
~/Documents/Codex - The path is a symlink to
/Users/<user>/Codex - The symlink target exists, resolves as a directory, and is writable
Steps to reproduce
- Create a real writable directory outside
~/Documents:
``sh``
mkdir -p ~/Codex
- Make the default projectless path point to it:
``sh``
ln -s ~/Codex ~/Documents/Codex
- Open Codex Desktop.
- Start a new chat without selecting a project folder.
- Observe that task creation fails.
Actual behavior
The new task is not created. Codex shows:
Projectless thread directory must be a real directory
This makes chats without folders unavailable.
Expected behavior
Codex should create the projectless chat successfully when the configured/default path resolves to a real writable directory.
At minimum, Codex should resolve and validate the symlink target. Longer term, a supported configurable projectless workspace directory would avoid forcing users into the default ~/Documents/Codex path.
Why this is a bug rather than only a feature request
The immediate failure is not merely that the storage location is non-configurable. A previously supported user workflow—starting a chat without choosing a folder—is completely blocked even though the destination is a valid writable directory.
Related issues
- #24534 tracks configurable storage for projectless workspaces.
- #24734 reported the same error while requesting configuration support, but was closed as a duplicate.
- This report isolates the current user-visible regression: valid projectless chat creation fails entirely.
Additional information
A screenshot of the error toast was captured and can be provided if needed.
4 Comments
Still reproducible in Codex Desktop
26.707.61608(build5200), and I isolated the failure to the Desktop app's projectless-root validation rather than SQLite, permissions, or the bundled app-server.Additional evidence:
~/Documents/Codex, a valid symlink whose target was an existing writable directory.lstatreportsisSymbolicLink(), producing the exactProjectless thread directory must be a real directoryerror before the workspace can be reserved.26.707.62119(build5211). Its packaged validator retains the same no-follow /isSymbolicLink()rejection, so updating alone would not change this behavior.~/Documents/Codexand the current-date child with real local directories, while keeping compatibility links for the existing canonical workspaces. I did not restart/reinstall Codex, change the projectless preference, or reset the state database.work/+outputs/layout), then through the real Desktop UI using New task -> Don't work in a project. The UI-created thread persisted under~/Documents/Codex/<date>/..., returned the expected canary response, and no new occurrence of the validation error appeared in the Desktop log.PRAGMA integrity_checkon the thread state DB isok.This confirms the causal chain:
projectless submit -> hard-coded ~/Documents/Codex -> lstat/no-follow validation -> symlink rejected -> workspace reservation aborts -> task creation failsSuggested fix: resolve and validate the symlink target (including writable-directory and containment/safety checks), or make the projectless root officially configurable. If symlinks are intentionally unsupported, the app should provide an actionable migration instead of disabling the projectless workflow.
Earlier matching reports: #19909 (same error in April) and #24734 (same symlink rejection, closed as duplicate).
Confirmed on Windows as well, using an NTFS junction rather than a macOS symlink.
Environment
26.707.9981.0C:\Users\<user>\Documents\CodexDirectory, ReparsePoint) whose target is an existing local directory.Reproduction
The desktop process remains responsive. The app log records the same failure twice, once per attempt:
No error toast or actionable message is shown in this handoff flow; the UI only keeps spinning. So there are two user-visible problems on Windows:
This is reproducible with both mouse click and Enter, confirming it is not an input/focus issue. Resolving and validating the junction target should address the root failure; the handoff UI should also stop the spinner and show the underlying error.
I can reproduce this issue on the current Windows version using an NTFS directory junction.
Environment
26.810.7004.010.0.26200, x64CODEX_HOME:E:\Codex\stateC:\Users\<user>\Documents\CodexE:\Codex\projectsPowerShell reports:
Both the junction and its target exist, resolve to directories, and are writable. However, creating a projectless Work chat fails with:
Opening an actual project folder on
E:\works correctly. Only the projectless-chat workflow is blocked.The packaged Windows app appears to construct the projectless root as:
and then reject it when filesystem metadata reports that it is a symlink/junction. Therefore, moving
CODEX_HOMEdoes not provide a way to relocate projectless workspace files.Expected behavior
Codex should either:
This is especially important on Windows systems where users keep development files on another drive due to storage, backup, or performance requirements.
Confirmed on the current Windows build, with an additional ChatGPT Chrome side-panel impact.
Environment
26.818.8289.0(x64)10.0.26200(x64)151.0.7922.172C:\Users\<user>\Documents\CodexE:\MovedUserData\CodexWorkspaces\Documents_CodexThe source path is an existing NTFS directory junction (
Directory, ReparsePoint). Its target exists, is a real directory, and is writable.Chrome side-panel reproduction
The side panel itself loads, so this is not a missing-extension/native-host connection failure. The failure occurs when the panel tries to create its projectless ChatGPT/Work thread. In practice this makes the entire Chrome side chat unusable, not just a Codex Desktop "new task" entry point.
Local cause confirmed in the packaged app
The packaged
app.asarfor26.818.8289.0still:path.join(homeDirectory, "Documents", "Codex").isSymlink.That causal path matches the visible failure exactly:
Expected
Resolve and validate the canonical junction target (directory + writability + containment checks), or provide a supported configurable projectless workspace root. A valid junction should not disable projectless chats or the ChatGPT Chrome side panel.
A screenshot showing the full Chrome panel and error toast is available if maintainers need it.