← Wszystkie wpisy

Pełny dostęp do dysku w macOS a agenci AI: co powiedziało Apple

Z przewodników: Claude Code & Codex CLI

Co Apple powiedziało o Pełnym dostępie do dysku (Full Disk Access) i co to oznacza dla agentów AI? 2 października 2026 roku Apple opublikowało krótką wiadomość dla deweloperów, „Updates to Full Disk Access in macOS” (zmiany w Pełnym dostępie do dysku w macOS). Czytamy w niej, że Pełny dostęp do dysku „largely sidesteps” (w dużej mierze omija) mechanizmy chroniące prywatne dane użytkowników, że „Some developers are using Full Disk Access in ways that could put users at risk” (niektórzy deweloperzy używają Pełnego dostępu do dysku w sposób, który może narażać użytkowników) oraz że „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.” (w przyszłości Apple wprowadzi dodatkowe mechanizmy, aby użytkownicy, którzy naprawdę chcą przyznać aplikacji ten nadzwyczajny poziom dostępu, mogli to zrobić wyłącznie bardzo wyraźnym działaniem). Podany powód: „As AI agents become increasingly capable and autonomous, the risks associated with this level of access will grow substantially.” (w miarę jak agenci AI stają się coraz zdolniejsi i bardziej autonomiczni, ryzyko związane z tym poziomem dostępu znacząco wzrośnie).1 Wiadomość nie wymienia żadnej wersji macOS, daty, mechanizmu ani aplikacji. Dla każdego, kto uruchamia agentów na Macu, dziś liczy się to, w jaki sposób agent w ogóle uzyskuje ten dostęp. Agent wiersza poleceń działa pod terminalem, który go uruchomił. W dokumentacji Apple, którą przeczytałem, nie ma na to ogólnej reguły, ale strona podręcznika eslogger mówi, że uruchomienie tego narzędzia „from an app, including Terminal.app or a third-party terminal emulator, requires the respective app to be authorized for Full Disk Access.” (z aplikacji, w tym z Terminal.app lub z emulatora terminala innej firmy, wymaga, aby ta aplikacja miała autoryzację Pełnego dostępu do dysku).2 Inżynier wsparcia Apple ujmuje to na forum tak: „The tool’s responsible code is Terminal.” (kodem odpowiedzialnym za narzędzie jest Terminal).3 Jeśli terminal ma Pełny dostęp do dysku, każdy uruchomiony w nim agent może czytać to, co może czytać terminal: według listy Apple są to Mail, Messages, dane Safari i kopie zapasowe Time Machine.4 Piaskownice (sandboxy) dostawców domyślnie tego nie zmieniają. Na moim Macu odczyt wymagający Pełnego dostępu do dysku udał się z powłoki agenta, udał się ponownie wewnątrz piaskownicy Codex w trybie tylko do odczytu oraz w środowisku sandbox-runtime od Anthropic i został odrzucony dopiero wtedy, gdy reguła piaskownicy blokowała dokładnie ten folder albo gdy uruchomiłem ten sam odczyt poza terminalem.5

TL;DR

  • Co powiedziało Apple. 2 października 2026 roku Apple zakomunikowało deweloperom, że „will introduce additional controls” (wprowadzi dodatkowe mechanizmy), aby przyznanie Pełnego dostępu do dysku wymagało „very explicit user action” (bardzo wyraźnego działania użytkownika), i wskazało agentów AI jako powód, dla którego ryzyko „will grow substantially” (znacząco wzrośnie). Wiadomość nie podaje wersji, daty ani mechanizmu. Uwagi do wydania bety 3 macOS 27.2 nie zawierają na ten temat ani jednego wiersza. W kanale wydań ani w indeksie uwag do wydania z 11 października nie znalazłem wpisu dotyczącego macOS 27.1: kanał wymienia macOS 27.0.1 (28 września), wydany bez uwag do wydania dla deweloperów, a po nim betę 3 macOS 27.2; same bety 27.2 ruszyły 16 września.16789
  • Czym jest Pełny dostęp do dysku. To ustawienie w sekcji Prywatność i ochrona (Privacy & Security), które pozwala aplikacji „access all files on your computer” (uzyskać dostęp do wszystkich plików na komputerze), w tym do danych z Mail, Messages, Safari i aplikacji Dom, do kopii zapasowych Time Machine oraz do „certain administrative settings for all users on this Mac.” (niektórych ustawień administracyjnych wszystkich użytkowników tego Maca). Aplikacja nie może poprosić o nie komunikatem; użytkownik dodaje ją ręcznie albo przyznaje je profil MDM. W tym, co przeczytałem, Apple trzykrotnie wiązało je z narzędziami do kopii zapasowych i obsługi dysków: na WWDC19, na WWDC23 i 2 października.410211121
  • Jak agenci go uzyskują. Na dwa sposoby. Agent wiersza poleceń (Claude Code, Codex CLI, Gemini CLI, Hermes Agent, Aider) jest sprawdzany względem aplikacji, w której działa, więc terminal z Pełnym dostępem do dysku przekazuje mu go dalej; Apple stwierdza to osobno dla poszczególnych narzędzi w stronach podręcznika i ustami swoich inżynierów wsparcia na forach, nigdy jako udokumentowaną ogólną regułę. Aplikacje agentów na komputer mają własne wpisy, a dwóch dostawców agentów, Nous Research w przypadku Hermes oraz OpenClaw, każe użytkownikom przyznać Pełny dostęp do dysku, aby agent mógł czytać Messages.231314
  • Co robią piaskownice. Piaskownice Seatbelt w Claude Code, Codex, Gemini CLI i Cursor ograniczają zapisy, a wszystkie poza domyślnym profilem Gemini CLI ograniczają też sieć; domyślnie pozwalają jednak na szerokie odczyty. Na moim Macu obie uruchomione przeze mnie piaskownice pozostawiły przyznany Pełny dostęp do dysku bez zmian, a zgodnie z opisem obowiązkowej kontroli dostępu podanym przez inżyniera wsparcia Apple żadna nie może go dodać. Piaskownica Claude Code jest domyślnie wyłączona; piaskownica Codex jest włączona. Na moim Macu chroniony odczyt przeszedł przez piaskownicę Codex w trybie tylko do odczytu i przez sandbox-runtime od Anthropic; wewnątrz piaskownic zatrzymał się dopiero wtedy, gdy zablokowałem ten folder z nazwy.151617185
  • Na moim Macu. Lista Pełnego dostępu do dysku ma 75 wierszy, w tym trzy terminale, aplikacje ChatGPT, Cursor i Xcode, 30 plików binarnych Claude Code oznaczonych numerami wersji, node i cztery interpretery Pythona oraz wpis serwera SSH. Powłoka agenta w Ghostty miała działający dostęp; ten sam odczyt z zadania launchd, bez żadnego terminala powyżej, został odrzucony przez TCC.195
  • Co zrobić teraz. Sprawdzić, kto ma ten dostęp; odebrać go terminalowi, w którym uruchamia się agentów; nigdy nie przyznawać go interpreterowi; włączyć piaskownicę dostawcy i zablokować zbędne odczyty; każdego agenta czytającego Messages uruchamiać na osobnym koncie użytkownika macOS albo wcale; zachować zatwierdzanie każdej wysyłki dla wszystkiego, co przemawia w imieniu użytkownika. Każdy krok poniżej ma swoje źródło i swój koszt.420152122
  • Co może się zmienić. Słowa Apple dopuszczają trudniejszą procedurę przyznawania, węższy zakres, inne traktowanie uprawnień przechodzących z aplikacji na uruchamiane przez nią programy oraz zmiany dla zarządzanych Maców. Sekcja 7 zestawia każdą z tych możliwości z pokrewnymi zmianami, które Apple już wprowadziło w macOS 27 i Xcode 27, wraz z warunkiem, od którego każda zależy. Żadna z nich nie jest prognozą.1232425

1. Co Apple powiedziało 2 października, a czego nie powiedziało

Kanał wiadomości dla deweloperów Apple opatrzył ją datą piątek, 2 października 2026 roku, godzina 09:00:19 czasu pacyficznego; sąsiaduje ona z komunikatem z 1 października o wygasającym urzędzie certyfikacji Developer ID oraz z ogłoszeniami z 5 października dotyczącymi iPhone Duo i zasobów App Store.26 Wiadomość ma dwa akapity. Zapisałem ją 11 października i pobrałem ponownie 19 minut później; poza apostrofami (zaokrąglonymi w jednej kopii, prostymi w drugiej) obie kopie są identyczne, więc między moimi dwoma odczytami nic się nie zmieniło.1

Pierwszy akapit przedstawia problem. Apple pisze, że daje deweloperom „powerful APIs to build incredible capabilities into their apps for Apple products, backed by a set of controls designed to protect users’ private data,” (potężne API do budowania niezwykłych funkcji w aplikacjach na produkty Apple, wsparte zestawem mechanizmów chroniących prywatne dane użytkowników), a następnie: „Full Disk Access largely sidesteps these controls in order to allow backup apps to function properly on the Mac.” (Pełny dostęp do dysku w dużej mierze omija te mechanizmy, aby aplikacje do kopii zapasowych mogły prawidłowo działać na Macu). Kolejne zdanie to zarzut: „Some developers are using Full Disk Access in ways that could put users at risk,” (niektórzy deweloperzy używają Pełnego dostępu do dysku w sposób, który może narażać użytkowników), odsłaniając „everything on their systems,” (wszystko, co mają w systemie), co Apple wylicza jako „files, mail, messages, and even browsing history,” (pliki, pocztę, wiadomości, a nawet historię przeglądania), i robiąc to „without users’ full knowledge and understanding.” (bez pełnej wiedzy i zrozumienia użytkowników). Akapit kończy się na osobach, które na nic się nie zgadzały: „For communication apps, this can also compromise the privacy of the people users are communicating with.” (w przypadku aplikacji komunikacyjnych może to również naruszać prywatność osób, z którymi użytkownicy się komunikują).1

Drugi akapit to obietnica i uzasadnienie, cytowane w całości:

„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.”1

(Po polsku: w przyszłości Apple wprowadzi dodatkowe mechanizmy, aby użytkownicy, którzy naprawdę chcą przyznać aplikacji ten nadzwyczajny poziom dostępu, mogli to zrobić wyłącznie bardzo wyraźnym działaniem. Rozwiązanie tej kwestii ma kluczowe znaczenie. W miarę jak agenci AI stają się coraz zdolniejsi i bardziej autonomiczni, ryzyko związane z tym poziomem dostępu znacząco wzrośnie. Apple zobowiązuje się zadbać o to, by użytkownicy jasno rozumieli to ryzyko, zanim przyznają taki dostęp, i mogli podejmować świadome decyzje o własnych danych i prywatności).

Trzy rzeczy w tym akapicie warto przeczytać powoli.

Przedmiotem jest przyznanie, nie API. Każdy czasownik obietnicy dotyczy chwili, w której użytkownik przyznaje dostęp: użytkownicy, „who genuinely wish to grant an app” (którzy naprawdę chcą przyznać go aplikacji), „very explicit user action” (bardzo wyraźne działanie użytkownika), zrozumienie ryzyka „before granting such access” (przed przyznaniem takiego dostępu). Nic w wiadomości nie mówi, że Pełny dostęp do dysku będzie obejmował mniej, że aplikacje, które go mają, zostaną zweryfikowane, ani że zniknie. Moja interpretacja, wyraźnie oznaczona jako taka: wiadomość opisuje zmianę sposobu włączania przełącznika i nie mówi nic, w żadną stronę, o tym, co przełącznik odblokowuje, gdy już jest włączony.

Powodem są agenci, ale celem są aplikacje. Apple wymienia „AI agents” (agentów AI) jeden raz, jako powód, dla którego ryzyko „will grow substantially” (znacząco wzrośnie). Nie twierdzi, że to agenci są dziś aplikacjami nadużywającymi dostępu; tamto zdanie dotyczy „Some developers” (niektórych deweloperów). Nie mówi też, jak mechanizm kontroli przyznawania dostępu „an app” (aplikacji) miałby objąć agenta, który na Macu często w ogóle nie jest aplikacją, tylko programem wiersza poleceń działającym wewnątrz aplikacji. Sekcja 3 dotyczy właśnie tej luki.

„Communication apps” (aplikacje komunikacyjne) to kategoria wyróżniona ze względu na szkodę dla innych. Apple nie wymienia żadnej aplikacji ani żadnego dewelopera. Wiadomość nazywa dwa rodzaje oprogramowania: aplikacje do kopii zapasowych, jako powód istnienia tego dostępu, oraz aplikacje komunikacyjne, jedyny rodzaj, który łączy ze szkodą wykraczającą poza samego użytkownika: dotyczącą osób po drugiej stronie rozmowy, które niczego nie przyznawały. Sekcja 3 pokazuje dwóch dostawców agentów, których integracje z Messages według ich własnej dokumentacji wymagają Pełnego dostępu do dysku; czy Apple miało na myśli któregoś z nich, wiadomość nie mówi, a ja tego nie zakładam.

Czego wiadomość nie mówi

Czytana pod kątem tego, czego brakuje, wiadomość nie zawiera:

  • Wersji macOS ani daty. „Going forward” (w przyszłości) to jedyne określenie czasu.
  • Mechanizmu. Brak projektu komunikatu, uprawnienia (entitlement), API, reguły App Review czy zmiany w zarządzaniu urządzeniami.
  • Słowa o istniejących uprawnieniach. Nie mówi, czy aplikacje znajdujące się już na liście Pełnego dostępu do dysku zachowają swoje miejsce ani czy użytkownicy zostaną zapytani ponownie.
  • Słowa o zarządzanych Macach. Nie wspomina o MDM, choć MDM może dziś przyznawać Pełny dostęp do dysku (sekcja 2).
  • Działań wymaganych od deweloperów. Brak terminu, linku do dokumentacji i daty, do której aplikacje muszą się zmienić.

Szukałem w miejscach, w których Apple umieściłoby mechanizm. Indeks uwag do wydania macOS, odczytany 11 października, wymienia dokładnie dwa wpisy dla macOS 27: „macOS 27.2 Golden Gate Beta 3 Release Notes” i „macOS 27 Golden Gate Release Notes”. Nie znalazłem wpisu dla macOS 27.1 ani w tym indeksie, ani w kanale wydań Apple odczytanym tego samego dnia, który wymienia macOS 27.0.1 (26A434) z datą 28 września, a po nim betę 3 wersji 27.2. Aktualizacja 27.0.1 nie ma strony uwag do wydania dla deweloperów; adres, pod którym taka strona by się znalazła, zwrócił HTTP 404, gdy go sprawdziłem, podobnie jak adresy dla 27.1 i bety 27.1.87 Uwagi do bety 3 wersji 27.2 (beta, build 26B5101f, ma w kanale wydań Apple datę 5 października, trzy dni po wiadomości) mają sześć sekcji (General, AppKit, Display Settings, Notifications, Shortcuts, StoreKit Testing in Xcode) i żadna nie wspomina o Pełnym dostępie do dysku, TCC ani o Prywatności i ochronie; najbliżej tematu jest wiersz w AppKit mówiący, że domyślne ustawienie wersji poglądowej dla deweloperów dotyczące prywatności schowka „has been removed.” (zostało usunięte).67 Październikowy biuletyn Apple dla deweloperów, opublikowany cztery dni po wiadomości, omawia zgłoszenia aplikacji dla iPhone Duo, laboratoria i dokumentację, a o Pełnym dostępie do dysku i agentach nie mówi nic.27 Cztery sesje WWDC26, które Apple umieszcza w kategorii Privacy & Security, w tym jedna zatytułowana „Secure your app: mitigate risks to agentic features” (zabezpiecz swoją aplikację: ograniczanie ryzyka funkcji agentowych), nie wspominają o Pełnym dostępie do dysku.2829

Jedyny inny tekst Apple o agentach i dostępie do plików

Jeden dokument Apple rzeczywiście mówi o uprawnieniach do plików dla agentów AI, ale dotyczy Xcode, a nie macOS. Uwagi do wydania Xcode 27 mówią: „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 zawiera teraz nową warstwę bezpieczeństwa, która monitoruje i kontroluje dostęp do systemu plików przez agentów programistycznych i wszystkie uruchamiane przez nich procesy; można ją włączyć w ustawieniach Coding Intelligence).24 To cały wpis. Nie mówi, na co warstwa pozwala, a co blokuje, czy jest domyślnie włączona (sformułowanie „can be enabled”, czyli „można włączyć”, sugeruje, że nie), jak ma się do TCC ani czy obejmuje agentów spoza Xcode. Te same uwagi opisują serwer MCP w wersji poglądowej, który pozwala „code-signed agents” (agentom podpisanym kodem) korzystać z projektów w drzewie katalogów „for extended periods of time without being asked for additional permissions,” (przez dłuższy czas bez pytania o dodatkowe uprawnienia), oraz flagę --unsafe-always-allow-all-agents, o której Apple pisze, że „is not a recommended configuration for at-desk use.” (nie jest zalecaną konfiguracją do pracy przy biurku).24 Żaden z tych wpisów nie wspomina o Pełnym dostępie do dysku.

Sesja WWDC26 o funkcjach agentowych to w przeczytanych przeze mnie materiałach Apple najbliższy odpowiednik modelu zagrożeń dla agentów. Przywołuje „Simon Willison’s Lethal Trifecta” (zabójczą triadę Simona Willisona), zgodnie z którą użytkownik jest w największym niebezpieczeństwie, gdy agent ma „access to private data, exposure to untrusted content, and the ability to externally communicate.” (dostęp do prywatnych danych, kontakt z niezaufanymi treściami i możliwość komunikowania się na zewnątrz).29 Pełny dostęp do dysku to pierwszy z tych trzech elementów w jednym przełączniku i właśnie tak interpretuję to, dlaczego październikowa wiadomość mówi, że ryzyko rośnie wraz z agentami; to moja interpretacja, a nie uzasadnienie podane przez Apple.

