[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-letta-importing-chatgpt-memory":3,"mdc-d8ra2e-key":37,"related-repo-letta-importing-chatgpt-memory":4685,"related-org-letta-importing-chatgpt-memory":4803},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"importing-chatgpt-memory","import ChatGPT memory into Letta","Clone ChatGPT saved memory into Letta, then optionally enrich it with broader conversation history. Designed for a slick onboarding flow that extracts hidden saved-memory\u002Fcontext blocks, builds Letta-ready previews, and only asks questions at meaningful checkpoints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"letta","Letta","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fletta.png","letta-ai",[13,17,20,23],{"name":14,"slug":15,"type":16},"Onboarding","onboarding","tag",{"name":18,"slug":19,"type":16},"ChatGPT","chatgpt",{"name":21,"slug":22,"type":16},"Memory","memory",{"name":24,"slug":25,"type":16},"Agents","agents",127,"https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fskills","2026-07-13T06:25:50.705109","MIT",20,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"A shared repository for skills. Intended to be used with Letta Code, Claude Code, Codex CLI, and other agents that support skills.","https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fskills\u002Ftree\u002FHEAD\u002Fletta\u002Fimporting-chatgpt-memory","---\nname: importing-chatgpt-memory\ndescription: Clone ChatGPT saved memory into Letta, then optionally enrich it with broader conversation history. Designed for a slick onboarding flow that extracts hidden saved-memory\u002Fcontext blocks, builds Letta-ready previews, and only asks questions at meaningful checkpoints.\nlicense: MIT\n---\n\n# Cloning ChatGPT Memory into Letta\n\nUse this skill when a user wants Letta to inherit ChatGPT memory as faithfully as possible without blindly importing an entire export.\n\n## Good fits\n\n- clone my ChatGPT memory into Letta\n- inspect hidden saved profile \u002F custom-instruction context\n- migrate ChatGPT memory into active Letta memory\n- enrich the clone with work context or collaboration preferences from old chats\n- preserve selected transcripts for high-fidelity audit\u002Freference\n\nThe skill should work well even when the user says something minimal like:\n- \"I want to import my ChatGPT memory\"\n- \"Can you clone my ChatGPT memory into Letta?\"\n- \"Import my ChatGPT export\"\n\nDo **not** depend on the user writing an optimized prompt.\n\n## Scope\n\nThis skill is for **memory onboarding**, not just transcript rendering.\n\nIt should:\n- extract ChatGPT saved memory and editable-context blocks first\n- build a Letta-oriented preview of what should become active vs progressive memory\n- write obvious, high-confidence items while narrating progress\n- optionally enrich from the broader archive afterward\n- optionally export transcripts for high-fidelity archival\n\nIt should **not**:\n- blindly import the whole archive\n- treat runtime context as durable memory\n- flatten historical context into always-visible memory by default\n- auto-store sensitive personal material without confirmation\n- write memory into a malformed MemFS structure\n\n## Default posture\n\nUse a **clone first, enrich second** workflow.\n\n1. ask a short structured intake\n2. inspect the export\n3. extract and preview in one step\n4. write obvious high-confidence items while learning\n5. continue into archive enrichment if scoped — narrate progress, let the user interrupt\n6. ask only at meaningful checkpoints\n7. run `\u002Fdoctor` to validate the final memory structure\n\nUsers should feel like they are being guided through an onboarding flow, not dropped into a bag of scripts.\n\nThe onboarding should be robust to sparse user input. The agent should supply the structure, not ask the user to craft a better request.\n\n**This skill is a workflow, not reference material.** Follow the numbered steps in order. Read the guidance for each step before executing it — especially the merge rules and write targets. Moving fast is good; skipping steps is not. \"Autonomous\" means you drive the process without stopping for permission, not that you skip the instructions.\n\n## Interaction style\n\n### Start with a short dialog\n\nWhen available, prefer the structured **AskUserQuestion** flow so the import feels like a dialog.\n\nGood question types:\n- export location (if not obvious)\n- import scope (saved memory only, memory + work context, full history mining)\n- topic focus: \"Any specific projects or topics you want me to look for?\"\n- sensitivity: \"Anything I should avoid storing?\"\n\nDo **not** ask about review cadence. Most users don't have a strong preference, and the ones who do will say so. Default to keeping going — narrate what you're doing and let the user interrupt if they want to pause. This keeps the flow moving instead of creating a false checkpoint.\n\nAvoid questions that don't actually change the workflow. For example, \"how do you want historical context handled?\" sounds meaningful but the answer rarely changes what scripts you run. Focus on questions whose answers fork the process.\n\nThis intake exists so the user does **not** need to front-load all of this context in their first message.\n\nUse:\n- **single-choice** for policy decisions\n- **multi-select** for scope selection\n\n### After intake, drive the process\n\nOnce scope is clear, be more authoritative than permissive.\n\nDo **not** keep returning with vague prompts like:\n- \"what do you want me to do next?\"\n- \"should I keep going?\"\n\nInstead:\n1. say what you wrote\n2. say what you are reviewing next\n3. continue automatically\n\nOnly stop for:\n- contradictory facts\n- sensitive\u002Fintimate material\n- major scope changes\n- real uncertainty about what counts as durable memory\n\nDo **not** stop for low-risk routing decisions once the user's scope is already broad and clear.\n\nAlso do **not** respond by teaching the user how they should have phrased the request. Just run the onboarding properly.\n\n## Progress tracking\n\nThis import can take multiple minutes for large archives. **Never let the user sit in silence.** The import should feel like a guided, living process.\n\n### Record the starting commit\n\nBefore writing any memory, record the current HEAD of the memory repo:\n\n```bash\ngit -C \"$MEMORY_DIR\" log --oneline -1\n```\n\nSave this commit hash — it's the rollback point. If anything goes wrong or the user wants to undo the import, they can reset to this commit:\n\n```bash\ngit -C \"$MEMORY_DIR\" reset --hard \u003Cstart-commit>\ngit -C \"$MEMORY_DIR\" push --force\n```\n\nInclude both the start and end commit hashes in the import audit file and in the final summary. Tell the user explicitly: \"If you want to undo any of this, I can reset your memory to where it was before the import.\"\n\n### Use TodoWrite for phases\n\nCreate a todo list at the start of the import and update it as you go:\n\n1. Record starting commit\n2. Locate export and run inventory\n3. Extract and preview saved memory\n4. Write active memory (`system\u002Fhuman.md`)\n5. Write import audit + progressive memory (`reference\u002Fchatgpt\u002F`)\n6. Archive enrichment (if scoped)\n7. Validate with \u002Fdoctor\n\nMark each phase `in_progress` before starting and `completed` when done.\n\n### Narrate between script calls\n\nAfter each script completes, tell the user what you found before running the next one:\n\n- \"Found 347 conversations spanning 2023–2026. Extracting saved memory now...\"\n- \"ChatGPT remembered 12 facts about you across 4 fields. Building the preview...\"\n- \"Writing 8 high-confidence items to active memory. Next: archive enrichment...\"\n- \"Dispatching 4 mining agents across 200 conversations...\"\n\n### Report stats\n\nSurface concrete numbers whenever you have them:\n- total conversation count\n- saved-memory field counts\n- how many items written vs held for review\n- mining progress (conversations scanned, findings per chunk)\n\n### Use --progress on scripts\n\nAll long-running scripts support `--progress` which prints status to stderr. Use it for large archives so the user sees work happening even during script execution.\n\n## Workflow\n\n### 0. Locate the export\n\nChatGPT exports are typically named with a long hash and timestamp, e.g.:\n`8a8f3ee0...-2026-03-31-18-41-51-e0dc362a....zip`\n\nCommon locations:\n- `~\u002FDownloads\u002F` (most common — this is where the browser saves it)\n- Desktop or a custom export folder\n\nIf the user doesn't know the exact path, glob for zip files in Downloads:\n\n```bash\nls -t ~\u002FDownloads\u002F*.zip | head -20\n```\n\nDownloads folders are often crowded. ChatGPT exports follow a distinctive pattern — look for filenames matching `[8+ hex chars]-YYYY-MM-DD-*`. A quick filter:\n\n```bash\nls ~\u002FDownloads\u002F*.zip | grep -E '[0-9a-f]{8}.*-[0-9]{4}-[0-9]{2}-[0-9]{2}-'\n```\n\nIf still ambiguous, check whether the zip contains `conversations-*.json` entries:\n\n```bash\nunzip -l \u003Ccandidate.zip> | grep conversations-\n```\n\n### 1. Inventory the export\n\nStart by listing conversations and surfacing hidden-context-heavy candidates.\n\n```bash\npython3 scripts\u002Flist-conversations.py \u003Cexport.zip>\npython3 scripts\u002Flist-conversations.py \u003Cexport.zip> --sort hidden --min-hidden 1\npython3 scripts\u002Flist-conversations.py \u003Cexport.zip> --json --limit 50\n```\n\nUse this to understand scale, find likely memory-heavy conversations, and decide whether broader archive review is even necessary.\n\n**Warning:** For large archives (300+ conversations), `--json` output can easily exceed 100K characters and flood your context window. Mitigations:\n- Use `--limit 50` to start — you can always paginate with `--start-index`\n- Pipe to a file and read selectively: `... --json > \u002Ftmp\u002Fconversations.json`\n- Use `--title-contains` to filter before dumping JSON\n- The non-JSON (table) output is much more compact for initial inventory\n\n### 2. Extract and preview in one step\n\nUse the preview builder directly on the zip — it runs the extraction internally:\n\n```bash\npython3 scripts\u002Fbuild-memory-preview.py \u003Cexport.zip>\npython3 scripts\u002Fbuild-memory-preview.py \u003Cexport.zip> --output \u002Ftmp\u002Fchatgpt-memory-preview.md\npython3 scripts\u002Fbuild-memory-preview.py \u003Cexport.zip> --progress\n```\n\nThis combines what was previously two steps (extract → preview) into one. It pulls the highest-signal onboarding inputs from the entire export:\n- `about_user_message`\n- `about_model_message`\n- `user_profile`\n- `user_instructions`\n\nAnd categorises them into:\n- **Active memory candidates** — what should be in-context every turn\n- **Runtime context** — timezone, location, current date (skip these)\n- **Historical\u002Fprogressive candidates** — older versions, previous profiles\n- **Contradictions** — fields with multiple versions that need review\n\nIf you need the raw extraction JSON separately (e.g. for subagent dispatch or audit), use `extract-saved-memory.py` directly:\n\n```bash\npython3 scripts\u002Fextract-saved-memory.py \u003Cexport.zip> --json --output \u002Ftmp\u002Fchatgpt-saved-memory.json\n```\n\n**Note:** For users with simple ChatGPT profiles (e.g. just a name and one-liner), the preview mostly reformats what's already obvious. In those cases, read the preview output and go straight to writing memory. The preview is most valuable when the profile has contradictions, multiple historical versions, or a mix of durable and runtime context.\n\n### Merging with existing memory\n\nIf `system\u002Fhuman.md` or `system\u002Fpersona.md` already has content, **you are merging, not replacing**.\n\n**Anti-pattern:** Reading the existing block, then doing a `str_replace` that swaps the entire content for a new version. This is overwriting, even if you read first. The existing content was written by the user or a previous session — it has context you don't have. Don't throw it away.\n\n**Correct pattern:** Use targeted `str_replace` calls that add new lines or sections to the existing file. Concretely:\n\n1. Read the existing block (it's already in your system prompt)\n2. Identify what's **missing** — facts from ChatGPT that the existing block doesn't cover\n3. Use `str_replace` to insert the missing facts into the appropriate section, or append a new section at the end\n4. **Never replace a line that already exists** unless the ChatGPT data is explicitly newer and contradicts it\n\nExample — if `system\u002Fhuman.md` already says \"Works at Letta\" and ChatGPT saved memory says \"Works at Letta on agent infrastructure\", the merge is:\n```\nstr_replace \"Works at Letta\" → \"Works at Letta on agent infrastructure\"\n```\nNot: replace the entire file with a rewritten version.\n\nIf the existing block is empty or minimal (just the default template), a full write is fine. The merge discipline applies when there's existing content worth preserving.\n\n### Serialise memory writes\n\n**Do not create or update multiple memory files in parallel.** The memory tool can hit race conditions when called concurrently, producing spurious errors even when the writes succeed. This makes it hard to know what actually landed.\n\nWrite memory files one at a time. The speed difference is negligible — memory writes are fast. The reliability difference is not.\n\n### Safe write targets and memory structure\n\nBefore writing memory, inspect `system\u002F` and the relevant reference directories.\n\nImportant MemFS rule:\n- **Never create overlapping file\u002Ffolder paths** such as `system\u002Fhuman.md` and `system\u002Fhuman\u002F...` or `system\u002Fpersona.md` and `system\u002Fpersona\u002F...`.\n\nWrite targets (all imports should produce at least the first two):\n- `system\u002Fhuman.md` — condensed durable user facts and collaboration preferences that should be in-context every turn\n- `reference\u002Fchatgpt\u002Fimport-YYYY-MM-DD.md` — **always create** — import audit trail, exclusions, uncertainty notes, source path\n- `reference\u002Fchatgpt\u002Fwork-and-technical-background.md` — create when historical work context is found\n- `reference\u002Fchatgpt\u002Fcollaboration-preferences.md` — create when detailed interaction\u002Fstyle patterns are found\n- `reference\u002Fchatgpt\u002Ftranscripts\u002F` — curated transcript exports for fidelity\u002Fauditability\n\nIf `system\u002Fhuman.md` already exists, update that file instead of inventing a sibling folder.\nIf `system\u002Fpersona.md` already exists, update that file instead of inventing a sibling folder.\n\nUse progressive disclosure aggressively: keep active memory small, and link outward with `[[reference\u002Fchatgpt\u002F...]]` paths so future agents can discover the archive.\n\n### 3. Write memory — active AND progressive\n\nThis step writes to **both** `system\u002F` and `reference\u002Fchatgpt\u002F`. Not just active memory. The progressive memory layer is where the import's long-term value lives — without it, historical context, audit trails, and collaboration preferences are lost.\n\n#### 3a. Active memory (`system\u002Fhuman.md`)\n\nWrite immediately when the fact is explicit, current, and low-sensitivity:\n- name and stable identity basics\n- current role or project context\n- explicit response preferences from hidden saved memory\n- repeated formatting preferences\n- collaboration preferences like directness, question volume, anti-sycophancy\n\nKeep `system\u002Fhuman.md` compact. Only what should be in-context every turn.\n\n#### 3b. Import audit file (`reference\u002Fchatgpt\u002Fimport-YYYY-MM-DD.md`)\n\n**Always create this file.** It records what happened during the import:\n- export path and conversation count\n- what was written to active memory and why\n- what was excluded and why\n- contradictions found and how they were resolved\n- what still needs confirmation\n- source of each decision (which saved-memory field, which conversation index)\n\nThis is the receipt. Future agents can read it to understand where the memory came from.\n\n#### 3c. Progressive memory files\n\nCreate these when the preview or enrichment surfaces material that doesn't belong in `system\u002F` but is worth keeping:\n\n- **`reference\u002Fchatgpt\u002Fwork-and-technical-background.md`** — historical roles, past projects, technical background, older work context that's useful for understanding the user but not needed every turn\n- **`reference\u002Fchatgpt\u002Fcollaboration-preferences.md`** — detailed interaction patterns, formatting preferences, correction patterns, anti-patterns — anything too granular for `system\u002Fhuman.md` but valuable when the agent needs to calibrate tone or style\n\nIf the preview shows historical alternatives (older saved-memory versions, previous profiles), those go here too.\n\n#### 3d. Link progressive files from active memory\n\nAfter creating progressive memory files, add `[[reference\u002Fchatgpt\u002F...]]` links in `system\u002Fhuman.md` so future agents can discover them. Example:\n\n```\nSee also: [[reference\u002Fchatgpt\u002Fwork-and-technical-background.md]], [[reference\u002Fchatgpt\u002Fcollaboration-preferences.md]]\n```\n\n#### Writing pattern\n\nFor each write:\n1. keep it small and specific\n2. tell the user what you wrote and where\n3. tell the user what you are reviewing next\n4. continue\n\n### 4. Optional archive enrichment\n\nOnly after the saved-memory clone is handled, optionally mine broader conversation history for:\n- work\u002Fproject context\n- collaboration patterns\n- historical background\n- other durable facts the user wants preserved\n\n#### Confirm before exhaustive mining\n\nArchive enrichment dispatches subagents — potentially many of them. For a 500-conversation archive, that's ~10 parallel agents. **Always confirm with the user before starting**, and tell them what it will cost in concrete terms:\n\n- How many conversations will be mined\n- How many subagents will be dispatched\n- That this is the expensive part of the import\n\nUse AskUserQuestion with options like:\n- **Full archive mining** — \"Mine all N conversations (~X subagents). Most thorough, most expensive.\"\n- **Targeted mining** — \"Mine conversations matching specific topics you care about. Cheaper, still good coverage.\"\n- **Skip enrichment** — \"The saved-memory clone already captured the essentials. Stop here.\"\n\nDo not automatically dispatch subagents just because the user selected \"full history mining\" at intake. The intake scope question establishes *willingness*; this checkpoint confirms the *specific cost* now that you know the archive size.\n\nFor small archives (under 50 conversations), mine directly — no subagents needed, no confirmation needed:\n\n```bash\npython3 scripts\u002Frender-conversation.py \u003Cexport.zip> --index 12 --output \u002Ftmp\u002Fchatgpt-12.md\n```\n\nFor archives of 50+ conversations, **use parallel chunk-based mining** (see below).\n\n#### Topic-based filtering\n\nThere is no single script for topic-based discovery + rendering. Use this two-step pattern:\n\n```bash\n# Step 1: Find conversations by topic\npython3 scripts\u002Flist-conversations.py \u003Cexport.zip> --title-contains \"Julia\" --json\n\n# Step 2: Render the most promising ones individually\npython3 scripts\u002Frender-conversation.py \u003Cexport.zip> --index 95\npython3 scripts\u002Frender-conversation.py \u003Cexport.zip> --index 144\n```\n\nFor broader topic sweeps, try multiple `--title-contains` queries (e.g. \"Julia\", \"Bayesian\", \"economics\") and deduplicate by index before rendering.\n\n#### Stale-context \u002F retraction sweep\n\nBefore promoting historical findings to active memory, do a lightweight sweep for explicit corrections in later conversations.\n\nUse content search with `--role user` to focus on what the user actually said:\n\n```bash\npython3 scripts\u002Fsearch-conversations.py \u003Cexport.zip> --query \"not doing\" --query \"no longer\" --query \"forget that\" --query \"remove from memory\" --role user\npython3 scripts\u002Fsearch-conversations.py \u003Cexport.zip> --query \"used to\" --query \"don't assume\" --role user --json --limit 20\n```\n\nTypical signals:\n- the user says a project is no longer active\n- the user says to forget or remove old context\n- the user says a role, employer, affiliation, or plan is outdated\n\nWhen old context conflicts with a newer explicit correction, prefer the newer correction.\n\n### 5. Validate with \u002Fdoctor\n\nAfter the import completes — whether it was a simple saved-memory clone or a full archive enrichment — **run `\u002Fdoctor`**. This is not optional. It validates:\n- memory structure integrity\n- no overlapping file\u002Ffolder paths\n- prompt hygiene\n- block size sanity\n\nIf \u002Fdoctor flags issues, fix them before declaring the import complete.\n\n### 6. Transcript preservation\n\nTranscript preservation happens **during mining**, not as a separate step afterward. When you or a subagent encounter a high-signal conversation, store it immediately — don't queue it up as a question for later.\n\n**Anti-pattern:** Do not collect transcript candidates during mining and then present them as a menu (\"Which transcripts do you want me to export?\"). This forces the user to make decisions about conversations they haven't read. Instead, store high-signal transcripts as you find them, mention what you stored in your progress narration, and move on. The user can always delete what they don't want — that's easier than re-mining what wasn't stored.\n\n#### Store automatically (don't ask)\n\nPreserve a conversation when it contains:\n- **Career transitions or major life decisions** — role changes, company moves, pivots. These are the user's own narration of their trajectory and are rarely redundant with memory blocks.\n- **Deep technical design discussions** — architecture decisions, system design, research methodology. The nuance matters and can't be distilled to a bullet point.\n- **Detailed project context** — goals, constraints, collaborators, timelines for projects the user worked on seriously.\n- **Explicit preference statements in context** — not just \"be direct\" but the full exchange where they explained *why* and *when* they want directness.\n\nFor these, **summarize** into a 2–5 paragraph reference file at `reference\u002Fchatgpt\u002Ftranscripts\u002FNNN-slug.md`. Include a frontmatter description so the file is discoverable. Only use verbatim export when fidelity genuinely matters (exact decisions, nuanced technical context where summarizing would lose signal).\n\n#### Ask before storing\n\n- Conversations focused on health\u002Fmental health specifics, intimate relationship dynamics, or financial details\n- Conversations where the signal is genuinely ambiguous (might be useful, might be noise)\n\n#### Don't store\n\n- Conversations already fully captured by memory blocks\n- One-off tasks with no durable context\n- Conversations that are mostly assistant output with little user input\n\n#### How subagents handle transcripts\n\nSubagents should store transcripts during their mining pass, not report candidates back. The subagent prompt already assigns them `reference\u002Fchatgpt\u002Ftranscripts\u002F` as a write target. When a subagent encounters a high-signal conversation in its chunk, it should:\n1. Write a summarized reference file to `reference\u002Fchatgpt\u002Ftranscripts\u002FNNN-title-slug.md`\n2. Note in its chunk summary that it preserved the transcript and why\n3. Continue mining\n\nThe primary agent does **not** need to approve each transcript. The subagent's judgment is sufficient for the \"store automatically\" category above.\n\n#### Bulk archival export\n\nFor users who want maximum fidelity or a complete archival copy, use `export-transcripts.py`:\n\n```bash\npython3 scripts\u002Fexport-transcripts.py \u003Cexport.zip> \\\n  --indexes 229,288 \\\n  --output-dir \u002Ftmp\u002Fchatgpt-transcripts \\\n  --skip-empty-hidden \\\n  --compact-nontext\n```\n\nThis is a separate archival feature, not the default. Most imports should use the selective summarization pattern above.\n\n## Hidden context to watch for\n\nRecent ChatGPT exports often contain the clearest explicit memory in hidden system\u002Fcontext messages.\n\nHigh-signal fields:\n- `metadata.user_context_message_data.about_user_message`\n- `metadata.user_context_message_data.about_model_message`\n- `content.user_profile` from `user_editable_context`\n- `content.user_instructions` from `user_editable_context`\n\nImportant distinctions:\n- the same saved-memory block may repeat across many conversations\n- some hidden messages are runtime execution context, not durable memory\n- account metadata from `user.json` \u002F `user_settings.json` is usually audit material, not active memory (note: no script currently extracts from these files — inspect manually if needed)\n\nExamples of runtime-only context:\n- current date\n- current timezone\n- current location\n- temporary recency instructions tied to a specific export moment\n\nExamples of durable collaboration context:\n- directness \u002F brevity preferences\n- formatting preferences\n- search-first instructions for current events\n- anti-sycophancy or anti-pedantry preferences\n\n## What belongs where\n\n### Active memory\n\nGood candidates:\n- stable identity facts\n- current role \u002F recurring project context\n- durable response preferences\n- durable collaboration preferences\n- long-lived tool\u002Fworkflow preferences\n\n### Progressive memory\n\nGood candidates:\n- historical roles or project arcs\n- previous versions of ChatGPT saved memory\n- older but still useful background context\n- selected transcript exports for fidelity \u002F auditability\n\n### Store by default\n\nPersonal details are part of knowing the user. Store them:\n- family members' names, pets, hobbies, interests\n- life circumstances, where they live, background\n- personality traits, communication style\n- personal projects, side interests, goals\n- relationship status, partner's name (the fact of it, not the dynamics)\n\nThe user imported their ChatGPT memory because they want to be known. Don't exclude context they expected the agent to have.\n\n### Ask before storing\n\nStop and confirm only for material with real consequences if mishandled:\n- **Health\u002Fmental health specifics** — diagnosis, medication, treatment details (not \"handle sensitively\" flags, which are fine to store)\n- **Intimate relationship dynamics** — not \"has a partner named X\" but conflict details, emotional specifics\n- **Financial specifics** — debt, income, specific amounts\n- **Contradictions** where the current truth is unclear\n\nThe intake question about sensitivity (\"anything I should avoid storing?\") is the user's chance to set boundaries. If they don't flag anything, store personal details by default.\n\n## Parallel mining with subagents\n\nFor archives of **50+ conversations**, use chunk-based parallel mining instead of processing everything sequentially. This is the default enrichment strategy for non-trivial archives.\n\n### How it works\n\n1. **Primary agent** handles the explicit saved-memory clone (steps 0–3 of the workflow)\n2. **Primary agent** partitions the remaining archive into chunks of ~30–50 conversations\n3. **Primary agent** dispatches one `general-purpose` subagent per chunk\n4. **Each subagent**:\n   - Renders its assigned conversations using `render-range.py` or individual `render-conversation.py` calls\n   - Extracts durable facts, preferences, project context, and retractions\n   - Writes findings directly to its assigned memory path (e.g. `reference\u002Fchatgpt\u002Fmining\u002Fchunk-NNN.md`)\n   - May write curated transcripts to `reference\u002Fchatgpt\u002Ftranscripts\u002F` if warranted\n   - Returns a summary separating safe-to-promote and proposal-only findings\n5. **Primary agent**:\n   - Reads all chunk summaries from `reference\u002Fchatgpt\u002Fmining\u002F`\n   - Merges high-confidence findings into `system\u002Fhuman.md`\n   - Resolves contradictions across chunks\n   - Runs `\u002Fdoctor` to validate the resulting memory structure\n\n### Subagent design rules\n\n- **Give each subagent the full script paths** — they don't inherit your skill knowledge\n- **Limit scope to 30–50 conversations per subagent** — more risks context overflow or timeouts\n- **Use `general-purpose` subagent type** — these subagents need to run scripts via Bash\n- **Partition output paths up front** — each subagent owns a non-overlapping destination\n- **Allow direct progressive-memory writes** — subagents write to `reference\u002Fchatgpt\u002Fmining\u002Fchunk-NNN.md` and `reference\u002Fchatgpt\u002Ftranscripts\u002F` directly\n- **Keep active-memory writes coordinated** — only the primary agent merges into `system\u002Fhuman.md` \u002F `system\u002Fpersona.md`\n- **Subagents must not modify existing memory files** — they create new files only (`reference\u002Fchatgpt\u002Fmining\u002Fchunk-NNN.md`, `reference\u002Fchatgpt\u002Ftranscripts\u002FNNN-slug.md`). They must never read, edit, or overwrite anything in `system\u002F` or any pre-existing file in `reference\u002F`\n- **Always provide a fallback plan** — if a subagent fails, mine its chunk directly using `list-conversations.py --title-contains` followed by targeted `render-conversation.py` calls\n\n### Subagent prompt template\n\nKeep it compact. The subagent needs: export path, script paths, chunk range, output paths, and what to extract. Everything else is overhead.\n\n```\nMine conversations [START]-[END] from [EXPORT_PATH] for durable memory.\n\nRender: python3 [SCRIPTS_DIR]\u002Frender-range.py \"[EXPORT_PATH]\" --start-index [START] --end-index [END] --output-dir \u002Ftmp\u002Fchatgpt-chunk-[N] --skip-empty-hidden --compact-nontext --skip-thoughts --progress\n\nRead each rendered conversation. Extract: user facts, project\u002Fwork context, collaboration preferences, explicit retractions (\"forget this\", \"no longer\", \"not doing\").\n\nWrite findings to [MEMORY_DIR]\u002Freference\u002Fchatgpt\u002Fmining\u002Fchunk-[NNN].md with sections:\n- Safe to promote (high-confidence, explicit, current, low-sensitivity)\n- Proposal only (historical, uncertain, sensitive, contradictory)\n- Retractions (older context the user said to forget)\n\nHigh-signal conversations (career transitions, deep technical design, detailed project context, explicit preference discussions) → summarize into [MEMORY_DIR]\u002Freference\u002Fchatgpt\u002Ftranscripts\u002FNNN-title-slug.md. Do this during mining, not after. Use 2-5 paragraph summaries, not verbatim transcripts. Include frontmatter with a description.\n\nIMPORTANT: Only create NEW files. Do not read, edit, or overwrite any existing files in the memory directory. Do not touch system\u002F.\n```\n\n### When subagents fail\n\nSubagents can fail silently due to timeouts or context limits. If a mining subagent fails:\n1. Don't retry with the same broad scope\n2. Use `list-conversations.py --title-contains` directly to find relevant conversations\n3. Render 3–5 of the highest-signal ones yourself\n4. Extract what you can — partial coverage is fine\n\n## Scripts\n\n### `scripts\u002Flist-conversations.py`\n\nUse for archive inventory.\n\nKey features:\n- list by global index\n- sort by hidden-context count\n- filter with `--min-hidden`\n- emit JSON for agent workflows\n\n### `scripts\u002Fextract-saved-memory.py`\n\nUse when you need the raw extraction JSON (e.g. for subagent dispatch or audit).\n\nIt extracts and deduplicates:\n- `about_user_message`\n- `about_model_message`\n- `user_profile`\n- `user_instructions`\n\nIt also reports first\u002Flast seen timestamps and source samples.\n\nSupports:\n- `--json`\n- `--output`\n- `--progress`\n\n### `scripts\u002Fbuild-memory-preview.py`\n\nThe primary extraction + categorisation tool. Accepts either a zip file (runs extraction internally) or the JSON output from `extract-saved-memory.py`.\n\nIt separates:\n- likely active-memory candidates\n- historical\u002Fprogressive-memory candidates\n- runtime-only context\n- contradictions \u002F review items\n\nSupports:\n- `--json`\n- `--output`\n- `--progress`\n- Direct zip input (one-step: extract + preview)\n- JSON input (two-step: preview from existing extraction)\n\n### `scripts\u002Frender-conversation.py`\n\nUse for deep review of one conversation. Efficiently streams to the target conversation instead of loading the entire archive.\n\nUseful mining flags:\n- `--skip-thoughts`\n- `--skip-empty-tool-messages`\n- `--user-only`\n- `--assistant-only`\n\n### `scripts\u002Frender-range.py`\n\nUse for batch rendering during archive enrichment. Opens the zip once and renders all conversations in-process — no subprocess per conversation.\n\nSupports:\n- `--output-dir` (one file per conversation) or `--concat-output` (single file)\n- `--progress` (prints rendering progress to stderr)\n- Same noise-reduction flags as `render-conversation.py`\n\n### `scripts\u002Fsearch-conversations.py`\n\nUse when title search is not enough.\n\nGood fits:\n- stale-context \u002F retraction sweeps\n- finding buried project mentions inside generic titles\n- locating \"forget this\" \u002F \"not doing this anymore\" corrections\n- searching for specific phrases before choosing which conversations to render\n\nSupports:\n- `--role user|assistant|tool|system` — filter which message roles to search (repeatable)\n- `--progress` — print search progress to stderr\n- `--json`\n\n### `scripts\u002Fexport-transcripts.py`\n\nUse for optional high-fidelity archival exports.\n\nSupports:\n- selected indexes or ranges\n- transcript chunking\n- optional memory-style frontmatter\n- a generated transcript index file\n\n## Final user-facing summary\n\nAt the end of a run, lead with a **narrative snapshot** — a short, natural-language paragraph of what you now know about the user. This is more engaging than a categorical list and lets the user immediately see whether the import landed correctly.\n\nThen follow with the structured breakdown:\n\n1. **Snapshot** — \"Here's what I know about you now\" in 3–5 sentences, written as if you're introducing yourself to future-you\n2. **What ChatGPT explicitly remembered** — the raw saved-memory fields\n3. **What got cloned into active Letta memory** — what's now in `system\u002F`\n4. **What was preserved as progressive memory** — what's in `reference\u002Fchatgpt\u002F`\n5. **What was excluded and why**\n6. **What still needs confirmation**\n7. **Results of the \u002Fdoctor validation**\n8. **Rollback info** — start commit, end commit, and how to undo: \"If you want to undo the import, I can reset your memory to `\u003Cstart-commit>`.\"\n\nThe snapshot is the part the user actually reads. The rollback info is the safety net.\n\n## Export structure reference\n\nA ChatGPT export zip typically contains:\n- `conversations-000.json`, `conversations-001.json`, etc. (sharded conversation history)\n- `shared_conversations.json`\n- `user.json`, `user_settings.json` (account metadata — usually audit material, not active memory)\n- `export_manifest.json`\n- images, audio, and other attachments\n\nThe `mapping` field in each conversation is a graph, not a flat message array. The scripts handle this — you don't need to parse it manually.\n\nIf the user needs help obtaining their export: \u003Chttps:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F7260999-how-do-i-export-my-chatgpt-history-and-data>\n\n## References\n\n- `references\u002Fmemory-import-workflow.md` — condensed checklist for the import workflow\n",{"data":38,"body":39},{"name":4,"description":6,"license":29},{"type":40,"children":41},"root",[42,51,57,64,94,99,117,130,136,148,153,181,192,220,226,238,286,291,296,306,312,319,331,336,359,369,374,385,390,413,419,424,434,447,452,470,475,498,508,519,525,537,543,548,609,614,708,713,719,724,777,798,804,809,832,838,843,866,872,885,891,897,908,913,932,937,987,1000,1055,1068,1119,1125,1130,1258,1263,1281,1331,1337,1342,1446,1451,1490,1495,1538,1551,1599,1609,1615,1642,1660,1677,1718,1730,1740,1745,1750,1756,1766,1771,1777,1790,1795,1835,1840,1904,1922,1935,1941,1966,1979,1984,2012,2024,2036,2046,2079,2084,2090,2102,2138,2143,2149,2168,2177,2183,2188,2211,2217,2222,2245,2251,2263,2281,2286,2319,2339,2344,2398,2410,2416,2421,2579,2591,2597,2602,2615,2812,2817,2835,2840,2846,2862,2885,2890,2896,2908,2917,2923,2928,2984,3004,3010,3023,3029,3047,3053,3065,3089,3100,3106,3118,3212,3217,3223,3228,3233,3286,3291,3325,3330,3353,3358,3381,3387,3393,3398,3426,3432,3436,3459,3465,3470,3498,3503,3508,3513,3555,3560,3566,3578,3584,3740,3746,3900,3906,3911,3920,3926,3931,3960,3966,3976,3981,3986,4015,4025,4030,4035,4070,4075,4080,4108,4118,4129,4134,4157,4161,4198,4208,4213,4218,4257,4267,4272,4276,4318,4328,4333,4338,4361,4365,4397,4407,4412,4416,4439,4445,4457,4462,4557,4562,4568,4573,4633,4646,4659,4665,4679],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"cloning-chatgpt-memory-into-letta",[48],{"type":49,"value":50},"text","Cloning ChatGPT Memory into Letta",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55],{"type":49,"value":56},"Use this skill when a user wants Letta to inherit ChatGPT memory as faithfully as possible without blindly importing an entire export.",{"type":43,"tag":58,"props":59,"children":61},"h2",{"id":60},"good-fits",[62],{"type":49,"value":63},"Good fits",{"type":43,"tag":65,"props":66,"children":67},"ul",{},[68,74,79,84,89],{"type":43,"tag":69,"props":70,"children":71},"li",{},[72],{"type":49,"value":73},"clone my ChatGPT memory into Letta",{"type":43,"tag":69,"props":75,"children":76},{},[77],{"type":49,"value":78},"inspect hidden saved profile \u002F custom-instruction context",{"type":43,"tag":69,"props":80,"children":81},{},[82],{"type":49,"value":83},"migrate ChatGPT memory into active Letta memory",{"type":43,"tag":69,"props":85,"children":86},{},[87],{"type":49,"value":88},"enrich the clone with work context or collaboration preferences from old chats",{"type":43,"tag":69,"props":90,"children":91},{},[92],{"type":49,"value":93},"preserve selected transcripts for high-fidelity audit\u002Freference",{"type":43,"tag":52,"props":95,"children":96},{},[97],{"type":49,"value":98},"The skill should work well even when the user says something minimal like:",{"type":43,"tag":65,"props":100,"children":101},{},[102,107,112],{"type":43,"tag":69,"props":103,"children":104},{},[105],{"type":49,"value":106},"\"I want to import my ChatGPT memory\"",{"type":43,"tag":69,"props":108,"children":109},{},[110],{"type":49,"value":111},"\"Can you clone my ChatGPT memory into Letta?\"",{"type":43,"tag":69,"props":113,"children":114},{},[115],{"type":49,"value":116},"\"Import my ChatGPT export\"",{"type":43,"tag":52,"props":118,"children":119},{},[120,122,128],{"type":49,"value":121},"Do ",{"type":43,"tag":123,"props":124,"children":125},"strong",{},[126],{"type":49,"value":127},"not",{"type":49,"value":129}," depend on the user writing an optimized prompt.",{"type":43,"tag":58,"props":131,"children":133},{"id":132},"scope",[134],{"type":49,"value":135},"Scope",{"type":43,"tag":52,"props":137,"children":138},{},[139,141,146],{"type":49,"value":140},"This skill is for ",{"type":43,"tag":123,"props":142,"children":143},{},[144],{"type":49,"value":145},"memory onboarding",{"type":49,"value":147},", not just transcript rendering.",{"type":43,"tag":52,"props":149,"children":150},{},[151],{"type":49,"value":152},"It should:",{"type":43,"tag":65,"props":154,"children":155},{},[156,161,166,171,176],{"type":43,"tag":69,"props":157,"children":158},{},[159],{"type":49,"value":160},"extract ChatGPT saved memory and editable-context blocks first",{"type":43,"tag":69,"props":162,"children":163},{},[164],{"type":49,"value":165},"build a Letta-oriented preview of what should become active vs progressive memory",{"type":43,"tag":69,"props":167,"children":168},{},[169],{"type":49,"value":170},"write obvious, high-confidence items while narrating progress",{"type":43,"tag":69,"props":172,"children":173},{},[174],{"type":49,"value":175},"optionally enrich from the broader archive afterward",{"type":43,"tag":69,"props":177,"children":178},{},[179],{"type":49,"value":180},"optionally export transcripts for high-fidelity archival",{"type":43,"tag":52,"props":182,"children":183},{},[184,186,190],{"type":49,"value":185},"It should ",{"type":43,"tag":123,"props":187,"children":188},{},[189],{"type":49,"value":127},{"type":49,"value":191},":",{"type":43,"tag":65,"props":193,"children":194},{},[195,200,205,210,215],{"type":43,"tag":69,"props":196,"children":197},{},[198],{"type":49,"value":199},"blindly import the whole archive",{"type":43,"tag":69,"props":201,"children":202},{},[203],{"type":49,"value":204},"treat runtime context as durable memory",{"type":43,"tag":69,"props":206,"children":207},{},[208],{"type":49,"value":209},"flatten historical context into always-visible memory by default",{"type":43,"tag":69,"props":211,"children":212},{},[213],{"type":49,"value":214},"auto-store sensitive personal material without confirmation",{"type":43,"tag":69,"props":216,"children":217},{},[218],{"type":49,"value":219},"write memory into a malformed MemFS structure",{"type":43,"tag":58,"props":221,"children":223},{"id":222},"default-posture",[224],{"type":49,"value":225},"Default posture",{"type":43,"tag":52,"props":227,"children":228},{},[229,231,236],{"type":49,"value":230},"Use a ",{"type":43,"tag":123,"props":232,"children":233},{},[234],{"type":49,"value":235},"clone first, enrich second",{"type":49,"value":237}," workflow.",{"type":43,"tag":239,"props":240,"children":241},"ol",{},[242,247,252,257,262,267,272],{"type":43,"tag":69,"props":243,"children":244},{},[245],{"type":49,"value":246},"ask a short structured intake",{"type":43,"tag":69,"props":248,"children":249},{},[250],{"type":49,"value":251},"inspect the export",{"type":43,"tag":69,"props":253,"children":254},{},[255],{"type":49,"value":256},"extract and preview in one step",{"type":43,"tag":69,"props":258,"children":259},{},[260],{"type":49,"value":261},"write obvious high-confidence items while learning",{"type":43,"tag":69,"props":263,"children":264},{},[265],{"type":49,"value":266},"continue into archive enrichment if scoped — narrate progress, let the user interrupt",{"type":43,"tag":69,"props":268,"children":269},{},[270],{"type":49,"value":271},"ask only at meaningful checkpoints",{"type":43,"tag":69,"props":273,"children":274},{},[275,277,284],{"type":49,"value":276},"run ",{"type":43,"tag":278,"props":279,"children":281},"code",{"className":280},[],[282],{"type":49,"value":283},"\u002Fdoctor",{"type":49,"value":285}," to validate the final memory structure",{"type":43,"tag":52,"props":287,"children":288},{},[289],{"type":49,"value":290},"Users should feel like they are being guided through an onboarding flow, not dropped into a bag of scripts.",{"type":43,"tag":52,"props":292,"children":293},{},[294],{"type":49,"value":295},"The onboarding should be robust to sparse user input. The agent should supply the structure, not ask the user to craft a better request.",{"type":43,"tag":52,"props":297,"children":298},{},[299,304],{"type":43,"tag":123,"props":300,"children":301},{},[302],{"type":49,"value":303},"This skill is a workflow, not reference material.",{"type":49,"value":305}," Follow the numbered steps in order. Read the guidance for each step before executing it — especially the merge rules and write targets. Moving fast is good; skipping steps is not. \"Autonomous\" means you drive the process without stopping for permission, not that you skip the instructions.",{"type":43,"tag":58,"props":307,"children":309},{"id":308},"interaction-style",[310],{"type":49,"value":311},"Interaction style",{"type":43,"tag":313,"props":314,"children":316},"h3",{"id":315},"start-with-a-short-dialog",[317],{"type":49,"value":318},"Start with a short dialog",{"type":43,"tag":52,"props":320,"children":321},{},[322,324,329],{"type":49,"value":323},"When available, prefer the structured ",{"type":43,"tag":123,"props":325,"children":326},{},[327],{"type":49,"value":328},"AskUserQuestion",{"type":49,"value":330}," flow so the import feels like a dialog.",{"type":43,"tag":52,"props":332,"children":333},{},[334],{"type":49,"value":335},"Good question types:",{"type":43,"tag":65,"props":337,"children":338},{},[339,344,349,354],{"type":43,"tag":69,"props":340,"children":341},{},[342],{"type":49,"value":343},"export location (if not obvious)",{"type":43,"tag":69,"props":345,"children":346},{},[347],{"type":49,"value":348},"import scope (saved memory only, memory + work context, full history mining)",{"type":43,"tag":69,"props":350,"children":351},{},[352],{"type":49,"value":353},"topic focus: \"Any specific projects or topics you want me to look for?\"",{"type":43,"tag":69,"props":355,"children":356},{},[357],{"type":49,"value":358},"sensitivity: \"Anything I should avoid storing?\"",{"type":43,"tag":52,"props":360,"children":361},{},[362,363,367],{"type":49,"value":121},{"type":43,"tag":123,"props":364,"children":365},{},[366],{"type":49,"value":127},{"type":49,"value":368}," ask about review cadence. Most users don't have a strong preference, and the ones who do will say so. Default to keeping going — narrate what you're doing and let the user interrupt if they want to pause. This keeps the flow moving instead of creating a false checkpoint.",{"type":43,"tag":52,"props":370,"children":371},{},[372],{"type":49,"value":373},"Avoid questions that don't actually change the workflow. For example, \"how do you want historical context handled?\" sounds meaningful but the answer rarely changes what scripts you run. Focus on questions whose answers fork the process.",{"type":43,"tag":52,"props":375,"children":376},{},[377,379,383],{"type":49,"value":378},"This intake exists so the user does ",{"type":43,"tag":123,"props":380,"children":381},{},[382],{"type":49,"value":127},{"type":49,"value":384}," need to front-load all of this context in their first message.",{"type":43,"tag":52,"props":386,"children":387},{},[388],{"type":49,"value":389},"Use:",{"type":43,"tag":65,"props":391,"children":392},{},[393,403],{"type":43,"tag":69,"props":394,"children":395},{},[396,401],{"type":43,"tag":123,"props":397,"children":398},{},[399],{"type":49,"value":400},"single-choice",{"type":49,"value":402}," for policy decisions",{"type":43,"tag":69,"props":404,"children":405},{},[406,411],{"type":43,"tag":123,"props":407,"children":408},{},[409],{"type":49,"value":410},"multi-select",{"type":49,"value":412}," for scope selection",{"type":43,"tag":313,"props":414,"children":416},{"id":415},"after-intake-drive-the-process",[417],{"type":49,"value":418},"After intake, drive the process",{"type":43,"tag":52,"props":420,"children":421},{},[422],{"type":49,"value":423},"Once scope is clear, be more authoritative than permissive.",{"type":43,"tag":52,"props":425,"children":426},{},[427,428,432],{"type":49,"value":121},{"type":43,"tag":123,"props":429,"children":430},{},[431],{"type":49,"value":127},{"type":49,"value":433}," keep returning with vague prompts like:",{"type":43,"tag":65,"props":435,"children":436},{},[437,442],{"type":43,"tag":69,"props":438,"children":439},{},[440],{"type":49,"value":441},"\"what do you want me to do next?\"",{"type":43,"tag":69,"props":443,"children":444},{},[445],{"type":49,"value":446},"\"should I keep going?\"",{"type":43,"tag":52,"props":448,"children":449},{},[450],{"type":49,"value":451},"Instead:",{"type":43,"tag":239,"props":453,"children":454},{},[455,460,465],{"type":43,"tag":69,"props":456,"children":457},{},[458],{"type":49,"value":459},"say what you wrote",{"type":43,"tag":69,"props":461,"children":462},{},[463],{"type":49,"value":464},"say what you are reviewing next",{"type":43,"tag":69,"props":466,"children":467},{},[468],{"type":49,"value":469},"continue automatically",{"type":43,"tag":52,"props":471,"children":472},{},[473],{"type":49,"value":474},"Only stop for:",{"type":43,"tag":65,"props":476,"children":477},{},[478,483,488,493],{"type":43,"tag":69,"props":479,"children":480},{},[481],{"type":49,"value":482},"contradictory facts",{"type":43,"tag":69,"props":484,"children":485},{},[486],{"type":49,"value":487},"sensitive\u002Fintimate material",{"type":43,"tag":69,"props":489,"children":490},{},[491],{"type":49,"value":492},"major scope changes",{"type":43,"tag":69,"props":494,"children":495},{},[496],{"type":49,"value":497},"real uncertainty about what counts as durable memory",{"type":43,"tag":52,"props":499,"children":500},{},[501,502,506],{"type":49,"value":121},{"type":43,"tag":123,"props":503,"children":504},{},[505],{"type":49,"value":127},{"type":49,"value":507}," stop for low-risk routing decisions once the user's scope is already broad and clear.",{"type":43,"tag":52,"props":509,"children":510},{},[511,513,517],{"type":49,"value":512},"Also do ",{"type":43,"tag":123,"props":514,"children":515},{},[516],{"type":49,"value":127},{"type":49,"value":518}," respond by teaching the user how they should have phrased the request. Just run the onboarding properly.",{"type":43,"tag":58,"props":520,"children":522},{"id":521},"progress-tracking",[523],{"type":49,"value":524},"Progress tracking",{"type":43,"tag":52,"props":526,"children":527},{},[528,530,535],{"type":49,"value":529},"This import can take multiple minutes for large archives. ",{"type":43,"tag":123,"props":531,"children":532},{},[533],{"type":49,"value":534},"Never let the user sit in silence.",{"type":49,"value":536}," The import should feel like a guided, living process.",{"type":43,"tag":313,"props":538,"children":540},{"id":539},"record-the-starting-commit",[541],{"type":49,"value":542},"Record the starting commit",{"type":43,"tag":52,"props":544,"children":545},{},[546],{"type":49,"value":547},"Before writing any memory, record the current HEAD of the memory repo:",{"type":43,"tag":549,"props":550,"children":555},"pre",{"className":551,"code":552,"language":553,"meta":554,"style":554},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git -C \"$MEMORY_DIR\" log --oneline -1\n","bash","",[556],{"type":43,"tag":278,"props":557,"children":558},{"__ignoreMap":554},[559],{"type":43,"tag":560,"props":561,"children":564},"span",{"class":562,"line":563},"line",1,[565,571,577,583,589,594,599,604],{"type":43,"tag":560,"props":566,"children":568},{"style":567},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[569],{"type":49,"value":570},"git",{"type":43,"tag":560,"props":572,"children":574},{"style":573},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[575],{"type":49,"value":576}," -C",{"type":43,"tag":560,"props":578,"children":580},{"style":579},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[581],{"type":49,"value":582}," \"",{"type":43,"tag":560,"props":584,"children":586},{"style":585},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[587],{"type":49,"value":588},"$MEMORY_DIR",{"type":43,"tag":560,"props":590,"children":591},{"style":579},[592],{"type":49,"value":593},"\"",{"type":43,"tag":560,"props":595,"children":596},{"style":573},[597],{"type":49,"value":598}," log",{"type":43,"tag":560,"props":600,"children":601},{"style":573},[602],{"type":49,"value":603}," --oneline",{"type":43,"tag":560,"props":605,"children":606},{"style":573},[607],{"type":49,"value":608}," -1\n",{"type":43,"tag":52,"props":610,"children":611},{},[612],{"type":49,"value":613},"Save this commit hash — it's the rollback point. If anything goes wrong or the user wants to undo the import, they can reset to this commit:",{"type":43,"tag":549,"props":615,"children":617},{"className":551,"code":616,"language":553,"meta":554,"style":554},"git -C \"$MEMORY_DIR\" reset --hard \u003Cstart-commit>\ngit -C \"$MEMORY_DIR\" push --force\n",[618],{"type":43,"tag":278,"props":619,"children":620},{"__ignoreMap":554},[621,674],{"type":43,"tag":560,"props":622,"children":623},{"class":562,"line":563},[624,628,632,636,640,644,649,654,659,664,669],{"type":43,"tag":560,"props":625,"children":626},{"style":567},[627],{"type":49,"value":570},{"type":43,"tag":560,"props":629,"children":630},{"style":573},[631],{"type":49,"value":576},{"type":43,"tag":560,"props":633,"children":634},{"style":579},[635],{"type":49,"value":582},{"type":43,"tag":560,"props":637,"children":638},{"style":585},[639],{"type":49,"value":588},{"type":43,"tag":560,"props":641,"children":642},{"style":579},[643],{"type":49,"value":593},{"type":43,"tag":560,"props":645,"children":646},{"style":573},[647],{"type":49,"value":648}," reset",{"type":43,"tag":560,"props":650,"children":651},{"style":573},[652],{"type":49,"value":653}," --hard",{"type":43,"tag":560,"props":655,"children":656},{"style":579},[657],{"type":49,"value":658}," \u003C",{"type":43,"tag":560,"props":660,"children":661},{"style":573},[662],{"type":49,"value":663},"start-commi",{"type":43,"tag":560,"props":665,"children":666},{"style":585},[667],{"type":49,"value":668},"t",{"type":43,"tag":560,"props":670,"children":671},{"style":579},[672],{"type":49,"value":673},">\n",{"type":43,"tag":560,"props":675,"children":677},{"class":562,"line":676},2,[678,682,686,690,694,698,703],{"type":43,"tag":560,"props":679,"children":680},{"style":567},[681],{"type":49,"value":570},{"type":43,"tag":560,"props":683,"children":684},{"style":573},[685],{"type":49,"value":576},{"type":43,"tag":560,"props":687,"children":688},{"style":579},[689],{"type":49,"value":582},{"type":43,"tag":560,"props":691,"children":692},{"style":585},[693],{"type":49,"value":588},{"type":43,"tag":560,"props":695,"children":696},{"style":579},[697],{"type":49,"value":593},{"type":43,"tag":560,"props":699,"children":700},{"style":573},[701],{"type":49,"value":702}," push",{"type":43,"tag":560,"props":704,"children":705},{"style":573},[706],{"type":49,"value":707}," --force\n",{"type":43,"tag":52,"props":709,"children":710},{},[711],{"type":49,"value":712},"Include both the start and end commit hashes in the import audit file and in the final summary. Tell the user explicitly: \"If you want to undo any of this, I can reset your memory to where it was before the import.\"",{"type":43,"tag":313,"props":714,"children":716},{"id":715},"use-todowrite-for-phases",[717],{"type":49,"value":718},"Use TodoWrite for phases",{"type":43,"tag":52,"props":720,"children":721},{},[722],{"type":49,"value":723},"Create a todo list at the start of the import and update it as you go:",{"type":43,"tag":239,"props":725,"children":726},{},[727,732,737,742,755,767,772],{"type":43,"tag":69,"props":728,"children":729},{},[730],{"type":49,"value":731},"Record starting commit",{"type":43,"tag":69,"props":733,"children":734},{},[735],{"type":49,"value":736},"Locate export and run inventory",{"type":43,"tag":69,"props":738,"children":739},{},[740],{"type":49,"value":741},"Extract and preview saved memory",{"type":43,"tag":69,"props":743,"children":744},{},[745,747,753],{"type":49,"value":746},"Write active memory (",{"type":43,"tag":278,"props":748,"children":750},{"className":749},[],[751],{"type":49,"value":752},"system\u002Fhuman.md",{"type":49,"value":754},")",{"type":43,"tag":69,"props":756,"children":757},{},[758,760,766],{"type":49,"value":759},"Write import audit + progressive memory (",{"type":43,"tag":278,"props":761,"children":763},{"className":762},[],[764],{"type":49,"value":765},"reference\u002Fchatgpt\u002F",{"type":49,"value":754},{"type":43,"tag":69,"props":768,"children":769},{},[770],{"type":49,"value":771},"Archive enrichment (if scoped)",{"type":43,"tag":69,"props":773,"children":774},{},[775],{"type":49,"value":776},"Validate with \u002Fdoctor",{"type":43,"tag":52,"props":778,"children":779},{},[780,782,788,790,796],{"type":49,"value":781},"Mark each phase ",{"type":43,"tag":278,"props":783,"children":785},{"className":784},[],[786],{"type":49,"value":787},"in_progress",{"type":49,"value":789}," before starting and ",{"type":43,"tag":278,"props":791,"children":793},{"className":792},[],[794],{"type":49,"value":795},"completed",{"type":49,"value":797}," when done.",{"type":43,"tag":313,"props":799,"children":801},{"id":800},"narrate-between-script-calls",[802],{"type":49,"value":803},"Narrate between script calls",{"type":43,"tag":52,"props":805,"children":806},{},[807],{"type":49,"value":808},"After each script completes, tell the user what you found before running the next one:",{"type":43,"tag":65,"props":810,"children":811},{},[812,817,822,827],{"type":43,"tag":69,"props":813,"children":814},{},[815],{"type":49,"value":816},"\"Found 347 conversations spanning 2023–2026. Extracting saved memory now...\"",{"type":43,"tag":69,"props":818,"children":819},{},[820],{"type":49,"value":821},"\"ChatGPT remembered 12 facts about you across 4 fields. Building the preview...\"",{"type":43,"tag":69,"props":823,"children":824},{},[825],{"type":49,"value":826},"\"Writing 8 high-confidence items to active memory. Next: archive enrichment...\"",{"type":43,"tag":69,"props":828,"children":829},{},[830],{"type":49,"value":831},"\"Dispatching 4 mining agents across 200 conversations...\"",{"type":43,"tag":313,"props":833,"children":835},{"id":834},"report-stats",[836],{"type":49,"value":837},"Report stats",{"type":43,"tag":52,"props":839,"children":840},{},[841],{"type":49,"value":842},"Surface concrete numbers whenever you have them:",{"type":43,"tag":65,"props":844,"children":845},{},[846,851,856,861],{"type":43,"tag":69,"props":847,"children":848},{},[849],{"type":49,"value":850},"total conversation count",{"type":43,"tag":69,"props":852,"children":853},{},[854],{"type":49,"value":855},"saved-memory field counts",{"type":43,"tag":69,"props":857,"children":858},{},[859],{"type":49,"value":860},"how many items written vs held for review",{"type":43,"tag":69,"props":862,"children":863},{},[864],{"type":49,"value":865},"mining progress (conversations scanned, findings per chunk)",{"type":43,"tag":313,"props":867,"children":869},{"id":868},"use-progress-on-scripts",[870],{"type":49,"value":871},"Use --progress on scripts",{"type":43,"tag":52,"props":873,"children":874},{},[875,877,883],{"type":49,"value":876},"All long-running scripts support ",{"type":43,"tag":278,"props":878,"children":880},{"className":879},[],[881],{"type":49,"value":882},"--progress",{"type":49,"value":884}," which prints status to stderr. Use it for large archives so the user sees work happening even during script execution.",{"type":43,"tag":58,"props":886,"children":888},{"id":887},"workflow",[889],{"type":49,"value":890},"Workflow",{"type":43,"tag":313,"props":892,"children":894},{"id":893},"_0-locate-the-export",[895],{"type":49,"value":896},"0. Locate the export",{"type":43,"tag":52,"props":898,"children":899},{},[900,902],{"type":49,"value":901},"ChatGPT exports are typically named with a long hash and timestamp, e.g.:\n",{"type":43,"tag":278,"props":903,"children":905},{"className":904},[],[906],{"type":49,"value":907},"8a8f3ee0...-2026-03-31-18-41-51-e0dc362a....zip",{"type":43,"tag":52,"props":909,"children":910},{},[911],{"type":49,"value":912},"Common locations:",{"type":43,"tag":65,"props":914,"children":915},{},[916,927],{"type":43,"tag":69,"props":917,"children":918},{},[919,925],{"type":43,"tag":278,"props":920,"children":922},{"className":921},[],[923],{"type":49,"value":924},"~\u002FDownloads\u002F",{"type":49,"value":926}," (most common — this is where the browser saves it)",{"type":43,"tag":69,"props":928,"children":929},{},[930],{"type":49,"value":931},"Desktop or a custom export folder",{"type":43,"tag":52,"props":933,"children":934},{},[935],{"type":49,"value":936},"If the user doesn't know the exact path, glob for zip files in Downloads:",{"type":43,"tag":549,"props":938,"children":940},{"className":551,"code":939,"language":553,"meta":554,"style":554},"ls -t ~\u002FDownloads\u002F*.zip | head -20\n",[941],{"type":43,"tag":278,"props":942,"children":943},{"__ignoreMap":554},[944],{"type":43,"tag":560,"props":945,"children":946},{"class":562,"line":563},[947,952,957,962,967,972,977,982],{"type":43,"tag":560,"props":948,"children":949},{"style":567},[950],{"type":49,"value":951},"ls",{"type":43,"tag":560,"props":953,"children":954},{"style":573},[955],{"type":49,"value":956}," -t",{"type":43,"tag":560,"props":958,"children":959},{"style":573},[960],{"type":49,"value":961}," ~\u002FDownloads\u002F",{"type":43,"tag":560,"props":963,"children":964},{"style":585},[965],{"type":49,"value":966},"*",{"type":43,"tag":560,"props":968,"children":969},{"style":573},[970],{"type":49,"value":971},".zip",{"type":43,"tag":560,"props":973,"children":974},{"style":579},[975],{"type":49,"value":976}," |",{"type":43,"tag":560,"props":978,"children":979},{"style":567},[980],{"type":49,"value":981}," head",{"type":43,"tag":560,"props":983,"children":984},{"style":573},[985],{"type":49,"value":986}," -20\n",{"type":43,"tag":52,"props":988,"children":989},{},[990,992,998],{"type":49,"value":991},"Downloads folders are often crowded. ChatGPT exports follow a distinctive pattern — look for filenames matching ",{"type":43,"tag":278,"props":993,"children":995},{"className":994},[],[996],{"type":49,"value":997},"[8+ hex chars]-YYYY-MM-DD-*",{"type":49,"value":999},". A quick filter:",{"type":43,"tag":549,"props":1001,"children":1003},{"className":551,"code":1002,"language":553,"meta":554,"style":554},"ls ~\u002FDownloads\u002F*.zip | grep -E '[0-9a-f]{8}.*-[0-9]{4}-[0-9]{2}-[0-9]{2}-'\n",[1004],{"type":43,"tag":278,"props":1005,"children":1006},{"__ignoreMap":554},[1007],{"type":43,"tag":560,"props":1008,"children":1009},{"class":562,"line":563},[1010,1014,1018,1022,1026,1030,1035,1040,1045,1050],{"type":43,"tag":560,"props":1011,"children":1012},{"style":567},[1013],{"type":49,"value":951},{"type":43,"tag":560,"props":1015,"children":1016},{"style":573},[1017],{"type":49,"value":961},{"type":43,"tag":560,"props":1019,"children":1020},{"style":585},[1021],{"type":49,"value":966},{"type":43,"tag":560,"props":1023,"children":1024},{"style":573},[1025],{"type":49,"value":971},{"type":43,"tag":560,"props":1027,"children":1028},{"style":579},[1029],{"type":49,"value":976},{"type":43,"tag":560,"props":1031,"children":1032},{"style":567},[1033],{"type":49,"value":1034}," grep",{"type":43,"tag":560,"props":1036,"children":1037},{"style":573},[1038],{"type":49,"value":1039}," -E",{"type":43,"tag":560,"props":1041,"children":1042},{"style":579},[1043],{"type":49,"value":1044}," '",{"type":43,"tag":560,"props":1046,"children":1047},{"style":573},[1048],{"type":49,"value":1049},"[0-9a-f]{8}.*-[0-9]{4}-[0-9]{2}-[0-9]{2}-",{"type":43,"tag":560,"props":1051,"children":1052},{"style":579},[1053],{"type":49,"value":1054},"'\n",{"type":43,"tag":52,"props":1056,"children":1057},{},[1058,1060,1066],{"type":49,"value":1059},"If still ambiguous, check whether the zip contains ",{"type":43,"tag":278,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":49,"value":1065},"conversations-*.json",{"type":49,"value":1067}," entries:",{"type":43,"tag":549,"props":1069,"children":1071},{"className":551,"code":1070,"language":553,"meta":554,"style":554},"unzip -l \u003Ccandidate.zip> | grep conversations-\n",[1072],{"type":43,"tag":278,"props":1073,"children":1074},{"__ignoreMap":554},[1075],{"type":43,"tag":560,"props":1076,"children":1077},{"class":562,"line":563},[1078,1083,1088,1092,1097,1101,1106,1110,1114],{"type":43,"tag":560,"props":1079,"children":1080},{"style":567},[1081],{"type":49,"value":1082},"unzip",{"type":43,"tag":560,"props":1084,"children":1085},{"style":573},[1086],{"type":49,"value":1087}," -l",{"type":43,"tag":560,"props":1089,"children":1090},{"style":579},[1091],{"type":49,"value":658},{"type":43,"tag":560,"props":1093,"children":1094},{"style":573},[1095],{"type":49,"value":1096},"candidate.zi",{"type":43,"tag":560,"props":1098,"children":1099},{"style":585},[1100],{"type":49,"value":52},{"type":43,"tag":560,"props":1102,"children":1103},{"style":579},[1104],{"type":49,"value":1105},">",{"type":43,"tag":560,"props":1107,"children":1108},{"style":579},[1109],{"type":49,"value":976},{"type":43,"tag":560,"props":1111,"children":1112},{"style":567},[1113],{"type":49,"value":1034},{"type":43,"tag":560,"props":1115,"children":1116},{"style":573},[1117],{"type":49,"value":1118}," conversations-\n",{"type":43,"tag":313,"props":1120,"children":1122},{"id":1121},"_1-inventory-the-export",[1123],{"type":49,"value":1124},"1. Inventory the export",{"type":43,"tag":52,"props":1126,"children":1127},{},[1128],{"type":49,"value":1129},"Start by listing conversations and surfacing hidden-context-heavy candidates.",{"type":43,"tag":549,"props":1131,"children":1133},{"className":551,"code":1132,"language":553,"meta":554,"style":554},"python3 scripts\u002Flist-conversations.py \u003Cexport.zip>\npython3 scripts\u002Flist-conversations.py \u003Cexport.zip> --sort hidden --min-hidden 1\npython3 scripts\u002Flist-conversations.py \u003Cexport.zip> --json --limit 50\n",[1134],{"type":43,"tag":278,"props":1135,"children":1136},{"__ignoreMap":554},[1137,1167,1215],{"type":43,"tag":560,"props":1138,"children":1139},{"class":562,"line":563},[1140,1145,1150,1154,1159,1163],{"type":43,"tag":560,"props":1141,"children":1142},{"style":567},[1143],{"type":49,"value":1144},"python3",{"type":43,"tag":560,"props":1146,"children":1147},{"style":573},[1148],{"type":49,"value":1149}," scripts\u002Flist-conversations.py",{"type":43,"tag":560,"props":1151,"children":1152},{"style":579},[1153],{"type":49,"value":658},{"type":43,"tag":560,"props":1155,"children":1156},{"style":573},[1157],{"type":49,"value":1158},"export.zi",{"type":43,"tag":560,"props":1160,"children":1161},{"style":585},[1162],{"type":49,"value":52},{"type":43,"tag":560,"props":1164,"children":1165},{"style":579},[1166],{"type":49,"value":673},{"type":43,"tag":560,"props":1168,"children":1169},{"class":562,"line":676},[1170,1174,1178,1182,1186,1190,1194,1199,1204,1209],{"type":43,"tag":560,"props":1171,"children":1172},{"style":567},[1173],{"type":49,"value":1144},{"type":43,"tag":560,"props":1175,"children":1176},{"style":573},[1177],{"type":49,"value":1149},{"type":43,"tag":560,"props":1179,"children":1180},{"style":579},[1181],{"type":49,"value":658},{"type":43,"tag":560,"props":1183,"children":1184},{"style":573},[1185],{"type":49,"value":1158},{"type":43,"tag":560,"props":1187,"children":1188},{"style":585},[1189],{"type":49,"value":52},{"type":43,"tag":560,"props":1191,"children":1192},{"style":579},[1193],{"type":49,"value":1105},{"type":43,"tag":560,"props":1195,"children":1196},{"style":573},[1197],{"type":49,"value":1198}," --sort",{"type":43,"tag":560,"props":1200,"children":1201},{"style":573},[1202],{"type":49,"value":1203}," hidden",{"type":43,"tag":560,"props":1205,"children":1206},{"style":573},[1207],{"type":49,"value":1208}," --min-hidden",{"type":43,"tag":560,"props":1210,"children":1212},{"style":1211},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1213],{"type":49,"value":1214}," 1\n",{"type":43,"tag":560,"props":1216,"children":1218},{"class":562,"line":1217},3,[1219,1223,1227,1231,1235,1239,1243,1248,1253],{"type":43,"tag":560,"props":1220,"children":1221},{"style":567},[1222],{"type":49,"value":1144},{"type":43,"tag":560,"props":1224,"children":1225},{"style":573},[1226],{"type":49,"value":1149},{"type":43,"tag":560,"props":1228,"children":1229},{"style":579},[1230],{"type":49,"value":658},{"type":43,"tag":560,"props":1232,"children":1233},{"style":573},[1234],{"type":49,"value":1158},{"type":43,"tag":560,"props":1236,"children":1237},{"style":585},[1238],{"type":49,"value":52},{"type":43,"tag":560,"props":1240,"children":1241},{"style":579},[1242],{"type":49,"value":1105},{"type":43,"tag":560,"props":1244,"children":1245},{"style":573},[1246],{"type":49,"value":1247}," --json",{"type":43,"tag":560,"props":1249,"children":1250},{"style":573},[1251],{"type":49,"value":1252}," --limit",{"type":43,"tag":560,"props":1254,"children":1255},{"style":1211},[1256],{"type":49,"value":1257}," 50\n",{"type":43,"tag":52,"props":1259,"children":1260},{},[1261],{"type":49,"value":1262},"Use this to understand scale, find likely memory-heavy conversations, and decide whether broader archive review is even necessary.",{"type":43,"tag":52,"props":1264,"children":1265},{},[1266,1271,1273,1279],{"type":43,"tag":123,"props":1267,"children":1268},{},[1269],{"type":49,"value":1270},"Warning:",{"type":49,"value":1272}," For large archives (300+ conversations), ",{"type":43,"tag":278,"props":1274,"children":1276},{"className":1275},[],[1277],{"type":49,"value":1278},"--json",{"type":49,"value":1280}," output can easily exceed 100K characters and flood your context window. Mitigations:",{"type":43,"tag":65,"props":1282,"children":1283},{},[1284,1303,1314,1326],{"type":43,"tag":69,"props":1285,"children":1286},{},[1287,1289,1295,1297],{"type":49,"value":1288},"Use ",{"type":43,"tag":278,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":49,"value":1294},"--limit 50",{"type":49,"value":1296}," to start — you can always paginate with ",{"type":43,"tag":278,"props":1298,"children":1300},{"className":1299},[],[1301],{"type":49,"value":1302},"--start-index",{"type":43,"tag":69,"props":1304,"children":1305},{},[1306,1308],{"type":49,"value":1307},"Pipe to a file and read selectively: ",{"type":43,"tag":278,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":49,"value":1313},"... --json > \u002Ftmp\u002Fconversations.json",{"type":43,"tag":69,"props":1315,"children":1316},{},[1317,1318,1324],{"type":49,"value":1288},{"type":43,"tag":278,"props":1319,"children":1321},{"className":1320},[],[1322],{"type":49,"value":1323},"--title-contains",{"type":49,"value":1325}," to filter before dumping JSON",{"type":43,"tag":69,"props":1327,"children":1328},{},[1329],{"type":49,"value":1330},"The non-JSON (table) output is much more compact for initial inventory",{"type":43,"tag":313,"props":1332,"children":1334},{"id":1333},"_2-extract-and-preview-in-one-step",[1335],{"type":49,"value":1336},"2. Extract and preview in one step",{"type":43,"tag":52,"props":1338,"children":1339},{},[1340],{"type":49,"value":1341},"Use the preview builder directly on the zip — it runs the extraction internally:",{"type":43,"tag":549,"props":1343,"children":1345},{"className":551,"code":1344,"language":553,"meta":554,"style":554},"python3 scripts\u002Fbuild-memory-preview.py \u003Cexport.zip>\npython3 scripts\u002Fbuild-memory-preview.py \u003Cexport.zip> --output \u002Ftmp\u002Fchatgpt-memory-preview.md\npython3 scripts\u002Fbuild-memory-preview.py \u003Cexport.zip> --progress\n",[1346],{"type":43,"tag":278,"props":1347,"children":1348},{"__ignoreMap":554},[1349,1377,1414],{"type":43,"tag":560,"props":1350,"children":1351},{"class":562,"line":563},[1352,1356,1361,1365,1369,1373],{"type":43,"tag":560,"props":1353,"children":1354},{"style":567},[1355],{"type":49,"value":1144},{"type":43,"tag":560,"props":1357,"children":1358},{"style":573},[1359],{"type":49,"value":1360}," scripts\u002Fbuild-memory-preview.py",{"type":43,"tag":560,"props":1362,"children":1363},{"style":579},[1364],{"type":49,"value":658},{"type":43,"tag":560,"props":1366,"children":1367},{"style":573},[1368],{"type":49,"value":1158},{"type":43,"tag":560,"props":1370,"children":1371},{"style":585},[1372],{"type":49,"value":52},{"type":43,"tag":560,"props":1374,"children":1375},{"style":579},[1376],{"type":49,"value":673},{"type":43,"tag":560,"props":1378,"children":1379},{"class":562,"line":676},[1380,1384,1388,1392,1396,1400,1404,1409],{"type":43,"tag":560,"props":1381,"children":1382},{"style":567},[1383],{"type":49,"value":1144},{"type":43,"tag":560,"props":1385,"children":1386},{"style":573},[1387],{"type":49,"value":1360},{"type":43,"tag":560,"props":1389,"children":1390},{"style":579},[1391],{"type":49,"value":658},{"type":43,"tag":560,"props":1393,"children":1394},{"style":573},[1395],{"type":49,"value":1158},{"type":43,"tag":560,"props":1397,"children":1398},{"style":585},[1399],{"type":49,"value":52},{"type":43,"tag":560,"props":1401,"children":1402},{"style":579},[1403],{"type":49,"value":1105},{"type":43,"tag":560,"props":1405,"children":1406},{"style":573},[1407],{"type":49,"value":1408}," --output",{"type":43,"tag":560,"props":1410,"children":1411},{"style":573},[1412],{"type":49,"value":1413}," \u002Ftmp\u002Fchatgpt-memory-preview.md\n",{"type":43,"tag":560,"props":1415,"children":1416},{"class":562,"line":1217},[1417,1421,1425,1429,1433,1437,1441],{"type":43,"tag":560,"props":1418,"children":1419},{"style":567},[1420],{"type":49,"value":1144},{"type":43,"tag":560,"props":1422,"children":1423},{"style":573},[1424],{"type":49,"value":1360},{"type":43,"tag":560,"props":1426,"children":1427},{"style":579},[1428],{"type":49,"value":658},{"type":43,"tag":560,"props":1430,"children":1431},{"style":573},[1432],{"type":49,"value":1158},{"type":43,"tag":560,"props":1434,"children":1435},{"style":585},[1436],{"type":49,"value":52},{"type":43,"tag":560,"props":1438,"children":1439},{"style":579},[1440],{"type":49,"value":1105},{"type":43,"tag":560,"props":1442,"children":1443},{"style":573},[1444],{"type":49,"value":1445}," --progress\n",{"type":43,"tag":52,"props":1447,"children":1448},{},[1449],{"type":49,"value":1450},"This combines what was previously two steps (extract → preview) into one. It pulls the highest-signal onboarding inputs from the entire export:",{"type":43,"tag":65,"props":1452,"children":1453},{},[1454,1463,1472,1481],{"type":43,"tag":69,"props":1455,"children":1456},{},[1457],{"type":43,"tag":278,"props":1458,"children":1460},{"className":1459},[],[1461],{"type":49,"value":1462},"about_user_message",{"type":43,"tag":69,"props":1464,"children":1465},{},[1466],{"type":43,"tag":278,"props":1467,"children":1469},{"className":1468},[],[1470],{"type":49,"value":1471},"about_model_message",{"type":43,"tag":69,"props":1473,"children":1474},{},[1475],{"type":43,"tag":278,"props":1476,"children":1478},{"className":1477},[],[1479],{"type":49,"value":1480},"user_profile",{"type":43,"tag":69,"props":1482,"children":1483},{},[1484],{"type":43,"tag":278,"props":1485,"children":1487},{"className":1486},[],[1488],{"type":49,"value":1489},"user_instructions",{"type":43,"tag":52,"props":1491,"children":1492},{},[1493],{"type":49,"value":1494},"And categorises them into:",{"type":43,"tag":65,"props":1496,"children":1497},{},[1498,1508,1518,1528],{"type":43,"tag":69,"props":1499,"children":1500},{},[1501,1506],{"type":43,"tag":123,"props":1502,"children":1503},{},[1504],{"type":49,"value":1505},"Active memory candidates",{"type":49,"value":1507}," — what should be in-context every turn",{"type":43,"tag":69,"props":1509,"children":1510},{},[1511,1516],{"type":43,"tag":123,"props":1512,"children":1513},{},[1514],{"type":49,"value":1515},"Runtime context",{"type":49,"value":1517}," — timezone, location, current date (skip these)",{"type":43,"tag":69,"props":1519,"children":1520},{},[1521,1526],{"type":43,"tag":123,"props":1522,"children":1523},{},[1524],{"type":49,"value":1525},"Historical\u002Fprogressive candidates",{"type":49,"value":1527}," — older versions, previous profiles",{"type":43,"tag":69,"props":1529,"children":1530},{},[1531,1536],{"type":43,"tag":123,"props":1532,"children":1533},{},[1534],{"type":49,"value":1535},"Contradictions",{"type":49,"value":1537}," — fields with multiple versions that need review",{"type":43,"tag":52,"props":1539,"children":1540},{},[1541,1543,1549],{"type":49,"value":1542},"If you need the raw extraction JSON separately (e.g. for subagent dispatch or audit), use ",{"type":43,"tag":278,"props":1544,"children":1546},{"className":1545},[],[1547],{"type":49,"value":1548},"extract-saved-memory.py",{"type":49,"value":1550}," directly:",{"type":43,"tag":549,"props":1552,"children":1554},{"className":551,"code":1553,"language":553,"meta":554,"style":554},"python3 scripts\u002Fextract-saved-memory.py \u003Cexport.zip> --json --output \u002Ftmp\u002Fchatgpt-saved-memory.json\n",[1555],{"type":43,"tag":278,"props":1556,"children":1557},{"__ignoreMap":554},[1558],{"type":43,"tag":560,"props":1559,"children":1560},{"class":562,"line":563},[1561,1565,1570,1574,1578,1582,1586,1590,1594],{"type":43,"tag":560,"props":1562,"children":1563},{"style":567},[1564],{"type":49,"value":1144},{"type":43,"tag":560,"props":1566,"children":1567},{"style":573},[1568],{"type":49,"value":1569}," scripts\u002Fextract-saved-memory.py",{"type":43,"tag":560,"props":1571,"children":1572},{"style":579},[1573],{"type":49,"value":658},{"type":43,"tag":560,"props":1575,"children":1576},{"style":573},[1577],{"type":49,"value":1158},{"type":43,"tag":560,"props":1579,"children":1580},{"style":585},[1581],{"type":49,"value":52},{"type":43,"tag":560,"props":1583,"children":1584},{"style":579},[1585],{"type":49,"value":1105},{"type":43,"tag":560,"props":1587,"children":1588},{"style":573},[1589],{"type":49,"value":1247},{"type":43,"tag":560,"props":1591,"children":1592},{"style":573},[1593],{"type":49,"value":1408},{"type":43,"tag":560,"props":1595,"children":1596},{"style":573},[1597],{"type":49,"value":1598}," \u002Ftmp\u002Fchatgpt-saved-memory.json\n",{"type":43,"tag":52,"props":1600,"children":1601},{},[1602,1607],{"type":43,"tag":123,"props":1603,"children":1604},{},[1605],{"type":49,"value":1606},"Note:",{"type":49,"value":1608}," For users with simple ChatGPT profiles (e.g. just a name and one-liner), the preview mostly reformats what's already obvious. In those cases, read the preview output and go straight to writing memory. The preview is most valuable when the profile has contradictions, multiple historical versions, or a mix of durable and runtime context.",{"type":43,"tag":313,"props":1610,"children":1612},{"id":1611},"merging-with-existing-memory",[1613],{"type":49,"value":1614},"Merging with existing memory",{"type":43,"tag":52,"props":1616,"children":1617},{},[1618,1620,1625,1627,1633,1635,1640],{"type":49,"value":1619},"If ",{"type":43,"tag":278,"props":1621,"children":1623},{"className":1622},[],[1624],{"type":49,"value":752},{"type":49,"value":1626}," or ",{"type":43,"tag":278,"props":1628,"children":1630},{"className":1629},[],[1631],{"type":49,"value":1632},"system\u002Fpersona.md",{"type":49,"value":1634}," already has content, ",{"type":43,"tag":123,"props":1636,"children":1637},{},[1638],{"type":49,"value":1639},"you are merging, not replacing",{"type":49,"value":1641},".",{"type":43,"tag":52,"props":1643,"children":1644},{},[1645,1650,1652,1658],{"type":43,"tag":123,"props":1646,"children":1647},{},[1648],{"type":49,"value":1649},"Anti-pattern:",{"type":49,"value":1651}," Reading the existing block, then doing a ",{"type":43,"tag":278,"props":1653,"children":1655},{"className":1654},[],[1656],{"type":49,"value":1657},"str_replace",{"type":49,"value":1659}," that swaps the entire content for a new version. This is overwriting, even if you read first. The existing content was written by the user or a previous session — it has context you don't have. Don't throw it away.",{"type":43,"tag":52,"props":1661,"children":1662},{},[1663,1668,1670,1675],{"type":43,"tag":123,"props":1664,"children":1665},{},[1666],{"type":49,"value":1667},"Correct pattern:",{"type":49,"value":1669}," Use targeted ",{"type":43,"tag":278,"props":1671,"children":1673},{"className":1672},[],[1674],{"type":49,"value":1657},{"type":49,"value":1676}," calls that add new lines or sections to the existing file. Concretely:",{"type":43,"tag":239,"props":1678,"children":1679},{},[1680,1685,1697,1708],{"type":43,"tag":69,"props":1681,"children":1682},{},[1683],{"type":49,"value":1684},"Read the existing block (it's already in your system prompt)",{"type":43,"tag":69,"props":1686,"children":1687},{},[1688,1690,1695],{"type":49,"value":1689},"Identify what's ",{"type":43,"tag":123,"props":1691,"children":1692},{},[1693],{"type":49,"value":1694},"missing",{"type":49,"value":1696}," — facts from ChatGPT that the existing block doesn't cover",{"type":43,"tag":69,"props":1698,"children":1699},{},[1700,1701,1706],{"type":49,"value":1288},{"type":43,"tag":278,"props":1702,"children":1704},{"className":1703},[],[1705],{"type":49,"value":1657},{"type":49,"value":1707}," to insert the missing facts into the appropriate section, or append a new section at the end",{"type":43,"tag":69,"props":1709,"children":1710},{},[1711,1716],{"type":43,"tag":123,"props":1712,"children":1713},{},[1714],{"type":49,"value":1715},"Never replace a line that already exists",{"type":49,"value":1717}," unless the ChatGPT data is explicitly newer and contradicts it",{"type":43,"tag":52,"props":1719,"children":1720},{},[1721,1723,1728],{"type":49,"value":1722},"Example — if ",{"type":43,"tag":278,"props":1724,"children":1726},{"className":1725},[],[1727],{"type":49,"value":752},{"type":49,"value":1729}," already says \"Works at Letta\" and ChatGPT saved memory says \"Works at Letta on agent infrastructure\", the merge is:",{"type":43,"tag":549,"props":1731,"children":1735},{"className":1732,"code":1734,"language":49},[1733],"language-text","str_replace \"Works at Letta\" → \"Works at Letta on agent infrastructure\"\n",[1736],{"type":43,"tag":278,"props":1737,"children":1738},{"__ignoreMap":554},[1739],{"type":49,"value":1734},{"type":43,"tag":52,"props":1741,"children":1742},{},[1743],{"type":49,"value":1744},"Not: replace the entire file with a rewritten version.",{"type":43,"tag":52,"props":1746,"children":1747},{},[1748],{"type":49,"value":1749},"If the existing block is empty or minimal (just the default template), a full write is fine. The merge discipline applies when there's existing content worth preserving.",{"type":43,"tag":313,"props":1751,"children":1753},{"id":1752},"serialise-memory-writes",[1754],{"type":49,"value":1755},"Serialise memory writes",{"type":43,"tag":52,"props":1757,"children":1758},{},[1759,1764],{"type":43,"tag":123,"props":1760,"children":1761},{},[1762],{"type":49,"value":1763},"Do not create or update multiple memory files in parallel.",{"type":49,"value":1765}," The memory tool can hit race conditions when called concurrently, producing spurious errors even when the writes succeed. This makes it hard to know what actually landed.",{"type":43,"tag":52,"props":1767,"children":1768},{},[1769],{"type":49,"value":1770},"Write memory files one at a time. The speed difference is negligible — memory writes are fast. The reliability difference is not.",{"type":43,"tag":313,"props":1772,"children":1774},{"id":1773},"safe-write-targets-and-memory-structure",[1775],{"type":49,"value":1776},"Safe write targets and memory structure",{"type":43,"tag":52,"props":1778,"children":1779},{},[1780,1782,1788],{"type":49,"value":1781},"Before writing memory, inspect ",{"type":43,"tag":278,"props":1783,"children":1785},{"className":1784},[],[1786],{"type":49,"value":1787},"system\u002F",{"type":49,"value":1789}," and the relevant reference directories.",{"type":43,"tag":52,"props":1791,"children":1792},{},[1793],{"type":49,"value":1794},"Important MemFS rule:",{"type":43,"tag":65,"props":1796,"children":1797},{},[1798],{"type":43,"tag":69,"props":1799,"children":1800},{},[1801,1806,1808,1813,1815,1821,1822,1827,1828,1834],{"type":43,"tag":123,"props":1802,"children":1803},{},[1804],{"type":49,"value":1805},"Never create overlapping file\u002Ffolder paths",{"type":49,"value":1807}," such as ",{"type":43,"tag":278,"props":1809,"children":1811},{"className":1810},[],[1812],{"type":49,"value":752},{"type":49,"value":1814}," and ",{"type":43,"tag":278,"props":1816,"children":1818},{"className":1817},[],[1819],{"type":49,"value":1820},"system\u002Fhuman\u002F...",{"type":49,"value":1626},{"type":43,"tag":278,"props":1823,"children":1825},{"className":1824},[],[1826],{"type":49,"value":1632},{"type":49,"value":1814},{"type":43,"tag":278,"props":1829,"children":1831},{"className":1830},[],[1832],{"type":49,"value":1833},"system\u002Fpersona\u002F...",{"type":49,"value":1641},{"type":43,"tag":52,"props":1836,"children":1837},{},[1838],{"type":49,"value":1839},"Write targets (all imports should produce at least the first two):",{"type":43,"tag":65,"props":1841,"children":1842},{},[1843,1853,1871,1882,1893],{"type":43,"tag":69,"props":1844,"children":1845},{},[1846,1851],{"type":43,"tag":278,"props":1847,"children":1849},{"className":1848},[],[1850],{"type":49,"value":752},{"type":49,"value":1852}," — condensed durable user facts and collaboration preferences that should be in-context every turn",{"type":43,"tag":69,"props":1854,"children":1855},{},[1856,1862,1864,1869],{"type":43,"tag":278,"props":1857,"children":1859},{"className":1858},[],[1860],{"type":49,"value":1861},"reference\u002Fchatgpt\u002Fimport-YYYY-MM-DD.md",{"type":49,"value":1863}," — ",{"type":43,"tag":123,"props":1865,"children":1866},{},[1867],{"type":49,"value":1868},"always create",{"type":49,"value":1870}," — import audit trail, exclusions, uncertainty notes, source path",{"type":43,"tag":69,"props":1872,"children":1873},{},[1874,1880],{"type":43,"tag":278,"props":1875,"children":1877},{"className":1876},[],[1878],{"type":49,"value":1879},"reference\u002Fchatgpt\u002Fwork-and-technical-background.md",{"type":49,"value":1881}," — create when historical work context is found",{"type":43,"tag":69,"props":1883,"children":1884},{},[1885,1891],{"type":43,"tag":278,"props":1886,"children":1888},{"className":1887},[],[1889],{"type":49,"value":1890},"reference\u002Fchatgpt\u002Fcollaboration-preferences.md",{"type":49,"value":1892}," — create when detailed interaction\u002Fstyle patterns are found",{"type":43,"tag":69,"props":1894,"children":1895},{},[1896,1902],{"type":43,"tag":278,"props":1897,"children":1899},{"className":1898},[],[1900],{"type":49,"value":1901},"reference\u002Fchatgpt\u002Ftranscripts\u002F",{"type":49,"value":1903}," — curated transcript exports for fidelity\u002Fauditability",{"type":43,"tag":52,"props":1905,"children":1906},{},[1907,1908,1913,1915,1920],{"type":49,"value":1619},{"type":43,"tag":278,"props":1909,"children":1911},{"className":1910},[],[1912],{"type":49,"value":752},{"type":49,"value":1914}," already exists, update that file instead of inventing a sibling folder.\nIf ",{"type":43,"tag":278,"props":1916,"children":1918},{"className":1917},[],[1919],{"type":49,"value":1632},{"type":49,"value":1921}," already exists, update that file instead of inventing a sibling folder.",{"type":43,"tag":52,"props":1923,"children":1924},{},[1925,1927,1933],{"type":49,"value":1926},"Use progressive disclosure aggressively: keep active memory small, and link outward with ",{"type":43,"tag":278,"props":1928,"children":1930},{"className":1929},[],[1931],{"type":49,"value":1932},"[[reference\u002Fchatgpt\u002F...]]",{"type":49,"value":1934}," paths so future agents can discover the archive.",{"type":43,"tag":313,"props":1936,"children":1938},{"id":1937},"_3-write-memory-active-and-progressive",[1939],{"type":49,"value":1940},"3. Write memory — active AND progressive",{"type":43,"tag":52,"props":1942,"children":1943},{},[1944,1946,1951,1953,1958,1959,1964],{"type":49,"value":1945},"This step writes to ",{"type":43,"tag":123,"props":1947,"children":1948},{},[1949],{"type":49,"value":1950},"both",{"type":49,"value":1952}," ",{"type":43,"tag":278,"props":1954,"children":1956},{"className":1955},[],[1957],{"type":49,"value":1787},{"type":49,"value":1814},{"type":43,"tag":278,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":49,"value":765},{"type":49,"value":1965},". Not just active memory. The progressive memory layer is where the import's long-term value lives — without it, historical context, audit trails, and collaboration preferences are lost.",{"type":43,"tag":1967,"props":1968,"children":1970},"h4",{"id":1969},"_3a-active-memory-systemhumanmd",[1971,1973,1978],{"type":49,"value":1972},"3a. Active memory (",{"type":43,"tag":278,"props":1974,"children":1976},{"className":1975},[],[1977],{"type":49,"value":752},{"type":49,"value":754},{"type":43,"tag":52,"props":1980,"children":1981},{},[1982],{"type":49,"value":1983},"Write immediately when the fact is explicit, current, and low-sensitivity:",{"type":43,"tag":65,"props":1985,"children":1986},{},[1987,1992,1997,2002,2007],{"type":43,"tag":69,"props":1988,"children":1989},{},[1990],{"type":49,"value":1991},"name and stable identity basics",{"type":43,"tag":69,"props":1993,"children":1994},{},[1995],{"type":49,"value":1996},"current role or project context",{"type":43,"tag":69,"props":1998,"children":1999},{},[2000],{"type":49,"value":2001},"explicit response preferences from hidden saved memory",{"type":43,"tag":69,"props":2003,"children":2004},{},[2005],{"type":49,"value":2006},"repeated formatting preferences",{"type":43,"tag":69,"props":2008,"children":2009},{},[2010],{"type":49,"value":2011},"collaboration preferences like directness, question volume, anti-sycophancy",{"type":43,"tag":52,"props":2013,"children":2014},{},[2015,2017,2022],{"type":49,"value":2016},"Keep ",{"type":43,"tag":278,"props":2018,"children":2020},{"className":2019},[],[2021],{"type":49,"value":752},{"type":49,"value":2023}," compact. Only what should be in-context every turn.",{"type":43,"tag":1967,"props":2025,"children":2027},{"id":2026},"_3b-import-audit-file-referencechatgptimport-yyyy-mm-ddmd",[2028,2030,2035],{"type":49,"value":2029},"3b. Import audit file (",{"type":43,"tag":278,"props":2031,"children":2033},{"className":2032},[],[2034],{"type":49,"value":1861},{"type":49,"value":754},{"type":43,"tag":52,"props":2037,"children":2038},{},[2039,2044],{"type":43,"tag":123,"props":2040,"children":2041},{},[2042],{"type":49,"value":2043},"Always create this file.",{"type":49,"value":2045}," It records what happened during the import:",{"type":43,"tag":65,"props":2047,"children":2048},{},[2049,2054,2059,2064,2069,2074],{"type":43,"tag":69,"props":2050,"children":2051},{},[2052],{"type":49,"value":2053},"export path and conversation count",{"type":43,"tag":69,"props":2055,"children":2056},{},[2057],{"type":49,"value":2058},"what was written to active memory and why",{"type":43,"tag":69,"props":2060,"children":2061},{},[2062],{"type":49,"value":2063},"what was excluded and why",{"type":43,"tag":69,"props":2065,"children":2066},{},[2067],{"type":49,"value":2068},"contradictions found and how they were resolved",{"type":43,"tag":69,"props":2070,"children":2071},{},[2072],{"type":49,"value":2073},"what still needs confirmation",{"type":43,"tag":69,"props":2075,"children":2076},{},[2077],{"type":49,"value":2078},"source of each decision (which saved-memory field, which conversation index)",{"type":43,"tag":52,"props":2080,"children":2081},{},[2082],{"type":49,"value":2083},"This is the receipt. Future agents can read it to understand where the memory came from.",{"type":43,"tag":1967,"props":2085,"children":2087},{"id":2086},"_3c-progressive-memory-files",[2088],{"type":49,"value":2089},"3c. Progressive memory files",{"type":43,"tag":52,"props":2091,"children":2092},{},[2093,2095,2100],{"type":49,"value":2094},"Create these when the preview or enrichment surfaces material that doesn't belong in ",{"type":43,"tag":278,"props":2096,"children":2098},{"className":2097},[],[2099],{"type":49,"value":1787},{"type":49,"value":2101}," but is worth keeping:",{"type":43,"tag":65,"props":2103,"children":2104},{},[2105,2118],{"type":43,"tag":69,"props":2106,"children":2107},{},[2108,2116],{"type":43,"tag":123,"props":2109,"children":2110},{},[2111],{"type":43,"tag":278,"props":2112,"children":2114},{"className":2113},[],[2115],{"type":49,"value":1879},{"type":49,"value":2117}," — historical roles, past projects, technical background, older work context that's useful for understanding the user but not needed every turn",{"type":43,"tag":69,"props":2119,"children":2120},{},[2121,2129,2131,2136],{"type":43,"tag":123,"props":2122,"children":2123},{},[2124],{"type":43,"tag":278,"props":2125,"children":2127},{"className":2126},[],[2128],{"type":49,"value":1890},{"type":49,"value":2130}," — detailed interaction patterns, formatting preferences, correction patterns, anti-patterns — anything too granular for ",{"type":43,"tag":278,"props":2132,"children":2134},{"className":2133},[],[2135],{"type":49,"value":752},{"type":49,"value":2137}," but valuable when the agent needs to calibrate tone or style",{"type":43,"tag":52,"props":2139,"children":2140},{},[2141],{"type":49,"value":2142},"If the preview shows historical alternatives (older saved-memory versions, previous profiles), those go here too.",{"type":43,"tag":1967,"props":2144,"children":2146},{"id":2145},"_3d-link-progressive-files-from-active-memory",[2147],{"type":49,"value":2148},"3d. Link progressive files from active memory",{"type":43,"tag":52,"props":2150,"children":2151},{},[2152,2154,2159,2161,2166],{"type":49,"value":2153},"After creating progressive memory files, add ",{"type":43,"tag":278,"props":2155,"children":2157},{"className":2156},[],[2158],{"type":49,"value":1932},{"type":49,"value":2160}," links in ",{"type":43,"tag":278,"props":2162,"children":2164},{"className":2163},[],[2165],{"type":49,"value":752},{"type":49,"value":2167}," so future agents can discover them. Example:",{"type":43,"tag":549,"props":2169,"children":2172},{"className":2170,"code":2171,"language":49},[1733],"See also: [[reference\u002Fchatgpt\u002Fwork-and-technical-background.md]], [[reference\u002Fchatgpt\u002Fcollaboration-preferences.md]]\n",[2173],{"type":43,"tag":278,"props":2174,"children":2175},{"__ignoreMap":554},[2176],{"type":49,"value":2171},{"type":43,"tag":1967,"props":2178,"children":2180},{"id":2179},"writing-pattern",[2181],{"type":49,"value":2182},"Writing pattern",{"type":43,"tag":52,"props":2184,"children":2185},{},[2186],{"type":49,"value":2187},"For each write:",{"type":43,"tag":239,"props":2189,"children":2190},{},[2191,2196,2201,2206],{"type":43,"tag":69,"props":2192,"children":2193},{},[2194],{"type":49,"value":2195},"keep it small and specific",{"type":43,"tag":69,"props":2197,"children":2198},{},[2199],{"type":49,"value":2200},"tell the user what you wrote and where",{"type":43,"tag":69,"props":2202,"children":2203},{},[2204],{"type":49,"value":2205},"tell the user what you are reviewing next",{"type":43,"tag":69,"props":2207,"children":2208},{},[2209],{"type":49,"value":2210},"continue",{"type":43,"tag":313,"props":2212,"children":2214},{"id":2213},"_4-optional-archive-enrichment",[2215],{"type":49,"value":2216},"4. Optional archive enrichment",{"type":43,"tag":52,"props":2218,"children":2219},{},[2220],{"type":49,"value":2221},"Only after the saved-memory clone is handled, optionally mine broader conversation history for:",{"type":43,"tag":65,"props":2223,"children":2224},{},[2225,2230,2235,2240],{"type":43,"tag":69,"props":2226,"children":2227},{},[2228],{"type":49,"value":2229},"work\u002Fproject context",{"type":43,"tag":69,"props":2231,"children":2232},{},[2233],{"type":49,"value":2234},"collaboration patterns",{"type":43,"tag":69,"props":2236,"children":2237},{},[2238],{"type":49,"value":2239},"historical background",{"type":43,"tag":69,"props":2241,"children":2242},{},[2243],{"type":49,"value":2244},"other durable facts the user wants preserved",{"type":43,"tag":1967,"props":2246,"children":2248},{"id":2247},"confirm-before-exhaustive-mining",[2249],{"type":49,"value":2250},"Confirm before exhaustive mining",{"type":43,"tag":52,"props":2252,"children":2253},{},[2254,2256,2261],{"type":49,"value":2255},"Archive enrichment dispatches subagents — potentially many of them. For a 500-conversation archive, that's ~10 parallel agents. ",{"type":43,"tag":123,"props":2257,"children":2258},{},[2259],{"type":49,"value":2260},"Always confirm with the user before starting",{"type":49,"value":2262},", and tell them what it will cost in concrete terms:",{"type":43,"tag":65,"props":2264,"children":2265},{},[2266,2271,2276],{"type":43,"tag":69,"props":2267,"children":2268},{},[2269],{"type":49,"value":2270},"How many conversations will be mined",{"type":43,"tag":69,"props":2272,"children":2273},{},[2274],{"type":49,"value":2275},"How many subagents will be dispatched",{"type":43,"tag":69,"props":2277,"children":2278},{},[2279],{"type":49,"value":2280},"That this is the expensive part of the import",{"type":43,"tag":52,"props":2282,"children":2283},{},[2284],{"type":49,"value":2285},"Use AskUserQuestion with options like:",{"type":43,"tag":65,"props":2287,"children":2288},{},[2289,2299,2309],{"type":43,"tag":69,"props":2290,"children":2291},{},[2292,2297],{"type":43,"tag":123,"props":2293,"children":2294},{},[2295],{"type":49,"value":2296},"Full archive mining",{"type":49,"value":2298}," — \"Mine all N conversations (~X subagents). Most thorough, most expensive.\"",{"type":43,"tag":69,"props":2300,"children":2301},{},[2302,2307],{"type":43,"tag":123,"props":2303,"children":2304},{},[2305],{"type":49,"value":2306},"Targeted mining",{"type":49,"value":2308}," — \"Mine conversations matching specific topics you care about. Cheaper, still good coverage.\"",{"type":43,"tag":69,"props":2310,"children":2311},{},[2312,2317],{"type":43,"tag":123,"props":2313,"children":2314},{},[2315],{"type":49,"value":2316},"Skip enrichment",{"type":49,"value":2318}," — \"The saved-memory clone already captured the essentials. Stop here.\"",{"type":43,"tag":52,"props":2320,"children":2321},{},[2322,2324,2330,2332,2337],{"type":49,"value":2323},"Do not automatically dispatch subagents just because the user selected \"full history mining\" at intake. The intake scope question establishes ",{"type":43,"tag":2325,"props":2326,"children":2327},"em",{},[2328],{"type":49,"value":2329},"willingness",{"type":49,"value":2331},"; this checkpoint confirms the ",{"type":43,"tag":2325,"props":2333,"children":2334},{},[2335],{"type":49,"value":2336},"specific cost",{"type":49,"value":2338}," now that you know the archive size.",{"type":43,"tag":52,"props":2340,"children":2341},{},[2342],{"type":49,"value":2343},"For small archives (under 50 conversations), mine directly — no subagents needed, no confirmation needed:",{"type":43,"tag":549,"props":2345,"children":2347},{"className":551,"code":2346,"language":553,"meta":554,"style":554},"python3 scripts\u002Frender-conversation.py \u003Cexport.zip> --index 12 --output \u002Ftmp\u002Fchatgpt-12.md\n",[2348],{"type":43,"tag":278,"props":2349,"children":2350},{"__ignoreMap":554},[2351],{"type":43,"tag":560,"props":2352,"children":2353},{"class":562,"line":563},[2354,2358,2363,2367,2371,2375,2379,2384,2389,2393],{"type":43,"tag":560,"props":2355,"children":2356},{"style":567},[2357],{"type":49,"value":1144},{"type":43,"tag":560,"props":2359,"children":2360},{"style":573},[2361],{"type":49,"value":2362}," scripts\u002Frender-conversation.py",{"type":43,"tag":560,"props":2364,"children":2365},{"style":579},[2366],{"type":49,"value":658},{"type":43,"tag":560,"props":2368,"children":2369},{"style":573},[2370],{"type":49,"value":1158},{"type":43,"tag":560,"props":2372,"children":2373},{"style":585},[2374],{"type":49,"value":52},{"type":43,"tag":560,"props":2376,"children":2377},{"style":579},[2378],{"type":49,"value":1105},{"type":43,"tag":560,"props":2380,"children":2381},{"style":573},[2382],{"type":49,"value":2383}," --index",{"type":43,"tag":560,"props":2385,"children":2386},{"style":1211},[2387],{"type":49,"value":2388}," 12",{"type":43,"tag":560,"props":2390,"children":2391},{"style":573},[2392],{"type":49,"value":1408},{"type":43,"tag":560,"props":2394,"children":2395},{"style":573},[2396],{"type":49,"value":2397}," \u002Ftmp\u002Fchatgpt-12.md\n",{"type":43,"tag":52,"props":2399,"children":2400},{},[2401,2403,2408],{"type":49,"value":2402},"For archives of 50+ conversations, ",{"type":43,"tag":123,"props":2404,"children":2405},{},[2406],{"type":49,"value":2407},"use parallel chunk-based mining",{"type":49,"value":2409}," (see below).",{"type":43,"tag":1967,"props":2411,"children":2413},{"id":2412},"topic-based-filtering",[2414],{"type":49,"value":2415},"Topic-based filtering",{"type":43,"tag":52,"props":2417,"children":2418},{},[2419],{"type":49,"value":2420},"There is no single script for topic-based discovery + rendering. Use this two-step pattern:",{"type":43,"tag":549,"props":2422,"children":2424},{"className":551,"code":2423,"language":553,"meta":554,"style":554},"# Step 1: Find conversations by topic\npython3 scripts\u002Flist-conversations.py \u003Cexport.zip> --title-contains \"Julia\" --json\n\n# Step 2: Render the most promising ones individually\npython3 scripts\u002Frender-conversation.py \u003Cexport.zip> --index 95\npython3 scripts\u002Frender-conversation.py \u003Cexport.zip> --index 144\n",[2425],{"type":43,"tag":278,"props":2426,"children":2427},{"__ignoreMap":554},[2428,2437,2487,2496,2505,2542],{"type":43,"tag":560,"props":2429,"children":2430},{"class":562,"line":563},[2431],{"type":43,"tag":560,"props":2432,"children":2434},{"style":2433},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[2435],{"type":49,"value":2436},"# Step 1: Find conversations by topic\n",{"type":43,"tag":560,"props":2438,"children":2439},{"class":562,"line":676},[2440,2444,2448,2452,2456,2460,2464,2469,2473,2478,2482],{"type":43,"tag":560,"props":2441,"children":2442},{"style":567},[2443],{"type":49,"value":1144},{"type":43,"tag":560,"props":2445,"children":2446},{"style":573},[2447],{"type":49,"value":1149},{"type":43,"tag":560,"props":2449,"children":2450},{"style":579},[2451],{"type":49,"value":658},{"type":43,"tag":560,"props":2453,"children":2454},{"style":573},[2455],{"type":49,"value":1158},{"type":43,"tag":560,"props":2457,"children":2458},{"style":585},[2459],{"type":49,"value":52},{"type":43,"tag":560,"props":2461,"children":2462},{"style":579},[2463],{"type":49,"value":1105},{"type":43,"tag":560,"props":2465,"children":2466},{"style":573},[2467],{"type":49,"value":2468}," --title-contains",{"type":43,"tag":560,"props":2470,"children":2471},{"style":579},[2472],{"type":49,"value":582},{"type":43,"tag":560,"props":2474,"children":2475},{"style":573},[2476],{"type":49,"value":2477},"Julia",{"type":43,"tag":560,"props":2479,"children":2480},{"style":579},[2481],{"type":49,"value":593},{"type":43,"tag":560,"props":2483,"children":2484},{"style":573},[2485],{"type":49,"value":2486}," --json\n",{"type":43,"tag":560,"props":2488,"children":2489},{"class":562,"line":1217},[2490],{"type":43,"tag":560,"props":2491,"children":2493},{"emptyLinePlaceholder":2492},true,[2494],{"type":49,"value":2495},"\n",{"type":43,"tag":560,"props":2497,"children":2499},{"class":562,"line":2498},4,[2500],{"type":43,"tag":560,"props":2501,"children":2502},{"style":2433},[2503],{"type":49,"value":2504},"# Step 2: Render the most promising ones individually\n",{"type":43,"tag":560,"props":2506,"children":2508},{"class":562,"line":2507},5,[2509,2513,2517,2521,2525,2529,2533,2537],{"type":43,"tag":560,"props":2510,"children":2511},{"style":567},[2512],{"type":49,"value":1144},{"type":43,"tag":560,"props":2514,"children":2515},{"style":573},[2516],{"type":49,"value":2362},{"type":43,"tag":560,"props":2518,"children":2519},{"style":579},[2520],{"type":49,"value":658},{"type":43,"tag":560,"props":2522,"children":2523},{"style":573},[2524],{"type":49,"value":1158},{"type":43,"tag":560,"props":2526,"children":2527},{"style":585},[2528],{"type":49,"value":52},{"type":43,"tag":560,"props":2530,"children":2531},{"style":579},[2532],{"type":49,"value":1105},{"type":43,"tag":560,"props":2534,"children":2535},{"style":573},[2536],{"type":49,"value":2383},{"type":43,"tag":560,"props":2538,"children":2539},{"style":1211},[2540],{"type":49,"value":2541}," 95\n",{"type":43,"tag":560,"props":2543,"children":2545},{"class":562,"line":2544},6,[2546,2550,2554,2558,2562,2566,2570,2574],{"type":43,"tag":560,"props":2547,"children":2548},{"style":567},[2549],{"type":49,"value":1144},{"type":43,"tag":560,"props":2551,"children":2552},{"style":573},[2553],{"type":49,"value":2362},{"type":43,"tag":560,"props":2555,"children":2556},{"style":579},[2557],{"type":49,"value":658},{"type":43,"tag":560,"props":2559,"children":2560},{"style":573},[2561],{"type":49,"value":1158},{"type":43,"tag":560,"props":2563,"children":2564},{"style":585},[2565],{"type":49,"value":52},{"type":43,"tag":560,"props":2567,"children":2568},{"style":579},[2569],{"type":49,"value":1105},{"type":43,"tag":560,"props":2571,"children":2572},{"style":573},[2573],{"type":49,"value":2383},{"type":43,"tag":560,"props":2575,"children":2576},{"style":1211},[2577],{"type":49,"value":2578}," 144\n",{"type":43,"tag":52,"props":2580,"children":2581},{},[2582,2584,2589],{"type":49,"value":2583},"For broader topic sweeps, try multiple ",{"type":43,"tag":278,"props":2585,"children":2587},{"className":2586},[],[2588],{"type":49,"value":1323},{"type":49,"value":2590}," queries (e.g. \"Julia\", \"Bayesian\", \"economics\") and deduplicate by index before rendering.",{"type":43,"tag":1967,"props":2592,"children":2594},{"id":2593},"stale-context-retraction-sweep",[2595],{"type":49,"value":2596},"Stale-context \u002F retraction sweep",{"type":43,"tag":52,"props":2598,"children":2599},{},[2600],{"type":49,"value":2601},"Before promoting historical findings to active memory, do a lightweight sweep for explicit corrections in later conversations.",{"type":43,"tag":52,"props":2603,"children":2604},{},[2605,2607,2613],{"type":49,"value":2606},"Use content search with ",{"type":43,"tag":278,"props":2608,"children":2610},{"className":2609},[],[2611],{"type":49,"value":2612},"--role user",{"type":49,"value":2614}," to focus on what the user actually said:",{"type":43,"tag":549,"props":2616,"children":2618},{"className":551,"code":2617,"language":553,"meta":554,"style":554},"python3 scripts\u002Fsearch-conversations.py \u003Cexport.zip> --query \"not doing\" --query \"no longer\" --query \"forget that\" --query \"remove from memory\" --role user\npython3 scripts\u002Fsearch-conversations.py \u003Cexport.zip> --query \"used to\" --query \"don't assume\" --role user --json --limit 20\n",[2619],{"type":43,"tag":278,"props":2620,"children":2621},{"__ignoreMap":554},[2622,2729],{"type":43,"tag":560,"props":2623,"children":2624},{"class":562,"line":563},[2625,2629,2634,2638,2642,2646,2650,2655,2659,2664,2668,2672,2676,2681,2685,2689,2693,2698,2702,2706,2710,2715,2719,2724],{"type":43,"tag":560,"props":2626,"children":2627},{"style":567},[2628],{"type":49,"value":1144},{"type":43,"tag":560,"props":2630,"children":2631},{"style":573},[2632],{"type":49,"value":2633}," scripts\u002Fsearch-conversations.py",{"type":43,"tag":560,"props":2635,"children":2636},{"style":579},[2637],{"type":49,"value":658},{"type":43,"tag":560,"props":2639,"children":2640},{"style":573},[2641],{"type":49,"value":1158},{"type":43,"tag":560,"props":2643,"children":2644},{"style":585},[2645],{"type":49,"value":52},{"type":43,"tag":560,"props":2647,"children":2648},{"style":579},[2649],{"type":49,"value":1105},{"type":43,"tag":560,"props":2651,"children":2652},{"style":573},[2653],{"type":49,"value":2654}," --query",{"type":43,"tag":560,"props":2656,"children":2657},{"style":579},[2658],{"type":49,"value":582},{"type":43,"tag":560,"props":2660,"children":2661},{"style":573},[2662],{"type":49,"value":2663},"not doing",{"type":43,"tag":560,"props":2665,"children":2666},{"style":579},[2667],{"type":49,"value":593},{"type":43,"tag":560,"props":2669,"children":2670},{"style":573},[2671],{"type":49,"value":2654},{"type":43,"tag":560,"props":2673,"children":2674},{"style":579},[2675],{"type":49,"value":582},{"type":43,"tag":560,"props":2677,"children":2678},{"style":573},[2679],{"type":49,"value":2680},"no longer",{"type":43,"tag":560,"props":2682,"children":2683},{"style":579},[2684],{"type":49,"value":593},{"type":43,"tag":560,"props":2686,"children":2687},{"style":573},[2688],{"type":49,"value":2654},{"type":43,"tag":560,"props":2690,"children":2691},{"style":579},[2692],{"type":49,"value":582},{"type":43,"tag":560,"props":2694,"children":2695},{"style":573},[2696],{"type":49,"value":2697},"forget that",{"type":43,"tag":560,"props":2699,"children":2700},{"style":579},[2701],{"type":49,"value":593},{"type":43,"tag":560,"props":2703,"children":2704},{"style":573},[2705],{"type":49,"value":2654},{"type":43,"tag":560,"props":2707,"children":2708},{"style":579},[2709],{"type":49,"value":582},{"type":43,"tag":560,"props":2711,"children":2712},{"style":573},[2713],{"type":49,"value":2714},"remove from memory",{"type":43,"tag":560,"props":2716,"children":2717},{"style":579},[2718],{"type":49,"value":593},{"type":43,"tag":560,"props":2720,"children":2721},{"style":573},[2722],{"type":49,"value":2723}," --role",{"type":43,"tag":560,"props":2725,"children":2726},{"style":573},[2727],{"type":49,"value":2728}," user\n",{"type":43,"tag":560,"props":2730,"children":2731},{"class":562,"line":676},[2732,2736,2740,2744,2748,2752,2756,2760,2764,2769,2773,2777,2781,2786,2790,2794,2799,2803,2807],{"type":43,"tag":560,"props":2733,"children":2734},{"style":567},[2735],{"type":49,"value":1144},{"type":43,"tag":560,"props":2737,"children":2738},{"style":573},[2739],{"type":49,"value":2633},{"type":43,"tag":560,"props":2741,"children":2742},{"style":579},[2743],{"type":49,"value":658},{"type":43,"tag":560,"props":2745,"children":2746},{"style":573},[2747],{"type":49,"value":1158},{"type":43,"tag":560,"props":2749,"children":2750},{"style":585},[2751],{"type":49,"value":52},{"type":43,"tag":560,"props":2753,"children":2754},{"style":579},[2755],{"type":49,"value":1105},{"type":43,"tag":560,"props":2757,"children":2758},{"style":573},[2759],{"type":49,"value":2654},{"type":43,"tag":560,"props":2761,"children":2762},{"style":579},[2763],{"type":49,"value":582},{"type":43,"tag":560,"props":2765,"children":2766},{"style":573},[2767],{"type":49,"value":2768},"used to",{"type":43,"tag":560,"props":2770,"children":2771},{"style":579},[2772],{"type":49,"value":593},{"type":43,"tag":560,"props":2774,"children":2775},{"style":573},[2776],{"type":49,"value":2654},{"type":43,"tag":560,"props":2778,"children":2779},{"style":579},[2780],{"type":49,"value":582},{"type":43,"tag":560,"props":2782,"children":2783},{"style":573},[2784],{"type":49,"value":2785},"don't assume",{"type":43,"tag":560,"props":2787,"children":2788},{"style":579},[2789],{"type":49,"value":593},{"type":43,"tag":560,"props":2791,"children":2792},{"style":573},[2793],{"type":49,"value":2723},{"type":43,"tag":560,"props":2795,"children":2796},{"style":573},[2797],{"type":49,"value":2798}," user",{"type":43,"tag":560,"props":2800,"children":2801},{"style":573},[2802],{"type":49,"value":1247},{"type":43,"tag":560,"props":2804,"children":2805},{"style":573},[2806],{"type":49,"value":1252},{"type":43,"tag":560,"props":2808,"children":2809},{"style":1211},[2810],{"type":49,"value":2811}," 20\n",{"type":43,"tag":52,"props":2813,"children":2814},{},[2815],{"type":49,"value":2816},"Typical signals:",{"type":43,"tag":65,"props":2818,"children":2819},{},[2820,2825,2830],{"type":43,"tag":69,"props":2821,"children":2822},{},[2823],{"type":49,"value":2824},"the user says a project is no longer active",{"type":43,"tag":69,"props":2826,"children":2827},{},[2828],{"type":49,"value":2829},"the user says to forget or remove old context",{"type":43,"tag":69,"props":2831,"children":2832},{},[2833],{"type":49,"value":2834},"the user says a role, employer, affiliation, or plan is outdated",{"type":43,"tag":52,"props":2836,"children":2837},{},[2838],{"type":49,"value":2839},"When old context conflicts with a newer explicit correction, prefer the newer correction.",{"type":43,"tag":313,"props":2841,"children":2843},{"id":2842},"_5-validate-with-doctor",[2844],{"type":49,"value":2845},"5. Validate with \u002Fdoctor",{"type":43,"tag":52,"props":2847,"children":2848},{},[2849,2851,2860],{"type":49,"value":2850},"After the import completes — whether it was a simple saved-memory clone or a full archive enrichment — ",{"type":43,"tag":123,"props":2852,"children":2853},{},[2854,2855],{"type":49,"value":276},{"type":43,"tag":278,"props":2856,"children":2858},{"className":2857},[],[2859],{"type":49,"value":283},{"type":49,"value":2861},". This is not optional. It validates:",{"type":43,"tag":65,"props":2863,"children":2864},{},[2865,2870,2875,2880],{"type":43,"tag":69,"props":2866,"children":2867},{},[2868],{"type":49,"value":2869},"memory structure integrity",{"type":43,"tag":69,"props":2871,"children":2872},{},[2873],{"type":49,"value":2874},"no overlapping file\u002Ffolder paths",{"type":43,"tag":69,"props":2876,"children":2877},{},[2878],{"type":49,"value":2879},"prompt hygiene",{"type":43,"tag":69,"props":2881,"children":2882},{},[2883],{"type":49,"value":2884},"block size sanity",{"type":43,"tag":52,"props":2886,"children":2887},{},[2888],{"type":49,"value":2889},"If \u002Fdoctor flags issues, fix them before declaring the import complete.",{"type":43,"tag":313,"props":2891,"children":2893},{"id":2892},"_6-transcript-preservation",[2894],{"type":49,"value":2895},"6. Transcript preservation",{"type":43,"tag":52,"props":2897,"children":2898},{},[2899,2901,2906],{"type":49,"value":2900},"Transcript preservation happens ",{"type":43,"tag":123,"props":2902,"children":2903},{},[2904],{"type":49,"value":2905},"during mining",{"type":49,"value":2907},", not as a separate step afterward. When you or a subagent encounter a high-signal conversation, store it immediately — don't queue it up as a question for later.",{"type":43,"tag":52,"props":2909,"children":2910},{},[2911,2915],{"type":43,"tag":123,"props":2912,"children":2913},{},[2914],{"type":49,"value":1649},{"type":49,"value":2916}," Do not collect transcript candidates during mining and then present them as a menu (\"Which transcripts do you want me to export?\"). This forces the user to make decisions about conversations they haven't read. Instead, store high-signal transcripts as you find them, mention what you stored in your progress narration, and move on. The user can always delete what they don't want — that's easier than re-mining what wasn't stored.",{"type":43,"tag":1967,"props":2918,"children":2920},{"id":2919},"store-automatically-dont-ask",[2921],{"type":49,"value":2922},"Store automatically (don't ask)",{"type":43,"tag":52,"props":2924,"children":2925},{},[2926],{"type":49,"value":2927},"Preserve a conversation when it contains:",{"type":43,"tag":65,"props":2929,"children":2930},{},[2931,2941,2951,2961],{"type":43,"tag":69,"props":2932,"children":2933},{},[2934,2939],{"type":43,"tag":123,"props":2935,"children":2936},{},[2937],{"type":49,"value":2938},"Career transitions or major life decisions",{"type":49,"value":2940}," — role changes, company moves, pivots. These are the user's own narration of their trajectory and are rarely redundant with memory blocks.",{"type":43,"tag":69,"props":2942,"children":2943},{},[2944,2949],{"type":43,"tag":123,"props":2945,"children":2946},{},[2947],{"type":49,"value":2948},"Deep technical design discussions",{"type":49,"value":2950}," — architecture decisions, system design, research methodology. The nuance matters and can't be distilled to a bullet point.",{"type":43,"tag":69,"props":2952,"children":2953},{},[2954,2959],{"type":43,"tag":123,"props":2955,"children":2956},{},[2957],{"type":49,"value":2958},"Detailed project context",{"type":49,"value":2960}," — goals, constraints, collaborators, timelines for projects the user worked on seriously.",{"type":43,"tag":69,"props":2962,"children":2963},{},[2964,2969,2971,2976,2977,2982],{"type":43,"tag":123,"props":2965,"children":2966},{},[2967],{"type":49,"value":2968},"Explicit preference statements in context",{"type":49,"value":2970}," — not just \"be direct\" but the full exchange where they explained ",{"type":43,"tag":2325,"props":2972,"children":2973},{},[2974],{"type":49,"value":2975},"why",{"type":49,"value":1814},{"type":43,"tag":2325,"props":2978,"children":2979},{},[2980],{"type":49,"value":2981},"when",{"type":49,"value":2983}," they want directness.",{"type":43,"tag":52,"props":2985,"children":2986},{},[2987,2989,2994,2996,3002],{"type":49,"value":2988},"For these, ",{"type":43,"tag":123,"props":2990,"children":2991},{},[2992],{"type":49,"value":2993},"summarize",{"type":49,"value":2995}," into a 2–5 paragraph reference file at ",{"type":43,"tag":278,"props":2997,"children":2999},{"className":2998},[],[3000],{"type":49,"value":3001},"reference\u002Fchatgpt\u002Ftranscripts\u002FNNN-slug.md",{"type":49,"value":3003},". Include a frontmatter description so the file is discoverable. Only use verbatim export when fidelity genuinely matters (exact decisions, nuanced technical context where summarizing would lose signal).",{"type":43,"tag":1967,"props":3005,"children":3007},{"id":3006},"ask-before-storing",[3008],{"type":49,"value":3009},"Ask before storing",{"type":43,"tag":65,"props":3011,"children":3012},{},[3013,3018],{"type":43,"tag":69,"props":3014,"children":3015},{},[3016],{"type":49,"value":3017},"Conversations focused on health\u002Fmental health specifics, intimate relationship dynamics, or financial details",{"type":43,"tag":69,"props":3019,"children":3020},{},[3021],{"type":49,"value":3022},"Conversations where the signal is genuinely ambiguous (might be useful, might be noise)",{"type":43,"tag":1967,"props":3024,"children":3026},{"id":3025},"dont-store",[3027],{"type":49,"value":3028},"Don't store",{"type":43,"tag":65,"props":3030,"children":3031},{},[3032,3037,3042],{"type":43,"tag":69,"props":3033,"children":3034},{},[3035],{"type":49,"value":3036},"Conversations already fully captured by memory blocks",{"type":43,"tag":69,"props":3038,"children":3039},{},[3040],{"type":49,"value":3041},"One-off tasks with no durable context",{"type":43,"tag":69,"props":3043,"children":3044},{},[3045],{"type":49,"value":3046},"Conversations that are mostly assistant output with little user input",{"type":43,"tag":1967,"props":3048,"children":3050},{"id":3049},"how-subagents-handle-transcripts",[3051],{"type":49,"value":3052},"How subagents handle transcripts",{"type":43,"tag":52,"props":3054,"children":3055},{},[3056,3058,3063],{"type":49,"value":3057},"Subagents should store transcripts during their mining pass, not report candidates back. The subagent prompt already assigns them ",{"type":43,"tag":278,"props":3059,"children":3061},{"className":3060},[],[3062],{"type":49,"value":1901},{"type":49,"value":3064}," as a write target. When a subagent encounters a high-signal conversation in its chunk, it should:",{"type":43,"tag":239,"props":3066,"children":3067},{},[3068,3079,3084],{"type":43,"tag":69,"props":3069,"children":3070},{},[3071,3073],{"type":49,"value":3072},"Write a summarized reference file to ",{"type":43,"tag":278,"props":3074,"children":3076},{"className":3075},[],[3077],{"type":49,"value":3078},"reference\u002Fchatgpt\u002Ftranscripts\u002FNNN-title-slug.md",{"type":43,"tag":69,"props":3080,"children":3081},{},[3082],{"type":49,"value":3083},"Note in its chunk summary that it preserved the transcript and why",{"type":43,"tag":69,"props":3085,"children":3086},{},[3087],{"type":49,"value":3088},"Continue mining",{"type":43,"tag":52,"props":3090,"children":3091},{},[3092,3094,3098],{"type":49,"value":3093},"The primary agent does ",{"type":43,"tag":123,"props":3095,"children":3096},{},[3097],{"type":49,"value":127},{"type":49,"value":3099}," need to approve each transcript. The subagent's judgment is sufficient for the \"store automatically\" category above.",{"type":43,"tag":1967,"props":3101,"children":3103},{"id":3102},"bulk-archival-export",[3104],{"type":49,"value":3105},"Bulk archival export",{"type":43,"tag":52,"props":3107,"children":3108},{},[3109,3111,3117],{"type":49,"value":3110},"For users who want maximum fidelity or a complete archival copy, use ",{"type":43,"tag":278,"props":3112,"children":3114},{"className":3113},[],[3115],{"type":49,"value":3116},"export-transcripts.py",{"type":49,"value":191},{"type":43,"tag":549,"props":3119,"children":3121},{"className":551,"code":3120,"language":553,"meta":554,"style":554},"python3 scripts\u002Fexport-transcripts.py \u003Cexport.zip> \\\n  --indexes 229,288 \\\n  --output-dir \u002Ftmp\u002Fchatgpt-transcripts \\\n  --skip-empty-hidden \\\n  --compact-nontext\n",[3122],{"type":43,"tag":278,"props":3123,"children":3124},{"__ignoreMap":554},[3125,3158,3175,3192,3204],{"type":43,"tag":560,"props":3126,"children":3127},{"class":562,"line":563},[3128,3132,3137,3141,3145,3149,3153],{"type":43,"tag":560,"props":3129,"children":3130},{"style":567},[3131],{"type":49,"value":1144},{"type":43,"tag":560,"props":3133,"children":3134},{"style":573},[3135],{"type":49,"value":3136}," scripts\u002Fexport-transcripts.py",{"type":43,"tag":560,"props":3138,"children":3139},{"style":579},[3140],{"type":49,"value":658},{"type":43,"tag":560,"props":3142,"children":3143},{"style":573},[3144],{"type":49,"value":1158},{"type":43,"tag":560,"props":3146,"children":3147},{"style":585},[3148],{"type":49,"value":52},{"type":43,"tag":560,"props":3150,"children":3151},{"style":579},[3152],{"type":49,"value":1105},{"type":43,"tag":560,"props":3154,"children":3155},{"style":585},[3156],{"type":49,"value":3157}," \\\n",{"type":43,"tag":560,"props":3159,"children":3160},{"class":562,"line":676},[3161,3166,3171],{"type":43,"tag":560,"props":3162,"children":3163},{"style":573},[3164],{"type":49,"value":3165},"  --indexes",{"type":43,"tag":560,"props":3167,"children":3168},{"style":573},[3169],{"type":49,"value":3170}," 229,288",{"type":43,"tag":560,"props":3172,"children":3173},{"style":585},[3174],{"type":49,"value":3157},{"type":43,"tag":560,"props":3176,"children":3177},{"class":562,"line":1217},[3178,3183,3188],{"type":43,"tag":560,"props":3179,"children":3180},{"style":573},[3181],{"type":49,"value":3182},"  --output-dir",{"type":43,"tag":560,"props":3184,"children":3185},{"style":573},[3186],{"type":49,"value":3187}," \u002Ftmp\u002Fchatgpt-transcripts",{"type":43,"tag":560,"props":3189,"children":3190},{"style":585},[3191],{"type":49,"value":3157},{"type":43,"tag":560,"props":3193,"children":3194},{"class":562,"line":2498},[3195,3200],{"type":43,"tag":560,"props":3196,"children":3197},{"style":573},[3198],{"type":49,"value":3199},"  --skip-empty-hidden",{"type":43,"tag":560,"props":3201,"children":3202},{"style":585},[3203],{"type":49,"value":3157},{"type":43,"tag":560,"props":3205,"children":3206},{"class":562,"line":2507},[3207],{"type":43,"tag":560,"props":3208,"children":3209},{"style":573},[3210],{"type":49,"value":3211},"  --compact-nontext\n",{"type":43,"tag":52,"props":3213,"children":3214},{},[3215],{"type":49,"value":3216},"This is a separate archival feature, not the default. Most imports should use the selective summarization pattern above.",{"type":43,"tag":58,"props":3218,"children":3220},{"id":3219},"hidden-context-to-watch-for",[3221],{"type":49,"value":3222},"Hidden context to watch for",{"type":43,"tag":52,"props":3224,"children":3225},{},[3226],{"type":49,"value":3227},"Recent ChatGPT exports often contain the clearest explicit memory in hidden system\u002Fcontext messages.",{"type":43,"tag":52,"props":3229,"children":3230},{},[3231],{"type":49,"value":3232},"High-signal fields:",{"type":43,"tag":65,"props":3234,"children":3235},{},[3236,3245,3254,3271],{"type":43,"tag":69,"props":3237,"children":3238},{},[3239],{"type":43,"tag":278,"props":3240,"children":3242},{"className":3241},[],[3243],{"type":49,"value":3244},"metadata.user_context_message_data.about_user_message",{"type":43,"tag":69,"props":3246,"children":3247},{},[3248],{"type":43,"tag":278,"props":3249,"children":3251},{"className":3250},[],[3252],{"type":49,"value":3253},"metadata.user_context_message_data.about_model_message",{"type":43,"tag":69,"props":3255,"children":3256},{},[3257,3263,3265],{"type":43,"tag":278,"props":3258,"children":3260},{"className":3259},[],[3261],{"type":49,"value":3262},"content.user_profile",{"type":49,"value":3264}," from ",{"type":43,"tag":278,"props":3266,"children":3268},{"className":3267},[],[3269],{"type":49,"value":3270},"user_editable_context",{"type":43,"tag":69,"props":3272,"children":3273},{},[3274,3280,3281],{"type":43,"tag":278,"props":3275,"children":3277},{"className":3276},[],[3278],{"type":49,"value":3279},"content.user_instructions",{"type":49,"value":3264},{"type":43,"tag":278,"props":3282,"children":3284},{"className":3283},[],[3285],{"type":49,"value":3270},{"type":43,"tag":52,"props":3287,"children":3288},{},[3289],{"type":49,"value":3290},"Important distinctions:",{"type":43,"tag":65,"props":3292,"children":3293},{},[3294,3299,3304],{"type":43,"tag":69,"props":3295,"children":3296},{},[3297],{"type":49,"value":3298},"the same saved-memory block may repeat across many conversations",{"type":43,"tag":69,"props":3300,"children":3301},{},[3302],{"type":49,"value":3303},"some hidden messages are runtime execution context, not durable memory",{"type":43,"tag":69,"props":3305,"children":3306},{},[3307,3309,3315,3317,3323],{"type":49,"value":3308},"account metadata from ",{"type":43,"tag":278,"props":3310,"children":3312},{"className":3311},[],[3313],{"type":49,"value":3314},"user.json",{"type":49,"value":3316}," \u002F ",{"type":43,"tag":278,"props":3318,"children":3320},{"className":3319},[],[3321],{"type":49,"value":3322},"user_settings.json",{"type":49,"value":3324}," is usually audit material, not active memory (note: no script currently extracts from these files — inspect manually if needed)",{"type":43,"tag":52,"props":3326,"children":3327},{},[3328],{"type":49,"value":3329},"Examples of runtime-only context:",{"type":43,"tag":65,"props":3331,"children":3332},{},[3333,3338,3343,3348],{"type":43,"tag":69,"props":3334,"children":3335},{},[3336],{"type":49,"value":3337},"current date",{"type":43,"tag":69,"props":3339,"children":3340},{},[3341],{"type":49,"value":3342},"current timezone",{"type":43,"tag":69,"props":3344,"children":3345},{},[3346],{"type":49,"value":3347},"current location",{"type":43,"tag":69,"props":3349,"children":3350},{},[3351],{"type":49,"value":3352},"temporary recency instructions tied to a specific export moment",{"type":43,"tag":52,"props":3354,"children":3355},{},[3356],{"type":49,"value":3357},"Examples of durable collaboration context:",{"type":43,"tag":65,"props":3359,"children":3360},{},[3361,3366,3371,3376],{"type":43,"tag":69,"props":3362,"children":3363},{},[3364],{"type":49,"value":3365},"directness \u002F brevity preferences",{"type":43,"tag":69,"props":3367,"children":3368},{},[3369],{"type":49,"value":3370},"formatting preferences",{"type":43,"tag":69,"props":3372,"children":3373},{},[3374],{"type":49,"value":3375},"search-first instructions for current events",{"type":43,"tag":69,"props":3377,"children":3378},{},[3379],{"type":49,"value":3380},"anti-sycophancy or anti-pedantry preferences",{"type":43,"tag":58,"props":3382,"children":3384},{"id":3383},"what-belongs-where",[3385],{"type":49,"value":3386},"What belongs where",{"type":43,"tag":313,"props":3388,"children":3390},{"id":3389},"active-memory",[3391],{"type":49,"value":3392},"Active memory",{"type":43,"tag":52,"props":3394,"children":3395},{},[3396],{"type":49,"value":3397},"Good candidates:",{"type":43,"tag":65,"props":3399,"children":3400},{},[3401,3406,3411,3416,3421],{"type":43,"tag":69,"props":3402,"children":3403},{},[3404],{"type":49,"value":3405},"stable identity facts",{"type":43,"tag":69,"props":3407,"children":3408},{},[3409],{"type":49,"value":3410},"current role \u002F recurring project context",{"type":43,"tag":69,"props":3412,"children":3413},{},[3414],{"type":49,"value":3415},"durable response preferences",{"type":43,"tag":69,"props":3417,"children":3418},{},[3419],{"type":49,"value":3420},"durable collaboration preferences",{"type":43,"tag":69,"props":3422,"children":3423},{},[3424],{"type":49,"value":3425},"long-lived tool\u002Fworkflow preferences",{"type":43,"tag":313,"props":3427,"children":3429},{"id":3428},"progressive-memory",[3430],{"type":49,"value":3431},"Progressive memory",{"type":43,"tag":52,"props":3433,"children":3434},{},[3435],{"type":49,"value":3397},{"type":43,"tag":65,"props":3437,"children":3438},{},[3439,3444,3449,3454],{"type":43,"tag":69,"props":3440,"children":3441},{},[3442],{"type":49,"value":3443},"historical roles or project arcs",{"type":43,"tag":69,"props":3445,"children":3446},{},[3447],{"type":49,"value":3448},"previous versions of ChatGPT saved memory",{"type":43,"tag":69,"props":3450,"children":3451},{},[3452],{"type":49,"value":3453},"older but still useful background context",{"type":43,"tag":69,"props":3455,"children":3456},{},[3457],{"type":49,"value":3458},"selected transcript exports for fidelity \u002F auditability",{"type":43,"tag":313,"props":3460,"children":3462},{"id":3461},"store-by-default",[3463],{"type":49,"value":3464},"Store by default",{"type":43,"tag":52,"props":3466,"children":3467},{},[3468],{"type":49,"value":3469},"Personal details are part of knowing the user. Store them:",{"type":43,"tag":65,"props":3471,"children":3472},{},[3473,3478,3483,3488,3493],{"type":43,"tag":69,"props":3474,"children":3475},{},[3476],{"type":49,"value":3477},"family members' names, pets, hobbies, interests",{"type":43,"tag":69,"props":3479,"children":3480},{},[3481],{"type":49,"value":3482},"life circumstances, where they live, background",{"type":43,"tag":69,"props":3484,"children":3485},{},[3486],{"type":49,"value":3487},"personality traits, communication style",{"type":43,"tag":69,"props":3489,"children":3490},{},[3491],{"type":49,"value":3492},"personal projects, side interests, goals",{"type":43,"tag":69,"props":3494,"children":3495},{},[3496],{"type":49,"value":3497},"relationship status, partner's name (the fact of it, not the dynamics)",{"type":43,"tag":52,"props":3499,"children":3500},{},[3501],{"type":49,"value":3502},"The user imported their ChatGPT memory because they want to be known. Don't exclude context they expected the agent to have.",{"type":43,"tag":313,"props":3504,"children":3506},{"id":3505},"ask-before-storing-1",[3507],{"type":49,"value":3009},{"type":43,"tag":52,"props":3509,"children":3510},{},[3511],{"type":49,"value":3512},"Stop and confirm only for material with real consequences if mishandled:",{"type":43,"tag":65,"props":3514,"children":3515},{},[3516,3526,3536,3546],{"type":43,"tag":69,"props":3517,"children":3518},{},[3519,3524],{"type":43,"tag":123,"props":3520,"children":3521},{},[3522],{"type":49,"value":3523},"Health\u002Fmental health specifics",{"type":49,"value":3525}," — diagnosis, medication, treatment details (not \"handle sensitively\" flags, which are fine to store)",{"type":43,"tag":69,"props":3527,"children":3528},{},[3529,3534],{"type":43,"tag":123,"props":3530,"children":3531},{},[3532],{"type":49,"value":3533},"Intimate relationship dynamics",{"type":49,"value":3535}," — not \"has a partner named X\" but conflict details, emotional specifics",{"type":43,"tag":69,"props":3537,"children":3538},{},[3539,3544],{"type":43,"tag":123,"props":3540,"children":3541},{},[3542],{"type":49,"value":3543},"Financial specifics",{"type":49,"value":3545}," — debt, income, specific amounts",{"type":43,"tag":69,"props":3547,"children":3548},{},[3549,3553],{"type":43,"tag":123,"props":3550,"children":3551},{},[3552],{"type":49,"value":1535},{"type":49,"value":3554}," where the current truth is unclear",{"type":43,"tag":52,"props":3556,"children":3557},{},[3558],{"type":49,"value":3559},"The intake question about sensitivity (\"anything I should avoid storing?\") is the user's chance to set boundaries. If they don't flag anything, store personal details by default.",{"type":43,"tag":58,"props":3561,"children":3563},{"id":3562},"parallel-mining-with-subagents",[3564],{"type":49,"value":3565},"Parallel mining with subagents",{"type":43,"tag":52,"props":3567,"children":3568},{},[3569,3571,3576],{"type":49,"value":3570},"For archives of ",{"type":43,"tag":123,"props":3572,"children":3573},{},[3574],{"type":49,"value":3575},"50+ conversations",{"type":49,"value":3577},", use chunk-based parallel mining instead of processing everything sequentially. This is the default enrichment strategy for non-trivial archives.",{"type":43,"tag":313,"props":3579,"children":3581},{"id":3580},"how-it-works",[3582],{"type":49,"value":3583},"How it works",{"type":43,"tag":239,"props":3585,"children":3586},{},[3587,3597,3606,3623,3691],{"type":43,"tag":69,"props":3588,"children":3589},{},[3590,3595],{"type":43,"tag":123,"props":3591,"children":3592},{},[3593],{"type":49,"value":3594},"Primary agent",{"type":49,"value":3596}," handles the explicit saved-memory clone (steps 0–3 of the workflow)",{"type":43,"tag":69,"props":3598,"children":3599},{},[3600,3604],{"type":43,"tag":123,"props":3601,"children":3602},{},[3603],{"type":49,"value":3594},{"type":49,"value":3605}," partitions the remaining archive into chunks of ~30–50 conversations",{"type":43,"tag":69,"props":3607,"children":3608},{},[3609,3613,3615,3621],{"type":43,"tag":123,"props":3610,"children":3611},{},[3612],{"type":49,"value":3594},{"type":49,"value":3614}," dispatches one ",{"type":43,"tag":278,"props":3616,"children":3618},{"className":3617},[],[3619],{"type":49,"value":3620},"general-purpose",{"type":49,"value":3622}," subagent per chunk",{"type":43,"tag":69,"props":3624,"children":3625},{},[3626,3631,3633],{"type":43,"tag":123,"props":3627,"children":3628},{},[3629],{"type":49,"value":3630},"Each subagent",{"type":49,"value":3632},":\n",{"type":43,"tag":65,"props":3634,"children":3635},{},[3636,3657,3662,3674,3686],{"type":43,"tag":69,"props":3637,"children":3638},{},[3639,3641,3647,3649,3655],{"type":49,"value":3640},"Renders its assigned conversations using ",{"type":43,"tag":278,"props":3642,"children":3644},{"className":3643},[],[3645],{"type":49,"value":3646},"render-range.py",{"type":49,"value":3648}," or individual ",{"type":43,"tag":278,"props":3650,"children":3652},{"className":3651},[],[3653],{"type":49,"value":3654},"render-conversation.py",{"type":49,"value":3656}," calls",{"type":43,"tag":69,"props":3658,"children":3659},{},[3660],{"type":49,"value":3661},"Extracts durable facts, preferences, project context, and retractions",{"type":43,"tag":69,"props":3663,"children":3664},{},[3665,3667,3673],{"type":49,"value":3666},"Writes findings directly to its assigned memory path (e.g. ",{"type":43,"tag":278,"props":3668,"children":3670},{"className":3669},[],[3671],{"type":49,"value":3672},"reference\u002Fchatgpt\u002Fmining\u002Fchunk-NNN.md",{"type":49,"value":754},{"type":43,"tag":69,"props":3675,"children":3676},{},[3677,3679,3684],{"type":49,"value":3678},"May write curated transcripts to ",{"type":43,"tag":278,"props":3680,"children":3682},{"className":3681},[],[3683],{"type":49,"value":1901},{"type":49,"value":3685}," if warranted",{"type":43,"tag":69,"props":3687,"children":3688},{},[3689],{"type":49,"value":3690},"Returns a summary separating safe-to-promote and proposal-only findings",{"type":43,"tag":69,"props":3692,"children":3693},{},[3694,3698,3699],{"type":43,"tag":123,"props":3695,"children":3696},{},[3697],{"type":49,"value":3594},{"type":49,"value":3632},{"type":43,"tag":65,"props":3700,"children":3701},{},[3702,3713,3723,3728],{"type":43,"tag":69,"props":3703,"children":3704},{},[3705,3707],{"type":49,"value":3706},"Reads all chunk summaries from ",{"type":43,"tag":278,"props":3708,"children":3710},{"className":3709},[],[3711],{"type":49,"value":3712},"reference\u002Fchatgpt\u002Fmining\u002F",{"type":43,"tag":69,"props":3714,"children":3715},{},[3716,3718],{"type":49,"value":3717},"Merges high-confidence findings into ",{"type":43,"tag":278,"props":3719,"children":3721},{"className":3720},[],[3722],{"type":49,"value":752},{"type":43,"tag":69,"props":3724,"children":3725},{},[3726],{"type":49,"value":3727},"Resolves contradictions across chunks",{"type":43,"tag":69,"props":3729,"children":3730},{},[3731,3733,3738],{"type":49,"value":3732},"Runs ",{"type":43,"tag":278,"props":3734,"children":3736},{"className":3735},[],[3737],{"type":49,"value":283},{"type":49,"value":3739}," to validate the resulting memory structure",{"type":43,"tag":313,"props":3741,"children":3743},{"id":3742},"subagent-design-rules",[3744],{"type":49,"value":3745},"Subagent design rules",{"type":43,"tag":65,"props":3747,"children":3748},{},[3749,3759,3769,3785,3795,3818,3839,3876],{"type":43,"tag":69,"props":3750,"children":3751},{},[3752,3757],{"type":43,"tag":123,"props":3753,"children":3754},{},[3755],{"type":49,"value":3756},"Give each subagent the full script paths",{"type":49,"value":3758}," — they don't inherit your skill knowledge",{"type":43,"tag":69,"props":3760,"children":3761},{},[3762,3767],{"type":43,"tag":123,"props":3763,"children":3764},{},[3765],{"type":49,"value":3766},"Limit scope to 30–50 conversations per subagent",{"type":49,"value":3768}," — more risks context overflow or timeouts",{"type":43,"tag":69,"props":3770,"children":3771},{},[3772,3783],{"type":43,"tag":123,"props":3773,"children":3774},{},[3775,3776,3781],{"type":49,"value":1288},{"type":43,"tag":278,"props":3777,"children":3779},{"className":3778},[],[3780],{"type":49,"value":3620},{"type":49,"value":3782}," subagent type",{"type":49,"value":3784}," — these subagents need to run scripts via Bash",{"type":43,"tag":69,"props":3786,"children":3787},{},[3788,3793],{"type":43,"tag":123,"props":3789,"children":3790},{},[3791],{"type":49,"value":3792},"Partition output paths up front",{"type":49,"value":3794}," — each subagent owns a non-overlapping destination",{"type":43,"tag":69,"props":3796,"children":3797},{},[3798,3803,3805,3810,3811,3816],{"type":43,"tag":123,"props":3799,"children":3800},{},[3801],{"type":49,"value":3802},"Allow direct progressive-memory writes",{"type":49,"value":3804}," — subagents write to ",{"type":43,"tag":278,"props":3806,"children":3808},{"className":3807},[],[3809],{"type":49,"value":3672},{"type":49,"value":1814},{"type":43,"tag":278,"props":3812,"children":3814},{"className":3813},[],[3815],{"type":49,"value":1901},{"type":49,"value":3817}," directly",{"type":43,"tag":69,"props":3819,"children":3820},{},[3821,3826,3828,3833,3834],{"type":43,"tag":123,"props":3822,"children":3823},{},[3824],{"type":49,"value":3825},"Keep active-memory writes coordinated",{"type":49,"value":3827}," — only the primary agent merges into ",{"type":43,"tag":278,"props":3829,"children":3831},{"className":3830},[],[3832],{"type":49,"value":752},{"type":49,"value":3316},{"type":43,"tag":278,"props":3835,"children":3837},{"className":3836},[],[3838],{"type":49,"value":1632},{"type":43,"tag":69,"props":3840,"children":3841},{},[3842,3847,3849,3854,3856,3861,3863,3868,3870],{"type":43,"tag":123,"props":3843,"children":3844},{},[3845],{"type":49,"value":3846},"Subagents must not modify existing memory files",{"type":49,"value":3848}," — they create new files only (",{"type":43,"tag":278,"props":3850,"children":3852},{"className":3851},[],[3853],{"type":49,"value":3672},{"type":49,"value":3855},", ",{"type":43,"tag":278,"props":3857,"children":3859},{"className":3858},[],[3860],{"type":49,"value":3001},{"type":49,"value":3862},"). They must never read, edit, or overwrite anything in ",{"type":43,"tag":278,"props":3864,"children":3866},{"className":3865},[],[3867],{"type":49,"value":1787},{"type":49,"value":3869}," or any pre-existing file in ",{"type":43,"tag":278,"props":3871,"children":3873},{"className":3872},[],[3874],{"type":49,"value":3875},"reference\u002F",{"type":43,"tag":69,"props":3877,"children":3878},{},[3879,3884,3886,3892,3894,3899],{"type":43,"tag":123,"props":3880,"children":3881},{},[3882],{"type":49,"value":3883},"Always provide a fallback plan",{"type":49,"value":3885}," — if a subagent fails, mine its chunk directly using ",{"type":43,"tag":278,"props":3887,"children":3889},{"className":3888},[],[3890],{"type":49,"value":3891},"list-conversations.py --title-contains",{"type":49,"value":3893}," followed by targeted ",{"type":43,"tag":278,"props":3895,"children":3897},{"className":3896},[],[3898],{"type":49,"value":3654},{"type":49,"value":3656},{"type":43,"tag":313,"props":3901,"children":3903},{"id":3902},"subagent-prompt-template",[3904],{"type":49,"value":3905},"Subagent prompt template",{"type":43,"tag":52,"props":3907,"children":3908},{},[3909],{"type":49,"value":3910},"Keep it compact. The subagent needs: export path, script paths, chunk range, output paths, and what to extract. Everything else is overhead.",{"type":43,"tag":549,"props":3912,"children":3915},{"className":3913,"code":3914,"language":49},[1733],"Mine conversations [START]-[END] from [EXPORT_PATH] for durable memory.\n\nRender: python3 [SCRIPTS_DIR]\u002Frender-range.py \"[EXPORT_PATH]\" --start-index [START] --end-index [END] --output-dir \u002Ftmp\u002Fchatgpt-chunk-[N] --skip-empty-hidden --compact-nontext --skip-thoughts --progress\n\nRead each rendered conversation. Extract: user facts, project\u002Fwork context, collaboration preferences, explicit retractions (\"forget this\", \"no longer\", \"not doing\").\n\nWrite findings to [MEMORY_DIR]\u002Freference\u002Fchatgpt\u002Fmining\u002Fchunk-[NNN].md with sections:\n- Safe to promote (high-confidence, explicit, current, low-sensitivity)\n- Proposal only (historical, uncertain, sensitive, contradictory)\n- Retractions (older context the user said to forget)\n\nHigh-signal conversations (career transitions, deep technical design, detailed project context, explicit preference discussions) → summarize into [MEMORY_DIR]\u002Freference\u002Fchatgpt\u002Ftranscripts\u002FNNN-title-slug.md. Do this during mining, not after. Use 2-5 paragraph summaries, not verbatim transcripts. Include frontmatter with a description.\n\nIMPORTANT: Only create NEW files. Do not read, edit, or overwrite any existing files in the memory directory. Do not touch system\u002F.\n",[3916],{"type":43,"tag":278,"props":3917,"children":3918},{"__ignoreMap":554},[3919],{"type":49,"value":3914},{"type":43,"tag":313,"props":3921,"children":3923},{"id":3922},"when-subagents-fail",[3924],{"type":49,"value":3925},"When subagents fail",{"type":43,"tag":52,"props":3927,"children":3928},{},[3929],{"type":49,"value":3930},"Subagents can fail silently due to timeouts or context limits. If a mining subagent fails:",{"type":43,"tag":239,"props":3932,"children":3933},{},[3934,3939,3950,3955],{"type":43,"tag":69,"props":3935,"children":3936},{},[3937],{"type":49,"value":3938},"Don't retry with the same broad scope",{"type":43,"tag":69,"props":3940,"children":3941},{},[3942,3943,3948],{"type":49,"value":1288},{"type":43,"tag":278,"props":3944,"children":3946},{"className":3945},[],[3947],{"type":49,"value":3891},{"type":49,"value":3949}," directly to find relevant conversations",{"type":43,"tag":69,"props":3951,"children":3952},{},[3953],{"type":49,"value":3954},"Render 3–5 of the highest-signal ones yourself",{"type":43,"tag":69,"props":3956,"children":3957},{},[3958],{"type":49,"value":3959},"Extract what you can — partial coverage is fine",{"type":43,"tag":58,"props":3961,"children":3963},{"id":3962},"scripts",[3964],{"type":49,"value":3965},"Scripts",{"type":43,"tag":313,"props":3967,"children":3969},{"id":3968},"scriptslist-conversationspy",[3970],{"type":43,"tag":278,"props":3971,"children":3973},{"className":3972},[],[3974],{"type":49,"value":3975},"scripts\u002Flist-conversations.py",{"type":43,"tag":52,"props":3977,"children":3978},{},[3979],{"type":49,"value":3980},"Use for archive inventory.",{"type":43,"tag":52,"props":3982,"children":3983},{},[3984],{"type":49,"value":3985},"Key features:",{"type":43,"tag":65,"props":3987,"children":3988},{},[3989,3994,3999,4010],{"type":43,"tag":69,"props":3990,"children":3991},{},[3992],{"type":49,"value":3993},"list by global index",{"type":43,"tag":69,"props":3995,"children":3996},{},[3997],{"type":49,"value":3998},"sort by hidden-context count",{"type":43,"tag":69,"props":4000,"children":4001},{},[4002,4004],{"type":49,"value":4003},"filter with ",{"type":43,"tag":278,"props":4005,"children":4007},{"className":4006},[],[4008],{"type":49,"value":4009},"--min-hidden",{"type":43,"tag":69,"props":4011,"children":4012},{},[4013],{"type":49,"value":4014},"emit JSON for agent workflows",{"type":43,"tag":313,"props":4016,"children":4018},{"id":4017},"scriptsextract-saved-memorypy",[4019],{"type":43,"tag":278,"props":4020,"children":4022},{"className":4021},[],[4023],{"type":49,"value":4024},"scripts\u002Fextract-saved-memory.py",{"type":43,"tag":52,"props":4026,"children":4027},{},[4028],{"type":49,"value":4029},"Use when you need the raw extraction JSON (e.g. for subagent dispatch or audit).",{"type":43,"tag":52,"props":4031,"children":4032},{},[4033],{"type":49,"value":4034},"It extracts and deduplicates:",{"type":43,"tag":65,"props":4036,"children":4037},{},[4038,4046,4054,4062],{"type":43,"tag":69,"props":4039,"children":4040},{},[4041],{"type":43,"tag":278,"props":4042,"children":4044},{"className":4043},[],[4045],{"type":49,"value":1462},{"type":43,"tag":69,"props":4047,"children":4048},{},[4049],{"type":43,"tag":278,"props":4050,"children":4052},{"className":4051},[],[4053],{"type":49,"value":1471},{"type":43,"tag":69,"props":4055,"children":4056},{},[4057],{"type":43,"tag":278,"props":4058,"children":4060},{"className":4059},[],[4061],{"type":49,"value":1480},{"type":43,"tag":69,"props":4063,"children":4064},{},[4065],{"type":43,"tag":278,"props":4066,"children":4068},{"className":4067},[],[4069],{"type":49,"value":1489},{"type":43,"tag":52,"props":4071,"children":4072},{},[4073],{"type":49,"value":4074},"It also reports first\u002Flast seen timestamps and source samples.",{"type":43,"tag":52,"props":4076,"children":4077},{},[4078],{"type":49,"value":4079},"Supports:",{"type":43,"tag":65,"props":4081,"children":4082},{},[4083,4091,4100],{"type":43,"tag":69,"props":4084,"children":4085},{},[4086],{"type":43,"tag":278,"props":4087,"children":4089},{"className":4088},[],[4090],{"type":49,"value":1278},{"type":43,"tag":69,"props":4092,"children":4093},{},[4094],{"type":43,"tag":278,"props":4095,"children":4097},{"className":4096},[],[4098],{"type":49,"value":4099},"--output",{"type":43,"tag":69,"props":4101,"children":4102},{},[4103],{"type":43,"tag":278,"props":4104,"children":4106},{"className":4105},[],[4107],{"type":49,"value":882},{"type":43,"tag":313,"props":4109,"children":4111},{"id":4110},"scriptsbuild-memory-previewpy",[4112],{"type":43,"tag":278,"props":4113,"children":4115},{"className":4114},[],[4116],{"type":49,"value":4117},"scripts\u002Fbuild-memory-preview.py",{"type":43,"tag":52,"props":4119,"children":4120},{},[4121,4123,4128],{"type":49,"value":4122},"The primary extraction + categorisation tool. Accepts either a zip file (runs extraction internally) or the JSON output from ",{"type":43,"tag":278,"props":4124,"children":4126},{"className":4125},[],[4127],{"type":49,"value":1548},{"type":49,"value":1641},{"type":43,"tag":52,"props":4130,"children":4131},{},[4132],{"type":49,"value":4133},"It separates:",{"type":43,"tag":65,"props":4135,"children":4136},{},[4137,4142,4147,4152],{"type":43,"tag":69,"props":4138,"children":4139},{},[4140],{"type":49,"value":4141},"likely active-memory candidates",{"type":43,"tag":69,"props":4143,"children":4144},{},[4145],{"type":49,"value":4146},"historical\u002Fprogressive-memory candidates",{"type":43,"tag":69,"props":4148,"children":4149},{},[4150],{"type":49,"value":4151},"runtime-only context",{"type":43,"tag":69,"props":4153,"children":4154},{},[4155],{"type":49,"value":4156},"contradictions \u002F review items",{"type":43,"tag":52,"props":4158,"children":4159},{},[4160],{"type":49,"value":4079},{"type":43,"tag":65,"props":4162,"children":4163},{},[4164,4172,4180,4188,4193],{"type":43,"tag":69,"props":4165,"children":4166},{},[4167],{"type":43,"tag":278,"props":4168,"children":4170},{"className":4169},[],[4171],{"type":49,"value":1278},{"type":43,"tag":69,"props":4173,"children":4174},{},[4175],{"type":43,"tag":278,"props":4176,"children":4178},{"className":4177},[],[4179],{"type":49,"value":4099},{"type":43,"tag":69,"props":4181,"children":4182},{},[4183],{"type":43,"tag":278,"props":4184,"children":4186},{"className":4185},[],[4187],{"type":49,"value":882},{"type":43,"tag":69,"props":4189,"children":4190},{},[4191],{"type":49,"value":4192},"Direct zip input (one-step: extract + preview)",{"type":43,"tag":69,"props":4194,"children":4195},{},[4196],{"type":49,"value":4197},"JSON input (two-step: preview from existing extraction)",{"type":43,"tag":313,"props":4199,"children":4201},{"id":4200},"scriptsrender-conversationpy",[4202],{"type":43,"tag":278,"props":4203,"children":4205},{"className":4204},[],[4206],{"type":49,"value":4207},"scripts\u002Frender-conversation.py",{"type":43,"tag":52,"props":4209,"children":4210},{},[4211],{"type":49,"value":4212},"Use for deep review of one conversation. Efficiently streams to the target conversation instead of loading the entire archive.",{"type":43,"tag":52,"props":4214,"children":4215},{},[4216],{"type":49,"value":4217},"Useful mining flags:",{"type":43,"tag":65,"props":4219,"children":4220},{},[4221,4230,4239,4248],{"type":43,"tag":69,"props":4222,"children":4223},{},[4224],{"type":43,"tag":278,"props":4225,"children":4227},{"className":4226},[],[4228],{"type":49,"value":4229},"--skip-thoughts",{"type":43,"tag":69,"props":4231,"children":4232},{},[4233],{"type":43,"tag":278,"props":4234,"children":4236},{"className":4235},[],[4237],{"type":49,"value":4238},"--skip-empty-tool-messages",{"type":43,"tag":69,"props":4240,"children":4241},{},[4242],{"type":43,"tag":278,"props":4243,"children":4245},{"className":4244},[],[4246],{"type":49,"value":4247},"--user-only",{"type":43,"tag":69,"props":4249,"children":4250},{},[4251],{"type":43,"tag":278,"props":4252,"children":4254},{"className":4253},[],[4255],{"type":49,"value":4256},"--assistant-only",{"type":43,"tag":313,"props":4258,"children":4260},{"id":4259},"scriptsrender-rangepy",[4261],{"type":43,"tag":278,"props":4262,"children":4264},{"className":4263},[],[4265],{"type":49,"value":4266},"scripts\u002Frender-range.py",{"type":43,"tag":52,"props":4268,"children":4269},{},[4270],{"type":49,"value":4271},"Use for batch rendering during archive enrichment. Opens the zip once and renders all conversations in-process — no subprocess per conversation.",{"type":43,"tag":52,"props":4273,"children":4274},{},[4275],{"type":49,"value":4079},{"type":43,"tag":65,"props":4277,"children":4278},{},[4279,4298,4308],{"type":43,"tag":69,"props":4280,"children":4281},{},[4282,4288,4290,4296],{"type":43,"tag":278,"props":4283,"children":4285},{"className":4284},[],[4286],{"type":49,"value":4287},"--output-dir",{"type":49,"value":4289}," (one file per conversation) or ",{"type":43,"tag":278,"props":4291,"children":4293},{"className":4292},[],[4294],{"type":49,"value":4295},"--concat-output",{"type":49,"value":4297}," (single file)",{"type":43,"tag":69,"props":4299,"children":4300},{},[4301,4306],{"type":43,"tag":278,"props":4302,"children":4304},{"className":4303},[],[4305],{"type":49,"value":882},{"type":49,"value":4307}," (prints rendering progress to stderr)",{"type":43,"tag":69,"props":4309,"children":4310},{},[4311,4313],{"type":49,"value":4312},"Same noise-reduction flags as ",{"type":43,"tag":278,"props":4314,"children":4316},{"className":4315},[],[4317],{"type":49,"value":3654},{"type":43,"tag":313,"props":4319,"children":4321},{"id":4320},"scriptssearch-conversationspy",[4322],{"type":43,"tag":278,"props":4323,"children":4325},{"className":4324},[],[4326],{"type":49,"value":4327},"scripts\u002Fsearch-conversations.py",{"type":43,"tag":52,"props":4329,"children":4330},{},[4331],{"type":49,"value":4332},"Use when title search is not enough.",{"type":43,"tag":52,"props":4334,"children":4335},{},[4336],{"type":49,"value":4337},"Good fits:",{"type":43,"tag":65,"props":4339,"children":4340},{},[4341,4346,4351,4356],{"type":43,"tag":69,"props":4342,"children":4343},{},[4344],{"type":49,"value":4345},"stale-context \u002F retraction sweeps",{"type":43,"tag":69,"props":4347,"children":4348},{},[4349],{"type":49,"value":4350},"finding buried project mentions inside generic titles",{"type":43,"tag":69,"props":4352,"children":4353},{},[4354],{"type":49,"value":4355},"locating \"forget this\" \u002F \"not doing this anymore\" corrections",{"type":43,"tag":69,"props":4357,"children":4358},{},[4359],{"type":49,"value":4360},"searching for specific phrases before choosing which conversations to render",{"type":43,"tag":52,"props":4362,"children":4363},{},[4364],{"type":49,"value":4079},{"type":43,"tag":65,"props":4366,"children":4367},{},[4368,4379,4389],{"type":43,"tag":69,"props":4369,"children":4370},{},[4371,4377],{"type":43,"tag":278,"props":4372,"children":4374},{"className":4373},[],[4375],{"type":49,"value":4376},"--role user|assistant|tool|system",{"type":49,"value":4378}," — filter which message roles to search (repeatable)",{"type":43,"tag":69,"props":4380,"children":4381},{},[4382,4387],{"type":43,"tag":278,"props":4383,"children":4385},{"className":4384},[],[4386],{"type":49,"value":882},{"type":49,"value":4388}," — print search progress to stderr",{"type":43,"tag":69,"props":4390,"children":4391},{},[4392],{"type":43,"tag":278,"props":4393,"children":4395},{"className":4394},[],[4396],{"type":49,"value":1278},{"type":43,"tag":313,"props":4398,"children":4400},{"id":4399},"scriptsexport-transcriptspy",[4401],{"type":43,"tag":278,"props":4402,"children":4404},{"className":4403},[],[4405],{"type":49,"value":4406},"scripts\u002Fexport-transcripts.py",{"type":43,"tag":52,"props":4408,"children":4409},{},[4410],{"type":49,"value":4411},"Use for optional high-fidelity archival exports.",{"type":43,"tag":52,"props":4413,"children":4414},{},[4415],{"type":49,"value":4079},{"type":43,"tag":65,"props":4417,"children":4418},{},[4419,4424,4429,4434],{"type":43,"tag":69,"props":4420,"children":4421},{},[4422],{"type":49,"value":4423},"selected indexes or ranges",{"type":43,"tag":69,"props":4425,"children":4426},{},[4427],{"type":49,"value":4428},"transcript chunking",{"type":43,"tag":69,"props":4430,"children":4431},{},[4432],{"type":49,"value":4433},"optional memory-style frontmatter",{"type":43,"tag":69,"props":4435,"children":4436},{},[4437],{"type":49,"value":4438},"a generated transcript index file",{"type":43,"tag":58,"props":4440,"children":4442},{"id":4441},"final-user-facing-summary",[4443],{"type":49,"value":4444},"Final user-facing summary",{"type":43,"tag":52,"props":4446,"children":4447},{},[4448,4450,4455],{"type":49,"value":4449},"At the end of a run, lead with a ",{"type":43,"tag":123,"props":4451,"children":4452},{},[4453],{"type":49,"value":4454},"narrative snapshot",{"type":49,"value":4456}," — a short, natural-language paragraph of what you now know about the user. This is more engaging than a categorical list and lets the user immediately see whether the import landed correctly.",{"type":43,"tag":52,"props":4458,"children":4459},{},[4460],{"type":49,"value":4461},"Then follow with the structured breakdown:",{"type":43,"tag":239,"props":4463,"children":4464},{},[4465,4475,4485,4500,4515,4523,4531,4539],{"type":43,"tag":69,"props":4466,"children":4467},{},[4468,4473],{"type":43,"tag":123,"props":4469,"children":4470},{},[4471],{"type":49,"value":4472},"Snapshot",{"type":49,"value":4474}," — \"Here's what I know about you now\" in 3–5 sentences, written as if you're introducing yourself to future-you",{"type":43,"tag":69,"props":4476,"children":4477},{},[4478,4483],{"type":43,"tag":123,"props":4479,"children":4480},{},[4481],{"type":49,"value":4482},"What ChatGPT explicitly remembered",{"type":49,"value":4484}," — the raw saved-memory fields",{"type":43,"tag":69,"props":4486,"children":4487},{},[4488,4493,4495],{"type":43,"tag":123,"props":4489,"children":4490},{},[4491],{"type":49,"value":4492},"What got cloned into active Letta memory",{"type":49,"value":4494}," — what's now in ",{"type":43,"tag":278,"props":4496,"children":4498},{"className":4497},[],[4499],{"type":49,"value":1787},{"type":43,"tag":69,"props":4501,"children":4502},{},[4503,4508,4510],{"type":43,"tag":123,"props":4504,"children":4505},{},[4506],{"type":49,"value":4507},"What was preserved as progressive memory",{"type":49,"value":4509}," — what's in ",{"type":43,"tag":278,"props":4511,"children":4513},{"className":4512},[],[4514],{"type":49,"value":765},{"type":43,"tag":69,"props":4516,"children":4517},{},[4518],{"type":43,"tag":123,"props":4519,"children":4520},{},[4521],{"type":49,"value":4522},"What was excluded and why",{"type":43,"tag":69,"props":4524,"children":4525},{},[4526],{"type":43,"tag":123,"props":4527,"children":4528},{},[4529],{"type":49,"value":4530},"What still needs confirmation",{"type":43,"tag":69,"props":4532,"children":4533},{},[4534],{"type":43,"tag":123,"props":4535,"children":4536},{},[4537],{"type":49,"value":4538},"Results of the \u002Fdoctor validation",{"type":43,"tag":69,"props":4540,"children":4541},{},[4542,4547,4549,4555],{"type":43,"tag":123,"props":4543,"children":4544},{},[4545],{"type":49,"value":4546},"Rollback info",{"type":49,"value":4548}," — start commit, end commit, and how to undo: \"If you want to undo the import, I can reset your memory to ",{"type":43,"tag":278,"props":4550,"children":4552},{"className":4551},[],[4553],{"type":49,"value":4554},"\u003Cstart-commit>",{"type":49,"value":4556},".\"",{"type":43,"tag":52,"props":4558,"children":4559},{},[4560],{"type":49,"value":4561},"The snapshot is the part the user actually reads. The rollback info is the safety net.",{"type":43,"tag":58,"props":4563,"children":4565},{"id":4564},"export-structure-reference",[4566],{"type":49,"value":4567},"Export structure reference",{"type":43,"tag":52,"props":4569,"children":4570},{},[4571],{"type":49,"value":4572},"A ChatGPT export zip typically contains:",{"type":43,"tag":65,"props":4574,"children":4575},{},[4576,4594,4603,4619,4628],{"type":43,"tag":69,"props":4577,"children":4578},{},[4579,4585,4586,4592],{"type":43,"tag":278,"props":4580,"children":4582},{"className":4581},[],[4583],{"type":49,"value":4584},"conversations-000.json",{"type":49,"value":3855},{"type":43,"tag":278,"props":4587,"children":4589},{"className":4588},[],[4590],{"type":49,"value":4591},"conversations-001.json",{"type":49,"value":4593},", etc. (sharded conversation history)",{"type":43,"tag":69,"props":4595,"children":4596},{},[4597],{"type":43,"tag":278,"props":4598,"children":4600},{"className":4599},[],[4601],{"type":49,"value":4602},"shared_conversations.json",{"type":43,"tag":69,"props":4604,"children":4605},{},[4606,4611,4612,4617],{"type":43,"tag":278,"props":4607,"children":4609},{"className":4608},[],[4610],{"type":49,"value":3314},{"type":49,"value":3855},{"type":43,"tag":278,"props":4613,"children":4615},{"className":4614},[],[4616],{"type":49,"value":3322},{"type":49,"value":4618}," (account metadata — usually audit material, not active memory)",{"type":43,"tag":69,"props":4620,"children":4621},{},[4622],{"type":43,"tag":278,"props":4623,"children":4625},{"className":4624},[],[4626],{"type":49,"value":4627},"export_manifest.json",{"type":43,"tag":69,"props":4629,"children":4630},{},[4631],{"type":49,"value":4632},"images, audio, and other attachments",{"type":43,"tag":52,"props":4634,"children":4635},{},[4636,4638,4644],{"type":49,"value":4637},"The ",{"type":43,"tag":278,"props":4639,"children":4641},{"className":4640},[],[4642],{"type":49,"value":4643},"mapping",{"type":49,"value":4645}," field in each conversation is a graph, not a flat message array. The scripts handle this — you don't need to parse it manually.",{"type":43,"tag":52,"props":4647,"children":4648},{},[4649,4651],{"type":49,"value":4650},"If the user needs help obtaining their export: ",{"type":43,"tag":4652,"props":4653,"children":4657},"a",{"href":4654,"rel":4655},"https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F7260999-how-do-i-export-my-chatgpt-history-and-data",[4656],"nofollow",[4658],{"type":49,"value":4654},{"type":43,"tag":58,"props":4660,"children":4662},{"id":4661},"references",[4663],{"type":49,"value":4664},"References",{"type":43,"tag":65,"props":4666,"children":4667},{},[4668],{"type":43,"tag":69,"props":4669,"children":4670},{},[4671,4677],{"type":43,"tag":278,"props":4672,"children":4674},{"className":4673},[],[4675],{"type":49,"value":4676},"references\u002Fmemory-import-workflow.md",{"type":49,"value":4678}," — condensed checklist for the import workflow",{"type":43,"tag":4680,"props":4681,"children":4682},"style",{},[4683],{"type":49,"value":4684},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":4686,"total":4802},[4687,4703,4720,4739,4752,4773,4783],{"slug":4688,"name":4688,"fn":4689,"description":4690,"org":4691,"tags":4692,"stars":26,"repoUrl":27,"updatedAt":4702},"1password","manage secrets with 1Password CLI","Set up and use 1Password CLI (op). Use when installing the CLI, enabling desktop app integration, signing in (single or multi-account), or reading\u002Finjecting\u002Frunning secrets via op.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4693,4696,4699],{"name":4694,"slug":4695,"type":16},"Authentication","authentication",{"name":4697,"slug":4698,"type":16},"CLI","cli",{"name":4700,"slug":4701,"type":16},"Security","security","2026-07-13T06:24:39.504387",{"slug":4704,"name":4704,"fn":4705,"description":4706,"org":4707,"tags":4708,"stars":26,"repoUrl":27,"updatedAt":4719},"agent-slack","automate Slack messaging and workflows","Slack automation CLI — read\u002Fsend\u002Fsearch messages, browse threads and channels, manage channels, download attachments, look up users, and run workflows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4709,4712,4713,4716],{"name":4710,"slug":4711,"type":16},"Automation","automation",{"name":4697,"slug":4698,"type":16},{"name":4714,"slug":4715,"type":16},"Messaging","messaging",{"name":4717,"slug":4718,"type":16},"Slack","slack","2026-07-13T06:23:51.908511",{"slug":4721,"name":4721,"fn":4722,"description":4723,"org":4724,"tags":4725,"stars":26,"repoUrl":27,"updatedAt":4738},"ai-news","fetch and summarize AI news","Fetch and summarize recent AI news from curated RSS feeds (Hugging Face, VentureBeat, The Verge, OpenAI, Anthropic, DeepMind, etc.) and YouTube channels (Yannic Kilcher, Two Minute Papers, AI Explained, etc.). Also fetches full transcripts for specific YouTube videos. Use when the user asks about recent AI news, what's happened in AI lately, summaries of AI research or product announcements, or wants a digest of what's going on in the AI space.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4726,4729,4732,4735],{"name":4727,"slug":4728,"type":16},"Communications","communications",{"name":4730,"slug":4731,"type":16},"LLM","llm",{"name":4733,"slug":4734,"type":16},"Research","research",{"name":4736,"slug":4737,"type":16},"Summarization","summarization","2026-07-13T06:24:20.520223",{"slug":4740,"name":4740,"fn":4741,"description":4742,"org":4743,"tags":4744,"stars":26,"repoUrl":27,"updatedAt":4751},"creating-letta-code-channels","build and debug Letta Code channels","Builds and debugs Letta Code channels, including first-party channel adapters and dynamic user channel plugins under ~\u002F.letta\u002Fchannels. Use when adding Telegram, WhatsApp, Bluesky, Slack, Discord, or custom channel support; testing channel routing, pairing, MessageChannel, runtime dependencies, or channel plugin manifests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4745,4746,4749,4750],{"name":24,"slug":25,"type":16},{"name":4747,"slug":4748,"type":16},"API Development","api-development",{"name":4714,"slug":4715,"type":16},{"name":4717,"slug":4718,"type":16},"2026-07-13T06:25:55.843495",{"slug":4753,"name":4753,"fn":4754,"description":4755,"org":4756,"tags":4757,"stars":26,"repoUrl":27,"updatedAt":4772},"datadog","query Datadog observability data","Query Datadog observability data (logs, metrics, monitors, dashboards, hosts) via direct API. Use when investigating production issues, checking monitors, searching logs, or accessing Datadog data.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4758,4760,4763,4766,4769],{"name":4759,"slug":4753,"type":16},"Datadog",{"name":4761,"slug":4762,"type":16},"Logs","logs",{"name":4764,"slug":4765,"type":16},"Metrics","metrics",{"name":4767,"slug":4768,"type":16},"Monitoring","monitoring",{"name":4770,"slug":4771,"type":16},"Observability","observability","2026-07-13T06:24:27.990605",{"slug":4774,"name":4774,"fn":4775,"description":4776,"org":4777,"tags":4778,"stars":26,"repoUrl":27,"updatedAt":4782},"discord","automate Discord server and channel tasks","Discord automation CLI — send\u002Fread\u002Fsearch messages, manage channels and servers, react, create threads, pin messages, and look up users.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4779,4780,4781],{"name":4710,"slug":4711,"type":16},{"name":4697,"slug":4698,"type":16},{"name":4714,"slug":4715,"type":16},"2026-07-13T06:24:26.62387",{"slug":4784,"name":4784,"fn":4785,"description":4786,"org":4787,"tags":4788,"stars":26,"repoUrl":27,"updatedAt":4801},"doc","create and edit Word documents","Use when the task involves reading, creating, or editing `.docx` documents, especially when formatting or layout fidelity matters; prefer `python-docx` plus the bundled `scripts\u002Frender_docx.py` for visual checks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4789,4792,4795,4798],{"name":4790,"slug":4791,"type":16},"Documents","documents",{"name":4793,"slug":4794,"type":16},"DOCX","docx",{"name":4796,"slug":4797,"type":16},"Office","office",{"name":4799,"slug":4800,"type":16},"Word","word","2026-07-13T06:23:44.299568",45,{"items":4804,"total":4959},[4805,4819,4834,4846,4858,4872,4882,4893,4905,4921,4932,4944],{"slug":4806,"name":4806,"fn":4807,"description":4808,"org":4809,"tags":4810,"stars":4816,"repoUrl":4817,"updatedAt":4818},"acquiring-skills","discover and install agent skills","Discover and install skills from Hermes, ClawHub, GitHub, and other registries. Load this skill whenever a user asks for a capability you don't already have — image generation, social media, email, calendar, finance, DevOps, search, browser automation, etc.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4811,4812,4813],{"name":24,"slug":25,"type":16},{"name":4710,"slug":4711,"type":16},{"name":4814,"slug":4815,"type":16},"GitHub","github",2831,"https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fletta-code","2026-07-13T06:22:58.45767",{"slug":4820,"name":4821,"fn":4822,"description":4823,"org":4824,"tags":4825,"stars":4816,"repoUrl":4817,"updatedAt":4833},"context-doctor","Context Doctor","repair system prompt and memory degradation","Identify and repair degradation in system prompt, external memory, and skills preventing you from following instructions or remembering information as well as you should.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4826,4827,4830],{"name":24,"slug":25,"type":16},{"name":4828,"slug":4829,"type":16},"AI Context","ai-context",{"name":4831,"slug":4832,"type":16},"Debugging","debugging","2026-07-13T06:22:50.151002",{"slug":4835,"name":4835,"fn":4836,"description":4837,"org":4838,"tags":4839,"stars":4816,"repoUrl":4817,"updatedAt":4845},"converting-mcps-to-skills","connect MCP servers to create skills","Connect to MCP (Model Context Protocol) servers and create skills for repeated use. Load when a user wants to use an MCP server, connect to external tools via MCP, or when they mention MCP, model context protocol, or specific MCP servers.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4840,4841,4842],{"name":24,"slug":25,"type":16},{"name":4710,"slug":4711,"type":16},{"name":4843,"slug":4844,"type":16},"MCP","mcp","2026-07-13T06:23:37.646079",{"slug":4847,"name":4847,"fn":4848,"description":4849,"org":4850,"tags":4851,"stars":4816,"repoUrl":4817,"updatedAt":4857},"creating-mods","create and edit Letta Code mods","Creates and edits trusted local Letta Code mods, including tools, slash commands, local-only model providers, lifecycle\u002Fturn events, scoped conversation helpers, panels, and capability-gated behavior. Use when asked to make a mod, add an agent-callable tool, add a slash command, add a local provider\u002Fmodel adapter, transform turns, react to app events, or add lightweight mod UI outside the dedicated \u002Fstatusline flow.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4852,4853,4854],{"name":24,"slug":25,"type":16},{"name":4710,"slug":4711,"type":16},{"name":4855,"slug":4856,"type":16},"Coding","coding","2026-07-23T05:42:38.133565",{"slug":4859,"name":4859,"fn":4860,"description":4861,"org":4862,"tags":4863,"stars":4816,"repoUrl":4817,"updatedAt":4871},"creating-skills","create and update agent skills","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Letta Code's capabilities with specialized knowledge, workflows, or tool integrations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4864,4865,4868],{"name":24,"slug":25,"type":16},{"name":4866,"slug":4867,"type":16},"Documentation","documentation",{"name":4869,"slug":4870,"type":16},"Plugin Development","plugin-development","2026-07-13T06:22:56.998659",{"slug":4873,"name":4873,"fn":4874,"description":4875,"org":4876,"tags":4877,"stars":4816,"repoUrl":4817,"updatedAt":4881},"customizing-commands","create and manage Letta slash commands","Creates, edits, and enables Letta Code mod-provided slash commands. Use when the user asks to add a custom \u002Fcommand, slash command, command shortcut, scoped conversation-backed command, or command-driven panel behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4878,4879,4880],{"name":24,"slug":25,"type":16},{"name":4710,"slug":4711,"type":16},{"name":4697,"slug":4698,"type":16},"2026-07-13T06:23:18.266798",{"slug":4883,"name":4883,"fn":4884,"description":4885,"org":4886,"tags":4887,"stars":4816,"repoUrl":4817,"updatedAt":4892},"customizing-statusline","customize Letta Code statusline mods","Creates, edits, and migrates Letta Code statusline mods. Use when handling the \u002Fstatusline command or continuing work started by \u002Fstatusline.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4888,4889],{"name":4697,"slug":4698,"type":16},{"name":4890,"slug":4891,"type":16},"Engineering","engineering","2026-07-13T06:23:27.465985",{"slug":4894,"name":4894,"fn":4895,"description":4896,"org":4897,"tags":4898,"stars":4816,"repoUrl":4817,"updatedAt":4904},"dispatching-coding-agents","dispatch stateless coding agents","Dispatch stateless coding agents (Claude Code or Codex) via Bash. Use when you're stuck, need a second opinion, or need parallel research on a hard problem. They have no memory — you must provide all context.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4899,4900,4901],{"name":24,"slug":25,"type":16},{"name":4855,"slug":4856,"type":16},{"name":4902,"slug":4903,"type":16},"Multi-Agent","multi-agent","2026-07-26T05:46:56.388845",{"slug":4906,"name":4906,"fn":4907,"description":4908,"org":4909,"tags":4910,"stars":4816,"repoUrl":4817,"updatedAt":4920},"editing-letta-code-desktop-preferences","edit Letta Code Desktop preferences","Edits Letta Code Desktop (LCD) preferences by safely reading and updating ~\u002F.letta\u002Fdesktop_preferences.json. Use only when the user asks to change current Desktop\u002FLCD settings such as theme, default working directory, remote access preference, or remote environment name via the preferences JSON.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4911,4914,4917],{"name":4912,"slug":4913,"type":16},"Configuration","configuration",{"name":4915,"slug":4916,"type":16},"Desktop","desktop",{"name":4918,"slug":4919,"type":16},"Themes","themes","2026-07-13T06:23:41.407811",{"slug":4922,"name":4922,"fn":4923,"description":4924,"org":4925,"tags":4926,"stars":4816,"repoUrl":4817,"updatedAt":4931},"finding-agents","locate and manage agents on server","Find other agents on the same server. Use when the user asks about other agents, wants to migrate memory from another agent, or needs to find an agent by name or tags.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4927,4928],{"name":24,"slug":25,"type":16},{"name":4929,"slug":4930,"type":16},"Management","management","2026-07-16T06:02:17.297841",{"slug":4933,"name":4933,"fn":4934,"description":4935,"org":4936,"tags":4937,"stars":4816,"repoUrl":4817,"updatedAt":4943},"generating-mod-envs","generate Letta mod learning environments","Generates and reviews mod learning env JSON files for Letta Code local mods. Use when asked to teach, learn, or optimize a mod behavior; create, draft, validate, improve, or explain envs for `\u002Fmods learn --env`; or design evaluation scenarios, memory fixtures, requiredResultMarkers, requiredTraceMarkers, negative controls, and candidate diversity hints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4938,4939,4942],{"name":24,"slug":25,"type":16},{"name":4940,"slug":4941,"type":16},"AI Infrastructure","ai-infrastructure",{"name":4912,"slug":4913,"type":16},"2026-07-13T06:23:08.838181",{"slug":4945,"name":4945,"fn":4946,"description":4947,"org":4948,"tags":4949,"stars":4816,"repoUrl":4817,"updatedAt":4958},"image-generation","generate images from text prompts","Generate images from text prompts (and optionally edit\u002Fremix input images). Use when the user asks to create, generate, draw, render, or edit an image, illustration, logo, icon, diagram, or photo.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4950,4953,4956],{"name":4951,"slug":4952,"type":16},"Creative","creative",{"name":4954,"slug":4955,"type":16},"Graphics","graphics",{"name":4957,"slug":4945,"type":16},"Image Generation","2026-07-13T06:23:06.189403",69]