Skip to content
The world does revolve around you.

Conversations#

Every conversation Ostler captures – an iMessage thread, a WhatsApp chat, an email thread, a recorded meeting, a phone call, a voice note – is processed into a four-artefact bundle. This page explains what the four artefacts are, where they live on disk, how privacy levels gate what is processed, and how Apple Reminders integration turns todos into pings on your phone.

The four-artefact spec#

A conversation is not "a transcript". A conversation is four things, written next to each other:

  1. Structured summary. A short top-level paragraph plus a per-topic breakdown. What you actually talked about, who said what, what the meeting was for.
  2. Extracted todos. Action items, follow-ups, things you said you would do. Each todo is normalised (who, what, by when) and pushed to Apple Reminders so it ends up on your phone next to everything else you owe a reply on.
  3. Cleaned-up rendered transcript. The original words, with filler words removed, paragraphs broken at speaker changes, and timestamps where useful. The bit you want when you need to remember exactly what was said.
  4. Metadata frontmatter. A YAML block at the top of each artefact: date, participants, channel, duration, privacy level, source pipeline. This is what makes the wiki, the timeline, and search work without re-parsing the text.

A conversation that has a transcript but no summary is incomplete. A conversation that has a summary but no todos is incomplete. The pipeline either produces all four (one transcript may produce zero todos, but the file still exists and says "none") or fails loudly in the Doctor dashboard.

Where they live#

Every conversation bundle lives at:

~/Documents/Ostler/Conversations/<date>/<slug>-<short-id>/

Inside that directory you will find one Markdown file per artefact:

~/Documents/Ostler/Conversations/2026-05-21/team-standup-a1b2c3/
  summary.md
  todos.md
  transcript.md
  metadata.md

~/Documents/Ostler/ is the visible zone – it shows up in Spotlight search, gets backed up by Time Machine, syncs to iCloud Drive if you have that turned on, and opens cleanly in Obsidian. The wiki renders these same files into a browseable interface; the underlying Markdown stays human-readable and portable.

The pipelines that produce them#

Conversations come in from several capture pipelines. All of them feed the same four-artefact writer.

Channel Pipeline Trigger
iMessage Conversation memory extractor Polls your local Messages database every few minutes via Full Disk Access.
WhatsApp WhatsApp mining Polls your WhatsApp Web session; respects the unofficial-API caveat documented at install.
Email Email intelligence Polls Apple Mail's local store via Full Disk Access.
Meetings / calls Remote-capture macOS app Records via ScreenCaptureKit, transcribes with WhisperKit on-device.
Voice notes iOS Companion quick capture Sends audio to the Hub, where Whisper runs on-device.

Every one of them runs on your Mac. The audio that becomes a transcript is discarded after transcription; the transcript itself is what is written to disk.

Privacy levels#

Each conversation has a privacy level in its metadata frontmatter, set at capture time. Privacy level is the single switch that decides how aggressively Ostler enriches and surfaces the conversation.

Level Name What happens
L0 Public Indexed in the vector store and the graph store. Fully enriched. Visible in the wiki, the timeline, and chat answers. Use for things you would not mind reading aloud.
L1 Default Same as L0 for indexing; subject to standard redaction (financial, medical, legal, contact-info masking per your YAML config). The level most conversations land at.
L2 Sensitive Indexed but with stricter redaction and only surfaced when explicitly asked. Will not appear in proactive suggestions, morning briefs, or random "what did we talk about" questions.
L3 Private Short-circuited at the writer. No Qdrant vector indexing, no Oxigraph graph indexing, no MCP exposure. The four artefact files still get written so you have the record, but the rest of Ostler treats the conversation as if it does not exist. AI conversations default to L3.

L3 conversations are still on your machine, in plain Markdown, fully readable in Obsidian – but the Hub will refuse to answer questions about them, will not include them in summaries, and will not return them via the MCP API. The asymmetry is deliberate: you have full access; everything else gets nothing.

You can change a conversation's privacy level at any time by editing the privacy_level field in its metadata.md frontmatter. The next pipeline sweep picks up the change.

Apple Reminders integration#

The todos artefact is more than text on disk. Each extracted todo is pushed to Apple Reminders in real time via the Ostler list (created on first run). That gives you:

  • Cross-device sync. Reminders syncs to your iPhone, your Apple Watch, your iPad, and back to your Mac via iCloud.
  • Notifications. Standard iOS / macOS reminder notifications fire on the due date.
  • Editability. You can mark a todo done, change the date, or delete it from any Apple device. Ostler reads the change on the next sweep.

The reverse direction also works: if you add a reminder to the Ostler list by hand on your phone, Ostler picks it up and writes it into the relevant conversation bundle (or into a ~/Documents/Ostler/Conversations/<today>/standalone-<id>/todos.md if there is no conversation context).

If you do not want Apple Reminders integration, toggle it off in the Doctor dashboard. Todos still get written to todos.md; they just stay there.

What the wiki renders#

The browseable Ostler wiki (see wiki) has a top-level Conversations section that renders these bundles. Each render respects the privacy level:

  • L0: full summary, full todos, full transcript, full metadata.
  • L1: full summary, full todos, transcript (subject to redaction rules), full metadata.
  • L2: summary headline only, todos count, transcript hidden, partial metadata. A button reveals the full body if you choose.
  • L3: the page is not rendered at all. The bundle exists on disk but the wiki does not surface it.

The renderer reads the privacy level from frontmatter, not from any side channel; if you change the level in the file, the wiki page changes shape on the next rebuild.

Standalone todos and standalone voice notes#

Not everything is a conversation. A todo you tap into the iOS Companion's quick-capture, a voice note recorded into your Watch, a calendar event with no transcript – these still produce a partial bundle:

~/Documents/Ostler/Conversations/2026-05-21/standalone-d4e5f6/
  summary.md       (optional)
  todos.md
  transcript.md    (voice-note transcript if present)
  metadata.md

The same 4-artefact rule applies: metadata.md is always present, todos.md is always present (may say "none"), and the other two are optional depending on what was captured. The writer will not produce a partial bundle that lacks metadata.md or todos.md; the pipeline fails loudly in the Doctor dashboard instead.

What does not become a conversation#

Some captured content is not a conversation:

  • Safari history, bookmarks, and reading list – these are browsing artefacts, not conversations.
  • Apple Photos events – these are timeline artefacts.
  • Calendar events without an associated meeting recording – these are scheduling artefacts.
  • Apple Notes – these are documents; they become wiki pages but not conversation bundles.

Conversations are specifically a back-and-forth between two or more participants (or a one-way utterance like a voice note). Everything else lives in its own section of the knowledge graph and the wiki.

  • AI conversations – the dual-storage rule for Claude Code, ChatGPT exports, and other external-LLM chats.
  • Wiki – how the rendered conversation pages slot into the wider personal wiki.
  • Doctor – the dashboard where pipeline failures and privacy-level changes are surfaced.
  • Privacy: what stays local – the data side of the same story.
  • Architecture: data flows – the wire-level view of conversation capture.