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
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 });