> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vowen.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Command Mode

> Speak instructions to AI: transform text, convert files, run real actions.

export const ActionDemo = ({description, command, video, poster, children}) => <div className="my-4 rounded-2xl border border-zinc-200 dark:border-zinc-800 p-6">
    <div className="text-sm text-zinc-600 dark:text-zinc-400 mb-4 leading-relaxed">
      {description || children}
    </div>

    {command && <div className={`font-mono text-sm text-zinc-800 dark:text-zinc-200 bg-zinc-100/60 dark:bg-zinc-900/60 rounded-lg px-3 py-2 inline-block ${video ? "mb-5" : ""}`}>
        {command}
      </div>}

    {video && <div style={{
  position: "relative",
  background: "#000",
  borderRadius: "0.5rem",
  overflow: "hidden"
}}>
        <video muted playsInline preload="metadata" poster={poster || `${video.replace(/\.mp4$/, "")}-poster.jpg`} style={{
  width: "100%",
  display: "block",
  cursor: "pointer"
}} onLoadedMetadata={e => {
  try {
    e.currentTarget.currentTime = 1;
  } catch (err) {}
}} onClick={e => {
  const v = e.currentTarget;
  if (v.paused) {
    v.muted = false;
    v.play();
  } else {
    v.pause();
  }
}} onPlay={e => {
  const parent = e.currentTarget.parentElement;
  const playBtn = parent.querySelector('[data-play-btn]');
  if (playBtn) {
    playBtn.style.opacity = '0';
    playBtn.style.pointerEvents = 'none';
  }
  const muteBtn = parent.querySelector('[data-mute-btn]');
  if (muteBtn) {
    muteBtn.querySelector('[data-icon-muted]').style.display = 'none';
    muteBtn.querySelector('[data-icon-unmuted]').style.display = 'block';
  }
}} onPause={e => {
  const playBtn = e.currentTarget.parentElement.querySelector('[data-play-btn]');
  if (playBtn) {
    playBtn.style.opacity = '1';
    playBtn.style.pointerEvents = 'auto';
  }
}}>
          <source src={video} type="video/mp4" />
        </video>

        <button data-play-btn aria-label="Play video" onClick={e => {
  const v = e.currentTarget.parentElement.querySelector('video');
  v.muted = false;
  v.play();
}} style={{
  position: "absolute",
  top: "50%",
  left: "50%",
  transform: "translate(-50%, -50%)",
  width: "72px",
  height: "72px",
  borderRadius: "9999px",
  background: "rgba(0,0,0,0.55)",
  border: "2px solid rgba(255,255,255,0.9)",
  cursor: "pointer",
  display: "flex",
  alignItems: "center",
  justifyContent: "center",
  transition: "opacity 0.2s ease",
  padding: 0
}}>
          <svg width="28" height="28" viewBox="0 0 24 24" fill="white" style={{
  marginLeft: "4px"
}}>
            <path d="M8 5v14l11-7z" />
          </svg>
        </button>

        <button data-mute-btn aria-label="Toggle mute" onClick={e => {
  e.stopPropagation();
  const v = e.currentTarget.parentElement.querySelector('video');
  v.muted = !v.muted;
  e.currentTarget.querySelector('[data-icon-muted]').style.display = v.muted ? 'block' : 'none';
  e.currentTarget.querySelector('[data-icon-unmuted]').style.display = v.muted ? 'none' : 'block';
}} style={{
  position: "absolute",
  top: "0.75rem",
  right: "0.75rem",
  background: "rgba(0,0,0,0.55)",
  border: "none",
  borderRadius: "9999px",
  width: "36px",
  height: "36px",
  cursor: "pointer",
  display: "flex",
  alignItems: "center",
  justifyContent: "center",
  padding: 0
}}>
          <svg data-icon-muted width="16" height="16" viewBox="0 0 24 24" fill="white" style={{
  display: "block"
}}>
            <path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.17v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z" />
          </svg>
          <svg data-icon-unmuted width="16" height="16" viewBox="0 0 24 24" fill="white" style={{
  display: "none"
}}>
            <path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z" />
          </svg>
        </button>
      </div>}
  </div>;

<img className="block dark:hidden" style={{ marginTop: "-1rem" }} src="https://mintcdn.com/vowen/2NLLQOm5sszam2ni/images/command-mode-light.png?fit=max&auto=format&n=2NLLQOm5sszam2ni&q=85&s=e0517f2304bc056d7b6749885808c080" alt="Voice command flow: speech to AI to action" width="1672" height="941" data-path="images/command-mode-light.png" />

<img className="hidden dark:block" style={{ marginTop: "-1rem" }} src="https://mintcdn.com/vowen/2NLLQOm5sszam2ni/images/command-mode-dark.png?fit=max&auto=format&n=2NLLQOm5sszam2ni&q=85&s=27c52ea72a62502d78b93f3de27877b9" alt="Voice command flow: speech to AI to action" width="1672" height="941" data-path="images/command-mode-dark.png" />

