Sift
A local-first macOS app auditor
Know what every app on your Mac is, what it costs you, and whether it earns its place.
Sift is a native SwiftUI app for macOS that inventories installed applications, explains each one in plain English with a local LLM (Ollama by default), scores how well it fits your workflow, tracks licences and subscriptions, finds updates, and uninstalls leftovers to the Trash — without a Sift account, and without telemetry.
Website · Download the notarized DMG · What it does · Privacy · Docs
Install
Download the notarized DMG — or with Homebrew:
brew install --cask aka-kika/tap/sift
Free during the beta. Requires macOS Sonoma or newer, Apple Silicon.
What Sift does
Your /Applications folder fills up faster than you can remember why. Sift reads it the way you would if you had the time — one app at a time, with context.
For every installed Mac app it answers three questions:
| Question | What you get |
|---|
| What is this? | One or two plain sentences. No marketing copy, no "appears to be a utility". |
| Good for | A concrete use, written against the apps you actually run. |
| Do you need it? | A 1–5 relevance score with the reasoning behind it. |
Then it keeps the answers, so the second launch is instant and the audit becomes something you consult rather than something you rerun.
Why it's different
The analysis is grounded, not guessed. There is no bundled catalogue of "known apps". Every judgement is made from real evidence: the app's own metadata, notes you write, the fetched words of the maker's own page, and — for apps you build yourself — a local project folder's README and manifests. If Sift doesn't know something, it says so and offers to go find out.
It scores against you, not against the average user. Relevance is measured against a workflow profile Sift derives from your machine — what categories you have, what you opened recently, what's running now.
It runs on your Mac. Ollama is the default provider, so prompts never leave the machine. Anthropic, OpenAI, Google Gemini and OpenRouter are available if you want them, under your own key, entirely by choice — Gemini and OpenRouter both have free tiers, so no local model is required to get started. There is no Sift server, no account, no telemetry.
Features
Audit and scoring
- 1–5 relevance score, explanation, best use, and the reason behind the score — all in one model call
- Automatic workflow profile from your installed apps, with an optional override you write yourself
- Lock an analysis to freeze it against rescans, model changes, and re-runs
- Sort by relevance, updates, last used, last added, or name; filter to favourites or your own apps
- Search from a small palette (
⌘F or ⌘K)
- Full audit export to CSV — licence keys are never included
Money, in one place
- One License cube per app whose face tells you the state at a glance: subscription, App Store, lifetime, one-time, annual, free
- Licence keys in the macOS login keychain, not marked for iCloud. The login keychain does not honor a this-device-only flag, so a key is not locked to this Mac. Sift reads one only after Touch ID or your password
- Subscriptions with amount, currency and cycle. A renewal date is set only when you pick one, and its countdown turns orange as it approaches
- License Vault (
⇧⌘L) — everything you've bought, including subscriptions, split into installed and no-longer-installed, so a key or a subscription never disappears with the app
Updates
- Detects available versions via the Mac App Store, Sparkle feeds, and Homebrew casks, and skips releases your macOS can't run
- Open the update, run
brew upgrade --cask, or acknowledge it and move on
- Sift keeps itself current too — a daily Sparkle check, and Check for Updates… in the Sift menu
Uninstall that doesn't lose the receipt
- Right-click → Uninstall… finds the bundle plus every leftover matched to its bundle ID across twelve Library locations, each with a size and the reason it matched
- Leftovers go to the Trash and can be put back.
brew uninstall removes the app for good — that copy is not in the Trash
- The licence record survives the uninstall and stays in your vault
- Works on Mac App Store apps by handing root-owned bundles to Finder rather than asking you for a password (macOS asks once to let Sift control Finder)
- The app goes first. If the app itself can't be moved, nothing else is touched
- If another copy of the app is anywhere on the Mac (Downloads, Setapp, JetBrains Toolbox), Spotlight finds it and the shared data starts unchecked
brew uninstall is offered only for the copy Homebrew itself installed
- Apple system apps and Sift itself are refused outright
Requirements
| |
|---|
| OS | macOS 14.0 or later |
| Chip | Apple Silicon |
| Model | Ollama running locally — or an Anthropic / OpenAI / Gemini / OpenRouter / ollama.com key (Gemini and OpenRouter have free tiers) |
Analysis needs a model. Scanning, licences, updates, and uninstall work without one.
Install
Download the notarized DMG from sift.akakika.com/Sift.dmg, open it, and drag Sift to Applications. Sift updates itself from there.
# the local model Sift uses by default
brew install ollama
ollama serve
ollama pull llama3.2
Building from source? See docs/environment.md — zero to running on a fresh machine.
Privacy
Sift collects nothing. No analytics, no crash reporting, no accounts, and no server of its own exists.
- Analysis runs locally on Ollama by default. Switching to a cloud provider is your explicit choice, under your own API key.
- Licence keys and cloud API keys live in the macOS Keychain, never in the app's database, its preferences file, or a CSV export.
- Network calls happen only for update checks, fetching a page you linked, and a cloud provider you opted into.
- A sweep goes to the Trash. You can put those files back.
brew uninstall removes the app for good; that copy is not in the Trash.
Full declaration, including every OS permission and how to revoke it: docs/privacy.md.
FAQ
Does Sift send my app list anywhere?
No. With the default local Ollama provider nothing leaves your Mac. If you switch to a cloud provider (Anthropic, OpenAI, Gemini, OpenRouter), each analysis sends that one app's prompt plus a profile with only your app count and top categories, no app names, to the provider you chose, under your own key. Find Similar is the one exception: it has to send your installed app names to pick from, so with a cloud provider Sift asks you first, every time.
Do I need Ollama?
For analysis, yes — or a cloud API key instead. Without either, Sift still scans, lists, tracks licences, checks updates, and uninstalls; only the AI explanation and score are unavailable.
Is it safe to uninstall with Sift?
The sweep moves files to the Trash, so you can put them back until you empty it. brew uninstall is different: Homebrew removes that app for good, and it is not in the Trash. Apple system apps and Sift itself are protected, and each leftover is listed with the reason it matched before you confirm. If the app itself can't be moved, Sift leaves its data alone too, and if another copy of the app exists anywhere on your Mac, its shared data starts unchecked.
What happens to my licence keys when I remove an app?
They stay. The record moves to "No longer installed" in the License Vault and moves back if you reinstall — that's the whole reason the vault exists.
Why does it ask to control Finder?
Only when uninstalling a Mac App Store app. Store bundles are owned by root and macOS permits only Finder to move them, so Sift asks Finder to do it. No password passes through Sift. The reasoning is written up in ADR 0003.
Does it work on Intel Macs?
The shipped build is Apple Silicon. The source builds for Intel, but it isn't tested there.
Is Sift free?
Yes, and open source under the MIT licence.
Is this AppAudit?
Same app. The product name is Sift; the bundle ID stays com.kikaapp.appaudit so existing SwiftData and Keychain data survive the rename.
Docs
Built with
Swift 5.9 · SwiftUI · SwiftData · AppKit · LocalAuthentication (Touch ID) ·
Keychain Services · Ollama · SwiftPM · Sparkle 2. Sparkle 2 for self-update is
the only third-party dependency.
Contributing
Bug reports and ideas are welcome — see CONTRIBUTING.md and the
issue templates. Security reports go through SECURITY.md, privately.
Note on naming
The product is Sift. For continuity the bundle identifier remains
com.kikaapp.appaudit and the Swift sources live under Sources/AppAudit/ —
this keeps existing user data (the SwiftData store and Keychain licence keys)
working across the rename. These internal identifiers are not user-visible.
License
MIT — see LICENSE. Outside work Sift uses or learned from is credited in THIRD-PARTY.md.
With thanks to three projects that shaped Sift: the leftover-discovery strategy is
adapted from uninstally (MIT, © 2026
Codenta), and Mole (GPL-3.0, © tw93) is the
reason Sift shows a running-app indicator and sorts by last-used date. Mole is
written in Go and none of its source is present here — those behaviours are
independent Swift implementations against Apple's own APIs. The "Built with"
fact, the version comparison, and GitHub releases as an update source follow
DuoUpdater (MIT, © jizhi0v0): its
bundle-marker rules and version tokenizer are adapted, the rest is Sift's own.
Made by Kika · akakika.com · @akakikaaa