Requirements
The Accessibility permission
This is the part of the deployment that needs the most communication, because macOS requires the user to grant it by hand and the app is inert until they do. The flow is deliberately conservative:1
The app starts with monitoring OFF
Installing the agent does not start any observation. This is the default state, every time.
2
The user signs in
Monitoring cannot be enabled at all until the user is authenticated.
3
The user enables monitoring
From the toggle in the Control Panel. If Accessibility permission is already granted, monitoring starts immediately.
4
macOS prompts for permission
If not granted, the system prompt appears. The app shows a banner with an Open System Settings button.
5
The user approves
System Settings → Privacy & Security → Accessibility, then add PromptShields to the list.
6
Monitoring starts automatically
The app detects the grant and begins monitoring without a restart.
Monitoring states
The menu bar reflects one of four states. Knowing these makes triage much faster:
A user reporting “it isn’t doing anything” is almost always in
disabled or awaitingPermissions.
Configuration
Two settings determine which backend and identity provider the agent talks to. These are baked into the build, so confirm them with whoever produced your package:- API endpoint — the PromptShields API base URL the agent calls.
- Auth0 — the tenant domain and client ID used for sign-in.
What it stores on the device
Encryption failures degrade gracefully rather than crashing the app, so a corrupted key surfaces as missing local history rather than a crash loop.
Troubleshooting
Accessibility is granted but nothing happens
Accessibility is granted but nothing happens
macOS occasionally holds a stale permission record after an app update. In System Settings → Privacy & Security → Accessibility, remove PromptShields from the list, add it back, then restart the app. If it still fails, restart the Mac — this clears the accessibility daemon’s cache.
The user is repeatedly signed out
The user is repeatedly signed out
Check network reachability to the API endpoint and to your Auth0 tenant. The agent refreshes tokens automatically on a 401 or 403; persistent failures raise a
tokenRefreshFailed condition. Clearing the Keychain entries and re-authenticating resolves a corrupted token state.Local history is empty or errors on read
Local history is empty or errors on read
This indicates a missing or rotated encryption key. Recreating the key resolves it, but invalidates all previously encrypted local data — history stored only on that device is lost. Server-side history is unaffected.
The overlay appears in the wrong place
The overlay appears in the wrong place
The overlay positions itself relative to the focused element as reported by the Accessibility API. Applications that draw their own non-standard text fields may report inaccurate geometry. Report the specific application so it can be added to the compatibility list.
What to tell your users
A short note that covers these four points prevents most tickets:- PromptShields lives in the menu bar; it starts off.
- Sign in, then flip the toggle to turn monitoring on.
- macOS will ask for Accessibility permission — this is expected, and required for the app to see text fields.
- It suggests; it never changes your text unless you accept.