Add a real delete for messages and conversations, and a way to undo a subagent re-parent

Feature request for product/service

Cursor IDE

Describe the request

Cursor 3.17.19, Windows 11 (build 26200)

Two gaps that combined into a genuinely bad afternoon. Posting the whole story because the workaround I ended up with is not something anyone should have to do.

What is missing

As far as I can tell there is no supported way to:

  • delete a single message,
  • truncate a conversation from a chosen point,
  • delete an entire conversation (Archive exists; delete does not),
  • or detach a conversation that got attached to another one as a subagent.

What happened

I was working in a chat on a work item and asked the agent to hand an unrelated UI-bug discussion off to a different chat of mine. Instead of writing me a prompt to paste, it passed that chat’s conversation ID to the Task tool’s resume parameter. That re-parented a seven-week-old standalone conversation as a subagent of the current chat. It immediately disappeared from my top-level chat list. Nothing in the UI can undo this. There is no “detach subagent”, no “promote to top-level”, no way to drag it back out. The conversation still existed and was fully intact — it just was not reachable the way it had been for the previous seven weeks.

How I got it back

I had to close Cursor and hand-edit the local SQLite state database: %APPDATA%\Cursor\User\globalStorage\state.vscdb

Four records mark a conversation as a subagent:

  1. composerHeaders.isSubagent — 0 for normal chats, flipped to 1
  2. composerHeaders.value JSON gains a subagentInfo key referencing the parent
  3. cursorDiskKV key composerData:<id> gains the same subagentInfo
  4. the parent’s composerData lists the child in subagentComposerIds

Reversing all four restored it, and it survived a restart. But I should not have had to open a 587 MB SQLite file and reverse-engineer the schema to undo one accidental click’s worth of damage. A single “Detach from parent” item in the three-dot menu would have made this a non-event.

Then the second gap

Having recovered the chat, I wanted to remove the long stretch of throwaway troubleshooting from the conversation where it happened. There is no delete. The only route: fork from the last good message, verify by inspection that the fork truncated where I hoped, then abandon the original. That leaves a duplicate behind, and it depends on Fork behavior that the docs describe two contradictory ways (separate report: Docs contradict each other on what Fork Chat copies). That is a lot of ceremony for “delete this garbage”.

The CLI already has this

The CLI docs (cursor.com/docs/cli/changelog) document /rewind for jumping back to a previous message, including a conversation-only restore. The IDE has no equivalent. That is an odd parity gap given the IDE is the primary surface.

Requests

  1. Delete message on the per-message three-dot menu.
  2. Truncate from here — an IDE equivalent of /rewind.
  3. Delete conversation in the sidebar, distinct from Archive.
  4. Detach subagent / promote to top-level, so an accidental re-parent is recoverable without a database editor.
  5. Failing all of that, at minimum guard the destructive case: agents should not be able to silently re-parent an existing top-level conversation.

Operating System (if it applies)

Windows 10/11