Menjalankan Claude Code tanpa pengawasan tanpa menyesal
Coding agent yang bertanya sebelum setiap perintah memang aman, tetapi tidak berguna di malam hari. Agen berhenti di prompt pertama dan menunggu sampai pagi. Solusinya bukan mematikan semua pemeriksaan. Solusinya adalah memutuskan sejak awal apa yang boleh dilakukan agen sendiri, apa yang tidak boleh sama sekali, dan apa yang harus ditanyakan dulu. Halaman ini adalah keputusan itu, lengkap dengan pengaturan yang menegakkannya.
Mulai dari mesinnya, bukan dari flag
Setiap pengaman di bawah lebih mudah jika agen berjalan di mesin yang tidak menyimpan apa pun selain pekerjaannya. Di laptop Anda, “izinkan semua” berarti email, password manager, kredensial production, dan foto Anda. Di mesin khusus dengan satu repository dan satu token terbatas, “izinkan semua” berarti repository dan token itu saja. Panduan Anthropic sendiri menyebut mode bypass seharusnya dipakai di lingkungan yang terisolasi. Taruh agen di lingkungan seperti itu, dan sisa halaman ini jadi lebih sederhana.
Mode izin di Claude Code
Claude Code punya empat mode. Pilih satu per tugas, bukan satu untuk selamanya.
- default. Bertanya sebelum mengedit file dan menjalankan perintah shell. Cocok untuk kerja interaktif. Tidak cocok untuk semalaman.
- acceptEdits. Mengedit file di direktori kerja tanpa bertanya. Tetap bertanya sebelum perintah shell. Pilihan tengah yang baik untuk refactor yang hasilnya dinilai oleh test.
- plan. Membaca dan berpikir, tetapi tidak mengubah apa pun. Pakai untuk mendapat rencana yang Anda tinjau sebelum eksekusi sungguhan.
- bypassPermissions. Tanpa prompt sama sekali. Ini mode tanpa pengawasan. Pakai hanya di mesin terisolasi dengan aturan deny di bawah sudah terpasang.
Tentukan mode saat memulai.
claude --permission-mode acceptEdits
Atau jadikan satu mode sebagai default proyek di file pengaturannya. File itu bisa Anda commit agar seluruh tim memakai pengaturan yang sama.
// .claude/settings.json
{
"permissions": {
"defaultMode": "acceptEdits"
}
}Aturan deny berlaku di semua mode
Bagian ini yang paling sering terlewat. Aturan izin berlapis di atas mode. Aturan deny tetap memblokir aksi, bahkan di mode bypass. Karena itu aturan deny adalah jaring pengaman sesungguhnya untuk eksekusi tanpa pengawasan. Aturan allow menyetujui lebih dulu hal yang selalu Anda setujui, agar agen tidak macet karenanya.
// .claude/settings.json
{
"permissions": {
"allow": [
"Bash(npm test:*)",
"Bash(npm run lint:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git push origin HEAD:*)"
],
"deny": [
"Bash(git push:*--force*)",
"Bash(git push origin main:*)",
"Bash(rm -rf:*)",
"Bash(curl:*)",
"Read(./.env)",
"Read(./.env.*)",
"Read(~/.ssh/**)"
]
}
}Bacalah daftar deny sebagai kebijakan, karena memang itulah fungsinya. Tidak ada force push. Tidak ada push ke main. Tidak ada penghapusan rekursif. Tidak ada request keluar yang dibuat-buat oleh agen. Tidak ada pembacaan file rahasia. Sesuaikan dengan proyek Anda, tetapi selalu pasang daftar deny di setiap mesin tanpa pengawasan.
Hook untuk aturan yang tidak bisa ditulis sebagai pola
Beberapa aturan bergantung pada konteks. Hook menjalankan script sebelum tool call, dan bisa menyetujui, memblokir, atau mengubahnya. Contoh yang umum: memblokir perintah apa pun yang menyebut hostname production.
// .claude/settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "./scripts/block-prod.sh" }
]
}
]
}
}Script itu membaca tool call dari standard input. Untuk memblokirnya, script keluar dengan kode selain nol. Buat hook kecil dan membosankan. Hook yang bisa gagal tanpa ada yang sadar lebih buruk daripada tanpa hook.
Git adalah pengaman terbaik Anda
Pengaturan di dalam agen adalah satu lapisan. Repository adalah lapisan kedua, dan lapisan ini tidak peduli agen mana yang berjalan.
- Lindungi main. Wajibkan pull request dan CI yang hijau untuk merge. Dengan begitu push liar tidak bisa memasukkan apa pun.
- Satu branch per tugas. Agen mulai di branch baru dan hanya mem-push branch itu.
- Beri agen token yang hanya bisa push branch dan membuka pull request. Tanpa scope admin. Tanpa scope delete. Token GitHub fine-grained untuk satu repository bisa melakukan ini.
- Test adalah penilainya. Jika test gagal, pull request tetap merah dan Anda melihatnya di pagi hari.
Kredensial: seminimal mungkin dan terpisah
Jangan pernah menaruh kredensial pribadi di mesin tanpa pengawasan. Buat akun atau token terpisah untuk agen, dengan scope terkecil yang cukup untuk tugasnya. Staging, bukan production. Read-only jika membaca sudah cukup. Jika agen perlu login ke layanan lewat browser, login ke akun test. Ganti token saat proyek selesai.
Eksekusi headless dengan batas
Untuk tugas berbasis script, mode print menjalankan satu prompt lalu keluar. Beri batas jumlah turn agar agen yang bingung tidak berputar sepanjang malam.
claude -p "Fix the failing tests in packages/api and open a PR" \ --permission-mode acceptEdits \ --max-turns 60
Simpan output ke file log. Di pagi hari Anda ingin membaca apa yang dilakukannya, bukan menebak.
Aturan yang sama untuk Codex
Codex CLI memisahkan dua pertanyaan. Kapan ia meminta persetujuan, dan apa saja yang boleh disentuhnya. Untuk tugas tanpa pengawasan di satu repository, kombinasinya adalah tidak pernah bertanya, dan hanya menulis di dalam workspace.
codex -a never -s workspace-write exec "Fix the failing tests and commit"
Codex juga punya flag yang menghapus persetujuan sekaligus sandbox. Perlakukan persis seperti mode bypass di Claude Code. Hanya di mesin terisolasi, atau jangan sama sekali.
Daftar larangan
Apa pun tool-nya, agen tanpa pengawasan tidak boleh bisa melakukan satu pun hal berikut. Jika setup Anda mengizinkan salah satunya, perbaiki sebelum eksekusi semalaman yang pertama.
- Push ke branch yang dilindungi, atau force push ke mana pun.
- Membaca atau mengirim rahasia yang tidak dibutuhkan untuk tugasnya.
- Menyentuh data production, bahkan hanya untuk membaca.
- Membelanjakan uang. Tanpa konsol cloud, halaman pembayaran, atau akun iklan.
- Mengirim pesan ke orang. Bukan email, bukan chat, bukan media sosial.
- Menghapus apa pun di luar working tree.
Pertanyaan yang sering diajukan
Apakah --dangerously-skip-permissions sama dengan bypassPermissions?
+
Ya. Flag itu dan nama mode izin itu melakukan hal yang sama: tanpa prompt. Administrator bisa menonaktifkan mode ini sepenuhnya lewat managed settings. Jika begitu, flag dan pengaturannya sama-sama tidak berfungsi.
Apakah aturan deny benar-benar berlaku di mode bypass?
+
Ya. Aturan deny memblokir di semua mode, termasuk bypassPermissions. Itulah yang membuatnya jadi jaring pengaman yang tepat untuk eksekusi tanpa pengawasan.
Mode apa yang paling aman tetapi tetap berguna untuk kerja semalaman?
+
acceptEdits dengan daftar deny dan branch main yang dilindungi. Agen bebas mengedit, test yang memutuskan, dan perintah shell yang belum disetujui akan menunggu Anda. Tambahkan aturan allow untuk perintah yang sering membuatnya menunggu.
Apakah agen sebaiknya berjalan sebagai user admin?
+
Di macOS biasanya harus, karena Homebrew dan Xcode mengharapkannya. Ini satu alasan lagi untuk memakai mesin khusus. Akses admin di mesin yang hanya berisi satu repository punya dampak kecil. Akses admin di laptop Anda tidak.