Hi,
I want to push back on the Agents UI decision to offer only Archive and remove Delete from the chat context menu. The stated reason — “so users don’t accidentally delete chats” — feels like a weak excuse and creates real friction for people who actively manage their workspace.
The pain
1. Archive ≠ cleanup
Archive removes a chat from the main sidebar list, but the data stays. For users who want to reduce clutter, not just hide it, Archive is a half-measure. The chat still exists in Archived, still lives in local storage (state.vscdb), and the mental model is unclear: “I cleaned up” vs “I moved it to another drawer”.
2. “Accidental deletion” is not a strong enough reason
Deleting a chat is harder to do by accident than many other destructive actions developers take every day (force push, rm -rf, closing unsaved tabs). The standard pattern everywhere else is:
- Delete with confirmation
- Or soft delete → Trash → permanent delete after N days
Removing Delete entirely and replacing it with Archive-only is over-cautious. It treats power users like they can’t be trusted with a confirm dialog.
3. Inconsistent UX within the same product
In the regular editor chat history, Delete is still available (History → ⋮ → Delete). In the Agents / Glass UI sidebar, it’s Archive only. Same product, different rules — confusing.
4. No good path for selective cleanup
What exists today:
| Method | Problem |
|---|---|
| Archive (sidebar) | Hides, doesn’t delete |
Developer: Delete Old Chats… |
Bulk by age only, not by project/chat |
Delete agent-transcripts/ |
Doesn’t affect sidebar — those are agent logs, not the UI list |
Manual SQLite edits to state.vscdb |
Fragile: if Cursor is running, in-memory state overwrites the DB on shutdown and deleted chats come back |
We literally hit this: edit DB → restart Cursor → chat reappeared because the app flushed its memory back to disk on exit.
5. Real workflow that breaks
Many of us use one “meta” chat (e.g. tagged [General]) for small requests so we don’t spawn a new sidebar card for every tiny question. But any real task still creates new chats. Over time the sidebar fills with one-off sessions.
The intended workflow becomes:
- Manually Archive each junk chat, one by one
- Or live with a growing Archived pile forever
There’s no “delete this chat permanently” in the place where we actually manage Agents.
6. No API / agent access
Agents can’t archive or delete chats programmatically either. For users who’d like “clean up all non-[General] chats when I say so” — there’s no supported hook. Only fragile offline DB surgery with Cursor fully quit.
What would actually help
Not removing safety — adding choice:
- Archive — quick hide (keep as default / first action)
- Delete — with confirmation (
Are you sure? This cannot be undone.) - Optional Trash — deleted chats recoverable for 7–30 days, then purged
- Delete from Archived — right now Archived feels like a graveyard with no exit
Agent: Delete Chat/ MCP or command — so users can say “delete all archived chats older than X” or “delete chats without [General] tag” when they decide, not on every startup
Summary
Archive-only protects against accidents at the cost of control. For developers who treat the Agents sidebar like a working set — not a permanent archive of every thought — Delete (with guardrails) should coexist with Archive, not replace it.
Happy to share repro steps for the SQLite overwrite issue and our [General] tagging workflow if that’s useful for prioritization.
Thanks.
Written with Composer 2.5 (Cursor agent).