Releases: FinnaXxx/CleanMyCodex
Release list
v0.1.7
Clean My Codex 0.1.7
The headline is a conversation preview: any conversation can now be read — messages, pasted images and generated images alike — before anything is deleted, and selected from inside the preview itself. Underneath, the platform moved forward by ten Electron majors, and that raises the macOS version required to run it.
What's new
- Preview a conversation before you delete it. Every row on the Sessions page can open a read-only preview of the whole conversation: user and assistant messages reassembled from its rollout segments, oldest first, with Codex's scaffolding stripped the way the list preview strips it, tool calls counted rather than dumped, and long conversations capped. Images pasted into the conversation render inline with click-to-zoom, and images Codex generated for the thread are listed alongside — both under a shared per-preview budget, so a screenshot-heavy conversation is never loaded whole. Previews are only ever opened from the paths of the latest scan.
- Browsing is separate from selecting. Clicking a session row opens its preview; selection lives on the checkbox alone (with a wider hit area), so looking through every conversation on a deletion list never adds to what gets deleted. Inside the preview, ← / → or the previous/next buttons walk the filtered list, and a “Select this conversation” checkbox is bound to the same selection the list shows — decide while reading, not from a title alone.
- The preview's chrome, tidied. A single close button in the top-right corner replaces the footer's Close / Show in File Manager pair (each row keeps its own file-manager button), and Escape now closes only the preview instead of also sending the app back to the overview.
- Stable download links. Each installer is published twice on the release page — the versioned file plus an unversioned copy — so the
/releases/latest/download/…links in the README always serve the newest release without ever changing.
Before you update
- macOS 12 (Monterey) or later is now required. 0.1.6 ran on macOS 11; Electron 43 does not. If you are on Big Sur, stay on 0.1.6.
- Windows 10 or later, unchanged.
- The Windows installer published here is x64, as before, and it is compressed exactly the way 0.1.6's was.
Under the hood
- Electron 33 → 43 (Chromium 150, Node 24.18.1), better-sqlite3 11 → 13, Node 24 for development and CI, and the build toolchain moved to Vite 7 with electron-vite 5.
- The native module no longer gets compiled at all. better-sqlite3 13 is a Node-API addon that ships prebuilt binaries for every platform it supports, so the whole cross-rebuild apparatus is gone: no rebuild on install, no
electron-builder install-app-deps, and no hand-written script for cross-building the Windows binary from macOS. Each artifact now carries only the one prebuilt binary it can actually load. This retires the failure mode where a macOS-built.nodecould end up inside the Windows installer. - Compile targets are now written down. electron-vite derives its target from a table of Electron versions that does not include 43, and its fallback quietly picks the oldest entry in that table — the app would have been compiled for a decade-old target without a word of warning. The config now names node24 and chrome150 outright.
Windows on ARM
A Windows arm64 installer built from this source now installs completely. Releases still publish the x64 installer only, so this matters if you build your own with pnpm build:win-arm64.
electron-builder 26 compresses the app payload with a 2024 build of 7-Zip, which inspects every executable and chooses a compression filter for it — for ARM64 binaries that is the ARM64 filter, added in 7-Zip 23.01. The NSIS installer still unpacks that payload with a plugin built in 2019, which has never heard of it. The result was an installer that ran to completion, reported success, and wrote everything except the nine files it could not decode: the application executable and its eight DLLs. x64 was never affected — it gets the BCJ2 filter, which that plugin does understand and which 0.1.6's installer already used.
The build now pins the filter to one the installer can read, for Windows arm64 only; x64 and macOS are untouched. And because "the installer succeeds and silently omits the program" is not something a failed build would ever have reported, every Windows installer is now re-tested as it is built, using a 7-Zip decoder older than the one inside the installer: a payload that cannot be unpacked fails the build instead of reaching a release page. CI builds and checks both architectures on every push.
Tests
- A fresh clone no longer races the Electron download. Electron 43 dropped its install script, so the binary is fetched on first use rather than at install time. Test files run in parallel, and several would start that download at once while another was already launching the half-written binary. The suite now fetches Electron once, before the first test file.
- A test process killed by a signal now reports what the child actually printed instead of only the signal name, and CI decodes macOS crash reports when a job fails.
What's Changed
- Fix Windows ARM64 installer payload corruption and modernize build by @FinnaXxx in #2
- Add conversation preview dialog before deletion by @FinnaXxx in #3
- Open a conversation by clicking its row, and select it from the preview by @FinnaXxx in #4
New Contributors
Full Changelog: v0.1.6...v0.1.7
v0.1.6
Clean My Codex 0.1.6
New
- Plan output is now tracked as a session asset. Codex's plan mode writes revisions under
~/.codex/plans/<thread-id>/; each conversation's revisions collapse into one row named by the H1 of its newest revision, taggedPlan, and removed with the conversation that owned it. - Workspace cleanup can delete related conversations. A workspace folder deletion now offers the same "also delete related conversations and their session assets" option that worktrees already had, so removing
~/Documents/Codex/xxxcan take the conversations that ran there with it. The rule is unchanged — session assets follow their session; the workspace does not. - Windows is now supported end-to-end, not just packaged. Releases publish a Windows NSIS installer (
.exe) alongside the macOS.dmg, and the app now works there:- Desktop detection recognizes the Codex/ChatGPT desktop app on Windows — the MSIX install under
Program Files\WindowsApps\OpenAI.Codex_<version>_\, the legacyProgram Files\CodexandAppData\Local\Programs\Codexlayouts, including Electron helper processes — and excludes the crashpad handler the way macOS does. Because the Windows desktop app is tray-resident (the window × button does not quit it), the blocker now points to File → Exit; the auto-quit checkbox, which relies on macOS AppleScript, stays hidden off-darwin. - CLI location finds
codexinside the desktop app's versioned/hash install directories (newest copy first when an upgrade left several), then falls back towhere.exeandPATH, with case-insensitive environment lookup. A failed lookup is no longer cached for the session — install or upgrade Codex while Clean My Codex is open and the next operation finds it. - Scheduled cleanup on Windows moved off locale-dependent
schtasks /Queryoutput to PowerShellGet-ScheduledTaskInfo, which emits one invariant ISO timestamp for the next run. The repair pass that re-aligns an out-of-date launch agent on macOS now also reinstalls a Windows task whose executable, arguments, daily interval, or missed-run/battery settings no longer match this build. - Update checks run on Windows too (previously macOS-only), with a Windows-specific prompt to download and run the x64 installer. The Software Update row is now shown on every platform.
- Path identity is handled through a shared layer that normalizes extended-length (
\\?\) and UNC paths, resolves filesystem aliases through the nearest existing ancestor, and compares Windows paths case-insensitively — and is recognized on every host so the Windows behavior is regression-tested on macOS.
- Desktop detection recognizes the Codex/ChatGPT desktop app on Windows — the MSIX install under
- Crash and exception logging. Every IPC handler is wrapped to record failures before Electron serializes them, the main process observes fatal exceptions, and the renderer forwards uncaught errors, unhandled rejections, and React recoverable/uncaught errors to the main process. Worker errors now carry their stack. All of it lands in the existing
cleanup.logalongside the normal operation record, so a submitted diagnostic log can explain both a wrong result and a failure that happened before one. - Linux builds have been retired. The AppImage target, bundled icon,
build:linuxscript, and XDG fallback paths are gone; the location layer now refuses unsupported platforms explicitly rather than silently guessing.
Improvements
- Resource detail views are unified. Sessions, Session Assets, Plugins, Workspace, and Worktrees now share one set of list controls:
- Sortable columns — click a header to sort by it, click again to flip direction; an arrow shows the active direction and a faint double-chevron marks every sortable column. The old sort dropdowns are gone.
- Per-column funnel filters replace the type/status
<select>dropdowns. Each funnel opens a small popover with a count beside every option and fills in while a non-default filter is applied. - Shared selection that retains valid choices across a rescan, keeps hidden choices across a filter, and bulk-toggles only the visible rows — so toggling a filter no longer silently drops what you had selected. A native indeterminate "select all" checkbox and a single bottom action bar (selection summary + delete button, with the unsafe-git warning inline) replace each page's hand-rolled footer.
- Plugins page splits origin from version status. The single status filter is now two funnels: Source (Official / Personal, derived from the scanner's
builtinsignal) and Version status (current / outdated / orphaned / unconfirmed). Official plugins show an "Official" pill alongside a "current" version pill, and the summary card breaks the total into Official and Personal. - Cleanup confirmation reflects the choice you actually made. Implementation-level child operations — the related-conversation deletion that follows a worktree or workspace removal — collapse into their container row in the result list and item count, with a failed or skipped child winning over a successful parent so a related operation that needs attention is never hidden behind a success. A cleanup failure now surfaces inside the dialog instead of duplicating in the main pane.
- One deletion warning instead of two. The worktree and workspace git reminders merged into a single permanent-deletion-with-git notice, and the session-asset local-copy warning is now part of one permanent-deletion line, so the confirmation reads as one warning rather than competing lines.
- Closing the main window on macOS hides it. The renderer and its completed scan stay alive so a Dock click shows the same window instead of mounting a fresh renderer and scanning again;
before-quitstill lets Quit close it normally, andactivaterestores an existing window instead of creating a second one. - Overview sessions row now shows the per-session rollout total separately from the shared
thread_history_*.sqliteprojection, which gets its own protected row, so the two are no longer conflated in the chart or the total. - Plan-only-copy warning. Deleting a Plan whose source conversation is already gone now warns that it may be the only surviving copy of that plan.
- Scan animation redrawn with orbiting rings and a tracer dot in place of the old scan-ring/beam, and the redundant "Initial storage analysis" kicker was dropped.
- Release pipeline splits macOS arm64 and x64 into separate build jobs (building both in one workspace could mutate a hard-linked native module after the first app was signed) that verify codesign and the Mach-O arch of the app and every bundled
.node, then a single release job collects the macOS and Windows artifacts and publishes them. - Tightened cleanup dialog copy and button labels; worktree modification times are rounded for stable display.
Full Changelog: v0.1.5...v0.1.6
v0.1.5
Clean My Codex 0.1.5
New
- Added Worktree management, grouped by repository with total size, build-output size, related conversations, and repository state—including uncommitted changes, unpushed commits, and branches without an upstream.
- Codex-managed worktrees can now be removed safely through
git worktree remove, with an option to delete their related conversations and generated assets at the same time. Worktrees that are not verifiably owned by Codex remain visible but protected. - Added detection of old Codex releases left behind by standalone installations. Superseded releases are offered for cleanup only when the current release can be confirmed.
- Added detection for abandoned desktop-state temporary files, Skills upgrade backups, and interrupted installation artifacts. Unrecognized entries are now listed separately and remain protected instead of being hidden under “Other.”
Improvements
- Redesigned the Plugins page with status filters, search, storage totals, and clearer version ordering. Current third-party plugins can now be uninstalled through the Codex CLI, while outdated versions and uninstall leftovers can still be cleaned independently.
- Improved the classification of plugin installation caches, persistent data, and configuration to prevent double counting and clearly identify protected runtime data.
- Updated the overview and storage breakdown with worktree usage and direct navigation to the new management page.
- Tightened cleanup flows that require Codex to quit. Cleanup launched from a detail page now requires explicit confirmation, and Codex remains closed afterward to reduce the risk of deleting data that is still in use.
- Improved cleanup previews and progress reporting so worktrees, related conversations, plugin uninstalls, and their estimated reclaimed space are presented more clearly.
- Improved storage accounting for external worktree roots and Codex data categories to avoid double counting or including unrelated directories.
Full Changelog: v0.1.4...v0.1.5
v0.1.4
v0.1.3
v0.1.2
v0.1.1
v0.1.0
Full Changelog: https://github.com/FinnaXxx/CleanMyCodex/commits/v0.1.0
Full Changelog: https://github.com/FinnaXxx/CleanMyCodex/commits/v0.1.0