A local-first meeting recorder and AI notes app for macOS.
Daisy captures meeting audio (microphone + system audio loopback via ScreenCaptureKit), transcribes it on-device with Whisper, and produces a Granola-style outline with action items and a draft client follow-up. Audio never leaves the Mac unless the user explicitly enables a cloud LLM provider (Anthropic / OpenAI / MCP) for the summary step — and even then the user supplies their own API key.
End-user installation, FAQ, and the privacy story live at https://mydaisy.io. This README is for people building Daisy from source.
- Latest stable release: see
scripts/release-notes/and https://mydaisy.io/appcast.xml - Deployment target: macOS 14 Sonoma (Apple Intelligence summarizer requires macOS 26 Tahoe)
- Apple Silicon and Intel x86_64 universal binary
- Signed with Developer ID, notarized, stapled, Sparkle EdDSA-signed for in-app updates
Requirements:
- Xcode 16+ with the macOS 26 SDK installed
- An active Apple Developer account if you want to run 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/ArgmaxCore, FluidAudio) resolve on first project load. Hit Run; the app launches.
Daisy/ → SwiftUI app sources (PBXFileSystemSynchronizedRootGroup)
DaisyTests/ → unit tests
DaisyUITests/ → UI tests
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)
Key services that drive the app:
AudioRecorder—AVAudioEnginemic tap, route-change recovery, archive.cafwriterSystemAudioCapture—SCStreamloopback for the remote side of a meeting, BT-output detection, silent-capture warningsTranscriber— WhisperKit on-device transcription with Silero VAD pre-passRecordingSession— orchestrates a session, owns calendar binding and auto-stop schedulingSummarizer— multi-provider cloud / on-device LLM dispatch (Apple Intelligence, Anthropic, OpenAI, MCP)SparkleUpdater— wraps Sparkle 2 againsthttps://mydaisy.io/appcast.xml
DAISY_AUTO_PUSH=1 ./scripts/release.sh <shortVersion> <buildNumber>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.
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 essazanov@pm.me
- Security disclosures → see
SECURITY.md - End-user docs → https://mydaisy.io/support
- Privacy policy → https://mydaisy.io/privacy
- Sparkle — in-app auto-updates
- WhisperKit by Argmax — Apple Silicon Whisper inference
- FluidAudio — speaker diarization
- FoundationModels — on-device summarization via Apple Intelligence (macOS 26+)
See LICENSE.