# WhisperCPPonEverything: Ctrl+W streaming STT menubar, cyan glow, whisper-stream

Source: https://www.michaelchurley.com/blog/whispercpponeverything-ctrl-w-streaming-stt-cyan-glow  
Published: 2026-06-22  
Author: Michael C. Hurley  
Tags: whispercpponeverything, whisper.cpp, whisper-stream, speech-to-text, stt, dictation, menubar, macos, swift, swift-package, cgevent, accessibility, local-ai, michaelmonetized

![OG / menubar streaming](/blog/whispercpponeverything-ctrl-w-streaming-stt-cyan-glow/screenshots/menubar-streaming.png)

## Who

I build local tooling when cloud dictation is the wrong trust boundary.

For operators who want **Ctrl+W anywhere** to type into the focused field with **whisper.cpp on the machine**, and who need the honest split between the **streaming HEAD** and the **batch/orange README** still sitting in the same private repo.

## What

I built **WhisperCPPonEverything**, private [`michaelmonetized/WhisperCPPonEverything`](https://github.com/michaelmonetized/WhisperCPPonEverything). Native macOS **menubar** (`LSUIElement`) Swift Package executable. HEAD `d33e5e2`. **11** commits. 0 stars. Bundle `com.whispercpponeverything.app` **2.0.0**. Renamed from **VoiceType**.

Stack facts from `Package.swift` + sources:

- Platforms: **macOS 14+**
- Frameworks only: AppKit, CoreGraphics, ApplicationServices. **Zero SPM dependencies.**
- Hotkey: **Ctrl+W** via `CGEvent` tap (active session, then listenOnly, then HID listenOnly fallback)
- macOS **15+**: `CGPreflightListenEventAccess` / `CGPreflightPostEventAccess` + request APIs before tap create
- Transcription: subprocess `/opt/homebrew/bin/whisper-stream` with model `/opt/homebrew/share/whisper-cpp/models/ggml-medium.bin`, args `-l en --step 3000 --length 5000 --keep 200`
- Incremental inject: strip ANSI + `[timestamp]` prefixes, **suffix-prefix overlap dedupe**, then `TextInjector` Unicode `CGEvent` keystrokes (5ms between chars)
- Visual: fullscreen `.screenSaver` overlay, **cyan** 20-layer soft glow, 1.5Hz pulse, `ignoresMouseEvents`
- State machine: **`idle` / `streaming` only** (`State.swift`)
- Logging: `~/Library/Logs/WhisperCPPonEverything.log`
- Checked-in `WhisperCPPonEverything.app` with **arm64 Mach-O** binary

![Pipeline](/blog/whispercpponeverything-ctrl-w-streaming-stt-cyan-glow/screenshots/pipeline.png)

![Cyan glow](/blog/whispercpponeverything-ctrl-w-streaming-stt-cyan-glow/screenshots/cyan-glow.png)

What the README still claims (stale vs HEAD):

- Orange screen glow while listening
- **Silence detection** ends recording after 5 seconds
- Batch-style speak, stop, then transcribed text is typed

What CLAUDE.md + Swift say at HEAD: cyan soft glow, toggle stop, **streaming** text as whisper-stream prints lines. PLAN.md still names `AudioRecorder.swift` / `Transcriber.swift`. Those files are not in the tree. TODO.md phases are all unchecked. StatusItem streaming mic is still **`.systemOrange`** next to a cyan overlay.

![Stale docs gap](/blog/whispercpponeverything-ctrl-w-streaming-stt-cyan-glow/screenshots/stale-docs-gap.png)

![Permissions triad](/blog/whispercpponeverything-ctrl-w-streaming-stt-cyan-glow/screenshots/permissions-triad.png)

Distinct from `niri-macos` (Swift AX tiling) and from SaaS dictation landers. Local Homebrew whisper-stream or the app alerts that whisper-cpp is missing.

## Where

Code: [github.com/michaelmonetized/WhisperCPPonEverything](https://github.com/michaelmonetized/WhisperCPPonEverything), private.

Runtime probes at pack time: no public web product. Install path documented as `swift build -c release` then copy into `/Applications/WhisperCPPonEverything.app/Contents/MacOS/` + ad-hoc `codesign`. CLAUDE note: **each new binary invalidates TCC**. Remove and re-add Accessibility.

Required on disk: `whisper-stream` + `ggml-medium.bin` under Homebrew paths above.

## When

- **2026-02-15.** PLAN/README/TODO, rename, sources build, VoiceType rename, whisper-cli path fixes, app bundle, **cyan instead of orange**.
- **2026-02-16.** `92bb411` streaming STT + soft glow + macOS 15+ permission support.
- **2026-06-22.** Two `nightly` commits; HEAD `d33e5e2` (also last GitHub push).

![Commit arc](/blog/whispercpponeverything-ctrl-w-streaming-stt-cyan-glow/screenshots/commit-arc.png)

## Why

I wanted dictation that stays on-box and types into whatever already has focus (Slack, terminal, browser) without a cloud STT round-trip. Ctrl+W was the whole UX. Streaming beat record-a-WAV-then-wait. Cyan beat ugly orange. Sequoia event-access APIs were the tax for keeping the tap alive.

**Engagement Q:** How many private STT menubar apps still advertise orange silence-batch in README while HEAD streams cyan into the focused field?

Draft + assets only until Michael publishes.
