A local-first meeting recorder, push-to-talk dictation tool, and AI-notes app for macOS — with a local MCP server so Claude Desktop and Cursor can query your transcripts without anything leaving the Mac.
Daisy captures meeting audio (microphone + system-audio loopback via ScreenCaptureKit), transcribes it on-device with Whisper on the Neural Engine, and produces a structured outline with action items and a draft follow-up. Audio and transcripts never leave the Mac unless you explicitly enable a remote summary provider. Remote summaries can use your own API key or an explicitly connected ChatGPT account; an optional on-device privacy filter pseudonymizes detected sensitive data before supported cloud requests.
End-user installation, FAQ, and the privacy story live at https://mydaisy.io. This README is for people building Daisy from source.
Three capture modes, one app:
- Meetings — records both sides of a call (your mic + the other side via system-audio loopback), no bot joining the meeting. On-device transcription + diarization (
Remote A/Remote B, with optional mic-side attribution), a summary, action items, and a draft follow-up. Optional extras include periodic screenshots with on-device OCR, a preparation brief built from the agenda and past sessions, evidence-backed progress against the meeting plan, local meeting analytics, and custom meeting apps beyond the built-in list. - Push-to-talk dictation — hold a hotkey, speak, and the text is pasted at your cursor in any app. Three on-device engines: Whisper (default), Parakeet (FluidAudio) for lower latency, and Apple SpeechAnalyzer on macOS 26 (zero download). A custom-vocabulary dictionary fixes names/jargon, an optional voice profile learns your phrasing, and a rolling 24-hour history lets you re-copy.
- Voice notes — quick one-off thoughts saved to your Library. Optional: import existing Apple Voice Memos as flat transcripts (on-device, opt-in, needs Full Disk Access).
Around the edges: morning and end-of-day summaries on Home, an opt-in keyboard-layout auto-fixer (retypes text entered in the wrong layout, with undo and per-app exceptions), and provider-returned ChatGPT plan-window usage plus local token accounting for API providers. The UI is localized in English and Russian.
The differentiator: Daisy ships a local MCP server bound to 127.0.0.1 that exposes your sessions as a queryable, actionable data source to any MCP client (Claude Desktop, Cursor, Codex). Because the transcript is already local, Daisy can be a local-only MCP source — something cloud meeting tools structurally can't offer.
- Latest release: see
scripts/release-notes/and https://mydaisy.io/appcast.xml. Beta ships frommain; stable is promoted from a soaked beta (seeRELEASING.md). - Deployment target: macOS 14 Sonoma. The Apple Intelligence summarizer and the Apple SpeechAnalyzer dictation engine require macOS 26 Tahoe; everything else runs on 14+.
- Apple Silicon (M1+). Signed with Developer ID, notarized, stapled, Sparkle EdDSA-signed for in-app updates.
- License: Apache 2.0 (see
LICENSE). Full public source — build it and verify there's no telemetry.
Requirements:
- Xcode 26+ (ships the macOS 26 SDK the project builds against)
- An active Apple Developer account if you want a signed local build (unsigned builds are fine for development inside Xcode)
Clone and open:
git clone https://github.com/addicted-studio/daisy-app.git
cd daisy-app
open Daisy.xcodeprojThe Swift Package Manager dependencies (Sparkle, WhisperKit via argmax-oss-swift, FluidAudio) resolve on first project load. Hit Run; the app launches.
Daisy/ → SwiftUI app sources (PBXFileSystemSynchronizedRootGroup)
DaisyTests/ → unit tests
Benchmarks/ → reproducible WER/DER/JER scorer, product runner, and public evidence
Daisy.xcodeproj/ → Xcode project
scripts/
release.sh → end-to-end release: archive → notarize → DMG → sign → Sparkle appcast
release-notes/ → per-version markdown bullets consumed by release.sh
dmgbuild_settings.py → dmgbuild config (Python) for the installer DMG
assets/ → DMG background, app icons
build/ → archive output (gitignored)
RELEASING.md → branch/channel model and the release/promote/hotfix flows
Key services that drive the app:
CoreAudioMicRecorder— CoreAudio mic capture with route-change recovery and the archive.cafwriter (replaced the old AVAudioEngine tap to fix route-change/Bluetooth dropouts)SystemAudioCapture—SCStreamloopback for the remote side of a meeting, Bluetooth-output detection, silent-capture warningsTranscriber/WhisperEngine— WhisperKit on-device transcription with a Silero VAD pre-passParakeetEngine/AppleSpeechEngine— the two alternative dictation engines: FluidAudio Parakeet-TDT (low latency) and Apple SpeechAnalyzer (macOS 26, no model download); Whisper is the default- Diarization + speaker memory — FluidAudio (Pyannote) labels remote voices; named speakers are remembered locally by a short voice fingerprint
DictationPaste— pastes dictated text at the cursor via the Accessibility API, restoring your prior clipboardRecordingSession— orchestrates a session, owns calendar binding and auto-stop schedulingSummarizer— multi-provider LLM dispatch: Apple Intelligence (on-device), ChatGPT account, Anthropic, OpenAI, Kimi (Moonshot), Cursor API key, Ollama, LM Studio (local), or an MCP summarizerSensitiveDataProtector— optional on-device pseudonymization/redaction boundary for supported remote summariesMeetingPreparation/MeetingPlanAnalysis/MeetingAnalytics— pre-meeting context, evidence-backed agenda progress, and local call metricsScreenshotCapture— opt-in periodic screenshots of the meeting window with Vision OCR; screen text flows into the transcript and summaryPreMeetingBrief/MorningBrief/EndOfDaySummaries— local briefs assembled from your calendar and past sessions, plus an evening digestVoiceProfile— opt-in personalization learned from your dictations (and, optionally, your mic side of meetings)LayoutAutoFix— opt-in keyboard-layout auto-correction via a CGEvent tap, with undo and per-app exceptionsTokenLedger— local token-usage accounting per cloud provider, shown on HomeMCPServer— the local MCP server on127.0.0.1; exposes nine tools (five read, four act) to Claude Desktop / Cursor / CodexVoiceMemoScanner/VoiceMemoIngestor— opt-in, on-device import of Apple Voice Memos to Markdown transcripts- Sparkle 2 — in-app auto-updates against
https://mydaisy.io/appcast.xml
Daisy's MCP server turns your recordings into a live data source for AI clients, entirely on-device. Enable it in Connections → MCP server and use the one-click setup for Claude Desktop, Cursor, or Codex — the config is written for you. Nine tools, scoped to safe, reversible operations (no deleting, no editing transcript bodies):
- Read —
list_sessions,get_session,search_sessions,list_folders,list_destinations - Act —
resummarize_session,set_session_title,rename_speaker,route_session_to_destination(Notion / Linear / Slack / webhook)
Docs: https://mydaisy.io/docs/mcp.
Benchmarks/ contains the product-pipeline runner, a neutral
standard-library scorer for WER/CER/DER/JER, fixtures, and published raw
evidence. The first public baseline is AMI ES2004a: Daisy 1.0.7.59 detected
4/4 speakers with 15.68% DER and 20.28% JER at a median 0.122× real time
across three warm runs on an M4 MacBook Air. It is one reproducible
diarization case, not a general accuracy
claim; Humla and OpenWhispr remain unscored until their raw output exists for
the exact same audio. See the methodology and publication gate
and the public evidence.
DAISY_AUTO_PUSH=1 ./scripts/release.sh <shortVersion> <buildNumber> [stable|beta]Beta is the default channel from main; stable is promoted from a soaked beta with ./scripts/release.sh promote <version> (no rebuild). Six steps: archive → export → notarize → DMG → publish to the daisy-web repo → inject an <item> into appcast.xml and commit. Vercel auto-deploys the site within a couple of minutes. Full branch/channel model and the hotfix flow are in RELEASING.md.
Release notes for each version go in scripts/release-notes/<shortVersion>.md as a flat markdown bullet list (- one line per change). The script extracts those bullets and embeds them in the appcast <description> so Sparkle shows them in its update sheet.
- Questions, ideas, show-and-tell → GitHub Discussions
- Product issues, feature requests → file an issue on this repo or email support@mydaisy.io
- Security disclosures → see
SECURITY.md - Procurement / security review / tailored deployment → email hello@mydaisy.io
- End-user docs → https://mydaisy.io/docs · Privacy → https://mydaisy.io/privacy
- Sparkle — in-app auto-updates
- WhisperKit by Argmax — Apple Silicon Whisper inference (part of the Argmax OSS SDK)
- FluidAudio — Parakeet ASR + speaker diarization
- FoundationModels — on-device summarization via Apple Intelligence (macOS 26+)