Przejdź do głównej zawartości

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.

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 nieinteraktywne claude -p w 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 bash harnessa opierają się na oczyszczaniu środowiska oraz polityce poleceń; Claude Code dziedziczy środowisko hosta przez NoSandboxAdapter. Serwer mówi o tym w swoim logu startowym. Sprawdź swój poniżej.

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
  1. Przejdź do Ustawienia → Obszar roboczy → Uprawnienia agentów
  2. 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 bash harnessa oraz, przez hook, w narzędziu Bash Claude 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_fetch i web_search harnessa 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.

  1. Przejdź do Ustawienia → Serwer → Diagnostyka i prywatność
  2. 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.
  3. Odczytaj log startowy serwera. Drukuje dokładnie jeden z trzech wierszy:
    • agent sandbox ON plus informację o backendzie — uruchomienia są opakowane
    • no OS-native agent sandbox on this host plus wskazówkę instalacyjną, jeśli taka istnieje — uruchomienia nie są opakowane
    • agent 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.

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.

Zatwierdzenie to decyzja guardraila, a nie ustawienie sandboxa.

  1. Przejdź do Ustawienia → Obszar roboczy → Uprawnienia agentów
  2. 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.

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.

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.

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.