vivadicta-search-and-rewrite
vivadicta search and rewrite
Use this skill to locate an existing transcription in the user's VivaDicta history and apply an AI preset to it. Covers natural-language IDs, preset resolution, and the end-to-end flow.
Preconditions
- VivaDicta.app installed at
/Applications/VivaDicta.appand running (rewrite requires the UI). - User has an AI provider configured with an API key (keychain) or a local MLX model loaded.
- Some history exists. If
vivadicta recent 1is empty, there's nothing to rewrite.
Identifier forms
rewrite (and get) accept three identifier shapes. Prefer in this order:
- Keyword: when the user clearly means the newest entry.
vivadicta rewrite latest --preset summary # also: last, most recent, newest, current - Natural-language query: when the user describes the transcription.
vivadicta rewrite "yesterday's call with sam" --preset action_points vivadicta rewrite "coding session this morning" --preset professional - Raw UUID: when you already have an ID from a prior command.
vivadicta rewrite 1701DB3C-AF1F-4191-A791-5DABA81D8096 --preset email
Session handles (t1, t2) from MCP don't carry across one-shot CLI invocations - use the UUID instead.
Resolver behavior
The natural-language matcher:
- Splits the query into tokens (≥3 chars), lowercases, and searches
text + enhancedText + powerModeName. - Also extracts a timeframe hint ("yesterday", "last week") and filters by it.
- Ranks candidates; if the top score is ≥3x the second score, picks the top. Otherwise returns
transcription_ambiguous(exit 4) with the top 5 previews on stderr.
When ambiguous, the error lists candidates. Re-run with a more specific phrase or with a raw UUID from the candidates list.
Preset resolution
Preset aliases are fuzzy-matched too: summary / Summary / sumary all resolve to the Summary preset. rewrite returns preset_ambiguous (exit 3) with candidates if the match is unclear.
Discover available aliases:
vivadicta presets --output json | jq -r '.presets[] | "\(.alias)\t\(.name)"'
# regular Regular
# summary Summary
# action_points Action Points
# email Email
# ...
Built-in aliases include: regular, summary, action_points, takeaways, mind_map, key_points, professional, casual, email, chat, coding, rewrite, short, elaborated, simplify, translate_en, translate_ru, translate_es, translate_zh, plus more translate_* variants and user-created presets (typically prefixed custom_).
End-to-end flow
# Discover the transcription
vivadicta search "sprint planning" --since "last week" --limit 5
# If exactly one matches, rewrite directly with a natural-language query
vivadicta rewrite "sprint planning last week" --preset action_points
# If multiple, grab the UUID from the search output
UUID=$(vivadicta search "sprint planning" --limit 1 --output json | jq -r '.transcriptions[0].ref')
vivadicta rewrite "$UUID" --preset action_points
The rewrite result prints the original + rewritten text. The rewritten version is also saved as a TranscriptionVariation on the record - follow-up vivadicta get <uuid> --all-variations will include it.
Dry-run
Preview the resolved transcription + preset without hitting the UI app:
vivadicta rewrite "yesterday's call" --preset summary --dry-run
# Action : rewrite (dry-run)
# Transcription: 1701DB3C-AF1F-4191-A791-5DABA81D8096
# Title : Call with Sam about the sprint plan
# Preset : summary
Useful for confirming the resolver picked the right transcription + preset before the AI call.
Common patterns
"Make action items from today's call":
vivadicta rewrite latest --preset action_points
"Rewrite my dictation as a professional email":
vivadicta rewrite latest --preset email --output markdown
"Translate yesterday's note to Russian":
vivadicta rewrite "yesterday's note" --preset translate_ru
Chain with export (see vivadicta-vault-export):
UUID=$(vivadicta recent 1 --output json | jq -r '.transcriptions[0].ref')
vivadicta rewrite "$UUID" --preset summary > /dev/null
vivadicta get "$UUID" --output markdown --all-variations > ~/vault/summary.md
Error recovery
| Exit | Error | What to do |
|---|---|---|
| 4 | transcription_not_found |
Broaden the query or drop the timeframe filter. Confirm there's history with vivadicta recent 5. |
| 4 | transcription_ambiguous |
Error lists candidates. Re-run with a more specific phrase or a UUID from the candidates. |
| 3 | preset_not_found / preset_ambiguous |
Run vivadicta presets and pick an alias from the list. |
| 5 | vivadicta_not_running |
Launch VivaDicta, then retry. |
| 6 | daily_limit_reached |
Free-tier quota reached. Offer https://vivadicta.com/pro. |
Guardrails
- Don't spam
rewritein a retry loop - each call is a paid AI request. - If the user didn't name a preset, ask rather than defaulting. "summary" vs "action_points" vs "email" produce different outputs; the wrong choice wastes a call.
- For regeneration of the same preset the user already applied,
rewritewill re-run the AI (not cached). Call this out if it seems unintended. - When presenting the result to the user, show both the preset used and the UUID so they can re-run or reference it.
See vivadicta-cli-usage for exit codes and output formats. See vivadicta-vault-export for piping rewrites into Obsidian.
More from n0an/vivadicta-cli-skills
vivadicta-vault-export
Export a transcription to Obsidian-ready markdown with YAML frontmatter using vivadicta get --output markdown. Use when the user wants a dictation record as a markdown file in their vault or any shell pipeline expecting markdown.
1vivadicta-cli-usage
Run vivadicta commands against the user's VivaDicta for Mac history from the shell. Use when picking a subcommand, flag combo, or output format for the vivadicta CLI.
1vivadicta-transcribe-flow
Transcribe a local audio file or YouTube URL end-to-end with vivadicta, handling blocking vs async, progress, and error recovery. Use when the user wants speech from an audio source saved into their VivaDicta history.
1