2. Czym jest Pełny dostęp do dysku

Mechanizm słowami Apple

Pełny dostęp do dysku to jeden wiersz w Ustawieniach systemowych (System Settings) > Prywatność i ochrona. Podręcznik użytkownika Maca dla macOS 27 opisuje go tak: „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.” (pozwól aplikacjom na dostęp do wszystkich plików na komputerze, w tym do danych innych aplikacji, na przykład Mail, Messages, Safari i Dom, do danych z kopii zapasowych Time Machine oraz do niektórych ustawień administracyjnych wszystkich użytkowników tego Maca).4 Sąsiednie wiersze brzmią inaczej. Kalendarze, Kontakty, Pliki i foldery (Files and Folders) oraz większość pozostałych kończą się zdaniem „The listed apps have requested access.” (aplikacje z listy poprosiły o dostęp). Wiersz Pełnego dostępu do dysku mówi natomiast: „To add an app, click [the Add button] , select the app in the list, then click Open.” (aby dodać aplikację, kliknij przycisk Dodaj, zaznacz aplikację na liście, a następnie kliknij Otwórz).4 Ta różnica jest sednem sprawy: o pozostałe uprawnienia proszą aplikacje, a tego użytkownik musi szukać sam.

Apple Platform Security mówi to samo w formie tabeli. Strona o kontrolowaniu dostępu aplikacji do plików wymienia „Full internal storage access” (pełny dostęp do pamięci wewnętrznej, czyli jej nazwa tego samego mechanizmu) z krzyżykiem w kolumnie „User prompted by app” (aplikacja pyta użytkownika) i ptaszkiem w kolumnie „User needs to edit system privacy settings” (użytkownik musi zmienić systemowe ustawienia prywatności); o Pliki i foldery natomiast prosi aplikacja.10 Dokumentacja zarządzania urządzeniami, pisana dla administratorów, opisuje tę usługę jako dostęp „to all protected files, including system administration files,” (do wszystkich chronionych plików, w tym plików administracji systemu), a przewodnik wdrażania Apple wymienia ją jako „System Policy All Files”, która „Allows specified apps access to data like Mail, Messages, Safari, Home, Time Machine backups, and certain administrative settings for all users of the Mac.” (daje wskazanym aplikacjom dostęp do danych takich jak Mail, Messages, Safari, Dom, kopie zapasowe Time Machine oraz niektóre ustawienia administracyjne wszystkich użytkowników Maca).3031

Trzy rzeczy, których Apple nie publikuje, warto znać, zanim zacznie się o tym mechanizmie rozumować:

  • Nie ma pełnej listy tego, co chroni. Inżynier Apple Developer Technical Support na forach deweloperów Apple (wpis pracownika, nie dokumentacja) pisze: „The exact list of file system locations protected by MAC is not documented and, as illustrated by the list above, can change over time.” (dokładna lista lokalizacji w systemie plików chronionych przez MAC nie jest udokumentowana i, jak pokazuje powyższa lista, może się z czasem zmieniać).20 MAC oznacza tu obowiązkową kontrolę dostępu (mandatory access control), czyli mechanizm leżący pod spodem.
  • Nie działa per użytkownik. Ten sam inżynier: „Some MAC privileges are per user (Files and Folders) and some are system wide (Full Disk Access).” (niektóre uprawnienia MAC są przypisane do użytkownika, jak Pliki i foldery, a niektóre obejmują cały system, jak Pełny dostęp do dysku).20 Uprawnienie przyznane po zalogowaniu na jedno konto obowiązuje dla danego programu na każdym koncie.
  • TCC to nazwa, której Apple używa, ale prawie jej nie definiuje. Podsystem przechowujący te decyzje to TCC. Nagłówek Endpoint Security w SDK macOS 27 rozwija ją jako „Transparency, Consent, and Control (TCC)”, panelista Apple na WWDC26 powiedział „TCC stands for transparency, consent and control” (TCC to skrót od przejrzystości, zgody i kontroli), a wpis inżyniera wsparcia dodaje, że TCC „has no API surface” (nie ma żadnego API).323320 W bazie danych TCC na moim Macu wiersze Pełnego dostępu do dysku są zapisane pod nazwą usługi kTCCServiceSystemPolicyAllFiles. Ten ciąg nie występuje w żadnym sprawdzonym przeze mnie dokumencie Apple, stronie podręcznika ani nagłówku SDK; udokumentowane nazwy Apple to klucz profilu SystemPolicyAllFiles i kotwica ustawień Privacy_AllFiles.19302534

Jak jest przyznawany

Przez użytkownika, ręcznie. Użytkownik otwiera wiersz Pełnego dostępu do dysku, klika Dodaj i wybiera aplikację.4 Apple nie dokumentuje żadnego sposobu, w jaki aplikacja mogłaby wyświetlić prośbę o to uprawnienie. Dokumentacja Apple oferuje w zamian link, który przenosi użytkownika do właściwego panelu. Dla aplikacji z uprawnieniem klienta Endpoint Security (nagłówek wymaga od wywołujących es_new_client uprawnienia com.apple.developer.endpoint-security.client) nagłówek Endpoint Security mówi: „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,” (jedynym obsługiwanym sposobem sprawdzenia, czy aplikacja ma prawidłową autoryzację TCC dla Pełnego dostępu do dysku, jest wywołanie es_new_client i obsłużenie ES_NEW_CLIENT_RESULT_ERR_NOT_PERMITTED), a także, że „To direct the user to the Full Disk Access section in System Settings,” (aby skierować użytkownika do sekcji Pełnego dostępu do dysku w Ustawieniach systemowych) aplikacja może otworzyć x-apple.systempreferences:com.apple.settings.PrivacySecurity.extension?Privacy_AllFiles w macOS 13 i nowszych.25 Na WWDC19 Apple opisało ten sam wzorzec: aplikacje „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.” (mogą sprawdzić autoryzację za pomocą FileManager lub API poziomu POSIX i w razie potrzeby poprowadzić użytkownika do panelu preferencji bezpieczeństwa i prywatności, gdzie może on zatwierdzić aplikację, jeśli tego chce).11 W 2018 roku deweloper poprosił na forach Apple o „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” (wywołanie API wyświetlające zalogowanemu użytkownikowi prośbę o przyznanie aplikacji Pełnego dostępu do dysku, bo obecnie nie da się wywołać takiego komunikatu, a tego potrzebują aplikacje do kopii zapasowych); inżynier wsparcia Apple odpowiedział: „Please do file an enhancement request.” (proszę zgłosić prośbę o ulepszenie).35 We wszystkim, co przeczytałem na potrzeby tego wpisu, dokumentacja Apple osiem lat później nadal opisuje wyłącznie link.

Istnieje jedno ułatwienie. Od wersji Catalina program, któremu odmówiono dostępu z powodu braku Pełnego dostępu do dysku, pojawia się na liście już wcześniej, wyłączony: „executables that are denied access to files due to a lack of Full Disk Access approval are now prepopulated unchecked.” (pliki wykonywalne, którym odmówiono dostępu do plików z powodu braku zgody na Pełny dostęp do dysku, są teraz wstępnie dodawane jako niezaznaczone).11 Użytkownik nadal musi go włączyć.

Przez profil MDM. Na zarządzanym Macu może go przyznać ładunek Privacy Preferences Policy Control (typ com.apple.TCC.configuration-profile-policy, tylko macOS, od 10.14). Strona podręcznika eslogger mówi to wprost: „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.” (serwery MDM mogą przyznawać autoryzację Pełnego dostępu do dysku za pomocą ładunku Privacy Preferences Policy Control, identyfikowanego typem com.apple.TCC.configuration-profile-policy, i jego klucza słownika usług SystemPolicyAllFiles).236 Gdy klucz Allowed we wpisie danej aplikacji ma wartość true, dokumentacja Apple mówi „access is granted” (dostęp zostaje przyznany) i dodaje: „The user isn’t prompted and can’t change this value.” (użytkownik nie jest pytany i nie może zmienić tej wartości).37 Przykładowy komentarz dla tego ładunku w przewodniku wdrażania Apple brzmi: „Allows my organization’s app to interact with all files without prompting the user.” (pozwala aplikacji mojej organizacji na operacje na wszystkich plikach bez pytania użytkownika).31 To rzeczywista asymetria: w przypadku kamery, mikrofonu, przechwytywania ekranu i nasłuchiwania klawiatury dokumentacja Apple mówi, że profil „can’t grant” (nie może przyznać) dostępu i „can only deny it” (może go tylko odebrać). W odniesieniu do SystemPolicyAllFiles nic takiego nie mówi.30

Dwie strony Apple są w sprawie tego ładunku niezgodne, a jedna zmieniła się w tym roku:

  • Nadzór (supervision). Przewodnik wdrażania mówi: „Supervision is required if you apply this payload using a device management service.” (nadzór jest wymagany, jeśli ładunek jest stosowany przez usługę zarządzania urządzeniami). Tabela dostępności w dokumentacji dla deweloperów podaje przy „Requires supervision” (wymaga nadzoru) wartość N/A.3136 Przytaczam obie i nie wybieram żadnej.
  • macOS 27 wycofał część dotyczącą poszczególnych aplikacji. W bieżącej dokumentacji obiekt Identity, którego używa każdy wpis usługi, łącznie z Pełnym dostępem do dysku, jest oznaczony jako wycofany w macOS 27.0, a przy każdym z jego kluczy widnieje „Deprecated: macOS 27+”. Sam wpis SystemPolicyAllFiles nie ma oznaczenia wycofania.3730 Deklaratywny zamiennik, do którego Apple odsyła w przypadku innych usług, czyli konfiguracja ustawień aplikacji, oferuje domyślne ustawienia prywatności dla dostępności, Bluetooth, kamery, dyktowania, sieci lokalnej, lokalizacji i mikrofonu. Nie ma klucza Pełnego dostępu do dysku, a jego ustawienia domyślne wymagają zgody: „When set, the app displays a consent prompt listing all the configured defaults.” (po ich ustawieniu aplikacja wyświetla prośbę o zgodę z listą wszystkich skonfigurowanych ustawień domyślnych).3839 Apple nie łączy tego z wiadomością z 2 października i ja również tego nie robię; to fakt leżący obok tej historii.

Po co istnieje: aplikacje do kopii zapasowych, trzy razy

W każdym z trzech miejsc, w których znalazłem wypowiedź Apple o tym, dla kogo jest Pełny dostęp do dysku, wskazywało ono ten sam rodzaj oprogramowania. Na WWDC19, opisując dwa poziomy chronionych danych, Apple umieściło „things like mail or messages and Safari browsing history” (takie rzeczy jak poczta, wiadomości i historia przeglądania Safari) na drugim poziomie i stwierdziło, że dane te „have a high barrier to access because the files are typically only accessed by specialized apps such as disk management or backup utilities.” (mają wysoką barierę dostępu, ponieważ z tych plików zwykle korzystają tylko wyspecjalizowane aplikacje, takie jak narzędzia do zarządzania dyskami lub do kopii zapasowych).11 Na WWDC23, przedstawiając ochronę kontenerów aplikacji, Apple powiedziało: „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.” (narzędzia do kopii zapasowych lub zarządzania dyskami, którym już przyznano Pełny dostęp do dysku, nie zobaczą dodatkowego komunikatu w chwili dostępu, ponieważ użytkownicy już zdecydowali się dać tym aplikacjom dostęp do wszystkich plików).12 2 października napisało, że Pełny dostęp do dysku omija mechanizmy ochrony danych „in order to allow backup apps to function properly on the Mac.” (aby aplikacje do kopii zapasowych mogły prawidłowo działać na Macu).1 Agent nie jest aplikacją do kopii zapasowych. W tym jednym zdaniu mieści się całe napięcie.

Skąd się wziął

Większość źródeł Apple datuje Pełny dostęp do dysku na macOS Mojave z 2018 roku. Komunikat prasowy Apple z 4 czerwca 2018 roku mówił: „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.” (nowe zabezpieczenia danych wymagają od aplikacji zgody użytkownika przed użyciem kamery i mikrofonu Maca lub dostępem do danych osobowych, takich jak historia Mail i baza danych Messages).40 Uwagi do wydania Mojave 10.14, wciąż dostępne w sieci, używają nazwy Application Data, którą deweloper na forach Apple w sierpniu 2018 roku określił jako nazwę z wcześniejszych bet: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.” (aplikacje nie mają dostępu do chronionej pamięci, dopóki nie zostaną dodane do kategorii Application Data na karcie Prywatność w Preferencjach systemowych > Ochrona i prywatność).41 Ładunek zarządzania urządzeniami i jego klucz SystemPolicyAllFiles są oznaczone jako wprowadzone w macOS 10.14, a wpis inżyniera wsparcia Apple wymienia „Full Disk Access (macOS 10.14 and later)” (Pełny dostęp do dysku, macOS 10.14 i nowsze).3620

Jedna strona Apple podaje inną datę. Apple Platform Security mówi: „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).” (w macOS 10.13 lub nowszym aplikacje wymagające dostępu do całego urządzenia pamięci masowej muszą zostać jawnie dodane w Ustawieniach systemowych, w macOS 13 lub nowszym, albo w Preferencjach systemowych, w macOS 12 lub starszym).10 Każde inne źródło Apple, które przeczytałem, podaje 10.14. Odnotowuję tę rozbieżność i nie rozstrzygam jej.

Catalina (10.15, wydana 7 października 2019 roku) poszerzyła chroniony zakres. Jej komunikat prasowy mówił: „new data protections require all apps to get permission before accessing user documents,” (nowe zabezpieczenia danych wymagają od wszystkich aplikacji zgody przed dostępem do dokumentów użytkownika), a na WWDC19 Apple dodało do listy wymagającej zgody foldery Biurko, Dokumenty i Pobrane, iCloud Drive, pamięć w chmurze innych firm, woluminy wymienne i woluminy sieciowe, mówiąc, że „the universe of data that requires preapproval for Full Disk Access has been expanded to include trash.” (zakres danych wymagających wcześniejszej zgody w ramach Pełnego dostępu do dysku rozszerzono o kosz).4211 Kolejne wydania dodały ochronę kontenerów aplikacji (macOS 14) i ochronę kontenerów grup aplikacji (macOS 15), obie dotyczące aplikacji czytających dane innych aplikacji; w przypadku pierwszej Apple zapowiedziało, że posiadacze Pełnego dostępu do dysku nie zobaczą dodatkowego komunikatu.2012

macOS 27 znów przesunął się w tym samym kierunku. Jego uwagi do wydania mówią, że dostęp do „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,” (kontenerów danych aplikacji i kontenerów grup aplikacji innych zespołów deweloperskich nie powoduje już prośby o autoryzację; taki dostęp jest domyślnie odmawiany, a użytkownik może nim zarządzać w ustawieniach Prywatności i ochrony), że „XProtect may now restrict access to app data that is commonly targeted by malicious software,” (XProtect może teraz ograniczać dostęp do danych aplikacji, na które często celuje złośliwe oprogramowanie), a w sekcji TCC: „Apps can no longer access the local TCC database directly.” (aplikacje nie mogą już bezpośrednio korzystać z lokalnej bazy danych TCC).23 W jednym ze znanych problemów własne uwagi Apple zalecają Pełny dostęp do dysku jako rozwiązanie tymczasowe: gdy procesowi bez identyfikatora pakietu nie można dać dostępu do kontenera innego zespołu, „Workaround: Consider if the access is necessary. If required, grant Full Disk Access to the process for the duration of the requirement.” (obejście: rozważ, czy dostęp jest konieczny; jeśli tak, przyznaj procesowi Pełny dostęp do dysku na czas trwania tej potrzeby).23 Wpis o uwagach do wydania macOS 27 i wpis o kontenerach innych zespołów omawiają te zmiany w całości.

3. Jak agent go uzyskuje

Agent AI na Macu może zyskać możliwość czytania tego, co chroni Pełny dostęp do dysku, na dwa sposoby. Albo działa wewnątrz aplikacji, która ma to uprawnienie, albo sam jest aplikacją, która je ma. Pierwszy sposób to droga większości agentów wiersza poleceń i nikt nie musi niczego klikać dla samego agenta.

Droga przez terminal

