Skip to main content
Every command below talks to the running Vowen app. Read the overview first if you have not, especially the global flags (--json, --no-launch, --timeout) and the exit codes.

All commands

Give any item id as a prefix. vowen read 1734 resolves as long as exactly one item starts with those digits; an ambiguous prefix is rejected rather than guessed, and an exact match always wins over a prefix match.

Your data

Newest first. Defaults to dictations only.
The table shows id, date, type, and a truncated preview, with [processing] or [error] appended where relevant. When more results exist than were printed, a footer tells you how many.
Searches dictation text, titles, summaries, pre-enhancement originals, context notes, and filenames. Every term you give must appear somewhere in the item; matching is case-insensitive substring matching, not fuzzy.
Output is a compact table with a snippet around the first match. Use read to get the full text of a result.
With an id, prints that item. Without one, prints your most recent dictation.
Aliases: rm, remove. Works on dictations, transcriptions, and meeting notes.
Deletion is permanent and is not undoable from the CLI. It requires a paid plan; on the free plan the command exits with code 5.
Always prints JSON: your lifetime totals, per-day activity for the last 30 days, and counts of dictations, transcriptions, and notes.
Exports oldest first.
JSONL gives you one complete item object per line. Markdown gives a ## Title heading per item with id, type, and date as a small metadata list, the body text, and a ### Summary section where one exists.
Polls the app and prints each newly finished item as a single-line JSON object. Runs until you interrupt it.
Items that already existed when watch started are not replayed, and items still processing are held back until they settle, so you never get a half-finished transcript. If the app restarts mid-watch (which rotates the auth token), watch reconnects on its own instead of dying.

Meeting notes

All of these live under vowen notes.
Alias: ls. Newest first.
With no flag, notes read prints the note’s main body, which for an app-generated note is its AI summary. A title line appears above it when the note has one.
Content comes from --text, --file, or piped stdin, in that order of precedence.
--file reads the file as text. Handing it a recording produces a note full of binary garbage. Use notes import for audio and video.
Transcribes and summarizes media files into meeting notes, the same pipeline as the Import button on the Notes page and as a watch folder with a meeting-note destination.
Anything you do not pass falls back to your meeting-notes preferences. The work outlives a single HTTP request, so without --no-wait the CLI polls the note and shows elapsed time on stderr until it settles.
By default the AI summary is rebuilt from the existing transcript. --transcript instead re-runs transcription against the note’s stored audio, which produces a fresh summary as well.
Passing both --summary and --transcript is rejected, since --transcript already regenerates the summary.
Only the fields you pass are changed. Passing an empty string clears that field.
Aliases: rm, remove.
Permanent, and requires a paid plan. On the free plan this exits with code 5.
notes start does not report success until it has confirmed a session is genuinely live. Microphone capture happens inside the app window, so the CLI polls status for up to 15 seconds. If nothing started, it fails with a message pointing you at the Vowen window; the cause is usually a missing microphone or screen permission.

Transcription

Uses your currently selected model and language unless you override them. Results are saved to the app’s Transcribe page like any manual import.
Progress is written to stderr, so redirecting stdout gives you a clean transcript. With multiple files, each transcript is preceded by a ==> file (id …) header.
The free plan allows a limited lifetime number of manual transcriptions and runs one at a time. Exceeding either exits with code 5.
Same as transcribe --no-wait, with friendlier output. It prints the queued id for each file and reminds you how to follow along.
vowen import produces transcriptions. vowen notes import produces meeting notes with an AI summary. Different commands, different destinations.
Lists the models you can use right now: local models you have downloaded, plus cloud models you have configured an API key for. The active one is marked.
Use the ID column as the value for --model on transcribe and notes import.

Dictionary, threads, and settings

There are two independent tag pools. --pool is a persistent flag on every subcommand and defaults to notes.
At least one of --add or --remove is required. The CLI looks the item up first to find out whether it is a note or a transcription, so names resolve against the correct pool automatically.
Aliases for the group: dictionary, dict. These are the terms the transcriber should recognize, the same list as the Dictionary page.
add reports what it added and what it skipped as already present, so it is safe to re-run over the same list.
Aliases for the group: threads, snippets. These are the trigger-to-replacement rules applied to transcripts, the same list as the Threads page.
The shortcut-to-body expansions of the text expander.
Built-in expansions cannot be deleted. remove rejects them and tells you to disable them instead.
get with no key prints all settings as JSON. With a key, prints just that value. Anything that looks like an API key, token, secret, password, or licence comes back as <redacted>.
Values are parsed before being sent: true and false become booleans, digits become numbers, text starting with { or [ is parsed as JSON, and everything else stays a string.set only accepts these keys. Anything else is rejected. Shortcuts, API keys, sync, and account settings are deliberately not writable from the CLI, because a malformed shortcut config can leave the keyboard hook in a bad state.language, modelSize, transcriptionEngine, autoPaste, restoreClipboard, allowClipboardHistory, removeFillerWords, translateToEnglish, englishSpelling, theme, dailyGoal, saveRecordings, meetingNotesAutoStopOnEnd, meetingDetectionEnabled, cliServerEnabled

App control

Drives the same dictation path as your keyboard shortcut, so the transcript lands in your history and is pasted wherever your cursor is, exactly as if you had held the key.
cancel mirrors the Esc cancel path exactly, including clearing any active mute.
A notes-session line is added when one is active. --json returns the full status object, which also carries the platform and API version.
app launch starts the app in the background if it is not running and prints “Vowen is running.” once the API answers. On macOS it does not steal focus.app version prints the running desktop app’s version, which is unrelated to vowen --version.

Setup and tooling

Prints the CLI version, platform, the VOWEN_CLI_SERVER override if set, the discovered server file, the loopback port and API version, then the app version, plan, engine, and model.doctor never launches the app, so “not reachable” is a real answer rather than a race. See the troubleshooting section for how to read its output.
Downloads the release manifest, verifies the SHA-256, and swaps the binary atomically. On Windows the running executable is renamed out of the way first, so this works even while vowen mcp is live under a coding agent.
Writes a completion script to stdout.
Run vowen completion <shell> --help for the exact install instructions for your setup.
Runs a Model Context Protocol server over stdio, exposing 23 tools covering search, history, notes, transcription, tags, vocabulary, replacements, expansions, settings, and recording control.
This is not a command you run interactively. See the MCP server page for the full tool list and client setup.

Environment variables

VOWEN_CLI_SERVER exists for development against a test instance. It is exclusive on purpose, so pointing the CLI at a throwaway app can never silently fall through to your real one.