Wispr Proxyflow is a small, single-file tool for macOS. It starts a local proxy and rewrites Wispr Flow's subscription response, so the app shows the Pro plan. Everything runs on your Mac. Nothing is sent to Wispr's servers on your behalf. You still need the original Wispr Flow app as base app.
Important
Read more in the official documentation.
- Go to Releases and download the newest
.dmg. - Open the
.dmgand dragWispr Proxyflow.appto your/Applicationsfolder. - Double-click the app. It starts the proxy and relaunches Wispr Flow — the plan shows Pro.
First time opening a downloaded app? Right-click it → Open (macOS blocks unsigned downloads otherwise).
- To stop the proxy: open Terminal and run:
"/Applications/Wispr Proxyflow.app/Contents/MacOS/wispr-pro" stopClone the repository and run it straight from the source:
git clone https://github.com/thaikolja/wispr-proxyflow.git
cd wispr-proxyflow
# Install virtual environment, source into it, and install
python3 -m venv .venv && source .venv/bin/activate
# Install via live mode
pip install -e ".[dev]"
# Run your commands
python3 wispr_pro.py start # start proxy + relaunch Wispr Flow → Pro
python3 wispr_pro.py status # check proxy / app state
python3 wispr_pro.py stop # stop proxy + quit Wispr FlowThe first run creates a CA under ~/.wispr_pro/. If the app cannot connect, trust the CA once:
python3 wispr_pro.py trust # asks for your passwordRun the proxy in the background:
nohup python3 wispr_pro.py start >/tmp/wispr-pro.log 2>&1 &One command builds a ready-to-use .app for Apple Silicon (Python and mitmproxy are bundled inside):
python3 build_app.py # dist/Wispr Proxyflow.app (arm64)
python3 build_app.py --arch universal2 # arm64 + Intel
python3 build_app.py --name "Wispr Proxyflow" # custom nameA ready-made .dmg with the .app inside is built and published automatically for every release (see the GitHub Releases page).
| Command | What It Does |
|---|---|
wispr_pro.py start |
Start proxy (foreground) + relaunch Wispr Flow |
wispr_pro.py stop |
Stop proxy + quit Wispr Flow |
wispr_pro.py status |
Show proxy / port / app state |
wispr_pro.py trust |
Trust the proxy CA in the System keychain (sudo) |
wispr_pro.py selftest |
Verify the rewrite on a captured payload |
wispr_pro.py restart |
Stop, then start again |
Flags come after the command:
python3 wispr_pro.py start \
--plan FLOW_PRO_YEARLY \ # plan: FLOW_PRO_MONTHLY (default), FLOW_PRO_YEARLY, ...
--status active \ # status: active (default), trialing, ...
--trial-days 30 \ # total_trial_days + daysLeft
--trial-ends-at 1893456000 \ # unix timestamp
--credits 99999 \ # credits
--no-subscribed \ # --subscribed / --no-subscribed
--days-left 30 \ # daysLeft only
--marker total_trial_days \ # JSON key that triggers the rewrite
--host 127.0.0.1 --port 8080 \# proxy address
--ca-dir ~/.wispr_pro \ # state folder (config, CA, pid)
--app "/Applications/Wispr Flow.app" \
--no-relaunch # do not relaunch Wispr FlowRun python3 wispr_pro.py start --help for the full list.
For permanent settings, edit ~/.wispr_pro/config.toml (created on first start). Flags always win over the config file.
wispr_pro.py # the tool: addon + CLI (single file)
build_app.py # build entrypoint → dist/<name>.app
assets/icon/ # app icon (.icns)
docs/ # Nuxt documentation site
tests/ # pytest suite (no mitmproxy needed)
.github/workflows/ # CI + DMG release builds
# Install the app in live mode
pip install -e ".[dev]"
# Run Pytest
pytest -q
# Run Ruff to check the code style
ruff check . && ruff format --check .
# MyPy linter
mypy wispr_pro.py build_app.py
# Test the app in live mode
python3 wispr_pro.py selftestThe state folder ~/.wispr_pro/ (config, CA, pid) is never committed. dist/, build/, .venv/ are gitignored. See CHANGELOG.md for release history.
- Kolja Nolte (kolja.nolte@gmail.com)
MIT — see LICENSE.