Lewati ke konten

Konfigurasi pagar pengaman

Panduan ini menunjukkan cara mengonfigurasi pagar pengaman: aturan yang menentukan apakah tindakan agen dijalankan, meminta persetujuan lebih dulu, atau ditolak.

Pagar pengaman mencakup tiga belas kelas efek yang dideklarasikan setiap alat yang mengubah keadaan. Semuanya ditegakkan di sisi server pada titik alat itu dipanggil, tidak pernah lewat instruksi di dalam prompt.

  1. Buka Pengaturan → Ruang kerja → Izin agen
  2. Pilih cakupan dengan kontrol tersegmentasi: Ruang kerja, Agen (lalu pilih agennya), atau Space (lalu pilih space tersebut)
  3. Pada baris kelas aksi, pilih Izinkan, Tanyakan dulu, atau Tolak
  4. Untuk menghapus aturan yang Anda tetapkan, tekan tombol reset yang muncul di ujung baris itu (Kembalikan ke diwariskan) — keputusannya kembali ke cakupan yang lebih luas

Setiap baris menampilkan keputusan efektif sebagai tag status dan badge yang menunjukkan asalnya: Cakupan ini, Diwariskan, atau Default bawaan. Matriks ini diselesaikan pada mode Agen (chat), sehingga Preset mode tidak pernah muncul di sini — gunakan “Bagaimana jika?” dengan mode hanya-baca yang dipilih untuk melihat lapisan itu.

Menulis aturan membutuhkan peran admin. Membaca matriksnya tidak.

Titik pemeriksaan: tetapkan Push ke remote ke Tolak pada cakupan ruang kerja, lalu jalankan “Bagaimana jika?” di bawah untuk git push origin main. Hasilnya terbaca deny dengan sumber workspace.

Penyelesaiannya adalah spesifisitas lebih dulu, lalu keketatan:

  1. Aturan Space, lalu Agen, lalu Ruang kerja. Cakupan pertama yang memiliki aturan yang cocoklah yang memutuskan dan penyelesaian berhenti
  2. Jika tidak ada aturan yang cocok, preset mode berlaku — mode hanya-baca (rencana, tinjauan, orkestrasi) menolak sebelas dari tiga belas kelas
  3. Jika mode tidak menentukan apa pun, default bawaan yang berlaku

Dalam satu cakupan, aturan perintah diselesaikan berdasarkan prefiks yang cocok paling panjang, dan konflik yang sama spesifiknya diselesaikan secara paling ketat — tolak mengalahkan tanyakan dulu, yang mengalahkan izinkan. Tindakan yang mendeklarasikan beberapa kelas diselesaikan satu per satu secara independen, lalu digabungkan secara paling ketat.

Keputusan Tanyakan dulu memunculkan satu prompt persetujuan yang mencakup setiap kelas yang diselesaikan menjadi prompt. Tanpa pemberi persetujuan yang terhubung, keputusan itu ditolak, baik untuk perintah shell maupun panggilan alat harness. Itu memang disengaja: eksekusi tanpa gerbang lebih buruk daripada eksekusi yang ditolak.

Kelas aksi Default bawaan
Hapus file Tanyakan dulu
Tulis di luar pohon kerja Izinkan
Buat commit Izinkan
Push ke remote Tanyakan dulu
Buka pull request Tanyakan dulu
Publikasikan review atau merge Tanyakan dulu
Tulis ke pelacak eksternal Tanyakan dulu
Akses jaringan Izinkan
Baca secret Izinkan
Instal paket Izinkan
Jalankan proses Izinkan
Ubah struktur ruang kerja Izinkan
Kendalikan enclosure (rig) Izinkan

Taksonomi ini tertutup. Alat baru yang dirilis tanpa mendeklarasikan kelasnya akan gagal dalam uji ratchet di CI, sehingga tidak ada yang hadir dengan himpunan efek yang kosong secara diam-diam.

Sebelum mengubah aturan, periksa bagaimana kebijakan saat ini sudah menyelesaikannya.

  1. Di halaman yang sama, gulir ke Bagaimana jika?
  2. Pilih Aksi (salah satu dari tiga belas kelas)
  3. Secara opsional isi Perintah (misalnya git push origin main), Agen, Ruang, dan Mode
  4. Baca hasilnya: keputusan, alasannya, dan Sumber:

“Bagaimana jika?” menjalankan resolver yang sama dengan yang dipakai jalur penegakan, terhadap aturan aktif Anda, sehingga jawabannya persis. Jika hasilnya mengejutkan Anda, ubah aturan di matriks di atas lalu jalankan “Bagaimana jika?” lagi.

Dial ini berlaku per agen per space dan digabungkan dengan aturan, bukan menggantikannya.

  1. Buka space tersebut
  2. Buka Kelola peserta dari header space
  3. Di bawah Otonomi pada baris agen, pilih sebuah level:
Level Efek
Bawaan Tidak ada pengaturan space — berperilaku seperti Bertindak dengan persetujuan
Hanya usulkan Setiap alat yang melewati gerbang ditolak langsung, dengan pesan yang memberi tahu agen agar mengusulkan tindakan itu sebagai gantinya
Bertindak dengan persetujuan Tindakan berisiko mengenai gerbang persetujuan fail-closed
Bertindak bebas Menyetujui di muka apa pun yang tidak diselesaikan menjadi deny keras

Dial ini hanya menjangkau harness bawaan. Adapter Claude Code menjalankan alatnya sendiri di luar gerbang ini.

Ketahui di mana pagar pengaman tidak menjangkau

Bagian berjudul “Ketahui di mana pagar pengaman tidak menjangkau”

Tabel Di mana aturan ditegakkan di bagian bawah halaman yang sama adalah versi dalam aplikasi dari hal ini: untuk setiap kelas efek, tabel itu menyatakan apakah setiap runner menangkapnya di gerbang kebijakan, membiarkannya ke sandbox, atau tidak dapat mencegatnya sama sekali.

  • Adapter Claude Code hanya sebagian melewati gerbang untuk panggilan alatnya sendiri. Claude Code dijalankan dengan --dangerously-skip-permissions, sehingga panggilan baca, tulis, dan edit-nya tidak pernah melewati pagar pengaman. Perintah bash-nya mencapai pagar pengaman melalui hook yang mengklasifikasikan baris perintah, dan push-nya melewati gateway push seperti milik agen mana pun. Permukaan alat MCP yang dipanggilnya kembali dan perintah shell yang dijalankan Control Center untuk memulainya juga melewati gerbang.
  • Verba keluaran milik sebuah mode (submit_plan, propose_orchestration) dipakukan dan tidak pernah dapat ditolak — jika tidak, sebuah mode secara struktural tidak akan mampu menghasilkan satu-satunya keluarannya.
  • Apakah sandbox menopang aturan-aturan ini bergantung pada host. Di tempat cc_server menemukan backend, ia membungkus CLI Claude Code dan alat bash milik harness, sehingga aturan yang tidak Anda tulis pun masih memiliki dasar OS di bawahnya. Di Windows tidak ada dasar itu dan di Linux atau WSL2 tanpa bwrap dan socat juga tidak ada — di sana, pagar pengaman plus permukaan alat milik mode merupakan keseluruhan penegakannya, bukan lapisan keduanya. Periksa Anda berada di kasus yang mana dengan Konfigurasi kebijakan sandbox.