Is this a real system dialog?
A window a program drew itself to look like a prompt is flagged red and never scanned. Putting a verdict beside a fake is how a fake gets believed.
Every few days macOS shows a dialog like “2.1.258” would like to access files on a network volume. The name means nothing, and the dialog gives you no way to find out who is asking, why, or whether it is safe.
whoRU is a small menu-bar app for macOS. When a permission dialog appears, whoRU shows up next to it and answers four questions in a few seconds, starting with whether the dialog is real. It never clicks anything for you.
whoRU-0.2.0.dmg · 3.8 MB · notarized, Developer ID signed. Get the .pkg installer, verify checksums, or build from source ↓
A window a program drew itself to look like a prompt is flagged red and never scanned. Putting a verdict beside a fake is how a fake gets believed.
It finds the actual program behind the name, confirms it against the system’s own record of the request, shows its real icon and publisher, and verifies the code signature.
It compares the file’s hash against the publisher’s official release, checks whether Apple revoked the certificate, where the file came from, where it lives on disk, and that the process running in memory is the file it examined.
Optionally, an AI model reads the evidence and explains it in plain language: what the program is, why it probably needs this permission, and what breaks if you say no. You can keep asking questions.
What the first question cannot settle. Any program can ask macOS to display an alert, and macOS draws it with the same process, and the same appearance, it uses for a genuine permission prompt. Nothing in that window tells them apart. whoRU falls back on the system’s own record of the request, and when there is no record it says the prompt could not be confirmed instead of vouching for it. Under strict, such a dialog cannot be green.
↓ a few seconds later, optionally
What a scan of the Claude Code binary looks like from the terminal today, without AI and then with the Claude Code engine. The deterministic verdict is on screen before any model runs.
0.00s subject 2.1.258 · ~/.local/share/claude/versions/2.1.258 [manual_path, high]
0.11s ✔ codesign.verify valid on disk, satisfies its designated requirement
0.11s ✔ codesign.identity Developer ID: Anthropic PBC (Q6L2SF6YDW)
0.22s ✔ official_manifest matches downloads.claude.ai manifest for 2.1.258 (darwin-arm64)
0.30s GREEN Safe to allow — Signed by Anthropic PBC and identical to the official release.
...
56.00s Safe to allow · 90% · allow · fit: matches
This is the genuine Claude Code tool from Anthropic, and the request fits what it does.
• The file is byte-for-byte the official Claude Code 2.1.258 release published by Anthropic. [official_manifest]
• It carries an Apple Developer ID signature issued to Anthropic PBC (team Q6L2SF6YDW). [codesign.identity]
• It was started from your own terminal session, not by a web browser. [parent_chain]
∘ A tool whose job is reading project files plausibly needs a network drive when the project lives on one. • evidence, from a deterministic check ∘ inference, from the model The two never mix visually.
Seven components in one process with clear boundaries, so each can be tested alone. Public Apple APIs and standard commands only.
Notices a new permission dialog through the window list and the Accessibility API, reads its text and position, and checks who drew it. Only a window owned by one of macOS’s own dialog processes, signed by Apple as part of the platform, counts as a prompt.
Turns the display name in the dialog into a file on disk, a process, and a bundle identifier, with a confidence level. Two programs with the same name stay amber until the system says which one asked.
Reads the system’s own record of the request, which names the responsible process with its process id and path. It confirms the resolver’s answer, corrects it, or reports that the request could not be confirmed. Once confirmed, the process in memory is checked against the file on disk.
Runs independent evidence checks in parallel. Each one is a deterministic command or system API whose raw output you can inspect.
Turns the evidence into a red / amber / green floor and ceiling. A broken signature, a revoked certificate, or a process that is not the file on disk is red, no matter what anyone says afterwards.
Receives the evidence bundle and returns a structured verdict. It can lower confidence and raise suspicion. It cannot turn a red into a green, and it can never recommend allowing on an amber score; the app enforces that in code, not in the prompt.
A glass panel beside the dialog: identity, evidence rows, verdict, and a chat to keep asking. Every scan goes to History.
Standard trusts a valid signature from a known publisher. Strict insists on notarization or an official-release match and keeps unknown origins amber.
Each check is an independent unit with a name, a command or API, a parser and a weight. Fast checks run in parallel with a 4-second timeout; slow ones run after the first results are on screen. Every evidence row opens the command and its raw output.
Optional, slow, on request: lsof -p <pid> -i for current network connections, and a VirusTotal lookup by hash.
An impersonation, a name matching a system app or a known publisher whose path or Team ID does not match, is a red finding on its own and is shown first.
whoRU offers whatever is usable on your Mac and you pick the agent and the model in Settings → AI. The model receives the evidence bundle, runs a bounded tool loop, and returns a structured verdict that a validator checks against the evidence contract.
Each one is started as its own responsible process, so it inherits nothing from whoRU, its Accessibility
grant included. Claude Code runs with no user settings, hooks, MCP servers or slash commands, and its only
command is whoru-inspect, a small tool inside the app that inspects the program under review
and nothing else. Everything a program wrote about itself reaches the model once, labelled as its own claim.
Short-circuits skip the model entirely: a cached verdict for the same hash and service within 30 days, an Apple-signed system component, or a publisher on your trust list.
whoRU 0.2.0 for macOS 26 or later. Signed with a Developer ID and notarized by Apple — here’s the evidence, the same kind whoRU itself would show you.
Verify with shasum -a 256 <file>, or check the signature yourself with spctl -a -vv -t install whoRU-0.2.0.pkg.
Publisher: Developer ID Installer / Application, team A3W935G59T.
Before whoRU asks for anything, it tells you why. First launch walks through each permission in plain language, then gets out of the way.
# clone and build the app bundle yourself
git clone https://github.com/yairixStudio/whoRU.git
cd whoRU
scripts/build-app.sh # → build/whoRU.app
open build/whoRU.app
scripts/make-dmg.sh # → build/whoRU-<version>.dmg First launch walks you through the one permission whoRU needs (Accessibility, used only to read the text of permission dialogs) and the optional AI engine. An ad-hoc signed build loses its Accessibility permission when you rebuild; re-grant it in System Settings → Privacy & Security → Accessibility.
swift build
.build/debug/whoru-cli scan "/Applications/Google Chrome.app" --service downloadsFolder --no-ai
.build/debug/whoru-cli parse '“Google Chrome” would like to access files in your Downloads folder.'
.build/debug/whoru-cli resolve "2.1.258"
.build/debug/whoru-cli doctor --json prints the full scan record; --no-store keeps it out of history.
Set ANTHROPIC_API_KEY to use the Claude API from the terminal.