AIDive

Saya Bikin Mod Tak Resmi buat Claude Code, Guard-nya Gagal

Oleh AIDive · Terbit

Coding agentKeamanan AI

Dua belas hari dari 'kalau kamu mau ini' sampai Tetris

Claude Code Mods adalah modul TypeScript yang berjalan di dalam engine Claude Code dan meng-hook event-nya sebagai function. Boris Cherny, yang memimpin Claude Code di Anthropic, mengumumkannya dengan lima kata: "Claude mods are landing now." Postingan itu mengumpulkan 2.400 likes, dan seseorang sudah membuat Tetris di dalam terminal. Tetris, Doom, dan peliharaan yang tumbuh selagi Claude menjalankan test kamu, semuanya dirender di atas prompt, dengan nol token.

Pengumuman itu tidak menautkan ke halaman docs mana pun. Ia menautkan ke issue GitHub yang dibuka 12 hari sebelumnya oleh seorang engineer Anthropic, dengan satu syarat tertulis di dalamnya. Alice Poteat menulis bahwa respons dari komunitas kemungkinan besar akan menentukan apakah fitur ini akan dirilis atau tidak. 177 komentar kemudian, orang-orang sudah menghantam binary yang diberi flag, mengukur timeout-nya, dan membangun game di atasnya.

Ukuran Nilai
Likes pada pengumuman 2,400
Komentar pada issue GitHub 177
Permukaan typed pada build minggu ini 10,700 baris
Event pada noun (build thread issue) 84 pada 19
Mod di GitHub dalam 48 jam 31

Halaman docs pada saat artikel ini ditulis mengembalikan 404. Artikel ini membahas empat cara memperluas Claude Code, satu Mod berguna yang dibangun lalu dirusak dengan sengaja, dan apa yang masih belum stabil sebelum kamu merilis satu.

Mod adalah fungsi di tengah

Source tree mendefinisikannya dalam satu kalimat: Mod adalah plugin Claude Code yang perilakunya berada di dalam hooks module. Satu entri register meng-hook event engine sebagai function. Di disk, itu berarti folder plugin, hooks manifest yang menyebut tepat satu module, dan module itu sendiri.

Setiap hook adalah function dari tiga hal: $, pintu yang dilalui setiap side effect; event-nya; dan continuation, sisa chain di bawahmu. Hook bersarang seperti middleware. Yang terdaftar lebih dulu memiliki event tersebut, dan tidak ada yang lebih jauh ke bawah chain yang bisa menghalanginya. Urutan itu dikonfigurasi, bukan diinstal. Dalam kata-kata Alice Poteat, urutan ditentukan oleh konfigurasi, bukan oleh kapan kamu menginstalnya.

Tidak ada ambient access. Semua yang dilakukan Mod melewati $, sehingga admin bisa mengaudit, mengizinkan, menolak, atau mencatat event apa pun. Salah satu commenter merangkumnya: apa yang dilakukan plugin persis sama dengan call yang dibuatnya. Satu hook tunggal pada * melihat setiap event, jadi audit log cukup satu function. Mod bisa menggambar, karena interface-nya adalah React. Ia berjalan in-process di atas Bun, pada 50 mikrodetik di persentil ke-99. Satu environment variable mengaktifkannya. Apa yang sebenarnya berada di $ masih dirancang bersama partner early-access.

Empat cara memperluas Claude Code, dan mana untuk apa

Shell hook adalah script yang dipanggil engine pada momen tertentu. Ia menerima JSON di standard input dan menjawab dengan exit code. Jawabannya punya batas: 8.000 karakter context yang dikembalikan, dan 2.000 untuk sebagian hook. Dalam kata-kata Pratham, di Windows mereka sering rusak dengan cara yang aneh.

Plugin adalah sebuah kotak. Satu manifest membundel skill, agent, hook, dan MCP server. Ia diinstal dari marketplace atau dimuat langsung dari folder di disk, dan satu command memvalidasi kotak itu sebelum apa pun berjalan.

