About navigating-chatgpt-history
A skill for navigating exported ChatGPT conversations as an external archive instead of loading the entire history at once. It guides users to inspect, search, and render relevant conversations, then preserve findings in MemFS.
Key features
- 01Inspect export structure and sidecars
- 02Browse and search conversations
- 03Render selected chats or ranges
- 04Organize archive notes in MemFS
- 05Promote durable facts selectively
Use cases
- 01Finding past discussions of a topic
- 02Reviewing what an earlier assistant knew
- 03Keeping chat exports as searchable external memory
- 04Summarizing selected conversations in MemFS
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ letta-ai/ skills --skill navigating-chatgpt-historyAfter installing, type/navigating-chatgpt-historyin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/repository-layout.mdscripts/common.pyinspect-export.pylist-conversations.pyrender-conversation.pyrender-range.pysearch-conversations.pyDetails
From the project READMENavigating Chat History Without Digesting Everything
Use this skill when the goal is referenceable history, not immediate full ingestion.
Good fits
- search my exported ChatGPT history for a topic
- figure out what the old assistant knew about me
- render the conversation where we discussed X
- keep this export around as external memory and only mine it when needed
- seed MemFS from
memories.jsonorprojects.json
Default posture
Treat the export as an archive you can navigate later.
- read the MemFS archive index first if it exists:
reference/chatgpt/index.md - inspect the export with
scripts/inspect-export.py - search or list before rendering broad ranges
- preserve findings to
reference/chatgpt/first - promote to
system/human.mdonly when the fact is durable, current, and worth carrying every turn
Do not re-digest the entire archive unless the user explicitly wants that.
Archive layout in MemFS
Keep the external-memory archive under reference/chatgpt/.
Recommended files:
reference/chatgpt/index.md— source exports, schema notes, known paths, retrieval strategyreference/chatgpt/export-YYYY-MM-DD.md— inventory and sidecar summary for one exportreference/chatgpt/chatgpt-memory-summary-YYYY-MM-DD.md— content frommemories.jsonreference/chatgpt/projects-YYYY-MM-DD.md— projects sidecar summary when usefulreference/chatgpt/transcripts/NNN-slug.md— curated high-signal conversation summariesreference/chatgpt/notes/— topic-specific notes mined later
Prefer progressive memory. Keep active memory small.
Scripts
scripts/inspect-export.py
Use first. It inventories the export and reads sidecars such as memories.json, projects.json, and users.json.
python3 scripts/inspect-export.py <export-path>
python3 scripts/inspect-export.py <export-path> --output /tmp/export-summary.md
scripts/list-conversations.py
Use to browse by title, recency, or message count.
python3 scripts/list-conversations.py <export-path> --limit 25
python3 scripts/list-conversations.py <export-path> --title-contains Letta --sort messages
scripts/search-conversations.py
Use when titles are not enough.
python3 scripts/search-conversations.py <export-path> --query "Recovery Bench"
python3 scripts/search-conversations.py <export-path> --query TFCC --role user --limit 20
scripts/render-conversation.py
Use for one conversation once you know the index.
python3 scripts/render-conversation.py <export-path> --index 212
python3 scripts/render-conversation.py <export-path> --index 212 --compact-nontext --output /tmp/chat-212.md
scripts/render-range.py
Use only for focused batches after search narrows the field.
python3 scripts/render-range.py <export-path> --start-index 210 --end-index 220 --output-dir /tmp/chat-range
Workflow
1. Anchor yourself in existing MemFS notes
Before touching the raw export, check whether the archive already has:
- an export summary
- a prior project summary
- curated transcripts
- a note on the same topic
If yes, use that first.
2. Inspect before mining
Run inspect-export.py to answer:
- what export shape is this?
- how many conversations are there?
- does
memories.jsonalready contain a synthesized memory block? - does
projects.jsonhold useful background?
For large archives, this often answers the question before raw conversation mining is needed.
3. Narrow, then render
Prefer this sequence:
list-conversations.pyfor browsesearch-conversations.pyfor content lookuprender-conversation.pyfor deep readrender-range.pyonly when several adjacent conversations matter
Do not render dozens of chats just because you can.
4. Write findings to progressive memory first
When a conversation matters, summarize it into:
reference/chatgpt/transcripts/for high-signal conversation summariesreference/chatgpt/notes/for topic notes
Only then decide whether anything belongs in system/human.md.
5. Promotion rule
Promote to active memory only when the fact is:
- explicit or strongly evidenced
- current rather than historical-only
- likely useful across many future conversations
- low-risk to keep in context every turn
Everything else can stay in reference/chatgpt/.
Reference files
Read references/repository-layout.md when creating or extending the MemFS archive layout.
Notes on export formats
This skill is designed for newer exports that contain conversations.json with chat_messages, while still handling older shard-based exports with conversations-*.json and mapping graphs.
When in doubt, start with inspect-export.py instead of assuming the schema.