Gdy wpisuje się claude lub codex w terminalu, macOS nie pyta, czy Claude Code lub Codex mogą czytać wiadomości w Messages. Pyta, czy może terminal. Apple nazywa sprawdzany program „responsible” (odpowiedzialnym), a w żadnej znalezionej przeze mnie dokumentacji Apple reguła jego wyboru nie jest sformułowana ogólnie. Opublikowało natomiast zestaw konkretnych stwierdzeń, które wskazują ten sam kierunek:

  • eslogger(1), dostarczany z macOS 27: „eslogger requires the responsible process to have been authorized for Full Disk Access,” (eslogger wymaga, aby proces odpowiedzialny miał autoryzację Pełnego dostępu do dysku) oraz „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.” (uruchomienie eslogger z aplikacji, w tym z Terminal.app lub emulatora terminala innej firmy, wymaga, aby ta aplikacja miała autoryzację Pełnego dostępu do dysku).2
  • tmutil(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.” (uprawnienia Pełnego dostępu do dysku można przyznać aplikacji terminala używanej do uruchamiania tmutil na karcie Prywatność w panelu Ochrona i prywatność).43
  • fdesetup(8): od macOS 10.15 włączenie FileVault z wiersza poleceń wymaga, obok innych możliwości, by „The responsible application is authorized for” (aplikacja odpowiedzialna miała autoryzację) Pełnego dostępu do dysku.44
  • Dokumentacja zarządzania urządzeniami Apple: „Helper tools embedded within an application bundle automatically inherit the permissions of their enclosing app bundle.” (narzędzia pomocnicze osadzone w pakiecie aplikacji automatycznie dziedziczą uprawnienia pakietu, w którym się znajdują).37

Najbardziej bezpośrednie stwierdzenie pochodzi od Quinna, inżyniera Apple Developer Technical Support, który w czerwcu 2024 roku odpowiadał w wątku na forum o narzędziach wiersza poleceń i Pełnym dostępie do dysku. To wpis pracownika na stronie Apple, a nie dokumentacja, i za każdym razem, gdy z niego korzystam, tak go oznaczam. Wymienia cztery przypadki. Dla narzędzia uruchomionego przez użytkownika z Terminala: „The tool’s responsible code is Terminal.” (kodem odpowiedzialnym za narzędzie jest Terminal). Dla narzędzia uruchomionego przez SSH: „The tool’s responsible code is the SSH server.” (kodem odpowiedzialnym za narzędzie jest serwer SSH). Dla programu pomocniczego uruchomionego przez aplikację: „The system treats the app as the responsible code.” (system traktuje aplikację jako kod odpowiedzialny). Dla zadania launchd instalacja przez SMAppService czyni aplikację kodem odpowiedzialnym; w przeciwnym razie, jak pisze, lista właściwości zadania powinna wskazywać aplikację w AssociatedBundleIdentifiers.3 W tym samym wątku dodaje zastrzeżenie istotne dla każdego, kto chce na tym opierać plany: „The exact algorithm it uses for this is not documented, has changed in the past, and may well change in the future.” (dokładny algorytm nie jest udokumentowany, zmieniał się w przeszłości i może się zmienić w przyszłości).3 Zapytany w innym wątku, czy TCC „is looking for parent process rights” (sprawdza uprawnienia procesu nadrzędnego), odmówił wchodzenia w szczegóły, ponieważ jest to „both complex and subject to change.” (zarówno złożone, jak i podlegające zmianom).45

Deweloper, który założył wątek z czerwca 2024 roku, zmierzył już wcześniej ten efekt: „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.” (gdy program jest zbudowany i uruchomiony w Terminal.app, a Terminal ma FDA, plik otwiera się poprawnie; gdy natomiast FDA zostanie odebrany Terminalowi i przyznany programowi, pojawia się błąd z powodu niewystarczających uprawnień).3 To relacja dewelopera, a nie Apple. Jej pierwsza połowa zgadza się z tym, co zmierzyłem na własnym Macu (sekcja 5): odczyt działał, gdy uprawnienie było w łańcuchu uruchomienia terminala. Drugiej połowy nie testowałem; moja próba kontrolna zmieniała miejsce uruchomienia odczytu, a nie to, która aplikacja miała uprawnienie.

Wynikają z tego dwie konsekwencje i żadna nie dotyczy wyłącznie agentów.

Wszystko, co uruchamia się w tym terminalu, dostaje to uprawnienie. Agent, uruchamiana przez niego powłoka, git, npm install, narzędzie do testów, serwer MCP uruchomiony przez stdio, skrypt napisany przez model minutę temu: jeśli działają pod terminalem, TCC sprawdza terminal. Inżynier wsparcia Apple mówi to wprost w odniesieniu do interpreterów: „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.” (jeśli ma się skrypt, który musi operować na plikach na biurku, nie chce się dawać tego uprawnienia interpreterowi, bo wtedy mógłby to robić każdy skrypt).20 Terminal z Pełnym dostępem do dysku to ten sam problem o poziom wyżej.

Inne aplikacje mogą go pożyczyć. W 2022 roku Jeff Johnson opublikował tekst „Every unsandboxed app has Full Disk Access if Terminal does” (każda aplikacja bez piaskownicy ma Pełny dostęp do dysku, jeśli ma go Terminal) wraz z kodem źródłowym. Jego teza: „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.” (aplikacje bez piaskownicy mogą otwierać w Terminalu wykonywalne skrypty powłoki, a te skrypty działają nie z uprawnieniami aplikacji, która je otworzyła, lecz z uprawnieniami Terminala, czyli z Pełnym dostępem do dysku). Technika ta, jak zaznacza, „doesn’t work for sandboxed apps.” (nie działa w przypadku aplikacji w piaskownicy).46 Każda aplikacja agentowa na komputer, którą sprawdziłem na swoim Macu, działa bez piaskownicy: aplikacja Claude i Cursor nie mają uprawnienia App Sandbox, a aplikacja ChatGPT ma je ustawione na false.47 Moja interpretacja, a nie twierdzenie Johnsona: na Macu, na którym terminal ma Pełny dostęp do dysku, każda z tych aplikacji mogłaby dotrzeć do niego w ten sam sposób.

Co mówią same terminale? Nie znalazłem dokumentacji Ghostty ani iTerm2, która mówiłaby, co dostają procesy potomne, gdy terminal ma Pełny dostęp do dysku: wyszukiwanie tej frazy w kodzie na GitHubie w dokumentacji Ghostty i w repozytorium iTerm2 nic nie zwróciło. W dokumentacji Terminala Apple i Warp nie szukałem w ten sam sposób.48 Same aplikacje pokazują natomiast, w czyim imieniu mówią. Ich komunikaty z uzasadnieniem (purpose strings), odczytane z zainstalowanych aplikacji na moim Macu, są pisane w imieniu tego, co działa w ich wnętrzu: komunikat AppleScript w Ghostty brzmi „A program running within Ghostty would like to use AppleScript,” (program działający w Ghostty chce użyć AppleScript), a w iTerm2 „An application in iTerm2 wants to use AppleScript.” (aplikacja w iTerm2 chce użyć AppleScript).47 macOS nie ma komunikatu z uzasadnieniem dla Pełnego dostępu do dysku, bo aplikacje nie mogą o niego prosić, ale te komunikaty pokazują konstrukcję: to o terminal pyta się użytkownika.

Edytory z wbudowanymi agentami działają tak samo, o jeden poziom dalej. Dokumentacja Cursor mówi: „Cursor runs shell commands directly in your terminal,” (Cursor uruchamia polecenia powłoki bezpośrednio w terminalu), co w edytorze rozumiem jako zintegrowany terminal samego Cursor.49 Zgodnie z opisanym wyżej przez inżyniera wsparcia przypadkiem programu pomocniczego (narzędzie uruchomione przez aplikację jest przypisywane aplikacji) to Cursor jest wtedy aplikacją, którą TCC widzi przy tych poleceniach. To mój wniosek; dokumentacja Cursor nie mówi, której aplikacji TCC przypisuje dostęp.318

Droga przez SSH

Jeśli steruje się agentem przez SSH, kodem odpowiedzialnym nie jest terminal po drugiej stronie, tylko serwer SSH. Inżynier wsparcia 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.” (kodem odpowiedzialnym za narzędzie jest serwer SSH; można mu nadać Pełny dostęp do dysku w Ustawieniach systemowych > Ogólne > Udostępnianie > Logowanie zdalne > zezwól na pełny dostęp do dysku użytkownikom zdalnym).3 Strona podręcznika eslogger wymienia to samo ustawienie.2 Przewodnik konfiguracji OpenClaw pokazuje klienta po stronie SSH tak, jak widnieje w TCC, /usr/libexec/sshd-keygen-wrapper, i dokładnie ten klient figuruje na liście Pełnego dostępu do dysku na moim Macu.1419

Co każą robić dostawcy agentów

Dwa projekty agentowe każą użytkownikom, we własnej dokumentacji, przyznać Pełny dostęp do dysku, aby agent mógł czytać Messages:

  • Hermes Agent (Nous Research). Umiejętność (skill) Apple iMessage jest oznaczona jako „Bundled (installed by default),” (dołączona, instalowana domyślnie), a jej wymagania wstępne brzmią: „Grant Full Disk Access for terminal (System Settings → Privacy → Full Disk Access)” (przyznaj terminalowi Pełny dostęp do dysku) oraz „Grant Automation permission for Messages.app when prompted.” (przyznaj Messages.app uprawnienie Automatyzacji, gdy pojawi się prośba).13 To polecenie dostawcy, by dać Pełny dostęp do dysku terminalowi, a więc wszystkiemu, co w nim działa. Przewodnik po Hermes omawia resztę agenta.
  • OpenClaw. Jego konfiguracja iMessage mówi: „Full Disk Access is required for the process context running OpenClaw/imsg” (kontekst procesu, w którym działa OpenClaw, wymaga Pełnego dostępu do dysku, ze względu na bazę danych Messages), „Automation permission is required to send messages through Messages.app,” (uprawnienie Automatyzacji jest wymagane do wysyłania wiadomości przez Messages.app) oraz „Permissions are granted per process context.” (uprawnienia przyznaje się dla kontekstu procesu).14 Ta sama strona mówi, że do zaawansowanych działań, takich jak reakcje, edycje i cofanie wysłania, „System Integrity Protection must be disabled,” (trzeba wyłączyć System Integrity Protection), podczas gdy podstawowe wysyłanie i odbieranie działa bez tego.14 Strona OpenClaw o uprawnieniach macOS podaje tę samą regułę dla folderów Biurko, Dokumenty i Pobrane: „grant access to the same process context that performs file operations (for example Terminal/iTerm, LaunchAgent-launched app, or SSH process).” (przyznaj dostęp temu samemu kontekstowi procesu, który wykonuje operacje na plikach, na przykład Terminal/iTerm, aplikacji uruchamianej przez LaunchAgent lub procesowi SSH).50

Anthropic dokumentuje węższy przypadek. Sesje w tle Claude Code, według dokumentacji agent view, uruchamiają proces hosta, który „requests access to protected folders separately from your terminal,” (prosi o dostęp do chronionych folderów niezależnie od terminala), a jeśli sesja w tle zgłasza „Operation not permitted” w chronionej lokalizacji, rozwiązaniem jest „grant access in System Settings under Privacy & Security > Files and Folders, or enable Full Disk Access for the entry.” (przyznanie dostępu w Ustawieniach systemowych, w sekcji Prywatność i ochrona > Pliki i foldery, albo włączenie Pełnego dostępu do dysku dla tego wpisu). Przy natywnym instalatorze, jak czytamy, „the entry appears as Claude Code and the grant persists across updates.” (wpis widnieje jako Claude Code, a uprawnienie przetrwa aktualizacje).51 W przypadku korzystania z komputera (computer use) Anthropic każe użytkownikom sprawdzić, czy „your terminal app is listed and enabled” (aplikacja terminala figuruje na liście i jest włączona) w sekcji Nagrywanie ekranu (Screen Recording), co znów jest drogą przez terminal, tyle że dla innego uprawnienia.52 Żadna ze stron Anthropic o piaskownicy, uprawnieniach czy bezpieczeństwie nie wspomina o Pełnym dostępie do dysku.1553

Droga przez aplikację na komputer

Aplikacje agentowe na komputer mają własne wiersze w Prywatności i ochronie, a to, o co proszą, bywa różne:

  • ChatGPT na Maca (na moim Macu jej identyfikator pakietu to com.openai.codex). 20 sierpnia 2026 roku OpenAI dodało 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.” (na Macach z Apple silicon plugin Apple Messages w aplikacji ChatGPT na komputer może czytać i przeszukiwać rozmowy iMessage, SMS i RCS oraz przygotowywać lub wysyłać wiadomości przez Messages).54 Przewodnik OpenAI po pluginach mówi tylko: „Grant the requested macOS permissions before ChatGPT reads Messages.” (przyznaj wymagane uprawnienia macOS, zanim ChatGPT zacznie czytać Messages).22 Nie znalazłem żadnej strony OpenAI, która nazywałaby to uprawnienie. MacRumors, relacjonując premierę, napisał, że „For the Messages integration to work, ChatGPT needs Full Disk Access in System Settings, as well as access to contact names and automation tools” (aby integracja z Messages działała, ChatGPT potrzebuje Pełnego dostępu do dysku w Ustawieniach systemowych, a także dostępu do nazw kontaktów i narzędzi automatyzacji); to prasa, użyta tu jako trop, a nie jako stanowisko OpenAI.55 Na moim Macu aplikacja ChatGPT figuruje w tabeli Pełnego dostępu do dysku.19 Przewodnik OpenAI zawiera też ostrzeżenie, które sam umieściłbym na pierwszym miejscu: „Persistent approval removes your final chance to review a message before ChatGPT sends it as you.” (stała zgoda odbiera ostatnią szansę przejrzenia wiadomości, zanim ChatGPT wyśle ją w imieniu użytkownika).22 Dla Computer Use OpenAI prosi o Nagrywanie ekranu i Dostępność (Accessibility) i pisze: „File reads, file edits, and shell commands still follow the sandbox and approval settings for the task.” (odczyty i edycje plików oraz polecenia powłoki nadal podlegają ustawieniom piaskownicy i zatwierdzania dla danego zadania).56
  • Claude na Maca. Nie znalazłem żadnej strony Anthropic z prośbą o Pełny dostęp do dysku. Plik Info.plist aplikacji na moim Macu deklaruje komunikaty z uzasadnieniem między innymi dla folderów Biurko, Dokumenty i Pobrane oraz dla Apple Events („Claude needs this so commands you run in Claude can control other apps”, czyli Claude potrzebuje tego, aby polecenia uruchamiane w Claude mogły sterować innymi aplikacjami).47 Jej funkcja szybkiego wprowadzania prosi o Nagrywanie ekranu i Dostępność.57
  • Cursor. Żadna z dwóch zapisanych przeze mnie stron Cursor, Run Modes i Terminal, nie prosi o Pełny dostęp do dysku; Cursor figuruje w tabeli na moim Macu.191849
  • Korzystanie z komputera w Hermes Agent. Dostępność i Nagrywanie ekranu przyznaje się tożsamości, którą wskazuje hermes computer-use doctor, czyli osobnej aplikacji sterującej, a nie terminalowi.58
  • VS Code z agentami. Nie jest zainstalowany na moim Macu; nie znalazłem żadnej strony Microsoft o Pełnym dostępie do dysku dla jego agentów.4759

Agenci według drogi

Agent Jak dociera do chronionych danych Pełny dostęp do dysku w dokumentacji dostawcy Piaskownica dostawcy w macOS, domyślnie
Claude Code (CLI) Droga przez terminal; host sesji w tle może mieć własny wpis Tylko uwaga o sesjach w tle Seatbelt; domyślnie wyłączona
Codex CLI Droga przez terminal Nic nie znalazłem Seatbelt; włączona, workspace-write, sieć wyłączona
ChatGPT na Maca (Codex, Work, Messages, Computer Use) Własne wpisy „Requested macOS permissions” (wymagane uprawnienia macOS); Pełny dostęp do dysku nazywa tylko prasa Piaskownica i zasady zatwierdzania Codex dla kroków pluginów i powłoki; Messages i Computer Use potrzebują też uprawnień macOS
Claude na Maca Własne wpisy Nic nie znalazłem Nieudokumentowana dla działań lokalnych na stronach, które przeczytałem
Hermes Agent Droga przez terminal Tak: przyznać go terminalowi dla iMessage Brak backendu Seatbelt; domyślnie local, „no isolation” (bez izolacji)
OpenClaw Kontekst procesu bramy (gateway) Tak: wymagany dla kanału iMessage Backendy piaskownicy dla narzędzi (domyślnie Docker); domyślnie wyłączona
Gemini CLI Droga przez terminal Nic nie znalazłem Profile Seatbelt; wyłączona, dopóki się jej nie włączy
Aider Droga przez terminal Nic nie znalazłem Brak udokumentowanej
Cursor (agent i CLI) Edytor: terminal Cursor, czyli Cursor; CLI: droga przez terminal Nic nie znalazłem Seatbelt; odczyty poza przestrzenią roboczą domyślnie dozwolone
Agenci VS Code Terminal edytora, czyli VS Code Nic nie znalazłem Piaskownica Agent Host (tylko sesje Copilot Agent Host); domyślnie wyłączona

Źródła dla każdej komórki znajdują się w sekcjach 3 i 4.51166022561361146217481859 Wpisy w drugiej kolumnie dla obu edytorów to mój wniosek z opisanego przez inżyniera wsparcia przypadku programu pomocniczego, a nie stwierdzenia dostawców. To trzecia kolumna pokazuje wzorzec. Dwaj dostawcy, którzy wymieniają Pełny dostęp do dysku, robią to, by dotrzeć do Messages, czyli danych, których ujawnienie według Apple dotyka też „the people users are communicating with” (osób, z którymi użytkownicy się komunikują); Apple nie wymienia żadnego agenta, a ja nie twierdzę, że miało na myśli tych dwóch. Każdy inny agent wiersza poleceń dociera do tych samych danych, jeśli w ogóle do nich dociera, bez wzmianki w dokumentacji, że uprawnienie terminala przechodzi na niego, ponieważ uprawnienie należy do terminala.

4. Co robią piaskownice dostawców, a czego nie potrafią

Dwie warstwy, które nic o sobie nie wiedzą

Każdy agent wiersza poleceń, którego dokumentację piaskownicy dla macOS przeczytałem, buduje ją na Seatbelt, systemowej piaskownicy procesów, sterowanej przez sandbox-exec: Claude Code („sandboxing uses the built-in Seatbelt framework”, piaskownica korzysta z wbudowanego frameworka Seatbelt), Codex („On macOS, sandboxing works out of the box using the built-in Seatbelt framework”, w macOS piaskownica działa od razu dzięki wbudowanemu frameworkowi Seatbelt), Gemini CLI („Lightweight, built-in sandboxing using”, lekka, wbudowana piaskownica oparta na sandbox-exec) i Cursor („Cursor uses Seatbelt through”, Cursor używa Seatbelt przez sandbox-exec).15161718 Pełny dostęp do dysku to TCC. Inżynier wsparcia Apple opisuje tę relację: „App Sandbox and the mandatory access control system are both implemented using macOS’s sandboxing infrastructure,” (App Sandbox i system obowiązkowej kontroli dostępu są zaimplementowane na infrastrukturze piaskownicy macOS), ale obowiązkowa kontrola dostępu „is mandatory; it’s not an opt-in like the App Sandbox.” (jest obowiązkowa; nie włącza się jej dobrowolnie, jak App Sandbox).20

W praktyce ma to dwie strony. To, że profil Seatbelt nie może dać procesowi uprawnienia TCC, którego nie ma jego aplikacja odpowiedzialna, wynika z opisu inżyniera wsparcia Apple, według którego wszystkie procesy, „including those running as root,” (w tym działające jako root) podlegają MAC; tego nie testowałem. Drugą stronę zmierzyłem na swoim Macu w sekcji 5: żadna piaskownica nie zmieniła uprawnienia terminala, a profil zablokował chroniony odczyt tylko wtedy, gdy sam blokował tę ścieżkę, samodzielnie i w sytuacji, w której TCC by na odczyt pozwolił.205 Agent w piaskownicy wewnątrz terminala z Pełnym dostępem do dysku wciąż może czytać Messages, jeśli jego profil pozwala tam na odczyt, a większość profili domyślnych pozwala na odczyt niemal wszędzie.

Jedna pułapka nazewnicza: kod źródłowy Codex ma funkcję o nazwie has_full_disk_read_access, a gdy zwraca ona true i nie skonfigurowano żadnych nieczytelnych katalogów głównych, wygenerowany profil Seatbelt pozwala na file-read* wszędzie; gdy takie katalogi są skonfigurowane, buduje zasadę odczytu, która je wyklucza.63 To określenie Codex na szeroką zasadę odczytu w Seatbelt. Nie jest to Pełny dostęp do dysku w rozumieniu Apple i go nie przyznaje.

Claude Code (Anthropic)

  • Piaskownica: domyślnie wyłączona. „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.” (piaskownica jest domyślnie wyłączona; aby ją włączyć, należy uruchomić /sandbox w sesji albo ustawić sandbox.enabled na true w pliku ustawień).15
  • Ustawienia domyślne po włączeniu. Zapisy trafiają do „The working directory, a per-user temp directory, and directories you’ve added.” (katalogu roboczego, katalogu tymczasowego danego użytkownika i dodanych katalogów). Odczyty obejmują „Most of the machine, including credential files.” (większość komputera, łącznie z plikami z danymi uwierzytelniającymi). Sieć: „No direct route out” (brak bezpośredniego wyjścia); połączenia przechodzą przez lokalne proxy, którego lista dozwolonych domen „start empty.” (początkowo jest pusta).15 Piaskownica jest zbudowana na „the open source @anthropic-ai/sandbox-runtime package.” (otwartoźródłowym pakiecie @anthropic-ai/sandbox-runtime).15
  • Dwa tryby piaskownicy. Automatyczne zatwierdzanie i zwykłe uprawnienia; „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.” (w obu piaskownica egzekwuje te same ograniczenia systemu plików i sieci; różnica polega tylko na tym, czy polecenia w piaskownicy są zatwierdzane automatycznie, czy wymagają wyraźnej zgody).15
  • Co jest poza nią. Wbudowane narzędzia plikowe i sieciowe „follow permission rules instead. A denyRead entry doesn’t stop the Read tool,” (podlegają zamiast tego regułom uprawnień; wpis denyRead nie zatrzymuje narzędzia Read), a „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.” (hooki poleceń, lokalne serwery MCP, monitory pluginów, serwery LSP i polecenia pomocnicze, takie jak polecenie paska stanu i apiKeyHelper, działają z pełnym dostępem użytkownika).15 Polecenia, które się nie powiodą, mogą zostać ponowione poza piaskownicą, chyba że allowUnsandboxedCommands ma wartość false.15
  • Zawężanie odczytów. sandbox.filesystem.denyRead i allowRead albo, aby „deny sandboxed commands read access to home directories and mounted volumes while keeping the working directories readable, set permissions.blockReadsOutsideWorkingDirectories.” (odebrać poleceniom w piaskownicy prawo odczytu katalogów domowych i zamontowanych woluminów, zachowując możliwość odczytu katalogów roboczych, należy ustawić permissions.blockReadsOutsideWorkingDirectories).15
  • Apple Events. „The sandbox blocks Apple Events by default,” (piaskownica domyślnie blokuje Apple Events), a włączenie allowAppleEvents „removes code-execution isolation.” (usuwa izolację wykonywania kodu).15
  • Tryby uprawnień, osobny mechanizm: default (z etykietą Manual), acceptEdits, plan, auto, dontAsk i bypassPermissions. O ostatnim Anthropic pisze: „Only use this mode in isolated environments like containers or VMs where Claude Code can’t cause damage.” (tego trybu należy używać tylko w odizolowanych środowiskach, takich jak kontenery lub maszyny wirtualne, w których Claude Code nie może wyrządzić szkód).53

Przewodnik po Claude Code omawia pliki ustawień, w których znajdują się te klucze.

Codex CLI (OpenAI)

  • Piaskownica: domyślnie włączona. „The default permissions mode applies sandboxing automatically,” (domyślny tryb uprawnień automatycznie stosuje piaskownicę) oraz „The sandbox applies to spawned commands, not just to built-in file operations.” (piaskownica obejmuje uruchamiane polecenia, a nie tylko wbudowane operacje na plikach).16
  • Trzy tryby. read-only: „The agent can inspect files, but it can’t edit files or run commands without approval.” (agent może przeglądać pliki, ale nie może ich edytować ani uruchamiać poleceń bez zgody). workspace-write: agent może „read files, edit within the workspace, and run routine local commands inside that boundary. This is the default low-friction mode for local work.” (czytać pliki, edytować w obrębie przestrzeni roboczej i uruchamiać rutynowe polecenia lokalne w tych granicach; to domyślny, mało uciążliwy tryb pracy lokalnej). danger-full-access: „The agent runs without sandbox restrictions.” (agent działa bez ograniczeń piaskownicy).16
  • Sieć domyślnie wyłączona. „By default, the agent runs with network access turned off,” (domyślnie agent działa z wyłączonym dostępem do sieci), a workspace-write „keeps network access turned off unless you enable it in your configuration.” (utrzymuje wyłączony dostęp do sieci, chyba że włączy się go w konfiguracji).60
  • Pełny dostęp. OpenAI definiuje go jako sandbox_mode = "danger-full-access" razem z approval_policy = "never", a menu aplikacji na komputer opisuje go jako nieograniczony dostęp do „the internet and any file on your computer.” (internetu i każdego pliku na komputerze).16
  • Dokumentacja nie precyzuje odczytów. Jedyne stwierdzenie OpenAI o zakresie mówi, że piaskownica „limits what it can touch (typically to the current workspace).” (ogranicza to, czego agent może dotknąć, zwykle do bieżącej przestrzeni roboczej).60 Nie podaje zakresu odczytu dla read-only ani workspace-write, a na moim Macu przebieg 2 (read-only) i przebieg 2c (moja konfiguracja, bez ustawionego trybu) odczytały plik położony daleko poza przestrzenią roboczą, taki, który wymaga Pełnego dostępu do dysku.5 Kod źródłowy pokazuje dlaczego: bazowa zasada Seatbelt zaczyna się od (deny default) i zaznacza, że „child processes inherit the policy of their parent,” (procesy potomne dziedziczą zasadę rodzica), a przy pełnym dostępie do odczytu i braku nieczytelnych katalogów głównych profil dodaje (allow file-read*).63 Zawężanie jest możliwe: profile uprawnień przyjmują "read", "write" lub "deny" dla każdej ścieżki, a administratorzy mają permissions.filesystem.deny_read w requirements.toml, czyli „Admin-enforced filesystem read denials” (narzucane przez administratora blokady odczytu systemu plików); OpenAI pisze, że „users cannot weaken them with local config.” (użytkownicy nie mogą ich osłabić lokalną konfiguracją).21

Przewodnik po Codex szczegółowo omawia profile i zasady zatwierdzania.

Hermes Agent (Nous Research)

  • Brak piaskownicy macOS; siedem backendów. „Hermes supports seven terminal backends” (Hermes obsługuje siedem backendów terminala): local, docker, ssh, modal, daytona, vercel_sandbox i singularity.61
  • Domyślnie: local, bez izolacji. „The default. Commands run directly on your machine with no isolation,” (domyślny; polecenia działają bezpośrednio na komputerze, bez izolacji) oraz „By default, local tool subprocesses keep your real OS-user HOME.” (domyślnie lokalne podprocesy narzędzi zachowują prawdziwy katalog HOME użytkownika systemu).61
  • Reguły poleceń to nie piaskownica. „Deny rules are a shell-command policy, not a complete shell interpreter or an OS capability sandbox.” (reguły blokujące to zasada dotycząca poleceń powłoki, a nie pełny interpreter powłoki ani piaskownica uprawnień systemu operacyjnego).64
  • Granicą są kontenery. „For production gateway deployments, use docker, modal, daytona, or vercel_sandbox backend to isolate agent commands from your host system.” (we wdrożeniach produkcyjnych bramy należy używać backendu docker, modal, daytona lub vercel_sandbox, aby odizolować polecenia agenta od systemu hosta).64

Przy domyślnym backendzie agent Hermes czyta wszystko, co może czytać jego terminal, a jego dołączona umiejętność iMessage każe dać temu terminalowi Pełny dostęp do dysku.13

OpenClaw

  • Piaskownica: domyślnie wyłączona i tylko dla narzędzi. „Sandboxing is off by default,” (piaskownica jest domyślnie wyłączona) oraz „The Gateway process always stays on the host; only tool execution moves into the sandbox when enabled.” (proces Gateway zawsze pozostaje na hoście; po włączeniu do piaskownicy przenosi się tylko wykonywanie narzędzi). OpenClaw mówi o tym otwarcie: „This is not a perfect security boundary, but it materially limits filesystem and process access when the model does something dumb.” (to nie jest doskonała granica bezpieczeństwa, ale istotnie ogranicza dostęp do systemu plików i procesów, gdy model zrobi coś głupiego).62
  • Tryby. agents.defaults.sandbox.mode przyjmuje off (domyślnie), non-main lub all; domyślnym backendem jest docker, a alternatywami podman, ssh, openshell i crabbox; sieć Dockera domyślnie ma wartość none.65
  • Dostęp do przestrzeni roboczej. none (domyślnie), ro lub rw.66
  • Furtka. tools.elevated to według OpenClaw „an explicit escape hatch” (jawna furtka), która uruchamia exec poza piaskownicą.62

Pełny dostęp do dysku kanału iMessage należy do kontekstu procesu bramy, który nigdy nie trafia do piaskownicy.1462

Pozostali w skrócie

  • Gemini CLI. Wyłączona, dopóki nie włączy się jej przez -s, zmienną środowiskową lub ustawienie. W macOS domyślny profil Seatbelt, permissive-open, „denies operations by default; confines writes to the project directory while allowing broad file reads and network access” (domyślnie blokuje operacje; ogranicza zapisy do katalogu projektu, pozwalając na szerokie odczyty plików i dostęp do sieci); sam plik profilu zawiera (allow file-read*). strict-open i strict-proxied dodają ograniczenia odczytu.17
  • Cursor. Seatbelt dla „the full subprocess tree” (całego drzewa podprocesów); sieć „Blocked by default” (domyślnie zablokowana); ale Read Access ma domyślnie wartość System: „The agent can read files outside the workspace without approval. This is the default.” (agent może bez zgody czytać pliki spoza przestrzeni roboczej; to ustawienie domyślne). Samo ustawienie Read Access wymaga Cursor 3.23 lub nowszego.18
  • VS Code. chat.agent.sandbox.enabled, które dotyczy wyłącznie sesji Copilot Agent Host, przyjmuje off lub on i domyślnie ma wartość off, a Microsoft jasno określa granicę: „Sandboxing is not a virtual machine or user-account boundary, and it does not replace endpoint security.” (piaskownica nie jest granicą maszyny wirtualnej ani konta użytkownika i nie zastępuje ochrony punktów końcowych).59
  • Aider. Brak udokumentowanej piaskownicy.48

Warstwa Seatbelt też miewała dziury

Badacze z Accomplish opublikowali pięć ucieczek z piaskownic narzędzi agentowych w czterech opracowaniach datowanych od 23 lipca do 15 września 2026 roku. Cztery naprawiono przed publikacją; piątą zgłoszono Anthropic i zamknięto jako „Informative” (informacyjną). W Claude Code, przy włączonej piaskownicy i najbardziej restrykcyjnym trybie uprawnień, polecenie z repozytorium „ran on our Mac anyway, outside the sandbox, with no permission prompt” (i tak uruchomiło się na naszym Macu, poza piaskownicą, bez pytania o zgodę); Anthropic naprawiło to w 2.1.247.67 W CLI Cursor ta sama przyczyna źródłowa: „the Seatbelt profile wraps only the shell tool, while the harness’s own internal git runs unsandboxed and honors repository-supplied core.fsmonitor hooks.” (profil Seatbelt obejmuje tylko narzędzie powłoki, podczas gdy wewnętrzny git samego środowiska działa bez piaskownicy i respektuje hooki core.fsmonitor dostarczone przez repozytorium).68 W Codex dwie ucieczki zgłoszone 12 sierpnia 2026 roku, „Both were fixed inside of eight days” (obie naprawiono w ciągu ośmiu dni); w jednej „launchd starts the application unsandboxed, outside Codex’s process tree.” (launchd uruchamia aplikację bez piaskownicy, poza drzewem procesów Codex).69 W maszynie wirtualnej Claude Cowork ucieczka do zamontowanego z prawem zapisu systemu plików hosta, z którego „reads and writes the host Mac’s filesystem directly, as the logged-in desktop user.” (czyta i zapisuje bezpośrednio system plików Maca hosta jako zalogowany użytkownik).70 Żadne z czterech opracowań nie odczytuje danych chronionych Pełnym dostępem do dysku. Moja interpretacja, a nie twierdzenie badaczy: proces, który ucieka z Seatbelt, ale pozostaje w łańcuchu uruchomienia terminala, zachowuje uprawnienia TCC terminala, więc na Macu, którego terminal ma Pełny dostęp do dysku, taka ucieczka sięga również danych chronionych Pełnym dostępem do dysku. Nie znalazłem żadnej analizy powłamaniowej, komunikatu bezpieczeństwa ani opracowania badaczy opisującego agenta, który wbrew woli użytkownika czytał Mail, Messages lub dane przeglądarki dzięki przyznanemu Pełnemu dostępowi do dysku.

5. Na moim Macu: co ma Pełny dostęp do dysku i skąd to wiem

Wszystko w tej sekcji to mój własny pomiar na moim własnym Macu, wykonany 11 października 2026 roku z sesji Claude Code: macOS 27.0, build 26A428, System Integrity Protection włączone. Wszystkie polecenia poza dwoma były tylko do odczytu: jeden test zgłosił zadanie launchd, które zapisało swoje wyjście do dwóch plików, po czym zostało usunięte; drugi zainstalował sandbox-runtime 0.0.79 od Anthropic przez npx -y, aby go uruchomić, a na potrzeby jego przebiegów zapisano dwa robocze pliki ustawień. Próby zapisu wewnątrz piaskownic były tylko próbami i piaskownice je odrzuciły; próby sieciowe nie powiodły się z przyczyny, której zapis nie ustala. Nie zmieniłem żadnego ustawienia i niczego nie przyznałem ani nie odebrałem.195 Opisuję to, co znalazłem, nazwami aplikacji i usług. Gdy dowody pokazują, że program jest na liście Pełnego dostępu do dysku, piszę, że figuruje na liście; o tym, że ma dostęp, piszę tylko wtedy, gdy odczyt pokazuje, że dostęp działa.

Łańcuch uruchomienia agenta

Powłoka, w której Claude Code uruchamia polecenia, to zsh uruchomiony przez claude, uruchomiony przez moją powłokę logowania, uruchomioną przez login, uruchomiony przez Ghostty, czyli aplikację terminala; środowisko podaje TERM_PROGRAM jako ghostty.19 Zgodnie z regułą inżyniera wsparcia Apple kodem odpowiedzialnym za wszystko w tym łańcuchu jest Ghostty.3

Odczyt listy

W tym, co sprawdziłem, macOS nie dokumentuje żadnego polecenia, które wypisywałoby posiadaczy Pełnego dostępu do dysku: tccutil ma dokładnie jedno polecenie, reset.34 Lista znajduje się w bazach danych TCC. Z powłoki agenta nie dało się otworzyć bazy danych użytkownika, a jej folder nie pojawił się w liście zawartości folderu Application Support użytkownika. Nie wiem dlaczego. Uwagi do wydania macOS 27 mówią „Apps can no longer access the local TCC database directly,” (aplikacje nie mogą już bezpośrednio korzystać z lokalnej bazy danych TCC), co może być przyczyną, ale uwaga nie precyzuje, o którą bazę chodzi, więc pozostawiam to bez wyjaśnienia.1923

Ogólnosystemowa baza danych dała się otworzyć. Wybrałem tylko dwie kolumny, usługę i klienta, przefiltrowałem je po usłudze Pełnego dostępu do dysku i ani razu nie odczytałem kolumny, która zapisuje, czy dany przełącznik jest włączony. Zapytanie zwróciło 75 wierszy.19 Już samo to, że dało się ją otworzyć, jest dowodem. W 2022 roku Jeff Johnson pokazał, że Terminal z Pełnym dostępem do dysku „can read or write any restricted files, including the TCC database itself” (może czytać i zapisywać dowolne chronione pliki, łącznie z samą bazą danych TCC); pokazał to na bazie danych użytkownika, a opisana niżej próba kontrolna pokazuje to samo dla bazy systemowej na tym Macu.465 Oznacza to też, że w macOS 27.0, mimo cytowanej wyżej uwagi do wydania, systemowa baza danych TCC wciąż dawała się bezpośrednio odczytać procesowi, którego łańcuch uruchomienia miał to uprawnienie.1923

75 wierszy Pełnego dostępu do dysku na Macu autora, po jednym kwadracie na wiersz, pogrupowanych według rodzaju: 30 plików binarnych Claude Code, każdy w innej wersji, najstarszy 2.1.177, najnowszy 2.1.296; 25 innych aplikacji, programów pomocniczych i aktualizatorów innych firm; 5 interpreterów, node i cztery wersje python3; 5 własnych buildów deweloperskich autora; 3 inne aplikacje i usługi Apple; 3 terminale, Terminal, iTerm2 i Ghostty; 3 hosty agentów, ChatGPT, Cursor i Xcode; oraz 1 wpis serwera SSH dla Logowania zdalnego. Na niebiesko 42 wiersze, pod którymi lub przez które może działać agent, na szaro pozostałe 33

Posortowałem 75 wierszy według jednej reguły na rodzaj, stosowanych po kolei: trzy identyfikatory pakietów terminali; dowolna ścieżka klienta do pliku binarnego Claude Code z numerem wersji; identyfikatory pakietów ChatGPT, Cursor i Xcode; dowolna ścieżka interpretera node lub python3.x; klient serwera SSH; dowolny klient zaczynający się od com.apple. lub /System/; moje własne buildy deweloperskie; i cała reszta.1947 Co jest w każdej grupie:

  • Terminale (3). Terminal, iTerm2 i Ghostty figurują na liście.
  • Claude Code (30). Trzydzieści osobnych wierszy, każdy ze ścieżką do jednej wersji pliku binarnego Claude Code, od 2.1.177 do 2.1.296, czyli wersji, w której działała ta sesja.1947 Anthropic pisze, że przy natywnym instalatorze wpis hosta sesji w tle „appears as Claude Code and the grant persists across updates.” (widnieje jako Claude Code, a uprawnienie przetrwa aktualizacje).51 Baza danych na tym Macu przechowuje jeden wiersz na wersję. Nie sprawdziłem, jak wyświetlają je Ustawienia systemowe ani czy każdy przełącznik jest włączony. Moja interpretacja, niezweryfikowana: to prośby hosta sesji w tle, po jednej na aktualizację.
  • Hosty agentów (3). Aplikacja ChatGPT (identyfikator pakietu com.openai.codex), Cursor i Xcode.1947 Xcode należy do tej grupy, ponieważ Xcode 27 hostuje agentów: jego uwagi do wydania mówią „Agents in Xcode can now be extended with plugins that contain skills, MCP servers, and ACP agent configurations” (agentów w Xcode można teraz rozszerzać pluginami zawierającymi umiejętności, serwery MCP i konfiguracje agentów ACP) i dodają obsługę Agent Client Protocol.24 Nie jest udokumentowane, czy TCC przypisuje Xcode procesy uruchamiane przez tych agentów, a Xcode może nie zachowywać się jak terminal. W 2024 roku inżynier wsparcia Apple, zapytany, dlaczego własne uprawnienie narzędzia było respektowane tylko wtedy, gdy uruchamiał je Xcode, odpowiedział, że „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 uruchamia narzędzie w sposób, który jasno pokazuje systemowi, że Xcode nie jest kodem odpowiedzialnym za ten proces); analizując łańcuch pod debuggerem Xcode, napisał „I expect that one of these is breaking TCC’s responsible code search” (spodziewam się, że jeden z nich psuje wyszukiwanie kodu odpowiedzialnego przez TCC) i dodał: „I suspect that’s deliberate.” (podejrzewam, że celowo).3 Xcode figuruje więc na liście i hostuje agentów, ale w odniesieniu do uruchamianych przez niego narzędzi inżynier Apple opisuje coś odwrotnego niż reguła terminala.
  • Interpretery (5). Jeden node z Homebrew i cztery interpretery Pythona z Homebrew. Inżynier wsparcia Apple przestrzega właśnie przed tym: gdy da się uprawnienie interpreterowi, „then any script could do that.” (wtedy każdy skrypt mógłby to zrobić).20 OpenClaw daje to samo ostrzeżenie w odniesieniu do node i Dostępności: taki wpis należy traktować „as broad permission for that Node runtime, not as permission for one npm package.” (jako szerokie uprawnienie dla całego środowiska Node, a nie jako uprawnienie dla jednego pakietu npm).50
  • SSH (1). sshd-keygen-wrapper, klient po stronie serwera SSH, który uznaję za wpis sterowany przez „Allow full disk access for remote users” (zezwól na pełny dostęp do dysku użytkownikom zdalnym).193
  • Inne od Apple (3), moje własne buildy (5), cała reszta (25). Ostatnia grupa obejmuje narzędzia do obsługi i porządkowania dysku, pakiet zabezpieczeń, klientów VPN i pamięci w chmurze, aktualizatory, oprogramowanie drukarek, gry, aplikację do wideokonferencji i komunikator. Kilka to narzędzia dyskowe, czyli drugi rodzaj oprogramowania wymieniany przez Apple; żadna z 75 pozycji nie jest aplikacją do kopii zapasowych.

