Codex App archived chats bulk delete shows success but does not remove archived threads

Open 💬 4 comments Opened Jun 15, 2026 by luvi-hub
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

Summary

In Codex App, deleting all archived chats from the archived chats page shows a success toast, but the archived chats are not actually removed. Refreshing/reopening the archived chats page still shows the same archived threads.

Environment

  • Codex App: 26.609.41114 (CFBundleVersion=3888, bundle id com.openai.codex)
  • Codex CLI: codex-cli 0.140.0-alpha.2
  • macOS: 15.7.3 (24G419)
  • Local app/server logs show app_server.api_version="v2"

Steps to reproduce

  1. Open Codex App.
  2. Navigate to Archived Chats.
  3. Click the bulk delete action for archived chats.
  4. Observe the success toast, for example: Deleted 25 archived chats.
  5. Refresh/reopen the archived chats page.

Actual behavior

The archived chats still appear after the success toast.

Local state inspection immediately after the toast showed:

select archived, count(*) from threads group by archived;

Result:

archived  count
0         71
1         25

All 25 archived thread rows still existed in the local Codex state database, and their rollout_path values still pointed at redacted paths under:

~/.codex/archived_sessions/*.jsonl

The archived session files also still existed.

The currently exposed thread-management tools in this environment include archive/unarchive operations but no delete-thread operation, which is consistent with the delete UI not changing the underlying state.

Expected behavior

After a successful bulk delete toast:

  • archived thread rows should be removed from the local thread state, or otherwise marked so they no longer appear in Archived Chats;
  • archived session files should be deleted or detached according to the intended product semantics;
  • the success toast should only be shown after the underlying state mutation succeeds and is verified, or it should report a failure/partial failure.

Additional observations

The local log database had codex_rollout::state_db warnings around thread listing/read-repair, for example stale rollout path/read-repair messages. I did not find an explicit delete failure log. This looks like a UI/app-server state consistency issue rather than a user workflow issue.

No private thread titles or screenshots are included here; the evidence above is intentionally aggregated/redacted.

View original on GitHub ↗

4 Comments

github-actions[bot] contributor · 2 months ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #28095

Powered by Codex Action

EricDeng1001 · 2 months ago

same here

toppinghand · 1 month ago

Windows Codex app version: 26.715.2305.0

In Settings > Archived Tasks, clicking "Delete All" does not remove
the archived tasks. After waiting and reopening the app, all archived
tasks are still present.

I currently have about 59 files in ~/.codex/archived_sessions.
Restarting the app does not resolve the issue.

TorinAsakura · 2 days ago

Additional macOS evidence narrows this failure to the Desktop bulk enumeration step rather than thread/delete itself.

Environment:

  • Codex Desktop 26.818.61809 (build 7019)
  • Bundled CLI 0.149.0-alpha.4.3
  • macOS 26.5.2 arm64
  • Incident ID: 019ff72a-249e-7680-89a0-c7834ee67e45

Before Delete all, local state contained 1,062 archived JSONLs. After the clear action, 135 remained and 927 were deleted. All 135 residual JSONLs pre-dated the action and have matching SQLite rows with archived = 1 and thread_source = 'subagent'; each corresponding JSONL also has a matching session_meta record. The other 927 are absent from all live state checked. SQLite integrity_check is ok. The available logs contain no relevant archive/delete/clear entry.

I traced the installed Desktop caller: it paginates listThreads({ archived: true, limit: 200, useStateDbOnly: true }) without sourceKinds. The public app-server contract defines omitted or empty sourceKinds as interactive-only (cli, vscode), which excludes subagent threads before deletion. This accounts for the subagent-class residual, but one legacy survivor whose JSONL session_meta source is vscode is not yet fully explained.

The frontend fix belongs in the closed-source Desktop caller: request the subagent/all local source kinds explicitly (or use a server-side all-source bulk enumerator), deduplicate thread IDs across pages, then call thread/delete. The existing public thread/delete subtree behavior is not the failing mechanism here.