<div style={{ marginBottom: "0.75rem" }}>
  <Info>Command Mode runs are capped at **5 per day** on the Free plan. <a href="https://vowen.ai" className="font-semibold underline-offset-2" style={{ color: "#8b5cf6", backgroundColor: "rgba(139, 92, 246, 0.12)", border: "1px solid rgba(139, 92, 246, 0.35)", padding: "2px 8px", borderRadius: "6px", fontSize: "0.85em", textDecoration: "none", whiteSpace: "nowrap" }}>Pro</a> removes the cap.</Info>
</div>

## What is Command Mode?

Command Mode lets you speak **instructions** to an AI model instead of transcribing your words verbatim. It handles two kinds of work:

* **Text transformations** on selected text. Summarize, rewrite, translate, fix grammar, adjust tone, draft replies, format as lists, and more.
* **Real actions** on files and your system. Convert images, audio, video, config files, text and Markdown. Zip and unzip archives. Merge PDFs. Compress images. Set timers. Extract color palettes from your screen. Open apps, websites, editors, and macOS settings panels.

Speak naturally and Vowen routes your command to the right action.

**Default shortcut:** `Alt + Shift` on both macOS and Windows.

<Warning>
  **If the Command Mode toggle is off, pressing the shortcut does nothing at all.** No banner, no sound, no recording indicator, no error. Command Mode is deliberately silent when disabled, so a dead shortcut looks identical to a broken install.

  Before troubleshooting anything else, open **Configure your AI > Command Mode** and confirm both of these:

  1. An AI provider is connected (the tab shows a "Connect an AI provider" card if not).
  2. The **Command Mode** checkbox at the top of the tab is ticked.

  The same checkbox is greyed out once a free user has used up their daily runs, which produces the same silent shortcut.
</Warning>

<Frame caption="This is the checkbox that has to be ticked. It sits at the very top of the Command Mode tab, above every other control.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/command-mode-enable-toggle.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=3d5c0e445926861f89dc9818624a1acf" alt="The Configure your AI window on the Command Mode tab, with the Command Mode master toggle at the top of the panel switched on and highlighted" width="2400" height="1600" data-path="images/app/command-mode-enable-toggle.png" />
</Frame>

## Turning it on

<Steps>
  <Step title="Open Configure your AI">
    In the left sidebar, under **Vowen AI**, click **Configure your AI**. The page has three tabs: **Configuration**, **Command Mode**, and **Memory**.
  </Step>

  <Step title="Connect a provider on the Configuration tab">
    Command Mode needs an AI provider. See [Setting up AI](/ai-features/ai-setup).
  </Step>

  <Step title="Tick Command Mode on the Command Mode tab">
    The master checkbox sits at the top of the tab, above the screen-context options and the utility cards. It is **not** in Settings > Shortcuts. That page only rebinds the key.
  </Step>
</Steps>

<Frame caption="The whole Command Mode tab: master toggle at the top, Context-awareness and Drag to capture region nested beneath it, then the utility cards.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/command-mode-tab.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=92bf0f492e529a202fa36c1219505822" alt="The Command Mode tab of Configure your AI, showing the Command Mode toggle, the Context-awareness and Drag to capture region rows, and a grid of utility cards such as Convert Media, Merge PDFs and Set Timer" width="2400" height="1600" data-path="images/app/command-mode-tab.png" />
</Frame>

## How it works