Skill adalah prosa yang dibaca model saat dibutuhkan. Isinya hanya dimuat ketika prompt yang cocok datang. Ini tetap menjadi cara paling murah untuk mengubah perilaku.

Mod adalah kotak yang sama dengan satu file tambahan: hooks manifest yang menyebut sebuah module, dan module itu adalah TypeScript, typed, in-process, pada setiap event engine. Itulah seluruh perbedaannya.

Mekanisme Apa itu Berjalan Batas
Shell hook Script yang dipanggil pada momen tertentu Subprocess, exit code 8,000 karakter kembali (2,000 untuk sebagian hook)
Plugin Bundel skill, agent, hook, MCP server Diinstal atau dimuat dari disk Divalidasi sebelum berjalan
Skill Prosa dimuat saat prompt cocok Di context model Perubahan paling murah
Mod Plugin ditambah hooks module TypeScript In-process, pada setiap event Typed, early access

Tipe-tipenya berasal dari satu slash command, yang menulis daftar lengkap apa yang ditawarkan $ langsung ke dalam proyekmu. Shell hook lama dibungkus, bukan dipensiunkan. Pada build awal, Spencer Morley melihat wrapper gagal dimuat tapi tetap terdeklarasi. Aturan praktisnya: untuk mengubah apa yang diketahui Claude, tulis skill; untuk menjalankan script pada suatu momen, shell hook; untuk merilis bundel, plugin; untuk duduk di dalam engine, Mod. Shell hook tetap berfungsi di mana pun flag-nya mati.

Tiga Mod milik Anthropic sendiri, dibaca dari source

Tiga Mod dirilis di dalam binary dan source-nya ada di GitHub: security default, diff pane, dan telemetry.

Security default berada paling luar. Pada mesin dengan managed settings, atau di organisasi Team atau Enterprise, tidak ada yang diinstal orang bisa berada di atasnya. Ia meng-hook 12 event, dan setiap hook melakukan satu dari tiga hal: melanjutkan melewati user tier, menolak caller dari user tier berdasarkan nama, atau meloloskan. Ia fail closed, dan doc comment-nya bilang begitu dalam dua kata. Itulah bagian yang jadi perhatian thread: admin menghapus sebuah affordance dari $, dan tidak ada yang terdaftar di bawahnya bisa memanggilnya. Dalam kata-kata seorang commenter, itu secara kategoris berbeda dari sekadar meminta plugin untuk tidak melakukan sesuatu.

Diff adalah panel di samping transcript, menampilkan perubahan yang belum di-commit pada sesi tersebut file demi file, diperbarui seiring Claude melakukan edit. Ia terdaftar pada session start dan mencakup 27 helper file, bukan mainan.

Telemetry menambahkan sebuah noun ke $ dari dalam proses pembuatan engine. Ia meng-await apa yang ada di bawahnya lalu mengembalikan itu ditambah dirinya sendiri. Ia hanya berjalan pada build internal.

README mengatakan untuk menjalankan satu dari source dan mengetes satu dari source. Help pada build hari ini mendaftar validate, eval, dan details. Tidak ada test dalam daftar itu, meskipun help untuk test tetap merespons. Tier bawaan juga menolak salinanmu: rilis plugin dengan salah satu nama itu, dan binary tetap memuat miliknya sendiri.

Empat puluh dua baris: Mod yang menyembunyikan secret dari model

Slash command yang menulis tipe-tipe itu menghasilkan, pada build ini, 11.700 baris: 84 event di 23 noun. Hook tool call menjawab dengan result atau deny, tidak pernah dengan teks. Bagian itu ditentukan oleh core.

