{"slug": "show-hn-cursor-buddy-get-archived-cursor-chats-out-of-renderer-ram", "title": "Show HN: Cursor Buddy, get archived Cursor chats out of renderer RAM", "summary": "Cursor Buddy, a new Cursor plugin by GitHub user professorpalmer, exports archived Cursor chats from the renderer's RAM into a local SQLite vault, reducing memory usage; on one Mac tested 28 Aug 2026, the renderer used 1.97 GB RSS before pruning, with the vault storing 232 chats and 13,577 searchable messages. The plugin provides MCP tools for searching and reading chats without loading them back into the renderer, and a prune command to delete archived rows from Cursor's database after quitting the app.", "body_md": "Cursor's Archive button hides chats. The rows stay in `state.vscdb`\n\n, and Cursor Helper (Renderer) keeps paying for them.\n\nThis is a **Cursor plugin** (not a standalone MCP dump): rules, skills, commands, logo, and an MCP server that searches a local SQLite vault. You ask “when did we talk about the memory leak?”; the agent pulls **snippets**. Ask for the whole transcript and it reads that chat into **this** conversation — not back into the renderer.\n\nMeasured on one Mac, 28 Aug 2026, after export, **before prune**: renderer 1.97 GB RSS, `state.vscdb`\n\n3.68 GB (233 archived + 79 active), vault 2.68 GB (232 chats, 13,577 searchable messages). Search is 1-10 ms. Your numbers will differ.\n\n| You want | Plugin surface | What RAM it uses |\n|---|---|---|\n| Find the chats | MCP `search_archive` , `/search-archive` |\nVault SQLite. Renderer unchanged. |\n| Read one chat | MCP `read_composer` |\nAgent context in this thread. Still not the renderer. |\n| Shrink Cursor | `/export-archived` , Quit (`Cmd+Q` ), `/prune-from-cursor` |\nDeletes vaulted archived rows from `state.vscdb` . |\n\nNothing is copied back into Cursor's live DB. Sidebar Archive is not this.\n\nThis is not a second [Portable LLM Wiki](https://github.com/professorpalmer/portable-llm-wiki). The wiki is markdown pages, `[[wikilinks]]`\n\n, and Karpathy ingest. Buddy is a dump-and-query archive of Cursor composers. It steals the wiki's retrieval habits (composer as page, skip hub chats, empty index stays empty), not the wiki product.\n\nRequires Python 3 on `PATH`\n\n(the MCP server is stdio Python shipped inside the plugin).\n\nCursor discovers Cursor Plugins from `~/.cursor/plugins/local`\n\nwhen local plugin imports are allowed ([docs](https://cursor.com/docs/plugins)).\n\n```\ngit clone https://github.com/professorpalmer/cursor-buddy.git\nmkdir -p ~/.cursor/plugins/local\nrsync -a --delete --exclude .git cursor-buddy/ ~/.cursor/plugins/local/cursor-buddy/\n```\n\nThen **Developer: Reload Window**. Open **Customize** and confirm:\n\n- Plugin: Cursor Buddy\n- Rule: vault-not-live-db\n- Skill: archived-chats\n- Commands:\n`/export-archived`\n\n,`/prune-from-cursor`\n\n,`/search-archive`\n\n- MCP:\n`cursor-buddy`\n\nwith`list_composers`\n\n,`search_archive`\n\n,`read_composer`\n\nThe bundled `mcp.json`\n\nuses `python3`\n\nplus `${PLUGIN_ROOT}/bin/cursor-buddy`\n\n(Agent Plugins spawn shape: interpolate `PLUGIN_ROOT`\n\nin `args`\n\n/`cwd`\n\n, never in `command`\n\n). If MCP connects with 0 tools, Cursor is still starting the server with cwd = home and not expanding `${PLUGIN_ROOT}`\n\n. Set `args[0]`\n\nin `~/.cursor/plugins/local/cursor-buddy/mcp.json`\n\nto that copy's absolute `bin/cursor-buddy`\n\npath and reload.\n\n```\n# Safe while Cursor is open\npython3 ~/.cursor/plugins/local/cursor-buddy/bin/cursor-buddy export\n\n# Requires Cmd+Q first\npython3 ~/.cursor/plugins/local/cursor-buddy/bin/cursor-buddy prune          # dry-run\npython3 ~/.cursor/plugins/local/cursor-buddy/bin/cursor-buddy prune --apply\n```\n\nVault path: `~/Library/Application Support/cursor-buddy/vault.sqlite`\n\n. Active (unarchived) chats are never exported or pruned.\n\nMarketplace listing (after review): [cursor.com/marketplace/publish](https://cursor.com/marketplace/publish).\n\n| Kind | Path |\n|---|---|\n| Manifest | `.cursor-plugin/plugin.json` |\n| MCP | `mcp.json` → `bin/cursor-buddy mcp` |\n| Skill | `skills/archived-chats/` |\n| Rule | `rules/vault-not-live-db.mdc` |\n| Commands | `commands/*.md` |\n| Hooks | `hooks/hooks.json` (export on workspace/session) |\n| Logo | `assets/logo.svg` |\n\nArchive in the sidebar still does not copy or delete anything. Buddy splits the job:\n\n**Ingest (safe while Cursor is open).**`export`\n\ncopies newly archived chats into the vault. Plugin hooks run that on`workspaceOpen`\n\n,`sessionStart`\n\n, and`sessionEnd`\n\n. Unchanged chats are skipped.**Prune (only after Cursor releases** Never from a hook that runs while the app is open. Install a LaunchAgent that prunes once the DB is idle:`state.vscdb`\n\n).\n\n```\npython3 ~/.cursor/plugins/local/cursor-buddy/bin/cursor-buddy install-automation\n```\n\nIf you archive a chat tonight, the next workspace open or agent session copies it. After you Quit (`Cmd+Q`\n\n), leave Cursor closed for a minute so prune-if-idle can delete those rows (VACUUM can take a bit on a large `state.vscdb`\n\n). Active chats are never touched.\n\nManual export/prune still works.\n\n`search_archive`\n\nkeeps distinctive tokens (length >= 3, stop list), requires every token to appear in the same composer (title or messages, not necessarily one bubble), and caps hits per composer so a 50k-bubble chat cannot fill the result. Stop-only queries return nothing. Tool bubbles with empty `text`\n\nare not indexed; `composerData`\n\n/ plan blobs are not dumped into FTS.\n\nMIT", "url": "https://wpnews.pro/news/show-hn-cursor-buddy-get-archived-cursor-chats-out-of-renderer-ram", "canonical_source": "https://github.com/professorpalmer/cursor-buddy", "published_at": "2026-08-28 20:09:42+00:00", "updated_at": "2026-08-28 20:18:38.462689+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools"], "entities": ["Cursor", "Cursor Buddy", "professorpalmer", "SQLite", "MCP"], "alternates": {"html": "https://wpnews.pro/news/show-hn-cursor-buddy-get-archived-cursor-chats-out-of-renderer-ram", "markdown": "https://wpnews.pro/news/show-hn-cursor-buddy-get-archived-cursor-chats-out-of-renderer-ram.md", "text": "https://wpnews.pro/news/show-hn-cursor-buddy-get-archived-cursor-chats-out-of-renderer-ram.txt", "jsonld": "https://wpnews.pro/news/show-hn-cursor-buddy-get-archived-cursor-chats-out-of-renderer-ram.jsonld"}}