Apple Intelligence's Proofread, but everywhere — one hotkey that works in every app on your Mac.
Apple's built-in Writing Tools only appear in apps built on Apple's native text frameworks (Notes, Mail, TextEdit…). Apps with custom text engines — Chrome, Slack, Discord, VS Code, Electron apps in general — never get them. ProofreadAnywhere fixes that: select text in any app, press ⌥⌘P, review the suggested changes in a floating overlay, and accept to replace the text in place.
It uses the same on-device Apple Intelligence model that powers Writing Tools (via Apple's public Foundation Models framework), so everything runs locally: no network, no API keys, no data leaving your Mac.
- Works in any app — reads the selection through the Accessibility API, with an automatic copy-based fallback for apps that don't expose their text (Electron, custom editors…)
- Review before it touches anything — a floating diff overlay (red strikethrough = removed, green underline = added) with Accept / Cancel
- Fully on-device — Apple's local ~3B model; works offline, free, private
- Configurable — change the hotkey and the model prompt from the menu bar Settings window; changes apply instantly
- Smart placement — the overlay anchors to your selection and stays fully on screen
- macOS 26 (Tahoe) or later, on Apple Silicon
- Apple Intelligence enabled (System Settings → Apple Intelligence & Siri) and finished downloading
- Xcode 26+ (to build; no App Store distribution yet)
git clone https://github.com/hatish2001/ProofreadAnywhere.git
cd ProofreadAnywhere
./install.shThe script builds the app, installs it to /Applications, and launches it. Then:
- Grant Accessibility permission: System Settings → Privacy & Security → Accessibility → enable ProofreadAnywhere
- Select some text anywhere and press ⌥⌘P
| Action | How |
|---|---|
| Proofread selection | Select text, press ⌥⌘P (configurable) |
| Accept correction | Click Accept or press Return |
| Dismiss | Click Cancel or press Esc |
| Change hotkey / prompt | Menu bar PA icon → Settings… |
| Quit | Menu bar PA icon → Quit |
The default prompt polishes text into natural American English while preserving your meaning, tone, and formality. Want strict typo-fixing only, or a different dialect, or pirate speak? Edit the prompt in Settings — it applies to the very next proofread.
- Overlay says "Couldn't get the selected text" — make sure Accessibility permission is granted. If you rebuilt the app with ad-hoc signing, macOS silently invalidates the permission: toggle it off and on again in System Settings.
- "Proofreading failed" — usually the model refused the input. Try again or rephrase; enable debug logging to see the exact error:
defaults write com.harisha.proofreadanywhere debugLogging -bool true # then check ~/Library/Logs/ProofreadAnywhere.log
- Nothing happens on the hotkey — another app may own that shortcut. Pick a different combo in Settings.
- First proofread is slow — the model loads into memory on first use. The app pre-warms it at launch, but the very first call after login can still take a few seconds.
- A Carbon
RegisterEventHotKeyglobal hotkey (no keylogging — the app only ever sees its own shortcut). - Selection capture via
AXUIElement/kAXSelectedTextAttribute, falling back to a simulated ⌘C with clipboard save/restore. - The text goes to
SystemLanguageModel(Foundation Models framework) with permissive content-transformation guardrails — the default guardrails false-positive constantly on innocent typos. Notably, structured@Generableoutput silently re-enables strict guardrails even on a permissive model, so the app uses plain-text generation with refusal/preamble detection instead. - Accept writes back via
kAXSelectedTextAttribute, verifies the app actually applied it (Safari and Electron apps often claim success and do nothing), and falls back to a simulated ⌘V.
MIT — see LICENSE.