Watch your inboxes. Surface what matters.
A macOS menu-bar app that pulls notifications from Gmail, GitHub, Slack, and Outlook (plus Google + Outlook calendars), triages them with Claude, and pins the few items that actually need your attention to a floating panel.
Site: kmatzen.com/lede · Download: latest release · Privacy: PRIVACY.md
Download Lede-X.Y.Z.dmg from the latest GitHub release, drag Lede.app to /Applications, and double-click to launch. The build is signed with a Developer ID and notarized by Apple, so Gatekeeper won't complain.
The first launch opens a 3-step welcome panel: connect Claude, connect a source, and you're done. After that the bell sits in your menu bar and refreshes every five minutes.
- Five sources: GitHub notifications, Gmail (headers + snippet via the
gmail.metadatascope), Slack mentions / DMs / unread channels, Outlook unread mail, and upcoming events from Google + Outlook calendars. - Multi-account: connect multiple Google, Microsoft, GitHub, or Slack accounts at once. Each account is its own credential, with its own row in Settings.
- Two-stage triage: Haiku scores every item 0–10; Sonnet writes a 2-sentence briefing over the top items. Items you've already seen don't get re-scored.
- Priority accordion with Critical / High / Medium / Low tiers, native notifications for the highest-scoring items, click-to-open, dismiss-to-hide, snooze, and quiet hours.
- Cost-aware: per-model token tally and a "$X used this month" line in About. Typical usage runs well under $1/month.
- Privacy-first: tokens in your Keychain, summaries cached on your Mac, no analytics, no servers we run. Details in PRIVACY.md.
- Auto-update via Sparkle.
macOS 14+, Xcode 15+ or a recent swift toolchain:
make runThat builds, signs with a stable identity, bundles into .build/debug/Lede.app, and launches it. State lives in ~/Library/Application Support/Lede/.
Tests:
swift testReleases are cut by pushing a vX.Y.Z tag — GitHub Actions does the notarize / DMG / Sparkle-sign / publish dance. See SHIPPING.md.
After install, click the bell → gear icon. The Settings panes walk you through each connection. A few notes:
- Claude: paste an Anthropic API key from claude.com/settings. The optional subscription OAuth path is gated behind
~/Library/Application Support/Lede/config.jsoncontaining{"enableSubscriptionOAuth": true}— off in shipped builds because it's outside Anthropic's TOS for third-party apps. - Google (Gmail + Calendar): one-click Connect Google. The app's OAuth client is embedded; you'll see a one-time consent screen.
- Microsoft (Outlook + Calendar): one-click Connect Microsoft, same pattern.
- GitHub: OAuth device flow, no token to paste. PAT fallback under "Use a personal access token instead."
- Slack: requires a one-time app registration in your workspace because Slack doesn't allow generic third-party reading apps. The Settings pane shows a step-by-step with a "Copy manifest" button.
CoreEngine (@MainActor)
├── NotificationSource (GitHub, Gmail, GoogleCalendar, Slack, Outlook, OutlookCalendar)
├── TriagePipeline (content-hash cache → Haiku triage → Sonnet synthesis)
│ └── AnthropicClient (x-api-key OR OAuth bearer; 429 retry; prompt caching)
├── Notifier (UNUserNotifications, click-to-open URL)
├── UpdateController (Sparkle 2.x)
└── Storage (actor) (JSON state; secrets in Keychain)
All secrets live in the macOS Keychain under service com.lede.app. Triage cache, dismissed/notified sets, source health, and monthly usage live as JSON in the app's Application Support folder. The activity log (lede.log) is auto-truncated to 1MB.
Sources/Lede/ — the app (~5K LOC of Swift)
Tests/LedeTests/ — unit tests
Resources/ — Info.plist, AppIcon.icns, entitlements, Slack manifest
docs/ — the website at kmatzen.com/lede
scripts/ — dev cert + icon generation
.github/workflows/ — CI (build + test) and Release (tag → notarized DMG)
SHIPPING.md — release ops: how to cut a release, required secrets
PRIVACY.md — privacy policy (also rendered on the website)
MIT © 2026 Kevin Blackburn-Matzen.