fetch-monologue
Replaces the old external-transcription pipeline. Voice memos now live in Monologue (cloud app); this skill pulls transcripts only (not summaries — Monologue’s summary style isn’t what the vault wants) into 0_Inbox/transcripts/ so the rest of the wiki workflow can treat them like any other inbox transcript.
When to use
- User runs
/fetch-monologue, or asks to “sync monologue”, “pull monologue notes”, “fetch new voice memos”. - Phase 0 of process-inbox — runs automatically before draining.
- Daily routine (if scheduled).
Prerequisites
-
Monologue MCP server is connected. Tools:
mcp__a166b90c-2d77-4a11-99ae-3bd0e1d9e7e8__list_recent_notesmcp__a166b90c-2d77-4a11-99ae-3bd0e1d9e7e8__get_notemcp__a166b90c-2d77-4a11-99ae-3bd0e1d9e7e8__search_notes
These are loaded via ToolSearch if they aren’t visible at session start (
select:mcp__a166b90c-...__list_recent_notes,mcp__a166b90c-...__get_note). -
If the MCP server isn’t connected, stop. Append an action item to
7_Agent/notifications.mdasking the user to wire up the connector, and exit. Do not try to install a CLI or use the API directly.
Workflow
1. Read the processed log
Read monologue-processed. This is the source of truth for “which Monologue notes have already been pulled into the inbox” — keyed by note_id (Monologue’s stable UUID). A note appears in this log exactly once, the first time it’s fetched. It stays in the log forever, even after process-inbox deletes the resulting transcript.
If the file doesn’t exist, treat the set as empty and create it as you go.
2. List recent notes
Call list_recent_notes with limit: 20 (raise to 50–100 if the user says it’s been more than a few days since last sync). Result has items[] (note_id, title, summary, created_at, updated_at) and next_cursor.
Walk newest → oldest. For each item:
- If
note_idis in the processed log → stop walking. Everything older is already pulled. - Otherwise → mark for fetch.
If you walk the full page without hitting a known note_id, paginate with next_cursor and continue. Safety cap: stop after 5 pages (500 notes) and surface a warning — something is wrong if the gap is that wide.
3. Fetch each new transcript
For each new note_id (oldest → newest, so the log appends chronologically):
-
Call
get_notewithnote_idandinclude_transcript: true. -
Extract
transcript(the body),title,created_at,summary(kept only for the log, not written into the note — the user dislikes Monologue’s summaries). -
Build the filename:
<YYYY-MM-DD> <sanitized-title>.mdwhere the date iscreated_at(UTC date) and the title has filesystem-illegal chars (/ \ : * ? " < > |) replaced with-, collapsed whitespace, trimmed to ~80 chars. Preserve case and umlauts. -
Write to
0_Inbox/transcripts/<filename>with this shape:--- created: 2026-05-13 lang: de tags: [voice-memo] source: monologue monologue_id: f8803a34-39f2-4df5-a441-bf6ea289910f monologue_created_at: 2026-05-13T14:00:33.572188Z monologue_title: "Schönheit an hässlichen Orten" --- <transcript body verbatim>lang:— quick detection from the transcript:de,en,ja, ormixed. If the title is in one language and the body in another,mixed. If unsure, pick the dominant one.monologue_title:— preserves the original title for provenance, since the filename is sanitized.- Body is the transcript verbatim. Do not clean, summarize, or reformat.
process-inboxand downstream skills handle structuring; this skill is a pure fetch.
-
Append to the processed log (monologue-processed):
- 2026-05-15 — f8803a34-39f2-4df5-a441-bf6ea289910f — "Schönheit an hässlichen Orten"The leading date is today’s date (when fetched), not
created_at. The format is one bullet per note, under the## Processedheading. Append in fetch order. -
If a write collides with an existing filename (same date + title from a previous fetch that hasn’t been routed yet, edge case), append
(2),(3), … before.md.
4. Report
After the batch, output a short summary:
nnotes fetched (with titles).0_Inbox/transcripts/count after the run.- If invoked as Phase 0 of
process-inbox, return control silently — process-inbox will report on the full inbox drain. - If invoked standalone, mention next step: “Run
/process-inboxto route these into PARA.”
Rules
- Transcripts only. Never write Monologue’s
summaryinto a note. The user finds its style off-key. Summaries can go into the processed-log entry for human reference, nothing more. - Verbatim body. Don’t clean the transcript here. The voice-memo cleanup conventions in audio-inbox applied to a separate transcription pipeline; Monologue’s transcripts are already high quality and the user wants them raw.
- No PARA routing. Always write to
0_Inbox/transcripts/.process-inboxdecides where each note lands — including whether it’s a work note that belongs in6_Private/Work/. - The log is append-only. Never remove entries, even if the corresponding inbox transcript was deleted by
process-inboxor by the user. The log is the dedup oracle. - Read-only against Monologue. The MCP server is read-only by design. Do not attempt writes.
Work-related notes
The user may dictate work-related thoughts (e.g., about employers like 10ten, current or past). These end up in Monologue indistinguishably from personal memos.
This skill does not classify — it dumps everything into 0_Inbox/transcripts/. process-inbox reads the transcript body and routes work content to 6_Private/Work/ (the umbrella for work-related material not tied to a specific employer) or to an employer-specific subfolder like 6_Private/10ten/ if one already exists. See Privacy Classification.
Blocked cases
- MCP server not connected — notify the user (action item in
7_Agent/notifications.md) and exit. Do not improvise an alternative path (e.g., shelling out to a CLI). - Empty transcript — Monologue returned a note with no transcript text. Write the note anyway with an empty body and
tags: [voice-memo, empty-transcript]. Log it. Let the user decide on cleanup. - MCP call fails / network error — retry once. If still failing, log to
7_Agent/log.mdunder## [YYYY-MM-DD] fetch-monologue | error, leave the processed log untouched (so the next run retries), and exit.
Verification
- Every fetched
note_idappears exactly once in monologue-processed. - Every fetched note has a corresponding file at
0_Inbox/transcripts/<filename>.md(untilprocess-inboxroutes it). - No file in
0_Inbox/transcripts/was overwritten. - No Monologue summaries were written into note bodies.