Mod ini terdiri dari tiga file: plugin manifest, hooks manifest dengan satu barisnya, dan module. Module-nya 42 baris. Ia meng-await apa yang ada di bawahnya, membersihkan result, lalu mengembalikannya. Empat pattern mencakup dua bentuk vendor key, satu GitHub token, dan apa pun yang diberikan ke variabel bernama key, secret, atau token.

Validate membaca source sebelum ia berjalan. Ia menyebutkan event yang di-hook module dan satu hal yang dipanggilnya pada $. Satu-satunya peringatan adalah author yang hilang. Dimuat dari disk dengan flag aktif, test file berisi dua key, keduanya palsu dari awal, dan model membaca "redacted". Dalam kata-katanya sendiri, nilainya kembali sebagai redacted, jadi ia tidak bisa melihat isinya.

Ukuran Nilai
Panjang module 42 baris
Latensi hop, termasuk worker 28 ms
Token yang ditambahkan ke sesi 0

Engine mencatat hop tersebut sebagai resolved oleh hooks module. Inventory menunjukkan tidak ada skill, tidak ada agent, tidak ada apa pun yang selalu aktif. Satu batasan tetap ada: tersembunyi dari model bukan berarti tersembunyi dari layar. Transcript tetap menampilkan apa yang dicetak tool. Itu Mod yang berbeda, seperti dicatat Max di Ship Notes dalam satu baris.

Merusaknya: guard yang lambat adalah guard yang terlewati

Mod yang sama, satu baris ditambahkan: sleep 15 detik sebelum call ke apa yang ada di bawahnya. Sepuluh detik kemudian, engine menyerah, melaporkan bahwa hook melebihi budget-nya dan skipped, lalu apa yang ada di bawahnya berjalan sebagai gantinya. Command tetap berjalan dan mencetak "hi".

Ganti sleep dengan throw: 574 milidetik, vonis yang sama, skipped, dan command tetap berjalan.

Kasus Waktu Vonis
Hook sehat 28 ms Resolved
Throw 574 ms Skipped, command berjalan
Hang lebih dari 10 dtk Skipped, command berjalan

Kedua kegagalan itu berakhir pada kata yang sama: skipped. Thread sudah mengukur asimetri ini seminggu sebelumnya. Capability yang hilang saat load fails closed. Hook yang melewati budget-nya fails open: berisik tapi terlewati, dalam kata-kata Spencer Morley. Block tanpa alasan hanya mengirim model ke tool lain. Pratham melihatnya memilih tool berbeda dan tetap menulis file itu.

Jawaban yang ada di atas meja adalah catch. Alice Poteat mengusulkan catch pada return hook, yang berjalan jika kamu terlalu lama atau throw. Penulisan ulang tetap butuh catatan ke model: ia melihat apa yang diminta untuk ditulis, demi alasan caching, jadi kamu menambahkan satu baris context. Budget itu juga adalah isolasinya. Hooks worker berjalan terpisah, dan ketika ia crash, engine me-respawn-nya dan mematikan hook untuk sesi tersebut. Perbaikannya bukan budget yang lebih panjang, melainkan catch yang dideklarasikan.

Empat puluh delapan jam Mod, dan apa yang bisa dibeli satu kalimat

Dua hari berjalan: Tetris di atas prompt dan tujuh game lain, bisa dimainkan sambil Claude bekerja, dengan nol token. Doom, versi asli 1993, berjalan di proses-nya sendiri; Mod menjangkaunya lewat HTTP lokal dan me-redraw 10 kali per detik. Ada breathing pacer di spinner, dan story model dengan 260.000 parameter yang berjalan di dalam hooks worker, dengan nol token API.

Registry memindai 31 Mod dengan validate. 14 bisa menjalankan host process. 13 melihat setiap tool call.

Demo 8 dari thread komunitas menjanjikan bahwa satu kalimat bisa menulis plugin yang menyembunyikan secret sebelum model membacanya. Kami memintanya.

Ukuran Nilai
Waktu 4 menit
Turn 34
Biaya $1.23
Baris (plus satu test file) 190, dibanding 42 milik kami
Test 4 pass dalam sepertiga detik

