mac-permissions
Skill8 starsChanged 3 months agoMITView on GitHub
Diagnose and fix macOS permission problems for automation - Accessibility, Screen Recording, Automation/Apple Events, Full Disk Access, TCC. Use when a Mac automation fails silently, when the user gets "not authorized" errors, when setting up Mac control for the first time, or when something worked before and stopped.
1 other project uses a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- calebnewtonusc/Novaedited, first seen Oct 20, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- calebnewtonusc/Nova★ 096% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository46 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- hud/CLAUDE.mdCLAUDE.md
- agent-setupSkill
- asaSkill
- audio-briefSkill
- call-coachSkill
- clone-siteSkill
- courseworkSkill
- creative-videoSkill
- debuggingSkill
- deep-researchSkill
- demoSkill
- graph-engineeringSkill
- gtm-engineeringSkill
- hudSkill
- interfaceSkill
- jev-browseSkill
- kit-builderSkill
- life-contextSkill
- life-opsSkill
- list-auditSkill
- mac-actSkill
- mac-appsSkill
- mac-briefSkill
- mac-controlSkill
- mac-debugSkill
- mac-followupsSkill
- mac-runtimeSkill
- mac-seeSkill
- peopleSkill
- prospect-briefSkill
- repo-healthSkill
- reviewing-changesSkill
- second-brainSkill
- setupSkill
- shippingSkill
- site-specSkill
- skill-forgeSkill
- skill-trainingSkill
- stack-rulesSkill
- study-guideSkill
- study-systemSkill
- textsSkill
- what-can-this-doSkill
- your-dataSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 2 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 60
If the user hit Don't Allow, or the prompt appeared while the terminal was in the background and got dismissed, it never comes back.
- Distinctive: line 91
Make sure the toggle is actually ON, not just listed
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
macOS permissions
Almost every "my Mac automation broke" is one of five things. Work through them in order.
1. Check state
chewie doctorReports each grant, names the exact app that needs it, and lists which tools are on PATH.
2. You cannot grant these from code
Believe this before you spend an hour on it.
tccutilonly resets. There is notccutil grant.- The TCC database is SIP-protected. Editing it does not work.
- The only programmatic grant is an MDM PPPC profile, requiring an enrolled machine.
Everything else is a human clicking a toggle. Design around that instead of fighting it.
3. Grant it to the right app
The app hosting the agent, not the agent, and not the CLI. A CLI binary has no
bundle identity, so macOS attributes its requests up the responsibility chain to
whatever .app launched it.
Consequences that confuse people:
- The prompt says "Cursor wants to control Finder" when it was your script
- It works in Terminal and silently fails in VS Code, because grants are per host
- Two different tools launched by the same terminal share one grant
chewie doctor resolves the outermost .app and prints its name.
4. The buckets are separate
| Grant | Buys | Needed for |
| Accessibility | Read the UI tree, post clicks and keys | Layers 3 and 4 |
| Screen Recording | Screenshots, ScreenCaptureKit | Layer 5 |
| Automation | Apple Events, per caller-target pair | Layer 2 |
| Full Disk Access | ~/Library, other apps' data | Layer 1 |
| Input Monitoring | Observing input (distinct from posting) | Rarely |
Having one gives you none of the others. Automation is per pair: controlling Mail and controlling Safari are two separate grants.
5. The prompt only appears once, ever
If the user hit Don't Allow, or the prompt appeared while the terminal was in the background and got dismissed, it never comes back. The automation fails silently forever. This is the real cause of most "it worked yesterday."
tccutil reset AppleEvents # then trigger it again, terminal in the FOREGROUND
tccutil reset Accessibility
tccutil reset All com.example.appWarn the user before running any reset. You are deleting grants they clicked through by hand and they will have to redo every one.
Error signatures
| Symptom | Meaning |
| -1743 "Not authorized to send Apple events" | Automation denied or never asked |
| -600 "Application isn't running" | Not a permission problem. Launch the app |
| -1728 "Can't get..." | Not a permission problem. Wrong object |
| -1712 timeout | Default ~2min Apple Event timeout, often a modal blocking the target |
| errOSASystemError (-1750) | Usually TCC, reported uselessly |
| Keystrokes silently do nothing | Secure Input, or App Sandbox. Not TCC |
| Empty accessibility tree | Missing grant, or lazy Electron tree. Check both |
Walking a human through it
One toggle at a time. Do not list all five.
- Open System Settings > Privacy & Security > Accessibility
- Click +, add the app
chewie doctornamed - Make sure the toggle is actually ON, not just listed
- Quit and reopen that app. The grant does not take effect until relaunch.
chewie doctoragain
Step 4 is the one everybody skips.
Say the scope out loud
Accessibility plus Screen Recording is functionally total control of the session: read every pixel, click every button, type into anything. Full Disk Access adds every file. That is worth telling the user plainly rather than burying it in an installer.
Two real mitigations: keep grants on a terminal they control rather than a general-purpose app, and put anything long-running or internet-driven in a VM.
Full detail: docs/PERMISSIONS.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