Czterdzieści dwa z 75 wierszy to coś, pod czym lub przez co może działać agent. Żaden z nich nie jest aplikacją do kopii zapasowych.

Siedem przebiegów: piaskownica i uprawnienie to osobne warstwy

Aby sprawdzić, która warstwa decyduje, uruchomiłem jedną sondę, czyli odczyt jednego wiersza z tej systemowej bazy danych, w różnych warunkach, a do tego sondę zapisu w obu piaskownicach i sondę sieciową w sandbox-runtime.5

Tabela siedmiu przebiegów na Macu autora, macOS 27.0, 11 października 2026. Przebieg 1, powłoka agenta w Ghostty bez piaskownicy: odczyt bazy danych TCC zwrócił wiersz. Przebieg 2, w piaskownicy Seatbelt Codex w trybie tylko do odczytu: zwrócił wiersz. Przebieg 2b, ta sama piaskownica, zapis poza przestrzenią roboczą: odrzucony przez Seatbelt. Przebieg 2c, Codex z konfiguracją autora: zwrócił wiersz. Przebieg 3a, sandbox-runtime od Anthropic bez blokady odczytu: zwrócił wiersz. Przebieg 3b, sandbox-runtime blokujący odczyt folderu TCC: odrzucony przez Seatbelt. Przebieg 4, ten sam odczyt z zadania launchd bez Ghostty w łańcuchu uruchomienia: odrzucony przez TCC

  1. Powłoka agenta, bez piaskownicy. Odczyt zwrócił wiersz.
  2. W piaskownicy Seatbelt Codex CLI 0.154.0, tryb read-only. Odczyt zwrócił wiersz. Ta sama piaskownica odrzuciła touch poza przestrzenią roboczą komunikatem „Operation not permitted” (przebieg 2b), więc piaskownica działała; po prostu nie zatrzymuje tam odczytów. Z moją własną konfiguracją Codex, która nie ustawia trybu piaskownicy i włącza dostęp do sieci, odczyt również zwrócił wiersz (przebieg 2c).
  3. W sandbox-runtime 0.0.79 od Anthropic, pakiecie, na którym zbudowana jest piaskownica Claude Code, bez blokady odczytu (przebieg 3a): odczyt zwrócił wiersz, a zapis poza dozwolonym folderem został odrzucony i żądanie sieciowe się nie powiodło (curl z kodem wyjścia 56; zapis nie pokazuje dlaczego). Z denyRead ustawionym na folder TCC (przebieg 3b) odczyt zakończył się błędem „authorization denied”.
  4. Próba kontrolna. Ten sam odczyt przez sqlite3, zgłoszony jako zadanie launchd, tak aby ani Ghostty, ani Claude Code nie występowały nigdzie w jego łańcuchu uruchomienia: „authorization denied”.5