Ia melabeli apa yang disembunyikan berdasarkan jenisnya, validate bersih, dan tidak butuh API key maupun model call. Satu balasan menyebutnya begini: allowlist adalah produknya, Tetris adalah demonya.

Vonis: buat satu sekarang, rilis satu nanti

Angka registry sendiri adalah peringatannya. 14 dari 31 Mod bisa menjalankan host process, dan satu-satunya vetting adalah static footprint. Help eval sendiri mengatakannya: suite yang lolos bukan berarti vetting keamanan.

Sinyal Nilai
Event pada tanggal 8 20
Event pada tanggal 15 84
Versi CLI dalam dua minggu 14
Poin Hacker News 2
Balasan untuk pertanyaan kompatibilitas 0

Budget 10 detik itu berada di runtime, bukan di tipe-tipenya, seperti dicatat Marat. Tidak ada baris changelog, tidak ada halaman docs, tidak ada postingan peluncuran. Seorang rival bilang Anthropic meniru ini: Ahmad Awais menunjuk ke mods milik Command Code, dan dia yang menulis contoh mod mereka, jadi pertimbangkan itu. Postingan "early access, APIs may change" meraih 357 likes.

Buat satu sekarang jika kamu sudah menulis hook dan menginginkan audit, redaction, atau pane. Tunggu jika kamu akan merilis ke tim sebelum kontraknya ditulis. Keterbukaan yang sama inilah yang membuat budget yang fails open, ketidakcocokan tipe pada MCP call, dan kegagalan wrapper ditemukan oleh pengguna dalam hitungan hari.

Sumber

Pertanyaan yang sering diajukan

Apa itu Claude Code Mod?
Mod adalah plugin Claude Code yang perilakunya berada di dalam hooks module TypeScript. Module ini mendaftarkan function pada event engine dan berjalan in-process di atas Bun, dengan setiap side effect melewati objek `$`.
Apa perbedaan antara hooks, plugin, skill, dan Mods di Claude Code?
Shell hook adalah script yang dipanggil pada momen tertentu dan menjawab dengan exit code. Plugin adalah bundel skill, agent, hook, dan MCP server. Skill adalah prosa yang dimuat model saat prompt yang cocok datang. Mod adalah plugin dengan satu file tambahan, module TypeScript typed yang meng-hook setiap event engine secara in-process.
Bisakah Mod Claude Code menyembunyikan secret dari model?
Bisa. Mod 42 baris yang meng-await tool result, membersihkan pattern key, secret, dan token, lalu mengembalikan teks yang sudah di-redact, menambahkan 28 ms per hop dan nol token. Ini tidak menyembunyikan nilainya dari transcript di layar, yang membutuhkan Mod yang berbeda.
Kenapa Mod Claude Code yang lambat fails open?
Hooks worker memberi setiap hook budget 10 detik. Hook yang melebihi batas itu, atau throw, akan ditandai skipped dan chain di bawahnya berjalan sebagai gantinya, sehingga command yang dijaga tetap dieksekusi. Perbaikan yang diusulkan Anthropic adalah catch yang dideklarasikan pada return hook.
Apakah Claude Code Mods aman diinstal?
Belum, secara default. Dari 31 Mod yang terindeks dalam 48 jam pertama, 14 bisa menjalankan host process dan 13 melihat setiap tool call, dan satu-satunya vetting adalah static footprint. Managed settings menempatkan security default milik Anthropic di atas apa pun yang diinstal pengguna.
Haruskah saya membuat Claude Code Mod sekarang?
Buat satu sekarang jika kamu sudah menulis hook dan menginginkan audit log, redaction, atau diff pane. Tunggu sebelum merilis ke tim: fitur ini early access, API-nya berubah dari 20 menjadi 84 event dalam seminggu, dan belum ada halaman docs atau baris changelog.

Video terkait