Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

145 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Flow Logo

Flow

The Privacy-First, 100% Local AI Copilot & Voice Dictation Workspace for macOS

Download 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.


πŸ–₯️ Visual Preview

πŸ€– Cowork β€” AI Agent Workspace

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:

Cowork Agent Workspace

πŸŽ™οΈ Flow β€” Voice Recorder & Refiner

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:

Flow Voice Dictation

☁️ Quick Ask β€” Floating Agent HUD

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:

Quick Ask HUD

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.

🍏 Native Menu Bar Integration

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.

macOS Menu Bar

βš™οΈ Premium Settings & Customization

πŸ’» General & Bash Approvals πŸ¦™ Local LLM (llama.cpp)
General Settings
Configure allowed commands and Python executable paths
LLM Settings
Manage local llama.cpp server and download GGUF models
πŸŽ™οΈ Voice & Transcription Settings
Voice Settings
Select transcription provider (on-device/cloud) and set global hotkeys


✨ Features

πŸ›‘οΈ Privacy-First & 100% Local Execution

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.cpp transcription runs fully offline with zero external API calls.
  • Managed Local LLM Server β€” Flow can download, start, stop, and configure a local llama.cpp server 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.

πŸ€– Cowork β€” AI Agent Workspace

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_write integration 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)
  • 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.

πŸŽ™οΈ Flow β€” Voice Recorder & Transcript Refiner

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.

⌨️ System-wide Dictation & Text Processing

  • 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).

☁️ Quick Ask β€” Floating Agent HUD

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.

🧩 Reusable Skills & Snippets

  • 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.

πŸ¦™ Local LLM Support (llama.cpp)

  • 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 .gguf files.
  • Auto-detection of served models via /v1/models.

☁️ Multi-Provider LLM Support

  • Local / OpenAI-compatible β€” LM Studio, Ollama, llama.cpp, or any /v1/chat/completions endpoint.
  • 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.

πŸ›‘οΈ Security & Permissions Guardrails

  • 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).

πŸ—οΈ Architecture

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

πŸš€ Prerequisites

  • 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

πŸ’» Development

Start the app in live development mode with hot-reloading for the Svelte frontend:

wails dev

Or use the project script:

./flow.sh dev

πŸ“¦ Build

Production App (Apple Silicon)

./flow.sh build
# β†’ build/bin/Flow.app

Universal Binary (Intel + Apple Silicon)

./flow.sh universal

DMG Installer

./flow.sh dmg
# β†’ build/Flow-Installer.dmg

Code Signing & Notarization

./flow.sh sign

Requires an Apple Developer account and the signing environment variables configured in scripts/sign.sh.


All at once

./flow.sh build && ./flow.sh universal && ./flow.sh dmg && ./flow.sh sign

🩺 Doctor

Check if your system has all the Wails development dependencies:

./flow.sh doctor

βš™οΈ Configuration

All 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

🍎 macOS Gatekeeper & "Damaged App" Fix

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.app

πŸ“„ License

MIT License

About

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. Run locally or using cloud LLM.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages