File Deleted
View Diff
1> ## Documentation Index
2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.
4
5# Referensi Plugins
6
7> Referensi teknis lengkap untuk sistem plugin Claude Code, termasuk skema, perintah CLI, dan spesifikasi komponen.
8
9<Tip>
10 Mencari cara memasang plugins? Lihat [Temukan dan pasang plugins](/docs/id/discover-plugins). Untuk membuat plugins, lihat [Plugins](/docs/id/plugins). Untuk mendistribusikan plugins, lihat [Plugin marketplaces](/docs/id/plugin-marketplaces).
11</Tip>
12
13Sebuah **plugin** adalah direktori yang mandiri berisi komponen-komponen yang memperluas Claude Code dengan fungsionalitas khusus. Komponen plugin mencakup skills, agents, hooks, MCP servers, LSP servers, dan monitors.
14
15<h2 id="plugin-components-reference">
16 Referensi komponen plugin
17</h2>
18
19<h3 id="skills">
20 Skills
21</h3>
22
23Plugin menambahkan skills ke Claude Code, membuat pintasan `/name` yang dapat Anda atau Claude panggil.
24
25**Lokasi**: Direktori `skills/` atau `commands/` di root plugin, atau file `SKILL.md` tunggal di root plugin
26
27**Format file**: Skills adalah direktori dengan `SKILL.md`; commands adalah file markdown sederhana
28
29**Struktur skill**:
30
31```text theme={null}
32skills/
33├── pdf-processor/
34│ ├── SKILL.md
35│ ├── reference.md (opsional)
36│ └── scripts/ (opsional)
37└── code-reviewer/
38 └── SKILL.md
39```
40
41Skills dan commands secara otomatis ditemukan ketika plugin diinstal.
42
43Jika plugin tidak memiliki direktori `skills/` dan tidak memiliki field manifest `skills`, file `SKILL.md` di root plugin dimuat sebagai skill tunggal. Atur field frontmatter `name` untuk mengontrol nama invokasi skill. Tanpanya, Claude Code kembali ke nama direktori instalasi. Untuk plugin yang [disalin ke dalam cache](#plugin-caching-and-file-resolution), nama itu adalah string versi yang berubah pada setiap pembaruan. Untuk plugin yang mengirimkan lebih dari satu skill, gunakan tata letak direktori `skills/` yang ditunjukkan di atas.
44
45Dalam skills dan commands plugin, field frontmatter Boolean seperti `disable-model-invocation` menerima `yes`, `no`, `on`, `off`, `1`, dan `0` dalam huruf apa pun, selain `true` dan `false`. Sebelum v2.1.218, Claude Code hanya mengenali `true` dan `false`.
46
47Untuk detail lengkap, lihat [Skills](/docs/id/skills).
48
49<h3 id="agents">
50 Agents
51</h3>
52
53Plugin dapat menyediakan subagents khusus untuk tugas-tugas tertentu yang dapat Claude panggil secara otomatis jika sesuai.
54
55**Lokasi**: Direktori `agents/` di root plugin
56
57**Format file**: File markdown yang menjelaskan kemampuan agent
58
59**Struktur agent**:
60
61```markdown theme={null}
62name: agent-name
63description: Apa yang agent ini spesialisasikan dan kapan Claude harus memanggilnya
64model: sonnet
65effort: medium
66maxTurns: 20
67disallowedTools: Write, Edit
68
69Prompt sistem terperinci untuk agent yang menjelaskan peran, keahlian, dan perilakunya.
70```
71
72<h4 id="plugin-agent-frontmatter">
73 Frontmatter agent plugin
74</h4>
75
76File agent plugin menggunakan [field frontmatter yang sama seperti file subagent](/docs/id/sub-agents#supported-frontmatter-fields), kecuali bahwa Claude Code hanya menghormati beberapa di antaranya ketika agent berasal dari plugin:
77
78* **Didukung**: `name`, `description`, `model`, `effort`, `maxTurns`, `tools`, `disallowedTools`, `skills`, `memory`, `background`, `omitClaudeMd`, `isolation`, `color`, dan `experimental`. Satu-satunya nilai `isolation` yang valid adalah `"worktree"`.
79* **Tidak didukung, untuk alasan keamanan**: `hooks`, `mcpServers`, dan `permissionMode`. Claude Code mengabaikan ini ketika memuat agent dari plugin. Untuk menggunakannya, salin file agent ke `.claude/agents/` atau `~/.claude/agents/`.
80* **Tidak didukung**: `initialPrompt`.
81
82Anda dapat menempatkan file plugin agent dalam subfolder dari `agents/`. Claude Code [memuatnya secara rekursif](/docs/id/sub-agents#choose-the-subagent-scope) dan menggabungkan nama plugin, setiap nama subfolder, dan nama file dengan titik dua untuk membentuk nama scoped agent. Misalnya, `agents/review/security.md` dalam plugin bernama `my-plugin` dimuat sebagai `my-plugin:review:security`. Dua pengaturan mengubah nama itu:
83
84* Frontmatter `name`: ini menggantikan hanya nama file, jadi `name: audit` dalam `agents/review/security.md` dimuat sebagai `my-plugin:review:audit`
85* Field manifest [`agents`](#component-path-fields): file yang Anda daftarkan di sana dimuat tanpa nama subfolder, jadi `"agents": "./custom/review/security.md"` dimuat sebagai `my-plugin:security`
86
87Claude Code memuat agent plugin bahkan ketika frontmatternya tidak memiliki `name` atau tidak dapat diuraikan:
88
89* Tidak ada `name`: Claude Code memberi nama agent sesuai file, jadi `agents/reviewer.md` dalam plugin bernama `my-plugin` dimuat sebagai `my-plugin:reviewer`
90* Frontmatter yang tidak dapat diuraikan: Claude Code memberi nama agent sesuai file, menggunakan `Agent from my-plugin plugin` sebagai deskripsinya, dan mengabaikan setiap field dalam file
91
92Sebaliknya, Claude Code melewati file project, user, atau managed agent yang frontmatternya tidak memiliki `name` atau tidak dapat diuraikan.
93
94Untuk menemukan file dalam direktori `agents/` default plugin yang frontmatternya tidak dapat diuraikan, jalankan `claude plugin validate`. Path yang Anda berikan tergantung pada apakah plugin memiliki manifest, dan kedua contoh menggunakan `./my-plugin` sebagai direktori plugin:
95
96* Plugin dengan manifest: `claude plugin validate ./my-plugin`
97* Plugin tanpa manifest: `claude plugin validate ./my-plugin/agents`. Memerlukan Claude Code v2.1.233 atau lebih baru.
98
99Agents muncul dalam [@-mention typeahead](/docs/id/sub-agents#invoke-subagents-explicitly) di bawah nama scoped mereka, seperti `my-plugin:code-reviewer`, setelah plugin diaktifkan.
100
101Untuk detail lengkap, lihat [Subagents](/docs/id/sub-agents).
102
103<h3 id="hooks">
104 Hooks
105</h3>
106
107Plugin dapat menyediakan event handlers yang merespons event Claude Code secara otomatis.
108
109**Lokasi**: `hooks/hooks.json` di root plugin, atau inline dalam plugin.json
110
111**Format**: Konfigurasi JSON dengan event matchers dan actions
112
113`hooks/hooks.json` dapat membawa key `$schema` tingkat atas yang menamai URL JSON Schema untuk autocomplete dan validasi editor. Claude Code mengabaikan key saat waktu load.
114
115**Konfigurasi hook**:
116
117```json theme={null}
118{
119 "hooks": {
120 "PostToolUse": [
121 {
122 "matcher": "Write|Edit",
123 "hooks": [
124 {
125 "type": "command",
126 "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/format-code.sh"
127 }
128 ]
129 }
130 ]
131 }
132}
133```
134
135Plugin hooks merespons event lifecycle yang sama seperti [user-defined hooks](/docs/id/hooks):
136
137| Event | Kapan event ini dipicu |
138| :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
139| `SessionStart` | Ketika sesi dimulai atau dilanjutkan |
140| `Setup` | Ketika Anda memulai Claude Code dengan `--init-only`, atau dengan `--init` atau `--maintenance` dalam mode `-p`. Untuk persiapan satu kali dalam CI atau skrip |
141| `UserPromptSubmit` | Ketika Anda mengirimkan prompt, sebelum Claude memprosesnya |
142| `UserPromptExpansion` | Ketika perintah yang diketik pengguna berkembang menjadi prompt, sebelum mencapai Claude. Dapat memblokir ekspansi |
143| `PreToolUse` | Sebelum panggilan alat dieksekusi. Dapat memblokir |
144| `PermissionRequest` | Ketika panggilan alat memerlukan keputusan izin |
145| `PermissionDenied` | Ketika mode otomatis menolak panggilan alat, termasuk penolakan tanpa putusan classifier. Gunakan JSON `hookSpecificOutput.retry: true` untuk memberitahu model bahwa mungkin dapat mencoba ulang panggilan alat yang ditolak. Claude Code mengabaikan `retry` ketika classifier tidak menghasilkan putusan |
146| `PostToolUse` | Setelah panggilan alat berhasil |
147| `PostToolUseFailure` | Setelah panggilan alat gagal |
148| `PostToolBatch` | Setelah batch lengkap panggilan alat paralel terselesaikan, sebelum panggilan model berikutnya |
149| `Notification` | Ketika Claude Code mengirimkan notifikasi |
150| `MessageDisplay` | Saat teks pesan asisten ditampilkan |
151| `SubagentStart` | Ketika subagent dimulai |
152| `SubagentStop` | Ketika subagent selesai |
153| `TaskCreated` | Ketika tugas sedang dibuat melalui `TaskCreate` |
154| `TaskCompleted` | Ketika tugas sedang ditandai sebagai selesai |
155| `Stop` | Ketika Claude selesai merespons |
156| `StopFailure` | Ketika giliran berakhir karena kesalahan API |
157| `TeammateIdle` | Ketika rekan tim [agent team](/docs/id/agent-teams) akan menjadi idle |
158| `InstructionsLoaded` | Ketika file CLAUDE.md atau `.claude/rules/*.md` dimuat ke dalam konteks. Dipicu saat awal sesi dan ketika file dimuat dengan malas selama sesi |
159| `ConfigChange` | Ketika file konfigurasi berubah selama sesi |
160| `CwdChanged` | Ketika direktori kerja berubah, misalnya ketika Claude mengeksekusi perintah `cd`. Berguna untuk manajemen lingkungan reaktif dengan alat seperti direnv |
161| `DirectoryAdded` | Ketika direktori kerja ditambahkan di tengah sesi melalui `/add-dir` atau permintaan kontrol SDK `register_repo_root` |
162| `FileChanged` | Ketika file yang dipantau berubah di disk. Bidang `matcher` menentukan nama file mana yang dipantau |
163| `WorktreeCreate` | Ketika worktree sedang dibuat melalui `--worktree`, `isolation: "worktree"`, atau untuk sesi latar belakang. Menggantikan perilaku git default |
164| `WorktreeRemove` | Ketika worktree sedang dihapus saat keluar sesi, ketika subagent selesai, atau ketika Anda menghapus sesi latar belakang |
165| `PreCompact` | Sebelum pemadatan konteks |
166| `PostCompact` | Setelah pemadatan konteks selesai |
167| `PreModelSwitch` | Sebelum Claude Code menerapkan pergantian model yang Anda atau klien minta. Dapat memblokir pergantian |
168| `PostModelSwitch` | Setelah model sesi berubah, termasuk perubahan yang Claude Code lakukan sendiri, seperti memulihkan model ketika Anda melanjutkan sesi |
169| `Elicitation` | Ketika server MCP meminta input pengguna selama panggilan alat |
170| `ElicitationResult` | Setelah pengguna merespons elicitation MCP, sebelum respons dikirim kembali ke server |
171| `SessionEnd` | Ketika sesi berakhir |
172
173**Tipe hook**:
174
175* `command`: jalankan perintah shell atau script
176* `http`: kirim event JSON sebagai POST request ke URL
177* `mcp_tool`: panggil tool pada [MCP server](/docs/id/mcp) yang dikonfigurasi
178* `prompt`: evaluasi prompt dengan LLM (menggunakan placeholder `$ARGUMENTS` untuk konteks)
179* `agent`: jalankan verifier agentic dengan tools untuk tugas verifikasi kompleks
180
181Hooks yang menargetkan [bundled MCP server](#mcp-servers) plugin sendiri harus menggunakan nama scopednya. Tool matchers dan field `if` mengambil nama tool scoped `mcp__plugin_<plugin-name>_<server-name>__<tool>`, dan field `server` hook `mcp_tool` mengambil `plugin:<plugin-name>:<server-name>`. Matcher yang ditulis terhadap bare server key tidak pernah aktif. Lihat [Match MCP tools](/docs/id/hooks#match-mcp-tools) dan [Plugin-provided MCP servers](/docs/id/mcp#plugin-provided-mcp-servers).
182
183<h3 id="mcp-servers">
184 MCP servers
185</h3>
186
187Plugin dapat membundel Model Context Protocol (MCP) servers untuk menghubungkan Claude Code dengan tools dan services eksternal.
188
189**Lokasi**: `.mcp.json` di root plugin, atau inline dalam plugin.json
190
191**Format**: Konfigurasi MCP server standar
192
193**Konfigurasi MCP server**:
194
195```json theme={null}
196{
197 "mcpServers": {
198 "plugin-database": {
199 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
200 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
201 "env": {
202 "DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
203 }
204 },
205 "plugin-api-client": {
206 "command": "npx",
207 "args": ["@company/mcp-server", "--plugin-mode"]
208 }
209 }
210}
211```
212
213**Perilaku integrasi**:
214
215* MCP servers plugin dimulai secara otomatis ketika plugin diaktifkan
216* Servers muncul sebagai MCP tools standar dalam toolkit Claude
217* Plugin servers dapat dikonfigurasi secara independen dari user MCP servers
218* Jika Anda menjalankan [`/reload-plugins`](/docs/id/discover-plugins#apply-plugin-changes-without-restarting) di tengah sesi, Claude Code mempertahankan koneksi live dari servers yang konfigurasinya tidak berubah
219
220<h3 id="lsp-servers">
221 LSP servers
222</h3>
223
224<Tip>
225 Mencari untuk menggunakan LSP plugins? Instal dari marketplace resmi: cari "lsp" di tab Discover `/plugin`. Bagian ini mendokumentasikan cara membuat LSP plugins untuk bahasa yang tidak tercakup oleh marketplace resmi.
226</Tip>
227
228Plugin dapat menyediakan [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (LSP) servers untuk memberikan Claude [real-time code intelligence](/docs/id/discover-plugins#code-intelligence) saat bekerja pada codebase Anda.
229
230**Lokasi**: `.lsp.json` di root plugin, atau inline dalam `plugin.json`
231
232**Format**: Konfigurasi JSON yang memetakan nama language server ke konfigurasi mereka
233
234**Format file `.lsp.json`**:
235
236```json theme={null}
237{
238 "go": {
239 "command": "gopls",
240 "args": ["serve"],
241 "extensionToLanguage": {
242 ".go": "go"
243 }
244 }
245}
246```
247
248**Inline dalam `plugin.json`**:
249
250```json theme={null}
251{
252 "name": "my-plugin",
253 "lspServers": {
254 "go": {
255 "command": "gopls",
256 "args": ["serve"],
257 "extensionToLanguage": {
258 ".go": "go"
259 }
260 }
261 }
262}
263```
264
265**Field yang diperlukan:**
266
267| Field | Deskripsi |
268| :-------------------- | :------------------------------------------------- |
269| `command` | Binary LSP yang akan dieksekusi (harus dalam PATH) |
270| `extensionToLanguage` | Memetakan ekstensi file ke identifier bahasa |
271
272**Field opsional:**
273
274| Field | Deskripsi |
275| :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
276| `args` | Argumen command-line untuk LSP server |
277| `transport` | Transport komunikasi: `stdio` (default) atau `socket`. Claude Code menerima `socket` tetapi menjalankan setiap server melalui stdio, jadi aturan protokol stdout berlaku untuk semua servers |
278| `env` | Variabel environment yang diatur saat memulai server |
279| `initializationOptions` | Opsi yang dilewatkan ke server selama inisialisasi |
280| `settings` | Settings yang dilewatkan melalui `workspace/didChangeConfiguration` |
281| `workspaceFolder` | Path folder workspace untuk server |
282| `startupTimeout` | Waktu maksimal untuk menunggu startup server (milliseconds) |
283| `shutdownTimeout` | Waktu maksimal untuk menunggu graceful shutdown (milliseconds). Ketika timeout berlalu, Claude Code menghentikan proses server. Ketika tidak diatur, tidak ada timeout yang berlaku |
284| `restartOnCrash` | Apakah memulai ulang server setelah crash. Default ke `true`. Atur ke `false` untuk membiarkan server yang crash tetap berhenti daripada memulai ulang |
285| `maxRestarts` | Jumlah maksimal upaya restart sebelum menyerah |
286| `diagnostics` | Apakah mendorong diagnostics ke konteks Claude setelah edits (default `true`). Atur ke `false` untuk menjaga navigasi kode tetapi menekan injeksi diagnostik otomatis. |
287
288`restartOnCrash` dan `shutdownTimeout` memerlukan Claude Code v2.1.205 atau lebih baru. Sebelum v2.1.205, skema config menerima kedua opsi tetapi mengatur salah satu menyebabkan Claude Code melewati LSP server itu sepenuhnya pada startup, dengan alasan hanya terlihat dalam output `claude --debug`.
289
290**Multiple servers untuk ekstensi yang sama**: ketika lebih dari satu LSP server yang diaktifkan mendeklarasikan ekstensi file yang sama dalam `extensionToLanguage`, apakah servers berasal dari satu plugin atau dari plugin berbeda, server pertama yang terdaftar menangani file dengan ekstensi itu dan yang lain tidak pernah dimulai. Interface `/plugin` menampilkan peringatan yang menamai plugin yang servernya aktif.
291
292**Servers yang gagal menginisialisasi**: Claude Code melewati server yang konfigurasinya tidak valid, misalnya yang hilang `command` atau `extensionToLanguage`, dan server yang dikonfigurasi lainnya masih dimulai. Jalankan `claude --debug` untuk melihat mengapa server dilewati.
293
294Server yang dilewati tidak mengklaim ekstensi filenya, jadi server valid lain yang mendeklarasikan ekstensi yang sama, dari plugin yang sama atau berbeda, masih menangani file tersebut.
295
296**Kirim output log ke stderr, bukan stdout**: Claude Code membaca stdout server hanya sebagai pesan protokol, dan menerima header pesan hingga 64 KiB dan body pesan hingga 32 MiB. Claude Code memutuskan server yang melebihi batas apa pun atau menulis output non-protokol ke stdout, dan menghitung putus sebagai crash untuk `restartOnCrash` dan `maxRestarts`. Ketika Anda menjalankan dengan `--debug`, Claude Code menulis error yang menamai penyebabnya ke debug log.
297
298<Warning>
299 **Anda harus menginstal binary language server secara terpisah.** LSP plugins mengonfigurasi cara Claude Code terhubung ke language server, tetapi mereka tidak menyertakan server itu sendiri. Jika Anda melihat `Executable not found in $PATH` di tab Errors `/plugin`, instal binary yang diperlukan untuk bahasa Anda.
300</Warning>
301
302**Plugin LSP yang tersedia:**
303
304| Plugin | Language server | Perintah instalasi |
305| :------------------ | :------------------------- | :---------------------------------------------------------------------------------------- |
306| `pyright-lsp` | Pyright (Python) | `pip install pyright` atau `npm install -g pyright` |
307| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |
308| `rust-analyzer-lsp` | rust-analyzer | [Lihat instalasi rust-analyzer](https://rust-analyzer.github.io/manual.html#installation) |
309
310Instal language server terlebih dahulu, kemudian instal plugin dari marketplace.
311
312<h3 id="monitors">
313 Monitors
314</h3>
315
316Plugin dapat mendeklarasikan background monitors yang Claude Code mulai secara otomatis ketika plugin aktif. Setiap monitor menjalankan perintah shell untuk seumur hidup sesi dan mengirimkan setiap baris stdout ke Claude sebagai notifikasi, sehingga Claude dapat bereaksi terhadap entri log, perubahan status, atau event yang dipolling tanpa diminta untuk memulai watch itu sendiri.
317
318Plugin monitors menggunakan mekanisme yang sama seperti [Monitor tool](/docs/id/tools-reference#monitor-tool) dan berbagi batasan ketersediaannya. Mereka hanya berjalan dalam sesi CLI interaktif, berjalan unsandboxed pada tingkat kepercayaan yang sama seperti [hooks](#hooks), dan dilewati pada host di mana Monitor tool tidak tersedia.
319
320**Lokasi**: `monitors/monitors.json` di root plugin, atau inline dalam `plugin.json`
321
322**Format**: Array JSON dari entri monitor
323
324`monitors/monitors.json` berikut mengawasi endpoint status deployment dan log error lokal:
325
326```json theme={null}
327[
328 {
329 "name": "deploy-status",
330 "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/poll-deploy.sh",
331 "description": "Deployment status changes"
332 },
333 {
334 "name": "error-log",
335 "command": "tail -F ./logs/error.log",
336 "description": "Application error log",
337 "when": "on-skill-invoke:debug"
338 }
339]
340```
341
342Untuk mendeklarasikan monitors inline, atur `experimental.monitors` dalam `plugin.json` ke array yang sama. Untuk memuat dari path non-default, atur `experimental.monitors` ke string path relatif seperti `"./config/monitors.json"`. Monitors adalah [komponen eksperimental](#experimental-components).
343
344**Field yang diperlukan:**
345
346| Field | Deskripsi |
347| :------------ | :------------------------------------------------------------------------------------------------------------- |
348| `name` | Identifier unik dalam plugin. Mencegah proses duplikat ketika plugin dimuat ulang atau skill dipanggil lagi |
349| `command` | Perintah shell yang dijalankan sebagai proses background persisten dalam direktori kerja sesi |
350| `description` | Ringkasan singkat tentang apa yang sedang diawasi. Ditampilkan dalam panel task dan dalam ringkasan notifikasi |
351
352**Field opsional:**
353
354| Field | Deskripsi |
355| :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
356| `when` | Mengontrol kapan monitor dimulai. `"always"` memulainya pada startup sesi dan pada reload plugin, dan merupakan default. `"on-skill-invoke:<skill-name>"` memulainya pertama kali skill bernama dalam plugin ini dikirimkan |
357
358Nilai `command` mendukung substitusi path [path substitutions](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}`, dan `${CLAUDE_PROJECT_DIR}`, ditambah `${ENV_VAR}` apa pun dari environment. Awali perintah dengan `cd "${CLAUDE_PLUGIN_ROOT}" && ` jika script perlu berjalan dari direktori plugin itu sendiri.
359
360Monitor `command` tidak dapat mereferensikan nilai [`${user_config.*}`](#user-configuration). Perintah berjalan melalui shell, jadi Claude Code menolak monitor dengan [error](/docs/id/errors#plugin-command-references-user-config) daripada mensubstitusi nilai. Proses monitor tidak menerima variabel environment `CLAUDE_PLUGIN_OPTION_<KEY>`, jadi biarkan script monitor membaca nilai dari file config yang dimilikinya.
361
362Jika Anda menonaktifkan plugin di tengah sesi, Claude Code tidak menghentikan monitors yang sudah berjalan; mereka berhenti ketika sesi berakhir.
363
364<h3 id="themes">
365 Themes
366</h3>
367
368Plugin dapat mengirimkan color themes yang muncul dalam `/theme` bersama preset built-in dan themes lokal pengguna. Theme adalah file JSON dalam `themes/` dengan preset `base` dan map `overrides` sparse dari color tokens. Themes adalah [komponen eksperimental](#experimental-components).
369
370```json theme={null}
371{
372 "name": "Dracula",
373 "base": "dark",
374 "overrides": {
375 "claude": "#bd93f9",
376 "error": "#ff5555",
377 "success": "#50fa7b"
378 }
379}
380```
381
382Ketika pengguna memilih theme plugin, Claude Code menyimpan `custom:<plugin-name>:<slug>` dalam config mereka. Plugin themes adalah read-only: ketika pengguna menekan `Ctrl+E` pada satu dalam `/theme`, Claude Code menyalinnya ke `~/.claude/themes/` sehingga mereka dapat mengedit salinannya.
383
384***
385
386<h2 id="plugin-installation-scopes">
387 Cakupan instalasi plugin
388</h2>
389
390Ketika Anda menginstal plugin, Anda memilih **cakupan** yang menentukan di mana plugin tersedia dan siapa lagi yang dapat menggunakannya:
391
392| Cakupan | File pengaturan | Kasus penggunaan |
393| :-------- | :--------------------------------------- | :-------------------------------------------------------------------------------------- |
394| `user` | `~/.claude/settings.json` | Plugin pribadi tersedia di semua proyek (default) |
395| `project` | `.claude/settings.json` | Plugin tim yang dibagikan melalui kontrol versi |
396| `local` | `.claude/settings.local.json` | Plugin khusus proyek, diabaikan git ketika Claude Code menyimpan pengaturan ke dalamnya |
397| `managed` | [Managed settings](/docs/id/managed-settings) | Plugin terkelola (baca saja, hanya perbarui) |
398
399Plugin menggunakan sistem cakupan yang sama dengan konfigurasi Claude Code lainnya. Untuk instruksi instalasi dan flag cakupan, lihat [Install plugins](/docs/id/discover-plugins#install-plugins). Untuk penjelasan lengkap tentang cakupan, lihat [Configuration scopes](/docs/id/settings#where-settings-live).
400
401***
402
403<h2 id="skills-directory-plugins">
404 Plugin direktori skills
405</h2>
406
407Folder apa pun di bawah direktori skills yang berisi manifes `.claude-plugin/plugin.json` dimuat sebagai plugin bernama `<name>@skills-dir` pada sesi berikutnya, tanpa marketplace dan tanpa langkah instalasi. Buat satu dengan [`plugin init`](#plugin-init). Tidak seperti instalasi marketplace yang disalin, plugin ditemukan di tempat daripada disalin ke cache plugin.
408
409Pohon direktori skills mendukung tiga hal yang berbeda:
410
411| Apa yang Anda miliki | Apa itu |
412| :-------------------------------------------- | :---------------------------------------------------------------------------------------------------- |
413| `<skills-dir>/foo/SKILL.md` tanpa manifes | [skill](/docs/id/skills) biasa bernama `foo` |
414| `<skills-dir>/foo/.claude-plugin/plugin.json` | Plugin `foo@skills-dir`, yang dapat menggabungkan skills, agents, hooks, dan lainnya miliknya sendiri |
415| `<plugin>/skills/bar/SKILL.md` | Skill `bar` yang dikemas di dalam plugin |
416
417<h3 id="choose-where-the-plugin-loads-from">
418 Pilih tempat plugin dimuat dari
419</h3>
420
421| Direktori skills | Cakupan | Memuat |
422| :---------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------ |
423| `~/.claude/skills/` | personal | Di setiap proyek, karena lokasi hanya milik Anda |
424| `<cwd>/.claude/skills/` | proyek | Hanya setelah Anda menerima [dialog kepercayaan](/docs/id/permissions#what-runs-before-you-trust-a-folder) workspace untuk folder tersebut |
425
426Plugin dengan cakupan proyek diperiksa ke dalam repositori dan menjangkau setiap kolaborator yang mengklonnya. Karena konten tersebut berasal dari repositori daripada dari Anda, konten tersebut dimuat hanya setelah gerbang kepercayaan yang sama yang mengatur aturan izin proyek di `.claude/settings.json`, jadi mempercayai folder induk atau menjalankan dengan `-p` tidak cukup, dan komponen yang menjalankan kode dibatasi lebih lanjut:
427
428* Server MCP yang dideklarasikannya melalui [persetujuan per-server yang sama](/docs/id/mcp) sebagai `.mcp.json` proyek
429* Server LSP dimulai hanya setelah Anda mempercayai workspace
430* [Monitor latar belakang](#monitors) tidak dimuat
431
432Plugin dengan cakupan personal tidak memiliki pembatasan ini.
433
434<Warning>
435 Plugin `@skills-dir` dengan cakupan proyek dimuat hanya dari `.claude/skills/` dari [direktori kerja utama](/docs/id/permissions#working-directories) sesi. Mereka tidak [berjalan ke akar repositori](/docs/id/skills#discovery-from-parent-and-nested-directories) seperti yang dilakukan skills dan perintah biasa, jadi peluncuran dari subdirektori melewatkan plugin yang berada di akar repo. Luncurkan dari akar repositori, atau [pindahkan sesi ke sana dengan `/cd`](/docs/id/permissions#move-the-session-to-another-directory) pada v2.1.246 atau lebih baru.
436</Warning>
437
438<h3 id="edit-reload-and-disable-a-skills-directory-plugin">
439 Edit, muat ulang, dan nonaktifkan plugin direktori skills
440</h3>
441
442Perubahan yang Anda buat pada `SKILL.md` skill berlaku segera dalam sesi saat ini. Perubahan pada komponen lain plugin, seperti `hooks/`, `.mcp.json`, `agents/`, dan `output-styles/`, tidak. Jalankan `/reload-plugins` atau mulai ulang Claude Code untuk mengambilnya. Lihat [Deteksi perubahan langsung](/docs/id/skills#live-change-detection).
443
444Untuk menghentikan pemuatan plugin direktori skills, hapus foldernya atau nonaktifkan berdasarkan nama. Tidak ada langkah `uninstall` karena tidak ada yang diinstal dari marketplace.
445
446```bash theme={null}
447claude plugin disable my-tool@skills-dir
448```
449
450***
451
452<h2 id="synced-plugins">
453 Plugin yang disinkronkan dari claude.ai
454</h2>
455
456Claude Code memuat plugin yang diaktifkan untuk akun claude.ai Anda, termasuk plugin yang organisasi Anda aktifkan untuk anggotanya, bersama dengan plugin yang Anda instal dari marketplace. Plugin ini diunduh ke dalam `~/.claude/plugins/synced/` dan dimuat sebagai `<name>@synced`, tanpa marketplace dan tanpa catatan instalasi. Plugin yang disinkronkan berjalan dengan kepercayaan yang sama seperti plugin marketplace yang Anda instal: skills, agents, hooks, server MCP, dan server LSP semuanya dimuat.
457
458Tempat Claude Code menyinkronkan plugin ini tergantung pada sesi:
459
460* Di [Cowork](https://claude.com/product/cowork) dan [sesi cloud](/docs/id/cloud-environments#what-carries-over-from-your-setup), Claude Code mengunduh plugin ke dalam lingkungan sesi itu sendiri ketika sesi dimulai. Sebelum v2.1.239, Claude Code memuat plugin ini sebagai `<name>@inline`, identitas yang digunakan plugin `--plugin-dir`.
461* Di sesi terminal tempat Anda masuk dengan akun claude.ai Anda, Claude Code memeriksa akun Anda sekali setiap kali dimulai, kemudian mengunduh plugin baru dan yang diperbarui serta menghapus plugin yang Anda atau organisasi Anda matikan, semuanya di latar belakang. Sinkronisasi di sesi terminal memerlukan Claude Code v2.1.273 atau lebih baru.
462
463Pemeriksaan peluncuran berjalan di latar belakang, sehingga dapat selesai setelah sesi Anda dimulai. Ketika menambah, memperbarui, atau menghapus plugin yang disinkronkan di sesi interaktif, Claude Code menampilkan `Plugins changed. Run /reload-plugins to activate.` Jalankan [`/reload-plugins`](/docs/id/discover-plugins#apply-plugin-changes-without-restarting) untuk memuat perubahan di sesi itu, atau biarkan untuk lain kali Anda memulai Claude Code. Jika Anda mengaktifkan plugin di claude.ai saat sesi sedang berjalan, Claude Code mengunduhnya lain kali dimulai.
464
465Sinkronisasi plugin di sesi terminal berjalan di bawah kondisi masuk yang sama seperti [skills yang disinkronkan dari claude.ai](/docs/id/skills#where-synced-skills-load). Plugin ini juga memerlukan masuk yang memberikan Claude Code akses ke plugin akun Anda.
466
467Masuk dari versi Claude Code yang lebih awal mengambil akses plugin lain kali Claude Code memperbarui masuk itu di latar belakang, dalam beberapa jam, atau segera jika Anda menjalankan `/login` lagi. Sinkronisasi plugin dimulai lain kali Anda memulai Claude Code setelah itu.
468
469`claude plugin list` menampilkan plugin yang disinkronkan di bawah judul `Synced from claude.ai`, dan tab **Installed** `/plugin` mencantumkannya dengan `synced` sebagai sumber mereka. Kelola plugin yang disinkronkan dengan ID `<name>@synced` yang dicetak oleh `claude plugin list`:
470
471* **Matikan salah satu**: jalankan `claude plugin disable <name>@synced`, atau matikan dari tab **Installed** `/plugin`. Claude Code menyimpan pilihan sebagai `"<name>@synced": false` di [`enabledPlugins`](/docs/id/settings-reference#enabledplugins) tingkat pengguna Anda. Untuk menghidupkan kembali plugin, jalankan `claude plugin enable <name>@synced`.
472* **Jaga plugin tetap keluar di mana-mana**: [matikan plugin untuk akun claude.ai Anda](/docs/id/desktop#extend-claude-code). Untuk menjaganya tetap keluar dari satu proyek di setiap lingkungan, atur `"<name>@synced": false` di bawah `enabledPlugins` di `.claude/settings.json` proyek yang berkomitmen itu.
473* **Kelola plugin itu sendiri di claude.ai**: `claude plugin install`, `update`, dan `uninstall` tidak berlaku untuk plugin yang disinkronkan. Claude Code mengunduh pembaruan plugin pada sinkronisasi berikutnya. Untuk menghapusnya, matikan plugin untuk akun claude.ai Anda, dan Claude Code menghapusnya pada sinkronisasi berikutnya.
474* **Hentikan sinkronisasi di mesin**: atur [`syncClaudeAiPlugins`](/docs/id/settings-reference#syncclaudeaiplugins) ke `false` di pengaturan pengguna Anda. Claude Code berhenti mengunduh, dan lain kali dimulai, plugin yang sudah disinkronkan dipindahkan ke `~/.claude/plugins/.trash/` dan tidak lagi dimuat. Organisasi Anda dapat mengatur kunci yang sama di [pengaturan terkelola](/docs/id/managed-settings), atau matikan Skills di claude.ai, yang juga menghentikan plugin dari sinkronisasi.
475
476Anda tidak dapat mematikan plugin yang organisasi Anda tandai sebagai wajib di claude.ai. Claude Code memuat plugin bahkan jika Anda menonaktifkannya sebelumnya, dan `claude plugin disable` menolak dengan `Plugin "<name>@synced" is required by your organization and can't be disabled here. Contact your admin to change it.` Di `claude plugin list`, plugin ini ditandai `required by your org`.
477
478Ketika plugin yang diaktifkan dari sumber lain cocok dengan nama plugin yang disinkronkan, Claude Code memuat plugin itu dan melaporkan salinan yang disinkronkan sebagai tidak dimuat. Sumber lain termasuk instalasi marketplace, [plugin skills-directory](#skills-directory-plugins), plugin `--plugin-dir`, dan plugin yang tertanam di Claude Code. Untuk menggunakan salinan claude.ai sebagai gantinya, nonaktifkan salinan Anda sendiri. Sebelum v2.1.239, Claude Code memuat salinan yang disinkronkan alih-alih instalasi marketplace dengan nama yang sama.
479
480***
481
482<h2 id="plugin-manifest-schema">
483 Skema manifes plugin
484</h2>
485
486File `.claude-plugin/plugin.json` mendefinisikan metadata dan konfigurasi plugin Anda.
487
488Manifes bersifat opsional. Jika dihilangkan, Claude Code secara otomatis menemukan komponen di [lokasi default](#file-locations-reference) dan menurunkan nama plugin dari nama direktori. Gunakan manifes ketika Anda perlu memberikan metadata atau jalur komponen kustom.
489
490<h3 id="complete-schema">
491 Skema lengkap
492</h3>
493
494```json theme={null}
495{
496 "name": "plugin-name",
497 "displayName": "Plugin Name",
498 "version": "1.2.0",
499 "description": "Brief plugin description",
500 "author": {
501 "name": "Author Name",
502 "email": "author@example.com",
503 "url": "https://github.com/author"
504 },
505 "homepage": "https://docs.example.com/plugin",
506 "repository": "https://github.com/author/plugin",
507 "license": "MIT",
508 "keywords": ["keyword1", "keyword2"],
509 "metadata": { "catalogId": "cat-123", "tier": "pro" },
510 "skills": "./custom/skills/",
511 "commands": ["./custom/commands/special.md"],
512 "agents": ["./custom/agents/reviewer.md"],
513 "hooks": "./config/hooks.json",
514 "mcpServers": "./mcp-config.json",
515 "outputStyles": "./styles/",
516 "lspServers": "./.lsp.json",
517 "experimental": {
518 "themes": "./themes/",
519 "monitors": "./monitors.json",
520 "evals": "quality/evals"
521 },
522 "dependencies": [
523 "helper-lib",
524 { "name": "secrets-vault", "version": "~2.1.0" }
525 ]
526}
527```
528
529<h3 id="required-fields">
530 Bidang yang diperlukan
531</h3>
532
533Jika Anda menyertakan manifes, `name` adalah satu-satunya bidang yang diperlukan.
534
535| Bidang | Tipe | Deskripsi | Contoh |
536| :----- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |
537| `name` | string | Pengidentifikasi unik dalam kebab-case, tanpa spasi, karakter kontrol, atau karakter pemformatan bidirectional. Ketika [entri marketplace](/docs/id/plugin-marketplaces#plugin-entries) mencantumkan plugin dengan nama berbeda, nama entri marketplace adalah yang digunakan oleh kunci `enabledPlugins` dan `/plugin` | `"deployment-tools"` |
538
539Nama ini digunakan untuk namespacing komponen. Misalnya, di UI, agent `agent-creator` untuk plugin dengan nama `plugin-dev` akan muncul sebagai `plugin-dev:agent-creator`.
540
541<h3 id="unrecognized-fields">
542 Bidang yang tidak dikenali
543</h3>
544
545Claude Code mengabaikan bidang tingkat atas yang tidak dikenalinya. Anda dapat menyimpan metadata dari ekosistem lain di `plugin.json` dan plugin masih dimuat. Ini membuat praktis untuk mempertahankan satu manifes yang berfungsi ganda sebagai manifes ekstensi VS Code atau Cursor, `package.json` npm, atau manifes bundle MCPB/DXT.
546
547`claude plugin validate` melaporkan bidang yang tidak dikenali sebagai peringatan, bukan kesalahan. Jika bidang hanya berbeda satu atau dua karakter dari yang dikenali, peringatan menyarankan nama yang mungkin dimaksudkan. Plugin dengan hanya peringatan bidang yang tidak dikenali masih lulus validasi dan dimuat saat runtime.
548
549Bagaimana Claude Code menangani bidang yang dikenali yang nilainya memiliki tipe yang salah tergantung pada bidangnya:
550
551* **Sebagian besar bidang**: plugin gagal dimuat. Misalnya, nilai `keywords` yang berupa string bukan array adalah kesalahan pemuatan, dan `claude plugin validate` melaporkannya sebagai demikian.
552* **`experimental` dan `metadata`**: Claude Code mengabaikan nilai non-object, dan `claude plugin validate` melaporkan peringatan.
553
554Teruskan `--strict` untuk memperlakukan peringatan sebagai kesalahan. Gunakan di CI untuk menangkap nama bidang yang salah eja atau bidang yang tersisa dari manifes alat lain sebelum menerbitkan, meskipun plugin akan dimuat saat runtime.
555
556```bash theme={null}
557claude plugin validate ./my-plugin --strict
558```
559
560<h3 id="metadata-fields">
561 Bidang metadata
562</h3>
563
564| Bidang | Tipe | Deskripsi | Contoh |
565| :--------------- | :------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- |
566| `$schema` | string | URL JSON Schema untuk autocomplete dan validasi editor. Claude Code mengabaikan bidang ini saat waktu pemuatan. | `"https://json.schemastore.org/claude-code-plugin-manifest.json"` |
567| `displayName` | string | Nama yang dapat dibaca manusia ditampilkan di pemilih `/plugin` dan permukaan UI lainnya. Untuk plugin yang diinstal marketplace, `displayName` pada [entri marketplace](/docs/id/plugin-marketplaces#optional-plugin-fields) mengambil alih nilai ini. Ketika tidak ada nama tampilan yang ditetapkan di kedua tempat, pengguna melihat `name`. Tidak seperti `name`, dapat berisi spasi dan casing apa pun. Tidak digunakan untuk namespacing atau pencarian. | `"Deployment Tools"` |
568| `version` | string | Opsional. Versi semantik. Menetapkan ini mengikat plugin ke string versi itu, sehingga pengguna hanya menerima pembaruan ketika Anda menaikkannya, kecuali untuk [sumber `command`](/docs/id/plugin-marketplaces#command-sources) atau plugin [dimuat di tempat](#plugin-caching-and-file-resolution); lihat [Manajemen versi](#version-management). Jika juga ditetapkan di entri marketplace, `plugin.json` menang. Jika dihilangkan, versi berasal dari sumber berikutnya di [Manajemen versi](#version-management). | `"2.1.0"` |
569| `description` | string | Penjelasan singkat tentang tujuan plugin | `"Deployment automation tools"` |
570| `author` | object | Informasi penulis | `{"name": "Dev Team", "email": "dev@company.com"}` |
571| `homepage` | string | URL dokumentasi | `"https://docs.example.com"` |
572| `repository` | string | URL kode sumber | `"https://github.com/user/plugin"` |
573| `license` | string | Pengidentifikasi lisensi | `"MIT"`, `"Apache-2.0"` |
574| `keywords` | array | Tag penemuan | `["deployment", "ci-cd"]` |
575| `metadata` | object | Objek bentuk bebas untuk data Anda sendiri, seperti bidang hak atau katalog. Claude Code tidak membacanya, jadi nilai tidak pernah mempengaruhi perilaku plugin. Claude Code mengabaikan nilai non-object, dan `claude plugin validate` melaporkannya sebagai peringatan. Sebelum v2.1.222, Claude Code memperlakukan kunci sebagai [bidang yang tidak dikenali](#unrecognized-fields). | `{"catalogId": "cat-123"}` |
576| `defaultEnabled` | boolean | Apakah plugin dimulai dalam keadaan diaktifkan ketika pengguna belum menetapkan satu. Default ke `true`. Lihat [Pengaktifan default](#default-enablement). | `false` |
577
578<h3 id="default-enablement">
579 Pengaktifan default
580</h3>
581
582Atur `defaultEnabled: false` di `plugin.json` untuk mengirimkan plugin yang diinstal dalam keadaan dinonaktifkan. Pengguna menghidupkannya dengan `claude plugin enable <plugin>` atau antarmuka `/plugin`. Gunakan ini untuk plugin yang menambah biaya atau ruang lingkup yang harus dipilih pengguna, seperti yang menghubungkan ke layanan eksternal.
583
584`defaultEnabled` adalah fallback ketika tidak ada yang lain telah memutuskan status plugin. Pengaturan pengguna dan persyaratan ketergantungan mengambil alih:
585
586* **Pengaturan pengguna**: entri untuk plugin di `enabledPlugins` di ruang lingkup pengaturan apa pun. Setelah ditulis, itu bertahan di seluruh pembaruan dan penginstalan ulang plugin, jadi mengubah `defaultEnabled` dalam rilis yang lebih baru tidak membalik pengguna yang ada.
587* **Persyaratan ketergantungan**: ketika plugin diperlukan oleh plugin lain yang aktif, Claude Code menulis `true` untuk itu pada waktu instalasi atau pengaktifan. Itu memberikannya pengaturan eksplisit, jadi default-nya sendiri tidak lagi berlaku. Lihat [Aktifkan atau nonaktifkan plugin dengan ketergantungan](/docs/id/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies).
588
589Bidang yang sama dapat muncul di entri marketplace plugin, di mana itu mengambil alih nilai di `plugin.json`. Lihat [Bidang plugin opsional](/docs/id/plugin-marketplaces#optional-plugin-fields).
590
591<h3 id="component-path-fields">
592 Bidang jalur komponen
593</h3>
594
595| Bidang | Tipe | Deskripsi | Contoh |
596| :---------------------- | :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |
597| `skills` | string\|array | Direktori skill kustom yang berisi `<name>/SKILL.md`. Menambah pemindaian `skills/` default. Lihat [Aturan perilaku jalur](#path-behavior-rules) untuk pengecualian akar marketplace | `"./custom/skills/"` |
598| `commands` | string\|array | File skill `.md` datar kustom atau direktori (menggantikan `commands/` default) | `"./custom/cmd.md"` atau `["./cmd1.md"]` |
599| `agents` | string\|array | File agent kustom (menggantikan `agents/` default) | `"./custom/agents/reviewer.md"` |
600| `workflows` | string\|array | File atau direktori skrip [workflow](/docs/id/workflows) kustom (menggantikan `workflows/` default) | `"./custom/workflows/"` |
601| `hooks` | string\|array\|object | Jalur konfigurasi hook atau konfigurasi inline | `"./my-extra-hooks.json"` |
602| `mcpServers` | string\|array\|object | Jalur konfigurasi MCP atau konfigurasi inline | `"./my-extra-mcp-config.json"` |
603| `outputStyles` | string\|array | File/direktori gaya output kustom (menggantikan `output-styles/` default) | `"./styles/"` |
604| `lspServers` | string\|array\|object | Konfigurasi [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) untuk intelijen kode (buka definisi, temukan referensi, dll.) | `"./.lsp.json"` |
605| `experimental.themes` | string\|array | File/direktori tema warna (menggantikan `themes/` default). Lihat [Themes](#themes) | `"./themes/"` |
606| `experimental.monitors` | string\|array | Konfigurasi [Monitor](/docs/id/tools-reference#monitor-tool) latar belakang yang dimulai secara otomatis ketika plugin aktif. Lihat [Monitors](#monitors) | `"./monitors.json"` |
607| `experimental.evals` | string\|array | Direktori di bawah akar plugin yang menyimpan [kasus eval](/docs/id/plugin-evals#use-a-different-eval-directory) plugin, ketika bukan `evals/` default. `claude plugin eval --eval-dir` menggantinya | `"quality/evals"` |
608| `userConfig` | object | Nilai yang dapat dikonfigurasi pengguna yang diminta saat pengaktifan. Lihat [Konfigurasi pengguna](#user-configuration) | |
609| `channels` | array | Deklarasi saluran untuk injeksi pesan (gaya Telegram, Slack, Discord). Lihat [Channels](#channels) | |
610| `dependencies` | array | Plugin lain yang diperlukan plugin ini, secara opsional dengan batasan versi semver. Lihat [Batasi versi ketergantungan plugin](/docs/id/plugin-dependencies) | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |
611
612<h3 id="experimental-components">
613 Komponen eksperimental
614</h3>
615
616Komponen di bawah kunci `experimental`, `themes` dan `monitors`, memiliki skema manifes yang mungkin berubah antar rilis saat mereka stabil. Tempat Anda mendeklarasikannya adalah migrasi terpisah: tingkat atas masih berfungsi, `claude plugin validate` memperingatkan, dan rilis di masa depan akan memerlukan `experimental.*`.
617
618<h3 id="user-configuration">
619 Konfigurasi pengguna
620</h3>
621
622Bidang `userConfig` mendeklarasikan nilai yang Claude Code minta dari pengguna ketika plugin diaktifkan. Gunakan ini alih-alih mengharuskan pengguna untuk mengedit `settings.json` secara manual.
623
624```json theme={null}
625{
626 "userConfig": {
627 "api_endpoint": {
628 "type": "string",
629 "title": "API endpoint",
630 "description": "Your team's API endpoint"
631 },
632 "api_token": {
633 "type": "string",
634 "title": "API token",
635 "description": "API authentication token",
636 "sensitive": true
637 }
638 }
639}
640```
641
642Kunci harus berupa pengidentifikasi yang valid. Setiap opsi mendukung bidang-bidang ini:
643
644| Bidang | Diperlukan | Deskripsi |
645| :------------ | :--------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
646| `type` | Ya | Salah satu dari `string`, `number`, `boolean`, `directory`, atau `file` |
647| `title` | Ya | Label ditampilkan di dialog konfigurasi |
648| `description` | Ya | Teks bantuan ditampilkan di bawah bidang |
649| `sensitive` | Tidak | Jika `true`, menyembunyikan input dan menyimpan nilai dalam penyimpanan aman alih-alih `settings.json` |
650| `required` | Tidak | Jika `true`, validasi gagal ketika bidang kosong |
651| `default` | Tidak | Nilai yang digunakan ketika pengguna tidak memberikan apa pun |
652| `options` | Tidak | Untuk tipe `string`, nilai yang diterima bidang, ditampilkan di `/config` sebagai pemilih di atasnya. Lihat [Batasi bidang ke opsi tetap](#limit-a-field-to-fixed-options). Memerlukan Claude Code v2.1.271 atau lebih baru |
653| `multiple` | Tidak | Untuk tipe `string`, izinkan array string |
654| `min` / `max` | Tidak | Batas untuk tipe `number` |
655
656Kecuali bidang `sensitive` dan daftar `multiple`, setiap bidang dari setiap plugin yang diaktifkan juga muncul sebagai baris di panel `/config`. Baris memerlukan Claude Code v2.1.269 atau lebih baru.
657
658Setiap nilai tersedia untuk substitusi sebagai `${user_config.KEY}` dalam konfigurasi server MCP dan LSP serta perintah hook. Nilai non-sensitif juga dapat disubstitusi dalam konten skill dan agent. Semua nilai diekspor ke proses hook sebagai variabel lingkungan `CLAUDE_PLUGIN_OPTION_<KEY>`, di mana `<KEY>` adalah kunci opsi dengan huruf besar.
659
660Bidang yang berjalan dalam shell menolak `${user_config.*}`: mensubstitusi nilai yang dikonfigurasi ke dalam perintah shell akan membiarkan shell menjalankan apa pun yang berisi nilai itu, jadi komponen gagal dengan [kesalahan](/docs/id/errors#plugin-command-references-user-config) sebagai gantinya. Setiap bidang yang ditolak memiliki cara alternatif untuk melewatkan nilai:
661
662| Bidang yang ditolak | Cara melewatkan nilai |
663| :--------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- |
664| Perintah hook bentuk shell | Gunakan [bentuk exec](/docs/id/hooks#exec-form-and-shell-form) dengan `args`, atau baca `CLAUDE_PLUGIN_OPTION_<KEY>` dari lingkungan hook |
665| Perintah [Monitor](#monitors) | Baca nilai dari file konfigurasi dalam skrip |
666| MCP [`headersHelper`](/docs/id/mcp#use-dynamic-headers-for-custom-authentication) | Baca nilai dari file konfigurasi dalam skrip |
667
668Sebelum v2.1.207, bidang-bidang ini mensubstitusi nilai `${user_config.KEY}`; perbarui plugin yang mengandalkan ini.
669
670Nilai non-sensitif disimpan di bawah kunci [`pluginConfigs`](/docs/id/settings-reference#pluginconfigs) di `settings.json` pengguna Anda sebagai `pluginConfigs[<plugin-id>].options`.
671
672Di macOS, Claude Code menyimpan nilai sensitif di macOS Keychain, kembali ke `~/.claude/.credentials.json` ketika Keychain menolak penulisan. Di platform tanpa keychain yang didukung, itu menyimpannya di `~/.claude/.credentials.json`. Penyimpanan Keychain dibagikan dengan token OAuth dan memiliki batas total sekitar 2 KB, jadi simpan nilai sensitif tetap kecil.
673
674Claude Code membaca semua nilai `pluginConfigs` dari hanya tiga sumber pengaturan:
675
676* **Pengaturan pengguna**: `~/.claude/settings.json`, file yang ditulis prompt waktu pengaktifan
677* **`--settings`**: bendera CLI atau pengaturan inline SDK
678* **Pengaturan terkelola**: [kebijakan yang dikendalikan organisasi](/docs/id/permissions#managed-settings)
679
680Ketika lebih dari satu sumber menetapkan kunci yang sama, pengaturan terkelola mengambil alih, kemudian `--settings`, kemudian pengaturan pengguna. Satu-satunya sumber yang dapat Anda hapus dari daftar ini adalah pengaturan pengguna: teruskan [`--setting-sources`](/docs/id/cli-reference#cli-flags) tanpa `user` dan Claude Code melewatinya. Pengaturan terkelola dan `--settings` tetap apa pun yang Anda teruskan. Opsi [`settingSources`](/docs/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) SDK menetapkan daftar yang sama.
681
682Entri di `.claude/settings.json` atau `.claude/settings.local.json` proyek diabaikan. Kedua file berada di workspace, jadi repositori yang dikloning dapat menyediakan nilai di sana, dan nilai-nilai itu akan mengalir ke perintah hook plugin, konfigurasi server MCP, perintah LSP, dan perintah monitor. Sebelum v2.1.207, entri-entri ini dibaca. Pembatasan khusus untuk `pluginConfigs`: [`enabledPlugins`](/docs/id/settings-reference#enabledplugins) masih menghormati pengaturan proyek dan lokal.
683
684<h4 id="limit-a-field-to-fixed-options">
685 Batasi bidang ke opsi tetap
686</h4>
687
688Atur `options` pada bidang `userConfig` untuk membuat pengguna memilih nilainya dari daftar tetap.
689
690Untuk membatasi bidang `tone` ke tiga opsi, cantumkan dalam `options` dan atur `default` ke salah satunya:
691
692```json theme={null}
693{
694 "userConfig": {
695 "tone": {
696 "type": "string",
697 "title": "Tone",
698 "description": "Voice for generated replies",
699 "options": ["neutral", "warm", "formal"],
700 "default": "neutral"
701 }
702 }
703}
704```
705
706Jika Anda mendeklarasikan `options` pada bidang apa pun, pengguna pada versi Claude Code sebelum v2.1.271 tidak dapat memuat plugin.
707
708Ketika Anda menetapkan `options` pada bidang, ikuti aturan-aturan ini:
709
710* Atur `type` ke `string`
711* Jangan atur `multiple` atau `sensitive` ke `true`
712* Atur `default` ke salah satu opsi
713* Jika Anda membiarkan `default` tidak diatur, atur `required` ke `true`
714* Cantumkan setidaknya satu opsi, masing-masing 1 hingga 64 karakter panjang
715* Jangan mulai atau akhiri opsi dengan spasi
716* Jangan gunakan karakter kontrol, karakter tak terlihat, karakter yang mengubah arah teks, atau spasi selain spasi biasa dalam opsi
717* Jangan cantumkan opsi yang sama dua kali, bahkan dalam huruf case yang berbeda
718
719Jika Anda melanggar salah satu aturan ini, plugin gagal dimuat. Jalankan `claude plugin validate` untuk melihat bidang mana yang melanggar aturan mana.
720
721<h3 id="channels">
722 Channels
723</h3>
724
725Bidang `channels` memungkinkan plugin mendeklarasikan satu atau lebih saluran pesan yang menyuntikkan konten ke dalam percakapan. Setiap saluran mengikat ke server MCP yang disediakan plugin.
726
727```json theme={null}
728{
729 "channels": [
730 {
731 "server": "telegram",
732 "userConfig": {
733 "bot_token": {
734 "type": "string",
735 "title": "Bot token",
736 "description": "Telegram bot token",
737 "sensitive": true
738 },
739 "owner_id": {
740 "type": "string",
741 "title": "Owner ID",
742 "description": "Your Telegram user ID"
743 }
744 }
745 }
746 ]
747}
748```
749
750Bidang `server` diperlukan dan harus cocok dengan kunci di `mcpServers` plugin. `userConfig` per-saluran opsional menggunakan skema yang sama dengan bidang tingkat atas, memungkinkan plugin untuk meminta token bot atau ID pemilik ketika plugin diaktifkan.
751
752<h3 id="path-behavior-rules">
753 Aturan perilaku jalur
754</h3>
755
756Apakah jalur kustom menggantikan atau memperluas direktori default plugin tergantung pada bidangnya:
757
758* **Menggantikan default**: `commands`, `agents`, `workflows`, `outputStyles`, `experimental.themes`, `experimental.monitors`. Misalnya, ketika manifes menentukan `commands`, direktori `commands/` default tidak dipindai. Untuk menyimpan default dan menambah lebih banyak, cantumkan secara eksplisit: `"commands": ["./commands/", "./extras/"]`
759* **Menambah default**: `skills`. Direktori `skills/` default selalu dipindai, dan direktori yang tercantum di `skills` dimuat bersama. Pengecualian: untuk [entri marketplace yang `source`-nya diselesaikan ke akar marketplace](/docs/id/plugin-marketplaces#advanced-plugin-entries), mendeklarasikan subdirektori spesifik menggantikan pemindaian `skills/` default
760* **Aturan penggabungan sendiri**: [hooks](#hooks), [server MCP](#mcp-servers), dan [server LSP](#lsp-servers). Lihat setiap bagian untuk cara beberapa sumber menggabungkan
761
762Ketika plugin memiliki folder default dan kunci manifes yang cocok, Claude Code memperingatkan tentang folder yang diabaikan di `claude plugin list` dan tampilan detail `/plugin`. Plugin masih dimuat menggunakan jalur manifes. Claude Code tidak memperingatkan ketika kunci manifes menunjuk ke folder default, misalnya `"commands": ["./commands/deploy.md"]`, karena jalur itu menamai folder secara eksplisit.
763
764Untuk semua bidang jalur:
765
766* Semua jalur harus relatif terhadap akar plugin dan dimulai dengan `./`, kecuali bidang `skills` juga menerima `"."`
767 * Baik `"."` maupun `"./"` menunjukkan akar plugin itu sendiri
768 * Sebelum v2.1.221, `"."` gagal validasi manifes dan plugin tidak dimuat, jadi gunakan `"./"` untuk mendukung versi sebelumnya
769* Komponen dari jalur kustom menggunakan aturan penamaan dan namespacing yang sama, kecuali file agent. Lihat [Agents](#agents) untuk cara kerja nama agent
770* Beberapa jalur dapat ditentukan sebagai array
771* Jalur skill dapat menunjuk ke direktori yang berisi `SKILL.md` secara langsung, misalnya `"skills": ["."]` untuk akar plugin
772 * Claude Code mengambil nama invokasi skill dari bidang frontmatter `name` di `SKILL.md`, jadi nama tetap stabil apa pun nama direktori instalasi
773 * Jika `name` tidak diatur di frontmatter, Claude Code kembali ke nama dasar direktori
774
775Plugin yang memiliki `SKILL.md` di akarnya, tidak ada subdirektori `skills/`, dan tidak ada bidang manifes `skills` secara otomatis dimuat sebagai plugin skill tunggal. Anda tidak perlu menetapkan `"skills": ["./"]` di `plugin.json` untuk tata letak ini.
776
777**Contoh jalur**:
778
779```json theme={null}
780{
781 "commands": [
782 "./specialized/deploy.md",
783 "./utilities/batch-process.md"
784 ],
785 "agents": [
786 "./custom-agents/reviewer.md",
787 "./custom-agents/tester.md"
788 ]
789}
790```
791
792<h3 id="environment-variables">
793 Variabel lingkungan
794</h3>
795
796Claude Code menyediakan tiga variabel untuk mereferensikan jalur:
797
798| Variabel | Diselesaikan ke | Gunakan untuk |
799| :---------------------- | :-------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------ |
800| `${CLAUDE_PLUGIN_ROOT}` | Jalur absolut ke direktori instalasi plugin | Skrip, biner, dan file konfigurasi yang disertakan dengan plugin |
801| `${CLAUDE_PLUGIN_DATA}` | [Direktori persisten](#persistent-data-directory) yang bertahan pembaruan plugin, dibuat pada referensi pertama | Ketergantungan yang diinstal seperti `node_modules` atau lingkungan virtual Python, kode yang dihasilkan, dan cache |
802| `${CLAUDE_PROJECT_DIR}` | Akar proyek | Skrip dan file konfigurasi lokal proyek |
803
804Ketiga-tiganya diekspor sebagai variabel lingkungan ke proses hook dan ke subproses server MCP dan LSP. Mereka tidak ada di lingkungan perintah yang Claude jalankan melalui alat Bash, di sesi utama atau di subagent. Dalam konten plugin, tulis placeholder sebagai gantinya, dan Claude Code mensubstitusi jalur inline ketika memuat konten. Bidang mana yang mensubstitusi mereka inline tergantung pada komponen plugin:
805
806| Komponen plugin | Bidang tempat placeholder diselesaikan |
807| :----------------------------- | :------------------------------------------ |
808| Konten skill dan agent | Di mana pun placeholder muncul |
809| Perintah hook dan monitor | Di mana pun placeholder muncul |
810| Server MCP `stdio` | `command`, `args`, `env` |
811| Server MCP `http`, `sse`, `ws` | `url`, `headers`, `headersHelper` |
812| Server LSP | `command`, `args`, `env`, `workspaceFolder` |
813
814Dalam perintah hook, gunakan [bentuk exec](/docs/id/hooks#exec-form-and-shell-form) dengan `args` sehingga setiap jalur dilewatkan sebagai satu argumen tanpa tanda kutip. Dalam hook bentuk shell dan perintah monitor, bungkus variabel dalam tanda kutip ganda, seperti `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`. Hook bentuk shell ini menjalankan skrip yang disertakan dengan plugin:
815
816```json theme={null}
817{
818 "hooks": {
819 "PostToolUse": [
820 {
821 "hooks": [
822 {
823 "type": "command",
824 "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/process.sh"
825 }
826 ]
827 }
828 ]
829 }
830}
831```
832
833Untuk plugin yang disalin, `${CLAUDE_PLUGIN_ROOT}` berubah ketika plugin diperbarui. Direktori versi sebelumnya tetap di disk untuk periode tenggang setelah pembaruan, tetapi perlakukan sebagai ephemeral dan jangan tulis status di sana. Untuk plugin yang dimuat di tempat dari marketplace direktori lokal, variabel menunjuk ke direktori sumber yang stabil. Lihat [plugin caching](#plugin-caching-and-file-resolution) untuk plugin mana yang disalin dan untuk semantik pembersihan.
834
835Ketika plugin yang disalin diperbarui di tengah sesi, perintah hook, monitor, server MCP, dan server LSP terus menggunakan jalur versi sebelumnya. Jalankan `/reload-plugins` untuk mengganti hook, server MCP, dan server LSP ke jalur baru; monitor memerlukan restart sesi. Dalam sesi tanpa terminal interaktif, reload meninggalkan server MCP plugin di jalur lama sampai sesi berikutnya.
836
837Untuk plugin dengan sumber `command`, Claude Code [dapat memuat ulang plugin itu sendiri](/docs/id/plugin-marketplaces#when-claude-code-re-runs-the-command).
838
839Server MCP juga dapat memanggil permintaan `roots/list` untuk membaca direktori kerja sesi saat runtime. Lihat [apa yang dikembalikan `roots/list` dan kapan Claude Code memberi tahu server tentang perubahan](/docs/id/mcp#option-3-add-a-local-stdio-server).
840
841<h4 id="persistent-data-directory">
842 Direktori data persisten
843</h4>
844
845Direktori `${CLAUDE_PLUGIN_DATA}` diselesaikan ke `~/.claude/plugins/data/{id}/`, di mana `{id}` adalah pengidentifikasi plugin dengan karakter di luar `a-z`, `A-Z`, `0-9`, `_`, dan `-` diganti dengan `-`. Untuk plugin yang diinstal sebagai `formatter@my-marketplace`, direktorinya adalah `~/.claude/plugins/data/formatter-my-marketplace/`.
846
847Penggunaan umum adalah menginstal ketergantungan bahasa sekali dan menggunakannya kembali di seluruh sesi dan pembaruan plugin. Gunakan untuk ketergantungan Python, ketergantungan yang dikunci dengan Yarn atau pnpm, dan paket yang skrip siklus hidupnya harus berjalan. Untuk plugin yang diinstal marketplace, Anda mungkin tidak membutuhkannya sama sekali: Claude Code secara otomatis menginstal ketergantungan paket [Node.js yang memenuhi syarat](#node-js-package-dependencies) ketika cache plugin.
848
849Karena direktori data melampaui versi plugin tunggal, pemeriksaan keberadaan direktori saja tidak dapat mendeteksi ketika pembaruan mengubah manifes ketergantungan plugin. Pola yang direkomendasikan membandingkan manifes bundel terhadap salinan di direktori data dan menginstal ulang ketika berbeda.
850
851Hook `SessionStart` ini menginstal `node_modules` pada run pertama dan lagi kapan pun pembaruan plugin menyertakan `package.json` yang berubah:
852
853```json theme={null}
854{
855 "hooks": {
856 "SessionStart": [
857 {
858 "hooks": [
859 {
860 "type": "command",
861 "command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""
862 }
863 ]
864 }
865 ]
866 }
867}
868```
869
870`diff` keluar nonzero ketika salinan yang disimpan hilang atau berbeda dari yang bundel, mencakup run pertama dan pembaruan yang mengubah ketergantungan. Jika `npm install` gagal, `rm` trailing menghapus manifes yang disalin sehingga sesi berikutnya mencoba lagi.
871
872Skrip yang disertakan dalam `${CLAUDE_PLUGIN_ROOT}` kemudian dapat berjalan terhadap `node_modules` yang bertahan:
873
874```json theme={null}
875{
876 "mcpServers": {
877 "routines": {
878 "command": "node",
879 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],
880 "env": {
881 "NODE_PATH": "${CLAUDE_PLUGIN_DATA}/node_modules"
882 }
883 }
884 }
885}
886```
887
888Direktori data dihapus secara otomatis ketika Anda mencopot plugin dari ruang lingkup terakhir tempat itu diinstal. Antarmuka `/plugin` menampilkan ukuran direktori dan meminta sebelum menghapus. CLI menghapus secara default; teruskan [`--keep-data`](#plugin-uninstall) untuk mempertahankannya.
889
890***
891
892<h2 id="plugin-caching-and-file-resolution">
893 Plugin caching dan resolusi file
894</h2>
895
896Plugin ditentukan dalam salah satu dari tiga cara:
897
898* Melalui `claude --plugin-dir` atau `claude --plugin-url`, untuk durasi sesi.
899* Melalui marketplace, diinstal untuk sesi mendatang.
900* Melalui akun claude.ai Anda, [disinkronkan](#synced-plugins) ke dalam `~/.claude/plugins/synced/`.
901
902Untuk tujuan keamanan dan verifikasi, Claude Code menyalin plugin *marketplace* ke **plugin cache** lokal pengguna (`~/.claude/plugins/cache`), kecuali plugin dimuat di tempat. Sebuah [`command` source dalam link mode](/docs/id/plugin-marketplaces#copy-mode-and-link-mode) dimuat di tempat melalui link dalam entri cache. Sebuah [relative path source](/docs/id/plugin-marketplaces#relative-paths) dalam marketplace yang ditambahkan dari direktori lokal dimuat di tempat dari folder marketplace.
903
904Untuk plugin yang dimuat di tempat dari marketplace direktori-lokal, edit Anda ke direktori sumber berlaku pada awal sesi berikutnya atau `/reload-plugins`. Anda tidak perlu bump versi. Proses hook plugin dan server MCP dan LSP menerima `CLAUDE_PLUGIN_ROOT` yang menunjuk ke direktori sumber. Claude Code tidak menginstal [dependensi paket Node.js](#node-js-package-dependencies) plugin ke dalam direktori sumber. Instal mereka di sana sendiri, atau dari hook ke [direktori data persisten](#persistent-data-directory).
905
906Untuk plugin yang disalin, setiap versi yang diinstal adalah direktori terpisah dalam cache, dikelompokkan berdasarkan marketplace dan plugin serta dinamai untuk versi yang diselesaikan, dengan salinannya sendiri dari file plugin dan [dependensi paket Node.js](#node-js-package-dependencies). Dependensi yang diselesaikan dari [release tag](/docs/id/plugin-dependencies#tag-plugin-releases-for-version-resolution) mendapatkan nama direktori dengan akhiran commit-SHA.
907
908Ketika Anda memperbarui atau mencopot plugin, Claude Code menandai direktori versi sebelumnya sebagai orphaned dan menghapusnya dalam sweep latar belakang kira-kira 14 hari kemudian. Periode grace memungkinkan sesi Claude Code bersamaan yang sudah memuat versi lama untuk terus berjalan tanpa kesalahan. Claude Code menjalankan sweep hanya saat setidaknya satu plugin diinstal; setelah Anda mencopot plugin terakhir Anda, direktori orphaned tetap di disk sampai Anda menginstal plugin lagi.
909
910Claude Code menghapus folder plugin atau marketplace dari cache hanya ketika tidak lagi berisi direktori atau symlink apa pun. Jika Anda membuat symlink dari checkout pengembangan ke dalam cache sebagai entri versi plugin, Claude Code tidak pernah menandai link sebagai orphaned dan tidak pernah menghapusnya atau folder yang menahannya. Claude Code juga tidak pernah menulis file pelacakan versinya di dalam checkout yang ditautkan.
911
912Tools Glob dan Grep Claude melewati direktori versi orphaned selama pencarian, sehingga hasil file tidak menyertakan kode plugin yang sudah ketinggalan zaman.
913
914<h3 id="node-js-package-dependencies">
915 Dependensi paket Node.js
916</h3>
917
918Ketika Claude Code menyalin plugin ke dalam cache, Claude Code juga menginstal dependensi paket Node.js plugin di sana, sehingga hooks dan MCP servers plugin dapat memuatnya. Bagian ini mencakup paket npm dan Bun yang dideklarasikan plugin dalam `package.json` miliknya sendiri. Untuk plugin yang bergantung pada plugin lain, lihat [versi dependensi plugin](/docs/id/plugin-dependencies).
919
920Claude Code menjalankan install di dalam direktori versi yang disalin setiap kali membuat satu: ketika Anda menginstal plugin, ketika Claude Code memperbarui plugin ke versi baru, dan pada awal sesi ketika plugin yang diaktifkan belum di-cache, seperti pada mesin baru. Install hanya berjalan ketika direktori root plugin berisi `package.json` dan lockfile yang didukung:
921
922| Lockfile | Command |
923| :--------------------------------------------- | :----------------------------------------------- |
924| `bun.lock` atau `bun.lockb` | `bun install --frozen-lockfile --ignore-scripts` |
925| `npm-shrinkwrap.json` atau `package-lock.json` | `npm ci --ignore-scripts` |
926
927Jika plugin berisi lebih dari satu lockfile ini, Claude Code menggunakan kecocokan pertama, memeriksa secara berurutan: `bun.lock`, `bun.lockb`, `npm-shrinkwrap.json`, `package-lock.json`.
928
929Claude Code melewati install dalam dua kasus, masing-masing dengan perbaikannya sendiri:
930
931* Jika plugin Anda hanya mengirimkan `yarn.lock` atau `pnpm-lock.yaml`, gantikan dengan lockfile npm.
932* Jika `bunfig.toml` berada di samping lockfile bun, hapus `bunfig.toml`, atau gantikan lockfile bun dengan lockfile npm.
933
934Kirimkan lockfile npm untuk jangkauan terluas. Claude Code menjalankan package manager lockfile yang cocok dari PATH pengguna dan tidak kembali ke lockfile lain jika hilang. Untuk plugin yang didistribusikan melalui sumber npm, gunakan `npm-shrinkwrap.json`; npm mengecualikan `package-lock.json` dari paket yang dipublikasikan.
935
936Claude Code membatasi install dependensi ini sehingga tidak ada kode dari plugin atau paketnya yang dieksekusi selama install, dan membatasi berapa lama install dapat berjalan:
937
938* **Frozen resolution:** Bun dan npm menginstal dengan tepat apa yang dikunci lockfile, dan gagal daripada re-resolve versi ketika `package.json` dan lockfile tidak setuju.
939* **No lifecycle scripts:** `--ignore-scripts` menjaga agar script `preinstall`, `install`, dan `postinstall` tidak berjalan, sehingga dependensi yang membangun modul native dalam script tersebut diunduh tetapi tidak dikompilasi selama install ini.
940* **60-second timeout:** Claude Code menghentikan install yang berjalan lebih lama dan memperlakukannya sebagai gagal.
941
942Claude Code mengambil plugin sumber npm sebelum install dependensi ini, dan tidak ada script install paket sendiri yang berjalan selama pengambilan. Lihat [npm packages](/docs/id/plugin-marketplaces#npm-packages).
943
944Install yang gagal atau dilewati tidak pernah memblokir plugin. Ketika install gagal, atau Claude Code melewati karena lockfile yarn atau pnpm atau `bunfig.toml` di samping lockfile bun, Claude Code mencatat alasannya sebagai peringatan dalam [debug output](#debugging-commands). Plugin dengan `package.json` dan tidak ada lockfile dilewati tanpa entri log. Install yang time-out dapat meninggalkan pohon `node_modules` parsial dalam salinan cache.
945
946Anda tidak dapat mematikan install otomatis; tidak ada pengaturan atau variabel lingkungan yang menonaktifkannya. Di jaringan terbatas, lihat [persyaratan akses jaringan](/docs/id/network-config#network-access-requirements) untuk host yang diizinkan.
947
948Untuk dependensi yang install otomatis tidak dapat sediakan, seperti paket yang memerlukan lifecycle scripts mereka untuk membangun, dependensi Python, atau plugin yang dikunci dengan Yarn atau pnpm, instal dari hook ke [direktori data persisten](#persistent-data-directory).
949
950<h3 id="path-traversal-limitations">
951 Batasan path traversal
952</h3>
953
954Claude Code tidak membiarkan plugin mereferensikan file di luar direktorinya sendiri. Claude Code menolak path komponen yang diselesaikan di luar root plugin, apakah path dideklarasikan dalam `plugin.json` atau dalam [entri marketplace](/docs/id/plugin-marketplaces#plugin-entries). Itu mencakup path yang menunjuk di luar plugin seperti yang ditulis, seperti `../shared-utils`, dan symlink yang mengarah di luar plugin, selain [link dalam satu marketplace](#share-files-within-a-marketplace-with-symlinks).
955
956Di macOS dan Linux, Claude Code juga menolak path komponen yang berisi backslash di mana pun dalam path, bahkan ketika path tetap berada di dalam plugin. Komponen yang dideklarasikan dengan path backslash oleh karena itu hanya dimuat di Windows. Tulis path komponen dengan forward slash, seperti `./commands/deploy.md`.
957
958Ketika Claude Code menolak path, Claude Code melaporkan error [`path escapes plugin directory`](/docs/id/errors#path-escapes-plugin-directory) dan memuat plugin tanpa komponen tersebut.
959
960Claude Code juga tidak menyalin file di luar direktori plugin ke dalam cache ketika menginstal plugin, jadi ketika script di dalam plugin yang disalin membaca path di atas root plugin, script tidak menemukan file tersebut juga.
961
962<h3 id="share-files-within-a-marketplace-with-symlinks">
963 Bagikan file dalam marketplace dengan symlink
964</h3>
965
966Jika plugin Anda perlu berbagi file dengan bagian lain dari marketplace yang sama, Anda dapat membuat symbolic link di dalam direktori plugin Anda. Bagaimana symlink ditangani ketika plugin disalin ke dalam cache tergantung pada di mana targetnya diselesaikan:
967
968* **Dalam direktori plugin sendiri:** symlink dipertahankan sebagai symlink relatif dalam cache, sehingga tetap diselesaikan ke target yang disalin saat runtime.
969* **Di tempat lain dalam marketplace yang sama:** symlink didereferensikan. Konten target disalin ke dalam cache di tempatnya. Ini memungkinkan direktori `skills/` meta-plugin untuk menautkan ke skill yang ditentukan oleh plugin lain dalam marketplace.
970* **Di luar marketplace:** symlink dilewati untuk keamanan. Ini mencegah plugin dari menarik file host arbitrer seperti path sistem ke dalam cache.
971
972Untuk plugin yang diinstal dengan `--plugin-dir`, dari path lokal, atau dari [`command` source](/docs/id/plugin-marketplaces#copy-mode-and-link-mode) dalam copy mode, hanya symlink yang diselesaikan dalam direktori plugin sendiri yang dipertahankan. Semua yang lain dilewati.
973
974Perintah berikut membuat link dari dalam plugin marketplace ke skill bersama yang ditentukan oleh plugin sibling. Di Windows, gunakan `mklink /D` dari Command Prompt yang ditingkatkan atau aktifkan Developer Mode:
975
976```bash theme={null}
977ln -s ../../shared-plugin/skills/foo ./skills/foo
978```
979
980***
981
982<h2 id="plugin-directory-structure">
983 Struktur direktori plugin
984</h2>
985
986<h3 id="standard-plugin-layout">
987 Tata letak plugin standar
988</h3>
989
990Plugin lengkap mengikuti struktur ini:
991
992```text theme={null}
993enterprise-plugin/
994├── .claude-plugin/ # Direktori metadata (opsional)
995│ └── plugin.json # manifes plugin
996├── skills/ # Skills
997│ ├── code-reviewer/
998│ │ └── SKILL.md
999│ └── pdf-processor/
1000│ ├── SKILL.md
1001│ └── scripts/
1002├── commands/ # Skills sebagai file .md datar
1003│ ├── status.md
1004│ └── logs.md
1005├── agents/ # Definisi subagent
1006│ ├── security-reviewer.md
1007│ ├── performance-tester.md
1008│ ├── compliance-checker.md
1009│ └── review/ # Agents di sini dimuat sebagai enterprise-plugin:review:<name>
1010│ └── accessibility.md
1011├── workflows/ # Skrip workflow
1012│ └── release-audit.js
1013├── output-styles/ # Definisi gaya output
1014│ └── terse.md
1015├── themes/ # Definisi tema warna
1016│ └── dracula.json
1017├── monitors/ # Konfigurasi monitor latar belakang
1018│ └── monitors.json
1019├── hooks/ # Konfigurasi hooks
1020│ ├── hooks.json # Konfigurasi hook utama
1021│ └── security-hooks.json # Hooks tambahan
1022├── bin/ # Plugin yang dapat dijalankan ditambahkan ke PATH
1023│ └── my-tool # Dapat dipanggil sebagai perintah bare di Bash tool
1024├── settings.json # Pengaturan default untuk plugin
1025├── .mcp.json # Definisi server MCP
1026├── .lsp.json # Konfigurasi server LSP
1027├── scripts/ # Skrip hook dan utilitas
1028│ ├── security-scan.sh
1029│ ├── format-code.py
1030│ └── deploy.js
1031├── LICENSE # File lisensi
1032└── CHANGELOG.md # Riwayat versi
1033```
1034
1035<Warning>
1036 Direktori `.claude-plugin/` berisi file `plugin.json`. Semua direktori lainnya (commands/, agents/, skills/, workflows/, output-styles/, themes/, monitors/, hooks/) harus berada di root plugin, bukan di dalam `.claude-plugin/`.
1037</Warning>
1038
1039File `CLAUDE.md` di root plugin tidak dimuat sebagai konteks proyek. Plugin berkontribusi konteks melalui skills, agents, dan hooks daripada CLAUDE.md. Untuk mengirimkan instruksi yang dimuat ke dalam konteks Claude, letakkan di [skill](#skills).
1040
1041<h3 id="file-locations-reference">
1042 Referensi lokasi file
1043</h3>
1044
1045| Komponen | Lokasi Default | Tujuan |
1046| :---------------- | :--------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1047| **Manifes** | `.claude-plugin/plugin.json` | Metadata dan konfigurasi plugin (opsional) |
1048| **Skills** | `skills/` | Skills dengan struktur `<name>/SKILL.md` |
1049| **Commands** | `commands/` | Skills sebagai file Markdown datar. Gunakan `skills/` untuk plugin baru |
1050| **Agents** | `agents/` | File Markdown subagent. Subfolder adalah bagian dari [nama agent](#agents) |
1051| **Workflows** | `workflows/` | File skrip [Workflow](/docs/id/workflows) |
1052| **Output styles** | `output-styles/` | Definisi gaya output |
1053| **Themes** | `themes/` | Definisi tema warna |
1054| **Hooks** | `hooks/hooks.json` | Konfigurasi hook |
1055| **Server MCP** | `.mcp.json` | Definisi server MCP |
1056| **Server LSP** | `.lsp.json` | Konfigurasi language server |
1057| **Monitors** | `monitors/monitors.json` | Konfigurasi monitor latar belakang |
1058| **Executables** | `bin/` | Executable yang ditambahkan ke `PATH` Bash tool dan dapat dipanggil sebagai perintah bare saat plugin diaktifkan. Anda tidak dapat menyertakan direktori ini dalam plugin yang Anda [distribusikan melalui pengaturan organisasi claude.ai](/docs/id/plugin-marketplaces#keep-executables-out-of-the-top-level-bin-directory) |
1059| **Settings** | `settings.json` | Konfigurasi default yang diterapkan saat plugin diaktifkan. Hanya kunci [`agent`](/docs/id/sub-agents) dan [`subagentStatusLine`](/docs/id/statusline#subagent-status-lines) yang didukung |
1060
1061***
1062
1063<h2 id="cli-commands-reference">
1064 Referensi perintah CLI
1065</h2>
1066
1067Claude Code menyediakan perintah CLI untuk manajemen plugin non-interaktif, berguna untuk skrip dan otomasi.
1068
1069<h3 id="plugin-init">
1070 plugin init
1071</h3>
1072
1073Membuat perancah plugin baru di `~/.claude/skills/<name>/`. Pada sesi Claude Code berikutnya, plugin akan dimuat secara otomatis sebagai `<name>@skills-dir` dan muncul di `/plugin` dan `claude plugin list` tanpa langkah instalasi.
1074
1075Lihat [Skills-directory plugins](#skills-directory-plugins) untuk persyaratan cakupan dan kepercayaan.
1076
1077```bash theme={null}
1078claude plugin init <name> [options]
1079```
1080
1081Perintah ini mengambil argumen-argumen berikut:
1082
1083* `<name>`: Nama plugin. Menjadi namespace skill dan nama direktori di bawah `~/.claude/skills/`, jadi tidak boleh mengandung spasi atau pemisah jalur.
1084
1085Perintah ini menerima opsi-opsi berikut:
1086
1087| Opsi | Deskripsi | Default |
1088| :----------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :---------------------- |
1089| `--description <text>` | Deskripsi manifest | |
1090| `--author <name>` | Nama penulis | `git config user.name` |
1091| `--author-email <email>` | Email penulis | `git config user.email` |
1092| `--with <components...>` | Juga membuat perancah folder komponen. Nilai yang valid: `skills`, `agents`, `hooks`, `mcp`, `lsp`, `output-style`, `channel` | |
1093| `-f, --force` | Timpa `.claude-plugin/` yang ada di target | |
1094| `-h, --help` | Tampilkan bantuan untuk perintah | |
1095
1096`claude plugin new` adalah alias untuk perintah ini.
1097
1098Setiap nilai `--with` menambahkan file pemula untuk komponen tersebut, siap untuk diedit:
1099
1100| Komponen | Apa yang dibuat perancah |
1101| :------------- | :---------------------------------------------------------------------------------------------------- |
1102| `skills` | Skill `<name>:example` dengan namespace tambahan di samping yang default |
1103| `agents` | Definisi subagent `agents/` |
1104| `hooks` | `hooks/hooks.json` dengan contoh penanganan acara |
1105| `mcp` | `.mcp.json` dengan contoh server HTTP dan stdio |
1106| `lsp` | Contoh language-server `.lsp.json` |
1107| `output-style` | `output-styles/<name>.md` yang diterapkan secara otomatis saat plugin diaktifkan |
1108| `channel` | [channel](/docs/id/channels) berbasis MCP: server stdio (`server.ts`), `.mcp.json`-nya, dan `package.json` |
1109
1110Plugin yang dibuat perancah menggunakan sumber `@skills-dir` daripada marketplace. Admin dapat memblokir sumber ini dengan `strictKnownMarketplaces` atau dengan menambahkan `{"source": "skills-dir"}` ke `blockedMarketplaces` dalam [managed settings](/docs/id/plugin-marketplaces#managed-marketplace-restrictions). Ketika diblokir, `plugin init` gagal sebelum menulis.
1111
1112Contoh-contoh ini menunjukkan invokasi umum:
1113
1114```bash theme={null}
1115# Membuat perancah plugin minimal
1116claude plugin init my-helper
1117
1118# Membuat perancah dengan folder skill dan hook
1119claude plugin init my-helper --with skills hooks
1120
1121# Timpa perancah yang ada
1122claude plugin init my-helper --force
1123```
1124
1125<h3 id="plugin-install">
1126 plugin install
1127</h3>
1128
1129Instal plugin dari marketplace yang tersedia.
1130
1131```bash theme={null}
1132claude plugin install <plugin> [options]
1133```
1134
1135Perintah ini mengambil argumen-argumen berikut:
1136
1137* `<plugin>`: Nama plugin atau `plugin-name@marketplace-name` untuk marketplace tertentu
1138
1139Perintah ini menerima opsi-opsi berikut:
1140
1141| Opsi | Deskripsi | Default |
1142| :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |
1143| `-s, --scope <scope>` | Cakupan instalasi: `user`, `project`, atau `local` | `user` |
1144| `--config <key=value>` | Atur opsi [`userConfig`](#user-configuration) yang dideklarasikan dalam manifest plugin. Ulangi flag untuk mengatur beberapa opsi | |
1145| `-y, --yes` | Terima perintah yang dideklarasikan marketplace plugin, tanpa prompt konfirmasi: perintah yang menghasilkan plugin dengan [sumber `command`](/docs/id/plugin-marketplaces#command-sources), atau [`headersHelper`](/docs/id/plugin-marketplaces#authenticate-archive-downloads) yang mengautentikasi unduhan arsip. Menerima `headersHelper` memerlukan Claude Code v2.1.238 atau lebih baru. Claude Code masih mencetak perintah terlebih dahulu. Diperlukan ketika stdin atau stdout bukan TTY, kecuali Anda melewatkan `--accept-command`. Tidak berpengaruh di dalam sesi Claude Code, jadi jalankan perintah dari terminal Anda sendiri | |
1146| `--accept-command <sha256>` | Terima perintah yang dideklarasikan marketplace yang `sha256`-nya run [`--json`](#plugin-json-result) sebelumnya melaporkan dalam `shownCommand`, sebagai pengganti `-y`. Penerimaan berlaku untuk perintah, plugin, dan katalog marketplace yang tepat. Jika salah satu dari mereka berubah sejak perintah ditampilkan, termasuk melalui refresh marketplace run itu sendiri, Claude Code tidak menerima digest dan menampilkan perintah lagi. Tidak dapat digabungkan dengan `-y`. Tidak berpengaruh di dalam sesi Claude Code, jadi jalankan perintah dari terminal Anda sendiri. Memerlukan Claude Code v2.1.271 atau lebih baru | |
1147| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout alih-alih pesan yang dapat dibaca manusia, untuk digunakan dalam skrip. Lihat [format hasil JSON](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru | |
1148| `-h, --help` | Tampilkan bantuan untuk perintah | |
1149
1150Cakupan menentukan file pengaturan mana yang ditambahkan plugin yang diinstal. Misalnya, `--scope project` menulis ke `enabledPlugins` dalam .claude/settings.json, membuat plugin tersedia untuk semua orang yang mengkloning repositori proyek.
1151
1152<span id="plugin-json-result" />Dengan `--json`, baris terakhir stdout adalah satu objek JSON. Parsing hanya baris itu, karena Claude Code mencetak perintah apa pun yang dideklarasikan marketplace sebelumnya. Tiga field selalu ada:
1153
1154* `command`: subperintah yang dijalankan, seperti `install`
1155* `outcome`: `ok` atau `failed`
1156* `message`: deskripsi hasil yang dapat dibaca manusia
1157
1158Field lain, seperti `pluginId`, `scope`, dan `failureCode`, muncul hanya ketika berlaku. Opsi `--json` pada `plugin uninstall`, `plugin update`, `plugin enable`, dan `plugin disable` mencetak objek yang sama dengan field subperintah tersebut. Kesalahan penggunaan, seperti `--scope` yang tidak valid, tidak mencetak baris hasil dan keluar 1 dengan alasan di stderr.
1159
1160Ketika run menampilkan perintah yang dideklarasikan marketplace dan tidak menjalankannya, hasil `failed` juga membawa objek `shownCommand` yang field-nya mencakup perintah seperti yang ditampilkan, plugin yang dimilikinya, dan `sha256` perintah. Untuk menerima perintah yang tepat, jalankan kembali dengan `sha256` itu sebagai `--accept-command`. Memerlukan Claude Code v2.1.271 atau lebih baru.
1161
1162Jika `shownCommand.acceptCommandMatched` adalah `false`, digest yang Anda lewatkan tidak cocok dengan perintah yang sekarang ditampilkan. Tampilkan perintah itu kepada seseorang sebelum melewatkan `sha256`-nya.
1163
1164Contoh-contoh ini menunjukkan invokasi umum:
1165
1166```bash theme={null}
1167# Instal ke cakupan pengguna (default)
1168claude plugin install formatter@my-marketplace
1169
1170# Instal ke cakupan proyek (dibagikan dengan tim)
1171claude plugin install formatter@my-marketplace --scope project
1172
1173# Instal ke cakupan lokal (tidak dibagikan dengan tim)
1174claude plugin install formatter@my-marketplace --scope local
1175```
1176
1177<h3 id="plugin-uninstall">
1178 plugin uninstall
1179</h3>
1180
1181Hapus plugin yang diinstal.
1182
1183```bash theme={null}
1184claude plugin uninstall <plugin> [options]
1185```
1186
1187Perintah ini mengambil argumen-argumen berikut:
1188
1189* `<plugin>`: Nama plugin atau `plugin-name@marketplace-name`
1190
1191Perintah ini menerima opsi-opsi berikut:
1192
1193| Opsi | Deskripsi | Default |
1194| :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |
1195| `-s, --scope <scope>` | Copot instalasi dari cakupan: `user`, `project`, atau `local` | `user` |
1196| `--keep-data` | Pertahankan [direktori data persisten](#persistent-data-directory) plugin | |
1197| `--prune` | Juga hapus dependensi yang diinstal otomatis yang tidak diperlukan plugin lain. Lihat [plugin prune](#plugin-prune) | |
1198| `-y, --yes` | Lewati prompt konfirmasi `--prune`. Diperlukan ketika stdin atau stdout bukan TTY | |
1199| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout, dalam [format yang sama seperti `plugin install --json`](#plugin-json-result). Tidak dapat digabungkan dengan `--prune`. Memerlukan Claude Code v2.1.268 atau lebih baru | |
1200| `-h, --help` | Tampilkan bantuan untuk perintah | |
1201
1202`claude plugin remove` dan `claude plugin rm` adalah alias untuk perintah ini.
1203
1204Secara default, mencopot instalasi dari cakupan terakhir yang tersisa juga menghapus direktori `${CLAUDE_PLUGIN_DATA}` plugin. Gunakan `--keep-data` untuk mempertahankannya, misalnya saat menginstal ulang setelah menguji versi baru.
1205
1206<Note>
1207 Ketika plugin yang diinstal dari marketplace berbeda berbagi nama, bentuk `plugin-name@marketplace-name` mencopot instalasi hanya plugin dari marketplace bernama. Sebelum v2.1.212, bentuk yang memenuhi syarat dapat mencocokkan dan mencopot instalasi plugin dengan nama yang sama dari marketplace berbeda.
1208</Note>
1209
1210<h3 id="plugin-prune">
1211 plugin prune
1212</h3>
1213
1214Hapus dependensi plugin yang diinstal otomatis yang tidak lagi diperlukan oleh plugin yang diinstal. Dependensi yang Claude Code tarik untuk memenuhi field [`dependencies`](/docs/id/plugin-dependencies) plugin lain dihapus; plugin yang Anda instal secara langsung tidak pernah disentuh.
1215
1216```bash theme={null}
1217claude plugin prune [options]
1218```
1219
1220Perintah ini menerima opsi-opsi berikut:
1221
1222| Opsi | Deskripsi | Default |
1223| :-------------------- | :---------------------------------------------------------------------- | :------ |
1224| `-s, --scope <scope>` | Prune pada cakupan: `user`, `project`, atau `local` | `user` |
1225| `--dry-run` | Daftar apa yang akan dihapus tanpa menghapus apa pun | |
1226| `-y, --yes` | Lewati prompt konfirmasi. Diperlukan ketika stdin atau stdout bukan TTY | |
1227| `-h, --help` | Tampilkan bantuan untuk perintah | |
1228
1229`claude plugin autoremove` adalah alias untuk perintah ini.
1230
1231Perintah mencantumkan dependensi yatim piatu dan meminta konfirmasi sebelum menghapusnya. Untuk menghapus plugin dan membersihkan dependensinya dalam satu langkah, jalankan `claude plugin uninstall <plugin> --prune`.
1232
1233<h3 id="plugin-enable">
1234 plugin enable
1235</h3>
1236
1237Aktifkan plugin yang dinonaktifkan. Ketika target diinstal dari marketplace dan mendeklarasikan [dependencies](/docs/id/plugin-dependencies), Claude Code mengaktifkannya secara transitif pada cakupan yang sama. Perintah gagal dalam kondisi yang [Enable or disable a plugin with dependencies](/docs/id/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) daftar.
1238
1239```bash theme={null}
1240claude plugin enable <plugin> [options]
1241```
1242
1243Perintah ini mengambil argumen-argumen berikut:
1244
1245* `<plugin>`: Nama plugin, `plugin-name@marketplace-name`, atau `plugin-name@synced` untuk [plugin yang disinkronkan dari claude.ai](#synced-plugins)
1246
1247Perintah ini menerima opsi-opsi berikut:
1248
1249| Opsi | Deskripsi | Default |
1250| :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- |
1251| `-s, --scope <scope>` | Cakupan untuk diaktifkan: `user`, `project`, atau `local`. Ketika dihilangkan, Claude Code mendeteksi cakupan tempat plugin diinstal | Auto-detect |
1252| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout, dalam [format yang sama seperti `plugin install --json`](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru | |
1253| `-h, --help` | Tampilkan bantuan untuk perintah | |
1254
1255<h3 id="plugin-disable">
1256 plugin disable
1257</h3>
1258
1259Nonaktifkan plugin tanpa mencopot instalasinya.
1260
1261Ketika target diinstal dari marketplace, perintah gagal jika plugin yang diaktifkan lain [bergantung pada](/docs/id/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) itu. Pesan kesalahan mencakup perintah berantai yang menonaktifkan setiap plugin yang bergantung padanya terlebih dahulu.
1262
1263Untuk [plugin yang disinkronkan](#synced-plugins) yang organisasi Anda perlukan, perintah gagal dan tidak menyimpan apa pun.
1264
1265```bash theme={null}
1266claude plugin disable [plugin] [options]
1267```
1268
1269Perintah ini mengambil argumen-argumen berikut:
1270
1271* `[plugin]`: Nama plugin, `plugin-name@marketplace-name`, atau `plugin-name@synced` untuk [plugin yang disinkronkan dari claude.ai](#synced-plugins). Opsional saat menggunakan `--all`
1272
1273Perintah ini menerima opsi-opsi berikut:
1274
1275| Opsi | Deskripsi | Default |
1276| :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- |
1277| `-a, --all` | Nonaktifkan semua plugin yang diaktifkan. Tidak dapat digabungkan dengan `--scope` | |
1278| `-s, --scope <scope>` | Cakupan untuk dinonaktifkan: `user`, `project`, atau `local`. Ketika dihilangkan, Claude Code mendeteksi cakupan tempat plugin diinstal | Auto-detect |
1279| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout, dalam [format yang sama seperti `plugin install --json`](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru | |
1280| `-h, --help` | Tampilkan bantuan untuk perintah | |
1281
1282<h3 id="plugin-update">
1283 plugin update
1284</h3>
1285
1286Perbarui plugin ke versi terbaru.
1287
1288```bash theme={null}
1289claude plugin update <plugin> [options]
1290```
1291
1292Perintah ini mengambil argumen-argumen berikut:
1293
1294* `<plugin>`: Nama plugin atau `plugin-name@marketplace-name`
1295
1296Perintah ini menerima opsi-opsi berikut:
1297
1298| Opsi | Deskripsi | Default |
1299| :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |
1300| `-s, --scope <scope>` | Cakupan untuk diperbarui: `user`, `project`, `local`, atau `managed` | `user` |
1301| `-y, --yes` | Terima perintah yang dideklarasikan marketplace plugin, tanpa prompt konfirmasi: perintah yang menghasilkan plugin dengan [sumber `command`](/docs/id/plugin-marketplaces#command-sources), atau [`headersHelper`](/docs/id/plugin-marketplaces#authenticate-archive-downloads) yang mengautentikasi unduhan arsip. Menerima `headersHelper` memerlukan Claude Code v2.1.238 atau lebih baru. Claude Code masih mencetak perintah terlebih dahulu. Diperlukan ketika stdin atau stdout bukan TTY, kecuali Anda melewatkan `--accept-command`. Tidak berpengaruh di dalam sesi Claude Code, jadi jalankan perintah dari terminal Anda sendiri | |
1302| `--accept-command <sha256>` | Terima perintah yang dideklarasikan marketplace yang `sha256`-nya run [`--json`](#plugin-json-result) sebelumnya melaporkan dalam `shownCommand`, sebagai pengganti `-y`. Penerimaan berlaku untuk perintah, plugin, dan katalog marketplace yang tepat. Jika salah satu dari mereka berubah sejak perintah ditampilkan, termasuk melalui refresh marketplace run itu sendiri, Claude Code tidak menerima digest dan menampilkan perintah lagi. Tidak dapat digabungkan dengan `-y`. Tidak berpengaruh di dalam sesi Claude Code, jadi jalankan perintah dari terminal Anda sendiri. Memerlukan Claude Code v2.1.271 atau lebih baru | |
1303| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout, dalam [format yang sama seperti `plugin install --json`](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru | |
1304| `-h, --help` | Tampilkan bantuan untuk perintah | |
1305
1306<Note>
1307 Claude Code menyelesaikan nama plugin tanpa kualifikasi terhadap plugin yang diinstal. Ketika plugin yang diinstal dari marketplace berbeda berbagi nama, Claude Code menolak pembaruan dan mencantumkan perintah `plugin-name@marketplace-name` yang memenuhi syarat untuk dijalankan sebagai gantinya. Sebelum v2.1.246, Claude Code hanya menerima bentuk yang memenuhi syarat dan menolak nama tanpa kualifikasi sebagai tidak ditemukan.
1308</Note>
1309
1310***
1311
1312<h3 id="plugin-list">
1313 plugin list
1314</h3>
1315
1316Daftar plugin yang diinstal dengan versi, marketplace sumber, dan status pengaktifan mereka.
1317
1318```bash theme={null}
1319claude plugin list [options]
1320```
1321
1322Perintah ini menerima opsi-opsi berikut:
1323
1324| Opsi | Deskripsi | Default |
1325| :------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |
1326| `--json` | Output sebagai JSON. Baris plugin dengan masalah pemuatan atau peringatan penulisan membawa array string `errors` atau `notes`. Pada Claude Code v2.1.268 atau lebih baru, array `errorDetails` dan `noteDetails` paralel memberikan `type` diagnostik setiap entri dan nama yang dirujuknya, seperti plugin, marketplace, server, atau file | |
1327| `--available` | Sertakan plugin yang tersedia dari marketplace. Memerlukan `--json` | |
1328| `-h, --help` | Tampilkan bantuan untuk perintah | |
1329
1330Dalam sesi interaktif, `/plugin list` mencetak daftar serupa secara inline, tetapi mencakup hanya plugin yang diinstal marketplace:
1331
1332* Plugin yang dimuat dari direktori skills muncul di antarmuka `/plugin` dan dalam `claude plugin list`, tetapi tidak dalam output `/plugin list` inline.
1333* [Plugin yang disinkronkan dari claude.ai](#synced-plugins) muncul dalam `claude plugin list` pada Claude Code v2.1.239 atau lebih baru dan di antarmuka `/plugin`, tetapi tidak dalam output `/plugin list` inline.
1334* Plugin yang dimuat untuk sesi dengan `--plugin-dir` atau `--plugin-url` muncul di antarmuka `/plugin`, dan dalam `claude plugin list` hanya ketika flag yang sama mendahului subperintah, seperti dalam `claude --plugin-dir <dir> plugin list`. Hanya nama flag lokasi mereka, jadi `claude plugin list` tanpa kualifikasi tidak dapat menemukannya, tidak seperti plugin yang disinkronkan dan plugin direktori skills, yang direktorinya tetap Claude Code pindai.
1335
1336Bentuk interaktif menerima `--enabled` atau `--disabled` untuk menampilkan hanya plugin dalam status itu, dan `ls` sebagai singkatan untuk `list`.
1337
1338<h3 id="plugin-details">
1339 plugin details
1340</h3>
1341
1342Tampilkan inventaris komponen plugin dan biaya token yang diproyeksikan. Output mencantumkan semua komponen yang disumbangkan plugin, dikelompokkan sebagai Skills, Agents, Hooks, server MCP, dan server LSP, bersama dengan perkiraan berapa banyak token yang ditambahkannya ke setiap sesi. Grup Skills mencakup entri `skills/` dan `commands/`.
1343
1344```bash theme={null}
1345claude plugin details <name>
1346```
1347
1348Perintah ini mengambil argumen-argumen berikut:
1349
1350* `<name>`: Nama plugin atau `plugin-name@marketplace-name`
1351
1352Perintah ini menerima opsi-opsi berikut:
1353
1354| Opsi | Deskripsi | Default |
1355| :----------- | :------------------------------- | :------ |
1356| `-h, --help` | Tampilkan bantuan untuk perintah | |
1357
1358Output menampilkan dua angka biaya untuk setiap komponen:
1359
1360* **Always-on:** token yang ditambahkan ke setiap sesi oleh teks daftar plugin, seperti deskripsi skill, deskripsi agent, dan nama perintah, terlepas dari apakah komponen apa pun diaktifkan.
1361* **On-invoke:** token yang dihabiskan komponen saat diaktifkan. Ditampilkan per komponen, bukan sebagai total plugin, karena sesi khas hanya mengaktifkan subset komponen.
1362
1363Contoh ini menunjukkan seperti apa output untuk plugin dengan dua skill:
1364
1365```
1366dependency-guard 1.2.0
1367 Dependency analysis for Claude Code sessions
1368 Source: dependency-guard@example-marketplace
1369
1370Component inventory
1371 Skills (2) scan-dependencies, review-changes
1372 Agents (0)
1373 Hooks (1) SessionStart (harness-only — no model context cost)
1374 MCP servers (0)
1375 LSP servers (0)
1376
1377Projected token cost
1378 Always-on: ~180 tok added to every session
1379
1380Per-component (rounded)
1381 component always-on on-invoke
1382 scan-dependencies ~100 ~2400
1383 review-changes ~80 ~1800
1384
1385 On-invoke cost is paid each time a skill or agent fires.
1386 Token counts are estimates and may differ from actual usage.
1387```
1388
1389Total always-on dihitung melalui API `count_tokens` untuk model aktif Anda. Angka per-komponen diskalakan secara proporsional dari total itu. Jika API tidak dapat dijangkau, perintah kembali ke perkiraan berbasis karakter.
1390
1391<h3 id="plugin-validate">
1392 plugin validate
1393</h3>
1394
1395Periksa plugin atau marketplace untuk kesalahan sintaks dan skema sebelum menerbitkan.
1396
1397Perintah keluar 0 ketika validasi lulus, 1 ketika gagal, dan 2 ketika validasi itu sendiri gagal, seperti ketika jalur yang Anda berikan tidak dapat dibaca.
1398
1399```bash theme={null}
1400claude plugin validate <path> [options]
1401```
1402
1403Perintah ini mengambil argumen-argumen berikut:
1404
1405* `<path>`: Jalur ke direktori plugin atau direktori marketplace. Lihat [Validate a plugin or a directory without a manifest](/docs/id/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest) untuk file mana yang dicakup plugin run.
1406
1407Perintah ini menerima opsi-opsi berikut:
1408
1409| Opsi | Deskripsi | Default |
1410| :----------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |
1411| `--strict` | Perlakukan peringatan sebagai kesalahan dan keluar 1 pada mereka. Gunakan dalam CI untuk menangkap masalah yang ditoleransi runtime, seperti [unrecognized fields](#unrecognized-fields) | |
1412| `--json` | Output laporan validasi sebagai satu objek JSON dengan kode keluar yang sama. Memerlukan Claude Code v2.1.259 atau lebih baru | |
1413| `-h, --help` | Tampilkan bantuan untuk perintah | |
1414
1415Dengan `--json`, Claude Code menulis laporan ke stdout sebagai satu objek JSON dengan field tingkat atas ini:
1416
1417* `success`: versi yang sama yang diberikan kode keluar
1418* `strict`: apakah run memperlakukan peringatan sebagai kesalahan
1419* `target`: jalur yang diselesaikan Claude Code divalidasi
1420* `manifest`: hasil manifest itu sendiri, atau `null` untuk [run tanpa manifest](/docs/id/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest)
1421* `contents`: hasil per-file, masing-masing menamai `file`-nya dan membawa array `errors`, `warnings`, dan `notes`
1422
1423Pada keluar 2, perintah tidak menulis apa pun ke stdout; pesan kesalahan masuk ke stderr.
1424
1425Dalam sesi interaktif, `/plugin validate <path>` menjalankan pemeriksaan yang sama secara inline.
1426
1427<h3 id="plugin-eval">
1428 plugin eval
1429</h3>
1430
1431Jalankan [eval cases](/docs/id/plugin-evals) plugin dan laporkan hasil yang diskor. Memerlukan Claude Code v2.1.269 atau lebih baru. Setiap case adalah prompt plus graders; Claude Code menjalankannya beberapa kali dalam sesi terisolasi dengan hanya plugin target yang dimuat, dan secara default juga tanpa plugin sehingga laporan menunjukkan perbedaannya. Lihat [Test plugins with evals](/docs/id/plugin-evals) untuk format case, graders, hasil, dan penggunaan CI.
1432
1433```bash theme={null}
1434claude plugin eval [target] [options]
1435```
1436
1437Target opsional adalah direktori plugin, file `prompt.md` atau `case.yaml` tunggal, plugin yang diinstal sebagai `name` atau `name@marketplace`, atau `name@skills-dir`, dan default ke direktori saat ini. Letakkan sebelum `--tag`, `--allow-tools`, dan `--json`.
1438
1439Tabel ini mencantumkan opsi yang paling banyak digunakan run. Jalankan `claude plugin eval --help` untuk set lengkap, termasuk `--case`, `--tag`, `--output-dir`, `--report`, `--allow-real-servers`, `--keep-temp`, dan `--verbose`.
1440
1441| Opsi | Deskripsi | Default |
1442| :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------- |
1443| `--runs <n>` | Runs per case per arm | Setiap case's `runs`, else 3 |
1444| `-j, --concurrency <n>` | Sesi agent untuk dijalankan sekaligus, 1 hingga 8. Mereka berbagi batas laju Anda | `1` |
1445| `--model <model>` | Model untuk agent yang diuji | Setiap case's `model`, else `ANTHROPIC_MODEL` jika diatur, else default Claude Code |
1446| `--judge-model <model>` | Model untuk `llm` dan `baseline` graders | Model kecil cepat |
1447| `--ablation <mode>` | `none` atau `with-without`. Lihat [Compare against a no-plugin baseline](/docs/id/plugin-evals#compare-against-a-no-plugin-baseline) | `with-without` ketika plugin diselesaikan, else `none` |
1448| `--threshold <0..1>` | Keluar 1 jika case apa pun mencetak di bawah ini | `1.0` |
1449| `--max-cost-usd <usd>` | Berhenti sebelum run berikutnya setelah pengeluaran mencapai ini, keluar 2, dan laporkan hasil parsial | Tidak ada batas |
1450| `--allow-tools <tools...>` | Berikan tools di luar set read-only, seperti `Bash`, `Write`, `Edit`, atau `"mcp__plugin_<plugin>_<server>__*"`. Lihat [Grant tools](/docs/id/plugin-evals#grant-tools) | |
1451| `--scaffold` | Jalankan setiap case's [`scaffold_script`](/docs/id/plugin-evals#add-setup-or-history-with-case-yaml) | Off |
1452| `--trust-plugin` | Lewati prompt kepercayaan first-run, untuk CI. Lihat [What a run can access](/docs/id/plugin-evals#security) | Off |
1453| `--mocks <mode>` | `record` atau `off`. Lihat [Mock MCP servers](/docs/id/plugin-evals#mock-mcp-servers) | `record` |
1454| `--eval-dir <dir>` | Direktori di bawah plugin yang menyimpan cases | Manifest's `experimental.evals`, else `evals` |
1455| `--json [path]` | Cetak [result document](/docs/id/plugin-evals#json-result) ke stdout, atau tulis ke path `.json` | |
1456| `--no-publish` | Simpan laporan HTML secara lokal | |
1457| `-h, --help` | Tampilkan bantuan untuk perintah | |
1458
1459Perintah keluar 0 ketika setiap case memenuhi threshold, 1 pada case yang gagal, kesalahan load, atau direktori plugin yang tidak dipercaya, 2 pada run parsial, 130 ketika terputus, dan 143 ketika dihentikan. Lihat [Run evals in CI](/docs/id/plugin-evals#run-evals-in-ci).
1460
1461<h3 id="plugin-eval-init">
1462 plugin eval init
1463</h3>
1464
1465Buat suite eval untuk plugin di direktori saat ini. Memerlukan Claude Code v2.1.269 atau lebih baru. Di terminal ini memulai wawancara penulisan yang membaca plugin, mengusulkan cases dan graders, pilot mereka, dan menulis file. Dengan `--bare`, atau tanpa terminal, itu menulis template single-case kosong sebagai gantinya. Jalankan dari dalam sesi Claude Code interaktif, itu mencetak instruksi wawancara untuk sesi itu ikuti daripada menulis template. Lihat [Create your first eval suite](/docs/id/plugin-evals#create-your-first-eval-suite).
1466
1467```bash theme={null}
1468claude plugin eval init [name] [options]
1469```
1470
1471Name opsional adalah case name: wawancara tidak memerlukan satu, sementara `--bare` dan path template no-terminal memerlukan satu. Itu menerima opsi ini:
1472
1473| Opsi | Deskripsi | Default |
1474| :------------------ | :------------------------------------------------------------------------------------------------ | :-------------------------------------------- |
1475| `--bare` | Tulis `prompt.md` kosong dan `graders/criteria.md` untuk `<name>` alih-alih menjalankan wawancara | |
1476| `-i, --interactive` | Perlukan wawancara. Gagal tanpa terminal alih-alih menulis template | |
1477| `--eval-dir <dir>` | Direktori di bawah direktori saat ini untuk menulis cases ke | Manifest's `experimental.evals`, else `evals` |
1478| `-h, --help` | Tampilkan bantuan untuk perintah | |
1479
1480<h3 id="plugin-tag">
1481 plugin tag
1482</h3>
1483
1484Buat tag git rilis untuk plugin. Secara default perintah menandai plugin di direktori saat ini; berikan jalur untuk menandai plugin di tempat lain. Lihat [Tag plugin releases](/docs/id/plugin-dependencies#tag-plugin-releases-for-version-resolution).
1485
1486```bash theme={null}
1487claude plugin tag [path] [options]
1488```
1489
1490Perintah ini mengambil argumen-argumen berikut:
1491
1492* `[path]`: Jalur ke direktori plugin. Default ke direktori saat ini.
1493
1494Perintah ini menerima opsi-opsi berikut:
1495
1496| Opsi | Deskripsi | Default |
1497| :-------------------- | :-------------------------------------------------------------- | :------- |
1498| `--push` | Dorong tag ke remote setelah membuatnya | |
1499| `--dry-run` | Cetak apa yang akan ditandai tanpa membuat tag | |
1500| `-f, --force` | Buat tag bahkan jika pohon kerja kotor atau tag sudah ada | |
1501| `-m, --message <msg>` | Pesan anotasi tag. Gunakan `%s` sebagai placeholder untuk versi | |
1502| `--remote <name>` | Remote untuk didorong dengan `--push` | `origin` |
1503| `-h, --help` | Tampilkan bantuan untuk perintah | |
1504
1505***
1506
1507<h2 id="debugging-and-development-tools">
1508 Alat debugging dan pengembangan
1509</h2>
1510
1511<h3 id="debugging-commands">
1512 Perintah debugging
1513</h3>
1514
1515Gunakan `claude --debug` untuk melihat detail pemuatan plugin:
1516
1517Ini menampilkan:
1518
1519* Plugin mana yang sedang dimuat
1520* Kesalahan apa pun dalam manifes plugin
1521* Pendaftaran skill, agent, dan hook
1522* Inisialisasi server MCP
1523
1524<h3 id="common-issues">
1525 Masalah umum
1526</h3>
1527
1528| Masalah | Penyebab | Solusi |
1529| :---------------------------------- | :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1530| Plugin tidak dimuat | `plugin.json` tidak valid | Jalankan `claude plugin validate ./my-plugin` atau `/plugin validate ./my-plugin`, di mana `./my-plugin` adalah direktori plugin Anda, untuk memeriksa `plugin.json`, `hooks/hooks.json`, dan frontmatter dari skills, agents, dan commands di direktori default plugin untuk kesalahan sintaks dan skema. Lihat [Validate a plugin or a directory without a manifest](/docs/id/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest) untuk mengetahui apa yang dicakup oleh suatu run |
1531| Skills tidak muncul | Struktur direktori salah | Pastikan `skills/` atau `commands/` berada di root plugin, bukan di dalam `.claude-plugin/` |
1532| Hooks tidak aktif | Script tidak dapat dieksekusi | Jalankan `chmod +x script.sh` |
1533| Server MCP gagal | `${CLAUDE_PLUGIN_ROOT}` hilang | Gunakan variabel untuk semua path plugin |
1534| Kesalahan path | Path absolut digunakan | Buat path relatif, dimulai dengan `./`; lihat [Path behavior rules](#path-behavior-rules), yang mencakup pengecualian `"."` di field `skills` |
1535| LSP `Executable not found in $PATH` | Language server tidak terinstal | Instal binary (misalnya, `npm install -g typescript-language-server typescript`) |
1536
1537<h3 id="example-error-messages">
1538 Contoh pesan kesalahan
1539</h3>
1540
1541**Kesalahan validasi manifes**:
1542
1543* `Invalid JSON syntax: Unexpected token } in JSON at position 142`: periksa koma yang hilang, koma berlebih, atau string yang tidak dikutip
1544* `Plugin <name> has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Invalid input: expected string, received undefined`: field yang diperlukan hilang
1545* `Plugin <name> has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...`: kesalahan sintaks JSON. Sebelum v2.1.246, Claude Code juga menghasilkan kesalahan ini untuk `plugin.json` yang disimpan sebagai UTF-8 dengan byte-order mark (BOM) di awal, bahkan ketika JSON sebaliknya valid.
1546
1547**Kesalahan pemuatan plugin**:
1548
1549* `Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.`: path command ada tetapi tidak berisi file command yang valid
1550* `Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.`: path `source` di marketplace.json menunjuk ke direktori yang tidak ada
1551* `Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.`: hapus definisi komponen duplikat atau hapus `strict: false` di entri marketplace
1552
1553<h3 id="hook-troubleshooting">
1554 Hook troubleshooting
1555</h3>
1556
1557**Hook script tidak dieksekusi**:
1558
15591. Periksa script dapat dieksekusi: `chmod +x ./scripts/your-script.sh`
15602. Verifikasi baris shebang: Baris pertama harus `#!/bin/bash` atau `#!/usr/bin/env bash`
15613. Periksa path menggunakan `${CLAUDE_PLUGIN_ROOT}`: `"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh"`
15624. Uji script secara manual: `./scripts/your-script.sh`
1563
1564**Hook tidak dipicu pada event yang diharapkan**:
1565
15661. Verifikasi nama event benar (case-sensitive): `PostToolUse`, bukan `postToolUse`
15672. Periksa pola matcher cocok dengan tools Anda: `"matcher": "Write|Edit"` untuk operasi file
15683. Konfirmasi tipe hook valid: `command`, `http`, `mcp_tool`, `prompt`, atau `agent`
1569
1570<h3 id="mcp-server-troubleshooting">
1571 MCP server troubleshooting
1572</h3>
1573
1574**Server tidak memulai**:
1575
15761. Periksa command ada dan dapat dieksekusi
15772. Verifikasi semua path menggunakan variabel `${CLAUDE_PLUGIN_ROOT}`
15783. Periksa log server MCP: `claude --debug` menampilkan kesalahan inisialisasi
15794. Uji server secara manual di luar Claude Code
1580
1581**Tool server tidak muncul**:
1582
15831. Pastikan server dikonfigurasi dengan benar di `.mcp.json` atau `plugin.json`
15842. Verifikasi server mengimplementasikan protokol MCP dengan benar
15853. Periksa timeout koneksi di output debug
1586
1587<h3 id="directory-structure-mistakes">
1588 Kesalahan struktur direktori
1589</h3>
1590
1591**Gejala**: Plugin dimuat tetapi komponen (skills, agents, hooks) hilang.
1592
1593**Struktur yang benar**: Komponen harus berada di root plugin, bukan di dalam `.claude-plugin/`. Hanya `plugin.json` yang termasuk dalam `.claude-plugin/`.
1594
1595**Daftar periksa debug**:
1596
15971. Jalankan `claude --debug` dan cari pesan "loading plugin"
15982. Periksa bahwa setiap direktori komponen terdaftar di output debug
15993. Verifikasi izin file memungkinkan membaca file plugin
1600
1601***
1602
1603<h2 id="distribution-and-versioning-reference">
1604 Referensi distribusi dan versioning
1605</h2>
1606
1607<h3 id="version-management">
1608 Manajemen versi
1609</h3>
1610
1611Claude Code menggunakan versi plugin sebagai cache key yang menentukan apakah update tersedia. Ketika Anda menjalankan `/plugin update` atau auto-update aktif, Claude Code menghitung versi saat ini dan melewati update jika cocok dengan yang sudah terinstal. Plugin yang [dimuat di tempat](#plugin-caching-and-file-resolution) dari marketplace direktori lokal memuat file sumber saat ini di setiap awal sesi, apa pun yang dikatakan string versinya.
1612
1613Untuk setiap tipe sumber kecuali `command`, Claude Code menyelesaikan versi dari yang pertama dari ini yang diatur:
1614
16151. Field `version` dalam `plugin.json` plugin
16162. Field `version` dalam entri marketplace plugin dalam `marketplace.json`
16173. SHA commit git dari sumber plugin, untuk sumber `github`, `url`, `git-subdir`, dan relative-path dalam marketplace yang di-host git
16184. Digest SHA-256, untuk [sumber `archive`](/docs/id/plugin-marketplaces#zip-archives): pin `sha256` dalam entri marketplace, atau digest dari file yang diunduh ketika Anda tidak menetapkan pin. Claude Code mempersingkatnya menjadi 12 karakter pertama
16195. `unknown`, untuk sumber `npm` atau direktori lokal yang tidak berada dalam repositori git. Claude Code tidak mengambil versi dari repositori yang menutup path instalasi, seperti `~/.claude` yang dikelola git
1620
1621Untuk [sumber `command`](/docs/id/plugin-marketplaces#command-sources), Claude Code selalu menurunkan versi dari apa yang dihasilkan perintah: hash konten 12-karakter sendiri, atau ditambahkan ke versi `plugin.json` sebagai `<version>-<hash>` ketika satu diatur. Claude Code mengabaikan field `version` entri marketplace untuk sumber command. Perintah yang output hash-nya berubah oleh karena itu menghasilkan versi baru, bahkan ketika string versi yang ditulis tetap sama. Dalam [link mode](/docs/id/plugin-marketplaces#copy-mode-and-link-mode), hash mencakup path nyata direktori yang dicetak dan entri tingkat atasnya daripada konten file.
1622
1623Untuk tipe sumber tersebut, ini memberi Anda tiga cara untuk membuat versi plugin:
1624
1625| Pendekatan | Cara | Perilaku update | Terbaik untuk |
1626| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------- |
1627| **Versi eksplisit** | Atur `"version": "2.1.0"` dalam `plugin.json` | Pengguna mendapatkan update hanya ketika Anda menaikkan field ini. Mendorong commit baru tanpa menaikkannya tidak berpengaruh, dan `/plugin update` melaporkan "already at the latest version". Untuk plugin yang [dimuat di tempat](#plugin-caching-and-file-resolution), konten baru dimuat bagaimanapun. | Plugin yang dipublikasikan dengan siklus rilis stabil |
1628| **Versi commit-SHA** | Hilangkan `version` dari `plugin.json` dan entri marketplace | Pengguna mendapatkan update kapan pun commit yang diselesaikan sumber berubah | Plugin internal atau tim dalam pengembangan aktif |
1629| **Versi digest** | Gunakan [sumber `archive`](/docs/id/plugin-marketplaces#zip-archives) dan hilangkan `version` dari `plugin.json` dan entri marketplace | Dengan pin `sha256`, pengguna mendapatkan update ketika Anda mengubah pin. Tanpa satu, pengguna mendapatkan update kapan pun byte file zip yang di-host berubah | Plugin yang dipublikasikan sebagai file zip ke server statis atau repositori artefak |
1630
1631Jika Anda menggunakan versi eksplisit, ikuti [semantic versioning](https://semver.org) (`MAJOR.MINOR.PATCH`): naikkan MAJOR untuk perubahan breaking, MINOR untuk fitur baru, PATCH untuk perbaikan bug. Dokumentasikan perubahan dalam `CHANGELOG.md`.
1632
1633***
1634
1635<h2 id="see-also">
1636 Lihat juga
1637</h2>
1638
1639* [Plugins](/docs/id/plugins) - Tutorial dan penggunaan praktis
1640* [Plugin marketplaces](/docs/id/plugin-marketplaces) - Membuat dan mengelola marketplace
1641* [Skills](/docs/id/skills) - Detail pengembangan skill
1642* [Subagents](/docs/id/sub-agents) - Konfigurasi dan kemampuan agent
1643* [Hooks](/docs/id/hooks) - Penanganan event dan otomasi
1644* [MCP](/docs/id/mcp) - Integrasi alat eksternal
1645* [Settings](/docs/id/settings) - Opsi konfigurasi untuk plugins