Summary
The Codex desktop app writes features.js_repl = false back into config.toml on every launch, even when the user has manually removed the line. js_repl is reported as a removed-stage feature flag by codex features list.
Environment
- codex-cli 0.133.0
- Codex desktop app 26.519.41501
- macOS (Darwin 25.4.0, arm64)
Steps to reproduce
- Quit the Codex desktop app completely.
- Edit
$CODEX_HOME/config.toml and remove the features.js_repl = false line.
- Confirm with
grep js_repl $CODEX_HOME/config.toml that the line is gone.
- Run
codex features list and codex doctor. The line stays absent; the CLI does not write it back.
- Launch the Codex desktop app.
- Re-check
config.toml. features.js_repl = false is present again.
Observed behavior
After every desktop-app launch, features.js_repl = false is restored.
Code reference
In the desktop bundle at Codex.app/Contents/Resources/app.asar, file .vite/build/main-*.js:
var Qn = [`features.js_repl`, /* ... */];
async function $n({ appServerConnection, desktopFeatureAvailability, ... }) {
let d = await St({ ... });
await appServerConnection.sendAppServerRequest(`config/batchWrite`, {
edits: er(d), // Qn.map(t => ({ keyPath: t, mergeStrategy: `replace`, value: d?.[t] ?? null }))
expectedVersion: null,
filePath: null,
reloadUserConfig: true,
});
}
$n is awaited during app startup. The features.js_repl keyPath is written with mergeStrategy: "replace" unconditionally.
CLI feature stage
$ codex features list | grep js_repl
js_repl removed false
js_repl_tools_only removed false
Impact
A user who deletes features.js_repl = false finds it restored on the next desktop-app launch, with no UI control to suppress the rewrite. This is confusing because the CLI reports the flag as removed.
Summary
The Codex desktop app writes
features.js_repl = falseback intoconfig.tomlon every launch, even when the user has manually removed the line.js_replis reported as aremoved-stage feature flag bycodex features list.Environment
Steps to reproduce
$CODEX_HOME/config.tomland remove thefeatures.js_repl = falseline.grep js_repl $CODEX_HOME/config.tomlthat the line is gone.codex features listandcodex doctor. The line stays absent; the CLI does not write it back.config.toml.features.js_repl = falseis present again.Observed behavior
After every desktop-app launch,
features.js_repl = falseis restored.Code reference
In the desktop bundle at
Codex.app/Contents/Resources/app.asar, file.vite/build/main-*.js:$nis awaited during app startup. Thefeatures.js_replkeyPath is written withmergeStrategy: "replace"unconditionally.CLI feature stage
Impact
A user who deletes
features.js_repl = falsefinds it restored on the next desktop-app launch, with no UI control to suppress the rewrite. This is confusing because the CLI reports the flag asremoved.