Codex Desktop on Windows eagerly runs review-summary Git snapshots on restored workspaces, causing CPU/IO spikes
Summary
Codex Desktop on Windows can trigger severe CPU/IO/memory spikes immediately after launch because the desktop UI restores the last active workspace and eagerly runs review_model / review-summary Git snapshot work against it.
This is not observed with Codex CLI in the same environment. The CLI does not mount the Desktop sidebar/review metadata query stack, while the Desktop app does.
Related but not identical to:
- #27120 (
git add -Aagainst the home directory) - #27570 (
review-summary/hash-objectstorms) - #20933 (Windows desktop spawning many Git processes)
The issue here is the startup/restore trigger chain: restored workspace -> review metadata query -> Git snapshot over thousands of untracked files -> repeated refresh/retry.
Environment
- OS: Windows
- Codex Desktop package:
OpenAI.Codex_26.623.11225.0_x64__2p2nqsd0c76g0 - Desktop app path:
C:\Program Files\WindowsApps\OpenAI.Codex_26.623.11225.0_x64__2p2nqsd0c76g0\app\Codex.exe - Bundled app-server / CLI reported version:
0.142.5 - Launch AppID:
OpenAI.Codex_2p2nqsd0c76g0!App - Workspace involved: a large local workspace under
D:\Users\<user>\Documents\Playground - Workspace state: Git repo with no valid HEAD / no initial commit, no useful ignore boundary, tens of thousands of files, many untracked files
Observed behavior
Opening Codex Desktop causes the machine to become extremely sluggish. Process monitoring and Desktop logs show Desktop Codex.exe launching Git commands repeatedly.
The important part is that these are not normal git status calls. They are review snapshot commands from Desktop's review metadata path:
source=review_model
requestKind=review-summary
cwd=D:/Users/<user>/Documents/Playground
Examples from Desktop logs:
warning [git] git.command.complete ...
command="git -c core.hooksPath=NUL -c core.fsmonitor= hash-object --no-filters -- <thousands of paths>"
argsCount=5802
cwd=D:/Users/<user>/Documents/Playground
requestKind=review-summary
source=review_model
subcommand=hash-object
warning [git] git.command.complete ...
command="git -c core.hooksPath=NUL -c core.fsmonitor= add -- <thousands of paths>"
argsCount=1026
cwd=D:/Users/<user>/Documents/Playground
requestKind=review-summary
source=review_model
subcommand=add
There was also a failed write-tree from the same path:
warning [git] git.command.complete ...
command="git -c core.hooksPath=NUL -c core.fsmonitor= write-tree"
cwd=D:/Users/<user>/Documents/Playground
requestKind=review-summary
source=review_model
exitCode=1073807364
subcommand=write-tree
A local aggregation of the Desktop log files showed:
total git.command.complete rows: 201
source=review_model: 190
requestKind=review-summary: 185
cwd=D:/Users/<user>/Documents/Playground: 194
The high-cost commands repeat roughly every 15-20 seconds in the captured logs, with hash-object followed by add --.
Startup / restore trigger chain observed
The global state file contains restored workspace state similar to:
electron-saved-workspace-roots:
- D:\Users\<user>\Practice-Project\202606\Valvekr
- D:\Users\<user>\Documents\Playground
active-workspace-roots:
- D:\Users\<user>\Documents\Playground
project-order:
- D:\Users\<user>\Practice-Project\202606\Valvekr
- D:\Users\<user>\Documents\Playground
The desktop package's app.asar also shows the path that matches the logs:
webview/assets/review-navigation-model-*.jsdefines areview-summaryquery withoperationSource/ sourcereview_model.- That query uses
includeUntrackedFiles=true,staleTime=FIVE_SECONDS,refetchOnWindowFocus=true, and background/error refetch behavior. .vite/build/worker.jshandlescase "review-summary"by callinggitManager.getWorktreeRepository(...)and then a review summary implementation that builds temporary worktree/index snapshots.- The worker implementation calls Git operations such as
hash-object --no-filters,add,write-tree, anddiff --find-renames --numstat/name-status/raw.
In simplified form:
Codex Desktop launch
-> Electron app-server starts
-> renderer loads thread/list + workspace/sidebar state
-> active workspace is restored from global state
-> review-navigation-model mounts review metadata queries
-> review_model sends review-summary to Git worker
-> worker snapshots untracked-aware worktree state
-> Git scans thousands of untracked files repeatedly
-> Windows CPU/IO/memory spike
Why this is severe on Windows
This pattern is especially expensive on Windows because Git is being asked to read/hash/add thousands of small files from a large dirty workspace. NTFS small-file IO plus Windows Defender or other real-time scanning can amplify the cost. When the workspace has no valid HEAD/no initial commit and lots of untracked files, review-summary can remain error/stale and be repeatedly refreshed.
This makes Desktop launch feel catastrophic even though Codex CLI works normally on the same machine.
Expected behavior
Codex Desktop should not eagerly run heavyweight review-summary Git snapshot work on restored startup workspaces, especially not with untracked files included by default.
At minimum, Desktop should have guardrails such as:
- Do not run
review_model/review-summaryin the background until the user actually opens a review-related surface. - Do not include untracked files by default for startup/sidebar metadata.
- Detect large/no-HEAD/initial repositories and downgrade to cheap metadata only.
- Add an untracked file count / path count / elapsed-time limit before running
hash-object,add,write-tree, or full diff snapshot work. - Add exponential backoff when
review-summaryfails, instead of quick stale/error refetch loops. - Surface a warning instead of silently exhausting CPU/IO.
Reproduction shape
- On Windows, have a large workspace with many untracked files and no valid HEAD / no initial commit.
- Let Codex Desktop remember it as an active workspace in
.codex-global-state.json. - Launch Codex Desktop.
- Observe Desktop logs under:
%LOCALAPPDATA%\Packages\OpenAI.Codex_2p2nqsd0c76g0\LocalCache\Local\Codex\Logs\<date>
- Search for:
source=review_model
requestKind=review-summary
hash-object --no-filters
write-tree
cwd=<restored workspace>
Workaround notes
Making the affected workspace a clean, committed, tightly ignored Git repo may reduce the impact. However, this is only a workaround. Desktop should not make startup responsiveness depend on every restored workspace being a clean small Git repo.
6 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional confirmation from Windows Desktop
OpenAI.Codex_26.623.13972.0_x64__2p2nqsd0c76g0.I hit the same
review-summary/Git-worker failure mode in a local workspace (D:\codex work) that had become a Git repo with no root.gitignore. The workspace contained large generated/runtime trees such as.mineru-venv/,.codex/vendor/,toolchain/,node_modules/, and installed skill packs.Observed evidence:
git status --short --untracked-files=all | Measure-Objectreported108072untracked paths.%LOCALAPPDATA%\Packages\OpenAI.Codex_2p2nqsd0c76g0\LocalCache\Local\Codex\Logs\2026\07\06grew to multiple ~5-10 MB files.method=review-summary,workerId=git, Git warnings for thousands of paths, then:Confirmation: same review-summary → git abort → taskkill storm on Windows Desktop 26.715.7063.0
This matches the chain described in #30820 / #33776 / #32113 / #27570. Local evidence below (no prompt content, no secrets).
Environment
OpenAI.Codex26.715.7063.0 (OpenAI.Codex_2p2nqsd0c76g0)git status~50–65 ms, no merge/rebase/index.lock,fsck --connectivity-onlyOK)Symptom
codex://threads/new?path=..., background work still targets a previously saved local project in the sidebar15s process sample (during active storm, post-update)
PID-diffing style sampler (unique short-lived PIDs over 15s):
| Metric | Value |
| --- | --- |
| Unique
taskkill.exe| 262 (~17.5/s) || Unique
git.exe| 226 (~15.1/s) || ChatGPT CPU seconds (15s window) | 5.88 |
| ChatGPT processes | 8 |
Baseline with Desktop fully exited:
UniqueTaskkill=0, no ChatGPT/CodexMicroService.Desktop log signature (exact fields)
Log root:
Repeated pattern:
Aborted Git subcommands observed:
git hash-objectgit diff --no-index(per untracked file, e.g.scratch/*.py)git diff --cachedgit statusgit diffagainst HEAD for a small set of tracked changesTrigger cwd in current session (redacted base):
Also previously observed on a second local monorepo under the same parent folder.
Representative command shapes (same as other reports):
Also saw sidebar PR chip work against the same cwd:
Two-day log aggregation (local)
From recent non-empty Desktop logs:
review-summary-related Git complete lines: 4476cwd: 3706 (all failed/aborted)Git snapshot became stale: 55Important negative findings (not root cause)
git status~65 ms in the hottest project<local-project-A>restored from sidebar / local projects — clean worktree alone is not a durable fixGlobal state / project registry shape
.codex-global-state.jsoncontained multiplelocal-projectsentries and aselected-projectpointing at the dirty project. Desktop restored/scanned that project even when the user deep-linked into a different clean path. This aligns with #32113 (saved/inactive projects still scanned) and #30820 (startup restore → eager review-summary).Workspace shape that amplifies (not required for the bug, but makes it severe)
Hot project approximately:
scratch/(order of ~90+ files) plus other untracked dirs.gitignoredid not cover scratch/diagnostics dumpshash-object/diff --no-indexis enough to feed the cancel/taskkillloop on WindowsA/B already tried (local)
| Attempt | Result |
| --- | --- |
| App update 26.715.4045 → 26.715.7063 | Still reproduces |
| Clean linked worktree deep-link | Current project quiet; other saved project still storms |
| Precise
.git/info/exclude| Did not stop loop ||
git add -Nintent-to-add | Did not stop; reverted || Fully exit Desktop | Storm stops immediately |
Request
Please treat this as another independent Windows confirmation on 26.715.7063.0 of:
review-summary/review_modelover restored or saved local projectstaskkill /T /Fcleanup feedback loop freezing process enumeration / Task ManagerHappy to validate a patched Desktop build quickly. Can also provide sanitized log excerpts on request.
Hello, I made a script to just disable this feature until it is fixed. Went from freezlock level of storms to perfect smoothness.
Repo is here, also enables remote control on windows for #28919
https://github.com/zdaar/codex-hacks
<img width="218" height="113" alt="Image" src="https://github.com/user-attachments/assets/1fbd4f3b-bf93-4723-9034-ff13c6b0c0ca" />
The eager
review-summarysnapshots andgit hash-objectactivity here are especially close to the Changes/Review trigger I reproduced.I published a single-file Windows launcher for the original Microsoft Store/MSIX Codex app:
It starts Codex with a process-scoped
GIT_DIR=NUL. On my machine, the stable trace changed from 247 newgit.exeand 137 newtaskkill.exeprocesses per 10 seconds to 0 and 0 over 15 seconds; WMI Provider Host fell from about 6.6% to 0.9%.Usage: fully exit Codex from the Windows system tray, then run the script.
This is an unofficial workaround, not an upstream fix. It deliberately disables or limits Review, Changes, branch detection, commit, and other Git-backed Codex features. It does not patch Codex, modify repositories or Git configuration, write system environment variables, require elevation, terminate processes, or remove chat history. Launching Codex normally restores Git integration.
Additional controlled reproduction on the current Windows build
I reproduced the same underlying
review_modelproblem on:OpenAI.Codex_26.715.10079.0_x64__2p2nqsd0c76g026.715.7235910.0.26200.0x642.55.0.windows.3This reproduction extends the original report because the trigger is not limited to application startup, workspace restoration, a repository without
HEAD, or tens of thousands of untracked files.The affected repository had 278 changed paths. Every time I opened or switched to a conversation inside that project, total system CPU reached nearly 100% for approximately 15-30 seconds. No agent task, explicit Git command, or review action was required.
Read-only inspection of the current renderer bundle showed that
review-navigation-model-*.jsdefines both of these automatic live queries:review-summarybranch-diff-statsAn approximately 11-second WPR trace captured 2,422 processes created from the Codex workload, including:
git hash-objectgit configtaskkill.execonhost.exeDuring the same capture, WPR attributed approximately 32.71% system CPU to
WmiPrvSE.exeand 9.68% to theWinmgmtservice.Controlled A/B isolation
I first disabled only the Electron app-state process snapshot path. The CPU spike still reproduced on every project-chat open.
Holding that mitigation constant, I then applied an unsupported in-memory diagnostic bypass that disabled only the renderer's
review-summaryandbranch-diff-statslive queries. The installed MSIX package andapp.asarwere not modified.After restarting the app:
A 30-second control capture after disabling the two queries showed:
ChatGPT.exe: 0.70% average system CPU;ChatGPT.exe: 3.63% peak system CPU;WmiPrvSE.exe: 0%;This strongly isolates the immediate trigger to automatic
review-summary/branch-diff-statsexecution during normal conversation navigation.The product fix should keep these queries disabled until a review-related surface actually needs them, deduplicate and cancel obsolete calculations, cache results by repository state, and batch per-file Git work instead of spawning separate Git processes.