Codex Windows Fast Patch
Use this skill when the user says Codex Desktop was upgraded and the Fast Mode / Plugins / Goal patch disappeared, asks to repatch Codex on Windows, asks to verify whether Fast Mode is really being sent, asks to restore/register the local plugin marketplace, or asks to enable Chrome browser use or Windows Computer Use in Codex Desktop. Also use it when the language/locale setting reverts after restart, browser or plugin entries are hidden by availability gates, the Computer Control settings page shows "Any App" / "任意应用" as disabled by organization or unavailable in the current region, or the Connections / Codex mobile remote-control setup flow drops into an auth error loop on Windows.
Platform Compatibility
This skill is Windows-only. It depends on the Windows Store/MSIX package layout, PowerShell, Get-AppxPackage, makeappx.exe, signtool.exe, Windows user environment variables, and Windows Computer Use helper paths.
Do not run this skill on macOS. A macOS adaptation needs a separate workflow for the Codex .app bundle, ASAR extraction and repacking, macOS code signing or quarantine handling, shell scripts, and macOS-specific Computer Use availability.
Self-Update Preflight
Before doing substantive work with this skill, run the bundled self-update helper once, then reload this SKILL.md if it reports an update:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\update-skill-from-github.ps1"
The helper checks chen0416ccc-cpu/codex-windows-fast-patch-skill on GitHub and synchronizes only the skill allowlist: SKILL.md, agents, scripts, references, and assets. 如果无法更新到最新版,则不要中断当前任务;继续使用本机已安装的当前版本完成工作,并在结果中说明未能更新。
If the normal workflow does not explain a restriction, plugin gate, Computer Use failure, or Codex mobile entry failure, read references/restriction-debug-cases.md before editing scripts or repatching.
Config Backup Rule
Before any action that can modify, regenerate, or overwrite $env:USERPROFILE\.codex\config.toml, create one timestamped backup of the current file for the task. This applies whether the agent uses bundled scripts, writes TOML manually, runs another helper, registers a marketplace, changes MCP servers, or repairs Computer Use.
The bundled scripts already back up an existing config.toml once per script run before their first write. If not using those scripts, do the backup explicitly before touching the file:
$config = Join-Path $env:USERPROFILE '.codex\config.toml'
if (Test-Path -LiteralPath $config -PathType Leaf) {
$backupDir = Join-Path (Split-Path -Parent $config) 'backups\config'
New-Item -ItemType Directory -Force -Path $backupDir | Out-Null
$backup = Join-Path $backupDir ('config.toml.' + (Get-Date -Format 'yyyyMMdd-HHmmss-fff') + '.manual.bak')
Copy-Item -LiteralPath $config -Destination $backup -Force
Write-Host "config.toml backup before overwrite: $backup"
}
Do not proceed with a config write if the backup of an existing config fails. After writing, validate TOML syntax with tomllib when Python is available.
Default Workflow
- If the task may modify
config.toml, skills, marketplaces, or MCP server settings, create a state snapshot first:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\manage-codex-backups.ps1" -Action Backup
- Inspect current package status:
Get-AppxPackage -Name OpenAI.Codex | Select-Object Name,PackageFullName,Version,SignatureKind,InstallLocation
- Run a dry run first after every Codex upgrade:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\repatch-codex-windows.ps1" -DryRun
- If the dry run finds all patch targets, run the full repatch:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\repatch-codex-windows.ps1"
The wrapper calls the bundled patch script at scripts\patch_codex_fast_mode_windows_msix.ps1 with these defaults:
-InstallPrerequisites
-Install
-Launch
-CleanupWindowsSdkAfterInstall
-CleanupAfter
-VerifyFastModeRequest
It also verifies and writes the local marketplace config at $env:USERPROFILE\.codex\marketplaces\openai-curated-local, including source_type = "local" and the exact source path.
It also syncs the installed openai-bundled marketplace from the current Codex package into $env:USERPROFILE\.codex\.tmp\bundled-marketplaces\openai-bundled, overlays a local computer-use@openai-bundled compatibility plugin, writes that local marketplace into config, repairs stable browser / chrome plugin cache copies so their latest junctions do not point at the mutable .tmp marketplace mirror, and enables CODEX_ELECTRON_ENABLE_WINDOWS_COMPUTER_USE=1 for the current user so the Desktop app can expose Windows Computer Use after restart.
It patches Fast Mode in both the request path and the settings UI path. The request patch removes the ChatGPT-only branch while still reading host/model feature requirements; the UI patch removes the matching ChatGPT-only availability check in service-tier settings.
It patches the locale i18n gate that can force the Desktop UI back to English after restart when enable_i18n is disabled in the shipped webview bundle.
It patches Chrome/browser_use gates in both the webview assets and the main Electron feature sender/receiver path, covering in-app browser, browser pane, and external browser availability. This only unlocks the local Desktop gates; Chrome extension and native messaging files still need to exist and should be verified separately.
It also patches the Desktop webview gates that otherwise hide or disable Windows Computer Use behind the computer_use experimental feature and Statsig gate 1506311413, and it writes features.computer_use = true into $env:USERPROFILE\.codex\config.toml without replacing the rest of the [features] table.
It also writes [windows] sandbox = "unelevated" into $env:USERPROFILE\.codex\config.toml. On Windows, this avoids the elevated sandbox setup refresh path that can fail with spawn setup refresh / OS error 740 and break Computer Use startup.
It also repairs local marketplace manifest layout when a local root has only a legacy root marketplace.json; the current Codex CLI expects .agents\plugins\marketplace.json, and missing that file can make codex plugin list fail for all configured marketplaces.
It also patches the Codex mobile / remote-control setup flow so a missing ChatGPT Desktop remote-control auth token does not force the settings modal to navigate to /login and become hard to exit; the flow falls back to a safe empty state instead. This does not replace real server-side remote-control enrollment when cross-device control is actually required.
Any bundled script write to an existing config.toml first creates one timestamped backup for that script run under .codex\backups\config\.
Important Guardrails
- Do not modify
C:\Program Files\WindowsApps in place. Use the MSIX repack script.
- Do not trust a response like
FAST_CHECK_OK as proof of Fast Mode. Trust only the wrapper/script wire verification, which captures Codex's /v1/responses WebSocket request and checks service_tier=priority.
- If the app launches then immediately exits, run Electron logging and check for ASAR integrity failures:
$pkg = Get-AppxPackage -Name OpenAI.Codex | Select-Object -First 1
$exe = Join-Path $pkg.InstallLocation 'app\Codex.exe'
$env:ELECTRON_ENABLE_LOGGING='1'
Push-Location (Split-Path -Parent $exe)
& $exe --enable-logging=stderr --v=1 2>&1 | Select-String -Pattern 'FATAL|Integrity|asar|ERROR'
Pop-Location
Remove-Item Env:ELECTRON_ENABLE_LOGGING -ErrorAction SilentlyContinue
If makeappx.exe or signtool.exe is missing, run the wrapper normally; it installs Windows SDK temporarily and removes it afterward.
If the local marketplace directory is missing, do not invent a marketplace. Report the missing path and ask whether to restore it from backup or re-extract it from a known source.
For user-level Codex state backup or migration, use scripts\manage-codex-backups.ps1. It backs up config.toml, extracted mcp_servers.json, custom skills, marketplaces, and chrome-native-hosts.json. It excludes .git, node_modules, build output, and virtual environments by default; use -IncludeDependencyDirs only when an exact offline dependency copy is needed. Plugin cache and .tmp\bundled-marketplaces are also opt-in because they can be large.
If codex plugin list fails with failed to load configured marketplace snapshot(s) and a local marketplace root contains only marketplace.json, copy that manifest to .agents\plugins\marketplace.json and re-run codex plugin list before diagnosing individual plugins.
Do not depend on Downloads\patch_codex_fast_mode_windows_msix.ps1; the skill is intended to be self-contained. Use scripts\patch_codex_fast_mode_windows_msix.ps1 unless the user explicitly passes -PatchScript.
If the user's upstream is CPA, verify CPA override rules as part of Fast Mode validation: for the Codex-facing models, force service_tier as a string parameter with value priority. Local wire capture only proves Codex Desktop sent the field; CPA can still strip, ignore, or fail to apply it unless the override rule is configured.
In Codex 26.601.2237+, Fast Mode may be gated in webview\assets\read-service-tier-for-request-*.js as an async helper shaped like return authMethod===\chatgpt` ? featureRequirements?.fast_mode !== false : false. The patch should remove the chatgpt`-only branch while still reading the model/host feature requirement, then verify with the wire capture.
In Codex 26.601.2237+, Fast Mode may also stay invisible or disabled in the settings UI through webview\assets\use-service-tier-settings-*.js. The patch should connect the Fast UI patcher and log fast-mode UI patch result, not only patch the request helper.
If the language selection reverts to English after restart, inspect the extracted webview assets for enable_i18n, locale_source, and localeOverride. The locale patch should log locale i18n patch result; do not treat a config-only language write as sufficient.
If browser, Chrome, browser pane, or browser_use remains unavailable, inspect the Desktop log for browser_use_availability_resolved. reason=statsig-disabled means the local gate patch did not apply or the Store build introduced a new target shape; reason=local-patched means the availability gate is open and the next checks are the Chrome extension, native messaging host, and bundled plugin state.
In Codex 26.601.2237+, the old plugin UI gate targets 533078438 and pluginDeepLinkAuthBlocked may be absent. Inspect webview\assets\plugins-page-*.js for openPluginInstall, authMethod:, and a compact assignment shaped like {authMethod:x}=..., y=authBlocked(x),; patch the auth-blocked variable to false instead of failing on missing old sidebar/skills/detail chunks.
In Codex 26.519.11010+, use-plugin-install-flow-*.js may no longer contain featureName:\computer_use`. For the Computer Use install-flow gate, locate the file with installPlugin:asyncandopenPluginInstall, then patch the imported availability tuple so the first .available` value for Computer Use is forced true.
Do not modify C:\Program Files\WindowsApps in place to enable Computer Use. The Windows gate is controlled by CODEX_ELECTRON_ENABLE_WINDOWS_COMPUTER_USE=1, and the helper paths are supplied through the local computer-use@openai-bundled plugin.
If Computer Use or a node_repl Computer Use plugin fails on Windows with windows sandbox failed: spawn setup refresh, inspect $env:USERPROFILE\.codex\.sandbox\sandbox.<date>.log. If it shows codex-windows-sandbox-setup.exe failing with OS error 740, set [windows] sandbox = "unelevated". Check codex sandbox --help before verification: if the help lists a windows command, verify with codex sandbox windows "C:\Windows\System32\cmd.exe" /c echo OK; only builds whose help accepts a direct command form should use codex sandbox "C:\Windows\System32\cmd.exe" /c echo OK.
If "任意应用" is visible but disabled as organization/region unavailable, inspect webview\assets\use-is-plugins-enabled-*.js in the extracted ASAR. The relevant local gates are featureName:\computer_use`and Statsig1506311413`; reapply the MSIX patch rather than editing WindowsApps in place.
If the Computer Control page says Computer Use 插件不可用, check the Desktop log for computer-use native pipe startup failed with missing-helper-path, then inspect $env:USERPROFILE\.codex\.tmp\bundled-marketplaces\openai-bundled\.agents\plugins\marketplace.json and plugins\computer-use. If they are missing or partial, stop bundled extension-host processes under $env:USERPROFILE\.codex\plugins\cache\openai-bundled, rerun scripts\install-computer-use-local.ps1, restart Codex Desktop, and confirm the log ends with computer-use native pipe startup ready.
If scripts\install-computer-use-local.ps1 -StrictVerifyOnly fails because $env:USERPROFILE\.codex\plugins\cache\openai-bundled\computer-use\latest\.codex-plugin\plugin.json is missing, run the same script with -VerifyOnly to repair the marketplace mirror, cached plugin copy, and latest link, then rerun -StrictVerifyOnly.
If the failure reappears after fully quitting and reopening Codex Desktop, inspect $env:USERPROFILE\.codex\chrome-native-hosts.json and the real targets of $env:USERPROFILE\.codex\plugins\cache\openai-bundled\chrome\latest and browser\latest. Stale Chrome native-host entries, or a chrome\latest junction that points at $env:USERPROFILE\.codex\.tmp\bundled-marketplaces\openai-bundled\plugins\chrome, can let Chrome native messaging lock the mutable marketplace mirror. The symptom is bundled_plugins_marketplace_resolve_failed with EBUSY on plugins\chrome\extension-host\windows\x64, followed by helper paths changed and missing-helper-path; rerun scripts\install-computer-use-local.ps1 to stop the lock holder, rebuild stable browser/chrome cache copies, repoint the Chrome native messaging manifest to the stable cache path, and repair Computer Use.
If the "Codex mobile" / "Codex 移动版" entry or Connections > Control This Computer > Set up opens then drops back, opens nothing, routes to login, or becomes hard to exit, check the Desktop logs under %LOCALAPPDATA%\Packages\OpenAI.Codex_2p2nqsd0c76g0\LocalCache\Local\Codex\Logs\<year>\<month>\<day>. load_remote_control_unauthed or refresh_local_remote_control_client_id_failed with Sign in to ChatGPT in Codex Desktop means the local patch should prevent the UI loop, but real cross-device remote-control enrollment still requires a ChatGPT Desktop sign-in, not only an API-key Codex login. When patching .vite\build\main-*.js, match the unauth branch by behavior (local_remote_control_client_id=null, authRequired:!0, clientAuthorized:!1, load_remote_control_unauthed) rather than fixed minified class or logger names.
In Codex 26.602.3474-era builds, webview\assets\codex-mobile-setup-flow-*.js may be absent while the .vite\build\main-*.js remote-control unauth branch is still present. Treat only that setup-flow chunk as not applicable for that build: log the missing target and pass __none__ to the Computer Use gate patcher, but keep the other repair target checks strict.
Useful Wrapper Options
-DryRun: verify bundle targets only; no install.
-NoLaunch: install but do not start Codex Desktop.
-SkipFastVerify: skip the WebSocket service_tier capture.
-KeepBuild: keep Downloads\codex-msix-repack for debugging.
-SkipSdkCleanup: leave Windows SDK installed.
-RegisterMarketplaceOnly: only register openai-curated-local; do not patch Codex.
-PatchScript <path>: override the bundled patch script only when testing a newer patcher.
-SkipComputerUse: skip installing/verifying the local Computer Use compatibility plugin.
Computer Use Only
To refresh only the local Windows Computer Use files and environment gate:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\install-computer-use-local.ps1"
To verify and automatically repair missing local Computer Use files:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\install-computer-use-local.ps1" -VerifyOnly
To verify without changing files:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\install-computer-use-local.ps1" -StrictVerifyOnly
Backup Management
To back up local Codex config, MCP server entries, custom skills, marketplaces, and Chrome native-host state:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\manage-codex-backups.ps1" -Action Backup
To list or restore snapshots:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\manage-codex-backups.ps1" -Action List
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\manage-codex-backups.ps1" -Action Restore -BackupPath "<backup path>"
Success Criteria
- If an existing
config.toml was modified, the log shows a timestamped backup under .codex\backups\config\.
Get-AppxPackage -Name OpenAI.Codex shows SignatureKind = Developer.
- Codex Desktop processes stay alive from
...\WindowsApps\OpenAI.Codex_<version>...\app\Codex.exe.
- Fast Mode verification logs
request wire service_tier=priority.
- The patch log includes
fast-mode UI patch result and locale i18n patch result, each either patched or already-patched.
- The patch log includes
browser-use gate patch result, either patched or already-patched.
- Desktop logs show
browser_use_availability_resolved with available=true and reason=local-patched after the patched app starts.
- If upstream is CPA, CPA has an override rule for the Codex-facing models that sets
service_tier to string value priority.
$env:USERPROFILE\.codex\config.toml contains [marketplaces.openai-curated-local].
$env:USERPROFILE\.codex\config.toml contains [marketplaces.openai-bundled] pointing at $env:USERPROFILE\.codex\.tmp\bundled-marketplaces\openai-bundled, and that local mirror contains the installed bundled plugins plus computer-use.
- Any configured local marketplace used for personal plugins has a supported
.agents\plugins\marketplace.json; root-level marketplace.json alone is not enough for the current plugin CLI.
$env:USERPROFILE\.codex\config.toml contains [plugins."computer-use@openai-bundled"] with enabled = true.
codex plugin list shows computer-use@openai-bundled as installed, enabled.
- If Chrome/browser use is required,
codex plugin list shows chrome@openai-bundled and browser@openai-bundled as installed, enabled, the Chrome native messaging host manifest points to a stable cache path under $env:USERPROFILE\.codex\plugins\cache\openai-bundled\chrome\<version>\... rather than chrome\latest or .tmp\bundled-marketplaces, chrome\latest and browser\latest point to stable cache version directories rather than the mutable marketplace mirror, and a smoke test can read a controlled tab title such as Example Domain.
CODEX_ELECTRON_ENABLE_WINDOWS_COMPUTER_USE is set to 1 for the current user.
$env:USERPROFILE\.codex\config.toml contains [features] with computer_use = true.
$env:USERPROFILE\.codex\config.toml contains [windows] with sandbox = "unelevated", and the sandbox command syntax shown by codex sandbox --help succeeds.
$env:USERPROFILE\.codex\plugins\cache\openai-bundled\computer-use\latest\node_modules\@oai\sky\dist\project\cua\sky_js\src\targets\windows\internal\helper_transport.js exists and can return screen info/screenshot.
- The patched ASAR has
webview\assets\use-is-plugins-enabled-*.js with the Computer Use availability gate forced local-available and webview\assets\use-plugin-install-flow-*.js with the Computer Use install gate unblocked.
- The patched ASAR has
webview\assets\use-service-tier-settings-*.js with the Fast Mode UI gate unblocked, the locale chunk with enable_i18n forced enabled, and browser_use feature chunks/main feature dispatch patched to report in-app and external browser availability locally.
- The patched ASAR has
webview\assets\codex-mobile-setup-flow-*.js keeping ChatGPT auth failures inside a closable setup flow, and .vite\build\main-*.js maps remote-control unauthenticated state to a safe empty state instead of an auth loop.
makeappx.exe and signtool.exe are missing again if SDK cleanup was enabled.
1---2name: codex-windows-fast-patch3description: Reapply the Windows Codex Desktop MSIX patch after Store upgrades, including Fast Mode request/UI gates, locale i18n, plugin UI gates, Chrome/browser_use gates, Goal command gates, Windows Computer Use availability gates, ASAR integrity repair, signing/installing the patched package, SDK cleanup, Fast Mode wire verification, and registering the local plugin marketplace openai-curated-local.4---56# Codex Windows Fast Patch78Use this skill when the user says Codex Desktop was upgraded and the Fast Mode / Plugins / Goal patch disappeared, asks to repatch Codex on Windows, asks to verify whether Fast Mode is really being sent, asks to restore/register the local plugin marketplace, or asks to enable Chrome browser use or Windows Computer Use in Codex Desktop. Also use it when the language/locale setting reverts after restart, browser or plugin entries are hidden by availability gates, the Computer Control settings page shows "Any App" / "任意应用" as disabled by organization or unavailable in the current region, or the Connections / Codex mobile remote-control setup flow drops into an auth error loop on Windows.910## Platform Compatibility1112This skill is Windows-only. It depends on the Windows Store/MSIX package layout, PowerShell, `Get-AppxPackage`, `makeappx.exe`, `signtool.exe`, Windows user environment variables, and Windows Computer Use helper paths.1314Do not run this skill on macOS. A macOS adaptation needs a separate workflow for the Codex `.app` bundle, ASAR extraction and repacking, macOS code signing or quarantine handling, shell scripts, and macOS-specific Computer Use availability.1516## Self-Update Preflight1718Before doing substantive work with this skill, run the bundled self-update helper once, then reload this `SKILL.md` if it reports an update:1920```powershell21powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\update-skill-from-github.ps1"22```2324The helper checks `chen0416ccc-cpu/codex-windows-fast-patch-skill` on GitHub and synchronizes only the skill allowlist: `SKILL.md`, `agents`, `scripts`, `references`, and `assets`. 如果无法更新到最新版,则不要中断当前任务;继续使用本机已安装的当前版本完成工作,并在结果中说明未能更新。2526If the normal workflow does not explain a restriction, plugin gate, Computer Use failure, or Codex mobile entry failure, read `references/restriction-debug-cases.md` before editing scripts or repatching.2728## Config Backup Rule2930Before any action that can modify, regenerate, or overwrite `$env:USERPROFILE\.codex\config.toml`, create one timestamped backup of the current file for the task. This applies whether the agent uses bundled scripts, writes TOML manually, runs another helper, registers a marketplace, changes MCP servers, or repairs Computer Use.3132The bundled scripts already back up an existing `config.toml` once per script run before their first write. If not using those scripts, do the backup explicitly before touching the file:3334```powershell35$config = Join-Path $env:USERPROFILE '.codex\config.toml'36if (Test-Path -LiteralPath $config -PathType Leaf) {37 $backupDir = Join-Path (Split-Path -Parent $config) 'backups\config'38 New-Item -ItemType Directory -Force -Path $backupDir | Out-Null39 $backup = Join-Path $backupDir ('config.toml.' + (Get-Date -Format 'yyyyMMdd-HHmmss-fff') + '.manual.bak')40 Copy-Item -LiteralPath $config -Destination $backup -Force41 Write-Host "config.toml backup before overwrite: $backup"42}43```4445Do not proceed with a config write if the backup of an existing config fails. After writing, validate TOML syntax with `tomllib` when Python is available.4647## Default Workflow48491. If the task may modify `config.toml`, skills, marketplaces, or MCP server settings, create a state snapshot first:5051```powershell52powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\manage-codex-backups.ps1" -Action Backup53```54552. Inspect current package status:5657```powershell58Get-AppxPackage -Name OpenAI.Codex | Select-Object Name,PackageFullName,Version,SignatureKind,InstallLocation59```60613. Run a dry run first after every Codex upgrade:6263```powershell64powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\repatch-codex-windows.ps1" -DryRun65```66674. If the dry run finds all patch targets, run the full repatch:6869```powershell70powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\repatch-codex-windows.ps1"71```7273The wrapper calls the bundled patch script at `scripts\patch_codex_fast_mode_windows_msix.ps1` with these defaults:7475- `-InstallPrerequisites`76- `-Install`77- `-Launch`78- `-CleanupWindowsSdkAfterInstall`79- `-CleanupAfter`80- `-VerifyFastModeRequest`8182It also verifies and writes the local marketplace config at `$env:USERPROFILE\.codex\marketplaces\openai-curated-local`, including `source_type = "local"` and the exact `source` path.83It also syncs the installed `openai-bundled` marketplace from the current Codex package into `$env:USERPROFILE\.codex\.tmp\bundled-marketplaces\openai-bundled`, overlays a local `computer-use@openai-bundled` compatibility plugin, writes that local marketplace into config, repairs stable `browser` / `chrome` plugin cache copies so their `latest` junctions do not point at the mutable `.tmp` marketplace mirror, and enables `CODEX_ELECTRON_ENABLE_WINDOWS_COMPUTER_USE=1` for the current user so the Desktop app can expose Windows Computer Use after restart.84It patches Fast Mode in both the request path and the settings UI path. The request patch removes the ChatGPT-only branch while still reading host/model feature requirements; the UI patch removes the matching ChatGPT-only availability check in service-tier settings.85It patches the locale i18n gate that can force the Desktop UI back to English after restart when `enable_i18n` is disabled in the shipped webview bundle.86It patches Chrome/browser_use gates in both the webview assets and the main Electron feature sender/receiver path, covering in-app browser, browser pane, and external browser availability. This only unlocks the local Desktop gates; Chrome extension and native messaging files still need to exist and should be verified separately.87It also patches the Desktop webview gates that otherwise hide or disable Windows Computer Use behind the `computer_use` experimental feature and Statsig gate `1506311413`, and it writes `features.computer_use = true` into `$env:USERPROFILE\.codex\config.toml` without replacing the rest of the `[features]` table.88It also writes `[windows] sandbox = "unelevated"` into `$env:USERPROFILE\.codex\config.toml`. On Windows, this avoids the elevated sandbox setup refresh path that can fail with `spawn setup refresh` / OS error 740 and break Computer Use startup.89It also repairs local marketplace manifest layout when a local root has only a legacy root `marketplace.json`; the current Codex CLI expects `.agents\plugins\marketplace.json`, and missing that file can make `codex plugin list` fail for all configured marketplaces.90It also patches the Codex mobile / remote-control setup flow so a missing ChatGPT Desktop remote-control auth token does not force the settings modal to navigate to `/login` and become hard to exit; the flow falls back to a safe empty state instead. This does not replace real server-side remote-control enrollment when cross-device control is actually required.91Any bundled script write to an existing `config.toml` first creates one timestamped backup for that script run under `.codex\backups\config\`.9293## Important Guardrails9495- Do not modify `C:\Program Files\WindowsApps` in place. Use the MSIX repack script.96- Do not trust a response like `FAST_CHECK_OK` as proof of Fast Mode. Trust only the wrapper/script wire verification, which captures Codex's `/v1/responses` WebSocket request and checks `service_tier=priority`.97- If the app launches then immediately exits, run Electron logging and check for ASAR integrity failures:9899```powershell100$pkg = Get-AppxPackage -Name OpenAI.Codex | Select-Object -First 1101$exe = Join-Path $pkg.InstallLocation 'app\Codex.exe'102$env:ELECTRON_ENABLE_LOGGING='1'103Push-Location (Split-Path -Parent $exe)104& $exe --enable-logging=stderr --v=1 2>&1 | Select-String -Pattern 'FATAL|Integrity|asar|ERROR'105Pop-Location106Remove-Item Env:ELECTRON_ENABLE_LOGGING -ErrorAction SilentlyContinue107```108109- If `makeappx.exe` or `signtool.exe` is missing, run the wrapper normally; it installs Windows SDK temporarily and removes it afterward.110- If the local marketplace directory is missing, do not invent a marketplace. Report the missing path and ask whether to restore it from backup or re-extract it from a known source.111- For user-level Codex state backup or migration, use `scripts\manage-codex-backups.ps1`. It backs up `config.toml`, extracted `mcp_servers.json`, custom skills, marketplaces, and `chrome-native-hosts.json`. It excludes `.git`, `node_modules`, build output, and virtual environments by default; use `-IncludeDependencyDirs` only when an exact offline dependency copy is needed. Plugin cache and `.tmp\bundled-marketplaces` are also opt-in because they can be large.112- If `codex plugin list` fails with `failed to load configured marketplace snapshot(s)` and a local marketplace root contains only `marketplace.json`, copy that manifest to `.agents\plugins\marketplace.json` and re-run `codex plugin list` before diagnosing individual plugins.113- Do not depend on `Downloads\patch_codex_fast_mode_windows_msix.ps1`; the skill is intended to be self-contained. Use `scripts\patch_codex_fast_mode_windows_msix.ps1` unless the user explicitly passes `-PatchScript`.114- If the user's upstream is CPA, verify CPA override rules as part of Fast Mode validation: for the Codex-facing models, force `service_tier` as a string parameter with value `priority`. Local wire capture only proves Codex Desktop sent the field; CPA can still strip, ignore, or fail to apply it unless the override rule is configured.115- In Codex 26.601.2237+, Fast Mode may be gated in `webview\assets\read-service-tier-for-request-*.js` as an async helper shaped like `return authMethod===\`chatgpt\` ? featureRequirements?.fast_mode !== false : false`. The patch should remove the `chatgpt`-only branch while still reading the model/host feature requirement, then verify with the wire capture.116- In Codex 26.601.2237+, Fast Mode may also stay invisible or disabled in the settings UI through `webview\assets\use-service-tier-settings-*.js`. The patch should connect the Fast UI patcher and log `fast-mode UI patch result`, not only patch the request helper.117- If the language selection reverts to English after restart, inspect the extracted webview assets for `enable_i18n`, `locale_source`, and `localeOverride`. The locale patch should log `locale i18n patch result`; do not treat a config-only language write as sufficient.118- If browser, Chrome, browser pane, or `browser_use` remains unavailable, inspect the Desktop log for `browser_use_availability_resolved`. `reason=statsig-disabled` means the local gate patch did not apply or the Store build introduced a new target shape; `reason=local-patched` means the availability gate is open and the next checks are the Chrome extension, native messaging host, and bundled plugin state.119- In Codex 26.601.2237+, the old plugin UI gate targets `533078438` and `pluginDeepLinkAuthBlocked` may be absent. Inspect `webview\assets\plugins-page-*.js` for `openPluginInstall`, `authMethod:`, and a compact assignment shaped like `{authMethod:x}=..., y=authBlocked(x),`; patch the auth-blocked variable to `false` instead of failing on missing old sidebar/skills/detail chunks.120- In Codex 26.519.11010+, `use-plugin-install-flow-*.js` may no longer contain `featureName:\`computer_use\``. For the Computer Use install-flow gate, locate the file with `installPlugin:async` and `openPluginInstall`, then patch the imported availability tuple so the first `.available` value for Computer Use is forced true.121- Do not modify `C:\Program Files\WindowsApps` in place to enable Computer Use. The Windows gate is controlled by `CODEX_ELECTRON_ENABLE_WINDOWS_COMPUTER_USE=1`, and the helper paths are supplied through the local `computer-use@openai-bundled` plugin.122- If Computer Use or a `node_repl` Computer Use plugin fails on Windows with `windows sandbox failed: spawn setup refresh`, inspect `$env:USERPROFILE\.codex\.sandbox\sandbox.<date>.log`. If it shows `codex-windows-sandbox-setup.exe` failing with OS error 740, set `[windows] sandbox = "unelevated"`. Check `codex sandbox --help` before verification: if the help lists a `windows` command, verify with `codex sandbox windows "C:\Windows\System32\cmd.exe" /c echo OK`; only builds whose help accepts a direct command form should use `codex sandbox "C:\Windows\System32\cmd.exe" /c echo OK`.123- If "任意应用" is visible but disabled as organization/region unavailable, inspect `webview\assets\use-is-plugins-enabled-*.js` in the extracted ASAR. The relevant local gates are `featureName:\`computer_use\`` and Statsig `1506311413`; reapply the MSIX patch rather than editing WindowsApps in place.124- If the Computer Control page says `Computer Use 插件不可用`, check the Desktop log for `computer-use native pipe startup failed` with `missing-helper-path`, then inspect `$env:USERPROFILE\.codex\.tmp\bundled-marketplaces\openai-bundled\.agents\plugins\marketplace.json` and `plugins\computer-use`. If they are missing or partial, stop bundled `extension-host` processes under `$env:USERPROFILE\.codex\plugins\cache\openai-bundled`, rerun `scripts\install-computer-use-local.ps1`, restart Codex Desktop, and confirm the log ends with `computer-use native pipe startup ready`.125- If `scripts\install-computer-use-local.ps1 -StrictVerifyOnly` fails because `$env:USERPROFILE\.codex\plugins\cache\openai-bundled\computer-use\latest\.codex-plugin\plugin.json` is missing, run the same script with `-VerifyOnly` to repair the marketplace mirror, cached plugin copy, and `latest` link, then rerun `-StrictVerifyOnly`.126- If the failure reappears after fully quitting and reopening Codex Desktop, inspect `$env:USERPROFILE\.codex\chrome-native-hosts.json` and the real targets of `$env:USERPROFILE\.codex\plugins\cache\openai-bundled\chrome\latest` and `browser\latest`. Stale Chrome native-host entries, or a `chrome\latest` junction that points at `$env:USERPROFILE\.codex\.tmp\bundled-marketplaces\openai-bundled\plugins\chrome`, can let Chrome native messaging lock the mutable marketplace mirror. The symptom is `bundled_plugins_marketplace_resolve_failed` with `EBUSY` on `plugins\chrome\extension-host\windows\x64`, followed by `helper paths changed` and `missing-helper-path`; rerun `scripts\install-computer-use-local.ps1` to stop the lock holder, rebuild stable browser/chrome cache copies, repoint the Chrome native messaging manifest to the stable cache path, and repair Computer Use.127- If the "Codex mobile" / "Codex 移动版" entry or Connections > Control This Computer > Set up opens then drops back, opens nothing, routes to login, or becomes hard to exit, check the Desktop logs under `%LOCALAPPDATA%\Packages\OpenAI.Codex_2p2nqsd0c76g0\LocalCache\Local\Codex\Logs\<year>\<month>\<day>`. `load_remote_control_unauthed` or `refresh_local_remote_control_client_id_failed` with `Sign in to ChatGPT in Codex Desktop` means the local patch should prevent the UI loop, but real cross-device remote-control enrollment still requires a ChatGPT Desktop sign-in, not only an API-key Codex login. When patching `.vite\build\main-*.js`, match the unauth branch by behavior (`local_remote_control_client_id=null`, `authRequired:!0`, `clientAuthorized:!1`, `load_remote_control_unauthed`) rather than fixed minified class or logger names.128129- In Codex 26.602.3474-era builds, `webview\assets\codex-mobile-setup-flow-*.js` may be absent while the `.vite\build\main-*.js` remote-control unauth branch is still present. Treat only that setup-flow chunk as not applicable for that build: log the missing target and pass `__none__` to the Computer Use gate patcher, but keep the other repair target checks strict.130131## Useful Wrapper Options132133- `-DryRun`: verify bundle targets only; no install.134- `-NoLaunch`: install but do not start Codex Desktop.135- `-SkipFastVerify`: skip the WebSocket `service_tier` capture.136- `-KeepBuild`: keep `Downloads\codex-msix-repack` for debugging.137- `-SkipSdkCleanup`: leave Windows SDK installed.138- `-RegisterMarketplaceOnly`: only register `openai-curated-local`; do not patch Codex.139- `-PatchScript <path>`: override the bundled patch script only when testing a newer patcher.140- `-SkipComputerUse`: skip installing/verifying the local Computer Use compatibility plugin.141142## Computer Use Only143144To refresh only the local Windows Computer Use files and environment gate:145146```powershell147powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\install-computer-use-local.ps1"148```149150To verify and automatically repair missing local Computer Use files:151152```powershell153powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\install-computer-use-local.ps1" -VerifyOnly154```155156To verify without changing files:157158```powershell159powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\install-computer-use-local.ps1" -StrictVerifyOnly160```161162## Backup Management163164To back up local Codex config, MCP server entries, custom skills, marketplaces, and Chrome native-host state:165166```powershell167powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\manage-codex-backups.ps1" -Action Backup168```169170To list or restore snapshots:171172```powershell173powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\manage-codex-backups.ps1" -Action List174powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\skills\codex-windows-fast-patch\scripts\manage-codex-backups.ps1" -Action Restore -BackupPath "<backup path>"175```176177## Success Criteria178179- If an existing `config.toml` was modified, the log shows a timestamped backup under `.codex\backups\config\`.180- `Get-AppxPackage -Name OpenAI.Codex` shows `SignatureKind = Developer`.181- Codex Desktop processes stay alive from `...\WindowsApps\OpenAI.Codex_<version>...\app\Codex.exe`.182- Fast Mode verification logs `request wire service_tier=priority`.183- The patch log includes `fast-mode UI patch result` and `locale i18n patch result`, each either `patched` or `already-patched`.184- The patch log includes `browser-use gate patch result`, either `patched` or `already-patched`.185- Desktop logs show `browser_use_availability_resolved` with `available=true` and `reason=local-patched` after the patched app starts.186- If upstream is CPA, CPA has an override rule for the Codex-facing models that sets `service_tier` to string value `priority`.187- `$env:USERPROFILE\.codex\config.toml` contains `[marketplaces.openai-curated-local]`.188- `$env:USERPROFILE\.codex\config.toml` contains `[marketplaces.openai-bundled]` pointing at `$env:USERPROFILE\.codex\.tmp\bundled-marketplaces\openai-bundled`, and that local mirror contains the installed bundled plugins plus `computer-use`.189- Any configured local marketplace used for personal plugins has a supported `.agents\plugins\marketplace.json`; root-level `marketplace.json` alone is not enough for the current plugin CLI.190- `$env:USERPROFILE\.codex\config.toml` contains `[plugins."computer-use@openai-bundled"]` with `enabled = true`.191- `codex plugin list` shows `computer-use@openai-bundled` as `installed, enabled`.192- If Chrome/browser use is required, `codex plugin list` shows `chrome@openai-bundled` and `browser@openai-bundled` as `installed, enabled`, the Chrome native messaging host manifest points to a stable cache path under `$env:USERPROFILE\.codex\plugins\cache\openai-bundled\chrome\<version>\...` rather than `chrome\latest` or `.tmp\bundled-marketplaces`, `chrome\latest` and `browser\latest` point to stable cache version directories rather than the mutable marketplace mirror, and a smoke test can read a controlled tab title such as `Example Domain`.193- `CODEX_ELECTRON_ENABLE_WINDOWS_COMPUTER_USE` is set to `1` for the current user.194- `$env:USERPROFILE\.codex\config.toml` contains `[features]` with `computer_use = true`.195- `$env:USERPROFILE\.codex\config.toml` contains `[windows]` with `sandbox = "unelevated"`, and the sandbox command syntax shown by `codex sandbox --help` succeeds.196- `$env:USERPROFILE\.codex\plugins\cache\openai-bundled\computer-use\latest\node_modules\@oai\sky\dist\project\cua\sky_js\src\targets\windows\internal\helper_transport.js` exists and can return screen info/screenshot.197- The patched ASAR has `webview\assets\use-is-plugins-enabled-*.js` with the Computer Use availability gate forced local-available and `webview\assets\use-plugin-install-flow-*.js` with the Computer Use install gate unblocked.198- The patched ASAR has `webview\assets\use-service-tier-settings-*.js` with the Fast Mode UI gate unblocked, the locale chunk with `enable_i18n` forced enabled, and browser_use feature chunks/main feature dispatch patched to report in-app and external browser availability locally.199- The patched ASAR has `webview\assets\codex-mobile-setup-flow-*.js` keeping ChatGPT auth failures inside a closable setup flow, and `.vite\build\main-*.js` maps remote-control unauthenticated state to a safe empty state instead of an auth loop.200- `makeappx.exe` and `signtool.exe` are missing again if SDK cleanup was enabled.