SOP: Migrate Claude Desktop (Claude.ai) Projects + Conversations into Claude Code
Version: 1.0 Last Updated: 2026-06-29 Owner: Sondra (run with her AI operator in Claude Code)
Purpose Recover *everything* from a Claude.ai (web/desktop) account — every project, every conversation, with full content — into a local, permanently searchable library, so no past work is ever lost and any conversation can be found on demand. Your conversations are your IP; this protects them and makes them usable.
Scope Run this when someone has done a lot of work inside Claude.ai Projects and chats and wants it consolidated into Claude Code / their knowledge base. It is a point-in-time snapshot — re-run it every so often to capture new conversations (that's the "do another sweep" step).
Tools & Resources Required
- Claude.ai account — for the official data export (Settings → Privacy → Export data)
- Claude Code — runs the parsing/indexing/library scripts
- A browser automation tool (Playwright) + the user's Claude.ai login — to pull the one
thing the export leaves out: which project each conversation belongs to
- Python — the parser, the bulk filer, the index + library builders
- (Optional) a hosting spot (e.g. the CEO Dashboard) to surface the library on desktop + mobile
Procedure
- Trigger the official export (USER does this). In Claude.ai: click your initials (bottom-left) → Settings → Privacy tab → Export data → confirm. Claude emails a download link (minutes for small accounts, up to a few hours for big ones; link expires in 24h). Download the ZIP and drop it in the intake folder.
If the file is named ...batch-0000: large accounts get split into several ZIPs (batch-0001, 0002...). Check the email for more links and grab them all.
- Parse the export. Unzip it. Inside:
projects/<uuid>.json (each project's name, custom instructions, and uploaded knowledge docs), conversations.json (ALL chats with full messages + an AI summary each), and memories.json (account memory). Run the parser to split it project-by-project and produce a manifest you can eyeball.
Critical gotcha: the export does NOT tag conversations with their project. Any project where the work happened in *chats* (not uploaded files) will look empty — it isn't. The content is in the conversation pile, just unlabeled.
- Get the real project labels from Claude itself (the key step). Open a browser, log into claude.ai, and pull Claude's own data:
GET /api/organizations/{orguuid}/chatconversations — **every conversation returns its project_uuid and project name.** That is the exact link the export drops. Save the full map.
- Combine the two sources by conversation ID. The browser map gives the correct project label; the export gives the full content. Match on UUID and file each conversation into its real project folder, with the complete transcript.
- File the loose ones too. Conversations with no project, plus any that were deleted from Claude but still in the export, get filed with full content and topic-tagged. Use a unique ID in each filename so none overwrite.
- Build the findability layer (this is what makes it bulletproof).
INDEX.md — a grep-able master index: every conversation with title, project, tags, and a
one-line summary. This is what the agent searches when you ask "where's that chat about…".
- A searchable HTML library — human-facing: sidebar by project, search, readable conversation pages.
- A router rule in
CLAUDE.md — tells every future session the archive exists and to grep the
index *before* ever saying a conversation can't be found.
- Surface it where you live. Put the library + a clean project index on the daily home (e.g. the CEO Dashboard) so it's one click away on desktop and phone.
- Verify (don't assert). Counts must reconcile: *projects + loose = export total* (nothing lost). Open a project, open a conversation, confirm the full back-and-forth is there. Grep the index for a known topic and confirm it returns the right chat.
Definition of Done
- Every conversation in the account is filed with full content — project ones grouped under their
real project, loose ones topic-tagged.
- Counts reconcile to the export total (nothing lost).
- A master
INDEX.md + a searchable library exist, and a CLAUDE.md router rule points to them. - It's reachable from the user's daily home (dashboard), behind a login if it holds private data.
Common Mistakes to Avoid
- Trusting the export alone. It strips project labels — you *must* pull the map from Claude's
API/browser, or everything files into the wrong place.
- Calling "empty" projects empty. Their content is in the de-linked chats; open them before judging.
- Filename collisions. Same date + title silently overwrote files — always add a unique ID suffix.
- Guessing project membership by keywords. Overlapping topics make it unreliable; use the real labels.
- Publishing private conversations to an open site. Make sure the host is access-locked to the owner.
- Forgetting it's a snapshot. Schedule periodic re-runs to catch new conversations.
This SOP documents the migration run on 2026-06-29 (577 conversations, 18 projects recovered). Scripts live in PROJECTS/Brain Migration/.