The Privacy-First, 100% Local AI Copilot & Voice Dictation Workspace for macOS
Flow is a native desktop command center that seamlessly fuses a multi-turn agentic AI chat workspace (Cowork) and instantaneous, push-to-talk disfluency-free dictation refinement (Flow) directly into your daily macOS workflow. Designed with a strict privacy-first philosophy, Flow is engineered to run 100% locally on-device using local voice transcription (Whisper.cpp) and local LLMs (managed llama.cpp, LM Studio, Ollama)βkeeping all your voice logs, transcripts, workspace files, and code strictly on your machine, while giving you the full flexibility to connect cloud LLMs and remote transcription APIs as you wish.
A powerful, multi-turn chat workspace powered by LLMs with robust agentic tool-calling capabilities. Check live execution blocks, run custom bash analysis, view auto-refinement states, load skills, and track step-by-step progress via the interactive Todo checklist panel:
Use it in any app! Just press the global hotkey to instantly record, transcribe, and refine text. Features real-time audio statistics, live word counters, inline transcript editing, and instant LLM-powered refinement actions:
Hold a hotkey and speak (or type) a request to the agent in a floating popup β without switching apps. It sees your current screen, can act across apps, asks before each step, and streams the answer right where you're working. Tap the hotkey (instead of holding) to open it with context-aware suggestions:
Just say (or type) things like:
| Intent | Example |
|---|---|
| π Ask about your screen | "Summarize this page" Β· "Explain this code" Β· "What does this error mean?" |
| βοΈ Write & rewrite | "Reply to this email" Β· "Make this more concise" Β· "Fix grammar and tone" |
| π Do things across apps | "Save this as a note" Β· "Draft a reply in Mail" Β· "Open this link in my browser" |
| β‘ Quick answers | "What's 15% of 240?" Β· "Convert 30Β°C to Β°F" Β· "Define 'idempotent'" |
The same popup flows smoothly through Listening β Transcribing β Thinking β Answer β copy the response, hit + for a new chat, or open in app to continue in the full Cowork window.
A pinwheel status-bar widget that shows live state (idle / recording / transcribing) and one-tap commands. The dropdown lists your active shortcuts and quick actions:
- Hotkey hints β Hold β₯ Right Option and speak (dictation), Double-tap β₯ Right Option to fix grammar, and Hold β Right Command to ask the agent (Quick Ask).
- Open Quick Ask β launches the floating Quick Ask HUD as a plain chat.
- Show Flow β brings the main window to the front.
- Quit Flow β βQ.
Flow is designed from the ground up to respect your privacy and secure your data:
- Zero Cloud Leakage β Keep all your voice logs, dictation transcripts, workspace files, and agent logs strictly on your local disk.
- On-Device Speech-to-Text β Bundled native
whisper.cpptranscription runs fully offline with zero external API calls. - Managed Local LLM Server β Flow can download, start, stop, and configure a local
llama.cppserver to run open-source GGUF models directly on your Mac. - Opt-In Cloud Flexibility β Complete compatibility with cloud providers (Anthropic Claude, OpenAI, Google Gemini, OpenRouter) if and only if you choose to configure their API keys.
A full-featured, multi-turn chat workspace powered by LLMs with agentic tool-calling capabilities:
- Streaming responses with live token rendering and smooth fading sidebar text overflow.
- File attachments β upload images, PDFs, CSVs, and text documents directly into the conversation.
- Agent Planning & Todo List β multi-step planning loops with
todo_writeintegration for robust execution. - Structured System Prompt β Pi-inspired composable prompt builder that dynamically injects identity, environment context (date, OS, working directory, Python path), tool guidance, safety guardrails, and mode-specific instructions.
- Dynamic Tool use β the agent can autonomously:
- Read, write, and create files (
file_read,file_write) - Execute shell commands with sandboxed approval (
command) - Plan and track multi-step work via a todo list (
todo_write) - Capture screenshots (
screen_capture) - Search the web (
web_search,web_read) - Persist key facts across sessions (
memory_read,memory_write) - Load custom skills into context (
skill_load)
- Read, write, and create files (
- Session management β create, list, load, and delete chat sessions with responsive UI layout.
- Customizable system prompt β edit the base prompt directly from the Toolkit UI (or via
~/.flow/system_prompt.md). Tool guidance, planning rules, safety guardrails, and environment context are automatically composed on every turn. - Smart output truncation β head+tail pattern (4KB) ensures the agent sees both the start and end of long tool outputs.
Record voice notes and transcribe them with configurable speech-to-text providers:
- One-click record/stop with high-quality audio capture (M4A) and real-time listening indicators.
- Text & Voice Switching β flexible input interface allowing you to toggle between typing directly into the transcript area or using the microphone to capture voice.
- Inline Editing with Auto-Save β modify transcriptions directly in the viewport; edits are auto-saved on-blur to ensure a friction-free experience.
- Local STT β bundled
whisper.cpp(fully offline, no API key required). - Cloud STT β OpenAI Whisper, Deepgram.
- Transcript refinement via LLM (streaming):
- Clean β fix grammar, punctuation, and disfluencies
- Summarize β condense to 2-3 sentences
- Bullet points β extract key points
- Custom prompt β your own instruction
- Auto-refine on stop β optionally refine every transcript automatically after recording.
- Transcript library β save, browse, search, and delete past transcriptions.
- Global hotkey (configurable modifier) for instant dictation from any app.
- Double-tap hotkey β grabs selected text and fixes grammar/spelling via LLM.
- Native macOS overlay β visual recording indicator with live status.
- Menu bar icon β pinwheel status indicator (idle / recording / transcribing).
A second, dedicated push-to-talk hotkey that opens a floating, always-on-top popup (the HUD) instead of pasting text. It runs the full Cowork agent right where you are, so you never have to leave your current app.
- Hold to talk, tap for suggestions β hold the configurable hotkey to speak a request; a quick tap opens the HUD with context-aware action chips for what's on screen. Also available from the menu bar (Open Quick Ask).
- One unified popup β the same window flows smoothly from Listening (live waveform, with β cancel / β send) β Transcribing β Thinking (current-step pill) β streamed answer. Pre-warmed so it appears instantly and never steals focus from your current app.
- Acts from on-screen context β reads the frontmost app and your text selection, and attaches a screenshot when the request needs to see the screen (e.g. "summarize this page", "what does this error mean?"). Simple questions skip the screenshot for a fast, lightweight reply.
- Works across apps β can drive other apps via macOS automation (
osascript/open) to gather what it needs and bring the result back. - Approve, then keep working β when a step needs a command, the HUD shows a compact Needs approval card; approve and the agent continues. Cross-app automation is pre-allowed per HUD session so multi-step tasks flow with minimal friction.
- Conversation, not one-shot β type follow-ups in the HUD, copy any response, start a fresh chat with +, or open in app to continue the same session in the full Cowork window.
- Vision-aware suggestions β with an image-capable model, the tap-to-open chips reflect what's actually on your screen; otherwise it falls back to a static capability menu.
What you can ask it:
- Ask about your screen β "Summarize this page", "Explain this code", "What does this error mean?"
- Write & rewrite β "Reply to this email", "Make this more concise", "Fix grammar and tone"
- Do things across apps β "Save this as a note", "Draft a reply in Mail", "Open this link in my browser"
- Quick answers β "What's 15% of 240?", "Convert 30Β°C to Β°F", "Define 'idempotent'"
Quick Ask needs Microphone (to talk), Screen Recording (to see the screen), and Accessibility (to read the selection and act across apps). Grant them from Settings β HUD & Quick Ask.
- Skills β reusable instruction sets the agent can load into context at runtime to guide specialized behaviors (customizable via the Toolkit).
- Snippets β trigger/expansion text replacements applied to transcriptions.
- Full CRUD from the Settings/Toolkit UI.
- Managed llama-server β Flow can download, start, and stop a local llama.cpp inference server.
- One-click GGUF download from Hugging Face with progress tracking.
- Model picker β native file dialog for local
.gguffiles. - Auto-detection of served models via
/v1/models.
- Local / OpenAI-compatible β LM Studio, Ollama, llama.cpp, or any
/v1/chat/completionsendpoint. - Anthropic (Claude).
- OpenAI (GPT-4o, etc.).
- Google Gemini.
- OpenRouter.
- Custom cloud endpoint with configurable base URL + API key.
- Automatic provider fallback: primary β fallback β legacy agent config.
- Accessibility & Screen Recording Permissions β Checked and requested natively on macOS with user warnings.
- Microphone Permissions Warning Bar β Displays a clear visual warning banner if microphone access is denied or restricted, with a manual trigger to Open System Settings to resolve.
- Sandboxed Command Execution β Shell commands run by the agent require explicit user approval via a frontend dialog.
- Configurable allow/block lists persisted in
~/.flow/exec-approvals.json(Blocked patterns are automatically denied; allowed patterns are auto-approved).
flow/
βββ main.go # Wails app entry point
βββ wails.json # Wails project configuration
βββ flow.sh # Dev, build, DMG, sign, and utility CLI
βββ dequarantine.sh # macOS Gatekeeper quarantine removal
β
βββ docs/ # Project documentation and assets
β βββ images/ # Visual screenshots and UI preview gallery
β
βββ backend/ # Go backend (Wails-bound)
β βββ app.go # App struct, Startup/Shutdown lifecycle
β βββ agentapp.go # Cowork streaming & session CRUD
β βββ flow.go # Voice recording, transcription, transcript CRUD
β βββ flow_refine.go # LLM-powered transcript refinement (streaming)
β βββ dictation.go # System-wide dictation hotkey setup
β βββ settings.go # Settings load/save, LLM client management
β βββ models.go # OpenAI-compatible /v1/models listing
β βββ llama.go # Managed llama.cpp server + GGUF download
β βββ plugins.go # Skills CRUD (Wails facades)
β βββ snippets.go # Snippets CRUD (Wails facades)
β βββ internal/
β βββ agent/ # Agentic loop: multi-turn tool-calling, structured prompt builder
β βββ config/ # Config bootstrap, load/save, exec approvals
β βββ llm/ # LLM client abstraction (Anthropic, OpenAI)
β βββ llamacpp/ # llama-server process manager
β βββ parser/ # Content parsing utilities
β βββ plugins/ # Skills store (file-backed)
β βββ session/ # Session persistence (JSONL-based)
β βββ snippets/ # Snippets store (file-backed)
β βββ speech/ # STT (Whisper, Deepgram, local), dictation, menu bar, overlay
β βββ streaming/ # Stream manager, file attachments, content builder
β βββ tools/ # Tool registry + implementations (file, command, memory, todo, web, skill, screen)
β
βββ frontend/ # Svelte + Vite frontend
β βββ src/
β βββ App.svelte # Root app shell with tab navigation
β βββ main.js # Svelte mount point
β βββ app.css # Global styles
β βββ components/
β βββ CoworkWorkspace.svelte # Cowork agent chat UI
β βββ FlowPanel.svelte # Voice recorder & transcript viewer
β βββ FlowRefineMenu.svelte # Refinement action picker
β βββ AgentWorkspace.svelte # Cowork workspace panel
β βββ AgentSidebar.svelte # Cowork sidebar panel
β βββ AgentInfoPanel.svelte # Cowork task info panel
β βββ AgentFileCard.svelte # File card in Cowork workspace
β βββ AgentWelcome.svelte # Cowork welcome panel
β βββ SettingsModal.svelte # Full settings UI
β βββ SkillToolkitPanel.svelte # Skills & commands manager
β βββ LoadingSpinner.svelte # Loading indicator
β βββ TypingIndicator.svelte # Chat typing animation
β
βββ scripts/
βββ sign.sh # Apple code signing, notarization & stapling
βββ release.sh # GitHub release automation
βββ fetch-llama-server.sh # Download pre-built llama-server binary
βββ fetch-whisper-cli.sh # Download pre-built whisper.cpp CLI
- macOS (Apple Silicon or Intel)
- Go 1.24+
- Node.js 18+ and npm
- Wails CLI v2 β install with
go install github.com/wailsapp/wails/v2/cmd/wails@latest
Start the app in live development mode with hot-reloading for the Svelte frontend:
wails devOr use the project script:
./flow.sh dev./flow.sh build
# β build/bin/Flow.app./flow.sh universal./flow.sh dmg
# β build/Flow-Installer.dmg./flow.sh signRequires an Apple Developer account and the signing environment variables configured in scripts/sign.sh.
./flow.sh build && ./flow.sh universal && ./flow.sh dmg && ./flow.sh signCheck if your system has all the Wails development dependencies:
./flow.sh doctorAll configuration lives in ~/.flow/:
| File | Purpose |
|---|---|
config.json |
App settings (providers, API keys, hotkey, STT config) |
system_prompt.md |
Unified editable system prompt (customizable via Toolkit UI) |
exec-approvals.json |
Allowed/blocked shell command patterns |
flow.log |
Application log file |
flow/ |
Saved Flow transcripts (JSON) |
cowork/ |
Cowork session data |
llamacpp/ |
Managed llama-server binary and downloaded GGUF models |
plugins/ |
Skills store |
snippets.json |
Snippets store (JSON) |
memory/ |
Agent persistent memory |
If you are transferring a locally built, unsigned binary between machines and encounter a Gatekeeper quarantine warning, simply remove the attribute via:
xattr -d com.apple.quarantine /Applications/Flow.appMIT License






