Claude Code Auto Mode: Menyetel Permission Classifier

Auto mode mengalirkan tool call melalui classifier yang memblokir apa pun yang tak terbalikkan, destruktif, atau mengarah ke luar lingkungan Anda — force push, menghapus remote branch, curl yang dipipe ke shell, deploy produksi, dan data yang keluar dari batas kepercayaan Anda. Secara default batas itu hanya working directory dan remote dari repo saat ini, jadi selain itu dianggap eksternal sampai Anda mendeskripsikannya di autoMode.environment.
Classifier tidak punya cara untuk tahu bahwa org itu milik Anda. Secara default ia hanya mempercayai working repository dan remote yang terkonfigurasi, dan menganggap tujuan lain berpotensi eksternal. Tambahkan satu baris berisi host dan org source control Anda ke autoMode.environment di user settings, lalu jalankan claude auto-mode config untuk memastikan entrinya berlaku.
Tidak, dan itu disengaja. Classifier hanya membaca autoMode dari user settings, managed settings, dan payload settings inline — tidak pernah dari .claude/settings.json maupun .claude/settings.local.json. Keduanya berada di dalam repo, sehingga file yang ikut ter-commit atau langkah build bisa menyuntikkan allow rule dan memperlebar izinnya sendiri.
Anda mengganti seluruh daftar bawaan tersebut. Menghilangkannya dari soft_deny membuang setiap aturan aksi destruktif bawaan, termasuk force push dan curl yang dipipe ke shell; menghilangkannya dari hard_deny membuang aturan data exfiltration. Jalankan claude auto-mode defaults untuk mencetak aturan bawaan sebelum Anda mengambil alih daftar mana pun.
Tambahkan ask rule yang spesifik seperti pola git push dan pola gh pr create ke permissions.ask. Ask rule eksplisit dievaluasi sebelum classifier dan selalu memaksa munculnya prompt, jadi auto mode tetap mengurus semua hal lain sementara dua aksi itu masih menunggu persetujuan Anda.

