Skonfiguruj polityki sandboxa
O tym, czy uruchomienie agenta działa w sandboxie, decyduje serwer przy starcie
(--sandbox). Przełącznik Włącz sandboxowanie i selektor Backend w
sekcji Ustawienia → Serwer → Diagnostyka i prywatność to preferencje
przechowywane na Twoim urządzeniu. Wykrywanie hosta na karcie Piaskownica
pokazuje, co host serwera potrafi opakować.
Do uruchomienia docierają dwie kontrolki i obie opisuje ten poradnik: reguły
akcji w Ustawienia → Obszar roboczy → Uprawnienia agentów, które decydują,
co agent może wypchnąć, otworzyć lub osiągnąć, oraz flaga --sandbox samego
serwera.
Co ogranicza uruchomienie agenta
Dział zatytułowany „Co ogranicza uruchomienie agenta”Agenta ogranicza sześć rzeczy. Pierwsza to sandbox systemowy i tylko ona jest warunkowa — pozostałe pięć obowiązuje na każdym hoście.
| Granica | Co robi |
|---|---|
| Sandbox systemowy | Seatbelt w macOS, bubblewrap w Linuksie i WSL2. Opakowuje CLI Claude Code, adaptery ACP i narzędzie bash harnessa. Nieobecny w systemie Windows oraz w Linuksie bez bwrap i socat |
| Własne drzewo robocze | Każda rozmowa dostaje kopię roboczą copy-on-write. Oryginalna kopia robocza jest włączana do uruchomienia jako ścieżka objęta zakazem zapisu, a egzekwuje to sandbox |
| Poświadczenia z brokera | Broker poświadczeń tworzy środowisko dla danego uruchomienia i unieważnia je, gdy uruchomienie się kończy. Token GitHub w nim pozwala czytać, ale nie wykonać push: push przechodzi przez Control Center, który najpierw pyta regułę push |
| Guardraile działań | Każde narzędzie zmieniające stan deklaruje swoje klasy efektów, a strażnik rozstrzyga je, zanim wywołanie się wykona. prompt bez podłączonego zatwierdzającego jest odrzucany |
| Oczyszczanie środowiska | ACP i narzędzie bash harnessa dostają przefiltrowane środowisko. Claude Code przez NoSandboxAdapter dziedziczy środowisko hosta |
| Powierzchnia narzędzi trybu | Tryb tylko do odczytu usuwa z powierzchni narzędzia mutujące drzewo robocze i przypina własny czasownik wyjściowy trybu, żeby nadal mógł coś dostarczyć |
Trzy rzeczy pozostają słabsze, niż wyglądają:
- Tylko wbudowany harness egzekwuje bramkę narzędzi, kontrakty wykonania i
strukturalne reguły trybu. Adapter Claude Code tego nie robi. Claude Code
jest w szczególności uruchamiany z
--dangerously-skip-permissions, bo nieinteraktywneclaude -pw przeciwnym razie zablokowałoby się na zawsze na własnym pytaniu — jego własne wywołania odczytu, zapisu i edycji nie są więc ani widziane, ani bramkowane przez Control Center, a polecenia bash sprawdza tylko hook, który czyta wiersz poleceń. Tam, gdzie sandbox jest włączony, to on jest granicą wokół nich. - Narzędzia plikowe harnessa działające w procesie (read, write, edit, apply
patch, search, find, search_files) uruchamiają się wewnątrz procesu serwera,
więc żaden profil sandboxa ich nie ogranicza. Przez sandboxowany runner
poleceń przechodzi tylko narzędzie
bash. Te narzędzia ogranicza własna izolacja ścieżek oraz guardraile działań. - Na hoście bez backendu pierwszy wiersz nie ma w ogóle zastosowania. ACP i narzędzie
bashharnessa opierają się na oczyszczaniu środowiska oraz polityce poleceń; Claude Code dziedziczy środowisko hosta przezNoSandboxAdapter. Serwer mówi o tym w swoim logu startowym. Sprawdź swój poniżej.
Zdecyduj, co agent może wypchnąć
Dział zatytułowany „Zdecyduj, co agent może wypchnąć”Nie ma przełącznika na poziomie agenta dla git push, GitHuba, zgłoszeń ani sieci. Każde z nich to reguła akcji:
| Reguła | Wbudowana wartość domyślna | Co obejmuje |
|---|---|---|
| Push do zdalnego repozytorium | Zapytaj najpierw | Każdy git push do GitHuba, niezależnie od adaptera |
| Otwarcie pull requesta | Zapytaj najpierw | gh pr create i narzędzia do pull requestów |
| Opublikowanie recenzji lub scalenie | Zapytaj najpierw | gh pr merge, gh pr review, gh pr comment, gh pr close |
| Zapis do zewnętrznego trackera | Zapytaj najpierw | Zapisy zgłoszeń przez narzędzia Control Center i gh issue |
| Dostęp do sieci | Zezwól | Czy sandbox w ogóle ma sieć, oraz narzędzia webowe harnessa |
- Przejdź do Ustawienia → Obszar roboczy → Uprawnienia agentów
- Wybierz zakres — Obszar roboczy, Agent lub Przestrzeń — i w wierszu reguły wybierz Zezwól, Zapytaj najpierw lub Odmów
Reguły push ograniczone do gałęzi, na przykład taka, która odmawia push do
main, też obowiązują: zobacz Guardraile.
Punkt kontrolny: poproś agenta o wypchnięcie gałęzi. Przy Zapytaj najpierw
dostaniesz prośbę o zatwierdzenie z nazwą repozytorium i refami; przy
Odmów git wypisze ! [remote rejected] <ref> (Control Center policy: …).
Jak każda reguła dociera do uruchomienia:
- Push jest egzekwowany przez to, co uruchomienie posiada. Jego token
GitHub to token instalacji GitHub App tylko do odczytu, który może czytać
zawartość i pracować z pull requestami. Jego konfiguracja gita wysyła każdy
push do GitHuba do bramy na pętli zwrotnej w
cc_server, która pyta regułę i dopiero wtedy przekazuje push z tokenem zapisu, którego agent nigdy nie widzi. Brama przekazuje tylko do własnego repozytorium worktree albo do repozytorium GitHuba połączonego z obszarem roboczym. Dotyczy to każdego adaptera. - Pull requesty i zgłoszenia z powłoki są rozpoznawane po wierszu poleceń,
w narzędziu
bashharnessa oraz, przez hook, w narzędziuBashClaude Code. Agent, który ukryje polecenie (skrypt,eval, bezpośrednie wywołanie API), przejdzie przez to sprawdzenie, ale nie przez bramę push. - Klucze zgłoszeń nigdy nie trafiają do sandboxa. Agenci zapisują zgłoszenia przez narzędzia MCP Control Center, które pytają regułę.
- Sieć jest rozstrzygana raz, na starcie uruchomienia. Odmów wyłącza
sieć sandboxa; Zezwól i Zapytaj najpierw zostawiają ją włączoną, a
przy Zapytaj najpierw narzędzia
web_fetchiweb_searchharnessa nadal pytają przy każdym wywołaniu. Dopóki sieć jest włączona, GitHub zawsze jest na liście dozwolonego ruchu wychodzącego.
Sprawdź, czy uruchomienia Twojego agenta działają w sandboxie
Dział zatytułowany „Sprawdź, czy uruchomienia Twojego agenta działają w sandboxie”Decydują o tym dwie rzeczy, obie po stronie serwera: czy host oferuje backend i
czy --sandbox jest włączone. Sprawdź je w tej kolejności.
- Przejdź do Ustawienia → Serwer → Diagnostyka i prywatność
- Odczytaj kartę Piaskownica. Element Host to maszyna, na której
działa
cc_server, a nie ta, na którą patrzysz. Pole Backend wymienia Natywny sandbox (Seatbelt w macOS, bubblewrap w Linuksie i WSL2) lub Bez izolacji. Element Obowiązuje to preferencja tego urządzenia, a nie opakowanie, którego serwer faktycznie używa. - Odczytaj log startowy serwera. Drukuje dokładnie jeden z trzech wierszy:
agent sandbox ONplus informację o backendzie — uruchomienia są opakowaneno OS-native agent sandbox on this hostplus wskazówkę instalacyjną, jeśli taka istnieje — uruchomienia nie są opakowaneagent sandbox DISABLED by --sandbox off— świadome wyłączenie
GET /healthz nie raportuje stanu sandboxa, więc sprawdzeniem jest log
startowy.
Aby świadomie wyłączyć sandbox — host, na którym profil się psuje, jest
powodem, dla którego ta opcja istnieje — uruchom serwer z --sandbox off albo
ustaw CC_SERVER_SANDBOX=off. Wartością domyślną jest on, a on oznacza
„użyj backendu, jeśli host go ma”, nigdy „wymagaj go”.
Dwie sytuacje nigdy nie dostają natywnego opakowania sandboxa. W systemie
Windows natywna sonda zawsze zgłasza niedostępność i nie ma czego instalować
— wysyłanie agentów używa none. Backend microvm jest osobny (interaktywne terminale i
rigi) i ma własną bramkę sondy na swoim środowisku uruchomieniowym. W Linuksie
i WSL2 oba narzędzia bwrap i socat muszą być w PATH; bez nich sonda
zgłasza niedostępność i podaje nazwy brakujących pakietów.
W Linuksie/WSL2 z zainstalowanym bubblewrap standardowa polityka nie może
wyegzekwować wzorców glob plików z sekretami dla plików, które agent utworzy
później. Takie natywne uruchomienie kończy się teraz błędem, zamiast po cichu
ignorować reguły. Dodatnia sonda przy starcie nie gwarantuje więc, że wysyłanie
w Linuksie zdoła wystartować. --sandbox off to świadome, nieograniczone
wyłączenie, a nie zastępcza granica bezpieczeństwa.
Wiedz, czego tryb już zabrania
Dział zatytułowany „Wiedz, czego tryb już zabrania”Tryb jest przechowywany dla każdej przestrzeni i zasila mechanizm rozstrzygania guardraili jako warstwę preset trybu. Trzy z czterech trybów są tylko do odczytu, a tryb tylko do odczytu odrzuca jedenaście klas efektów wprost:
| Tryb | Drzewo robocze | Odrzucane przez preset |
|---|---|---|
Agent (chat) |
Zapisywalne | Nic — obowiązują wbudowane wartości domyślne |
| Plan | Tylko do odczytu | Usunięcie pliku, zapis poza drzewem roboczym, utworzenie commita, push do zdalnego repozytorium, otwarcie pull requesta, opublikowanie recenzji lub scalenie, zapis do zewnętrznego trackera, instalacja pakietu, uruchomienie procesu, zmiana struktury obszaru roboczego, uruchomienie i sterowanie rigiem |
| Przegląd | Tylko do odczytu | Te same jedenaście. Nie do wyboru przez użytkownika — pole tworzenia wiadomości oferuje tylko Agent, Plan i Orkiestrację |
| Orkiestracja | Tylko do odczytu | Te same jedenaście |
Dostęp do sieci i dostęp do sekretów celowo nie są odrzucane przez tryb tylko do odczytu: badanie jest całym jego sensem.
Wymagaj zatwierdzenia, zanim akcja się wykona
Dział zatytułowany „Wymagaj zatwierdzenia, zanim akcja się wykona”Zatwierdzenie to decyzja guardraila, a nie ustawienie sandboxa.
- Przejdź do Ustawienia → Obszar roboczy → Uprawnienia agentów
- Ustaw klasę akcji na Zapytaj najpierw w zakresie obszaru roboczego, agenta albo przestrzeni
Decyzja Zapytaj najpierw przerywa uruchomienie i pyta Cię. Gdy nie ma podłączonego zatwierdzającego, następuje domyślna odmowa i akcja zostaje odrzucona. Pełną kolejność rozstrzygania opisuje Skonfiguruj guardraile.
Rozwiązywanie problemów
Dział zatytułowany „Rozwiązywanie problemów”Agent nie może wypchnąć zmian, a nigdy tego nie zabraniałem
Dział zatytułowany „Agent nie może wypchnąć zmian, a nigdy tego nie zabraniałem”Przeczytaj, co wypisał git. Control Center policy: … oznacza, że reguła
odmówiła push albo że Zapytaj najpierw zostało bez odpowiedzi.
… is not linked to this workspace oznacza, że push celuje w repozytorium,
które nie jest ani repozytorium worktree, ani nie jest połączone z obszarem
roboczym. Control Center has no GitHub credential that can push … oznacza,
że GitHub App nie jest zainstalowana w tym repozytorium i żadne zapasowe
poświadczenie nie mogło wykonać push: zainstaluj tam aplikację albo połącz
GitHuba.
Karta Piaskownica nie zgłasza natywnego sandboxa
Dział zatytułowany „Karta Piaskownica nie zgłasza natywnego sandboxa”Wtedy uruchomienia agenta na tym hoście nie są opakowywane przez Seatbelt ani
bubblewrap i pozostają Ci pozostałe granice. W Linuksie i WSL2 zainstaluj oba
brakujące narzędzia — sudo apt-get install bubblewrap socat — i zrestartuj
serwer; log startowy powinien wtedy mówić, że sandbox jest włączony. W Windows
nie ma natywnego backendu do zainstalowania, więc zamiast tego zaostrz
guardraile: zobacz
Skonfiguruj guardraile.
Agent dotarł do pliku poza swoim drzewem roboczym
Dział zatytułowany „Agent dotarł do pliku poza swoim drzewem roboczym”To, które narzędzie do niego dotarło, decyduje o tym, czy jest to oczekiwane.
Narzędzia plikowe harnessa działające w procesie (read, write, edit, apply
patch, search, find, search_files) uruchamiają się w procesie serwera, więc
żaden profil sandboxa ich nie dotyczy — ich granicą jest własna izolacja
ścieżek oraz guardraile. Polecenie bash albo CLI Claude Code są opakowane
tam, gdzie istnieje backend, a Twoje zarejestrowane kopie robocze są wewnątrz
tego opakowania objęte zakazem zapisu w każdym trybie, również w zapisie po
rozwiązaniu dowiązań symbolicznych (w macOS ścieżka osiągnięta przez /tmp lub
/var/folders rozwiązuje się pod /private i oba zapisy są teraz odrzucane).
Na hoście bez backendu nic z tego nie obowiązuje. Tak czy inaczej guardraile
mogą odrzucić Zapis poza drzewem roboczym wprost.
Powiązane poradniki
Dział zatytułowany „Powiązane poradniki”- Skonfiguruj guardraile
- Utwórz i skonfiguruj agenta
- Diagnozuj agenta
- Backendy sandboxa
- cc_server CLI: flaga
--sandbox