Model Keamanan Claude Code: Lapisan, Kepercayaan, dan Batas

Di manual mode ia dimulai read-only dan menjalankan satu set bawaan perintah read-only — daftar direktori, pembacaan file, status repository — tanpa bertanya. Segala hal yang mengubah sistem Anda memunculkan prompt lebih dulu. Di auto mode, sebuah classifier meninjau aksi menggantikan Anda, sementara ask rule dan deny rule eksplisit Anda tetap berlaku di atasnya.
Tidak. Ia menyetujui otomatis edit file plus satu set tetap perintah Bash filesystem untuk path di dalam working directory, dan set itu memuat penghapusan serta pemindahan di samping yang tidak berbahaya seperti mkdir dan touch. Perintah lain dan path di luar cakupan tetap memunculkan prompt, jadi mode ini terbatas, tetapi lebih lebar daripada yang disiratkan namanya.
Memulai Claude Code langsung di home directory Anda hanya menahan kepercayaan untuk sesi saat itu dan tidak pernah menulisnya ke disk, jadi prompt-nya muncul lagi tiap kali diluncurkan. Tidak ada setting untuk mempermanenkannya — home directory memuat segalanya, jadi pemberian permanen akan jauh lebih besar daripada memercayai satu proyek. Mulailah dari subdirektori proyek.
Tidak, tidak di level mana pun secara default. Perintah yang mengambil konten dari web memunculkan prompt seperti perintah non-read-only lainnya di manual mode, karena pengambilan data adalah langkah yang mengubah muatan prompt injection menjadi request keluar. Untuk memblokirnya sepenuhnya alih-alih memunculkan prompt, tambahkan ke permissions.deny.
Claude Code on the web berjalan di VM terisolasi yang dikelola Anthropic dengan akses jaringan terbatas, kredensial git yang dibatasi, push yang dikunci ke branch kerja, dan audit logging. Remote Control sama sekali tidak melibatkan VM cloud — eksekusi dan akses file tetap di mesin Anda, dan antarmuka web hanyalah jendela ke proses lokal tersebut.

