I’ve been thinking a lot about the accumulation of my conversations with LLMs. At this point, they represent a significant share of my creative, technical, and decision-making output. Most of these conversations live in ChatGPT. Some are ephemeral. Some are essential. But none are truly portable.
OpenAI provides an export feature, but it’s clunky. You have to:
- Request your data
- Wait for an email
- Download a ZIP file
- Unzip it manually
- Parse out the contents yourself
That’s fine for a one-time archive. It’s not great for ongoing use.
What I really want is a way to:
- See all my recent chats at a glance
- Sort them by name, timestamp, or model
- Export individual conversations as Markdown or PDF
- Optionally, generate a short summary or extract metadata
- Eventually, compare sessions across providers like Claude and Gemini
where the data lives
I started by looking at the ChatGPT desktop app. Since it’s an Electron app, a lot of the logic is baked into local JavaScript files. There’s also a working directory on disk that stores IndexedDB data and application settings. I’m exploring both of those paths to see what’s possible without relying on the official export mechanism.
If I can pull chats directly from the local cache, the process becomes much more interesting. No delays. No manual steps. Just a clean export with metadata I can use.
building the tool
For now, I’m starting with a Node.js CLI. The initial version will:
- Read from either an exported ZIP or local files
- Parse out all conversations
- Store each one as a Markdown file with a clean filename and frontmatter
- Optionally output text or PDF
Later I may port it to Go for better portability and performance.
The goal isn’t just archival. It’s control. If this tool works well, I can start feeding chats into other systems, summarizers, blog generators, even analytics dashboards.
open source and collaboration
This will be an open-source project from day one. I’ll share a working prototype on GitHub and maintain an instructions.md
file to track progress and invite contributions. I’ll probably also loop in Claude via Code to help with parsing and structure.
more to come
This post is the start of a series. I’ll document the journey:
- The idea and motivation (this post)
- Writing the tool and shaping the CLI
- Reverse engineering the Electron app
- Lessons learned along the way
If you’ve tried to do something similar, I’d love to hear what worked, or didn’t, for you.