Ringkasan Utama
Claude Code auto mode mengalirkan setiap tool call melalui classifier yang memblokir aksi tak terbalikkan, destruktif, atau mengarah ke luar lingkungan Anda, alih-alih menampilkan prompt. Secara default ia hanya mempercayai working directory dan remote dari repo saat ini, jadi operasi internal rutin akan diblokir sampai Anda mendeskripsikan infrastruktur Anda di autoMode.environment sebagai prosa biasa.
Jam pertama saya memakai auto mode, ia memblokir push ke repository milik saya sendiri, di branch yang saya buat sendiri, pada organisasi yang saya pakai setiap hari selama setahun. Tidak ada yang salah. Classifier itu memang tidak punya cara untuk tahu bahwa github.example.com/acme-corp adalah milik saya, jadi dari sudut pandangnya push tersebut adalah unggahan ke host yang belum pernah diberitahukan kepadanya.
Itulah seluruh model mentalnya, dan ada baiknya Anda pahami sebelum mulai menambah allow rule: classifier tidak sedang menilai perintahnya, ia menilai tujuannya terhadap sebuah batas yang belum Anda gambar. Tulisan ini membahas di mana batas itu didefinisikan, urutan prioritas di dalam classifier, subcommand CLI untuk melihat aturan yang benar-benar berlaku, dan satu kesalahan konfigurasi yang diam-diam menghapus seluruh aturan keamanan bawaan.
Sistem permission tetap berjalan lebih dulu. Deny rule memblokir bahkan sebelum classifier dilibatkan dan tidak bisa ditimpa olehnya maupun oleh apa pun yang Anda katakan dalam percakapan. Ask rule eksplisit juga berjalan lebih dulu dan selalu memaksa munculnya prompt. Hanya yang lolos dari keduanya yang sampai ke classifier, yang lalu memutuskan apakah aksi itu cukup aman untuk dijalankan tanpa pengawasan.
Urutan itu penting untuk apa pun yang benar-benar tidak boleh terjadi. Kalau syaratnya memang mutlak, tuliskan sebagai permissions.deny di managed settings — classifier adalah model yang sedang membuat penilaian, dan batas kebijakan sebaiknya bukan soal penilaian. Pakai classifier untuk wilayah abu-abu yang jauh lebih luas, di mana jawaban jujurnya adalah bahwa semuanya tergantung ke mana perintah itu mengarah.
Di dalam classifier urutan prioritasnya tetap, dan mengetahuinya memberi tahu Anda daftar mana yang perlu diedit ketika ada yang salah:
Tingkat terakhir itu jauh lebih sempit daripada dugaan orang. Meminta Claude membersihkan repo tidak mengizinkan force push; meminta Claude melakukan force push pada branch ini baru mengizinkannya. Permintaan umum bukan niat, dan itulah sebabnya prompt yang kabur diblokir sementara yang presisi tidak.
Untuk kebanyakan tim, hanya field ini yang perlu diisi. Ia memberi tahu classifier repo, bucket, host, dan registry mana yang ada di dalam batas Anda, dan dengan sendirinya mendefinisikan apa arti eksternal — apa pun yang tidak terdaftar adalah calon target exfiltration. Entrinya berupa prosa, bukan regex dan bukan pola tool. Tulis seperti Anda menjelaskan infrastruktur kepada engineer baru di hari pertamanya.
// ~/.claude/settings.json — the classifier does NOT read
// .claude/settings.json or .claude/settings.local.json, because
// both live in the repo and a build step could inject allow rules.
{
"autoMode": {
"environment": [
"$defaults",
"Organization: Acme. Primary use: software development",
"Source control: github.example.com/acme-corp and all repos under it",
"Trusted internal domains: *.corp.example.com, api.internal.example.com",
"Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",
"Internal package registry: npm installs route through artifacts.example.com",
"Sensitive remote targets: the prod-* Kubernetes namespaces",
"Protected IaC scopes: everything under infra/terraform/prod/"
]
}
}String literal berisi tanda dolar dan kata defaults menyisipkan entri bawaan di posisi itu, jadi baris kustom Anda bisa diletakkan sebelum atau sesudahnya dan Anda tetap ikut menerima pembaruan saat daftar bawaan berubah antar rilis. Rollout yang masuk akal adalah mulai dari default, tambahkan org source control dan layanan internal utama — yang langsung menghapus blokir paling umum — lalu tambahkan domain dan bucket, dan isi sisanya begitu ada penolakan baru.
Classifier membaca autoMode dari user settings, managed settings, dan payload settings inline. Ia tidak membacanya dari .claude/settings.json maupun .claude/settings.local.json. Keduanya berada di dalam repository, dan file yang ikut ter-commit atau satu langkah build bisa menyuntikkan allow rule sendiri — lubang supply chain yang akan membuat repo hasil clone memperlebar izinnya sendiri. Kalau saat ini Anda punya blok autoMode di file project lokal, pindahkan ke user settings; file itu berhenti dibaca sejak v2.1.207.
Tiga cara menggambar batas, dari yang paling longgar ke paling keras:
| Batas | Mekanisme | Perilaku di auto mode |
|---|---|---|
| Sekali pakai, hanya sesi ini | Sebutkan dalam percakapan | Berlaku sampai compaction membuang pesan yang menyatakannya |
| Tanyakan saya sebelum aksi ini | permissions.ask | Selalu memunculkan prompt; classifier tidak bisa melewatinya |
| Jangan pernah, apa pun niatnya | permissions.deny di managed settings | Memblokir sebelum classifier jalan; tidak ada yang menimpanya |
// A content-scoped ask rule is evaluated BEFORE the classifier
// and always prompts, even in auto mode. This is how you keep a
// human checkpoint on the two actions that leave your machine
// while auto mode handles everything else.
{
"permissions": {
"ask": [
"Bash(git push *)",
"Bash(gh pr create *)"
]
}
}Empat subcommand mengubah ini dari menebak menjadi membaca. Yang paling sering saya pakai adalah config, karena ia mencetak hasil gabungan, bukan apa yang Anda tulis — selisih antara keduanya adalah tempat sebagian besar kebingungan bersarang.
# Print the built-in rules as JSON — read these before you
# ever replace a list, because replacing one discards them.
claude auto-mode defaults
# Read one rule without piping through jq (v2.1.208+).
# Matching is a case-insensitive prefix on the rule label.
claude auto-mode defaults --label 'Git Destructive'
# What the classifier ACTUALLY uses: your settings merged over
# the defaults, with "$defaults" expanded in place.
claude auto-mode config
# Ask Claude to critique your custom rules — it flags entries
# that are ambiguous, redundant, or false-positive machines.
claude auto-mode critique
# Remove the autoMode block from ~/.claude/settings.json.
# Managed settings and --settings rules still apply.
claude auto-mode reset --yesMenyetel environment, allow, soft_deny, atau hard_deny tanpa menyertakan penanda defaults akan mengganti seluruh daftar bawaan tersebut. Hilangkan dari soft_deny dan Anda membuang setiap aturan aksi destruktif bawaan, termasuk force push dan curl yang dipipe ke shell. Hilangkan dari hard_deny dan Anda membuang aturan data exfiltration. Hanya lakukan itu setelah Anda menjalankan subcommand defaults, menyalin aturannya keluar, dan meninjau satu per satu terhadap pipeline Anda sendiri.
Secara default, allow rule shell yang sempit tetap berlaku di auto mode dan diselesaikan sebelum classifier berjalan. Claude Code hanya menangguhkan aturan luas yang memberi eksekusi sembarang, seperti rule Bash dengan wildcard atau interpreter berwildcard. Itu menyisakan celah nyata: rule sempit bisa meloloskan argumen destruktif yang tidak pernah diantisipasi prefix-nya — sebuah path script, sebuah flag tak terduga — langsung lewat tanpa dilihat classifier.
Menyetel autoMode.classifyAllShell ke true menangguhkan setiap allow rule Bash dan PowerShell selama auto mode aktif, sehingga classifier mengevaluasi tiap perintah shell terlepas dari allow list Anda. Pertukarannya adalah latensi ditukar cakupan: perintah yang tadinya langsung disetujui allow rule kini menunggu keputusan classifier, dan tiap perintah dihitung sebagai satu panggilan classifier. Ini hanya berlaku selama auto mode aktif, dan allow rule Anda berperilaku normal di mode lain.
Jalankan command auto-mode-setup daripada menulis blok environment dengan tangan. Ia membaca CLAUDE.md, README, file konfigurasi, dan git remote proyek ini, ditambah host serta nama perintah dari sesi Anda belakangan di proyek tersebut — bukan pesan Anda — lalu menyusun draf entrinya. Anda menerima atau membuang draf itu sebagai satu kesatuan, lalu mengedit baris tertentu di user settings sesudahnya.
Buka dialog permissions dan pilih tab Recently denied; setiap penolakan classifier tercatat di sana, dan menekan r menandai satu aksi untuk diulang sehingga Claude diberi tahu boleh menjalankan panggilan itu lagi. Alasan yang ditampilkan biasanya teks tetap tentang diblokir oleh classifier, bukan penjelasan, karena classifier menilai aksi pada skala severity internal alih-alih menulis prosa. Pilih perbaikannya dari apa yang sedang dituju panggilan itu:
Auto mode sepadan dengan usaha setupnya, tetapi perlakukan blok environment sebagai dokumentasi infrastruktur Anda, bukan daftar akal-akalan. Setiap entri yang Anda tambahkan adalah klaim tentang apa yang ada di dalam batas Anda, dan classifier akan bertindak berdasarkan klaim itu di semua sesi berikutnya. Tulis entri yang siap Anda pertahankan dalam sebuah review, biarkan aturan bawaan tetap tersisip, dan letakkan hal-hal yang tidak boleh terjadi di deny rule yang tidak melibatkan penilaian sama sekali.
Sumber & bacaan lanjutan