Ringkasan Utama
Claude Code dalam manual mode dimulai dengan izin read-only dan bertanya sebelum mengedit file atau menjalankan perintah yang mengubah sistem. Batas working directory-nya asimetris: penulisan terkurung pada folder awal dan subfoldernya, sedangkan pembacaan di luar batas itu memunculkan prompt di manual mode tetapi tidak di auto mode. Accept-edits menyetujui otomatis edit file plus satu set tetap perintah filesystem.
Saya memindahkan sebuah sesi ke accept-edits mode dengan harapan ia menyetujui otomatis penulisan file, karena itulah yang tertulis di namanya. Ia juga menyetujui otomatis sebuah perintah penghapusan, pada path di dalam working directory saya, tanpa bertanya. Tidak ada yang rusak dan tidak ada yang hilang, tetapi saya sudah berminggu-minggu memakai mode itu dengan model mental yang lebih sempit daripada perilaku sebenarnya.
Model keamanannya berlapis dan sebagian besar masuk akal, dan yang berguna adalah mengetahui persis di mana tiap lapisan berhenti. Tulisan ini membahas arsitektur permission-nya dan apa arti read-only sesungguhnya, batas direktori dan kenapa ia berperilaku berbeda per mode, pertahanan terhadap prompt injection, dialog kepercayaan beserta keanehannya di home directory, dan di mana eksekusi cloud berbeda dari sesi lokal.
Di manual mode, Claude Code dimulai dengan izin read-only dan bertanya sebelum mengedit file, menjalankan tes, atau mengeksekusi perintah. Ada satu set bawaan perintah read-only yang dijalankannya tanpa bertanya — daftar direktori, pembacaan file, status repository — dan selebihnya memunculkan prompt, dengan pilihan menyetujui sekali atau mengizinkannya sejak saat itu.
Auto mode menggantikan Anda, bukan menggantikan gerbangnya: sebuah model classifier terpisah meninjau aksi dan memblokir yang dinilainya tidak aman. Ask rule dan deny rule eksplisit Anda tetap berlaku di atasnya, dan sebuah organisasi bisa mematikan auto mode sepenuhnya. Mode awal sebuah sesi bergantung pada paket Anda, permukaan tempat Anda memulainya, serta setting Anda dan organisasi Anda — dan itulah sebabnya dua orang di satu tim bisa melihat perilaku default yang berbeda sambil sama-sama terkonfigurasi dengan benar.
Penulisan dan pembacaan diperlakukan berbeda, dan selisih antar mode hanya ada di sisi pembacaan. Ini layak dipahami karena model mental tentang satu batas saja akan keliru di kedua arah.
# The working-directory boundary is NOT symmetric, and it
# changes between permission modes.
# Manual mode
# WRITE -> only the folder Claude Code started in, and its
# subfolders. Parent directories need explicit
# permission.
# READ -> asks before Read, Grep and Glob touch a path
# outside that boundary.
# Auto mode
# READ -> reads outside the boundary WITHOUT asking.
# Widen it deliberately with additional directories, or narrow
# the broad read access that read-only Bash commands get with
# sandbox denyRead rules — which apply only when sandboxing
# is actually enabled.Namanya merendahkan cakupannya. Accept-edits menyetujui otomatis edit file dan satu set tetap perintah filesystem untuk path di dalam working directory — dan set itu memuat penghapusan serta pemindahan, bukan hanya yang tidak berbahaya. Perintah lain dan path di luar cakupan tetap memunculkan prompt, jadi mode itu memang terbatas, tetapi batasnya lebih lebar daripada yang disiratkan labelnya.
# What "accept edits" really auto-approves. It is not
# "everything" — it is file edits plus a FIXED set of
# filesystem Bash commands, for paths inside the working
# directory:
mkdir touch rm mv cp sed
# Anything else, and any out-of-scope path, still prompts.
#
# Worth knowing that rm and sed are on that list. "Accept
# edits" sounds narrower than it is.
# Commands that fetch from the web are NOT auto-approved by
# default at any level:
curl wget
# In manual mode they prompt like any other non-read-only
# command. To block them outright rather than prompt:
# permissions.deny: ["Bash(curl *)", "Bash(wget *)"]Perintah yang mengambil konten dari web sengaja tidak disetujui otomatis di level mana pun. Di manual mode ia memunculkan prompt seperti perintah non-read-only lainnya, jadi Anda bisa menyetujui sekali atau menambahkan allow rule eksplisit. Default itu ada karena pengambilan data adalah langkah yang mengubah muatan prompt injection menjadi request keluar — kalau Anda hendak menambah allow rule menyeluruh untuk sesuatu, inilah kandidat terburuknya.
Tidak satu pun mekanisme di sini merupakan jawaban lengkap, dan Anthropic menyatakannya terus terang. Yang mereka hasilkan bersama adalah beberapa kesempatan independen untuk menangkap serangan yang sama:
Menjalankan pertama kali di sebuah codebase dan menambahkan MCP server baru sama-sama membutuhkan verifikasi kepercayaan. Dua catatan lebih penting daripada fiturnya sendiri. Verifikasi kepercayaan dimatikan sepenuhnya saat berjalan non-interaktif dengan flag prompt, dan itu benar — tidak ada siapa pun untuk ditanya — tetapi artinya run otomatis tidak mendapat lapisan ini. Dan memulai Claude Code langsung di home directory Anda hanya menahan kepercayaan untuk sesi saat itu, tidak pernah menulisnya ke disk, jadi prompt-nya muncul lagi tiap kali diluncurkan.
Tidak ada setting untuk mempermanenkan kepercayaan home directory, dan itu disengaja, bukan kelalaian — home directory Anda memuat segalanya, jadi menerimanya sekali secara permanen akan menjadi pemberian jauh lebih besar daripada menerima sebuah proyek. Kalau prompt berulang itu mengganggu, perbaikannya adalah memulai Claude Code dari subdirektori proyek, tempat kepercayaan disimpan per direktori. Perlakukan prompt berulang itu sebagai desain yang sedang memberi tahu Anda sesuatu.
Ketiganya terus-menerus dicampuradukkan, padahal properti keamanannya sungguh berbeda. Meluruskannya paling penting ketika seseorang bertanya di mana kodenya berjalan, karena jawaban jujurnya berbeda per permukaan.
Tiga permukaan, tiga jawaban:
| Permukaan | Di mana kode dieksekusi | Kendali yang menonjol |
|---|---|---|
| Terminal lokal atau IDE | Mesin Anda | Permission, sandboxing, batas direktori |
| Claude Code on the web | VM terisolasi yang dikelola Anthropic | Batas jaringan, kredensial git terbatas, push dikunci ke branch kerja, audit logging |
| Remote Control | Mesin Anda, dikemudikan dari jauh | Tidak ada VM cloud sama sekali; kredensial berumur pendek dan terbatas, transkrip disimpan untuk menyinkronkan perangkat |
Setelah nasihat generiknya disaring, empat hal mengubah profil risiko secara terukur:
Kredensial disimpan di keychain sistem operasi jika tersedia, dan dilindungi izin file di Windows dan Linux. Perbedaan itu layak diketahui sebelum Anda memutuskan seberapa penting container yang terkompromi: di macOS keychain adalah batas yang nyata, sedangkan di host CI Linux perlindungannya adalah izin filesystem, klaim yang jauh lebih lemah di dalam container yang bisa dimasuki orang lain.
Modelnya berlapis alih-alih mutlak, dan setiap lapisan menyebutkan batasnya sendiri kalau Anda membacanya dengan sengaja. Claude Code hanya memiliki izin yang Anda berikan, dan meninjau apa yang Anda setujui memang bagian dari desainnya, bukan sekadar penyangkalan. Dua kebiasaan yang layak dibangun adalah membaca perintah di dalam prompt alih-alih bentuknya, dan mengetahui Anda sedang di mode apa — karena aksi yang sama mendapat tingkat pemeriksaan berbeda tergantung jawaban yang berhenti diperiksa kebanyakan orang setelah pekan pertama.
Sumber & bacaan lanjutan