A macOS menu bar app that records your screen and uses AI to generate workflow documentation automatically.
Press Ctrl+Option+R, do your work as usual, and Flowcap captures screenshots every 4 seconds. When you stop, Gemini 2.5 Flash analyzes the sequence and generates a step-by-step workflow document.
demo-compressed.mp4
| Format | Description |
|---|---|
| Markdown | Human-readable step-by-step SOP document |
| Python | Desktop automation script using pyautogui |
| JSON | Structured workflow for tools like n8n, Make, or Zapier |
| AppleScript | Native macOS automation |
| Playwright | Browser automation test script (TypeScript) |
| Shortcuts | Recipe for the Apple Shortcuts app |
- Click the menu bar icon to open the panel
- Press Ctrl+Option+R to start recording (captures a screenshot every 4 seconds)
- Do your work as usual
- Press Ctrl+Option+R again to stop — AI generates the workflow automatically
- Pick an output format, copy the result, or regenerate in a different format
- macOS 14.2+ (requires ScreenCaptureKit)
- Xcode 15+
- Node.js 18+ (for the Cloudflare Worker)
- A Cloudflare account (free tier works)
- A Google AI Studio API key (for Gemini)
The app also includes Clicky's original features (voice chat, cursor pointing). To use those, you'll need API keys from Anthropic, AssemblyAI, and ElevenLabs.
The Worker is a proxy that keeps your API keys safe. The app calls the Worker, the Worker calls the APIs — so no keys ever ship in the app binary.
cd worker
npm installAdd your API keys and auth token as secrets:
# Required for Flowcap workflow generation
npx wrangler secret put GEMINI_API_KEY
# Auth token — pick any random string. The app must send the same token.
npx wrangler secret put APP_AUTH_TOKEN
# Optional — for Clicky's original voice/chat features
npx wrangler secret put ANTHROPIC_API_KEY
npx wrangler secret put ASSEMBLYAI_API_KEY
npx wrangler secret put ELEVENLABS_API_KEYDeploy:
npx wrangler deployCopy the URL it gives you (e.g. https://your-worker.your-subdomain.workers.dev).
The app has the Worker URL hardcoded in two files. Replace it with your own Worker URL:
leanring-buddy/CompanionManager.swift— look forworkerBaseURLleanring-buddy/AssemblyAIStreamingTranscriptionProvider.swift— look fortokenProxyURL
The app reads WORKER_AUTH_TOKEN from a build setting and sends it to the Worker in every request. This must match the APP_AUTH_TOKEN you set in step 1.
In Xcode:
- Select the project (not the target) → Build Settings tab
- Click + → Add User-Defined Setting
- Name:
WORKER_AUTH_TOKEN - Value: the same token you used for
APP_AUTH_TOKEN
open leanring-buddy.xcodeprojIn Xcode:
- Select the
leanring-buddyscheme (the typo is intentional — legacy name) - Set your signing team under Signing & Capabilities
- Hit Cmd+R to build and run
The app appears in the menu bar (not the Dock).
Do NOT run
xcodebuildfrom the terminal — it invalidates TCC permissions and the app will need to re-request screen recording, accessibility, etc.
- Accessibility — required for the global keyboard shortcut (Ctrl+Option+R)
- Screen Recording — required for capturing screenshots
- Screen Content — required for ScreenCaptureKit access
- Microphone — only needed for Clicky's voice features, not for workflow recording
- SwiftUI + AppKit — native macOS menu bar app
- Gemini 2.5 Flash — 1M+ token context window for analyzing large screenshot sequences
- ScreenCaptureKit — multi-monitor screenshot capture
- Cloudflare Worker — API key proxy
- SSE Streaming — real-time text generation
PRs welcome. See CLAUDE.md for project structure and code conventions.