cookbook · personal · voice-memo-to-task
Recipe · personal

Talk it, it goes in the right list.

A local .kolm file that takes a voice-memo transcript (whisper.cpp on-device) and returns (title, list, due_date, project, priority, raw_transcript). Trained on 300 of your past memos paired with where they ended up in Things 3 / Reminders / Notion. The verifier rejects any task with a project not in your project list.

base modelphi-3-mini-4k
gold pairs300 (210 train / 90 eval)
k-score floor0.83
artifact size2.1 GB
compile time~30 min
spec sourceclosed-vocab + grounded

What this recipe does

Voice memos are the highest-bandwidth capture method and the lowest-organized. This recipe is the missing layer: hold the button, talk for ten seconds, and a structured task lands in the right list with the right due date — using the project taxonomy you already use, not a generic one.

Whisper.cpp does the transcription on-device. The .kolm reads the transcript and writes the task. Nothing leaves the phone.

The spec

{
  "output_kind": "json",
  "schema": {
    "required": ["title", "list", "raw_transcript"],
    "properties": {
      "title": { "type": "string", "maxLength": 80 },
      "list": { "$ref": "lists.json" },
      "project": { "$ref": "projects.json" },
      "due_date": { "type": ["string", "null"], "format": "date" },
      "priority": { "enum": ["low", "med", "high"] },
      "raw_transcript": { "type": "string" }
    }
  },
  "verifier": {
    "list_must_be_in_lists_json": true,
    "project_must_be_in_projects_json": true,
    "due_date_must_be_extractable_or_null": true,
    "redact_pii": true
  }
}

Gold pair (1 of 300 shown)

input - whisper transcript
"hey remind me to email the contract back to jen by friday, that's
the kolm contract not the studio one. high priority."
output
{
  "title": "email contract back to jen",
  "list": "work",
  "project": "kolm",
  "due_date": "2026-05-15",
  "priority": "high",
  "raw_transcript": "hey remind me to email the contract back to jen by friday, that's the kolm contract not the studio one. high priority."
}

Compile

kolm compile "voice memo to structured task using my project taxonomy" \
  --base phi-3-mini-4k \
  --pairs ~/.kolm/voice-pairs.jsonl \
  --lists ~/.kolm/lists.json \
  --projects ~/.kolm/projects.json \
  --verifier closed-vocab,date-extractable \
  --k-floor 0.83 \
  --output voice-memo-to-task.kolm

ok wrote voice-memo-to-task.kolm
   k_score=0.88  signature=hmac-sha256

K-score gate

K-score 0.88 held-out 90 memos · list-correct 96% · project-correct 91% · due-date-correct 89% (relative dates resolved against memo timestamp) · 100% closed-vocab

Run-time profile

M2 MacBook
540ms
RTX 5090
150ms
iPhone 15 Pro
1.6s
CPU x86 (server)
2.1s

Deploy

# iOS shortcut — record memo, transcribe, route to Things 3:
const audio = await Shortcut.recordAudio();
const text = await whisper.transcribe(audio);
const task = kolm.run('voice-memo-to-task.kolm', text);
await Things.add({
  list: task.list, project: task.project,
  title: task.title, due: task.due_date, notes: task.raw_transcript
});