Vivadicta search and rewrite
Skill n0an/vivadicta-cli-skills/skills/vivadicta-search-and-rewrite
Agent skills for the VivaDicta for Mac CLI (vivadicta). Install with npx skills add n0an/vivadicta-cli-skills.
npx -y skills add n0an/vivadicta-cli-skills --skill vivadicta-search-and-rewriteAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Find a past transcription by natural-language query or keyword and rewrite it with an AI preset using vivadicta. Use when the user wants to turn existing dictation into action items, an email, a summary, or any other preset output.
SKILL.md
5.8 KB, as published. Nobody here has run it
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.