To próba kontrolna nadaje sens pozostałym. Plik bazy danych należy do roota i według uprawnień trybu może go czytać każdy (-rw-r--r--), więc przebiegu 4 nie odrzuciły uprawnienia plików, tylko TCC.195 Ten sam plik binarny, ten sam plik, ten sam użytkownik: z powłoki agenta odczyt się udał, poza nią nie. To, co miała powłoka agenta, miała dzięki swojemu łańcuchowi uruchomienia. Reguła inżyniera wsparcia wskazuje terminal jako kod odpowiedzialny tego łańcucha.3 Jest jedno zastrzeżenie, którego nie mogę usunąć na podstawie tych danych: łańcuch zawiera też proces claude, a pliki binarne Claude Code również figurują na liście; w przebiegach 3a i 3b środowisko piaskownicy uruchamiał proces node, a node z Homebrew też figuruje na liście, choć nie zapisano, którego node użył npx. Mój pomiar pokazuje, że dostęp pochodzi z łańcucha, a reguła inżyniera wsparcia mówi, że z terminala; nie dowodzi osobno, że TCC użył wiersza Ghostty, a nie wiersza Claude Code czy node. Inżynier wsparcia Apple mówi, że algorytm nie jest udokumentowany.3

Przebiegi 3b i 4 wypisują identyczny błąd, choć odrzuciły je różne warstwy. Operator, który widzi „authorization denied” w wyjściu agenta, nie rozpozna po samym komunikacie, czy odmówiła piaskownica, czy TCC.5

Do sprawdzenia na własnym Macu

Uruchomione z powłoki, której używa agent, to polecenie wypisuje listę Pełnego dostępu do dysku, gdy łańcuch uruchomienia tej powłoki ma Pełny dostęp do dysku. Kończy się błędem „authorization denied”, gdy łańcuch go nie ma albo gdy reguła piaskownicy blokuje folder, jak w przebiegu 3b. Odczytuje dwie kolumny i niczego nie zmienia. Wynikiem są wiersze, a nie stany przełączników.

# 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=$?"

To jest zapytanie, które uruchomiłem w macOS 27.0, słowo w słowo.19 Aby zobaczyć, której aplikacji TCC przypisał dany dostęp, przewodnik wdrażania Apple podaje strumień logów, log stream --debug --predicate 'subsystem == "com.apple.TCC" AND eventMessage BEGINSWITH "AttributionChain"', zaproponowany, by „to try to identify” (spróbować zidentyfikować) w czasie rzeczywistym odpowiedzialną aplikację lub plik binarny.31 Nie uruchomiłem go przy tych pomiarach i dlatego sekcja 5 nie może powiedzieć, czy zdecydował wiersz Ghostty, czy inny z łańcucha. Powyższe zapytanie do bazy danych może przestać działać w kolejnym wydaniu. Apple nie dokumentuje ani pliku, ani jego schematu, a uwagi do macOS 27 już mówią, że aplikacje „can no longer access the local TCC database directly.” (nie mogą już bezpośrednio korzystać z lokalnej bazy danych TCC).23

6. Co zrobić teraz

Według moich odczytów z 11 października nie znalazłem żadnego opublikowanego mechanizmu ani uwagi do wydania dotyczących nowych mechanizmów kontroli, więc nic z poniższego nie jest migracją. To jest to, co zrobiłbym już dziś na każdym Macu, na którym działają agenci, ze źródłem dla każdego kroku i jego kosztem. Na własnym Macu nie zrobiłem jeszcze wszystkiego; sekcja 5 to stan sprzed zmian.

1. Sprawdzić, kto ma Pełny dostęp do dysku. Należy otworzyć Ustawienia systemowe > Prywatność i ochrona > Pełny dostęp do dysku i przeczytać listę.4 Warto szukać terminali, edytorów, aplikacji agentowych, plików binarnych agentów, interpreterów i wszystkiego, czego się nie rozpoznaje. Z poziomu powłoki zapytanie z sekcji 5 wypisuje listę, jeśli ta powłoka ma już dostęp, co przy okazji sprawdza, czy ma go powłoka agenta; niepowodzenie może też wynikać z reguły piaskownicy blokującej folder, jak w przebiegu 3b.5 Koszt: żaden. Warto pamiętać, że aplikacja figurująca na liście nie musi mieć włączonego przełącznika.

2. Odebrać go terminalowi, w którym uruchamia się agentów. To krok, który zmienia najwięcej. Kodem odpowiedzialnym narzędzia wiersza poleceń jest terminal, więc uprawnienie terminala jest uprawnieniem agenta.32 Jeśli Pełny dostęp do dysku jest potrzebny do kopii zapasowych lub prac administracyjnych z wiersza poleceń, czyli do tego, do czego dokumentują go tmutil i fdesetup, warto trzymać drugą aplikację terminala z tym uprawnieniem i nigdy nie uruchamiać w niej agenta.4344 (Ta ostatnia część to moja sugestia, nie Apple. Jeff Johnson pokazał na Terminalu Apple, że aplikacja bez piaskownicy może pożyczyć jego uprawnienie, otwierając w nim skrypt; w mojej interpretacji to samo mogłoby dotyczyć drugiej aplikacji terminala, która otwiera skrypty.46) Koszt: chronione lokalizacje zaczynają zwracać „Operation not permitted” i wracają prośby o Pliki i foldery. Kontrola Apple na poziomie folderów obejmuje „Desktop, Documents, Downloads, network volumes, and removable volumes.” (Biurko, Dokumenty, Pobrane, woluminy sieciowe i woluminy wymienne).10 Anthropic dokumentuje ten sam błąd dla sesji w tle Claude Code i jego rozwiązanie: przyznanie Plików i folderów dla tego wpisu.51 OpenClaw sugeruje trzymanie plików w swojej przestrzeni roboczej, aby uniknąć przyznawania dostępu folder po folderze.50

3. Sprawdzić własne wpisy agenta. Host sesji w tle Claude Code prosi o dostęp „separately from your terminal” (niezależnie od terminala) i może mieć własny wpis Pełnego dostępu do dysku.51 Na moim Macu figuruje 30 plików binarnych Claude Code z numerami wersji, które interpretuję, bez weryfikacji, jako wpisy tego hosta.19 Należy usunąć te, których nie zamierzało się przyznać, a tam, gdzie sesja w tle potrzebuje folderu, przyznać zamiast tego Pliki i foldery. Aplikacje agentowe też mają własne wiersze; na moim Macu figurują aplikacje ChatGPT, Cursor i Xcode.19 Koszt: sesja w tle, która czyta chronione foldery, nie działa, dopóki nie przyzna się węższego dostępu.

4. Nigdy nie przyznawać go interpreterowi. Inżynier wsparcia 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.” (jeśli ma się skrypt, który musi operować na plikach na biurku, nie chce się dawać tego uprawnienia interpreterowi, bo wtedy mógłby to robić każdy skrypt). Jego rozwiązanie to „package your script as a standalone program that MAC can use for its tracking.” (spakować skrypt jako samodzielny program, który MAC może śledzić).20 Własny wiersz interpretera liczy się wszędzie tam, gdzie interpreter jest kodem odpowiedzialnym, na przykład dla skryptu uruchamianego jako zadanie launchd bez powiązanej aplikacji; wtedy każdy skrypt Pythona lub Node uruchomiony w ten sposób przez ten interpreter, łącznie z serwerami MCP, dostaje pełne uprawnienie.32 Koszt: dla skryptu, który naprawdę potrzebuje dostępu, jego „easiest solution” (najprostsze rozwiązanie) to spakowanie go jako samodzielnego programu, który MAC może śledzić; według niego AppleScript to ułatwia, a skrypty powłoki nie.20

5. Włączyć piaskownicę dostawcy i zablokować zbędne odczyty. Ustawienia domyślne pozwalają na szerokie odczyty, więc włączenie piaskownicy jest konieczne, ale niewystarczające.

  • Claude Code: sandbox.enabled, następnie permissions.blockReadsOutsideWorkingDirectories (lub reguły sandbox.filesystem.denyRead) oraz "allowUnsandboxedCommands": false, aby usunąć ponawianie poza piaskownicą.15 Warto pamiętać, że narzędzie Read, hooki i serwery MCP są poza nią.15 Koszt: narzędzia, które potrzebują innych ścieżek lub hostów, nie działają, dopóki się ich nie dopuści, a każdy wpis excludedCommands ponownie otwiera lukę.15
  • Codex: pozostać przy workspace-write lub read-only; unikać danger-full-access; dodać reguły odczytu "deny" do profilu uprawnień albo, w zespole, ustawić permissions.filesystem.deny_read w requirements.toml, pliku narzucanym przez administratora, tak aby użytkownicy nie mogli tego osłabić.1621 Koszt: polecenia wymagające sieci wymagają zgody lub network_access.60
  • Gemini CLI: uruchamiać z -s i SEATBELT_PROFILE=strict-open lub strict-proxied, czyli dwoma profilami, które dokumentacja opisuje jako ograniczające odczyty.17 Koszt: te profile ograniczają zarówno odczyty, jak i zapisy, więc narzędzia czytające spoza projektu nie działają w nich, dopóki nie wybierze się luźniejszego profilu.
  • Cursor: przełączyć Read Access z System na Workspace; ustawienie wymaga Cursor 3.23 lub nowszego, a Cursor na moim Macu to 3.19.7.1847 Koszt: odczyty plików spoza przestrzeni roboczej najpierw pytają o zgodę, a polecenia w piaskownicy widzą tylko przestrzeń roboczą, Read Allowlist i ścieżki systemowe potrzebne popularnym narzędziom.18
  • VS Code: włączyć chat.agent.sandbox.enabled; obejmuje to tylko sesje Copilot Agent Host, „not the Local chat harness or the custom terminal tool override.” (a nie lokalne środowisko czatu ani własne zastąpienie narzędzia terminala).59 Koszt: polecenia wymagające ścieżek lub narzędzi spoza ustawień domyślnych trzeba dopuścić, a nawet wtedy Microsoft mówi, że to „not a virtual machine or user-account boundary” (nie granica maszyny wirtualnej ani konta użytkownika) i domyślnie pozostawia otwarty ruch wychodzący, więc piaskownica zawęża lukę, ale jej nie zamyka.59
  • Hermes Agent i OpenClaw: używać backendu kontenerowego. Hermes zaleca go dla bram produkcyjnych; piaskownica OpenClaw jest domyślnie wyłączona i według jego własnych słów jest „not a perfect security boundary” (nie jest doskonałą granicą bezpieczeństwa), choć OpenClaw zaznacza, że piaskownica „materially limits filesystem and process access.” (istotnie ogranicza dostęp do systemu plików i procesów).6462 Koszt: polecenia uruchamiane w kontenerze tracą nieograniczony dostęp do hosta (Hermes opisuje backendy jako sposób, by odizolować „agent commands from your host system”, czyli polecenia agenta od systemu hosta), ale pliki zamontowane lub synchronizowane pozostają osiągalne: backendy Docker i Singularity w Hermes używają montowań typu bind, czyli „live host filesystem view” (widoku systemu plików hosta na żywo), jego ustawienie docker_volumes udostępnia katalogi hosta, a dostęp do przestrzeni roboczej w OpenClaw może mieć wartość ro lub rw oprócz domyślnej none.646166 Kosztem jest jawne dostarczanie plików potrzebnych do zadania i audytowanie tych montowań. Czego to nie obejmuje: brama OpenClaw pozostaje na hoście, więc skonfigurowany kanał iMessage zachowuje Pełny dostęp do dysku kontekstu procesu bramy; umieszczenie narzędzi w kontenerach nie usuwa tej ekspozycji.6214 Umiejętność iMessage w Hermes wymienia wymagania wobec hosta (Messages z zalogowanym kontem, zainstalowany imsg, Pełny dostęp do dysku dla terminala); nie znalazłem żadnej strony Hermes o tym, jak umiejętność zachowuje się przy backendzie kontenerowym.13