<Steps>
  <Step title="Start the recording">
    Hold `Alt + Shift` (or your own binding). See [Ways to start a command](#ways-to-start-a-command) for the alternatives.
  </Step>

  <Step title="Speak your instruction">
    Tell the AI what you want done. Be specific and natural.
  </Step>

  <Step title="Release">
    The AI processes your command, and either the result appears in a confirmation banner or an action runs (converting a file, merging PDFs, opening an app).
  </Step>
</Steps>

### Ways to start a command

Hold-to-talk is the default, but it is not the only trigger.

| Trigger | How it behaves |
| - | - |
| **Hold the shortcut** | Record while held, process on release. The default. |
| **Tap-to-toggle** | Set the shortcut's mode to **Toggle** in Settings > Shortcuts. One tap starts, the next tap stops. Nothing stays held. |
| **The idle pill** | Click the command button on the floating idle pill. This starts a Command Mode recording as a toggle with no key held at all; stop it with the pill's stop button. |
| **A mouse button** | Bind Command Mode to a mouse button instead of a key combination. |
| **Alternative shortcuts** | Add a second binding for the same action. Multiple shortcuts per action is a Pro feature. |

<Note>Every one of these paths is subject to the master toggle above. With Command Mode off, the mouse button, the tap-toggle and the idle-pill button are all equally silent.</Note>

## Reviewing and refining the result

For text results, Command Mode shows a confirmation banner before anything is pasted, so you can review the output, copy it, refine it, or discard it.

* **Paste:** press `Tab` to paste the result into your focused app
* **Copy everything:** click the copy button in the banner's action bar
* **Copy part of it:** select any portion of the response text inside the banner and press `Cmd+C` (macOS) / `Ctrl+C` (Windows). Only the highlighted text is copied; with nothing selected, your clipboard is left untouched
* **Dismiss:** press `Esc` to close the banner without pasting

<Frame caption="Nothing is pasted until you press Tab. The copy button sits beside it, and Esc on the right closes the banner and discards the result.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/paste-banner-1-result.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=7143e0de245f3056b7477ea2bab6eef4" alt="The Command Mode result banner showing a drafted reply, a Hold Option plus Shift for follow-up hint, and an action bar with Paste (Tab), a copy button, and Esc" width="2560" height="1670" data-path="images/app/paste-banner-1-result.png" />
</Frame>

The banner renders Markdown (headings, lists, bold, code, links) when the response looks like Markdown, and keeps plain dictation as plain text. Any links in the output open in your default browser instead of taking over the banner.

### Follow-up questions

You don't have to start over to refine a result. While the banner is open, **hold the Command Mode shortcut again** and speak a follow-up like *"make it shorter"* or *"more formal."* Vowen sends your follow-up along with the original request and previous response as context, reuses the same selected text, screenshot, and tone (nothing is re-captured), and replaces the banner with the updated version.

<Frame caption="While you hold the shortcut, the banner's action bar is replaced by a Listening pill. Speak the refinement and release.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/paste-banner-2-listening.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=36f261d6f8b0e569b1978e1b299c97dc" alt="The bottom of the Command Mode banner, where the Paste and Esc buttons have been replaced by a pill reading Listening with an audio waveform icon" width="2560" height="1670" data-path="images/app/paste-banner-2-listening.png" />
</Frame>

* A **`Hold [shortcut] for follow-up`** hint appears in the banner whenever a Command Mode shortcut is assigned
* Once you have two or more versions, a version pager (`1/2`, with prev/next arrows) appears so you can cycle back through earlier versions. **`Tab` pastes whichever version you're currently viewing**, not necessarily the newest
* While a follow-up is processing (`Thinking`), press `Esc` to cancel it. The banner reverts to the previous reply and stays open; press `Esc` again to dismiss it

<Frame caption="Check the pager before you press Tab. It tells you which version you are looking at, and that is the one that gets pasted.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/paste-banner-4-pager.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=dacb287d1f8a9ce1a2e260316120dca4" alt="A small version pager in the corner of the Command Mode banner, showing a left arrow, the text 2 slash 2, and a right arrow" width="2560" height="1670" data-path="images/app/paste-banner-4-pager.png" />
</Frame>

<Note>
  Follow-ups are not an unbounded chat.

  * Each follow-up sends the **original request** plus the **latest reply**, not the whole thread. Refinements build on the most recent version, so a detail you dropped three versions ago is gone.
  * The saved thread caps at **30 request/response pairs**. Past that, the oldest turns drop off the stored entry.
  * Follow-ups produce plain-text refinements only. If a follow-up triggers a tool call (a file action, a timer, and so on), the refinement session ends.
</Note>

### Switching models on failure

If a Command Mode run or a [custom utility](#custom-utilities) fails, including when a provider returns a rate-limit error, the banner shows a **"Switch to:"** row with a chip for each of your other configured AI providers. Click one to retry the same request against a different model. The retry reuses the original prompt (so a moved selection or clipboard won't break it), and the provider you pick becomes your new default.

<Frame caption="The failure banner quotes what you said and lists every other provider you have configured. One click re-runs the same request on the model you choose.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/command-mode-provider-switch-chips.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=980b9cf577397c3ce9b8dec638002090" alt="A Command Mode Failed banner reading Rate limit reached, followed by a Switch to row of provider chips for OpenAI, Anthropic, DeepSeek, OpenRouter, Cerebras, AWS Bedrock, Custom API and Gemini" width="2470" height="1474" data-path="images/app/command-mode-provider-switch-chips.png" />
</Frame>

## Context awareness

Command Mode automatically pulls context from several places so the AI knows what you're talking about without you having to spell it out.

### Selected text

If you have text selected on screen when you activate Command Mode, that selection is included as context. Phrases like "this", "it", "the text" automatically refer to the selection. This is the most common way to give the AI something to operate on.

**Example workflow:**

1. Select a paragraph of text in any app
2. Hold `Alt + Shift`
3. Say "Make this more concise"
4. Release, then press `Tab` to paste the rewrite over your selection.

### Selected files

If you have one or more files selected (in Finder on macOS, Explorer on Windows), Command Mode passes the filenames to the AI. This is what unlocks the file-action tools below (compress this image, merge these PDFs, zip these, convert to webp, and so on).

### Screen context

Command Mode can capture a screenshot and send it to the AI for visual context. This requires **two** things:

1. **Screen Recording permission** granted to Vowen (macOS only)
2. **Configure your AI > Command Mode > Context-awareness** toggled on

Until the permission is granted on macOS, the Context-awareness row is disabled and a **Grant Screen Recording Permission** button sits over it.

With both active, you can ask things like *"What's the error message on screen?"* or *"Draft a reply to this email."*

<Note>The old path "Settings > Recording > Include screenshot" no longer exists. The toggle lives on the Command Mode tab and is named **Context-awareness**.</Note>

<Frame caption="Context-awareness is the screenshot toggle, nested directly under the Command Mode master switch. It is off until you turn it on.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/command-mode-screen-context.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=c8e65fcf2dc35b59b29226c3e81df827" alt="The Command Mode tab with the Context-awareness row highlighted, labelled Include context from your screen when processing with AI, its toggle switched off" width="2400" height="1600" data-path="images/app/command-mode-screen-context.png" />
</Frame>

#### Drag to capture a region

By default the screenshot captures your whole screen. To pick exactly what the AI sees, turn on **Drag to capture region**, directly beneath Context-awareness on the same tab. With it enabled, starting a Command Mode recording shows a transparent overlay. Click and drag to select one or more rectangles.

<Frame caption="Drag to capture region is the row immediately below Context-awareness. Its own description spells out that it replaces the full-screen capture.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/command-mode-region-capture.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=09cdb492242897bbe90ce58063e856c3" alt="The Command Mode tab with the Drag to capture region row highlighted and its toggle switched on" width="2400" height="1600" data-path="images/app/command-mode-region-capture.png" />
</Frame>

**Captured regions replace the automatic full-screen shot for that command.** They are not added on top of it, so you can point the AI at a single chart, error dialog, or paragraph instead of the entire desktop. The overlay needs the same Screen Recording permission as full-screen capture, and it stays open for multiple selections until you finish the command or press `Esc`.

<Frame caption="Each rectangle you drag is confirmed under the recording indicator, with a running count so you can tell how many regions the command will carry.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/indicator-command-screenshot-toast.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=17b60f8b5ef58f53ef8f45d24e7bba2e" alt="A small confirmation strip beneath the recording indicator reading Screenshot added, followed by the number 2 in brackets" width="1147" height="656" data-path="images/app/indicator-command-screenshot-toast.png" />
</Frame>

### Memory

Your saved [Memory](/features/memory) notes are automatically included as context.

**Example:** if you have a "My Writing Style" note in Memory, say *"Rewrite this in my style"* and the AI will reference it.

<Note>Memory reaches **Command Mode and Custom Utilities only**. It is never sent to AI Enhancement, meeting summaries, or Ask AI.</Note>

### Connectors

If you've linked any [Connectors](/integrations/connectors) (Pro, experimental), Command Mode can **read** from them while it works, for example looking up a Linear issue or a Notion page.

<Warning>Connectors are read-only in Command Mode. Only read-shaped tools (`list_*`, `get_*`, `search_*`, `fetch_*`, `read_*`, `find_*`, `view_*`, `query_*`, `count_*`, `show_*`, `retrieve_*`) are exposed to the model. Every mutating tool (create, update, delete, add, remove, set, archive, send, post) is filtered out before the model ever sees it. Command Mode cannot create a Linear issue, edit a Notion page, or send anything on your behalf.</Warning>

### Other automatic context

Command Mode also passes the following to the AI on every call:

* **The 10 most recently added vocabulary entries** from your [Dictionary](/features/dictionary), so the AI spells your domain terms correctly. The selection is by recency, not by any ranking. The store is sorted alphabetically, so taking "the top 10" would only ever show the model the start of the alphabet.
* **Active app name** and the matching **Tone directive** (if [Tones](/ai-features/tones) match), so output adapts to the app you're working in
* **Language code** from your transcription settings, so the AI responds in your language

## Actions

Beyond text manipulation, Command Mode ships **17 tools** it can call. Speak any of these naturally and Vowen runs the matching one. Every file tool operates on whatever you have selected in Finder or Explorer.

### Image conversion

<ActionDemo description="Convert images between formats with a single voice command. Select one or more images in Finder, speak the target format, and Vowen drops the converted files next to the originals. Supports PNG, JPG, WEBP, AVIF, GIF, TIFF, HEIC, HEIF, and JFIF." command={'"Convert this image from JPG to PNG"'} video="/videos/image-conversion-demo.mp4" />

### Config file conversion

<ActionDemo description="Switch a config file between JSON, YAML, TOML, and XML with one voice command. Select the source file, speak the target format, and Vowen writes the converted file alongside the original. Conversion is bidirectional across all four formats." command={'"Convert this file from JSON to YAML"'} video="/videos/config-conversion-demo.mp4" />

### Audio conversion

<ActionDemo description="Convert audio files between formats with a voice command. Vowen supports MP3, WAV, AAC, FLAC, OGG, M4A, and WMA. It can also extract the audio track from any video file if you select one." command={'"Convert this audio from WAV to MP3"'} video="/videos/audio-conversion-demo.mp4" />

### Video conversion

<ActionDemo description="Convert video files between MP4, AVI, MOV, MKV, WEBM, FLV, and WMV. Video input only. To pull the audio out of a video, use audio conversion instead." command={'"Convert this video from MOV to MP4"'} video="/videos/video-conversion-demo.mp4" />

### Merge PDFs

<ActionDemo description="Select two or more PDFs and merge them into one, in selection order. Without a name, the result is saved as merged.pdf." command={'"Merge these PDFs"'} video="/videos/merge-pdfs-demo.mp4" />

### Image compression

<ActionDemo description="Compress the selected image without changing its format. Quality defaults to 80 if you don't say a number. Works on JPG, PNG, WEBP, AVIF, HEIC, GIF, and TIFF." command={'"Compress this image to 70 percent"'} video="/videos/image-compression-demo.mp4" />

### Zip files

<ActionDemo description="Zip the files and folders you have selected into a single archive. Without a name, the archive is saved as archive.zip next to the originals." command={'"Zip these files"'} />

### Unzip files

<ActionDemo description="Extract the selected .zip archives. By default each archive is extracted into a folder named after the zip, so multiple archives never collide. You can name a destination instead." command={'"Unzip this"'} />

### Text to Markdown

<ActionDemo description="Convert selected .txt files to Markdown. By default the first line becomes a heading; say so if you'd rather it didn't." command={'"Convert these text files to Markdown"'} />

### Markdown to PDF

<ActionDemo description="Render selected .md files to PDF. Styling defaults to a GitHub-flavoured look; a minimal style is also available." command={'"Turn this Markdown into a PDF, minimal styling"'} />

### Open in an editor

<ActionDemo description="Open the folder or file you have selected in a code editor. Supported editors: VS Code, Cursor, Sublime Text, Atom, WebStorm, PhpStorm, IntelliJ IDEA, and PyCharm. On macOS Vowen launches the app bundle rather than the CLI shim, so it works even when your shell PATH isn't inherited." command={'"Open this folder in Cursor"'} />

### Open an app

<ActionDemo description="Launch an application by name. Say the app's common name and Vowen resolves it to the installed program." command={'"Open Spotify" / "Launch Slack" / "Open VS Code"'} />

Vowen resolves app names differently on each platform, which matters if a launch fails:

<AccordionGroup>
  <Accordion title="macOS">
    Vowen hands the name to LaunchServices. Common spoken shorthands map to real bundle names first. "vs code" and "code" become Visual Studio Code, "chrome" becomes Google Chrome, "word" becomes Microsoft Word, "excel" becomes Microsoft Excel, "powerpoint" becomes Microsoft PowerPoint, "outlook" becomes Microsoft Outlook, "teams" becomes Microsoft Teams, "photoshop" becomes Adobe Photoshop, and "vlc" becomes VLC. Anything else is tried verbatim.
  </Accordion>

  <Accordion title="Windows">
    Windows resolves programs through PATH and the App Paths registry, which register **executable names**, never display names. Asking for "Google Chrome" would fail on a machine that has Chrome installed, so Vowen translates to the exe name first and only then tries the spoken name verbatim.

    | You say | Vowen launches |
    | - | - |
    | chrome, google chrome | `chrome` |
    | edge, microsoft edge | `msedge` |
    | firefox, mozilla firefox | `firefox` |
    | brave / opera / vivaldi | `brave` / `opera` / `vivaldi` |
    | vs code, vscode, visual studio code | `code` |
    | word | `winword` |
    | excel | `excel` |
    | powerpoint | `powerpnt` |
    | outlook | `outlook` |
    | notepad | `notepad` |
    | explorer, file explorer | `explorer` |
    | calculator | `calc` |
    | paint | `mspaint` |
    | task manager | `taskmgr` |
    | control panel | `control` |
    | cmd, command prompt | `cmd` |
    | powershell | `powershell` |
    | terminal | `wt` (Windows Terminal) |

    **Microsoft Store and UWP apps** have no `.exe` on PATH, so none of the above can find them. When every direct attempt fails, Vowen falls back to searching the Start Menu for an app whose name contains what you said, then launches it by its AppUserModelID through the shell Apps folder. This is what makes Store-installed apps reachable by voice.
  </Accordion>

  <Accordion title="Linux">
    Vowen resolves the `.desktop` entry through `gtk-launch`, falling back to running the bare command name.
  </Accordion>
</AccordionGroup>

<Note>Never use "open an app" to reach a website. Say the address instead and Vowen uses the **Open a website** tool below, which respects your default browser. Asking to "open Chrome" launches the browser at whatever it was showing.</Note>

### Open a website

<ActionDemo description="Open a web address in your default browser. Say the address however you'd naturally say it. Spoken forms like 'github dot com' are normalized, and a scheme is not required." command={'"Open github.com" / "Go to news.ycombinator.com" / "Navigate to the Vowen docs"'} />

### Timer

<ActionDemo description="Set a countdown timer by voice. Say it in any unit (seconds, minutes, or hours) and Vowen converts it. Maximum 24 hours." command={'"Set a 10 minute timer"'} video="/videos/timer-demo.mp4" />

<Frame caption="The timer becomes a floating countdown pill that stays on screen over whatever you are working in.">
  <img src="https://mintcdn.com/vowen/ITmCJz6YkE9-_Kui/images/app/timer-pill-running.png?fit=max&auto=format&n=ITmCJz6YkE9-_Kui&q=85&s=fde656f29086d38e1bb60d1cb9d09744" alt="A small dark floating pill showing a stopwatch icon and the remaining time, 4 minutes 5 seconds" width="786" height="411" data-path="images/app/timer-pill-running.png" />
</Frame>

### Translation

<ActionDemo description="Translate the selected text. Vowen detects the source language from the text itself, so you only need to name the target. Say nothing about the target and it translates between English and your configured language." command={'"Translate this to Spanish"'} video="/videos/translation-demo.mp4" />

### Open macOS settings

<ActionDemo description="Jump straight to a macOS System Settings pane. Covers privacy, security, microphone, camera, screen recording, accessibility, location, sound, displays, network, wifi, bluetooth, keyboard, shortcuts, notifications, battery, and sharing. macOS only." command={'"Open microphone settings"'} video="/videos/open-settings-demo.mp4" />

### Color palette

<ActionDemo description="Capture the screen and show its dominant colors. Takes no arguments. Just ask." command={'"Get the color palette on the screen"'} video="/videos/color-palette-demo.mp4" />

## Custom utilities

Custom utilities are voice-free AI shortcuts. Each one is a saved prompt bound to its own keyboard shortcut. Press the shortcut and Vowen runs that prompt against whatever you have selected (or on your clipboard), without recording anything.

They live on the same **Configure your AI > Command Mode** tab, below the built-in utility cards.

<Frame caption="Your own utilities sit in the same grid as the built-in ones, each showing its shortcut. The dotted Create custom utility card closes the grid.">
  <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/custom-utilities-grid.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=38fa6140d66cd7998b77212402f12bf6" alt="The utility card grid on the Command Mode tab, with built-in cards such as Convert Media and Merge PDFs, a custom Make it formal card bound to Control Numpad 1, and a highlighted dotted Create custom utility card at the end" width="2400" height="1600" data-path="images/app/custom-utilities-grid.png" />
</Frame>

<Note>The Free plan includes **one** custom utility. Additional utilities require <a href="https://vowen.ai" className="font-semibold underline-offset-2" style={{ color: "#8b5cf6", backgroundColor: "rgba(139, 92, 246, 0.12)", border: "1px solid rgba(139, 92, 246, 0.35)", padding: "2px 8px", borderRadius: "6px", fontSize: "0.85em", textDecoration: "none", whiteSpace: "nowrap" }}>Pro</a>. Custom utilities also require Command Mode to be connected and enabled. Unlike the Command Mode shortcut itself, a utility that can't run tells you so with a notification.</Note>

<Steps>
  <Step title="Click Create custom utility">
    <Frame caption="Create Custom Utility: a name, an optional shortcut, and a starting template. Custom prompt is the free-form option.">
      <img src="https://mintcdn.com/vowen/94qaixcfbwWHsixE/images/app/custom-utility-create-1-modal.png?fit=max&auto=format&n=94qaixcfbwWHsixE&q=85&s=65d9942f546df1be27041ac34fac15f4" alt="The Create Custom Utility dialog with Name and Keyboard Shortcut fields and a gallery of templates including Polish text, Rewrite as email, Summarize and Custom prompt" width="2400" height="1600" data-path="images/app/custom-utility-create-1-modal.png" />
    </Frame>

    The dotted card at the end of the utility grid.
  </Step>

  <Step title="Name it">
    The name shows on the card and in shortcut-conflict warnings.
  </Step>

  <Step title="Pick a template">
    Six presets ship, free on every plan: **Polish text**, **Rewrite as email**, **Fix grammar & spelling**, **Make professional**, **Summarize**, and **Bullet points**.

    The **Custom prompt** card in the same gallery lets you write the prompt yourself. That card is <a href="https://vowen.ai" className="font-semibold underline-offset-2" style={{ color: "#8b5cf6", backgroundColor: "rgba(139, 92, 246, 0.12)", border: "1px solid rgba(139, 92, 246, 0.35)", padding: "2px 8px", borderRadius: "6px", fontSize: "0.85em", textDecoration: "none", whiteSpace: "nowrap" }}>Pro</a>.
  </Step>

  <Step title="Record a shortcut">
    A shortcut is required, and it must include at least one modifier plus one regular key (for example `Option+1` or `Ctrl+Shift+P`). Vowen refuses a combination already used by another utility, a tone, or a built-in shortcut.
  </Step>
</Steps>

### Prompt variables

Custom prompts support two variables, both captured automatically every run:

| Variable | Resolves to |
| - | - |
| `{{selected_text}}` | Whatever is highlighted in the focused app |
| `{{clipboard}}` | The current clipboard text |

If your prompt needs selected text and nothing is selected, Vowen tells you to highlight something first rather than sending an empty prompt. Same for an empty clipboard.

### What happens to the result

**The result appears in the paste confirmation banner**, exactly as a Command Mode result does. There is one output path and no setting to change it. `Tab` pastes it, `Cmd+C` / `Ctrl+C` copies a selection from it, `Esc` dismisses it. Nothing is written anywhere until you accept it, so a utility can never overwrite your selection behind your back.

`Esc` also cancels a run in flight, and a result that arrives after you canceled is discarded rather than shown.

<Note>Custom utilities are the one place besides Command Mode that reads your [Memory](/features/memory). The **Polish text** preset is the exception: it runs on the strict transcription-cleanup prompt, which deliberately gets no Memory context.</Note>

## Text-only commands

For pure text transformations (no files or actions), select text in any app and speak the instruction.

<div className="my-6 flex flex-col md:flex-row gap-4 items-stretch">
  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4">
    <div className="text-xs uppercase tracking-wide text-zinc-500 mb-2 font-semibold">Selected text</div>
    <div className="text-sm text-zinc-700 dark:text-zinc-300 leading-relaxed">Just wrapped up the Q3 review. We're tracking well on the product launch, engineering fixed the major bugs from last sprint, marketing is preparing the press kit for next month, and support tickets are down 20%. Sarah will lead the launch coordination going forward.</div>
  </div>

  <div className="flex flex-col items-center justify-center gap-2 px-2 md:w-56 md:shrink-0">
    <div className="text-2xl text-violet-500 dark:text-violet-400">→</div>
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 font-semibold">Summarize</div>
    <div className="font-mono text-xs text-zinc-500 dark:text-zinc-500 text-center">"Summarize this"</div>
  </div>

  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 bg-violet-500/5">
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 mb-2 font-semibold">Result</div>
    <div className="text-sm text-zinc-800 dark:text-zinc-200 leading-relaxed">Q3 review highlights:<br />• Product launch on track<br />• Engineering bugs resolved<br />• Marketing preparing press kit<br />• Support tickets down 20%<br />• Sarah leads launch coordination</div>
  </div>
</div>

<div className="my-6 flex flex-col md:flex-row gap-4 items-stretch">
  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4">
    <div className="text-xs uppercase tracking-wide text-zinc-500 mb-2 font-semibold">Selected text</div>
    <div className="text-sm text-zinc-700 dark:text-zinc-300 leading-relaxed">i should of sent this email yesterday but i forgot, your absolutely right we need to fix this asap, me and the team is on it.</div>
  </div>

  <div className="flex flex-col items-center justify-center gap-2 px-2 md:w-56 md:shrink-0">
    <div className="text-2xl text-violet-500 dark:text-violet-400">→</div>
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 font-semibold">Fix grammar</div>
    <div className="font-mono text-xs text-zinc-500 dark:text-zinc-500 text-center">"Fix the grammar"</div>
  </div>

  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 bg-violet-500/5">
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 mb-2 font-semibold">Result</div>
    <div className="text-sm text-zinc-800 dark:text-zinc-200 leading-relaxed">I should have sent this email yesterday but I forgot. You're absolutely right, we need to fix this ASAP. The team and I are on it.</div>
  </div>
</div>

<div className="my-6 flex flex-col md:flex-row gap-4 items-stretch">
  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4">
    <div className="text-xs uppercase tracking-wide text-zinc-500 mb-2 font-semibold">Selected text</div>
    <div className="text-sm text-zinc-700 dark:text-zinc-300 leading-relaxed">hey can u look at the PR I sent? lmk what u think, no rush but ideally before EOD</div>
  </div>

  <div className="flex flex-col items-center justify-center gap-2 px-2 md:w-56 md:shrink-0">
    <div className="text-2xl text-violet-500 dark:text-violet-400">→</div>
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 font-semibold">Make formal</div>
    <div className="font-mono text-xs text-zinc-500 dark:text-zinc-500 text-center">"Make this more formal"</div>
  </div>

  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 bg-violet-500/5">
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 mb-2 font-semibold">Result</div>
    <div className="text-sm text-zinc-800 dark:text-zinc-200 leading-relaxed">Hi, could you please review the pull request I sent? Let me know your thoughts. There is no immediate rush, but ideally before end of day.</div>
  </div>
</div>

<div className="my-6 flex flex-col md:flex-row gap-4 items-stretch">
  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4">
    <div className="text-xs uppercase tracking-wide text-zinc-500 mb-2 font-semibold">Selected text</div>
    <div className="text-sm text-zinc-700 dark:text-zinc-300 leading-relaxed">for next week we need to confirm the venue book the catering send the invites finalize the agenda and prepare the slides</div>
  </div>

  <div className="flex flex-col items-center justify-center gap-2 px-2 md:w-56 md:shrink-0">
    <div className="text-2xl text-violet-500 dark:text-violet-400">→</div>
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 font-semibold">Format as list</div>
    <div className="font-mono text-xs text-zinc-500 dark:text-zinc-500 text-center">"Turn these into bullet points"</div>
  </div>

  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 bg-violet-500/5">
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 mb-2 font-semibold">Result</div>
    <div className="text-sm text-zinc-800 dark:text-zinc-200 leading-relaxed">For next week:<br />• Confirm the venue<br />• Book the catering<br />• Send the invites<br />• Finalize the agenda<br />• Prepare the slides</div>
  </div>
</div>

<div className="my-6 flex flex-col md:flex-row gap-4 items-stretch">
  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4">
    <div className="text-xs uppercase tracking-wide text-zinc-500 mb-2 font-semibold">Selected text</div>
    <div className="text-sm text-zinc-700 dark:text-zinc-300 leading-relaxed">Hi, I noticed the report you sent was missing the section on customer retention. Could you add it and resend? Thanks, Jamie</div>
  </div>

  <div className="flex flex-col items-center justify-center gap-2 px-2 md:w-56 md:shrink-0">
    <div className="text-2xl text-violet-500 dark:text-violet-400">→</div>
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 font-semibold">Draft a reply</div>
    <div className="font-mono text-xs text-zinc-500 dark:text-zinc-500 text-center">"Write a reply to this"</div>
  </div>

  <div className="flex-1 rounded-xl border border-zinc-200 dark:border-zinc-800 p-4 bg-violet-500/5">
    <div className="text-xs uppercase tracking-wide text-violet-600 dark:text-violet-400 mb-2 font-semibold">Result</div>
    <div className="text-sm text-zinc-800 dark:text-zinc-200 leading-relaxed">Hi Jamie,<br /><br />Apologies for the oversight. I'll add the customer retention section and send the updated report by end of day.<br /><br />Thanks for catching that!</div>
  </div>
</div>

## Multilingual support

Command Mode works in every language Vowen's transcription supports. Speak a command in Spanish, Hindi, French, or Japanese and Command Mode understands the instruction and runs the task in that language. File conversions, timers, translations, formatting, and drafting replies all work regardless of the language you spoke.

For best results on non-English commands:

* Pair a multilingual speech model (Whisper Large v3, Groq Whisper, or any of the cloud providers) with a capable multilingual AI model such as **Claude Sonnet 4.6**, **GPT-5.4**, or **Gemini 3.5 Flash**
* The smallest, fastest models can struggle to follow instructions in low-resource languages
* Translation commands auto-detect both source and target languages

## Requirements

* An [AI provider must be configured](/ai-features/ai-setup)
* **Command Mode must be switched on** at Configure your AI > Command Mode. It is off until you enable it, and the shortcut is silent until then
* Use a model that follows instructions and emits clean JSON reliably. Good picks from the shipping catalogs: **GPT-5.4 Mini** or **GPT-5.4** (OpenAI), **Claude Sonnet 4.6** (Anthropic), **Gemini 2.5 Flash** or **Gemini 3.5 Flash** (Google), **GPT-OSS 120B** (Groq or Cerebras) if you want a free option
* **Context-awareness** and **Drag to capture region** additionally need Screen Recording permission on macOS

<Tip>The smallest tier of any provider can produce inconsistent tool calls, especially on non-English commands. If Command Mode behaves unpredictably, move one model up before changing anything else.</Tip>

***

<Card title="Set up an AI provider" icon="key" href="/ai-features/ai-setup">
  Connect Groq, OpenAI, Anthropic, Gemini, or any of 10 supported providers.
</Card>

Running into issues with Command Mode? See [AI & API Issues](/troubleshooting/ai-issues).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.