DEV Community

Devin
Devin

Posted on Originally published at hhfa008.github.io

Apple just linked "AI agents" to Full Disk Access restrictions. Here is what that means for tooling

As AI agents become increasingly capable and autonomous, the risks associated with this level of access will grow substantially.

That sentence closes a short Apple developer note, "Updates to Full Disk Access in macOS", published on October 2, 2026. The note is roughly 200 words and changes nothing yet. What it does is put tool builders on notice that the switch they have relied on may soon require more than a toggle.

Here is what it says, what it leaves out, and what it means if you ship anything that reads outside its own container.

Why Full Disk Access exists in the first place

macOS sandboxes apps and gates sensitive locations behind TCC, the Transparency, Consent and Control system. A normal app cannot read your Messages database or your Safari history without asking, and in most cases it cannot ask at all.

Backup tools break that model. A backup app cannot know in advance which folders a user cares about, and cannot ask for permission one directory at a time. So Apple created one blunt escape hatch: Full Disk Access. Grant it and the app sidesteps the per-resource controls entirely.

Apple's own note says this plainly: Full Disk Access "largely sidesteps these controls in order to allow backup apps to function properly on the Mac." The design has not changed; what Apple is signalling is a change to how the grant is obtained, not what it does.

What the announcement actually says

Three points, and no more:

  1. Apple will "introduce additional controls" on top of the existing switch.
  2. Users who "genuinely wish to grant an app this extraordinary level of access can only do so with very explicit user action."
  3. The motivation is risk: some developers use the permission in ways that expose "everything on their systems, including files, mail, messages, and even browsing history" without users understanding it.

Note "additional controls", not replacement. Apple is not removing Full Disk Access and explicitly preserves the backup use case. The change is to the consent moment.

What it does not say

Worth reading twice.

  • No effective date. The note says "Going forward". There is no date, no release number, no mention of a beta.
  • No OS version. Any article stating that this starts in macOS 27.x, or 26.4, or "next year", is inferring. The note does not say.
  • No API list. Not a single API is named. There is no list of affected directories, no mention of which TCC services are in scope, and no statement about whether the existing kTCCServiceSystemPolicyAllFiles identifier is the thing being gated.
  • No answer for existing grants. The note does not say whether apps already granted Full Disk Access will be re-prompted, grandfathered, or left alone. That is the most consequential open question for shipping software, and it is unanswered.

Apple has not published an effective date or a list of affected APIs. Until it does, the only defensible engineering position is to prepare for a stricter consent flow without assuming a schedule.

What this means if you build automation tooling

We hit the practical version of this problem on a macOS 27 machine this week, while building a background job that reads ~/Library/Messages/chat.db. The file was -rw-r--r--, owned by the same user, readable from the same shell. The read returned EPERM, errno 1.

That error is TCC, not the filesystem. The details matter if your product depends on broad reads:

The grant is bound to a code requirement, not a path. After a rebuild with a new signature, our app stayed in the list with its checkbox on, and access was still denied. The system log said Failed to match existing code requirement. TCC stores a reference to the signed binary's designated requirement. Ad-hoc signing or a fresh development certificate changes the CDHash, and the old entry no longer matches. Deleting the stale entry, relaunching, and re-triggering the prompt is the only fix; clicking "allow" again does nothing, because the entry is never rebuilt.

Background processes are not covered by the parent's grant. The same script read ~/Documents fine from a terminal and failed with EPERM when launched by a LaunchAgent. Terminal's grant belongs to Terminal's executable, not to everything it spawns. If a helper does the reading, the helper is what users must authorize.

Prompting is going away in some services. On macOS 27, requesting screen recording authorization returned denied outright, logging does not allow prompting; returning denied. The API can no longer surface a dialog; apps must send users to System Settings and explain which row to enable.

Permission state may not be where your self-check looks. In our environment the user-level TCC database was no longer at ~/Library/Application Support/com.apple.TCC/TCC.db; it resolved under /private/var/containers/Data/ProtectedSystem/<UUID>/.... A health check on the old path returns empty and reports "not authorized" for an authorized app. Read the log, not the database.

Five things to do before this lands

None require knowing Apple's timeline; all make a stricter consent flow cheaper to absorb.

  1. Apply least privilege before you need to. Enumerate the exact paths your tool reads and use the narrowest API that works: EventKit for calendars, Contacts for address book, FSEvents for filesystem watching, a user-picked folder for documents. If one code path needs Messages, put it behind a feature flag so the rest of the product runs without the grant.
  2. Declare the purpose where the system will show it. Write the sentence a user will read at the consent moment: what you read, why, what leaves the machine. Put the same statement in your privacy policy and in-app settings. "Explicit user action" is easier to satisfy when the reason is already on screen.
  3. Stop hard-depending on Full Disk Access. Every feature behind the grant needs a defined "denied" state: an empty state, a narrow-mode fallback, or a disabled control with an explanation. If the app crashes or spins when permission is missing, the stricter flow turns that into support tickets.
  4. Detect permission failures explicitly, and re-verify after every signing change. Treat EPERM as a possible TCC denial rather than a filesystem bug. Log the tccd decision, and add an automated check that runs after each build with a new identity: attempt one gated read, assert success, and fail loudly. Re-signing is the most common silent regression we have seen.
  5. Tell users what to do, per OS version. Deep-link to the exact Settings pane, name the row, and warn that an app update may require re-authorizing. Keep instructions versioned; the pane has moved before.

What to watch instead of a date

Two signals will tell you this is real. First, the Full Disk Access pane in System Settings: if a new confirmation step appears, the change has shipped. Second, macOS beta release notes: a TCC or privacy entry naming the new control will show up there before general availability.

Until one of those appears, treat the announcement as a design constraint, not a deadline. It tells you which assumptions in your code are now liabilities. That is enough to start.

If you want the longer field notes on macOS permissions, signing, and automation, they live here: https://hhfa008.github.io/personal/cases.html

Top comments (0)