Granica: na moim Macu żadna piaskownica nie zmieniła przyznanego Pełnego dostępu do dysku; piaskownica zablokowała chroniony odczyt tylko wtedy, gdy jej profil blokował tę ścieżkę z nazwy, a warstwy Seatbelt w Claude Code, w CLI Cursor i w Codex miały opublikowane ucieczki, już naprawione.5676869

6. Agenta czytającego Messages umieścić na osobnym koncie użytkownika macOS albo z niego zrezygnować. Własna rada OpenClaw dotycząca wdrażania bota iMessage brzmi: „Use a dedicated Apple ID and macOS user so bot traffic is isolated from your personal Messages profile.” (używaj osobnego Apple ID i osobnego użytkownika macOS, aby ruch bota był odizolowany od prywatnego profilu Messages).71 To konto powinno być kontem standardowym: Apple pisze, że użytkownicy standardowi „can install apps and change their own settings, but can’t add other users or change other users’ settings.” (mogą instalować aplikacje i zmieniać własne ustawienia, ale nie mogą dodawać innych użytkowników ani zmieniać ich ustawień).72 Na moim Macu foldery Library, Mail i Messages mojego użytkownika są według trybów plików czytelne tylko dla mnie, więc proces działający jako inny użytkownik standardowy zostaje odrzucony przez zwykłe uprawnienia plików, zanim w ogóle zapyta się TCC; to mój wniosek z trybów plików, a nie test, który przeprowadziłem.19 Dwa zastrzeżenia: inżynier wsparcia Apple mówi, że Pełny dostęp do dysku jest „system wide” (ogólnosystemowy), a nie przypisany do użytkownika, więc aplikacja, której go przyznano na jednym koncie, ma go na każdym koncie; a przewodnik Apple mówi, że ustawienie sięga „certain administrative settings for all users on this Mac.” (niektórych ustawień administracyjnych wszystkich użytkowników tego Maca).204 Koszt: drugie logowanie, drugi pęk kluczy i drugi zestaw ustawień oraz agent, który nie widzi plików głównego konta, dopóki się ich nie udostępni.

7. Wyłączyć „Allow full disk access for remote users” (zezwól na pełny dostęp do dysku użytkownikom zdalnym), jeśli nie jest potrzebne. Jeśli steruje się agentami przez SSH, kodem odpowiedzialnym jest serwer SSH, a to ustawienie jest jego uprawnieniem.3 Na moim Macu jego klient figuruje na liście.19 Koszt: zdalne powłoki tracą dostęp do chronionych lokalizacji.

8. Zachować zatwierdzanie każdej akcji dla wszystkiego, co przemawia w imieniu użytkownika. 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.” (stała zgoda odbiera ostatnią szansę przejrzenia wiadomości, zanim ChatGPT wyśle ją w imieniu użytkownika; należy jej używać tylko po zaakceptowaniu tego ryzyka).22 Anthropic: bypassPermissions zostawić dla „isolated environments like containers or VMs.” (odizolowanych środowisk, takich jak kontenery lub maszyny wirtualne).53 Koszt: więcej kliknięć, i właśnie o to chodzi.

9. Przy zarządzaniu Macami sprawdzić, co przyznają profile. Profil Privacy Preferences Policy Control może przyznać SystemPolicyAllFiles dowolnemu identyfikatorowi pakietu lub ścieżce, także terminalowi, a „The user isn’t prompted and can’t change this value.” (użytkownik nie jest pytany i nie może zmienić tej wartości).237 W macOS 27 część tego ładunku dotycząca poszczególnych aplikacji jest oznaczona jako wycofana, a deklaratywny zamiennik nie ma klucza Pełnego dostępu do dysku.3738 Nie znalazłem udokumentowanego przez Apple sposobu, w jaki MDM mógłby raportować Pełny dostęp do dysku przyznany ręcznie przez użytkownika. Koszt: znalezione profile mogą być niezbędne dla agenta kopii zapasowych lub agenta bezpieczeństwa; własny przykład Apple przyznaje aplikacji organizacji dostęp „without prompting the user.” (bez pytania użytkownika).31

Przewodnik po loop engineering omawia uruchamianie agentów bez nadzoru; każdy z powyższych kroków ma jeszcze większe znaczenie, gdy przy klawiaturze nie ma nikogo, kto przeczytałby komunikat.

7. Co może się zmienić: interpretacja, z warunkami

Wszystko w tej sekcji to moja interpretacja słów Apple i zmian, które Apple już wprowadziło obok nich. Apple nie ogłosiło żadnego mechanizmu, a ja żadnego nie przewiduję. Każdy z poniższych kształtów to coś, na co pozwala tekst z 2 października, dowody, które czynią go bardziej lub mniej prawdopodobnym, oraz warunek, pod którym dotknąłby agentów.

Trudniejsza procedura przyznawania. Czasowniki samego tekstu dotyczą przyznawania: użytkownicy, „who genuinely wish to grant an app this extraordinary level of access can only do so with very explicit user action,” (którzy naprawdę chcą przyznać aplikacji ten nadzwyczajny poziom dostępu, będą mogli to zrobić tylko bardzo wyraźnym działaniem), mają „clearly understand these risks before granting such access.” (jasno rozumieć to ryzyko przed przyznaniem takiego dostępu).1 Apple już wcześniej wprowadziło zgodę z wyjaśnieniem: deklaratywne ustawienia aplikacji w macOS 27 pokazują użytkownikom prośbę o zgodę z wymaganym uzasadnieniem organizacji, zanim zastosują domyślne ustawienia prywatności.3938 Warunek: jeśli nowy mechanizm obejmie tylko nowe uprawnienia, terminal, który już ma Pełny dostęp do dysku, zachowa go, a agenci w nim uruchamiani nie odczują zmiany, dopóki użytkownik go nie zresetuje. Jeśli obejmie istniejące uprawnienia, dotknie to również każdego terminala z Pełnym dostępem do dysku. Wiadomość nie mówi ani jednego, ani drugiego.

Węższy zakres. Apple mogłoby zostawić przełącznik bez zmian i wyprowadzić dane spod niego. Apple już wcześniej przesuwało te granice: Catalina dodała Kosz do tego, co wymaga Pełnego dostępu do dysku, macOS 14 i 15 objęły kontenery aplikacji i kontenery grup osobnymi zabezpieczeniami, a macOS 27 domyślnie odmawia dostępu do kontenerów innych zespołów i pozwala XProtect ograniczać „app data that is commonly targeted by malicious software.” (dane aplikacji, na które często celuje złośliwe oprogramowanie).112023 Warunek: jeśli Apple umieści dane Mail, Messages lub Safari za osobnym mechanizmem, którego Pełny dostęp do dysku nie obejmuje, droga przez terminal przestanie do nich docierać nawet tam, gdzie terminal zachowa Pełny dostęp do dysku. Wiadomość nie wspomina o zawężaniu; jej sformułowanie „this extraordinary level of access” (ten nadzwyczajny poziom dostępu) opisuje uprawnienie w jego obecnym kształcie.

Inne traktowanie dziedziczonych uprawnień. Luka między „grant an app” (przyznaniem aplikacji) a agentem, który jest procesem potomnym aplikacji, to temat tego wpisu, a Apple ma już dwa elementy, które mogłyby ją zaadresować. Xcode 27 ma już „a new security layer that monitors and controls filesystem access by coding agents and any processes they spawn,” (nową warstwę bezpieczeństwa, która monitoruje i kontroluje dostęp do systemu plików przez agentów programistycznych i wszystkie uruchamiane przez nich procesy), a Endpoint Security w macOS 27 dodaje es_new_descendants_client, który obserwuje tylko „the entire subtree rooted at the calling process” (całe poddrzewo zakorzenione w procesie wywołującym) i według swojego nagłówka „Does NOT require TCC approval,” (NIE wymaga zgody TCC), choć podobnie jak es_new_client wymaga uprawnienia com.apple.developer.endpoint-security.client.2425 Inżynier wsparcia Apple dodał ten drugi element do swojego wpisu o uprawnieniach systemu plików 18 września 2026 roku.20 Żaden z tych tekstów nie łączy się z Pełnym dostępem do dysku. Warunek, jako moja interpretacja: mechanizm kontroli nałożony na „an app” (aplikację) trafia na terminal, a każdy działający w nim agent nadal dziedziczy wynik, chyba że Apple zmieni przypisywanie kodu odpowiedzialnego, które jego inżynier nazywa nieudokumentowanym i „subject to change” (podlegającym zmianom), albo powiąże nowy mechanizm z czymś w rodzaju klienta potomków. Żaden z tych tekstów nie zapowiada, że tak się stanie.

Zarządzane Maki. MDM może dziś przyznać Pełny dostęp do dysku bez pytania użytkownika.37 W macOS 27 część tego ładunku dotycząca poszczególnych aplikacji jest wycofana, a jej deklaratywny zamiennik nie ma klucza Pełnego dostępu do dysku.3738 Warunek: jeśli „very explicit user action” (bardzo wyraźne działanie użytkownika) obejmie uprawnienia nadawane przez MDM, ciche przyznanie przez profil przestanie być możliwe; jeśli nie, zarządzane Maki zachowają cichą ścieżkę. Apple nie powiedziało nic w żadnej z tych kwestii i nie powiązało wycofania w macOS 27 z wiadomością z 2 października.

Kiedy. Wiadomość mówi „Going forward” (w przyszłości). Uwagi do bety 3 macOS 27.2, dla bety datowanej trzy dni później, nic o tym nie mówią, a w kanale wydań ani w indeksie uwag do wydania z 11 października nie znalazłem wpisu dla macOS 27.1: kanał wymienia 27.0.1 (28 września), a po nim betę 3 wersji 27.2, przy czym bety 27.2 ruszyły 16 września, a indeks uwag do wydania wymienia tylko 27 i betę 3 wersji 27.2.6879 Tegoroczne wycofanie w TCC, „Apps can no longer access the local TCC database directly” (aplikacje nie mogą już bezpośrednio korzystać z lokalnej bazy danych TCC), Apple umieściło w uwagach do wydania macOS 27 pod nagłówkiem TCC.23 Warunek: jeśli nowe mechanizmy pojawią się w wydaniu, które ma uwagi dla deweloperów, to właśnie tam Apple umieściło tegoroczne wycofanie w TCC, a ja przeczytam uwagi do każdej bety macOS 27.x w poszukiwaniu takiego wiersza. Jednak macOS 27.0.1 ukazał się już bez żadnych uwag do wydania dla deweloperów, więc zmiana mogłaby też trafić do wydania poprawkowego bez żadnego wiersza na żadnej stronie uwag.78 Jeśli pojawią się z macOS 28, to sesja WWDC lub uwagi do wydania bety są miejscami, w których Apple opisywało już takie zmiany: WWDC19 w przypadku zabezpieczeń Cataliny, uwagi do macOS 27 w przypadku tegorocznego wycofania w TCC.1123 Tak czy inaczej, kroki z sekcji 6 nie zależą od odpowiedzi.

Najważniejsze wnioski

Dla osób uruchamiających agentów na Macu

  • Apple powiedziało 2 października, że przyznanie Pełnego dostępu do dysku będzie wymagać „very explicit user action” (bardzo wyraźnego działania użytkownika), i wskazało agentów AI jako powód. Nie podało wersji, daty ani mechanizmu.1
  • Agent wiersza poleceń ma to, co ma terminal. Strony podręcznika Apple i jego inżynier wsparcia mówią, że kodem odpowiedzialnym jest terminal; Apple nie dokumentuje ogólnej reguły.23
  • Piaskownica dostawcy nie jest mechanizmem kontroli Pełnego dostępu do dysku. Na moim Macu chroniony odczyt przeszedł przez piaskownicę Codex w trybie tylko do odczytu i przez sandbox-runtime od Anthropic; zatrzymała go tylko blokada odczytu dokładnie tego folderu albo uruchomienie poza terminalem.5
  • Należy odebrać Pełny dostęp do dysku terminalowi, w którym uruchamia się agentów, nigdy nie dawać go node ani python i włączyć ograniczenia odczytu, a nie tylko samą piaskownicę.201521
  • Jeśli agent czyta Messages, powinien mieć własne konto użytkownika macOS, a zatwierdzanie każdej wysyłki należy zachować.7122

Dla twórców agentów i aplikacji agentowych

  • Nie należy kazać użytkownikom przyznawać Pełnego dostępu do dysku terminalowi ani procesowi agenta. Dwaj dostawcy robią to dziś, na potrzeby Messages.1314
  • Udokumentowaną przez Apple drogą jest link do panelu, a nie prośba; przełącznik należy do użytkownika, a Apple mówi, że jego włączenie będzie wymagać bardzo wyraźnego działania użytkownika.251
  • Warto napisać w dokumentacji, co piaskownica domyślnie czyta. Dokumentacja Codex mówi, że jego piaskownica „limits what it can touch (typically to the current workspace)” (ogranicza to, czego agent może dotknąć, zwykle do bieżącej przestrzeni roboczej); jego kod źródłowy i moje przebiegi pokazują odczyty sięgające daleko poza przestrzeń roboczą.60635

Często zadawane pytania

Czym jest Pełny dostęp do dysku na Macu?

To ustawienie w Ustawieniach systemowych > Prywatność i ochrona, które pozwala aplikacji „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.” (uzyskać dostęp do wszystkich plików na komputerze, w tym do danych innych aplikacji, na przykład Mail, Messages, Safari i Dom, do danych z kopii zapasowych Time Machine oraz do niektórych ustawień administracyjnych wszystkich użytkowników tego Maca). Aplikacje nie mogą prosić o nie komunikatem; użytkownik dodaje je przyciskiem Dodaj albo przyznaje je profil MDM.4102

Co Apple ogłosiło w sprawie Pełnego dostępu do dysku w październiku 2026 roku?

Wiadomość dla deweloperów z datą 2 października 2026 roku, „Updates to Full Disk Access in macOS”, mówi, że Apple „will introduce additional controls” (wprowadzi dodatkowe mechanizmy), aby użytkownicy chcący przyznać aplikacji ten dostęp „can only do so with very explicit user action,” (mogli to zrobić tylko bardzo wyraźnym działaniem), ponieważ „As AI agents become increasingly capable and autonomous, the risks associated with this level of access will grow substantially.” (w miarę jak agenci AI stają się coraz zdolniejsi i bardziej autonomiczni, ryzyko związane z tym poziomem dostępu znacząco wzrośnie). Nie wymienia wersji macOS, daty ani mechanizmu.1

Czy Claude Code lub Codex dostają Pełny dostęp do dysku od mojego terminala?

Tak, jeśli ma go terminal. Narzędzie uruchomione z terminala jest sprawdzane względem terminala; strona podręcznika eslogger od Apple mówi, że uruchomienie go z „Terminal.app or a third-party terminal emulator” (Terminal.app lub emulatora terminala innej firmy) wymaga autoryzacji tej aplikacji, a inżynier wsparcia Apple pisze na forum: „The tool’s responsible code is Terminal.” (kodem odpowiedzialnym za narzędzie jest Terminal). Na moim Macu odczyt wymagający Pełnego dostępu do dysku zadziałał z powłoki Claude Code w Ghostty i nie powiódł się po uruchomieniu poza nim.235

Czy piaskownica Claude Code lub Codex powstrzymuje agenta przed czytaniem moich wiadomości w Messages?

Domyślnie nie. Obie piaskownice używają Seatbelt, który jest niezależny od Pełnego dostępu do dysku. Piaskownica Claude Code jest domyślnie wyłączona, a po włączeniu czyta „Most of the machine” (większość komputera). Piaskownica Codex jest włączona, a jej tryb tylko do odczytu odczytał na moim Macu plik chroniony Pełnym dostępem do dysku. Odczyty trzeba zablokować jawnie: permissions.blockReadsOutsideWorkingDirectories w Claude Code, reguły "deny" w profilu uprawnień Codex.15215

Jak sprawdzić, które aplikacje mają Pełny dostęp do dysku?

