Managed Settings Claude Code: Kebijakan yang Benar-Benar Mengikat

Di direktori sistem untuk sistem operasinya: /Library/Application Support/ClaudeCode/ di macOS, /etc/claude-code/ di Linux dan WSL, serta C:\Program Files\ClaudeCode\ di Windows. Path ProgramData lama di Windows sudah tidak dibaca. Direktori yang sama juga memuat direktori drop-in managed-settings.d opsional dan managed-mcp.json.
Hampir selalu karena ada sumber managed berprioritas lebih tinggi. Claude Code memakai sumber pertama yang memuat setidaknya satu policy key — remote settings, lalu kebijakan MDM atau OS, lalu file, lalu registry pengguna — dan mengabaikan sisanya tanpa peringatan apa pun. Jalankan /status dan baca baris Setting sources untuk melihat sumber mana yang benar-benar dipilih.
Tidak, dengan satu pengecualian kecil. Claude Code memilih satu sumber dan mengabaikan yang lain alih-alih menggabungkannya. Beberapa key lintas sumber tetap dibaca dari setiap admin source — lock sandbox, sebagian kontrol sandbox, dan sejak v2.1.223 blok env, yang digabung per variabel sehingga sumber lebih rendah mengisi variabel yang dibiarkan kosong oleh yang lebih tinggi.
Tidak lewat file setting, tetapi ada empat hal di luar aturan itu. Nilai model managed adalah default, bukan kunci, jadi pakai availableModels untuk membatasi pilihan. Administrator lokal bisa mengedit sumber managed-nya sendiri. Edit pada cache server-managed hanya bertahan sampai pengambilan berikutnya. Dan managed settings mengikat Claude Code, bukan perkakas lain yang memanggil API.
Claude Code memperbaiki entri satuan yang bisa diperbaiki, membuang key tingkat atas yang tetap gagal, dan terus menegakkan semua yang valid. Beberapa key penegakan justru gagal tertutup — allowlist MCP atau model yang tidak valid ditegakkan sebagai kosong. Batas versi minimum dan maksimum sengaja gagal terbuka, supaya kiriman kebijakan yang keliru tidak bisa menghentikan Claude Code berjalan.

