Accès complet au disque de macOS et agents IA : ce qu’a dit Apple
Qu’a dit Apple sur l’accès complet au disque, et qu’est-ce que cela signifie pour les agents IA ? Le 2 octobre 2026, Apple a publié une courte actualité pour les développeurs, « Updates to Full Disk Access in macOS » (mises à jour de l’accès complet au disque dans macOS). On y lit que l’accès complet au disque (Full Disk Access) « largely sidesteps » (contourne largement) les contrôles qui protègent les données privées des utilisateurs, que « Some developers are using Full Disk Access in ways that could put users at risk » (certains développeurs utilisent l’accès complet au disque d’une manière qui peut mettre les utilisateurs en danger), et que « Going forward, we will introduce additional controls to ensure that users who genuinely wish to grant an app this extraordinary level of access can only do so with very explicit user action. » (Désormais, nous introduirons des contrôles supplémentaires pour que les utilisateurs qui souhaitent réellement accorder à une app ce niveau d’accès extraordinaire ne puissent le faire que par une action très explicite.) La raison avancée : « As AI agents become increasingly capable and autonomous, the risks associated with this level of access will grow substantially. » (À mesure que les agents IA gagnent en capacités et en autonomie, les risques liés à ce niveau d’accès vont fortement augmenter.)1 L’actualité ne nomme aucune version de macOS, aucune date, aucun mécanisme et aucune app. Pour qui fait tourner des agents sur un Mac, ce qui compte aujourd’hui, c’est la façon dont un agent finit par disposer de cet accès. Un agent en ligne de commande s’exécute sous le terminal qui l’a lancé. Dans la documentation Apple que j’ai lue, il n’existe aucune règle générale à ce sujet, mais la page de manuel de l’outil eslogger d’Apple indique que l’exécuter « from an app, including Terminal.app or a third-party terminal emulator, requires the respective app to be authorized for Full Disk Access. » (depuis une app, y compris Terminal.app ou un émulateur de terminal tiers, exige que cette app soit autorisée pour l’accès complet au disque.)2 Un ingénieur du support d’Apple, dans un message de forum, le formule ainsi : « The tool’s responsible code is Terminal. » (le code responsable de l’outil, c’est Terminal.)3 Donnez l’accès complet au disque à votre terminal, et chaque agent que vous y lancez peut lire ce que le terminal peut lire : Mail, Messages, les données de Safari et les sauvegardes Time Machine, selon la liste d’Apple.4 Les bacs à sable des éditeurs n’y changent rien par défaut. Sur mon Mac, une lecture qui exige l’accès complet au disque a réussi depuis le shell de l’agent, a de nouveau réussi dans le bac à sable read-only de Codex et dans le runtime de bac à sable d’Anthropic, et n’a été refusée que lorsqu’une règle de bac à sable interdisait précisément ce dossier ou lorsque j’ai lancé la même lecture hors du terminal.5
L’essentiel
- Ce qu’a dit Apple. Le 2 octobre 2026, Apple a annoncé aux développeurs qu’elle « will introduce additional controls » (introduira des contrôles supplémentaires) afin qu’accorder l’accès complet au disque exige une « very explicit user action » (action très explicite de l’utilisateur), et a désigné les agents IA comme la raison pour laquelle le risque « will grow substantially » (va fortement augmenter). L’actualité ne donne ni version, ni date, ni mécanisme. Les notes de version de macOS 27.2 beta 3 ne contiennent aucune ligne à ce sujet. Je n’ai trouvé aucune entrée macOS 27.1 dans le flux des versions du 11 octobre ni dans l’index des notes de version : le flux liste macOS 27.0.1 (28 septembre), publié sans notes de version pour les développeurs, puis macOS 27.2 beta 3 ; les bêtas de 27.2 elles-mêmes ont commencé le 16 septembre.16789
- Ce qu’est l’accès complet au disque. Un réglage de Confidentialité et sécurité (Privacy & Security) qui permet à une app d’« access all files on your computer » (accéder à tous les fichiers de votre ordinateur), y compris les données de Mail, Messages, Safari et Maison, les sauvegardes Time Machine et « certain administrative settings for all users on this Mac » (certains réglages d’administration pour tous les utilisateurs de ce Mac). Une app ne peut pas le demander ; l’utilisateur ajoute l’app à la main, ou un profil MDM l’accorde. Dans ce que j’ai lu, Apple l’a rattaché aux outils de sauvegarde et de gestion de disque à trois reprises : à la WWDC19, à la WWDC23 et le 2 octobre.410211121
- Comment les agents l’obtiennent. Par deux voies. Un agent en ligne de commande (Claude Code, Codex CLI, Gemini CLI, Hermes Agent, Aider) est évalué au regard de l’app dans laquelle il s’exécute, si bien qu’un terminal doté de l’accès complet au disque le lui transmet ; Apple l’énonce outil par outil dans ses pages de manuel et par la voix de ses ingénieurs du support sur ses forums, jamais comme une règle générale documentée. Les apps d’agent de bureau ont leurs propres entrées, et deux éditeurs d’agents, Nous Research pour Hermes et OpenClaw, demandent aux utilisateurs d’accorder l’accès complet au disque pour que l’agent puisse lire Messages.231314
- Ce que font les bacs à sable. Les bacs à sable Seatbelt de Claude Code, Codex, Gemini CLI et Cursor limitent les écritures, et tous sauf le profil par défaut de Gemini CLI limitent le réseau ; leurs lectures par défaut sont larges. Sur mon Mac, les deux bacs à sable que j’ai exécutés ont laissé l’autorisation d’accès complet au disque en place, et d’après la description du contrôle d’accès obligatoire par l’ingénieur du support d’Apple, aucun ne peut en ajouter une. Le bac à sable de Claude Code est désactivé par défaut ; celui de Codex est activé. Sur mon Mac, une lecture protégée a traversé le bac à sable read-only de Codex et le runtime de bac à sable d’Anthropic ; dans les bacs à sable, elle ne s’est arrêtée que lorsque j’ai interdit le dossier nommément.151617185
- Sur mon Mac. La liste de l’accès complet au disque compte 75 lignes : entre autres trois terminaux, les apps ChatGPT, Cursor et Xcode, 30 binaires Claude Code numérotés par version,
nodeet quatre interpréteurs Python, ainsi que l’entrée du serveur SSH. Le shell de l’agent dans Ghostty disposait d’un accès effectif ; la même lecture lancée depuis une tâche launchd, sans terminal au-dessus, a été refusée par TCC.195 - Que faire maintenant. Voyez qui le détient ; retirez-le au terminal dans lequel vous lancez vos agents ; ne le donnez jamais à un interpréteur ; activez le bac à sable de l’éditeur et interdisez les lectures dont vous n’avez pas besoin ; faites tourner tout agent qui lit Messages sous un utilisateur macOS distinct, ou pas du tout ; et conservez l’approbation à chaque envoi pour tout ce qui parle en votre nom. Chaque étape ci-dessous indique sa source et son coût.420152122
- Ce qui pourrait changer. Les termes d’Apple laissent place à une procédure d’autorisation plus exigeante, à un périmètre plus étroit, à un traitement différent des autorisations qui passent d’une app aux programmes qu’elle lance, et à des changements pour les Mac gérés. La section 7 confronte chacune de ces pistes aux changements voisins qu’Apple a elle-même apportés dans macOS 27 et Xcode 27, avec la condition dont chacune dépend. Aucune n’est une prévision.1232425
1. Ce qu’Apple a dit le 2 octobre, et ce qu’elle n’a pas dit
Le flux d’actualités pour développeurs d’Apple a daté l’article du vendredi 2 octobre 2026, 09:00:19, heure du Pacifique, entre un avis sur l’expiration d’une autorité de certification Developer ID le 1er octobre et les annonces sur l’iPhone Duo et les ressources de l’App Store du 5 octobre.26 L’article tient en deux paragraphes. Je l’ai enregistré le 11 octobre et récupéré à nouveau 19 minutes plus tard ; hormis des apostrophes typographiques contre des apostrophes droites, les deux copies sont identiques, il n’a donc pas changé entre mes deux lectures.1
Le premier paragraphe pose le problème. Apple dit fournir aux développeurs « powerful APIs to build incredible capabilities into their apps for Apple products, backed by a set of controls designed to protect users’ private data » (des API puissantes pour doter leurs apps de fonctionnalités remarquables, adossées à un ensemble de contrôles conçus pour protéger les données privées des utilisateurs), puis : « Full Disk Access largely sidesteps these controls in order to allow backup apps to function properly on the Mac. » (l’accès complet au disque contourne largement ces contrôles afin de permettre aux apps de sauvegarde de fonctionner correctement sur le Mac.) La phrase suivante est l’accusation : « Some developers are using Full Disk Access in ways that could put users at risk » (certains développeurs utilisent l’accès complet au disque d’une manière qui peut mettre les utilisateurs en danger), en exposant « everything on their systems » (tout ce qui se trouve sur leur système), qu’Apple détaille ainsi : « files, mail, messages, and even browsing history » (fichiers, courrier, messages et même historique de navigation), et cela « without users’ full knowledge and understanding » (sans que les utilisateurs le sachent et le comprennent pleinement). Le paragraphe se termine sur des personnes qui n’ont jamais consenti à rien : « For communication apps, this can also compromise the privacy of the people users are communicating with. » (Pour les apps de communication, cela peut aussi compromettre la vie privée des personnes avec lesquelles les utilisateurs communiquent.)1
Le second paragraphe contient la promesse et la raison, citées intégralement :
« Going forward, we will introduce additional controls to ensure that users who genuinely wish to grant an app this extraordinary level of access can only do so with very explicit user action. Addressing this is critical. As AI agents become increasingly capable and autonomous, the risks associated with this level of access will grow substantially. We are committed to ensuring users clearly understand these risks before granting such access, so they can make informed decisions about their own data and privacy. » (Désormais, nous introduirons des contrôles supplémentaires pour que les utilisateurs qui souhaitent réellement accorder à une app ce niveau d’accès extraordinaire ne puissent le faire que par une action très explicite. Y remédier est essentiel. À mesure que les agents IA gagnent en capacités et en autonomie, les risques liés à ce niveau d’accès vont fortement augmenter. Nous nous engageons à ce que les utilisateurs comprennent clairement ces risques avant d’accorder un tel accès, afin qu’ils prennent des décisions éclairées sur leurs propres données et leur vie privée.)1
Trois points méritent une lecture attentive.
Le sujet, c’est l’autorisation, pas l’API. Chaque verbe de la promesse porte sur le moment où l’utilisateur accorde l’accès : les utilisateurs « who genuinely wish to grant an app » (qui souhaitent réellement accorder à une app), la « very explicit user action » (action très explicite), la compréhension des risques « before granting such access » (avant d’accorder un tel accès). Rien dans l’article ne dit que l’accès complet au disque couvrira moins de choses, que les apps qui le détiennent seront examinées ou qu’il disparaîtra. Ma lecture, présentée comme telle : l’article décrit un changement dans la façon dont on actionne l’interrupteur, et ne dit rien, dans un sens ou dans l’autre, de ce que l’interrupteur ouvre une fois actionné.
La raison, ce sont les agents, mais la cible, ce sont les apps. Apple nomme une fois les « AI agents » (agents IA), comme la raison pour laquelle le risque « will grow substantially » (va fortement augmenter). Elle ne dit pas que les agents sont les apps qui abusent aujourd’hui de cet accès ; cette phrase-là concerne « Some developers » (certains développeurs). Elle ne dit pas non plus comment un contrôle sur l’autorisation accordée à « an app » (une app) atteindrait un agent, qui sur un Mac n’est souvent pas une app du tout, mais un programme en ligne de commande qui s’exécute à l’intérieur d’une app. La section 3 porte précisément sur cet écart.
« Communication apps » est la catégorie qu’elle distingue pour le tort fait à autrui. Apple ne nomme aucune app ni aucun développeur. L’article cite deux types de logiciels : les apps de sauvegarde, comme raison d’être de cet accès, et les apps de communication, la seule catégorie qu’il associe à un tort qui dépasse l’utilisateur : les personnes à l’autre bout de la conversation, qui n’ont rien accordé. La section 3 présente deux éditeurs d’agents dont les intégrations Messages, d’après leur documentation, exigent l’accès complet au disque ; l’article ne dit pas si Apple pensait à l’un d’eux, et je ne le présume pas.
Ce que l’article ne dit pas
Lu sous l’angle de ce qui manque, l’article ne comporte :
- Aucune version de macOS et aucune date. « Going forward » (désormais) est la seule indication temporelle.
- Aucun mécanisme. Ni conception de demande d’autorisation, ni entitlement, ni API, ni règle de l’App Review, ni changement de gestion des appareils.
- Rien sur les autorisations existantes. Il ne dit pas si les apps déjà présentes dans la liste de l’accès complet au disque y conservent leur place, ni si les utilisateurs seront à nouveau sollicités.
- Rien sur les Mac gérés. Il ne mentionne pas le MDM, alors que le MDM peut aujourd’hui accorder l’accès complet au disque (section 2).
- Aucune action demandée aux développeurs. Ni échéance, ni lien vers une documentation, ni date à laquelle les apps devraient changer.
J’ai cherché là où Apple publierait un mécanisme. L’index des notes de version de macOS, consulté le 11 octobre, liste exactement deux entrées macOS 27, « macOS 27.2 Golden Gate Beta 3 Release Notes » et « macOS 27 Golden Gate Release Notes ». Je n’ai trouvé aucune entrée macOS 27.1 ni dans cet index ni dans le flux des versions d’Apple, consulté le même jour, qui liste macOS 27.0.1 (26A434), daté du 28 septembre, puis la 27.2 beta 3. La mise à jour 27.0.1 n’a pas de page de notes de version pour les développeurs ; l’adresse qu’utiliserait une telle page a renvoyé HTTP 404 quand je l’ai essayée, tout comme les adresses de 27.1 et de la 27.1 beta.87 Les notes de la 27.2 beta 3 (la bêta, build 26B5101f, est datée du 5 octobre dans le flux des versions d’Apple, trois jours après l’article) comptent six sections (General, AppKit, Display Settings, Notifications, Shortcuts, StoreKit Testing in Xcode), et aucune ne mentionne l’accès complet au disque, TCC ni Confidentialité et sécurité ; ce qui s’en rapproche le plus est une ligne AppKit indiquant qu’un réglage par défaut de préversion développeur sur la confidentialité du presse-papiers « has been removed » (a été supprimé).67 La lettre d’information d’Apple pour les développeurs d’octobre, publiée quatre jours après l’article, couvre les soumissions pour l’iPhone Duo, les labs et la documentation, et ne dit rien de l’accès complet au disque ni des agents.27 Les quatre sessions de la WWDC26 qu’Apple classe sous Privacy & Security, dont une intitulée « Secure your app: mitigate risks to agentic features », ne mentionnent pas l’accès complet au disque.2829
Le seul autre texte d’Apple sur les agents et l’accès aux fichiers
Un document d’Apple traite bien des autorisations de fichiers pour les agents IA, et il concerne Xcode, pas macOS. Les notes de version de Xcode 27 indiquent : « Coding Intelligence now includes a new security layer that monitors and controls filesystem access by coding agents and any processes they spawn. This can be enabled in Coding Intelligence settings. » (Coding Intelligence comprend désormais une nouvelle couche de sécurité qui surveille et contrôle l’accès au système de fichiers par les agents de codage et par tous les processus qu’ils lancent. Elle peut être activée dans les réglages de Coding Intelligence.)24 C’est toute l’entrée. Elle ne dit pas ce que la couche autorise ou bloque, si elle est active par défaut (la formule « can be enabled » laisse penser que non), comment elle s’articule avec TCC, ni si elle couvre les agents extérieurs à Xcode. Les mêmes notes décrivent un serveur MCP en préversion qui permet à des « code-signed agents » (agents signés) d’utiliser des projets dans une arborescence « for extended periods of time without being asked for additional permissions » (pendant de longues périodes sans qu’on leur demande d’autorisations supplémentaires), ainsi qu’une option, --unsafe-always-allow-all-agents, dont Apple dit qu’elle « is not a recommended configuration for at-desk use » (n’est pas une configuration recommandée pour le travail au poste).24 Aucune des deux entrées ne mentionne l’accès complet au disque.
La session de la WWDC26 sur les fonctionnalités agentiques est ce qui se rapproche le plus d’un modèle de menace pour les agents dans les documents d’Apple que j’ai lus. Elle cite la « Simon Willison’s Lethal Trifecta », selon laquelle un utilisateur est le plus en danger quand un agent dispose d’un « access to private data, exposure to untrusted content, and the ability to externally communicate » (accès à des données privées, exposition à des contenus non fiables et capacité de communiquer vers l’extérieur).29 L’accès complet au disque, c’est le premier de ces trois éléments en un seul interrupteur ; c’est ma lecture de la raison pour laquelle l’article d’octobre dit que le risque croît avec les agents, et non le raisonnement exposé par Apple.
2. Ce qu’est l’accès complet au disque
Le contrôle, dans les mots d’Apple
L’accès complet au disque est une ligne de Réglages Système (System Settings) > Confidentialité et sécurité. Le guide d’utilisation du Mac pour macOS 27 le décrit ainsi : « Allow apps to access all files on your computer, including data from other apps (for example, Mail, Messages, Safari, and Home), data from Time Machine backups, and certain administrative settings for all users on this Mac. » (autoriser des apps à accéder à tous les fichiers de votre ordinateur, y compris les données d’autres apps comme Mail, Messages, Safari et Maison, les données des sauvegardes Time Machine et certains réglages d’administration pour tous les utilisateurs de ce Mac.)4 Les lignes voisines se lisent autrement. Calendriers, Contacts, Fichiers et dossiers (Files & Folders) et la plupart des autres se terminent par « The listed apps have requested access. » (les apps listées ont demandé l’accès.) La ligne de l’accès complet au disque dit plutôt « To add an app, click [the Add button] , select the app in the list, then click Open. » (pour ajouter une app, cliquez sur le bouton Ajouter, sélectionnez l’app dans la liste, puis cliquez sur Ouvrir.)4 Toute la différence est là : les apps demandent les autres accès, alors que celui-ci, c’est l’utilisateur qui va le chercher.
Apple Platform Security dit la même chose sous forme de tableau. Sa page sur le contrôle de l’accès des apps aux fichiers fait figurer « Full internal storage access » (son nom pour ce même contrôle) avec une croix sous « User prompted by app » (l’utilisateur est sollicité par l’app) et une coche sous « User needs to edit system privacy settings » (l’utilisateur doit modifier les réglages de confidentialité du système) ; Fichiers et dossiers, à l’inverse, est demandé par l’app.10 La référence de gestion des appareils, rédigée pour les administrateurs, décrit le service comme un accès « to all protected files, including system administration files » (à tous les fichiers protégés, y compris les fichiers d’administration système), et le guide de déploiement d’Apple le liste sous le nom « System Policy All Files », qui « Allows specified apps access to data like Mail, Messages, Safari, Home, Time Machine backups, and certain administrative settings for all users of the Mac. » (permet à des apps désignées d’accéder à des données comme Mail, Messages, Safari, Maison, les sauvegardes Time Machine et certains réglages d’administration pour tous les utilisateurs du Mac.)3031
Trois choses qu’Apple ne publie pas méritent d’être connues avant de raisonner sur le sujet :
- Il n’existe aucune liste complète de ce qu’il protège. Un ingénieur d’Apple Developer Technical Support, sur les forums développeurs d’Apple (un message d’un employé, pas de la documentation), écrit : « The exact list of file system locations protected by MAC is not documented and, as illustrated by the list above, can change over time. » (la liste exacte des emplacements du système de fichiers protégés par MAC n’est pas documentée et, comme le montre la liste ci-dessus, peut évoluer.)20 MAC désigne ici le contrôle d’accès obligatoire (mandatory access control), le mécanisme sous-jacent.
- Il n’est pas propre à chaque utilisateur. Le même ingénieur : « Some MAC privileges are per user (Files and Folders) and some are system wide (Full Disk Access). » (certains privilèges MAC sont propres à chaque utilisateur, comme Fichiers et dossiers, d’autres valent pour tout le système, comme l’accès complet au disque.)20 Une autorisation accordée depuis un compte vaut pour ce programme dans tous les comptes.
- TCC est un nom qu’Apple emploie mais définit à peine. Le sous-système qui conserve ces décisions s’appelle TCC. L’en-tête Endpoint Security du SDK de macOS 27 le développe en « Transparency, Consent, and Control (TCC) », un panel d’Apple à la WWDC26 a déclaré « TCC stands for transparency, consent and control » (TCC signifie transparence, consentement et contrôle), et le message de l’ingénieur du support ajoute que TCC « has no API surface » (n’expose aucune API).323320 Dans la base de données de TCC sur mon Mac, les lignes de l’accès complet au disque sont stockées sous le nom de service
kTCCServiceSystemPolicyAllFiles. Cette chaîne n’apparaît dans aucun document, aucune page de manuel ni aucun en-tête de SDK d’Apple que j’ai vérifiés ; les noms documentés par Apple sont la clé de profilSystemPolicyAllFileset l’ancre de réglagesPrivacy_AllFiles.19302534
Comment il est accordé
Par l’utilisateur, à la main. L’utilisateur ouvre la ligne de l’accès complet au disque, clique sur Ajouter et choisit l’app.4 Apple ne documente aucun moyen pour une app de déclencher une demande à ce sujet. Ce que propose la documentation d’Apple, c’est un lien qui amène l’utilisateur au bon panneau. Pour les apps habilitées comme clients Endpoint Security (l’en-tête exige l’entitlement com.apple.developer.endpoint-security.client des appelants de es_new_client), l’en-tête Endpoint Security indique : « The only supported way to check if an application is properly TCC authorized for Full Disk Access is to call es_new_client and handling ES_NEW_CLIENT_RESULT_ERR_NOT_PERMITTED » (la seule façon prise en charge de vérifier qu’une application est correctement autorisée par TCC pour l’accès complet au disque consiste à appeler es_new_client et à traiter ES_NEW_CLIENT_RESULT_ERR_NOT_PERMITTED), et qu’une app peut, « To direct the user to the Full Disk Access section in System Settings » (pour diriger l’utilisateur vers la section Accès complet au disque des Réglages Système), ouvrir x-apple.systempreferences:com.apple.settings.PrivacySecurity.extension?Privacy_AllFiles sous macOS 13 et ultérieur.25 À la WWDC19, Apple décrivait le même schéma : les apps « can test for authorization using FileManager or POSIX level APIs, and if necessary, can guide the user to the security and privacy preference pane, where the user can then approve the app if that’s what they want. » (peuvent vérifier l’autorisation avec FileManager ou des API de niveau POSIX et, si nécessaire, guider l’utilisateur vers le panneau Sécurité et confidentialité, où il peut approuver l’app s’il le souhaite.)11 En 2018, un développeur demandait sur les forums d’Apple « an API call that causes a prompt to the logged-in user to grant the app Full Disk access because there’s no way to trigger a prompt like that right now, and that’s what backup apps need » (un appel d’API qui demande à l’utilisateur connecté d’accorder l’accès complet au disque à l’app, car il n’existe pour l’instant aucun moyen de déclencher une telle demande, et c’est ce dont les apps de sauvegarde ont besoin) ; l’ingénieur du support d’Apple a répondu : « Please do file an enhancement request. » (merci de déposer une demande d’amélioration.)35 Dans tout ce que j’ai lu pour cet article, la documentation d’Apple ne décrit toujours que le lien, huit ans plus tard.
Une facilité existe. Depuis Catalina, un programme refusé faute d’accès complet au disque apparaît déjà dans la liste, désactivé : « executables that are denied access to files due to a lack of Full Disk Access approval are now prepopulated unchecked. » (les exécutables auxquels l’accès aux fichiers est refusé faute d’approbation pour l’accès complet au disque sont désormais préremplis, non cochés.)11 L’utilisateur doit toujours l’activer lui-même.
Par un profil MDM. Sur un Mac géré, la charge utile Privacy Preferences Policy Control (type com.apple.TCC.configuration-profile-policy, macOS uniquement, depuis 10.14) peut l’accorder. La page de manuel de eslogger le dit sans détour : « MDM servers can grant Full Disk Access authorization using the Privacy Preferences Policy Control payload, identified by payload type com.apple.TCC.configuration-profile-policy, and its service dictionary key SystemPolicyAllFiles. » (les serveurs MDM peuvent accorder l’autorisation d’accès complet au disque au moyen de la charge utile Privacy Preferences Policy Control, de type com.apple.TCC.configuration-profile-policy, et de sa clé de service SystemPolicyAllFiles.)236 Lorsque la clé Allowed de l’entrée d’une app vaut true, la référence d’Apple indique « access is granted » (l’accès est accordé) et ajoute : « The user isn’t prompted and can’t change this value. » (l’utilisateur n’est pas sollicité et ne peut pas modifier cette valeur.)37 Le commentaire d’exemple du guide de déploiement d’Apple pour cette charge utile est le suivant : « Allows my organization’s app to interact with all files without prompting the user. » (permet à l’app de mon organisation d’agir sur tous les fichiers sans solliciter l’utilisateur.)31 C’est une véritable asymétrie : pour la caméra, le micro, l’enregistrement de l’écran et l’écoute du clavier, la référence d’Apple dit qu’un profil « can’t grant » (ne peut pas accorder) l’accès et « can only deny it » (peut seulement le refuser). Elle ne dit rien de tel pour SystemPolicyAllFiles.30
Deux pages d’Apple se contredisent au sujet de cette charge utile, et l’une a changé cette année :
- Supervision. Le guide de déploiement dit « Supervision is required if you apply this payload using a device management service. » (la supervision est requise si vous appliquez cette charge utile via un service de gestion des appareils.) Le tableau de disponibilité de la référence développeur indique « Requires supervision » N/A.3136 Je rapporte les deux sans trancher.
- macOS 27 a rendu obsolète la partie propre à chaque app. Dans la référence actuelle, l’objet
Identityqu’utilise chaque entrée de service, y compris celle de l’accès complet au disque, est marqué obsolète à partir de macOS 27.0, et chacune de ses clés porte la mention « Deprecated: macOS 27+ ». L’entréeSystemPolicyAllFileselle-même ne porte aucune marque d’obsolescence.3730 Le remplaçant déclaratif vers lequel Apple renvoie pour d’autres services, la configuration des réglages d’app, propose des valeurs par défaut de confidentialité pour l’Accessibilité (Accessibility), le Bluetooth, la caméra, la dictée, le réseau local, la localisation et le micro. Il n’a aucune clé pour l’accès complet au disque, et ses valeurs par défaut sont soumises à consentement : « When set, the app displays a consent prompt listing all the configured defaults. » (une fois défini, l’app affiche une demande de consentement listant toutes les valeurs par défaut configurées.)3839 Apple ne relie pas cela à l’article du 2 octobre, et moi non plus ; c’est un fait à côté de l’histoire.
Pourquoi il existe : les apps de sauvegarde, trois fois
Aux trois endroits où j’ai trouvé Apple expliquer à qui s’adresse l’accès complet au disque, elle a cité le même type de logiciel. À la WWDC19, en décrivant les deux niveaux de données protégées, Apple a placé « things like mail or messages and Safari browsing history » (des choses comme le courrier, les messages et l’historique de navigation de Safari) dans le second niveau et a dit qu’elles « have a high barrier to access because the files are typically only accessed by specialized apps such as disk management or backup utilities. » (ont une barrière d’accès élevée, car ces fichiers ne sont généralement consultés que par des apps spécialisées comme les utilitaires de gestion de disque ou de sauvegarde.)11 À la WWDC23, en présentant la protection des conteneurs d’app, Apple a déclaré : « For backup utilities or disk-management tools that have already been granted Full Disk Access, no additional prompt will be shown at time of access, since people have already chosen to allow these apps access to all files. » (pour les utilitaires de sauvegarde ou les outils de gestion de disque qui disposent déjà de l’accès complet au disque, aucune demande supplémentaire ne s’affichera au moment de l’accès, puisque les utilisateurs ont déjà choisi d’autoriser ces apps à accéder à tous les fichiers.)12 Le 2 octobre, elle a dit que l’accès complet au disque contourne les contrôles des données « in order to allow backup apps to function properly on the Mac. » (afin de permettre aux apps de sauvegarde de fonctionner correctement sur le Mac.)1 Un agent n’est pas une app de sauvegarde. Toute la tension tient dans cette phrase.
D’où il vient
La plupart des sources d’Apple font remonter l’accès complet au disque à macOS Mojave, en 2018. Le communiqué de presse d’Apple du 4 juin 2018 disait : « New data protections require apps to get user permission before using the Mac camera and microphone or accessing personal data like user Mail history and Messages database. » (de nouvelles protections des données obligent les apps à obtenir l’autorisation de l’utilisateur avant d’utiliser la caméra et le micro du Mac ou d’accéder à des données personnelles comme l’historique de Mail et la base de données de Messages.)40 Les notes de version de Mojave 10.14, toujours en ligne, emploient le nom Application Data, qu’un développeur sur les forums d’Apple présentait en août 2018 comme le nom utilisé dans les bêtas précédentes :35 « Apps can’t access protected storage unless they’re added to the Application Data category located in the Privacy tab of System Preferences > Security & Privacy. » (les apps ne peuvent accéder au stockage protégé que si elles sont ajoutées à la catégorie Application Data de l’onglet Confidentialité de Préférences Système > Sécurité et confidentialité.)41 La charge utile de gestion des appareils et sa clé SystemPolicyAllFiles sont marquées comme introduites dans macOS 10.14, et le message de l’ingénieur du support d’Apple indique « Full Disk Access (macOS 10.14 and later) ».3620
Une page d’Apple donne une autre date. Apple Platform Security indique : « In macOS 10.13 or later, apps that require access to the full storage device need to be explicitly added in System Settings (macOS 13 or later) or System Preferences (macOS 12 or earlier). » (à partir de macOS 10.13, les apps qui ont besoin d’accéder à l’ensemble du périphérique de stockage doivent être ajoutées explicitement dans les Réglages Système sous macOS 13 et ultérieur, ou dans les Préférences Système sous macOS 12 et antérieur.)10 Toutes les autres sources d’Apple que j’ai lues disent 10.14. Je rapporte la contradiction sans trancher.
Catalina (10.15, sorti le 7 octobre 2019) a élargi le périmètre protégé. Son communiqué disait « new data protections require all apps to get permission before accessing user documents » (de nouvelles protections des données obligent toutes les apps à obtenir une autorisation avant d’accéder aux documents de l’utilisateur), et à la WWDC19, Apple a ajouté les dossiers Bureau, Documents et Téléchargements, iCloud Drive, le stockage en nuage tiers, les volumes amovibles et les volumes réseau à la liste des emplacements soumis à consentement, en précisant que « the universe of data that requires preapproval for Full Disk Access has been expanded to include trash. » (l’ensemble des données qui exigent une approbation préalable pour l’accès complet au disque a été étendu à la corbeille.)4211 Des versions ultérieures ont ajouté la protection des conteneurs d’app (macOS 14) et celle des conteneurs de groupe d’apps (macOS 15), qui concernent toutes deux la lecture des données d’autres apps ; pour la première, Apple a précisé que les détenteurs de l’accès complet au disque ne verraient aucune demande supplémentaire.2012
macOS 27 est allé une fois de plus dans le même sens. Ses notes de version indiquent que l’accès aux « other developer teams’ app data containers and app group containers no longer prompts the user for authorization; such accesses are denied by default and can be managed by the user in Privacy & Security settings » (conteneurs de données d’app et de groupe d’apps d’autres équipes de développement ne sollicite plus l’utilisateur ; ces accès sont refusés par défaut et l’utilisateur peut les gérer dans Confidentialité et sécurité), que « XProtect may now restrict access to app data that is commonly targeted by malicious software » (XProtect peut désormais restreindre l’accès aux données d’app couramment visées par les logiciels malveillants) et, sous TCC, « Apps can no longer access the local TCC database directly. » (les apps ne peuvent plus accéder directement à la base TCC locale.)23 Dans un problème connu, les notes d’Apple recommandent elles-mêmes l’accès complet au disque comme solution d’attente : lorsqu’un processus sans bundle ID ne peut pas recevoir l’accès au conteneur d’une autre équipe, « Workaround: Consider if the access is necessary. If required, grant Full Disk Access to the process for the duration of the requirement. » (contournement : demandez-vous si l’accès est nécessaire ; si oui, accordez l’accès complet au disque au processus le temps du besoin.)23 L’article sur les notes de version de macOS 27 et l’article sur l’accès aux conteneurs d’autres équipes traitent ces changements en détail.
3. Comment un agent l’obtient
Un agent IA peut, sur un Mac, finir par lire ce que protège l’accès complet au disque de deux façons. Soit il s’exécute dans une app qui détient l’autorisation, soit il est lui-même une app qui la détient. La première est celle par laquelle la plupart des agents en ligne de commande l’obtiennent, et personne n’a rien à cliquer pour l’agent lui-même.
La voie du terminal
Quand vous tapez claude ou codex dans un terminal, macOS ne demande pas si Claude Code ou Codex peuvent lire vos Messages. Il demande si le terminal le peut. Apple appelle le programme vérifié le programme « responsible » (responsable), et dans aucune documentation Apple que j’ai trouvée la règle qui le désigne n’est énoncée de façon générale. Ce qu’Apple a publié, c’est une série d’affirmations ponctuelles qui vont toutes dans le même sens :
eslogger(1), livré avec macOS 27 : « eslogger requires the responsible process to have been authorized for Full Disk Access » (eslogger exige que le processus responsable ait été autorisé pour l’accès complet au disque) et « Running eslogger from an app, including Terminal.app or a third-party terminal emulator, requires the respective app to be authorized for Full Disk Access in System Preferences > Security & Privacy > Privacy > Full Disk Access. » (exécuter eslogger depuis une app, y compris Terminal.app ou un émulateur de terminal tiers, exige que cette app soit autorisée pour l’accès complet au disque dans System Preferences > Security & Privacy > Privacy > Full Disk Access.)2tmutil(8): « Full Disk Access privileges can be granted to the Terminal application used to run tmutil from the Privacy tab in the Security & Privacy preference pane. » (les privilèges d’accès complet au disque peuvent être accordés à l’application Terminal qui exécute tmutil, depuis l’onglet Confidentialité du panneau Sécurité et confidentialité.)43fdesetup(8): depuis macOS 10.15, activer FileVault en ligne de commande exige, parmi d’autres options, que « The responsible application is authorized for » (l’application responsable soit autorisée pour) l’accès complet au disque.44- La référence de gestion des appareils d’Apple : « Helper tools embedded within an application bundle automatically inherit the permissions of their enclosing app bundle. » (les outils auxiliaires intégrés à un bundle d’application héritent automatiquement des autorisations du bundle qui les contient.)37
L’affirmation la plus directe vient de Quinn, ingénieur d’Apple Developer Technical Support, qui répondait en juin 2024 dans un fil de forum sur les outils en ligne de commande et l’accès complet au disque. C’est un message d’employé sur le site d’Apple, pas de la documentation, et je le signale comme tel chaque fois que je l’utilise. Il énumère quatre cas. Pour un outil lancé par l’utilisateur depuis Terminal : « The tool’s responsible code is Terminal. » (le code responsable de l’outil, c’est Terminal.) Pour un outil lancé via SSH : « The tool’s responsible code is the SSH server. » (le code responsable de l’outil, c’est le serveur SSH.) Pour un auxiliaire lancé par une app : « The system treats the app as the responsible code. » (le système traite l’app comme le code responsable.) Pour une tâche launchd, l’installer via SMAppService fait de l’app le code responsable ; sinon, écrit-il, la liste de propriétés de la tâche doit désigner l’app avec AssociatedBundleIdentifiers.3 Dans le même fil, il ajoute la réserve qui compte pour quiconque voudrait bâtir là-dessus : « The exact algorithm it uses for this is not documented, has changed in the past, and may well change in the future. » (l’algorithme exact utilisé n’est pas documenté, a changé par le passé et pourrait bien changer à l’avenir.)3 Interrogé dans un autre fil pour savoir si TCC « is looking for parent process rights » (regarde les droits du processus parent), il a refusé d’entrer dans le détail parce que c’est « both complex and subject to change » (à la fois complexe et susceptible de changer).45
Le développeur qui avait ouvert le fil de juin 2024 avait déjà mesuré l’effet : « When this program is built and executed in Terminal.app with Terminal having FDA, the file opens successfully. Conversely, when FDA is revoked from Terminal and granted to the program, an error occurs due to insufficient privileges. » (quand ce programme est compilé et exécuté dans Terminal.app alors que Terminal dispose de l’accès complet au disque, le fichier s’ouvre ; à l’inverse, quand on retire cet accès à Terminal pour l’accorder au programme, une erreur survient faute de privilèges suffisants.)3 C’est le compte rendu d’un développeur, pas d’Apple. Sa première moitié concorde avec ce que j’ai mesuré sur mon propre Mac (section 5) : la lecture a fonctionné avec l’autorisation présente dans la chaîne de lancement du terminal. Je n’ai pas testé la seconde moitié ; mon contrôle changeait l’endroit d’où la lecture était lancée, pas l’app qui détenait l’autorisation.
Deux conséquences en découlent, et aucune n’est propre aux agents.
Tout ce que vous lancez dans ce terminal en bénéficie. L’agent, le shell qu’il lance, git, npm install, un exécuteur de tests, un serveur MCP lancé en stdio, un script que le modèle a écrit il y a une minute : s’ils s’exécutent sous le terminal, c’est le terminal que vérifie TCC. L’ingénieur du support d’Apple le dit directement à propos des interpréteurs : « if you have a script that needs to manipulate files on your desktop, you wouldn’t want to give the interpreter that privilege because then any script could do that. » (si vous avez un script qui doit manipuler des fichiers sur votre bureau, vous ne voulez pas donner ce privilège à l’interpréteur, car alors n’importe quel script le pourrait.)20 Un terminal doté de l’accès complet au disque, c’est le même problème un niveau plus haut.
D’autres apps peuvent l’emprunter. En 2022, Jeff Johnson a publié « Every unsandboxed app has Full Disk Access if Terminal does » (toute app hors bac à sable a l’accès complet au disque si Terminal l’a), avec le code source. Son propos : « unsandboxed apps can open executable shell scripts in Terminal, and those scripts will execute with the permissions not of the opening app but rather with the permissions of Terminal, i.e. Full Disk Access. » (les apps hors bac à sable peuvent ouvrir des scripts shell exécutables dans Terminal, et ces scripts s’exécutent non pas avec les autorisations de l’app qui les ouvre, mais avec celles de Terminal, c’est-à-dire l’accès complet au disque.) La technique, note-t-il, « doesn’t work for sandboxed apps. » (ne fonctionne pas pour les apps en bac à sable.)46 Toutes les apps d’agent de bureau que j’ai examinées sur mon Mac sont hors bac à sable : l’app Claude et Cursor ne portent aucun entitlement App Sandbox, et l’app ChatGPT le porte avec la valeur false.47 Ma lecture, et non l’affirmation de Johnson : sur un Mac dont le terminal détient l’accès complet au disque, n’importe laquelle de ces apps pourrait l’atteindre de la même manière.
Que disent les terminaux eux-mêmes ? Je n’ai trouvé aucune documentation de Ghostty ou d’iTerm2 qui précise ce que reçoivent les processus enfants quand le terminal détient l’accès complet au disque : des recherches de code sur GitHub dans la documentation de Ghostty et le dépôt d’iTerm2 n’ont rien donné pour cette expression. Je n’ai pas cherché de la même façon dans la documentation du Terminal d’Apple ni dans celle de Warp.48 Ce que montrent les apps, c’est au nom de qui elles parlent. Leurs chaînes de justification, lues dans les apps installées sur mon Mac, sont rédigées au nom de ce qui s’exécute en elles : la demande AppleScript de Ghostty indique « A program running within Ghostty would like to use AppleScript » (un programme qui s’exécute dans Ghostty souhaite utiliser AppleScript), celle d’iTerm2 « An application in iTerm2 wants to use AppleScript. » (une application dans iTerm2 veut utiliser AppleScript.)47 macOS n’a pas de chaîne de justification pour l’accès complet au disque, puisque les apps ne peuvent pas le demander, mais ces chaînes révèlent la conception : le terminal est l’app au sujet de laquelle on interroge l’utilisateur.
Les éditeurs de code dotés d’agents intégrés fonctionnent de la même façon, un cran à côté. La documentation de Cursor indique « Cursor runs shell commands directly in your terminal » (Cursor exécute les commandes shell directement dans votre terminal), ce que je lis, dans l’éditeur, comme le terminal intégré de Cursor.49 D’après le cas de l’auxiliaire décrit par l’ingénieur du support plus haut (un outil lancé par une app est imputé à l’app), Cursor est alors l’app que TCC voit pour ces commandes. C’est mon inférence ; la documentation de Cursor ne dit pas à quelle app TCC les impute.318
La voie SSH
Si vous pilotez un agent via SSH, le code responsable n’est pas le terminal à l’autre bout, c’est le serveur SSH. L’ingénieur du support d’Apple : « The tool’s responsible code is the SSH server. You can set Full Disk Access on that using System Settings > General > Sharing > Remote Login > Allow full disk access for remote users. » (le code responsable de l’outil, c’est le serveur SSH ; vous pouvez lui accorder l’accès complet au disque dans Réglages Système > Général > Partage > Session à distance > Autoriser l’accès complet au disque pour les utilisateurs distants.)3 La page de manuel de eslogger nomme le même réglage.2 Le guide d’installation d’OpenClaw montre le client côté SSH tel qu’il apparaît dans TCC, /usr/libexec/sshd-keygen-wrapper, et ce client précis figure dans la liste de l’accès complet au disque sur mon Mac.1419
Ce que vous demandent les éditeurs d’agents
Deux projets d’agents demandent aux utilisateurs, dans leur propre documentation, d’accorder l’accès complet au disque pour que l’agent puisse lire Messages :
- Hermes Agent (Nous Research). La compétence Apple iMessage est indiquée comme « Bundled (installed by default) » (fournie, installée par défaut), et ses prérequis disent « Grant Full Disk Access for terminal (System Settings → Privacy → Full Disk Access) » (accorder l’accès complet au disque au terminal) et « Grant Automation permission for Messages.app when prompted » (accorder l’autorisation d’automatisation pour Messages.app lorsqu’elle est demandée).13 C’est une consigne de l’éditeur qui revient à donner l’accès complet au disque au terminal, et donc à tout ce qui s’y exécute. Le guide Hermes couvre le reste de l’agent.
- OpenClaw. Sa configuration iMessage indique « Full Disk Access is required for the process context running OpenClaw/
imsg» (l’accès complet au disque est requis pour le contexte de processus qui exécute OpenClaw/imsg), pour la base de données de Messages, « Automation permission is required to send messages through Messages.app » (l’autorisation d’automatisation est requise pour envoyer des messages via Messages.app) et « Permissions are granted per process context. » (les autorisations sont accordées par contexte de processus.)14 La même page précise que pour les actions avancées comme les réactions, les modifications et l’annulation d’envoi, « System Integrity Protection must be disabled » (la protection de l’intégrité du système doit être désactivée), tandis que l’envoi et la réception de base fonctionnent sans cela.14 La page d’OpenClaw sur les autorisations macOS donne la même règle pour les dossiers Bureau, Documents et Téléchargements : « grant access to the same process context that performs file operations (for example Terminal/iTerm, LaunchAgent-launched app, or SSH process). » (accorder l’accès au contexte de processus qui effectue les opérations sur les fichiers, par exemple Terminal/iTerm, une app lancée par un LaunchAgent ou un processus SSH.)50
Anthropic documente un cas plus étroit. Les sessions en arrière-plan de Claude Code, d’après sa documentation sur la vue des agents, s’exécutent dans un processus hôte qui « requests access to protected folders separately from your terminal » (demande l’accès aux dossiers protégés séparément de votre terminal), et si une session en arrière-plan signale « Operation not permitted » sur un emplacement protégé, la solution consiste à « grant access in System Settings under Privacy & Security > Files and Folders, or enable Full Disk Access for the entry. » (accorder l’accès dans Réglages Système, sous Confidentialité et sécurité > Fichiers et dossiers, ou activer l’accès complet au disque pour l’entrée.) Avec l’installateur natif, précise-t-elle, « the entry appears as Claude Code and the grant persists across updates. » (l’entrée apparaît sous le nom Claude Code et l’autorisation persiste d’une mise à jour à l’autre.)51 Pour l’utilisation de l’ordinateur, Anthropic demande aux utilisateurs de vérifier, sous Enregistrement de l’écran, que « your terminal app is listed and enabled » (votre app de terminal est listée et activée), ce qui est encore la voie du terminal, pour une autre autorisation.52 Aucune des pages d’Anthropic sur le bac à sable, les autorisations ou la sécurité ne mentionne l’accès complet au disque.1553
La voie des apps de bureau
Les apps d’agent de bureau ont leurs propres lignes dans Confidentialité et sécurité, et ce qu’elles demandent varie :
- ChatGPT pour Mac (sur mon Mac, son bundle ID est
com.openai.codex). Le 20 août 2026, OpenAI a ajouté un plugin Apple Messages : « On Apple silicon Macs, the Apple Messages plugin in the ChatGPT desktop app can read and search iMessage, SMS, and RCS conversations and prepare or send messages through Messages. » (sur les Mac à puce Apple, le plugin Apple Messages de l’app de bureau ChatGPT peut lire et rechercher les conversations iMessage, SMS et RCS, et préparer ou envoyer des messages via Messages.)54 Le guide des plugins d’OpenAI dit seulement « Grant the requested macOS permissions before ChatGPT reads Messages. » (accordez les autorisations macOS demandées avant que ChatGPT ne lise Messages.)22 Je n’ai trouvé aucune page d’OpenAI qui nomme l’autorisation. MacRumors, en rapportant le lancement, écrivait : « For the Messages integration to work, ChatGPT needs Full Disk Access in System Settings, as well as access to contact names and automation tools » (pour que l’intégration Messages fonctionne, ChatGPT a besoin de l’accès complet au disque dans les Réglages Système, ainsi que de l’accès aux noms des contacts et aux outils d’automatisation) ; c’est de la presse, utilisée ici comme piste, pas comme déclaration d’OpenAI.55 Sur mon Mac, l’app ChatGPT figure dans la table de l’accès complet au disque.19 Le guide d’OpenAI contient aussi l’avertissement que je placerais en premier : « Persistent approval removes your final chance to review a message before ChatGPT sends it as you. » (l’approbation permanente vous retire votre dernière occasion de relire un message avant que ChatGPT ne l’envoie en votre nom.)22 Pour Computer Use, OpenAI demande l’Enregistrement de l’écran et l’Accessibilité, et précise « File reads, file edits, and shell commands still follow the sandbox and approval settings for the task. » (la lecture et la modification de fichiers ainsi que les commandes shell restent soumises aux réglages de bac à sable et d’approbation de la tâche.)56 - Claude pour Mac. Je n’ai trouvé aucune page d’Anthropic demandant l’accès complet au disque. L’Info.plist de l’app sur mon Mac déclare des chaînes de justification pour les dossiers Bureau, Documents et Téléchargements et pour les Apple Events, entre autres (« Claude needs this so commands you run in Claude can control other apps », c’est-à-dire pour que les commandes lancées dans Claude puissent contrôler d’autres apps).47 Sa fonction de saisie rapide demande l’Enregistrement de l’écran et l’Accessibilité.57
- Cursor. Aucune des deux pages de Cursor que j’ai enregistrées, Run Modes et Terminal, ne demande l’accès complet au disque ; Cursor figure dans la table sur mon Mac.191849
- Computer Use de Hermes Agent. L’Accessibilité et l’Enregistrement de l’écran vont à l’identité que désigne
hermes computer-use doctor, une app pilote distincte, et non au terminal.58 - VS Code avec des agents. Non installé sur mon Mac ; je n’ai trouvé aucune page de Microsoft sur l’accès complet au disque pour ses agents.4759
Les agents par voie d’accès
| Agent | Comment il atteint les données protégées | Accès complet au disque dans la documentation de l’éditeur | Bac à sable de l’éditeur sous macOS, par défaut |
|---|---|---|---|
| Claude Code (CLI) | Voie du terminal ; l’hôte d’arrière-plan peut avoir sa propre entrée | Seulement la note sur les sessions en arrière-plan | Seatbelt ; désactivé par défaut |
| Codex CLI | Voie du terminal | Rien trouvé | Seatbelt ; activé, workspace-write, réseau coupé |
| ChatGPT pour Mac (Codex, Work, Messages, Computer Use) | Ses propres entrées | « Requested macOS permissions » ; accès complet au disque nommé seulement par la presse | Bac à sable et politique d’approbation de Codex pour les étapes de plugin et de shell ; Messages et Computer Use exigent aussi des autorisations macOS |
| Claude pour Mac | Ses propres entrées | Rien trouvé | Non documenté pour les actions locales dans les pages que j’ai lues |
| Hermes Agent | Voie du terminal | Oui : l’accorder au terminal pour iMessage | Pas de backend Seatbelt ; local, « no isolation », par défaut |
| OpenClaw | Le contexte de processus de la passerelle | Oui : requis pour le canal iMessage | Backends de bac à sable pour les outils (Docker par défaut) ; désactivé par défaut |
| Gemini CLI | Voie du terminal | Rien trouvé | Profils Seatbelt ; désactivé sauf activation |
| Aider | Voie du terminal | Rien trouvé | Aucun documenté |
| Cursor (agent et CLI) | Éditeur : le terminal de Cursor, donc Cursor ; CLI : voie du terminal | Rien trouvé | Seatbelt ; lectures hors de l’espace de travail autorisées par défaut |
| Agents de VS Code | Le terminal de l’éditeur, donc VS Code | Rien trouvé | Bac à sable Agent Host (sessions Copilot Agent Host uniquement) ; désactivé par défaut |
Les sources de chaque cellule figurent dans les sections 3 et 4.51166022561361146217481859 Les entrées de la deuxième colonne pour les deux éditeurs de code sont mon inférence à partir du cas de l’auxiliaire décrit par l’ingénieur du support, et non des déclarations des éditeurs. C’est la troisième colonne qui révèle le schéma. Les deux éditeurs qui nomment l’accès complet au disque le font pour atteindre Messages, les données dont l’exposition touche aussi, selon Apple, « the people users are communicating with » (les personnes avec lesquelles les utilisateurs communiquent) ; Apple ne nomme aucun agent, et je ne prétends pas qu’elle visait ces deux-là. Tous les autres agents en ligne de commande atteignent les mêmes données, quand ils le font, sans que leur documentation dise que l’autorisation du terminal leur est transmise, parce que l’autorisation appartient au terminal.
4. Ce que font les bacs à sable des éditeurs, et ce qu’ils ne peuvent pas faire
Deux couches qui s’ignorent
Tous les agents en ligne de commande dont j’ai lu la documentation de bac à sable pour macOS le construisent sur Seatbelt, le bac à sable de processus du système, piloté par sandbox-exec : Claude Code (« sandboxing uses the built-in Seatbelt framework », le bac à sable s’appuie sur le framework Seatbelt intégré), Codex (« On macOS, sandboxing works out of the box using the built-in Seatbelt framework », sous macOS, le bac à sable fonctionne d’emblée grâce au framework Seatbelt intégré), Gemini CLI (« Lightweight, built-in sandboxing using » sandbox-exec, un bac à sable léger et intégré qui utilise sandbox-exec) et Cursor (« Cursor uses Seatbelt through » sandbox-exec, Cursor utilise Seatbelt via sandbox-exec).15161718 L’accès complet au disque, c’est TCC. L’ingénieur du support d’Apple décrit le rapport entre les deux : « App Sandbox and the mandatory access control system are both implemented using macOS’s sandboxing infrastructure » (App Sandbox et le système de contrôle d’accès obligatoire reposent tous deux sur l’infrastructure de bac à sable de macOS), mais le contrôle d’accès obligatoire « is mandatory; it’s not an opt-in like the App Sandbox. » (est obligatoire ; ce n’est pas une option à activer comme l’App Sandbox.)20
Ce que cela signifie en pratique comporte deux moitiés. Qu’un profil Seatbelt ne puisse pas donner à un processus une autorisation TCC dont son app responsable est dépourvue découle de la description de l’ingénieur du support d’Apple, selon laquelle tous les processus, « including those running as root » (y compris ceux qui s’exécutent en root), sont soumis au MAC ; je ne l’ai pas testé. L’autre moitié, je l’ai mesurée sur mon Mac à la section 5 : aucun bac à sable n’a modifié l’autorisation du terminal, et un profil n’a bloqué la lecture protégée que lorsqu’il interdisait lui-même ce chemin, de son propre chef et alors que TCC aurait autorisé la lecture.205 Un agent en bac à sable dans un terminal doté de l’accès complet au disque peut donc toujours lire Messages si son profil autorise les lectures à cet endroit, et la plupart des profils par défaut autorisent les lectures presque partout.
Un piège de vocabulaire : le code source de Codex contient une fonction nommée has_full_disk_read_access, et lorsqu’elle renvoie true et qu’aucune racine illisible n’est configurée, le profil Seatbelt généré autorise file-read* partout ; avec de telles racines, il construit une politique de lecture qui les exclut.63 C’est le terme propre à Codex pour une politique de lecture Seatbelt étendue. Ce n’est pas l’accès complet au disque d’Apple, et cela ne l’accorde pas.
Claude Code (Anthropic)
- Bac à sable : désactivé par défaut. « The sandbox is off by default. To turn it on, run /sandbox in a session, as Get started shows, or set sandbox.enabled to true in a settings file. » (le bac à sable est désactivé par défaut ; pour l’activer, lancez /sandbox dans une session, comme le montre Get started, ou réglez sandbox.enabled sur true dans un fichier de réglages.)15
- Valeurs par défaut une fois activé. Les écritures vont vers « The working directory, a per-user temp directory, and directories you’ve added. » (le répertoire de travail, un répertoire temporaire propre à l’utilisateur et les répertoires que vous avez ajoutés.) Les lectures couvrent « Most of the machine, including credential files. » (l’essentiel de la machine, y compris les fichiers d’identifiants.) Le réseau n’a « No direct route out » (aucune sortie directe) ; les connexions passent par un proxy local dont les domaines autorisés « start empty » (sont vides au départ).15 Le bac à sable repose sur « the open source @anthropic-ai/sandbox-runtime package » (le paquet open source @anthropic-ai/sandbox-runtime).15
- Deux modes de bac à sable. Auto-allow et autorisations classiques ; « In both, the sandbox enforces the same filesystem and network restrictions; the difference is only in whether sandboxed commands are auto-approved or require explicit permission. » (dans les deux, le bac à sable applique les mêmes restrictions sur le système de fichiers et le réseau ; la seule différence est de savoir si les commandes en bac à sable sont approuvées automatiquement ou exigent une autorisation explicite.)15
- Ce qui reste en dehors. Les outils intégrés de fichiers et de web « follow permission rules instead. A denyRead entry doesn’t stop the Read tool » (suivent plutôt les règles d’autorisation ; une entrée denyRead n’arrête pas l’outil Read), et « command hooks, local MCP servers, plugin monitors, LSP servers, and helper commands such as your status line command and apiKeyHelper run with your full access. » (les hooks de commande, les serveurs MCP locaux, les moniteurs de plugins, les serveurs LSP et les commandes auxiliaires comme votre commande de ligne d’état et apiKeyHelper s’exécutent avec tous vos droits.)15 Les commandes en échec peuvent être relancées hors du bac à sable, sauf si
allowUnsandboxedCommandsvaut false.15 - Restreindre les lectures.
sandbox.filesystem.denyReadetallowRead, ou, pour « deny sandboxed commands read access to home directories and mounted volumes while keeping the working directories readable, set permissions.blockReadsOutsideWorkingDirectories. » (refuser aux commandes en bac à sable la lecture des répertoires personnels et des volumes montés tout en laissant les répertoires de travail lisibles, réglez permissions.blockReadsOutsideWorkingDirectories.)15 - Apple Events. « The sandbox blocks Apple Events by default » (le bac à sable bloque les Apple Events par défaut), et activer
allowAppleEvents« removes code-execution isolation. » (supprime l’isolation de l’exécution de code.)15 - Modes d’autorisation, un contrôle distinct :
default(libellé Manual),acceptEdits,plan,auto,dontAsketbypassPermissions. À propos du dernier, Anthropic écrit : « Only use this mode in isolated environments like containers or VMs where Claude Code can’t cause damage. » (n’utilisez ce mode que dans des environnements isolés comme des conteneurs ou des VM où Claude Code ne peut pas causer de dégâts.)53
Le guide Claude Code présente les fichiers de réglages où se trouvent ces clés.
Codex CLI (OpenAI)
- Bac à sable : activé par défaut. « The default permissions mode applies sandboxing automatically » (le mode d’autorisation par défaut applique automatiquement le bac à sable), et « The sandbox applies to spawned commands, not just to built-in file operations. » (le bac à sable s’applique aux commandes lancées, pas seulement aux opérations de fichiers intégrées.)16
- Trois modes.
read-only: « The agent can inspect files, but it can’t edit files or run commands without approval. » (l’agent peut examiner les fichiers, mais ne peut ni les modifier ni lancer de commandes sans approbation.)workspace-write: l’agent peut « read files, edit within the workspace, and run routine local commands inside that boundary. This is the default low-friction mode for local work. » (lire des fichiers, modifier dans l’espace de travail et lancer des commandes locales courantes dans cette limite ; c’est le mode par défaut, à faible friction, pour le travail local.)danger-full-access: « The agent runs without sandbox restrictions. » (l’agent s’exécute sans les restrictions du bac à sable.)16 - Réseau coupé par défaut. « By default, the agent runs with network access turned off » (par défaut, l’agent s’exécute sans accès réseau), et workspace-write « keeps network access turned off unless you enable it in your configuration. » (laisse l’accès réseau coupé, sauf si vous l’activez dans votre configuration.)60
- Accès complet. OpenAI le définit comme
sandbox_mode = "danger-full-access"associé àapproval_policy = "never", et le menu de l’app de bureau le décrit comme un accès sans restriction à « the internet and any file on your computer. » (internet et à tout fichier de votre ordinateur.)16 - Les lectures ne sont pas détaillées dans la documentation. La seule indication de périmètre d’OpenAI est que le bac à sable « limits what it can touch (typically to the current workspace). » (limite ce qu’il peut toucher, généralement à l’espace de travail courant.)60 Elle ne donne pas le périmètre de lecture de
read-onlyni deworkspace-write, et sur mon Mac, l’exécution 2 (read-only) et l’exécution 2c (ma configuration, aucun mode défini) ont lu un fichier très éloigné de l’espace de travail, un fichier qui exige l’accès complet au disque.5 Le code source montre pourquoi : la politique Seatbelt de base commence par(deny default)et note que « child processes inherit the policy of their parent » (les processus enfants héritent de la politique de leur parent), et avec un accès en lecture complet et sans racine illisible, le profil ajoute(allow file-read*).63 Il existe des moyens de restreindre : les profils d’autorisation acceptent"read","write"ou"deny"par chemin, et les administrateurs disposent depermissions.filesystem.deny_readdansrequirements.toml, des « Admin-enforced filesystem read denials » (interdictions de lecture du système de fichiers imposées par l’administrateur) ; OpenAI précise que « users cannot weaken them with local config. » (les utilisateurs ne peuvent pas les affaiblir par une configuration locale.)21
Le guide Codex traite en détail les profils et les politiques d’approbation.
Hermes Agent (Nous Research)
- Pas de bac à sable macOS ; sept backends. « Hermes supports seven terminal backends » (Hermes prend en charge sept backends de terminal) :
local,docker,ssh,modal,daytona,vercel_sandboxetsingularity.61 - Par défaut : local, sans isolation. « The default. Commands run directly on your machine with no isolation » (la valeur par défaut ; les commandes s’exécutent directement sur votre machine, sans isolation), et « By default, local tool subprocesses keep your real OS-user HOME. » (par défaut, les sous-processus locaux des outils conservent le vrai HOME de votre utilisateur système.)61
- Des règles de commandes ne sont pas un bac à sable. « Deny rules are a shell-command policy, not a complete shell interpreter or an OS capability sandbox. » (les règles d’interdiction sont une politique de commandes shell, pas un interpréteur shell complet ni un bac à sable des capacités du système.)64
- Les conteneurs sont la frontière. « For production gateway deployments, use docker, modal, daytona, or vercel_sandbox backend to isolate agent commands from your host system. » (pour les déploiements de passerelle en production, utilisez le backend docker, modal, daytona ou vercel_sandbox afin d’isoler les commandes de l’agent de votre système hôte.)64
Avec le backend par défaut, un agent Hermes lit tout ce que son terminal peut lire, et sa compétence iMessage fournie vous demande de donner l’accès complet au disque à ce terminal.13
OpenClaw
- Bac à sable : désactivé par défaut, et seulement pour les outils. « Sandboxing is off by default » (le bac à sable est désactivé par défaut), et « The Gateway process always stays on the host; only tool execution moves into the sandbox when enabled. » (le processus de la passerelle reste toujours sur l’hôte ; seule l’exécution des outils passe dans le bac à sable lorsqu’il est activé.) OpenClaw le dit franchement : « This is not a perfect security boundary, but it materially limits filesystem and process access when the model does something dumb. » (ce n’est pas une frontière de sécurité parfaite, mais cela limite sensiblement l’accès au système de fichiers et aux processus quand le modèle fait une bêtise.)62
- Modes.
agents.defaults.sandbox.modeaccepteoff(par défaut),non-mainouall; le backend estdockerpar défaut, avecpodman,ssh,openshelletcrabboxcomme alternatives ; le réseau de Docker vaut none par défaut.65 - Accès à l’espace de travail.
none(par défaut),roourw.66 - Échappatoire.
tools.elevatedest, selon les termes d’OpenClaw, « an explicit escape hatch » (une échappatoire explicite) qui exécuteexechors du bac à sable.62
L’accès complet au disque du canal iMessage appartient au contexte de processus de la passerelle, qui ne passe jamais dans le bac à sable.1462
Les autres, en bref
- Gemini CLI. Désactivé sauf activation par
-s, une variable d’environnement ou un réglage. Sous macOS, le profil Seatbelt par défaut,permissive-open, « denies operations by default; confines writes to the project directory while allowing broad file reads and network access » (refuse les opérations par défaut et cantonne les écritures au répertoire du projet tout en autorisant de larges lectures de fichiers et l’accès réseau) ; le fichier de profil lui-même contient(allow file-read*).strict-openetstrict-proxiedajoutent des restrictions de lecture.17 - Cursor. Seatbelt pour « the full subprocess tree » (toute l’arborescence des sous-processus) ; réseau « Blocked by default » (bloqué par défaut) ; mais Read Access vaut System par défaut : « The agent can read files outside the workspace without approval. This is the default. » (l’agent peut lire des fichiers hors de l’espace de travail sans approbation ; c’est le comportement par défaut.) Le réglage Read Access lui-même exige Cursor 3.23 ou ultérieur.18
- VS Code.
chat.agent.sandbox.enabled, qui ne s’applique qu’aux sessions Copilot Agent Host, accepteoffouonet vautoffpar défaut, et Microsoft en énonce clairement la limite : « Sandboxing is not a virtual machine or user-account boundary, and it does not replace endpoint security. » (le bac à sable n’est ni une machine virtuelle ni une frontière entre comptes utilisateur, et il ne remplace pas la sécurité des terminaux.)59 - Aider. Aucun bac à sable documenté.48
La couche Seatbelt a eu ses failles, elle aussi
Des chercheurs d’Accomplish ont publié cinq évasions de bac à sable visant des outils d’agents, dans quatre comptes rendus datés du 23 juillet au 15 septembre 2026. Quatre ont été corrigées avant publication ; la cinquième a été signalée à Anthropic et close comme « Informative » (informative). Contre Claude Code, avec le bac à sable activé et le mode d’autorisation le plus strict, une commande provenant d’un dépôt « ran on our Mac anyway, outside the sandbox, with no permission prompt » (s’est exécutée sur notre Mac malgré tout, hors du bac à sable, sans demande d’autorisation) ; Anthropic l’a corrigée dans la 2.1.247.67 Contre la CLI de Cursor, la même cause profonde : « the Seatbelt profile wraps only the shell tool, while the harness’s own internal git runs unsandboxed and honors repository-supplied core.fsmonitor hooks. » (le profil Seatbelt n’enveloppe que l’outil shell, tandis que le git interne du harnais s’exécute hors bac à sable et exécute les hooks core.fsmonitor fournis par le dépôt.)68 Contre Codex, deux évasions signalées le 12 août 2026, « Both were fixed inside of eight days » (toutes deux corrigées en moins de huit jours) ; dans l’une, « launchd starts the application unsandboxed, outside Codex’s process tree. » (launchd lance l’application hors bac à sable, en dehors de l’arborescence de processus de Codex.)69 Contre la VM de Claude Cowork, une évasion vers un montage en lecture-écriture de l’hôte, depuis lequel l’attaque « reads and writes the host Mac’s filesystem directly, as the logged-in desktop user. » (lit et écrit directement le système de fichiers du Mac hôte, en tant qu’utilisateur connecté.)70 Aucun des quatre comptes rendus ne lit de données protégées par l’accès complet au disque. Ma lecture, et non l’affirmation des chercheurs : un processus qui s’échappe de Seatbelt mais reste dans la chaîne de lancement du terminal conserve les autorisations TCC du terminal, si bien que sur un Mac dont le terminal détient l’accès complet au disque, ce type d’évasion atteint aussi les données qu’il protège. Je n’ai trouvé aucun post-mortem, aucun avis de sécurité ni aucun compte rendu de chercheur décrivant un agent qui aurait lu Mail, Messages ou des données de navigateur grâce à une autorisation d’accès complet au disque contre la volonté de l’utilisateur.
5. Sur mon Mac : qui détient l’accès complet au disque, et comment je le sais
Tout ce qui figure dans cette section est ma propre mesure, sur mon propre Mac, effectuée le 11 octobre 2026 depuis une session Claude Code : macOS 27.0, build 26A428, protection de l’intégrité du système activée. Toutes les commandes sauf deux étaient en lecture seule : un test a soumis une tâche launchd, qui a écrit sa sortie dans deux fichiers, puis a retiré la tâche ; un autre a installé sandbox-runtime 0.0.79 d’Anthropic via npx -y pour l’exécuter, avec deux fichiers de réglages de test écrits pour ses exécutions. Les sondes d’écriture dans les bacs à sable étaient des tentatives, et les bacs à sable les ont refusées ; les sondes réseau étaient des tentatives qui ont échoué, pour une cause que l’enregistrement n’établit pas. Je n’ai modifié aucun réglage, ni accordé ni révoqué quoi que ce soit.195 Je décris ce que j’ai trouvé par noms d’apps et de services. Quand les éléments montrent qu’un programme figure dans la liste de l’accès complet au disque, je dis qu’il est listé ; je ne dis qu’il a l’accès que là où une lecture montre que l’accès fonctionne.
La chaîne de lancement de l’agent
Le shell dans lequel Claude Code exécute les commandes est un zsh, lancé par claude, lancé par mon shell de connexion, lancé par login, lancé par Ghostty, l’app de terminal ; l’environnement indique TERM_PROGRAM égal à ghostty.19 Selon la règle de l’ingénieur du support d’Apple, le code responsable de tout ce qui se trouve dans cette chaîne est Ghostty.3
Lire la liste
D’après mes vérifications, macOS ne documente aucune commande qui liste les détenteurs de l’accès complet au disque : tccutil n’a qu’une seule commande, reset.34 La liste se trouve dans les bases de données de TCC. Depuis le shell de l’agent, la base propre à l’utilisateur n’a pas pu être ouverte, et son dossier n’apparaissait pas dans un listage du dossier Application Support de l’utilisateur. Je ne sais pas pourquoi. Les notes de version de macOS 27 disent « Apps can no longer access the local TCC database directly » (les apps ne peuvent plus accéder directement à la base TCC locale), ce qui pourrait en être la raison, mais la note ne précise pas de quelle base il s’agit, je laisse donc la question sans explication.1923
La base de données à l’échelle du système s’est ouverte. J’ai sélectionné deux colonnes seulement, le service et le client, filtré sur le service de l’accès complet au disque, et je n’ai jamais lu la colonne qui indique si chaque interrupteur est activé. La requête a renvoyé 75 lignes.19 Le simple fait de pouvoir l’ouvrir est déjà un indice. En 2022, Jeff Johnson a montré que Terminal doté de l’accès complet au disque « can read or write any restricted files, including the TCC database itself » (peut lire ou écrire n’importe quel fichier restreint, y compris la base TCC elle-même) ; il l’a montré pour la base propre à l’utilisateur, et le test de contrôle ci-dessous montre la même chose pour la base système sur ce Mac.465 Cela signifie aussi que sous macOS 27.0, malgré la note de version citée plus haut, la base TCC système restait directement lisible par un processus dont la chaîne de lancement détenait l’autorisation.1923
J’ai trié les 75 lignes avec une règle par type, appliquées dans l’ordre : les trois bundle IDs de terminaux ; tout chemin de client menant à un binaire Claude Code numéroté par version ; les bundle IDs de ChatGPT, Cursor et Xcode ; tout chemin d’interpréteur node ou python3.x ; le client du serveur SSH ; tout client commençant par com.apple. ou /System/ ; mes propres builds de développement ; et tout le reste.1947 Ce que contient chaque groupe :
- Terminaux (3). Terminal, iTerm2 et Ghostty sont tous listés.
- Claude Code (30). Trente lignes distinctes, chacune étant le chemin d’une version du binaire Claude Code, de 2.1.177 à 2.1.296, la version utilisée par cette session.1947 Anthropic indique qu’avec l’installateur natif, l’entrée de l’hôte des sessions en arrière-plan « appears as Claude Code and the grant persists across updates. » (apparaît sous le nom Claude Code et l’autorisation persiste d’une mise à jour à l’autre.)51 Sur ce Mac, la base stocke une ligne par version. Je n’ai pas vérifié comment les Réglages Système les affichent ni si chaque interrupteur est activé. Ma lecture, non vérifiée : ce sont les demandes de l’hôte des sessions en arrière-plan, une par mise à jour.
- Hôtes d’agents (3). L’app ChatGPT (bundle ID
com.openai.codex), Cursor et Xcode.1947 Xcode a sa place ici parce que Xcode 27 héberge des agents : ses notes de version indiquent « Agents in Xcode can now be extended with plugins that contain skills, MCP servers, and ACP agent configurations » (les agents dans Xcode peuvent désormais être étendus par des plugins contenant des compétences, des serveurs MCP et des configurations d’agents ACP) et ajoutent la prise en charge de l’Agent Client Protocol.24 Que TCC impute à Xcode les processus que lancent ces agents n’est pas documenté, et Xcode ne se comporte peut-être pas comme un terminal. En 2024, l’ingénieur du support d’Apple, à qui l’on demandait pourquoi l’autorisation propre d’un outil n’était prise en compte que lorsque Xcode l’exécutait, a répondu que « Xcode runs the tool in a way that makes it clear to the system that Xcode is not the responsible code for this process » (Xcode exécute l’outil d’une manière qui indique clairement au système que Xcode n’est pas le code responsable de ce processus) ; en examinant la chaîne sous le débogueur de Xcode, il a écrit « I expect that one of these is breaking TCC’s responsible code search » (je pense que l’un d’eux interrompt la recherche du code responsable par TCC) et ajouté : « I suspect that’s deliberate. » (je soupçonne que c’est délibéré.)3 Xcode est donc listé et héberge des agents, mais pour les outils qu’il exécute, l’ingénieur d’Apple décrit l’inverse de la règle du terminal. - Interpréteurs (5). Un
nodeHomebrew et quatre interpréteurs Python Homebrew. L’ingénieur du support d’Apple met précisément en garde contre cela : donnez le privilège à l’interpréteur, « then any script could do that. » (et alors n’importe quel script le pourrait.)20 OpenClaw fait la même mise en garde à propos denodepour l’Accessibilité : il faut traiter une telle entrée « as broad permission for that Node runtime, not as permission for one npm package » (comme une autorisation large pour ce runtime Node, et non comme une autorisation pour un seul paquet npm).50 - SSH (1).
sshd-keygen-wrapper, le client côté serveur SSH, que je considère comme l’entrée que contrôle « Allow full disk access for remote users » (Autoriser l’accès complet au disque pour les utilisateurs distants).193 - Autres entrées Apple (3), mes propres builds (5), tout le reste (25). Le dernier groupe comprend des utilitaires de disque et de nettoyage, une suite de sécurité, des clients VPN et de stockage en nuage, des outils de mise à jour, des logiciels d’imprimante, des jeux, une app de visioconférence et une app de messagerie. Quelques-uns sont des utilitaires de disque, l’autre type de logiciel que cite Apple ; aucune des 75 n’est une app de sauvegarde.
Quarante-deux des 75 lignes sont quelque chose sous quoi ou via quoi un agent peut s’exécuter. Aucune n’est une app de sauvegarde.
Sept exécutions : le bac à sable et l’autorisation sont des couches distinctes
Pour voir quelle couche décide, j’ai exécuté une même sonde, la lecture d’une seule ligne de cette base système, dans différentes conditions, plus une sonde d’écriture dans les deux bacs à sable et une sonde réseau dans sandbox-runtime.5
- Le shell de l’agent, sans bac à sable. La lecture a renvoyé la ligne.
- Dans le bac à sable Seatbelt de Codex CLI 0.154.0, mode
read-only. La lecture a renvoyé la ligne. Le même bac à sable a refusé untouchhors de l’espace de travail avec « Operation not permitted » (exécution 2b), le bac à sable fonctionnait donc ; simplement, il n’y bloque pas les lectures. Avec ma propre configuration de Codex, qui ne définit aucun mode de bac à sable et active l’accès réseau, la lecture a aussi renvoyé la ligne (exécution 2c). - Dans sandbox-runtime 0.0.79 d’Anthropic, le paquet sur lequel repose le bac à sable de Claude Code, sans interdiction de lecture (exécution 3a) : la lecture a renvoyé la ligne, tandis que l’écriture hors du dossier autorisé était refusée et qu’une requête réseau échouait (
curlavec le code de sortie 56 ; l’enregistrement ne dit pas pourquoi). AvecdenyReadréglé sur le dossier TCC (exécution 3b), la lecture a échoué avec « authorization denied ». - Le contrôle. La même lecture
sqlite3, soumise comme tâche launchd, de sorte que ni Ghostty ni Claude Code ne figuraient nulle part dans sa chaîne de lancement : « authorization denied ».5
C’est le contrôle qui donne un sens au reste. Le fichier de la base appartient à root et ses permissions le rendent lisible par tous (-rw-r--r--), ce ne sont donc pas les permissions de fichier qui ont refusé l’exécution 4 ; c’est TCC.195 Même binaire, même fichier, même utilisateur : succès depuis le shell de l’agent, échec en dehors. Ce dont disposait le shell de l’agent, il le tenait de sa chaîne de lancement. La règle de l’ingénieur du support désigne le terminal comme code responsable de cette chaîne.3 Une réserve que ces données ne me permettent pas de lever : la chaîne contient aussi un processus claude, et des binaires Claude Code sont également listés ; lors des exécutions 3a et 3b, un processus node exécutait le runtime de bac à sable, et un node Homebrew est listé lui aussi, sans que soit consigné quel node npx a utilisé. Ma mesure montre que l’accès vient de la chaîne, et la règle de l’ingénieur du support dit que c’est le terminal ; elle ne prouve pas à elle seule que TCC a utilisé la ligne de Ghostty plutôt qu’une ligne de Claude Code ou de node. L’ingénieur du support d’Apple dit que l’algorithme n’est pas documenté.3
Les exécutions 3b et 4 affichent la même erreur, alors que ce sont des couches différentes qui les ont refusées. Un opérateur qui lit « authorization denied » dans la sortie d’un agent ne peut pas savoir, d’après le message, si c’est le bac à sable ou TCC qui a dit non.5
Essayez sur votre propre Mac
Depuis le shell qu’utilise votre agent, ceci affiche la liste de l’accès complet au disque lorsque la chaîne de lancement de ce shell détient l’accès complet au disque. Cela échoue avec « authorization denied » lorsque la chaîne ne le détient pas, ou lorsqu’une règle de bac à sable interdit le dossier, comme lors de l’exécution 3b. La commande lit deux colonnes et ne modifie rien. Les résultats sont des lignes, pas des états d’interrupteur.
# Run from the same terminal (or editor terminal) you run agents in.
sqlite3 -readonly "/Library/Application Support/com.apple.TCC/TCC.db" \
"SELECT service, client FROM access WHERE service='kTCCServiceSystemPolicyAllFiles';"
echo "exit=$?"
C’est la requête que j’ai exécutée sous macOS 27.0, mot pour mot.19 Pour voir à quelle app TCC a imputé un accès, le guide de déploiement d’Apple propose un flux de journal, log stream --debug --predicate 'subsystem == "com.apple.TCC" AND eventMessage BEGINSWITH "AttributionChain"', présenté comme un moyen « to try to identify » (d’essayer d’identifier) en temps réel l’app ou le binaire responsable.31 Je ne l’ai pas exécuté pour ces mesures, c’est pourquoi la section 5 ne peut pas dire si c’est la ligne de Ghostty ou une autre de la chaîne qui a décidé. La requête sur la base ci-dessus pourrait cesser de fonctionner dans une version ultérieure. Apple ne documente ni le fichier ni son schéma, et les notes de macOS 27 disent déjà que les apps « can no longer access the local TCC database directly. » (ne peuvent plus accéder directement à la base TCC locale.)23
6. Que faire maintenant
À la date de mes lectures du 11 octobre, je n’ai trouvé ni mécanisme publié ni note de version sur les nouveaux contrôles, rien de ce qui suit n’est donc une migration. C’est ce que je ferais aujourd’hui sur n’importe quel Mac qui fait tourner des agents, avec la source de chaque étape et ce qu’elle coûte. Je n’ai pas encore tout appliqué sur mon propre Mac ; la section 5 est l’état de départ.
1. Voyez qui détient l’accès complet au disque. Ouvrez Réglages Système > Confidentialité et sécurité > Accès complet au disque et lisez la liste.4 Repérez les terminaux, les éditeurs de code, les apps d’agents, les binaires d’agents, les interpréteurs et tout ce que vous ne reconnaissez pas. Depuis un shell, la requête de la section 5 affiche la liste si ce shell dispose déjà de l’accès, ce qui sert aussi de test pour savoir si le shell de votre agent en dispose ; un échec peut aussi venir d’une règle de bac à sable qui interdit le dossier, comme lors de l’exécution 3b.5 Coût : aucun. Gardez à l’esprit qu’une app listée n’est pas forcément activée.
2. Retirez-le au terminal dans lequel vous lancez vos agents. C’est l’étape qui change le plus de choses. Le code responsable d’un outil en ligne de commande est le terminal, donc l’autorisation du terminal est celle de l’agent.32 Si vous avez besoin de l’accès complet au disque pour des tâches de sauvegarde ou d’administration en ligne de commande, ce pour quoi tmutil et fdesetup le documentent, gardez une seconde app de terminal dotée de l’autorisation et n’y lancez jamais d’agent.4344 (Cette dernière partie est ma suggestion, pas celle d’Apple. Jeff Johnson a montré avec le Terminal d’Apple qu’une app hors bac à sable peut emprunter son autorisation en y ouvrant un script ; selon ma lecture, il pourrait en aller de même pour une seconde app de terminal qui ouvre des scripts.46) Coût : les emplacements protégés se mettent à échouer avec « Operation not permitted », et les demandes Fichiers et dossiers reviennent. Le contrôle par dossier d’Apple couvre « Desktop, Documents, Downloads, network volumes, and removable volumes. » (le Bureau, les Documents, les Téléchargements, les volumes réseau et les volumes amovibles.)10 Anthropic documente le même échec pour les sessions en arrière-plan de Claude Code, ainsi que la solution, une autorisation Fichiers et dossiers pour cette entrée.51 OpenClaw suggère de garder les fichiers dans son espace de travail pour éviter les autorisations par dossier.50
3. Vérifiez les entrées propres à l’agent. L’hôte d’arrière-plan de Claude Code demande l’accès « separately from your terminal » (séparément de votre terminal) et peut détenir sa propre entrée d’accès complet au disque.51 Sur mon Mac, 30 binaires Claude Code numérotés par version sont listés, que je lis, sans vérification, comme les entrées de cet hôte.19 Retirez celles que vous n’aviez pas l’intention d’accorder, et accordez plutôt Fichiers et dossiers là où une session en arrière-plan a besoin d’un dossier. Les apps d’agents ont aussi leurs propres lignes ; sur mon Mac, les apps ChatGPT, Cursor et Xcode sont toutes listées.19 Coût : une session en arrière-plan qui lit des dossiers protégés échoue jusqu’à ce que vous accordiez l’accès plus restreint.
4. Ne l’accordez jamais à un interpréteur. L’ingénieur du support d’Apple : « if you have a script that needs to manipulate files on your desktop, you wouldn’t want to give the interpreter that privilege because then any script could do that. » (si vous avez un script qui doit manipuler des fichiers sur votre bureau, vous ne voulez pas donner ce privilège à l’interpréteur, car alors n’importe quel script le pourrait.) Sa solution consiste à « package your script as a standalone program that MAC can use for its tracking. » (empaqueter votre script sous forme de programme autonome que MAC peut suivre.)20 La ligne propre à un interpréteur compte partout où l’interpréteur est le code responsable, par exemple pour un script exécuté comme tâche launchd sans app associée ; alors chaque script Python ou Node, serveurs MCP compris, lancé de cette façon via cet interpréteur reçoit l’autorisation entière.32 Coût : pour un script qui a réellement besoin de l’accès, sa « easiest solution » (solution la plus simple) est de l’empaqueter en programme autonome que MAC peut suivre, ce qui, selon lui, est facile avec AppleScript et ne l’est pas avec des scripts shell.20
5. Activez le bac à sable de l’éditeur, et interdisez les lectures dont vous n’avez pas besoin. Les valeurs par défaut lisent largement, donc activer le bac à sable est nécessaire mais pas suffisant.
- Claude Code :
sandbox.enabled, puispermissions.blockReadsOutsideWorkingDirectories(ou des règlessandbox.filesystem.denyRead), et"allowUnsandboxedCommands": falsepour supprimer la relance hors bac à sable.15 Rappelez-vous que l’outil Read, les hooks et les serveurs MCP restent en dehors.15 Coût : les outils qui ont besoin d’autres chemins ou d’autres hôtes échouent jusqu’à ce que vous les autorisiez, et chaque entréeexcludedCommandsrouvre la brèche.15 - Codex : restez en
workspace-writeouread-only; évitezdanger-full-access; ajoutez des règles de lecture"deny"à un profil d’autorisation ou, pour une équipe, définissezpermissions.filesystem.deny_readdansrequirements.toml, le fichier imposé par l’administrateur, pour que les utilisateurs ne puissent pas l’affaiblir.1621 Coût : les commandes qui ont besoin du réseau exigent une approbation ounetwork_access.60 - Gemini CLI : lancez-le avec
-setSEATBELT_PROFILE=strict-openoustrict-proxied, les deux profils que la documentation décrit comme restreignant les lectures.17 Coût : ces profils restreignent les lectures autant que les écritures, si bien que les outils qui lisent hors du projet échouent sous ces profils jusqu’à ce que vous choisissiez un profil plus souple. - Cursor : faites passer Read Access de System à Workspace ; le réglage exige Cursor 3.23 ou ultérieur, et le Cursor de mon Mac est en 3.19.7.1847 Coût : les lectures de fichiers hors de l’espace de travail demandent d’abord une confirmation, et les commandes en bac à sable ne voient que l’espace de travail, votre Read Allowlist et les chemins système dont les outils courants ont besoin.18
- VS Code : activez
chat.agent.sandbox.enabled; il ne couvre que les sessions Copilot Agent Host, « not the Local chat harness or the custom terminal tool override. » (et non le harnais de chat local ni le remplacement personnalisé de l’outil terminal.)59 Coût : les commandes qui ont besoin de chemins ou d’outils hors de ses valeurs par défaut doivent être autorisées, et même alors, Microsoft dit qu’il n’est « not a virtual machine or user-account boundary » (ni une machine virtuelle ni une frontière entre comptes utilisateur) et laisse le réseau sortant ouvert par défaut ; il réduit donc la brèche plutôt qu’il ne la ferme.59 - Hermes Agent et OpenClaw : utilisez un backend de conteneur. Hermes en recommande un pour les passerelles en production ; le bac à sable d’OpenClaw est désactivé par défaut et, selon ses propres termes, « not a perfect security boundary » (pas une frontière de sécurité parfaite), même s’il affirme que le bac à sable « materially limits filesystem and process access. » (limite sensiblement l’accès au système de fichiers et aux processus.)6462 Coût : les commandes exécutées dans le conteneur perdent l’accès sans restriction à l’hôte (Hermes décrit les backends comme isolant les « agent commands from your host system », les commandes de l’agent par rapport au système hôte), mais les fichiers montés ou synchronisés restent accessibles : les backends Docker et Singularity de Hermes utilisent des montages liés, une « live host filesystem view » (vue en direct du système de fichiers de l’hôte), son réglage
docker_volumespartage des répertoires de l’hôte, et l’accès à l’espace de travail d’OpenClaw peut êtreroourwen plus de la valeur par défautnone.646166 Le coût consiste à fournir explicitement les fichiers dont une tâche a besoin et à auditer ces montages. Ce que cela ne couvre pas : la passerelle d’OpenClaw reste sur l’hôte, si bien qu’un canal iMessage configuré conserve l’accès complet au disque du contexte de processus de la passerelle ; mettre les outils en conteneur ne supprime pas cette exposition.6214 La compétence iMessage de Hermes liste des prérequis côté hôte (Messages connecté,imsginstallé, accès complet au disque pour le terminal) ; je n’ai trouvé aucune page de Hermes sur le comportement de la compétence avec un backend de conteneur.13
La limite : sur mon Mac, aucun bac à sable n’a modifié l’autorisation d’accès complet au disque ; un bac à sable n’a bloqué la lecture protégée que lorsque son profil interdisait ce chemin nommément, et les couches Seatbelt de Claude Code, de la CLI de Cursor et de Codex ont chacune connu des évasions publiées, corrigées depuis.5676869
6. Placez un agent qui lit Messages sous son propre utilisateur macOS, ou passez-vous-en. Le conseil de déploiement d’OpenClaw lui-même pour son bot iMessage est le suivant : « Use a dedicated Apple ID and macOS user so bot traffic is isolated from your personal Messages profile. » (utilisez un identifiant Apple et un utilisateur macOS dédiés, afin que le trafic du bot soit isolé de votre profil Messages personnel.)71 Faites de cet utilisateur un compte standard : Apple indique que les utilisateurs standard « can install apps and change their own settings, but can’t add other users or change other users’ settings. » (peuvent installer des apps et modifier leurs propres réglages, mais ne peuvent ni ajouter d’autres utilisateurs ni modifier leurs réglages.)72 Sur mon Mac, ma Bibliothèque utilisateur ainsi que les dossiers de Mail et de Messages ne sont lisibles que par moi d’après leurs permissions, si bien qu’un processus qui s’exécute sous un autre utilisateur standard est refusé par les permissions de fichiers ordinaires avant même que TCC soit consulté ; c’est mon inférence à partir des permissions, pas un test que j’ai effectué.19 Deux réserves : l’ingénieur du support d’Apple dit que l’accès complet au disque est « system wide » (valable pour tout le système), et non propre à chaque utilisateur, de sorte qu’une app à laquelle il a été accordé dans un compte le détient dans tous les comptes ; et le guide d’Apple dit que le réglage s’étend à « certain administrative settings for all users on this Mac. » (certains réglages d’administration pour tous les utilisateurs de ce Mac.)204 Coût : une seconde session, un second trousseau et un second jeu de réglages, et un agent qui ne voit pas les fichiers de votre compte principal à moins que vous ne les partagiez.
7. Désactivez « Allow full disk access for remote users » (Autoriser l’accès complet au disque pour les utilisateurs distants) si vous n’en avez pas besoin. Si vous pilotez des agents via SSH, le serveur SSH est le code responsable et ce réglage est son autorisation.3 Sur mon Mac, son client est listé.19 Coût : les shells distants perdent l’accès aux emplacements protégés.
8. Conservez l’approbation action par action pour tout ce qui parle en votre nom. OpenAI : « Persistent approval removes your final chance to review a message before ChatGPT sends it as you. Use it only when you accept that risk. » (l’approbation permanente vous retire votre dernière occasion de relire un message avant que ChatGPT ne l’envoie en votre nom ; ne l’utilisez que si vous acceptez ce risque.)22 Anthropic : réservez bypassPermissions aux « isolated environments like containers or VMs. » (environnements isolés comme les conteneurs ou les VM.)53 Coût : davantage de clics, et c’est justement le but.
9. Si vous gérez des Mac, auditez ce qu’accordent vos profils. Un profil Privacy Preferences Policy Control peut accorder SystemPolicyAllFiles à n’importe quel bundle ID ou chemin, terminal compris, et « The user isn’t prompted and can’t change this value. » (l’utilisateur n’est pas sollicité et ne peut pas modifier cette valeur.)237 Sous macOS 27, la partie propre à chaque app de cette charge utile est marquée obsolète, et le remplaçant déclaratif n’a aucune clé pour l’accès complet au disque.3738 Je n’ai trouvé aucun moyen documenté par Apple permettant au MDM de signaler un accès complet au disque accordé à la main par un utilisateur. Coût : les profils que vous trouverez sont peut-être indispensables à un agent de sauvegarde ou de sécurité ; l’exemple même d’Apple accorde l’accès à l’app d’une organisation « without prompting the user. » (sans solliciter l’utilisateur.)31
Le guide du loop engineering traite de l’exécution d’agents sans surveillance ; chaque étape ci-dessus s’applique avec plus de force encore quand personne n’est au clavier pour lire une demande.
7. Ce qui pourrait changer : une lecture, sous conditions
Tout ce qui figure dans cette section est ma lecture des termes d’Apple et des changements qu’Apple a déjà livrés à côté. Apple n’a annoncé aucun mécanisme, et je n’en prédis aucun. Chaque forme ci-dessous est quelque chose que permet le texte du 2 octobre, accompagnée des éléments qui la rendent plus ou moins plausible et de la condition sous laquelle elle toucherait les agents.
Une procédure d’autorisation plus exigeante. Les verbes du texte portent sur le fait d’accorder : les utilisateurs « who genuinely wish to grant an app this extraordinary level of access can only do so with very explicit user action » (qui souhaitent réellement accorder à une app ce niveau d’accès extraordinaire ne peuvent le faire que par une action très explicite) et devraient « clearly understand these risks before granting such access » (comprendre clairement ces risques avant d’accorder un tel accès).1 Apple a déjà livré du consentement accompagné d’explications : les réglages d’app déclaratifs de macOS 27 présentent aux utilisateurs une demande de consentement portant la justification exigée de l’organisation avant d’appliquer des valeurs par défaut de confidentialité.3938 Condition : si le nouveau contrôle ne s’applique qu’aux nouvelles autorisations, un terminal qui détient déjà l’accès complet au disque le conserve, et les agents qui y tournent ne sont pas touchés tant que l’utilisateur ne le réinitialise pas. S’il s’applique aux autorisations existantes, chaque terminal qui détient l’accès complet au disque est touché lui aussi. L’article ne dit ni l’un ni l’autre.
Un périmètre plus étroit. Apple pourrait laisser l’interrupteur tel quel et retirer des données de son champ. Apple a déjà redessiné ces lignes : Catalina a ajouté la corbeille à ce qui exige l’accès complet au disque, macOS 14 et 15 ont placé les conteneurs d’app et les conteneurs de groupe sous des protections propres, et macOS 27 refuse par défaut les conteneurs d’autres équipes et laisse XProtect restreindre les « app data that is commonly targeted by malicious software » (données d’app couramment visées par les logiciels malveillants).112023 Condition : si Apple place les données de Mail, de Messages ou de Safari derrière un contrôle propre que l’accès complet au disque ne couvre pas, la voie du terminal cesse de les atteindre, même là où le terminal conserve l’accès complet au disque. L’article ne mentionne aucun rétrécissement ; sa formule « this extraordinary level of access » (ce niveau d’accès extraordinaire) décrit l’autorisation telle qu’elle est.
Un traitement différent des autorisations héritées. L’écart entre « grant an app » (accorder à une app) et un agent qui est l’enfant d’une app est celui dont traite cet article, et Apple dispose de deux pièces qui pourraient y répondre. Xcode 27 a déjà « a new security layer that monitors and controls filesystem access by coding agents and any processes they spawn » (une nouvelle couche de sécurité qui surveille et contrôle l’accès au système de fichiers par les agents de codage et par tous les processus qu’ils lancent), et Endpoint Security dans macOS 27 ajoute es_new_descendants_client, qui n’observe que « the entire subtree rooted at the calling process » (toute la sous-arborescence issue du processus appelant) et, selon son en-tête, « Does NOT require TCC approval » (n’exige PAS l’approbation de TCC), même si, comme es_new_client, il exige l’entitlement com.apple.developer.endpoint-security.client.2425 L’ingénieur du support d’Apple a ajouté ce dernier à son message sur les autorisations de fichiers le 18 septembre 2026.20 Aucun des deux textes ne fait le lien avec l’accès complet au disque. Condition, selon ma lecture : un contrôle visant « an app » (une app) s’applique au terminal, et chaque agent qui s’y trouve continue d’en hériter le résultat, à moins qu’Apple ne modifie l’attribution du code responsable que son ingénieur dit non documentée et « subject to change » (susceptible de changer), ou ne rattache le nouveau contrôle à quelque chose comme le client des descendants. Aucun des deux textes ne dit qu’elle le fera.
Les Mac gérés. Le MDM peut aujourd’hui accorder l’accès complet au disque sans solliciter l’utilisateur.37 Dans macOS 27, la partie propre à chaque app de cette charge utile est obsolète et son remplaçant déclaratif n’a aucune clé pour l’accès complet au disque.3738 Condition : si la « very explicit user action » (action très explicite de l’utilisateur) s’applique aux autorisations MDM, une autorisation silencieuse par profil ne serait plus possible ; sinon, les Mac gérés conservent la voie silencieuse. Apple n’a rien dit sur aucun de ces points, et n’a pas relié l’obsolescence de macOS 27 à l’article du 2 octobre.
Quand. L’article dit « Going forward » (désormais). Les notes de macOS 27.2 beta 3, pour une bêta datée de trois jours après lui, n’en disent rien, et je n’ai trouvé aucune entrée macOS 27.1 dans le flux des versions du 11 octobre ni dans l’index des notes de version : le flux liste 27.0.1 (28 septembre) puis la 27.2 beta 3, les bêtas de 27.2 ayant commencé le 16 septembre, et l’index des notes de version ne liste que 27 et la 27.2 beta 3.6879 L’obsolescence TCC de cette année, « Apps can no longer access the local TCC database directly » (les apps ne peuvent plus accéder directement à la base TCC locale), Apple l’a placée dans les notes de version de macOS 27, sous un intitulé TCC.23 Condition : si les nouveaux contrôles arrivent avec une version qui a des notes pour les développeurs, c’est dans ces notes qu’Apple a placé l’obsolescence TCC de cette année, et je lirai les notes de chaque bêta de macOS 27.x en quête d’une ligne. Mais macOS 27.0.1 est déjà sorti sans aucune note de version pour les développeurs, si bien qu’un changement pourrait aussi arriver dans une mise à jour intermédiaire sans aucune ligne dans aucune page de notes.78 S’ils arrivent avec macOS 28, une session de la WWDC ou les notes de version d’une bêta sont les endroits où Apple a déjà décrit ce genre de changements : la WWDC19 pour les protections de Catalina, les notes de macOS 27 pour l’obsolescence TCC de cette année.1123 Dans un cas comme dans l’autre, les étapes de la section 6 ne dépendent pas de la réponse.
Points clés
Si vous faites tourner des agents sur un Mac
- Apple a annoncé le 2 octobre qu’accorder l’accès complet au disque exigera une « very explicit user action » (action très explicite de l’utilisateur) et a désigné les agents IA comme raison. Elle n’a donné ni version, ni date, ni mécanisme.1
- Votre agent en ligne de commande dispose de ce dont dispose votre terminal. Les pages de manuel d’Apple et son ingénieur du support disent que le terminal est le code responsable ; Apple ne documente aucune règle générale.23
- Le bac à sable d’un éditeur n’est pas un contrôle de l’accès complet au disque. Sur mon Mac, une lecture protégée a traversé le bac à sable read-only de Codex et le runtime de bac à sable d’Anthropic ; seule une interdiction de lecture visant précisément ce dossier, ou un lancement hors du terminal, l’a arrêtée.5
- Retirez l’accès complet au disque au terminal dans lequel vous lancez vos agents, ne le donnez jamais à
nodeni àpython, et activez des restrictions de lecture, pas seulement le bac à sable.201521 - Si un agent lit Messages, donnez-lui son propre utilisateur macOS et conservez l’approbation à chaque envoi.7122
Si vous développez des agents ou des apps d’agents
- Ne demandez pas aux utilisateurs d’accorder l’accès complet au disque à leur terminal ou au processus de votre agent. Deux éditeurs le font aujourd’hui, pour Messages.1314
- La voie documentée par Apple est un lien vers le panneau, pas une demande d’autorisation ; l’interrupteur appartient à l’utilisateur, et Apple dit que l’activer exigera une action très explicite de sa part.251
- Indiquez dans votre documentation ce que votre bac à sable lit par défaut. La documentation de Codex dit que son bac à sable « limits what it can touch (typically to the current workspace) » (limite ce qu’il peut toucher, généralement à l’espace de travail courant) ; son code source et mes exécutions montrent des lectures qui vont bien au-delà de l’espace de travail.60635
Questions fréquentes
Qu’est-ce que l’accès complet au disque sur un Mac ?
Un réglage de Réglages Système > Confidentialité et sécurité qui permet à une app d’« access all files on your computer, including data from other apps (for example, Mail, Messages, Safari, and Home), data from Time Machine backups, and certain administrative settings for all users on this Mac. » (accéder à tous les fichiers de votre ordinateur, y compris les données d’autres apps comme Mail, Messages, Safari et Maison, les données des sauvegardes Time Machine et certains réglages d’administration pour tous les utilisateurs de ce Mac.) Les apps ne peuvent pas le demander ; l’utilisateur les ajoute avec le bouton Ajouter, ou un profil MDM l’accorde.4102
Qu’a annoncé Apple au sujet de l’accès complet au disque en octobre 2026 ?
Une actualité pour développeurs datée du 2 octobre 2026, « Updates to Full Disk Access in macOS », indique qu’Apple « will introduce additional controls » (introduira des contrôles supplémentaires) pour que les utilisateurs qui veulent accorder cet accès à une app « can only do so with very explicit user action » (ne puissent le faire que par une action très explicite), parce que « As AI agents become increasingly capable and autonomous, the risks associated with this level of access will grow substantially. » (à mesure que les agents IA gagnent en capacités et en autonomie, les risques liés à ce niveau d’accès vont fortement augmenter.) Elle ne nomme aucune version de macOS, aucune date ni aucun mécanisme.1
Claude Code ou Codex obtiennent-ils l’accès complet au disque depuis mon terminal ?
Oui, si le terminal en dispose. Un outil lancé depuis un terminal est évalué au regard du terminal ; la page de manuel eslogger d’Apple dit que l’exécuter depuis « Terminal.app or a third-party terminal emulator » (Terminal.app ou un émulateur de terminal tiers) exige que cette app soit autorisée, et l’ingénieur du support d’Apple écrit dans un message de forum : « The tool’s responsible code is Terminal. » (le code responsable de l’outil, c’est Terminal.) Sur mon Mac, une lecture qui exige l’accès complet au disque a fonctionné depuis le shell de Claude Code dans Ghostty et a échoué lorsqu’elle a été lancée en dehors.235
Le bac à sable de Claude Code ou de Codex empêche-t-il un agent de lire mes Messages ?
Pas par défaut. Les deux bacs à sable utilisent Seatbelt, qui est distinct de l’accès complet au disque. Le bac à sable de Claude Code est désactivé par défaut et, une fois activé, lit « Most of the machine » (l’essentiel de la machine). Celui de Codex est activé, et son mode read-only a lu sur mon Mac un fichier protégé par l’accès complet au disque. Interdisez explicitement les lectures : permissions.blockReadsOutsideWorkingDirectories dans Claude Code, des règles "deny" dans un profil d’autorisation de Codex.15215
Comment voir quelles apps disposent de l’accès complet au disque ?
Ouvrez Réglages Système > Confidentialité et sécurité > Accès complet au disque.4 tccutil ne peut pas le lister ; sa seule commande est reset.34 Depuis un terminal qui dispose déjà de l’accès complet au disque, une lecture de la base TCC système liste les clients, comme à la section 5 ; un échec avec « authorization denied » signifie soit que votre shell ne dispose pas de l’accès, soit qu’une règle de bac à sable a interdit la lecture.195
Faut-il retirer l’accès complet au disque à Terminal ?
Si vous y lancez des agents, oui. Gardez un terminal distinct doté de l’autorisation pour les commandes de sauvegarde ou d’administration comme tmutil, et n’y lancez jamais d’agent. Attendez-vous à des demandes Fichiers et dossiers et à des erreurs « Operation not permitted » dans le terminal auquel vous le retirez.431051
Quand les nouveaux contrôles d’Apple sur l’accès complet au disque arriveront-ils ?
Apple ne l’a pas dit. L’article du 2 octobre dit « Going forward » (désormais), les notes de version de macOS 27.2 beta 3 n’en parlent pas, et je n’ai trouvé aucune entrée macOS 27.1 dans le flux des versions du 11 octobre ni dans l’index des notes de version : le flux liste macOS 27.0.1 (28 septembre), publié sans notes de version pour les développeurs, puis macOS 27.2 beta 3 ; les bêtas de 27.2 elles-mêmes ont commencé le 16 septembre.16789
Sources
-
Apple Developer, News, “Updates to Full Disk Access in macOS”, daté du 2 octobre 2026. Récupéré le 11 octobre 2026 à 17:28 UTC, puis de nouveau à 17:47 UTC ; le texte des deux copies est identique, au style des apostrophes près. Les deux paragraphes complets : l’accès complet au disque « largely sidesteps » les contrôles des données « in order to allow backup apps to function properly on the Mac » ; « Some developers are using Full Disk Access in ways that could put users at risk » ; les fichiers, le courrier, les messages et l’historique de navigation ; les apps de communication et « the people users are communicating with » ; « Going forward, we will introduce additional controls » ; « very explicit user action » ; les agents IA comme raison pour laquelle le risque « will grow substantially ». Aucune version, date, aucun mécanisme ni aucune app nommés. ↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Apple, page de manuel
eslogger(1), livrée avec le SDK de macOS 27.0 dans Xcode ; lue localement le 11 octobre 2026. Section TCC AUTHORIZATION : « eslogger requires the responsible process to have been authorized for Full Disk Access » ; l’exécuter « from an app, including Terminal.app or a third-party terminal emulator, requires the respective app to be authorized for Full Disk Access » ; le réglage Session à distance pour les sessions SSH ; et « MDM servers can grant Full Disk Access authorization » via la cléSystemPolicyAllFilesde la charge utile Privacy Preferences Policy Control. ↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple Developer Forums, “How to grant command line tools full disk access”, fil créé en juin 2024 ; réponses de Quinn « The Eskimo! », Apple Developer Technical Support, juin 2024. Un message d’employé, pas de la documentation. Récupéré le 11 octobre 2026 à 17:55 UTC. Les quatre cas de code responsable (« The tool’s responsible code is Terminal », « The tool’s responsible code is the SSH server », avec le réglage « Allow full disk access for remote users », « The system treats the app as the responsible code », et le cas launchd : « If the daemon or agent was installed by SMAppService, that makes the app the responsible code. Otherwise, the daemon or agent should include AssociatedBundleIdentifiers in its launchd property list ») ; la réserve selon laquelle l’algorithme « is not documented, has changed in the past, and may well change in the future » ; le compte rendu de l’auteur du fil, selon lequel un programme exécuté dans Terminal, alors que Terminal détenait l’accès complet au disque, ouvrait le fichier, et échouait quand l’autorisation passait de Terminal au programme ; et les remarques de Quinn sur les outils exécutés par Xcode : « Xcode runs the tool in a way that makes it clear to the system that Xcode is not the responsible code for this process » et, pour un outil sous le débogueur de Xcode (Xcode 15.4 sous macOS 14.4.1), « I expect that one of these is breaking TCC’s responsible code search », complété par « I suspect that’s deliberate ». ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Apple, guide d’utilisation du Mac (macOS 27), “Change Privacy & Security settings on Mac”. Récupéré le 11 octobre 2026 à 17:37 UTC. La ligne de l’accès complet au disque (« Allow apps to access all files on your computer », avec Mail, Messages, Safari, Maison, les sauvegardes Time Machine et « certain administrative settings for all users on this Mac ») et sa consigne d’ajouter une app avec le bouton Ajouter ; pour les autres lignes, « The listed apps have requested access ». ↩↩↩↩↩↩↩↩↩↩
-
Mesure de l’auteur sur son Mac (macOS 27.0, build 26A428, protection de l’intégrité du système activée), 11 octobre 2026, 17:40 UTC, depuis une session Claude Code dans Ghostty. Toutes les commandes en lecture seule sauf deux : une tâche launchd soumise puis retirée (sa sortie écrite dans deux fichiers), et sandbox-runtime 0.0.79 d’Anthropic installé via
npx -ypour le test, avec deux fichiers de réglages de test (srt-a.json, srt-b.json) écrits pour ses exécutions. Les sondes d’écriture étaient des tentatives, que les bacs à sable ont refusées ; les sondes réseau ont échoué (000 curl_exit=56), sans diagnostic ni contrôle hors bac à sable permettant d’en établir la cause. Les sept exécutions de la section 5 : une lecture d’une seule ligne de la base TCC système depuis le shell de l’agent (ligne renvoyée) ; dans le bac à sable Seatbelt de Codex CLI 0.154.0 en moderead-only(ligne renvoyée ; une écriture hors de l’espace de travail refusée avec « Operation not permitted ») ; avec la configuration Codex de l’auteur (ligne renvoyée) ; dans sandbox-runtime 0.0.79 d’Anthropic sans interdiction de lecture (ligne renvoyée ; écriture refusée ; requête réseau en échec) et avecdenyReadsur le dossier TCC (« authorization denied ») ; et la même lecture en tâche launchd sans Ghostty dans sa chaîne (« authorization denied »). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple Developer Documentation, “macOS 27.2 Golden Gate Beta 3 Release Notes”. Récupéré le 11 octobre 2026 à 17:35 UTC. Six sections : General, AppKit, Display Settings, Notifications, Shortcuts, StoreKit Testing in Xcode ; aucune ligne sur l’accès complet au disque, TCC ou Confidentialité et sécurité ; la ligne AppKit sur la suppression du réglage par défaut
EnablePasteboardPrivacyDeveloperPreview. ↩↩↩↩ -
Apple Developer, flux RSS des versions. Récupéré le 11 octobre 2026 à 17:28 UTC. « macOS 27.2 beta 3 (26B5101f) » daté du Mon, 05 Oct 2026 ; « macOS 27.0.1 (26A434) » daté du Mon, 28 Sep 2026 ; aucun élément macOS 27.1. ↩↩↩↩↩↩
-
Apple Developer Documentation, “macOS Release Notes”, récupéré le 11 octobre 2026 à 17:35 UTC : sous macOS 27, seulement « macOS 27.2 Golden Gate Beta 3 Release Notes » et « macOS 27 Golden Gate Release Notes ». Les adresses
macos-release-notes/macos-27_0_1-release-notes,macos-27_1-release-notesetmacos-27_1-beta-release-notesont renvoyé HTTP 404 à 17:31 UTC. ↩↩↩↩↩ -
Apple Developer, News, page d’index. Récupérée le 11 octobre 2026 à 17:41 UTC. « Get ready with the latest beta releases », daté du 16 septembre 2026 : « The beta versions of iOS 27.2, iPadOS 27.2, macOS 27.2, tvOS 27.2, visionOS 27.2, and watchOS 27.2 are now available. » ↩↩↩
-
Apple Platform Security, “Controlling app access to files in macOS”. Récupéré le 11 octobre 2026 à 17:36 UTC. « Full internal storage access » : aucune demande de la part de l’app ; l’utilisateur modifie les réglages de confidentialité du système. Fichiers et dossiers, demandé par l’app, « Includes Desktop, Documents, Downloads, network volumes, and removable volumes ». La phrase qui date l’accès à l’ensemble du stockage de « macOS 10.13 or later ». ↩↩↩↩↩↩
-
Apple, session 701 de la WWDC19, “Advances in macOS Security”, transcription sur la page. Récupéré le 11 octobre 2026 à 17:40 UTC. Les deux niveaux de données protégées, avec le courrier, les messages et l’historique de navigation de Safari derrière « a high barrier to access » pour les « disk management or backup utilities » ; les emplacements soumis à consentement de Catalina ; les auxiliaires « prepopulated unchecked » ; la corbeille ajoutée à ce qui exige une approbation préalable ; les apps « can guide the user to the security and privacy preference pane ». ↩↩↩↩↩↩↩
-
Apple, session 10053 de la WWDC23, “What’s new in privacy”, transcription sur la page. Récupéré le 11 octobre 2026 à 17:40 UTC. La protection des conteneurs d’app, et « For backup utilities or disk-management tools that have already been granted Full Disk Access, no additional prompt will be shown at time of access. » ↩↩↩
-
Nous Research, documentation de Hermes Agent, Apple iMessage skill. Récupéré le 11 octobre 2026 à 17:41 UTC. « Bundled (installed by default) » ; les prérequis comprennent « macOS with Messages.app signed in », l’installation de
imsg, « Grant Full Disk Access for terminal (System Settings → Privacy → Full Disk Access) » et « Grant Automation permission for Messages.app when prompted ». ↩↩↩↩↩↩ -
Documentation d’OpenClaw, “iMessage setup”. Récupéré le 11 octobre 2026 à 17:42 UTC. « Full Disk Access is required for the process context running OpenClaw/
imsg» pour l’accès à la base de données de Messages ; l’automatisation pour l’envoi ; « Permissions are granted per process context » ; la protection de l’intégrité du système doit être désactivée pour les actions avancées ; et un exemple de ligne TCC montrant/usr/libexec/sshd-keygen-wrappercomme client pour un contexte SSH. ↩↩↩↩↩↩↩↩ -
Anthropic, Claude Code Docs, “Configure the sandboxed Bash tool”. Récupéré le 11 octobre 2026 à 17:35 UTC. « The sandbox is off by default » ; le tableau des valeurs par défaut (écritures dans le répertoire de travail, le répertoire temporaire et les répertoires ajoutés ; lectures de « Most of the machine, including credential files » ; réseau via un proxy dont les domaines autorisés « start empty ») ; construit sur
@anthropic-ai/sandbox-runtime; Seatbelt sous macOS ; les deux modes de bac à sable ; ce qui s’exécute en dehors (outils intégrés de fichiers et de web ; hooks, serveurs MCP locaux, moniteurs de plugins, serveurs LSP, commandes auxiliaires) ; la relance hors bac à sable etallowUnsandboxedCommands;denyRead,allowRead,blockReadsOutsideWorkingDirectories,excludedCommands; les Apple Events bloqués par défaut. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
OpenAI, documentation de Codex, “Sandbox” (servie depuis learn.chatgpt.com). Récupéré le 11 octobre 2026 à 17:36 UTC. Bac à sable activé par défaut ; Seatbelt sous macOS ; s’applique aux commandes lancées ; les modes
read-only,workspace-writeetdanger-full-accessdans les termes d’OpenAI ; l’accès complet défini commedanger-full-accessavecapproval_policy = "never"; le libellé « Full access » du menu de l’app de bureau. ↩↩↩↩↩↩↩ -
Google, Gemini CLI, docs/cli/sandbox.md et le profil Seatbelt permissive-open, au commit 9b6e026. Récupéré le 11 octobre 2026 à 17:43 UTC. Activation par
-s,GEMINI_SANDBOXou les réglages ; Seatbelt viasandbox-exec; les six profils,permissive-openpar défaut (« allowing broad file reads and network access »),strict-openetstrict-proxiedavec restrictions de lecture ; le(allow file-read*)du profil. ↩↩↩↩↩ -
Documentation de Cursor, “Run Modes”. Récupéré le 11 octobre 2026 à 17:50 UTC. Seatbelt via
sandbox-execpour « the full subprocess tree » ; réseau « Blocked by default » ; les modes de Read Access, System par défaut (« The agent can read files outside the workspace without approval »), et Workspace, qui demande avant les lectures hors de l’espace de travail ; « Read access requires Cursor 3.23 or later » ; certaines commandes « bypass the sandbox ». ↩↩↩↩↩↩↩↩ -
Mesure de l’auteur sur son Mac (macOS 27.0, build 26A428, protection de l’intégrité du système activée), 11 octobre 2026, 17:32 UTC, avec une vérification des permissions de fichiers ajoutée à 18:09 UTC ; lecture seule. La chaîne de lancement du shell de l’agent (zsh, claude, shell de connexion, login, Ghostty ;
TERM_PROGRAMghostty) ; la base TCC propre à l’utilisateur impossible à ouvrir ; les permissions de la base TCC système (-rw-r--r--, root) et ses 75 lignes pourkTCCServiceSystemPolicyAllFiles, colonnes service et client seulement : Terminal, iTerm2, Ghostty, l’app ChatGPT (com.openai.codex), Cursor, Xcode, 30 binaires Claude Code par version de 2.1.177 à 2.1.296,nodeHomebrew et quatre interpréteurs Python,sshd-keygen-wrapper, trois autres entrées Apple, cinq builds de l’auteur et 25 autres clients tiers. Les permissions des dossiers Bibliothèque, Mail et Messages de l’utilisateur (propriétaire uniquement). Les chemins de clients situés sous le dossier personnel ne sont pas reproduits ici. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple Developer Forums, “On File System Permissions”, par Quinn « The Eskimo! », Apple Developer Technical Support ; publié pour la première fois le 26 avril 2021, révisé le 18 septembre 2026 pour ajouter
es_new_descendants_client. Un message d’employé, pas de la documentation. Récupéré le 11 octobre 2026 à 17:56 UTC. « The exact list of file system locations protected by MAC is not documented » ; la liste comprenant « Full Disk Access (macOS 10.14 and later) », la protection des conteneurs d’app (macOS 14) et celle des conteneurs de groupe d’apps (macOS 15) ; « Some MAC privileges are per user (Files and Folders) and some are system wide (Full Disk Access) » ; TCC « has no API surface » ; le MAC « is mandatory; it’s not an opt-in like the App Sandbox » ; le code responsable ; la mise en garde sur les interpréteurs et le conseil de « package your script as a standalone program ». ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
OpenAI, documentation de Codex, “Configuration Reference”. Récupéré le 11 octobre 2026 à 17:37 UTC. Profils d’autorisation avec
"read" | "write" | "deny"par chemin ;permissions.filesystem.deny_read, « Admin-enforced filesystem read denials », que « users cannot weaken them with local config » ;requirements.tomldécrit comme « an admin-enforced configuration file that constrains security-sensitive settings users can’t override ». ↩↩↩↩↩ -
OpenAI, documentation de ChatGPT, “Plugins”, section Apple Messages. Récupéré le 11 octobre 2026 à 17:45 UTC. « Grant the requested macOS permissions before ChatGPT reads Messages » ; approbation à chaque envoi par défaut ; « Persistent approval removes your final chance to review a message before ChatGPT sends it as you » ; Apple Messages ne fonctionne que sur Mac ; les administrateurs peuvent le désactiver via le contrôle de Computer Use ; « When a plugin capability runs through a Codex host, the host’s sandbox and approval policy applies. » ↩↩↩↩↩↩
-
Apple Developer Documentation, “macOS 27 Golden Gate Release Notes”. Récupéré le 11 octobre 2026 à 17:35 UTC. System Integrity Protection : conteneurs de données d’app et de groupe d’apps d’autres équipes refusés par défaut sans demande (161835690) ; XProtect peut restreindre les données d’app (178668601). Obsolescence TCC : « Apps can no longer access the local TCC database directly » (90775556). Problème connu des réglages Confidentialité et sécurité (184660124), avec le contournement consistant à « grant Full Disk Access to the process for the duration of the requirement ». ↩↩↩↩↩↩↩↩↩
-
Apple Developer Documentation, “Xcode 27 Release Notes”. Récupéré le 11 octobre 2026 à 17:45 UTC. « Agents in Xcode can now be extended with plugins that contain skills, MCP servers, and ACP agent configurations » (178289210) ; prise en charge de l’Agent Client Protocol (178294840) ; la « new security layer that monitors and controls filesystem access by coding agents and any processes they spawn » de Coding Intelligence, qui « can be enabled in Coding Intelligence settings » (178289431) ; la préversion du serveur MCP de la Beta 5 pour les « code-signed agents » et l’option
--unsafe-always-allow-all-agents, « not a recommended configuration for at-desk use » (181836944). ↩↩↩↩↩ -
Apple, SDK de macOS 27.0 (build de SDK Xcode 26A425), en-tête
EndpointSecurity/ESClient.h, lu localement le 11 octobre 2026.es_new_client: « Callers are required to be entitled with com.apple.developer.endpoint-security.client » ; « The only supported way to check if an application is properly TCC authorized for Full Disk Access », et les URL de réglagesPrivacy_AllFiles« To direct the user to the Full Disk Access section in System Settings ».es_new_descendants_client, disponible à partir de macOS 27.0 : événements pour « the entire subtree rooted at the calling process », « Does NOT require TCC approval », avec « @note Requires the com.apple.developer.endpoint-security.client entitlement ». ↩↩↩↩↩ -
Apple Developer, flux RSS des actualités. Récupéré le 11 octobre 2026 à 17:41 UTC. « Updates to Full Disk Access in macOS » daté du Fri, 02 Oct 2026 09:00:19 PDT ; voisins : l’avis d’expiration de la Developer ID Sub-CA (1er octobre), les articles sur les ressources de l’App Store et l’iPhone Duo (5 octobre) et « Hello Developer: October 2026 » (6 octobre). ↩
-
Apple Developer, “Hello Developer: October 2026”, publié le 6 octobre 2026. Récupéré le 11 octobre 2026 à 17:46 UTC. Soumissions et Group Labs pour l’iPhone Duo, événements, documentation localisée et autres sujets ; aucune mention de l’accès complet au disque ni des agents. ↩
-
Apple Developer, vidéos Privacy & Security. Récupéré le 11 octobre 2026 à 17:41 UTC. Les sessions de la WWDC26 listées : « Meet Trust Insights », « Secure your app: mitigate risks to agentic features », « Secure your apps with App Attest » et « Privacy and Security Group Lab » ; aucune de leurs transcriptions ne contient « Full Disk ». ↩
-
Apple, session 347 de la WWDC26, “Secure your app: mitigate risks to agentic features”, transcription sur la page. Récupéré le 11 octobre 2026 à 17:41 UTC. L’injection de prompt indirecte, les mesures d’atténuation avec Foundation Models et App Intents, et la « Simon Willison’s Lethal Trifecta » : « access to private data, exposure to untrusted content, and the ability to externally communicate ». Aucune mention de l’accès complet au disque, de TCC ni des autorisations du système de fichiers pour les agents. ↩↩
-
Apple Developer Documentation, DeviceManagement, “PrivacyPreferencesPolicyControl.Services”. Récupéré le 11 octobre 2026 à 17:35 UTC.
SystemPolicyAllFiles: « Allows the application access to all protected files, including system administration files », sans marque d’obsolescence ; Camera, Microphone, ListenEvent et ScreenCapture : un profil « can’t grant » l’accès et « can only deny it » ; plusieurs services marqués obsolètes pour macOS 27. ↩↩↩↩ -
Apple Platform Deployment, “Privacy Preferences Policy Control device management payload settings for Apple devices”. Récupéré le 11 octobre 2026 à 17:38 UTC. « Supervision is required if you apply this payload using a device management service » ; « System Policy All Files » avec sa liste de données ; le commentaire d’exemple qui accorde à l’app d’une organisation l’accès à tous les fichiers « without prompting the user » ; et le prédicat
log streamsur les messages « AttributionChain » du sous-système TCC, donné pour identifier l’app ou le binaire responsable. ↩↩↩↩↩ -
Apple, SDK de macOS 27.0, en-tête
EndpointSecurity/ESTypes.h, lu localement le 11 octobre 2026.ES_NEW_CLIENT_RESULT_ERR_NOT_PERMITTED: « The caller lacks Transparency, Consent, and Control (TCC) approval from the user. » ↩ -
Apple, session 8009 de la WWDC26, “Privacy and Security Group Lab”, transcription sur la page. Récupéré le 11 octobre 2026 à 17:41 UTC. Un intervenant d’Apple : « So TCC stands for transparency, consent and control. » Aucune mention de l’accès complet au disque. ↩
-
Apple, page de manuel
tccutil(1), macOS 27.0 (datée du 3 avril 2012), lue localement le 11 octobre 2026. Une seule commande,reset; les exemples ne nomment queAddressBooketAll; aucune liste de services. ↩↩↩ -
Apple Developer Forums, “The Rules for Full Disk Access”, page 1, août et septembre 2018. Récupéré le 11 octobre 2026 à 17:44 UTC. Un message d’un développeur d’août 2018 évoque « Full Disk Access (previously Application Data in earlier betas) » ; un développeur demande « an API call that causes a prompt to the logged-in user to grant the app Full Disk access » ; Apple Developer Technical Support répond « Please do file an enhancement request » et décrit en septembre les auxiliaires intégrés comme couverts par l’autorisation de l’app parente, et les auxiliaires externes comme devant avoir la leur. ↩↩
-
Apple Developer Documentation, DeviceManagement, “PrivacyPreferencesPolicyControl”. Récupéré le 11 octobre 2026 à 17:35 UTC. Type de charge utile
com.apple.TCC.configuration-profile-policy; macOS, introduit dans 10.14 ; « Requires supervision » N/A ; exige un MDM approuvé par l’utilisateur. ↩↩↩ -
Apple Developer Documentation, DeviceManagement, “PrivacyPreferencesPolicyControl.Services.Identity”. Récupéré le 11 octobre 2026 à 17:35 UTC. Obsolète à partir de macOS 27.0, chaque clé portant « Deprecated: macOS 27+ » ;
Allowed: « The user isn’t prompted and can’t change this value » ; identifiants par bundle ID ou chemin ; « Helper tools embedded within an application bundle automatically inherit the permissions of their enclosing app bundle. » ↩↩↩↩↩↩↩ -
Apple Developer Documentation, DeviceManagement, “AppSettingsAppDictionaryObject”, introduit dans macOS 27. Récupéré le 11 octobre 2026 à 17:36 UTC. Valeurs par défaut de confidentialité pour Accessibility, Bluetooth, Camera, Dictation, LocalNetwork, Location, LocationAccuracy et Microphone, et une OrganizationJustification obligatoire affichée dans la demande de consentement ; aucune clé pour l’accès complet au disque. ↩↩↩↩
-
Apple Developer Documentation, DeviceManagement, “AppSettings”. Récupéré le 11 octobre 2026 à 17:35 UTC. Valeurs par défaut des autorisations de confidentialité : « When set, the app displays a consent prompt listing all the configured defaults » ; Allow ou Not Now ; « Only AppKit-based apps on macOS support this feature. » ↩↩
-
Apple Newsroom, “Apple introduces macOS Mojave”, communiqué de presse, 4 juin 2018. Récupéré le 11 octobre 2026 à 17:48 UTC. « New data protections require apps to get user permission before using the Mac camera and microphone or accessing personal data like user Mail history and Messages database. » ↩
-
Apple Developer Documentation, “macOS Mojave 10.14 Release Notes”. Récupéré le 11 octobre 2026 à 17:41 UTC. Privacy, New Features : le stockage protégé exige que l’app soit ajoutée à la catégorie « Application Data » (39798760). ↩
-
Apple Newsroom, “macOS Catalina is available today”, 7 octobre 2019. Récupéré le 11 octobre 2026 à 17:47 UTC. « new data protections require all apps to get permission before accessing user documents. » ↩
-
Apple, page de manuel
tmutil(8), SDK de macOS 27.0, lue localement le 11 octobre 2026. « Full Disk Access privileges can be granted to the Terminal application used to run tmutil. » ↩↩↩ -
Apple, page de manuel
fdesetup(8), SDK de macOS 27.0, lue localement le 11 octobre 2026. AUTHORIZATION POLICY : à partir de macOS 10.15, activer FileVault exige, parmi d’autres options, que l’application responsable soit autorisée pour l’accès complet au disque. ↩↩ -
Apple Developer Forums, “Which application is taken in consideration with TCC”, novembre 2023. Récupéré le 11 octobre 2026 à 17:43 UTC. Un développeur demande si TCC « is looking for parent process rights » ; Apple Developer Technical Support renvoie à « On File System Permissions » et refuse d’entrer dans le détail, jugé « both complex and subject to change ». ↩
-
Jeff Johnson, “Every unsandboxed app has Full Disk Access if Terminal does”, 22 septembre 2022, avec le code source. Récupéré le 11 octobre 2026 à 17:59 UTC. Terminal doté de l’accès complet au disque « can read or write any restricted files, including the TCC database itself » (son exemple est la base propre à l’utilisateur) ; les apps hors bac à sable peuvent ouvrir dans Terminal des scripts qui s’exécutent avec les autorisations de Terminal ; la technique « doesn’t work for sandboxed apps ». ↩↩↩
-
Examen par l’auteur des apps installées sur son Mac, 11 octobre 2026, 17:33 UTC ; lecture seule. Versions : Claude Code 2.1.296, Codex CLI 0.154.0, Gemini CLI 0.19.4, Hermes Agent 0.14.0 ; Aider et OpenClaw non installés ; VS Code non installé. Chaînes de justification de l’Info.plist et entitlement App Sandbox pour l’app Claude (2.31226.0, aucun entitlement de bac à sable ; chaînes pour les dossiers et les Apple Events), ChatGPT (
com.openai.codex26.715.72359,app-sandboxfalse), Cursor (3.19.7, aucun entitlement), Ghostty 1.3.1 (« A program running within Ghostty would like to use AppleScript. ») et iTerm2 3.6.6 (« An application in iTerm2 wants to use AppleScript. »), aucun des deux en bac à sable. ↩↩↩↩↩↩↩↩ -
Recherches de code GitHub de l’auteur, 11 octobre 2026, 18:12 UTC : la documentation d’Aider pour « sandbox » et son dépôt pour « Full Disk Access », la documentation de Ghostty et le dépôt d’iTerm2 pour « Full Disk Access » ; zéro résultat à chaque fois. La recherche de code n’indexe pas tout. ↩↩↩
-
Documentation de Cursor, “Terminal”, outils de l’agent. Récupéré le 11 octobre 2026 à 17:50 UTC. « Cursor runs shell commands directly in your terminal » ; le Run Mode détermine quand les commandes s’exécutent, quand Cursor demande et quand elles passent dans le bac à sable. ↩↩
-
Documentation d’OpenClaw, “macOS permissions”. Récupéré le 11 octobre 2026 à 17:42 UTC. Accorder l’accès « to the same process context that performs file operations » ; traiter une entrée
node« as broad permission for that Node runtime, not as permission for one npm package » ; déplacer les fichiers dans l’espace de travail d’OpenClaw pour éviter les autorisations par dossier. ↩↩↩ -
Anthropic, Claude Code Docs, “Manage multiple agents with agent view”. Récupéré le 11 octobre 2026 à 17:36 UTC. Sous macOS, l’hôte des sessions en arrière-plan « requests access to protected folders separately from your terminal » ; en cas de « Operation not permitted », accorder Fichiers et dossiers « or enable Full Disk Access for the entry » ; avec l’installateur natif, l’entrée « appears as Claude Code and the grant persists across updates », tandis que les installations via Homebrew ou npm affichent le chemin du binaire. ↩↩↩↩↩↩
-
Anthropic, Claude Code Docs, “Let Claude use your computer from the CLI”. Récupéré le 11 octobre 2026 à 17:49 UTC. Accessibilité et Enregistrement de l’écran ; si la demande persiste, vérifier que « your terminal app is listed and enabled » sous Enregistrement de l’écran. ↩
-
Anthropic, Claude Code Docs, “Configure permissions”. Récupéré le 11 octobre 2026 à 17:35 UTC. Modes d’autorisation
default(libellé Manual),acceptEdits,plan,auto,dontAsk,bypassPermissions; n’utiliserbypassPermissionsque « in isolated environments like containers or VMs where Claude Code can’t cause damage ». Aucune mention de l’accès complet au disque. ↩↩↩ -
OpenAI Help Center, “ChatGPT release notes”, entrée du 20 août 2026. Récupéré le 11 octobre 2026 à 17:47 UTC. Le plugin Apple Messages « can read and search iMessage, SMS, and RCS conversations and prepare or send messages through Messages » ; approbation avant envoi par défaut. ↩
-
MacRumors, Juli Clover, “ChatGPT Can Now Read and Send iMessages on Mac”, 20 août 2026. Récupéré le 11 octobre 2026 à 17:48 UTC. Presse, utilisée comme piste : « ChatGPT needs Full Disk Access in System Settings, as well as access to contact names and automation tools. » ↩
-
OpenAI, documentation de ChatGPT, “Computer Use”. Récupéré le 11 octobre 2026 à 17:48 UTC. Enregistrement de l’écran et Accessibilité sous macOS ; autorisations système distinctes des approbations de l’app ; « File reads, file edits, and shell commands still follow the sandbox and approval settings for the task. » ↩↩
-
Anthropic, Claude Help Center, “Use quick entry with Claude Desktop on Mac”. Récupéré le 11 octobre 2026 à 17:49 UTC. Enregistrement de l’écran « Required to capture screenshots and share application windows » ; Accessibilité « Required for quick entry functionality ». ↩
-
Nous Research, documentation de Hermes Agent, “Computer Use”. Récupéré le 11 octobre 2026 à 17:42 UTC. L’Accessibilité et l’Enregistrement de l’écran vont à « the identity named by hermes computer-use doctor », l’app CuaDriver. ↩
-
Microsoft, documentation de VS Code, “Sandbox Copilot Agent Host sessions”. Récupéré le 11 octobre 2026 à 17:50 UTC.
chat.agent.sandbox.enableddésactivé par défaut, s’appliquant à l’implémentation par défaut des outils de l’Agent Host, « not the Local chat harness or the custom terminal tool override » ; « Sandboxing is not a virtual machine or user-account boundary, and it does not replace endpoint security » ; réseau sortant non bloqué par défaut ;allowDevToolAccessvaut true par défaut. Aucune mention de l’accès complet au disque. ↩↩↩↩↩ -
OpenAI, documentation de Codex, “Agent approvals & security”. Récupéré le 11 octobre 2026 à 17:37 UTC. « By default, the agent runs with network access turned off », avec un bac à sable imposé par le système qui « limits what it can touch (typically to the current workspace) » ; workspace-write le laisse coupé sauf configuration ; Seatbelt et
sandbox-execsous macOS ;--dangerously-bypass-approvals-and-sandbox. ↩↩↩↩↩ -
Nous Research, documentation de Hermes Agent, “Hermes Agent Configuration”. Récupéré le 11 octobre 2026 à 17:41 UTC. Sept backends de terminal ;
local, « The default. Commands run directly on your machine with no isolation » ; les sous-processus locaux conservent le vrai HOME ; Docker et Singularity « use bind mounts (live host filesystem view) » ;docker_volumes« lets you share host directories with the container ». ↩↩↩↩ -
Documentation d’OpenClaw, “Sandboxing”. Récupéré le 11 octobre 2026 à 17:42 UTC. « Sandboxing is off by default » ; la passerelle reste sur l’hôte et seule l’exécution des outils est déplacée ; « not a perfect security boundary » ;
tools.elevatedcomme « an explicit escape hatch ». ↩↩↩↩↩↩ -
OpenAI, code source de Codex au commit 72f999e : seatbelt_base_policy.sbpl et seatbelt.rs. Récupéré le 11 octobre 2026 à 17:37 UTC. Le
(deny default)de la politique de base et « child processes inherit the policy of their parent » ;has_full_disk_read_accessproduisant(allow file-read*)quand aucune racine illisible n’est définie, et sinon une politique de lecture qui les exclut ;sandbox-execfixé sur/usr/bin. ↩↩↩ -
Nous Research, documentation de Hermes Agent, “Security”. Récupéré le 11 octobre 2026 à 17:41 UTC. « Deny rules are a shell-command policy, not a complete shell interpreter or an OS capability sandbox » ; les backends de conteneur comme frontière de sécurité ; backends de conteneur recommandés pour les passerelles en production. ↩↩↩↩
-
Documentation d’OpenClaw, “Modes, scope, and backend”. Récupéré le 11 octobre 2026 à 17:43 UTC.
agents.defaults.sandbox.mode:off(par défaut),non-main,all; backendsdocker(par défaut),podman,ssh,openshell,crabbox; réseau Docker none par défaut. ↩ -
Documentation d’OpenClaw, “Workspace access”. Récupéré le 11 octobre 2026 à 17:43 UTC.
none(par défaut) : les outils lisent et écrivent un espace de travail de bac à sable isolé, et « the agent workspace is not exposed » ;ro;rw. ↩↩ -
Accomplish, “Beltdown: Escaping the Claude Code sandbox”, 11 septembre 2026. Récupéré le 11 octobre 2026 à 18:07 UTC. Avec le bac à sable activé et le mode d’autorisation le plus strict, une commande d’un dépôt s’est exécutée hors du bac à sable sans demande ; corrigé dans Claude Code 2.1.247. ↩↩
-
Accomplish, “Beltdown2: Escaping the Cursor CLI sandbox”, 12 septembre 2026. Récupéré le 11 octobre 2026 à 18:06 UTC. Le profil Seatbelt n’enveloppe que l’outil shell, tandis que le git propre au harnais s’exécute hors bac à sable ; corrigé dans Cursor CLI 2026.08.04-aaa8809. ↩↩
-
Accomplish, “Escaping the OpenAI Codex sandbox, twice”, 15 septembre 2026. Récupéré le 11 octobre 2026 à 18:06 UTC. Deux évasions signalées le 12 août 2026, « Both were fixed inside of eight days » ; dans l’une, launchd lance une application « outside Codex’s process tree ». ↩↩
-
Accomplish, “SharedRoot: Escaping the Claude Cowork sandbox”, 23 juillet 2026. Récupéré le 11 octobre 2026 à 18:03 UTC. Une évasion de la VM vers un montage en lecture-écriture du système de fichiers de l’hôte, lu et écrit « as the logged-in desktop user » ; signalée à Anthropic et close comme « Informative ». Le compte rendu ne teste pas d’emplacements protégés par TCC. ↩
-
Documentation d’OpenClaw, “iMessage deployment patterns”. Récupéré le 11 octobre 2026 à 17:42 UTC. « Use a dedicated Apple ID and macOS user so bot traffic is isolated from your personal Messages profile. » ↩↩
-
Apple, guide d’utilisation du Mac, “Change Users & Groups settings on Mac”. Récupéré le 11 octobre 2026 à 18:08 UTC. Les utilisateurs standard « can install apps and change their own settings, but can’t add other users or change other users’ settings. » ↩