Należy otworzyć Ustawienia systemowe > Prywatność i ochrona > Pełny dostęp do dysku.4 tccutil nie potrafi wypisać tej listy; jego jedyne polecenie to reset.34 Z terminala, który już ma Pełny dostęp do dysku, odczyt systemowej bazy danych TCC wypisuje klientów, jak w sekcji 5; niepowodzenie z komunikatem „authorization denied” oznacza, że albo powłoka nie ma dostępu, albo reguła piaskownicy zablokowała odczyt.195

Czy należy odebrać Pełny dostęp do dysku Terminalowi?

Jeśli uruchamia się w nim agentów, tak. Warto trzymać osobny terminal z tym uprawnieniem do poleceń kopii zapasowych lub administracyjnych, takich jak tmutil, i nigdy nie uruchamiać w nim agenta. W terminalu, któremu odebrano uprawnienie, należy się spodziewać próśb o Pliki i foldery oraz błędów „Operation not permitted”.431051

Kiedy pojawią się nowe mechanizmy kontroli Pełnego dostępu do dysku od Apple?

Apple tego nie podało. Wiadomość z 2 października mówi „Going forward” (w przyszłości), uwagi do wydania bety 3 macOS 27.2 o tym nie wspominają, a w kanale wydań ani w indeksie uwag do wydania z 11 października nie znalazłem wpisu dla macOS 27.1: kanał wymienia macOS 27.0.1 (28 września), wydany bez uwag do wydania dla deweloperów, a po nim betę 3 macOS 27.2; same bety 27.2 ruszyły 16 września.16789