Ringkasan Utama
Managed settings Claude Code berlaku di atas setiap level setting lain, sehingga tidak ada nilai user, project, maupun local yang bisa menimpanya. Ketika lebih dari satu sumber managed mengirimkan kebijakan, Claude Code memakai yang pertama memuat policy key lalu mengabaikan sisanya sepenuhnya alih-alih menggabungkannya, dan ia tidak menampilkan peringatan apa pun untuk sumber yang dilewati.
Seorang administrator yang saya ajak bicara sudah mengirimkan file managed settings yang disusun rapi ke setiap mesin, memverifikasi JSON-nya, memverifikasi path-nya, dan tetap tidak paham kenapa tak satu pun berlaku. File-nya tidak bermasalah. Organisasi mereka juga sudah mengonfigurasi server-managed settings beberapa bulan sebelumnya, dan sumber itu mengalahkan sebuah file — jadi Claude Code membaca kebijakan remote dan diam-diam mengabaikan yang baru saja mereka kirim.
Managed settings adalah mekanisme yang membuat Claude Code bisa digelar di organisasi yang punya aturan, dan yang membuatnya membingungkan adalah ia tidak berperilaku seperti sisa sistem setting. Tulisan ini membahas empat mekanisme pengirimannya, prioritas menang-mutlak beserta pengecualiannya, key yang hanya bisa disetel sumber managed, apa yang terjadi ketika sebuah nilai tidak valid, dan dua perintah yang menjawab apakah kebijakan itu benar-benar berlaku.
Setiap mekanisme membawa policy key yang sama seperti file setting biasa, jadi referensi setting berlaku untuk semuanya. Yang berbeda adalah di mana kebijakannya disimpan dan kapan Claude Code membacanya. Baris file dan MDM bersama-sama disebut endpoint-managed, karena kebijakannya tersimpan di perangkat; server-managed adalah baris tempat Claude Code justru mengambilnya.
Pilih berdasarkan cara Anda sudah mengelola perangkat:
| Mekanisme | Kapan Claude Code membacanya | Pakai kalau |
|---|---|---|
| Server-managed settings | Diambil saat startup, di-poll tiap jam | Anda ingin satu tempat mengubah kebijakan tanpa menyentuh mesin |
| Kebijakan MDM atau level OS | Saat startup, diperiksa ulang tiap 30 menit | Anda sudah menjalankan Jamf, Intune, atau Group Policy |
| File managed settings | Saat startup, dimuat ulang saat file berubah | Mesin tanpa MDM, host Linux, image yang Anda bangun |
| Registry pengguna di Windows | Saat startup, diperiksa ulang tiap 30 menit | Anda tidak bisa menulis key level mesin |
# managed-settings.json goes in the system directory for the OS.
# Note that the legacy Windows ProgramData path is NOT read.
macOS /Library/Application Support/ClaudeCode/
Linux and WSL /etc/claude-code/
Windows C:\Program Files\ClaudeCode\
# Same directory also holds an optional drop-in directory and
# the managed MCP configuration:
# managed-settings.d/*.json
# managed-mcp.json
# Drop-ins let several teams own parts of one policy. Claude Code
# merges managed-settings.json first, then every .json file in the
# directory in ALPHABETICAL order — so prefix them:
# 10-telemetry.json
# 20-security.jsonInilah bagian yang layak dibaca dua kali. Claude Code memeriksa sumbernya dengan urutan tetap dan memakai yang pertama memuat setidaknya satu policy key. Ia tidak menggabungkan sisanya — ia mengabaikannya, tanpa peringatan:
Sumber yang hanya memuat kontrol pewarisan WSL tidak dihitung sebagai mengirimkan policy key, dan Claude Code beralih ke sumber berikutnya. Itu satu-satunya pengecualian yang disengaja pada aturan penghitungannya, dan ia ada supaya kontrol tersebut bisa disetel tanpa tanpa sengaja mengklaim seluruh slot kebijakan.
Sekumpulan kecil key melanggar aturan menang-mutlak itu, karena mereka berupa lock atau kontrol keamanan tempat nilai yang lebih ketat dari mana pun seharusnya menang. Claude Code membacanya dari setiap admin source — yang tidak mencakup registry yang bisa ditulis pengguna:
Sebagian besar key khusus managed adalah lock. Nilai yang diatur sebuah lock — permission rule, domain sandbox — adalah key biasa yang bisa disetel level mana pun; lock-lah yang memberi tahu Claude Code untuk hanya menghormati nilai managed. Mengirimkan aturan tanpa lock yang bersesuaian adalah cara paling umum sebuah kebijakan berakhir sebagai saran alih-alih ikatan.
// A managed policy that actually constrains something.
{
"permissions": {
"deny": ["Read(./.env)", "Read(./secrets/**)"],
"disableBypassPermissionsMode": "disable"
},
// Without this, a developer's own allow rules still apply
// alongside yours. With it, ONLY managed rules count — and
// --allowedTools is ignored too.
"allowManagedPermissionRulesOnly": true
}
# Confirm it landed on one machine before the fleet:
/status # look for the "Setting sources" line
# Enterprise managed settings (file)
# ... (remote) (plist) (HKLM) (drop-ins) (HKCU)
# ... (parent process) (helper)
claude doctor # lists every entry Claude Code DROPPED, with
# its source and fieldAda daftar panjang key khusus managed di luar permission: kontrol untuk hook mana yang boleh berjalan, MCP server mana yang diterima, marketplace plugin mana yang diizinkan, apakah plugin bersumber command boleh berjalan sama sekali, apakah flag sideload ditolak saat startup, dan apakah skill, agent, hook, serta MCP server boleh datang dari sumber user dan project. Referensi setting menandai masing-masing, dan baris scope adalah kolom yang perlu dibaca.
Claude Code sengaja toleran terhadap managed settings: ia memperbaiki yang bisa diperbaiki, membuang key tingkat atas yang tetap gagal, dan terus menegakkan semua yang valid. Segelintir key penegakan menolak dibuang, karena membuangnya justru hasil yang tidak aman:
Yang terakhir itu keputusan desain yang layak dihargai. Setiap key penegakan lain gagal tertutup, tetapi batasan versi gagal terbuka, karena salah ketik di field versi minimum yang membuat CLI setiap developer mati total akan jauh lebih buruk daripada batas versi yang sementara tidak ditegakkan. Itu naluri yang bagus untuk ditiru di perkakas kebijakan Anda sendiri.
Managed settings memang kuat, dan layak jujur soal empat hal yang berada di luarnya, karena tinjauan keamanan pasti menanyakannya:
Kalau beberapa tim memiliki bagian dari satu kebijakan, pakai direktori drop-in alih-alih satu file bersama. Claude Code menggabungkan file utamanya dulu, lalu setiap file JSON di direktori itu secara alfabetis, jadi prefiks angka mengatur urutannya. List digabung dengan duplikat dibuang, blok bersarang digabung per key, dan nilai tunggal digantikan file berikutnya — yang berarti dua tim bisa memiliki urusan yang benar-benar terpisah tanpa mengedit file yang sama.
Dua perintah menuntaskan setiap versi pertanyaan ini. Baris setting-sources pada perintah status menyebutkan sumber managed yang dipilih Claude Code, di dalam kurung, sehingga Anda tahu sekaligus bahwa sebuah kebijakan aktif dan mekanisme mana dari empat itu yang menang. Baris yang hilang berarti tidak ada sumber yang mengirimkan policy key sama sekali; baris yang menyebut sumber lain berarti ada sumber berprioritas lebih tinggi dan milik Anda diabaikan.
Perintah doctor menjawab separuh lainnya: apa yang terbuang. Ketika sebuah file, profil, nilai registry, atau payload server gagal validasi skema, Claude Code melewati entri yang bisa diperbaikinya dengan satu peringatan masing-masing, lalu membuang key tingkat atas yang nilainya tetap gagal. Sesi interaktif menampilkan dialog saat startup, run non-interaktif mencetak ke standard error, dan perintah doctor mendaftar tiap entri tidak valid beserta sumber dan field-nya.
Aturan yang perlu dibawa pulang: managed settings bukan penggabungan, melainkan pemilihan. Putuskan mana dari empat mekanisme itu yang menjadi sumber kebenaran Anda, kirimkan hanya lewat mekanisme tersebut, dan verifikasi lewat baris status di satu mesin sebelum menyentuh seluruh armada. Lalu pasangkan setiap aturan dengan lock yang membuatnya mengikat, karena permission rule tanpa lock-nya hanyalah saran — dan saran bukan yang ingin dikirim siapa pun yang menggelar managed settings.
Sumber & bacaan lanjutan