AI conversations#
Ostler also captures the conversations you have with other AIs – Claude Code in your terminal, ChatGPT in the browser, anything you can export. This page explains the dual-storage rule that governs them, the L3-by-default privacy posture, the adapters that wire each source in, and how the wiki surfaces them.
What this is for#
Half of the useful thinking many people do today happens in a chat window with an AI – debugging a tricky problem with Claude Code, brainstorming a launch plan with ChatGPT, asking an assistant to read a long document and summarise it. That thinking is yours. It captures decisions, false starts, vocabulary, references, and intent. It should live in your knowledge graph next to your real-human conversations, not stranded inside someone else's cloud account.
Ostler treats AI conversations as first-class artefacts:
- They appear in your timeline (so you can see what you were thinking about on a Tuesday afternoon two months ago).
- They feed your CM048 fact extractor (so a decision you and Claude landed on can answer a question later).
- They render in the wiki under their own top-level AI Chats section.
- They obey privacy levels exactly the way human conversations do.
The dual-storage rule#
Every external-LLM conversation Ostler captures gets stored twice, simultaneously, in two different shapes:
- As facts. The conversation is fed through the standard fact-extraction pipeline (CM048). Atomic facts ("Decided to use Tailscale for remote access", "Need to email the supplier by Tuesday") land in the graph and become searchable next to facts extracted from human conversations.
- As durable episodic Markdown. The full cleaned-up transcript is written to a Markdown file on disk, with frontmatter, exactly the way a human conversation would be.
The two storage shapes serve different purposes. Facts are how the assistant answers "what did I decide about X?" Episodic Markdown is how you re-read the actual conversation when facts alone are not enough.
Crucially, the rule is dual storage, not either-or. A conversation that produces facts but no episodic record is incomplete. A conversation that produces a transcript but never reaches the fact extractor is incomplete. Both shapes always exist for an L0, L1, or L2 conversation. (L3 short-circuits at the writer; see Privacy levels below.)
Where AI conversation Markdown lives#
For example:
~/Documents/Ostler/AI Conversations/claude-code/2026-05-21/debug-pairing-flow-x7y8z9/
summary.md
todos.md
transcript.md
metadata.md
Same four-artefact layout as the conversations bundle, in a parallel tree so you can tell at a glance which conversations were with a human and which were with an AI. Both trees are in the visible zone under ~/Documents/Ostler/, so both get Spotlight, Time Machine, iCloud Drive, and Obsidian.
Privacy levels#
AI conversations default to L3 – Private.
That default is deliberate. The conversations you have with AIs often include test data, half-thoughts, things you tried, things you abandoned, and credentials you should not have pasted in the first place. Defaulting to L3 means:
- The four artefacts get written to disk so you have the record.
- Nothing goes into the Qdrant vector store.
- Nothing goes into the Oxigraph graph store.
- The MCP API will not return the conversation when an external tool asks.
- The wiki does not render the page.
If you want a specific AI conversation surfaced – because it captured a decision you want the assistant to know about, or because it is reference material you want to find later – open its metadata.md and change privacy_level: L3 to L2, L1, or L0. The next pipeline sweep picks up the change, runs the standard fact extraction over the transcript, and updates the wiki.
The reverse also works: a conversation you marked L0 by hand can be moved back to L3 by editing the same field. Ostler does not garbage-collect when you do this; the existing index entries become unreachable but the original artefacts on disk are untouched.
See conversations: privacy levels for the full L0 / L1 / L2 / L3 matrix; AI conversations follow the same rules, only with a different default.
The adapters#
At v1.0, Ostler ingests two AI conversation sources.
Claude Code (terminal)#
Claude Code stores every session as JSONL files under ~/.claude/projects/<project>/<session-id>.jsonl. Ostler's Claude Code adapter:
- Watches
~/.claude/projects/for new or updated.jsonlfiles. - Reads each session top-to-bottom and reconstructs the conversation into four-artefact form.
- Writes the bundle to
~/Documents/Ostler/AI Conversations/claude-code/<date>/<slug>-<short-id>/. - Tags each conversation with the project name (taken from the directory) and the session ID.
No configuration is needed – if you use Claude Code, the adapter picks it up.
ChatGPT (export)#
OpenAI does not expose a live API for your own chat history, so the adapter relies on the export feature:
- In ChatGPT, Settings > Data controls > Export data. OpenAI emails you a download link within 24 hours.
- Save the ZIP into
~/.ostler/imports/chatgpt/(created automatically during install) or simply drop it into~/Downloadsand let the import watcher pick it up. - The Ostler import pipeline picks up the ZIP on its next sweep – every four hours, or on demand with
ostler-import <path-to-zip>. - Each conversation in the export becomes a four-artefact bundle at
~/Documents/Ostler/AI Conversations/chatgpt/<date>/<slug>-<short-id>/.
The import is incremental: re-running the same export ZIP will not duplicate conversations. If you do a fresh export six months later, only the new conversations are added.
Other sources (planned)#
Claude Desktop's LevelDB-backed history is on the roadmap. We are also tracking Cursor, Windsurf, and a handful of other AI tools. If you have an AI you want supported, email [email protected] with a link to its export documentation.
How the wiki renders AI conversations#
The wiki has a top-level AI Chats section, parallel to Conversations. Inside it you will find:
- Pages grouped by source (
Claude Code,ChatGPT, etc.). - Date-based browsing (
2026 > May > 21). - Per-project grouping for Claude Code (each project directory becomes a sub-section).
- Privacy-level-aware rendering exactly as on human conversations: L0 / L1 / L2 / L3 each render differently. The L3 default means most AI chats do not appear here until you opt one in.
Cross-referencing#
When an AI conversation produces a fact (because you raised its level to L2 or below), that fact is tagged in the graph with the source conversation's ID. Asking the assistant "where did I decide that?" can therefore answer "in your Claude Code session debug-pairing-flow on 21 May" and link straight back to the wiki page.
Backup and portability#
~/Documents/Ostler/AI Conversations/ is in the visible zone, just like the human conversations tree. That means:
- Time Machine backs it up alongside the rest of your Documents.
- iCloud Drive syncs it if you have iCloud Drive turned on for Documents.
- Spotlight indexes the Markdown so
Cmd-Space > "debug pairing"finds the conversation. - Obsidian can open the entire tree as a vault if you point it there. Frontmatter, wikilinks, and search all just work.
Because the artefacts are plain Markdown, they outlive Ostler. If you stop using Ostler, you keep the files; if you switch to a different tool, those files port cleanly.
Why dual storage and not just one or the other#
Two short reasons:
- Facts without context lose meaning. An extracted fact ("Decided to migrate to Tailscale") is much more useful with the full conversation attached, so you can re-read the reasoning when the decision is years old.
- Episodic context without indexable facts is dead weight. A Markdown archive that the assistant cannot reason over is just files on disk. The fact extractor is what makes the conversation queryable.
By writing both, every conversation pulls its weight in both modes.
Related reading#
- Conversations – the human-conversation version of the same artefact spec.
- Wiki – how the AI Chats section sits inside the personal wiki.
- Privacy: what stays local – the broader local-first posture.
- Architecture: data flows – wire-level view of capture.