Skip to content

Pipelines Overview

Pipelines let you run shell commands when specific patterns are detected in your transcriptions. This is a powerful way to trigger automations, transform text, or control your Mac — all with your voice.

Freeway Settings - Pipelines

A pipeline is a shell command that runs when your transcribed text matches a specific pattern. The transcribed text is passed to your command via stdin and the $FREEWAY_TEXT environment variable.

Key features:

  • Pattern matching with multiple match types
  • Text transformation via stdout
  • Shell command flexibility
  • First-match-wins execution

┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ You speak │ ──▶ │ Transcribe │ ──▶ │ Pattern │
└─────────────┘ └──────────────┘ │ Match? │
└──────┬──────┘
┌────────────────────────────────┴────────────────┐
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ Yes │ │ No │
└────┬─────┘ └────┬─────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Run shell cmd │ │ Normal paste │
│ with text input │ │ (or next │
└────────┬────────┘ │ pipeline) │
│ └─────────────────┘
┌─────────────────────────────┐
│ Has stdout? ──▶ Paste it │
│ Empty output? ──▶ Skip │
│ Error? ──▶ Normal paste │
└─────────────────────────────┘

Pipelines support five match types:

Match TypeDescriptionExample PatternMatches
Starts withText begins with patternopen”open terminal”, “open finder”
Ends withText ends with patternplease”translate this please”, “help me please”
Exact matchText equals pattern exactlytoggle dark modeOnly “toggle dark mode”
ContainsPattern appears anywhereweather”what’s the weather”, “weather today”
RegexRegular expression match^open (.+)$”open terminal”, captures “terminal”

All matching is case-insensitive and punctuation is ignored.


Your shell command receives the transcribed text in two ways:

  1. stdin — Piped to your command
  2. $FREEWAY_TEXT — Environment variable
Terminal window
# Using stdin
cat | tr '[:lower:]' '[:upper:]'
# Using environment variable
echo "$FREEWAY_TEXT" | tr '[:lower:]' '[:upper:]'
ScenarioWhat Happens
Command succeeds with outputstdout is pasted instead of original text
Command succeeds with empty outputNothing is pasted (skip paste)
Command failsOriginal text is pasted

Only the first matching pipeline runs. If you have multiple pipelines that could match, the one that appears first in the list wins.

Drag and drop pipelines to reorder them.


Trigger: “uppercase” (Contains)

Terminal window
tr '[:lower:]' '[:upper:]'

Trigger: “what’s the date” (Exact match)

Terminal window
date "+%A, %B %d, %Y"

Trigger: “just copy” (Starts with)

Terminal window
pbcopy
# Empty stdout = skip paste

Trigger: “open google” (Exact match)

Terminal window
open "https://google.com"
# Empty stdout = skip paste