Źródła


  1. Apple Developer, News, „Updates to Full Disk Access in macOS”, z datą 2 października 2026. Pobrano 11 października 2026 o 17:28 UTC i ponownie o 17:47 UTC; tekst obu kopii jest identyczny poza stylem apostrofów. Pełne dwa akapity: Pełny dostęp do dysku „largely sidesteps” mechanizmy ochrony danych „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”; pliki, poczta, wiadomości i historia przeglądania; aplikacje komunikacyjne i „the people users are communicating with”; „Going forward, we will introduce additional controls”; „very explicit user action”; agenci AI jako powód, dla którego ryzyko „will grow substantially”. Bez wersji, daty, mechanizmu i nazwy aplikacji. ↩↩↩↩↩↩↩↩↩↩↩↩↩

  2. Apple, strona podręcznika eslogger(1), dostarczana z SDK macOS 27.0 w Xcode; przeczytana lokalnie 11 października 2026. Sekcja TCC AUTHORIZATION: „eslogger requires the responsible process to have been authorized for Full Disk Access”; uruchomienie go „from an app, including Terminal.app or a third-party terminal emulator, requires the respective app to be authorized for Full Disk Access”; ustawienie Logowania zdalnego dla sesji SSH; oraz „MDM servers can grant Full Disk Access authorization” przez klucz SystemPolicyAllFiles ładunku Privacy Preferences Policy Control. ↩↩↩↩↩↩↩↩↩↩↩↩

  3. Apple Developer Forums, „How to grant command line tools full disk access”, wątek założony w czerwcu 2024; odpowiedzi Quinna „The Eskimo!”, Apple Developer Technical Support, czerwiec 2024. Wpis pracownika, nie dokumentacja. Pobrano 11 października 2026 o 17:55 UTC. Cztery przypadki kodu odpowiedzialnego („The tool’s responsible code is Terminal,” „The tool’s responsible code is the SSH server,” wraz z ustawieniem „Allow full disk access for remote users”, „The system treats the app as the responsible code,” oraz przypadek 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”); zastrzeżenie, że algorytm „is not documented, has changed in the past, and may well change in the future”; relacja autora wątku, że program uruchomiony w Terminalu, gdy Terminal miał Pełny dostęp do dysku, otworzył plik, a po przeniesieniu uprawnienia z Terminala na program zakończył się błędem; oraz uwagi Quinna o narzędziach uruchamianych przez 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,” a dla narzędzia pod debuggerem Xcode (Xcode 15.4 na macOS 14.4.1) „I expect that one of these is breaking TCC’s responsible code search,” z dopiskiem „I suspect that’s deliberate.” ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  4. Apple, Podręcznik użytkownika Maca (macOS 27), „Change Privacy & Security settings on Mac”. Pobrano 11 października 2026 o 17:37 UTC. Wiersz Pełnego dostępu do dysku („Allow apps to access all files on your computer,” z Mail, Messages, Safari, Dom, kopiami zapasowymi Time Machine i „certain administrative settings for all users on this Mac”) oraz instrukcja dodania aplikacji przyciskiem Dodaj; zdanie „The listed apps have requested access.” przy pozostałych wierszach. ↩↩↩↩↩↩↩↩↩↩

  5. Pomiar autora na Macu autora (macOS 27.0, build 26A428, System Integrity Protection włączone), 11 października 2026, 17:40 UTC, z sesji Claude Code w Ghostty. Wszystkie polecenia tylko do odczytu poza dwoma: zadaniem launchd zgłoszonym i usuniętym (jego wyjście zapisane do dwóch plików) oraz sandbox-runtime 0.0.79 od Anthropic zainstalowanym przez npx -y na potrzeby testu, z dwoma roboczymi plikami ustawień (srt-a.json, srt-b.json) zapisanymi dla jego przebiegów. Próby zapisu były próbami, które piaskownice odrzuciły; próby sieciowe nie powiodły się (000 curl_exit=56), bez diagnostyki i bez próby kontrolnej poza piaskownicą, która pozwoliłaby ustalić przyczynę. Siedem przebiegów z sekcji 5: odczyt jednego wiersza systemowej bazy danych TCC z powłoki agenta (wiersz zwrócony); w piaskownicy Seatbelt Codex CLI 0.154.0 w trybie read-only (wiersz zwrócony; zapis poza przestrzenią roboczą odrzucony komunikatem „Operation not permitted”); z konfiguracją Codex autora (wiersz zwrócony); w sandbox-runtime 0.0.79 od Anthropic bez blokady odczytu (wiersz zwrócony; zapis odrzucony; żądanie sieciowe nieudane) oraz z denyRead na folderze TCC („authorization denied”); i ten sam odczyt jako zadanie launchd bez Ghostty w łańcuchu („authorization denied”). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  6. Apple Developer Documentation, „macOS 27.2 Golden Gate Beta 3 Release Notes”. Pobrano 11 października 2026 o 17:35 UTC. Sześć sekcji: General, AppKit, Display Settings, Notifications, Shortcuts, StoreKit Testing in Xcode; żadnego wiersza o Pełnym dostępie do dysku, TCC ani Prywatności i ochronie; wiersz AppKit o usuniętym ustawieniu domyślnym EnablePasteboardPrivacyDeveloperPreview. ↩↩↩↩

  7. Apple Developer, kanał RSS Releases. Pobrano 11 października 2026 o 17:28 UTC. „macOS 27.2 beta 3 (26B5101f)” z datą poniedziałek, 5 października 2026; „macOS 27.0.1 (26A434)” z datą poniedziałek, 28 września 2026; brak pozycji macOS 27.1. ↩↩↩↩↩↩

  8. Apple Developer Documentation, „macOS Release Notes”, pobrano 11 października 2026 o 17:35 UTC: w sekcji macOS 27 tylko „macOS 27.2 Golden Gate Beta 3 Release Notes” i „macOS 27 Golden Gate Release Notes”. Adresy macos-release-notes/macos-27_0_1-release-notes, macos-27_1-release-notes i macos-27_1-beta-release-notes zwróciły HTTP 404 o 17:31 UTC. ↩↩↩↩↩

  9. Apple Developer, News, strona indeksu. Pobrano 11 października 2026 o 17:41 UTC. „Get ready with the latest beta releases”, z datą 16 września 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.” ↩↩↩

  10. Apple Platform Security, „Controlling app access to files in macOS”. Pobrano 11 października 2026 o 17:36 UTC. „Full internal storage access”: aplikacja nie pyta; użytkownik zmienia systemowe ustawienia prywatności. Pliki i foldery, o które pyta aplikacja, „Includes Desktop, Documents, Downloads, network volumes, and removable volumes.” Zdanie datujące dostęp do całej pamięci na „macOS 10.13 or later”. ↩↩↩↩↩↩

  11. Apple, sesja 701 WWDC19, „Advances in macOS Security”, transkrypcja na stronie. Pobrano 11 października 2026 o 17:40 UTC. Dwa poziomy chronionych danych, z pocztą, wiadomościami i historią przeglądania Safari za „a high barrier to access” dla „disk management or backup utilities”; lokalizacje Cataliny wymagające zgody; programy pomocnicze „prepopulated unchecked”; Kosz dodany do tego, co wymaga wcześniejszej zgody; aplikacje „can guide the user to the security and privacy preference pane”. ↩↩↩↩↩↩↩

  12. Apple, sesja 10053 WWDC23, „What’s new in privacy”, transkrypcja na stronie. Pobrano 11 października 2026 o 17:40 UTC. Ochrona kontenerów aplikacji oraz „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.” ↩↩↩

  13. Nous Research, dokumentacja Hermes Agent, Apple iMessage skill. Pobrano 11 października 2026 o 17:41 UTC. „Bundled (installed by default)”; wymagania wstępne obejmują „macOS with Messages.app signed in”, instalację imsg, „Grant Full Disk Access for terminal (System Settings → Privacy → Full Disk Access)” i „Grant Automation permission for Messages.app when prompted.” ↩↩↩↩↩↩

  14. Dokumentacja OpenClaw, „iMessage setup”. Pobrano 11 października 2026 o 17:42 UTC. „Full Disk Access is required for the process context running OpenClaw/imsg” ze względu na dostęp do bazy danych Messages; Automatyzacja do wysyłania; „Permissions are granted per process context”; System Integrity Protection musi być wyłączone dla działań zaawansowanych; oraz przykładowy wiersz TCC z /usr/libexec/sshd-keygen-wrapper jako klientem dla kontekstu SSH. ↩↩↩↩↩↩↩↩

  15. Anthropic, Claude Code Docs, „Configure the sandboxed Bash tool”. Pobrano 11 października 2026 o 17:35 UTC. „The sandbox is off by default”; tabela ustawień domyślnych (zapisy do katalogu roboczego, tymczasowego i dodanych katalogów; odczyty „Most of the machine, including credential files”; sieć przez proxy z dozwolonymi domenami, które „start empty”); zbudowana na @anthropic-ai/sandbox-runtime; Seatbelt w macOS; dwa tryby piaskownicy; co działa poza nią (wbudowane narzędzia plikowe i sieciowe; hooki, lokalne serwery MCP, monitory pluginów, serwery LSP, polecenia pomocnicze); ponawianie poza piaskownicą i allowUnsandboxedCommands; denyRead, allowRead, blockReadsOutsideWorkingDirectories, excludedCommands; Apple Events domyślnie zablokowane. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  16. OpenAI, dokumentacja Codex, „Sandbox” (serwowana z learn.chatgpt.com). Pobrano 11 października 2026 o 17:36 UTC. Piaskownica domyślnie włączona; Seatbelt w macOS; obejmuje uruchamiane polecenia; tryby read-only, workspace-write i danger-full-access słowami OpenAI; pełny dostęp zdefiniowany jako danger-full-access z approval_policy = "never"; etykieta „Full access” w menu aplikacji na komputer. ↩↩↩↩↩↩↩

  17. Google, Gemini CLI, docs/cli/sandbox.md oraz profil Seatbelt permissive-open, w commicie 9b6e026. Pobrano 11 października 2026 o 17:43 UTC. Włączanie przez -s, GEMINI_SANDBOX lub ustawienia; Seatbelt przez sandbox-exec; sześć profili, z permissive-open jako domyślnym („allowing broad file reads and network access”), strict-open i strict-proxied z ograniczeniami odczytu; (allow file-read*) w profilu. ↩↩↩↩↩

  18. Dokumentacja Cursor, „Run Modes”. Pobrano 11 października 2026 o 17:50 UTC. Seatbelt przez sandbox-exec dla „the full subprocess tree”; sieć „Blocked by default”; tryby Read Access, z System jako domyślnym („The agent can read files outside the workspace without approval”) oraz Workspace, który pyta przed odczytami poza przestrzenią roboczą; „Read access requires Cursor 3.23 or later”; niektóre polecenia „bypass the sandbox”. ↩↩↩↩↩↩↩↩

  19. Pomiar autora na Macu autora (macOS 27.0, build 26A428, System Integrity Protection włączone), 11 października 2026, 17:32 UTC, ze sprawdzeniem trybów plików dopisanym o 18:09 UTC; tylko do odczytu. Łańcuch uruchomienia powłoki agenta (zsh, claude, powłoka logowania, login, Ghostty; TERM_PROGRAM ghostty); baza danych TCC użytkownika niemożliwa do otwarcia; tryb systemowej bazy danych TCC (-rw-r--r--, root) i jej 75 wierszy dla kTCCServiceSystemPolicyAllFiles, tylko kolumny usługi i klienta: Terminal, iTerm2, Ghostty, aplikacja ChatGPT (com.openai.codex), Cursor, Xcode, 30 plików binarnych wersji Claude Code od 2.1.177 do 2.1.296, node z Homebrew i cztery interpretery Pythona, sshd-keygen-wrapper, trzy inne wpisy Apple, pięć własnych buildów autora i 25 innych klientów innych firm. Tryby folderów Library, Mail i Messages użytkownika (tylko właściciel). Ścieżki klientów w folderze domowym nie są tu przytaczane. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  20. Apple Developer Forums, „On File System Permissions”, autor Quinn „The Eskimo!”, Apple Developer Technical Support; pierwotnie opublikowany 26 kwietnia 2021, zmieniony 18 września 2026 w celu dodania es_new_descendants_client. Wpis pracownika, nie dokumentacja. Pobrano 11 października 2026 o 17:56 UTC. „The exact list of file system locations protected by MAC is not documented”; lista obejmująca „Full Disk Access (macOS 10.14 and later)”, ochronę kontenerów aplikacji (macOS 14) i ochronę kontenerów grup aplikacji (macOS 15); „Some MAC privileges are per user (Files and Folders) and some are system wide (Full Disk Access)”; TCC „has no API surface”; MAC „is mandatory; it’s not an opt-in like the App Sandbox”; kod odpowiedzialny; ostrzeżenie dotyczące interpreterów i rada, by „package your script as a standalone program”. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  21. OpenAI, dokumentacja Codex, „Configuration Reference”. Pobrano 11 października 2026 o 17:37 UTC. Profile uprawnień z "read" | "write" | "deny" dla każdej ścieżki; permissions.filesystem.deny_read, „Admin-enforced filesystem read denials”, które „users cannot weaken them with local config”; requirements.toml opisany jako „an admin-enforced configuration file that constrains security-sensitive settings users can’t override.” ↩↩↩↩↩

  22. OpenAI, dokumentacja ChatGPT, „Plugins”, sekcja Apple Messages. Pobrano 11 października 2026 o 17:45 UTC. „Grant the requested macOS permissions before ChatGPT reads Messages”; domyślnie zatwierdzanie każdej wysyłki; „Persistent approval removes your final chance to review a message before ChatGPT sends it as you”; Apple Messages działa tylko na Macu; administratorzy mogą go wyłączyć przez mechanizm Computer Use; „When a plugin capability runs through a Codex host, the host’s sandbox and approval policy applies.” ↩↩↩↩↩↩

  23. Apple Developer Documentation, „macOS 27 Golden Gate Release Notes”. Pobrano 11 października 2026 o 17:35 UTC. System Integrity Protection: dostęp do kontenerów danych aplikacji i kontenerów grup aplikacji innych zespołów domyślnie odmawiany bez prośby (161835690); XProtect może ograniczać dane aplikacji (178668601). Wycofanie w TCC: „Apps can no longer access the local TCC database directly” (90775556). Znany problem Privacy & Security Settings (184660124) z obejściem polegającym na tym, by „grant Full Disk Access to the process for the duration of the requirement.” ↩↩↩↩↩↩↩↩↩

  24. Apple Developer Documentation, „Xcode 27 Release Notes”. Pobrano 11 października 2026 o 17:45 UTC. „Agents in Xcode can now be extended with plugins that contain skills, MCP servers, and ACP agent configurations” (178289210); obsługa Agent Client Protocol (178294840); „new security layer that monitors and controls filesystem access by coding agents and any processes they spawn” w Coding Intelligence, którą „can be enabled in Coding Intelligence settings” (178289431); wersja poglądowa serwera MCP z Beta 5 dla „code-signed agents” i flaga --unsafe-always-allow-all-agents, „not a recommended configuration for at-desk use” (181836944). ↩↩↩↩↩

  25. Apple, SDK macOS 27.0 (build SDK Xcode 26A425), nagłówek EndpointSecurity/ESClient.h, przeczytany lokalnie 11 października 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” oraz adresy URL ustawień Privacy_AllFiles „To direct the user to the Full Disk Access section in System Settings.” es_new_descendants_client, dostępny od macOS 27.0: zdarzenia dla „the entire subtree rooted at the calling process”, „Does NOT require TCC approval”, z „@note Requires the com.apple.developer.endpoint-security.client entitlement.” ↩↩↩↩↩

  26. Apple Developer, kanał RSS News. Pobrano 11 października 2026 o 17:41 UTC. „Updates to Full Disk Access in macOS” z datą piątek, 2 października 2026, 09:00:19 PDT; sąsiednie pozycje: komunikat o wygaśnięciu Developer ID Sub-CA (1 października), pozycje o zasobach App Store i iPhone Duo (5 października) oraz „Hello Developer: October 2026” (6 października). ↩

  27. Apple Developer, „Hello Developer: October 2026”, opublikowany 6 października 2026. Pobrano 11 października 2026 o 17:46 UTC. Zgłoszenia dla iPhone Duo i Group Labs, wydarzenia, zlokalizowana dokumentacja i inne tematy; bez wzmianki o Pełnym dostępie do dysku ani o agentach. ↩

  28. Apple Developer, filmy Privacy & Security. Pobrano 11 października 2026 o 17:41 UTC. Wymienione sesje WWDC26: „Meet Trust Insights”, „Secure your app: mitigate risks to agentic features”, „Secure your apps with App Attest” i „Privacy and Security Group Lab”; żadna z ich transkrypcji nie zawiera frazy „Full Disk”. ↩

  29. Apple, sesja 347 WWDC26, „Secure your app: mitigate risks to agentic features”, transkrypcja na stronie. Pobrano 11 października 2026 o 17:41 UTC. Pośrednie wstrzykiwanie promptów, środki zaradcze w Foundation Models i App Intents oraz „Simon Willison’s Lethal Trifecta”: „access to private data, exposure to untrusted content, and the ability to externally communicate.” Bez wzmianki o Pełnym dostępie do dysku, TCC ani uprawnieniach systemu plików dla agentów. ↩↩

  30. Apple Developer Documentation, DeviceManagement, „PrivacyPreferencesPolicyControl.Services”. Pobrano 11 października 2026 o 17:35 UTC. SystemPolicyAllFiles: „Allows the application access to all protected files, including system administration files”, bez oznaczenia wycofania; Camera, Microphone, ListenEvent i ScreenCapture: profil „can’t grant” dostępu i „can only deny it”; kilka usług oznaczonych jako wycofane dla macOS 27. ↩↩↩↩

  31. Apple Platform Deployment, „Privacy Preferences Policy Control device management payload settings for Apple devices”. Pobrano 11 października 2026 o 17:38 UTC. „Supervision is required if you apply this payload using a device management service”; „System Policy All Files” z listą danych; przykładowy komentarz przyznający aplikacji organizacji dostęp do wszystkich plików „without prompting the user”; oraz predykat log stream dla komunikatów „AttributionChain” podsystemu TCC, podany jako sposób identyfikacji odpowiedzialnej aplikacji lub pliku binarnego. ↩↩↩↩↩

  32. Apple, SDK macOS 27.0, nagłówek EndpointSecurity/ESTypes.h, przeczytany lokalnie 11 października 2026. ES_NEW_CLIENT_RESULT_ERR_NOT_PERMITTED: „The caller lacks Transparency, Consent, and Control (TCC) approval from the user.” ↩

  33. Apple, sesja 8009 WWDC26, „Privacy and Security Group Lab”, transkrypcja na stronie. Pobrano 11 października 2026 o 17:41 UTC. Panelista Apple: „So TCC stands for transparency, consent and control.” Bez wzmianki o Pełnym dostępie do dysku. ↩

  34. Apple, strona podręcznika tccutil(1), macOS 27.0 (z datą 3 kwietnia 2012), przeczytana lokalnie 11 października 2026. Jedno polecenie, reset; przykłady wymieniają tylko AddressBook i All; brak listy usług. ↩↩↩

  35. Apple Developer Forums, „The Rules for Full Disk Access”, strona 1, sierpień i wrzesień 2018. Pobrano 11 października 2026 o 17:44 UTC. Wpis dewelopera z sierpnia 2018 mówi o „Full Disk Access (previously Application Data in earlier betas)”; deweloper prosi o „an API call that causes a prompt to the logged-in user to grant the app Full Disk access”; Apple Developer Technical Support odpowiada „Please do file an enhancement request”, a we wrześniu opisuje, że programy pomocnicze w pakiecie są objęte uprawnieniem aplikacji nadrzędnej, a zewnętrzne potrzebują własnego. ↩↩

  36. Apple Developer Documentation, DeviceManagement, „PrivacyPreferencesPolicyControl”. Pobrano 11 października 2026 o 17:35 UTC. Typ ładunku com.apple.TCC.configuration-profile-policy; macOS, wprowadzony w 10.14; „Requires supervision” N/A; wymaga MDM zatwierdzonego przez użytkownika. ↩↩↩

  37. Apple Developer Documentation, DeviceManagement, „PrivacyPreferencesPolicyControl.Services.Identity”. Pobrano 11 października 2026 o 17:35 UTC. Wycofany w macOS 27.0, każdy klucz „Deprecated: macOS 27+”; Allowed: „The user isn’t prompted and can’t change this value”; identyfikatory według identyfikatora pakietu lub ścieżki; „Helper tools embedded within an application bundle automatically inherit the permissions of their enclosing app bundle.” ↩↩↩↩↩↩↩

  38. Apple Developer Documentation, DeviceManagement, „AppSettingsAppDictionaryObject”, wprowadzony w macOS 27. Pobrano 11 października 2026 o 17:36 UTC. Domyślne ustawienia prywatności dla Accessibility, Bluetooth, Camera, Dictation, LocalNetwork, Location, LocationAccuracy i Microphone oraz wymagane OrganizationJustification wyświetlane w prośbie o zgodę; brak klucza Pełnego dostępu do dysku. ↩↩↩↩

  39. Apple Developer Documentation, DeviceManagement, „AppSettings”. Pobrano 11 października 2026 o 17:35 UTC. Domyślne uprawnienia prywatności: „When set, the app displays a consent prompt listing all the configured defaults”; Allow lub Not Now; „Only AppKit-based apps on macOS support this feature.” ↩↩

  40. Apple Newsroom, „Apple introduces macOS Mojave”, komunikat prasowy, 4 czerwca 2018. Pobrano 11 października 2026 o 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.” ↩

  41. Apple Developer Documentation, „macOS Mojave 10.14 Release Notes”. Pobrano 11 października 2026 o 17:41 UTC. Privacy, New Features: chroniona pamięć wymaga dodania aplikacji do kategorii „Application Data” (39798760). ↩

  42. Apple Newsroom, „macOS Catalina is available today”, 7 października 2019. Pobrano 11 października 2026 o 17:47 UTC. „new data protections require all apps to get permission before accessing user documents.” ↩

  43. Apple, strona podręcznika tmutil(8), SDK macOS 27.0, przeczytana lokalnie 11 października 2026. „Full Disk Access privileges can be granted to the Terminal application used to run tmutil.” ↩↩↩

  44. Apple, strona podręcznika fdesetup(8), SDK macOS 27.0, przeczytana lokalnie 11 października 2026. AUTHORIZATION POLICY: od macOS 10.15 włączenie FileVault wymaga, obok innych możliwości, aby aplikacja odpowiedzialna miała autoryzację Pełnego dostępu do dysku. ↩↩

  45. Apple Developer Forums, „Which application is taken in consideration with TCC”, listopad 2023. Pobrano 11 października 2026 o 17:43 UTC. Deweloper pyta, czy TCC „is looking for parent process rights”; Apple Developer Technical Support odsyła do „On File System Permissions” i odmawia szczegółów jako „both complex and subject to change.” ↩

  46. Jeff Johnson, „Every unsandboxed app has Full Disk Access if Terminal does”, 22 września 2022, z kodem źródłowym. Pobrano 11 października 2026 o 17:59 UTC. Terminal z Pełnym dostępem do dysku „can read or write any restricted files, including the TCC database itself” (jego przykładem jest baza danych użytkownika); aplikacje bez piaskownicy mogą otwierać w Terminalu skrypty, które działają z uprawnieniami Terminala; technika „doesn’t work for sandboxed apps.” ↩↩↩

  47. Inspekcja zainstalowanych aplikacji na Macu autora, 11 października 2026, 17:33 UTC; tylko do odczytu. Wersje: Claude Code 2.1.296, Codex CLI 0.154.0, Gemini CLI 0.19.4, Hermes Agent 0.14.0; Aider i OpenClaw niezainstalowane; VS Code niezainstalowany. Komunikaty z uzasadnieniem z Info.plist i uprawnienie App Sandbox dla aplikacji Claude (2.31226.0, bez uprawnienia piaskownicy; komunikaty dla folderów i Apple Events), ChatGPT (com.openai.codex 26.715.72359, app-sandbox false), Cursor (3.19.7, bez uprawnienia), Ghostty 1.3.1 („A program running within Ghostty would like to use AppleScript.”) i iTerm2 3.6.6 („An application in iTerm2 wants to use AppleScript.”), żaden z nich w piaskownicy. ↩↩↩↩↩↩↩↩

  48. Wyszukiwania autora w kodzie na GitHubie, 11 października 2026, 18:12 UTC: dokumentacja Aider pod kątem „sandbox” i jego repozytorium pod kątem „Full Disk Access”, dokumentacja Ghostty i repozytorium iTerm2 pod kątem „Full Disk Access”; w każdym przypadku zero wyników. Wyszukiwarka kodu nie indeksuje wszystkiego. ↩↩↩

  49. Dokumentacja Cursor, „Terminal”, narzędzia agenta. Pobrano 11 października 2026 o 17:50 UTC. „Cursor runs shell commands directly in your terminal”; Run Mode decyduje, kiedy polecenia się uruchamiają, kiedy Cursor pyta i kiedy trafiają do piaskownicy. ↩↩

  50. Dokumentacja OpenClaw, „macOS permissions”. Pobrano 11 października 2026 o 17:42 UTC. Przyznawać dostęp „to the same process context that performs file operations”; traktować wpis node „as broad permission for that Node runtime, not as permission for one npm package”; przenosić pliki do przestrzeni roboczej OpenClaw, aby uniknąć przyznawania dostępu folder po folderze. ↩↩↩

  51. Anthropic, Claude Code Docs, „Manage multiple agents with agent view”. Pobrano 11 października 2026 o 17:36 UTC. W macOS host sesji w tle „requests access to protected folders separately from your terminal”; przy „Operation not permitted” przyznać Pliki i foldery „or enable Full Disk Access for the entry”; przy natywnym instalatorze wpis „appears as Claude Code and the grant persists across updates”, a instalacje przez Homebrew lub npm pokazują ścieżkę pliku binarnego. ↩↩↩↩↩↩

  52. Anthropic, Claude Code Docs, „Let Claude use your computer from the CLI”. Pobrano 11 października 2026 o 17:49 UTC. Dostępność i Nagrywanie ekranu; jeśli prośba nie znika, potwierdzić, że „your terminal app is listed and enabled” w sekcji Nagrywanie ekranu. ↩

  53. Anthropic, Claude Code Docs, „Configure permissions”. Pobrano 11 października 2026 o 17:35 UTC. Tryby uprawnień default (z etykietą Manual), acceptEdits, plan, auto, dontAsk, bypassPermissions; bypassPermissions tylko „in isolated environments like containers or VMs where Claude Code can’t cause damage.” Bez wzmianki o Pełnym dostępie do dysku. ↩↩↩

  54. OpenAI Help Center, „ChatGPT release notes”, wpis z 20 sierpnia 2026. Pobrano 11 października 2026 o 17:47 UTC. Plugin Apple Messages „can read and search iMessage, SMS, and RCS conversations and prepare or send messages through Messages”; domyślnie zatwierdzanie przed wysłaniem. ↩

  55. MacRumors, Juli Clover, „ChatGPT Can Now Read and Send iMessages on Mac”, 20 sierpnia 2026. Pobrano 11 października 2026 o 17:48 UTC. Prasa, użyta jako trop: „ChatGPT needs Full Disk Access in System Settings, as well as access to contact names and automation tools.” ↩

  56. OpenAI, dokumentacja ChatGPT, „Computer Use”. Pobrano 11 października 2026 o 17:48 UTC. Nagrywanie ekranu i Dostępność w macOS; uprawnienia systemowe niezależne od zatwierdzeń w aplikacji; „File reads, file edits, and shell commands still follow the sandbox and approval settings for the task.” ↩↩

  57. Anthropic, Claude Help Center, „Use quick entry with Claude Desktop on Mac”. Pobrano 11 października 2026 o 17:49 UTC. Nagrywanie ekranu „Required to capture screenshots and share application windows”; Dostępność „Required for quick entry functionality.” ↩

  58. Nous Research, dokumentacja Hermes Agent, „Computer Use”. Pobrano 11 października 2026 o 17:42 UTC. Dostępność i Nagrywanie ekranu przyznaje się „the identity named by hermes computer-use doctor”, czyli aplikacji CuaDriver. ↩

  59. Microsoft, dokumentacja VS Code, „Sandbox Copilot Agent Host sessions”. Pobrano 11 października 2026 o 17:50 UTC. chat.agent.sandbox.enabled domyślnie wyłączone, dotyczy domyślnej implementacji narzędzi 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”; ruch wychodzący domyślnie nieblokowany; allowDevToolAccess domyślnie true. Bez wzmianki o Pełnym dostępie do dysku. ↩↩↩↩↩

  60. OpenAI, dokumentacja Codex, „Agent approvals & security”. Pobrano 11 października 2026 o 17:37 UTC. „By default, the agent runs with network access turned off”, z piaskownicą egzekwowaną przez system operacyjny, która „limits what it can touch (typically to the current workspace)”; workspace-write utrzymuje sieć wyłączoną, chyba że skonfiguruje się inaczej; Seatbelt i sandbox-exec w macOS; --dangerously-bypass-approvals-and-sandbox. ↩↩↩↩↩

  61. Nous Research, dokumentacja Hermes Agent, „Hermes Agent Configuration”. Pobrano 11 października 2026 o 17:41 UTC. Siedem backendów terminala; local, „The default. Commands run directly on your machine with no isolation”; lokalne podprocesy zachowują prawdziwy HOME; Docker i Singularity „use bind mounts (live host filesystem view)”; docker_volumes „lets you share host directories with the container.” ↩↩↩↩

  62. Dokumentacja OpenClaw, „Sandboxing”. Pobrano 11 października 2026 o 17:42 UTC. „Sandboxing is off by default”; brama pozostaje na hoście, a przenosi się tylko wykonywanie narzędzi; „not a perfect security boundary”; tools.elevated jako „an explicit escape hatch.” ↩↩↩↩↩↩

  63. OpenAI, kod źródłowy Codex w commicie 72f999e: seatbelt_base_policy.sbpl i seatbelt.rs. Pobrano 11 października 2026 o 17:37 UTC. (deny default) w zasadzie bazowej i „child processes inherit the policy of their parent”; has_full_disk_read_access, który daje (allow file-read*), gdy nie ustawiono nieczytelnych katalogów głównych, a w przeciwnym razie zasadę odczytu, która je wyklucza; sandbox-exec przypięty do /usr/bin. ↩↩↩

  64. Nous Research, dokumentacja Hermes Agent, „Security”. Pobrano 11 października 2026 o 17:41 UTC. „Deny rules are a shell-command policy, not a complete shell interpreter or an OS capability sandbox”; backendy kontenerowe jako granica bezpieczeństwa; backendy kontenerowe zalecane dla bram produkcyjnych. ↩↩↩↩

  65. Dokumentacja OpenClaw, „Modes, scope, and backend”. Pobrano 11 października 2026 o 17:43 UTC. agents.defaults.sandbox.mode: off (domyślnie), non-main, all; backendy docker (domyślnie), podman, ssh, openshell, crabbox; sieć Dockera domyślnie none. ↩

  66. Dokumentacja OpenClaw, „Workspace access”. Pobrano 11 października 2026 o 17:43 UTC. none (domyślnie): narzędzia czytają i zapisują w odizolowanej przestrzeni roboczej piaskownicy, a „the agent workspace is not exposed”; ro; rw. ↩↩

  67. Accomplish, „Beltdown: Escaping the Claude Code sandbox”, 11 września 2026. Pobrano 11 października 2026 o 18:07 UTC. Przy włączonej piaskownicy i najbardziej restrykcyjnym trybie uprawnień polecenie z repozytorium uruchomiło się poza piaskownicą bez pytania; naprawione w Claude Code 2.1.247. ↩↩

  68. Accomplish, „Beltdown2: Escaping the Cursor CLI sandbox”, 12 września 2026. Pobrano 11 października 2026 o 18:06 UTC. Profil Seatbelt obejmuje tylko narzędzie powłoki, a własny git środowiska działa bez piaskownicy; naprawione w Cursor CLI 2026.08.04-aaa8809. ↩↩

  69. Accomplish, „Escaping the OpenAI Codex sandbox, twice”, 15 września 2026. Pobrano 11 października 2026 o 18:06 UTC. Dwie ucieczki zgłoszone 12 sierpnia 2026, „Both were fixed inside of eight days”; w jednej launchd uruchamia aplikację „outside Codex’s process tree.” ↩↩

  70. Accomplish, „SharedRoot: Escaping the Claude Cowork sandbox”, 23 lipca 2026. Pobrano 11 października 2026 o 18:03 UTC. Ucieczka z maszyny wirtualnej do zamontowanego z prawem zapisu systemu plików hosta, czytanie go i zapisywanie „as the logged-in desktop user”; zgłoszona Anthropic i zamknięta jako „Informative”. Opracowanie nie testuje lokalizacji chronionych przez TCC. ↩

  71. Dokumentacja OpenClaw, „iMessage deployment patterns”. Pobrano 11 października 2026 o 17:42 UTC. „Use a dedicated Apple ID and macOS user so bot traffic is isolated from your personal Messages profile.” ↩↩

  72. Apple, Podręcznik użytkownika Maca, „Change Users & Groups settings on Mac”. Pobrano 11 października 2026 o 18:08 UTC. Użytkownicy standardowi „can install apps and change their own settings, but can’t add other users or change other users’ settings.” ↩

Powiązane artykuły

Interpreter czcionek Apple jest teraz w Swifcie i o 13% szybszy

Zespół bezpieczeństwa Apple przepisał interpreter hintingu TrueType z C na bezpieczny pamięciowo Swift, przyspieszył go …

8 min czytania

Container machines: trwałe środowisko Linux na Macu

Narzędzie container od Apple w wersji 1.0 z container machine: trwałym środowiskiem Linux na macOS, z zamontowanym użytk…

9 min czytania

Trasy w pixel art: połączenia map i dzielnice na iPhonie

Jak Pokémony, Stardew i Animal Crossing budują ziemię między miastami, zmierzone w kodzie źródłowym: trasy, szwy, strażn…

85 min czytania