plugin-marketplaces.md +0 −1688 deleted
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# Buat dan distribusikan marketplace plugin
6
7> Bangun dan host marketplace plugin untuk mendistribusikan ekstensi Claude Code di seluruh tim dan komunitas.
8
9Sebuah **marketplace plugin** adalah katalog yang memungkinkan Anda mendistribusikan plugin kepada orang lain. Marketplace menyediakan penemuan terpusat, pelacakan versi, pembaruan otomatis, dan dukungan untuk berbagai jenis sumber, termasuk repositori git dan jalur lokal. Panduan ini menunjukkan cara membuat marketplace Anda sendiri untuk berbagi plugin dengan tim atau komunitas Anda.
10
11Mencari cara memasang plugin dari marketplace yang sudah ada? Lihat [Temukan dan pasang plugin yang sudah dibuat](/docs/id/discover-plugins).
12
13<h2 id="overview">
14 Ikhtisar
15</h2>
16
17Membuat dan mendistribusikan marketplace melibatkan:
18
191. **Membuat plugin**: bangun satu atau lebih plugin dengan skills, agents, hooks, MCP servers, atau LSP servers. Panduan ini mengasumsikan Anda sudah memiliki plugin untuk didistribusikan; lihat [Buat plugin](/docs/id/plugins) untuk detail tentang cara membuat plugin.
202. **Membuat file marketplace**: tentukan `marketplace.json` yang mencantumkan plugin Anda dan di mana menemukannya. Lihat [Buat file marketplace](#create-the-marketplace-file).
213. **Host marketplace**: dorong ke GitHub, GitLab, atau host git lainnya. Lihat [Host dan distribusikan marketplace](#host-and-distribute-marketplaces).
224. **Bagikan dengan pengguna**: pengguna menambahkan marketplace Anda dengan `/plugin marketplace add` dan memasang plugin individual. Lihat [Temukan dan pasang plugin](/docs/id/discover-plugins).
23
24Setelah marketplace Anda aktif, Anda dapat memperbaruinya dengan mendorong perubahan ke repositori Anda. Pengguna menyegarkan salinan lokal mereka dengan `/plugin marketplace update`.
25
26<h2 id="walkthrough-create-a-local-marketplace">
27 Panduan: buat marketplace lokal
28</h2>
29
30Contoh ini membuat marketplace dengan satu plugin: skill `quality-review` untuk ulasan kode. Anda akan membuat struktur direktori, menambahkan skill, membuat manifest plugin dan katalog marketplace, kemudian memasang dan mengujinya.
31
32<Steps>
33 <Step title="Buat struktur direktori">
34 ```bash theme={null}
35 mkdir -p my-marketplace/.claude-plugin
36 mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin
37 mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review
38 ```
39 </Step>
40
41 <Step title="Buat skill">
42 Buat file `SKILL.md` yang mendefinisikan apa yang dilakukan skill `quality-review`.
43
44 ```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}
45 ---
46 description: Review code for bugs, security, and performance
47 ---
48
49 Review the code I've selected or the recent changes for:
50 - Potential bugs or edge cases
51 - Security concerns
52 - Performance issues
53 - Readability improvements
54
55 Be concise and actionable.
56 ```
57 </Step>
58
59 <Step title="Buat manifest plugin">
60 Buat file `plugin.json` yang mendeskripsikan plugin. Manifest berada di direktori `.claude-plugin/`.
61
62 ```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}
63 {
64 "name": "quality-review-plugin",
65 "description": "Adds a quality-review skill for quick code reviews",
66 "version": "1.0.0",
67 "author": {
68 "name": "Your Name"
69 }
70 }
71 ```
72
73 <Note>
74 Menetapkan `version` berarti pengguna hanya menerima pembaruan ketika Anda mengubah bidang ini, jadi tingkatkan pada setiap rilis. Plugin dengan sumber [`command`](#command-sources) tidak disematkan oleh bidang ini. Juga tidak plugin yang [dimuat di tempat](/docs/id/plugins-reference#plugin-caching-and-file-resolution) dari marketplace yang ditambahkan sebagai direktori lokal. Jika Anda menghilangkan `version`, versi berasal dari sumber berikutnya dalam [manajemen versi](/docs/id/plugins-reference#version-management).
75 </Note>
76 </Step>
77
78 <Step title="Buat file marketplace">
79 Buat katalog marketplace yang mencantumkan plugin Anda.
80
81 ```json my-marketplace/.claude-plugin/marketplace.json theme={null}
82 {
83 "name": "my-plugins",
84 "owner": {
85 "name": "Your Name"
86 },
87 "plugins": [
88 {
89 "name": "quality-review-plugin",
90 "source": "./plugins/quality-review-plugin",
91 "description": "Adds a quality-review skill for quick code reviews"
92 }
93 ]
94 }
95 ```
96 </Step>
97
98 <Step title="Tambahkan dan pasang">
99 Dari direktori yang berisi `my-marketplace`, mulai Claude Code dan jalankan perintah berikut. Perintah install membuka tampilan detail plugin tempat Anda memilih cakupan instalasi untuk mengonfirmasi instalasi. Periksa ringkasan instalasi: jika melaporkan `Run /reload-plugins to activate.`, lihat [Terapkan perubahan plugin tanpa memulai ulang](/docs/id/discover-plugins#apply-plugin-changes-without-restarting).
100
101 ```shell theme={null}
102 /plugin marketplace add ./my-marketplace
103 /plugin install quality-review-plugin@my-plugins
104 ```
105 </Step>
106
107 <Step title="Coba">
108 Pilih beberapa kode di editor Anda dan jalankan skill baru Anda. Plugin skills memiliki namespace dengan nama plugin.
109
110 ```shell theme={null}
111 /quality-review-plugin:quality-review
112 ```
113 </Step>
114</Steps>
115
116Untuk mempelajari lebih lanjut tentang apa yang dapat dilakukan plugin, termasuk hooks, agents, MCP servers, dan LSP servers, lihat [Plugins](/docs/id/plugins).
117
118<Note>
119 **Cara plugin dipasang**: ketika pengguna memasang plugin, Claude Code menyalin direktori plugin ke lokasi cache, kecuali plugin memuat di tempat. Sumber [`command` dalam link mode](#copy-mode-and-link-mode) memuat di tempat, begitu juga [sumber jalur relatif](#relative-paths) dalam marketplace yang ditambahkan dari direktori lokal. Plugin yang disalin tidak dapat mereferensikan file di luar direktorinya menggunakan jalur seperti `../shared-utils`, karena file tersebut tidak akan disalin.
120
121 Jika Anda perlu berbagi file di seluruh plugin, gunakan symlink. Lihat [Plugin caching and file resolution](/docs/id/plugins-reference#plugin-caching-and-file-resolution) untuk detail.
122</Note>
123
124<h2 id="create-the-marketplace-file">
125 Buat file marketplace
126</h2>
127
128Buat `.claude-plugin/marketplace.json` di root repositori Anda. File ini mendefinisikan nama marketplace Anda, informasi pemilik, dan daftar plugin dengan sumbernya.
129
130Setiap entri plugin memerlukan minimal `name` dan `source` yang memberitahu Claude Code di mana mengambilnya. Lihat [skema lengkap](#marketplace-schema) di bawah untuk semua field yang tersedia.
131
132```json theme={null}
133{
134 "name": "company-tools",
135 "owner": {
136 "name": "DevTools Team",
137 "email": "devtools@example.com"
138 },
139 "plugins": [
140 {
141 "name": "code-formatter",
142 "source": "./plugins/formatter",
143 "description": "Automatic code formatting on save",
144 "version": "2.1.0",
145 "author": {
146 "name": "DevTools Team"
147 }
148 },
149 {
150 "name": "deployment-tools",
151 "source": {
152 "source": "github",
153 "repo": "company/deploy-plugin"
154 },
155 "description": "Deployment automation tools"
156 }
157 ]
158}
159```
160
161<h2 id="marketplace-schema">
162 Skema marketplace
163</h2>
164
165<h3 id="required-fields">
166 Field yang diperlukan
167</h3>
168
169| Field | Type | Deskripsi | Contoh |
170| :-------- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------ |
171| `name` | string | Identifier marketplace dalam kebab-case, tanpa spasi, karakter kontrol, atau karakter pemformatan bidirectional. Ini menghadap publik: pengguna melihatnya saat memasang plugin (misalnya, `/plugin install my-tool@your-marketplace`). Setiap pengguna hanya dapat mendaftarkan satu marketplace per nama: menambahkan marketplace kedua dengan nama yang sama menggantikan yang pertama. Untuk menerbitkan beberapa plugin di bawah satu nama marketplace, daftarkan semuanya dalam satu [`marketplace.json`](#create-the-marketplace-file). | `"acme-tools"` |
172| `owner` | object | Informasi pengelola marketplace. Lihat [Field pemilik](#owner-fields) | |
173| `plugins` | array | Daftar plugin yang tersedia | Lihat [Entri plugin](#plugin-entries) |
174
175<Note>
176 **Nama yang dicadangkan**: Nama marketplace berikut dicadangkan untuk penggunaan resmi Anthropic dan tidak dapat digunakan oleh marketplace pihak ketiga: `claude-code-marketplace`, `claude-code-plugins`, `claude-plugins-official`, `claude-plugins-community`, `claude-community`, `anthropic-marketplace`, `anthropic-plugins`, `agent-skills`, `anthropic-agent-skills`, `knowledge-work-plugins`, `life-sciences`, `claude-for-legal`, `claude-for-financial-services`, `financial-services-plugins`, `first-party-plugins`, `claude-tag-plugins`, `healthcare`. Nama yang meniru marketplace resmi, seperti `official-claude-plugins` atau `anthropic-plugins-v2`, juga diblokir. Pencadangan nama-nama ini mencegah marketplace pihak ketiga menyajikan dirinya sebagai sumber yang diterbitkan Anthropic.
177
178 Claude Code memeriksa kembali nama yang dicadangkan setiap kali memuat marketplace, bukan hanya saat Anda menambahkan satu. Marketplace yang terdaftar di bawah salah satu nama ini sebelum nama menjadi dicadangkan berhenti memuat dan melaporkan bahwa itu [terdaftar dari sumber yang tidak terpercaya](/docs/id/errors#marketplace-is-registered-from-an-untrusted-source). Hapus marketplace itu dan tambahkan kembali dari sumber Anthropic resmi. Marketplace pihak ketiga yang terpengaruh oleh nama yang baru dicadangkan memuat lagi segera setelah Anda menambahkannya kembali dengan nama yang berbeda. Sebelum v2.1.205, `first-party-plugins` dan `healthcare` tidak dicadangkan, dan marketplace yang sudah terdaftar di bawah nama yang dicadangkan terus memuat. Sebelum v2.1.265, `claude-tag-plugins` tidak dicadangkan.
179
180 Anda juga tidak dapat memberi nama marketplace `npm`, `pip`, `uv`, `cargo`, `github`, atau `gh`, dalam huruf besar atau kecil apa pun. Pemeriksaan ini memerlukan Claude Code v2.1.275 atau lebih baru.
181</Note>
182
183<h3 id="owner-fields">
184 Field pemilik
185</h3>
186
187| Field | Type | Diperlukan | Deskripsi |
188| :------ | :----- | :--------- | :------------------------------------------ |
189| `name` | string | Ya | Nama pengelola atau tim |
190| `email` | string | Tidak | Email kontak untuk pengelola |
191| `url` | string | Tidak | Website, profil GitHub, atau URL organisasi |
192
193<h3 id="optional-fields">
194 Field opsional
195</h3>
196
197| Field | Type | Deskripsi |
198| :------------------------------------ | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
199| `$schema` | string | URL JSON Schema untuk autocomplete dan validasi editor. Claude Code mengabaikan field ini saat waktu muat. |
200| `description` | string | Deskripsi marketplace singkat |
201| `version` | string | Versi manifest marketplace |
202| `metadata.pluginRoot` | string | Direktori yang Claude Code selesaikan nama sumber plugin bare di bawahnya. Lihat [Jalur relatif](#relative-paths). Memerlukan Claude Code v2.1.239 atau lebih baru. |
203| `allowCrossMarketplaceDependenciesOn` | array | Marketplace lain yang plugin di marketplace ini dapat bergantung padanya. Dependensi dari marketplace yang tidak tercantum di sini diblokir saat instalasi. Lihat [Bergantung pada plugin dari marketplace lain](/docs/id/plugin-dependencies#depend-on-a-plugin-from-another-marketplace). |
204| `renames` | object | Peta dari nama plugin `name` sebelumnya ke nama saat ini, atau ke `null` jika plugin dihapus. Memungkinkan pengguna yang ada untuk bermigrasi secara otomatis saat Anda mengganti nama atau menghapus entri di `plugins`. Lihat [Mengganti nama atau menghapus plugin](#rename-or-remove-a-plugin). Memerlukan Claude Code v2.1.193 atau lebih baru. |
205
206`description` dan `version` juga diterima di bawah `metadata` untuk kompatibilitas mundur.
207
208<h2 id="plugin-entries">
209 Entri plugin
210</h2>
211
212Setiap entri plugin dalam array `plugins` mendeskripsikan plugin dan di mana menemukannya. Anda dapat menyertakan field apa pun dari [skema manifest plugin](/docs/id/plugins-reference#plugin-manifest-schema), seperti `description`, `version`, `author`, `commands`, dan `hooks`, ditambah field khusus marketplace ini: `source`, `category`, `tags`, `strict`, `relevance`, `headers`, dan `headersHelper`.
213
214<h3 id="required-fields-2">
215 Field yang diperlukan
216</h3>
217
218| Field | Type | Deskripsi |
219| :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
220| `name` | string | Identifier plugin dalam kebab-case, tanpa spasi, karakter kontrol, atau karakter pemformatan bidirectional. Ini menghadap publik: pengguna melihatnya saat memasang (misalnya, `/plugin install my-plugin@marketplace`). |
221| `source` | string\|object | Di mana mengambil plugin (lihat [Plugin sources](#plugin-sources) di bawah) |
222
223<h3 id="optional-plugin-fields">
224 Field plugin opsional
225</h3>
226
227**Field metadata standar:**
228
229| Field | Type | Deskripsi |
230| :--------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
231| `displayName` | string | Nama yang dapat dibaca manusia ditampilkan di permukaan UI. Ketika entri maupun `plugin.json` plugin tidak menetapkan satu, pengguna melihat `name` plugin. Dapat berisi spasi dan huruf apa pun. Tidak digunakan untuk namespacing atau pencarian. |
232| `description` | string | Deskripsi plugin singkat |
233| `version` | string | Versi plugin. Jika diatur (di sini atau di `plugin.json`), plugin disematkan ke string ini dan pengguna hanya menerima pembaruan saat berubah. Plugin dengan [`command` source](#command-sources) tidak disematkan oleh field mana pun. Juga bukan plugin [dimuat di tempat](/docs/id/plugins-reference#plugin-caching-and-file-resolution) dari marketplace yang ditambahkan sebagai direktori lokal. Jika tidak diatur di tempat mana pun, versi berasal dari sumber berikutnya dalam [version management](/docs/id/plugins-reference#version-management). |
234| `author` | object | Informasi penulis plugin (`name` diperlukan; `email` dan `url` opsional) |
235| `homepage` | string | URL homepage atau dokumentasi plugin |
236| `repository` | string | URL repositori kode sumber |
237| `license` | string | Identifier lisensi SPDX (misalnya, MIT, Apache-2.0) |
238| `keywords` | array | Tag untuk penemuan dan kategorisasi plugin |
239| `metadata` | object | Objek bentuk bebas untuk field Anda sendiri, seperti data entitlement atau katalog. Claude Code tidak membacanya. Sebelum v2.1.222, `claude plugin validate` melaporkan kunci sebagai field yang tidak dikenali. |
240| `category` | string | Kategori plugin untuk organisasi |
241| `tags` | array | Tag untuk kemudahan pencarian |
242| `strict` | boolean | Mengontrol apakah `plugin.json` adalah otoritas untuk definisi komponen (default: true). Lihat [Strict mode](#strict-mode) di bawah. |
243| `relevance` | object | Sinyal yang memberi tahu Claude Code kapan harus menyarankan plugin ini kepada pengguna. Hanya berlaku untuk marketplace yang diizinkan administrator dalam pengaturan terkelola. Lihat [Recommend plugins for your org](/docs/id/plugin-relevance). |
244| `defaultEnabled` | boolean | Apakah plugin diaktifkan setelah pemasangan (default: true). Atur ke `false` untuk memasang plugin yang dinonaktifkan sampai pengguna memilih untuk mengaktifkannya. Mengambil alih field yang sama di `plugin.json` plugin. Lihat [Default enablement](/docs/id/plugins-reference#default-enablement). |
245
246Baik entri maupun `plugin.json` plugin sendiri dapat menetapkan field tampilan `displayName`, `description`, `author`, `homepage`, `repository`, `license`, dan `keywords`. Dalam daftar plugin dan detail, sebelum dan sesudah pemasangan:
247
248* Untuk field yang Anda tetapkan pada entri, pengguna melihat nilai entri, bahkan ketika `plugin.json` menetapkan yang berbeda.
249* Untuk field yang entri biarkan tidak diatur, pengguna melihat nilai `plugin.json`.
250
251Sebelum pemasangan, Claude Code hanya dapat membaca `plugin.json` untuk entri dengan [sumber relative-path](#relative-paths), yang file pluginnya berada di dalam marketplace itu sendiri. Untuk entri dengan tipe sumber apa pun yang lain, pengguna hanya melihat field entri sendiri sampai mereka memasang plugin.
252
253**Field konfigurasi komponen:**
254
255| Field | Type | Deskripsi |
256| :----------- | :------------- | :------------------------------------------------------------ |
257| `skills` | string\|array | Jalur kustom ke direktori skill yang berisi `<name>/SKILL.md` |
258| `commands` | string\|array | Jalur kustom ke file skill `.md` datar atau direktori |
259| `agents` | string\|array | Jalur kustom ke file agent |
260| `hooks` | string\|object | Konfigurasi hooks kustom atau jalur ke file hooks |
261| `mcpServers` | string\|object | Konfigurasi MCP server atau jalur ke config MCP |
262| `lspServers` | string\|object | Konfigurasi LSP server atau jalur ke config LSP |
263
264**Field autentikasi archive:**
265
266Atur ini ketika entri memiliki [`archive` source](#zip-archives) di server yang memerlukan kredensial.
267
268| Field | Type | Deskripsi |
269| :-------------- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
270| `headers` | object | Header HTTP yang Claude Code kirimkan saat mengunduh archive entri ini. Menimpa header marketplace dengan nama yang sama. Memerlukan Claude Code v2.1.238 atau lebih baru. |
271| `headersHelper` | string | Perintah yang mencetak header HTTP untuk unduhan archive entri ini sebagai satu objek JSON, untuk kredensial yang kedaluwarsa. Lihat [Authenticate archive downloads](#authenticate-archive-downloads). Entri juga harus menetapkan [`"strict": false`](#strict-mode). Memerlukan Claude Code v2.1.238 atau lebih baru. |
272
273<h2 id="plugin-sources">
274 Plugin sources
275</h2>
276
277Plugin sources memberitahu Claude Code di mana mengambil setiap plugin individual yang tercantum di marketplace Anda. Ini diatur dalam field `source` dari setiap entri plugin di `marketplace.json`.
278
279Claude Code menyalin setiap plugin yang dipasang ke cache plugin lokal yang tersimpan di `~/.claude/plugins/cache`, kecuali plugin dimuat di tempat. Sebuah [`command` source dalam link mode](#copy-mode-and-link-mode) dimuat di tempat, dan begitu juga [relative path source](#relative-paths) dalam marketplace yang ditambahkan dari direktori lokal. Claude Code juga [memasang dependensi paket Node.js yang memenuhi syarat dari plugin](/docs/id/plugins-reference#node-js-package-dependencies) ke dalam salinan yang di-cache. Lihat [Plugin caching and file resolution](/docs/id/plugins-reference#plugin-caching-and-file-resolution) untuk cara plugin yang dimuat di tempat dari marketplace direktori lokal mengambil edit Anda.
280
281| Source | Type | Fields | Catatan |
282| ------------- | ----------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
283| Relative path | `string` (misalnya `"./my-plugin"`) | none | Direktori lokal dalam repo marketplace. Harus dimulai dengan `./`, kecuali Anda menulis [bare name di bawah `metadata.pluginRoot`](#relative-paths). Claude Code menyelesaikan jalur relatif terhadap root marketplace, bukan direktori `.claude-plugin/` |
284| `github` | object | `repo`, `ref?`, `sha?` | |
285| `url` | object | `url`, `ref?`, `sha?` | Sumber URL Git |
286| `git-subdir` | object | `url`, `path`, `ref?`, `sha?` | Subdirektori dalam repo git. Mengklon secara sparse untuk meminimalkan bandwidth untuk monorepo |
287| `npm` | object | `package`, `version?`, `registry?` | Paket npm, diambil dengan klien npm Anda dan dibuka tanpa menjalankan skrip install |
288| `archive` | object | `url`, `sha256?` | Arsip zip yang diunduh melalui HTTPS. Berfungsi tanpa git atau npm di mesin pengguna. Memerlukan Claude Code v2.1.224 atau lebih baru |
289| `command` | object | `command`, `timeout?`, `mode?` | Direktori plugin yang dihasilkan dengan menjalankan perintah lokal, dijalankan kembali sekali per sesi untuk mengambil perubahan. Memerlukan Claude Code v2.1.229 atau lebih baru |
290
291<Note>
292 **Marketplace sources vs plugin sources**: Ini adalah konsep berbeda yang mengontrol hal berbeda.
293
294 * **Marketplace source**: di mana mengambil katalog `marketplace.json` itu sendiri. Diatur ketika pengguna menjalankan `/plugin marketplace add` atau dalam pengaturan `extraKnownMarketplaces`. Sumber marketplace berbasis Git mendukung `ref` (branch/tag) tetapi bukan `sha`.
295 * **Plugin source**: di mana mengambil plugin individual yang tercantum di marketplace. Diatur dalam field `source` dari setiap entri plugin di dalam `marketplace.json`. Sumber plugin berbasis Git mendukung baik `ref` (branch/tag) maupun `sha` (commit yang tepat).
296
297 Misalnya, marketplace yang dihosting di `acme-corp/plugin-catalog` (marketplace source) dapat mencantumkan plugin yang diambil dari `acme-corp/code-formatter` (plugin source). Marketplace source dan plugin source menunjuk ke repositori berbeda dan disematkan secara independen.
298</Note>
299
300Jenis sumber berbasis git di bawah ini adalah `github`, `url`, dan `git-subdir`. Ketika baik `ref` maupun `sha` diatur pada salah satu dari mereka, `sha` adalah pin yang efektif. Claude Code mengambil dan melakukan checkout pada commit yang disematkan secara langsung.
301
302Pada sebagian besar host git, termasuk GitHub, GitLab, dan Bitbucket, ini berarti instalasi berhasil bahkan jika branch atau tag yang dinamai oleh `ref` telah dihapus upstream, selama commit masih dapat dijangkau dari repositori. Beberapa server, seperti AWS CodeCommit, tidak mendukung pengambilan commit berdasarkan SHA. Di server tersebut `ref` masih harus ada dan commit yang disematkan harus dapat dijangkau darinya.
303
304Jika Anda mendistribusikan plugin melalui **Organization settings > Plugins**, hanya beberapa jenis source yang diizinkan. Lihat [Distribute through organization settings](#distribute-through-organization-settings).
305
306<h3 id="relative-paths">
307 Jalur relatif
308</h3>
309
310Untuk plugin di repositori yang sama, gunakan jalur yang dimulai dengan `./`:
311
312```json theme={null}
313{
314 "name": "my-plugin",
315 "source": "./plugins/my-plugin"
316}
317```
318
319Jalur diselesaikan relatif terhadap root marketplace, yang merupakan direktori yang berisi `.claude-plugin/`. Sumber `./plugins/my-plugin` oleh karena itu menunjuk ke `<repo>/plugins/my-plugin`, meskipun `marketplace.json` berada di `<repo>/.claude-plugin/marketplace.json`. Jangan gunakan `../` untuk mereferensikan jalur di luar root marketplace. Di macOS dan Linux, Claude Code menolak entri jalur dengan backslash di mana pun melampaui `./` awal, jadi tulis pemisah sebagai `/` di setiap platform.
320
321Bare name adalah nama direktori tunggal tanpa `/`, seperti `"formatter"`. Untuk menulis bare names alih-alih jalur `./`, atur [`metadata.pluginRoot`](#optional-fields) ke direktori tempat mereka diselesaikan. Dengan `"pluginRoot": "./plugins"`, Claude Code menyelesaikan `"source": "formatter"` ke `./plugins/formatter`. Memerlukan Claude Code v2.1.239 atau lebih baru.
322
323`metadata.pluginRoot` itu sendiri harus berupa jalur relatif di dalam marketplace. Claude Code mengabaikannya untuk source yang sudah dimulai dengan `./`. Source yang berisi `/`, seperti `team-a/formatter`, bukan bare name dan masih memerlukan awalan `./`, bahkan ketika `metadata.pluginRoot` diatur.
324
325<Note>
326 Claude Code menyelesaikan jalur relatif terhadap salinan lokal marketplace, jadi mereka berfungsi ketika pengguna menambahkan marketplace Anda dari sumber git atau direktori lokal. Jika pengguna menambahkan marketplace Anda melalui URL langsung ke file `marketplace.json`, jalur relatif tidak akan diselesaikan, karena Claude Code hanya mengunduh file itu. Untuk distribusi berbasis URL, gunakan [plugin source](#plugin-sources) lainnya sebagai gantinya. Lihat [Troubleshooting](#plugins-with-relative-paths-fail-in-url-based-marketplaces) untuk detail.
327</Note>
328
329<h3 id="github-repositories">
330 Repositori GitHub
331</h3>
332
333```json theme={null}
334{
335 "name": "github-plugin",
336 "source": {
337 "source": "github",
338 "repo": "owner/plugin-repo"
339 }
340}
341```
342
343Anda dapat menyematkan ke branch, tag, atau commit tertentu:
344
345```json theme={null}
346{
347 "name": "github-plugin",
348 "source": {
349 "source": "github",
350 "repo": "owner/plugin-repo",
351 "ref": "v2.0.0",
352 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
353 }
354}
355```
356
357| Field | Type | Deskripsi |
358| :----- | :----- | :------------------------------------------------------------------------------- |
359| `repo` | string | Diperlukan. Repositori GitHub dalam format `owner/repo` |
360| `ref` | string | Opsional. Branch atau tag Git (default ke branch default repositori) |
361| `sha` | string | Opsional. SHA commit git 40-karakter penuh untuk menyematkan ke versi yang tepat |
362
363<h3 id="git-repositories">
364 Repositori Git
365</h3>
366
367```json theme={null}
368{
369 "name": "git-plugin",
370 "source": {
371 "source": "url",
372 "url": "https://gitlab.com/team/plugin.git"
373 }
374}
375```
376
377Anda dapat menyematkan ke branch, tag, atau commit tertentu:
378
379```json theme={null}
380{
381 "name": "git-plugin",
382 "source": {
383 "source": "url",
384 "url": "https://gitlab.com/team/plugin.git",
385 "ref": "main",
386 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
387 }
388}
389```
390
391| Field | Type | Deskripsi |
392| :---- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- |
393| `url` | string | Diperlukan. URL repositori git lengkap (`https://` atau `git@`). Akhiran `.git` opsional, jadi URL Azure DevOps dan AWS CodeCommit tanpa akhiran berfungsi |
394| `ref` | string | Opsional. Branch atau tag Git (default ke branch default repositori) |
395| `sha` | string | Opsional. SHA commit git 40-karakter penuh untuk menyematkan ke versi yang tepat |
396
397<h3 id="git-subdirectories">
398 Subdirektori Git
399</h3>
400
401Gunakan `git-subdir` untuk menunjuk ke plugin yang berada di dalam subdirektori repositori git. Claude Code menggunakan klon parsial dan sparse untuk mengambil hanya subdirektori, meminimalkan bandwidth untuk monorepo besar.
402
403```json theme={null}
404{
405 "name": "my-plugin",
406 "source": {
407 "source": "git-subdir",
408 "url": "https://github.com/acme-corp/monorepo.git",
409 "path": "tools/claude-plugin"
410 }
411}
412```
413
414Anda dapat menyematkan ke branch, tag, atau commit tertentu:
415
416```json theme={null}
417{
418 "name": "my-plugin",
419 "source": {
420 "source": "git-subdir",
421 "url": "https://github.com/acme-corp/monorepo.git",
422 "path": "tools/claude-plugin",
423 "ref": "v2.0.0",
424 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
425 }
426}
427```
428
429Field `url` juga menerima shorthand GitHub (`owner/repo`) atau URL SSH (`git@github.com:owner/repo.git`).
430
431| Field | Type | Deskripsi |
432| :----- | :----- | :----------------------------------------------------------------------------------------------- |
433| `url` | string | Diperlukan. URL repositori Git, shorthand GitHub `owner/repo`, atau URL SSH |
434| `path` | string | Diperlukan. Jalur subdirektori dalam repo yang berisi plugin (misalnya, `"tools/claude-plugin"`) |
435| `ref` | string | Opsional. Branch atau tag Git (default ke branch default repositori) |
436| `sha` | string | Opsional. SHA commit git 40-karakter penuh untuk menyematkan ke versi yang tepat |
437
438<h3 id="npm-packages">
439 Paket npm
440</h3>
441
442Sumber npm dapat menamai paket apa pun di registry npm publik atau di registry pribadi yang dihosting tim Anda. Claude Code menyelesaikan paket dengan klien npm Anda, mengunduh tarball, dan membukanya ke dalam cache plugin.
443
444Skrip install paket, seperti `preinstall` atau `postinstall`, tidak pernah berjalan, dan dependensinya tidak dipasang selama pengambilan.
445
446Jika paket mengirimkan lockfile yang didukung di samping `package.json`-nya, Claude Code memasang [dependensi paket Node.js](/docs/id/plugins-reference#node-js-package-dependencies) itu dalam langkah terpisah, juga dengan skrip dinonaktifkan. Jika tidak, publikasikan plugin dengan semua yang dibutuhkannya sudah dibangun. Server MCP yang memerlukan paket lain dapat diluncurkan melalui `npx`, yang memasangnya pada run pertama.
447
448```json theme={null}
449{
450 "name": "my-npm-plugin",
451 "source": {
452 "source": "npm",
453 "package": "@acme/claude-plugin"
454 }
455}
456```
457
458Untuk menyematkan ke versi tertentu, tambahkan field `version`:
459
460```json theme={null}
461{
462 "name": "my-npm-plugin",
463 "source": {
464 "source": "npm",
465 "package": "@acme/claude-plugin",
466 "version": "2.1.0"
467 }
468}
469```
470
471Untuk memasang dari registry pribadi atau internal, tambahkan field `registry`:
472
473```json theme={null}
474{
475 "name": "my-npm-plugin",
476 "source": {
477 "source": "npm",
478 "package": "@acme/claude-plugin",
479 "version": "^2.0.0",
480 "registry": "https://npm.example.com"
481 }
482}
483```
484
485| Field | Type | Deskripsi |
486| :--------- | :----- | :------------------------------------------------------------------------------------- |
487| `package` | string | Diperlukan. Nama paket atau paket scoped (misalnya, `@org/plugin`) |
488| `version` | string | Opsional. Versi atau rentang versi (misalnya, `2.1.0`, `^2.0.0`, `~1.5.0`) |
489| `registry` | string | Opsional. URL registry npm kustom. Default ke registry npm sistem (biasanya npmjs.org) |
490
491<h3 id="zip-archives">
492 Zip archives
493</h3>
494
495Gunakan `archive` untuk mendistribusikan plugin sebagai file zip yang Claude Code unduh melalui HTTPS, sehingga instalasi berfungsi tanpa git atau npm di mesin pengguna. Hosting file di server file statis apa pun atau repositori artefak, seperti bucket S3, repositori generik Artifactory, atau nginx. Memerlukan Claude Code v2.1.224 atau lebih baru. Pada versi v2.1.120 hingga v2.1.223, memasang plugin gagal dengan `This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again.`; pada versi yang lebih lama, marketplace yang berisi entri `archive` gagal dimuat sepenuhnya.
496
497Entri ini memasang plugin dari file zip di server artefak:
498
499```json theme={null}
500{
501 "name": "my-plugin",
502 "source": {
503 "source": "archive",
504 "url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip"
505 }
506}
507```
508
509Ketika Anda membuat zip, Anda dapat melakukan zip pada konten plugin secara langsung atau melakukan zip pada folder plugin itu sendiri. Claude Code mencari `.claude-plugin/` di bagian atas arsip, kemudian di dalam folder tingkat atas tunggal, jadi kedua tata letak memasang:
510
511```text theme={null}
512my-plugin.zip my-plugin.zip
513├── .claude-plugin/ └── my-plugin/
514│ └── plugin.json ├── .claude-plugin/
515└── commands/ │ └── plugin.json
516 └── commands/
517```
518
519Claude Code tidak mencari lebih dalam dari satu folder, jadi plugin yang bersarang lebih jauh gagal memasang. Claude Code menolak arsip yang lebih besar dari 256 MiB.
520
521Untuk menyematkan file yang tepat, tambahkan field `sha256` dengan digest arsip:
522
523```json theme={null}
524{
525 "name": "my-plugin",
526 "source": {
527 "source": "archive",
528 "url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip",
529 "sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"
530 }
531}
532```
533
534Jika file yang diunduh tidak cocok dengan pin, Claude Code menolak instalasi dan melaporkan [`Plugin archive integrity check failed`](/docs/id/errors#plugin-archive-integrity-check-failed).
535
536Sumber arsip menerima field ini:
537
538| Field | Type | Deskripsi |
539| :------- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
540| `url` | string | Diperlukan. URL HTTPS dari arsip zip. Claude Code menolak URL `http://`, bersama dengan host loopback, link-local, dan cloud-metadata. Setiap hop redirect harus memenuhi aturan yang sama, atau Claude Code menolak unduhan |
541| `sha256` | string | Opsional. Digest SHA-256 dari arsip sebagai 64 karakter hex, huruf besar atau kecil. Claude Code memverifikasi setiap unduhan terhadapnya dan menolak instalasi pada ketidakcocokan |
542
543Digest `sha256` juga berfungsi sebagai versi plugin ketika baik `plugin.json` maupun entri marketplace tidak mendeklarasikan satu. Lihat [Version management](/docs/id/plugins-reference#version-management). Jika Anda mendeklarasikan `version`, string versi itu adalah sinyal pembaruan, jadi setelah mengubah zip dan digestnya, tingkatkan versi juga, atau pengguna menyimpan salinan yang di-cache.
544
545<h4 id="authenticate-archive-downloads">
546 Authenticate archive downloads
547</h4>
548
549Untuk mengautentikasi unduhan arsip, seperti unduhan dari registry pribadi, atur header HTTP yang Claude Code kirim dengannya. Atur `headers` pada sumber `url` yang Anda daftarkan marketplace darinya, seperti entri [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces). Pada Claude Code v2.1.238 atau lebih baru, Anda dapat mengaturnya pada entri plugin sebagai gantinya, di samping `source`.
550
551Jika nilai yang akan Anda masukkan di `headers` berumur pendek, seperti token yang registry Anda cetak atas permintaan, atur perintah `headersHelper` di tempat yang sama sebagai gantinya. Claude Code menjalankan perintah dan mengirim objek JSON yang dicetak sebagai header tempat itu. Memerlukan Claude Code v2.1.238 atau lebih baru.
552
553Tempat yang Anda pilih menentukan unduhan mana yang mendapatkan header dan kapan Claude Code menjalankan perintah:
554
555| Tempat | Unduhan yang mendapatkan header | Kapan Claude Code menjalankan `headersHelper` yang diatur di sana |
556| :----------------------- | :--------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
557| Sumber `url` marketplace | Unduhan arsip pada origin URL marketplace, berarti skema, host, dan port yang sama | Sebelum setiap pengambilan `marketplace.json` marketplace dan sebelum setiap unduhan arsip pada origin itu. Claude Code menggunakan kembali output satu run selama hingga 60 detik |
558| Entri plugin | Unduhan entri itu saja | Hanya ketika pengguna memasang atau memperbarui plugin itu saja dan [menerima perintah](#how-users-accept-a-headershelper-command) |
559
560Di mana kedua tempat mengatur header dengan nama yang sama, Claude Code mengirim nilai entri. Dalam satu tempat, header yang dicetak perintah menimpa header dengan nama yang sama yang tercantum di `headers`.
561
562<h5 id="add-a-headershelper-to-a-plugin-entry">
563 Add a headersHelper to a plugin entry
564</h5>
565
566Entri ini mengatur `headersHelper` di samping `source`. Ini juga mengatur `"strict": false`, yang Claude Code perlukan dari entri `marketplace.json` yang mengatur `headersHelper`. Dengan [`"strict": false`](#strict-mode), entri marketplace adalah definisi lengkap plugin, jadi pengguna dapat meninjau apa yang berisi plugin sebelum menerima perintah:
567
568```json theme={null}
569{
570 "name": "my-plugin",
571 "description": "Formatting commands for internal services",
572 "strict": false,
573 "commands": "./commands",
574 "source": {
575 "source": "archive",
576 "url": "https://registry.example.com/plugins/my-plugin-2.1.0.zip"
577 },
578 "headersHelper": "/opt/bin/mint-registry-token.sh"
579}
580```
581
582Untuk memeriksa entri, jalankan `claude plugin install my-plugin@your-marketplace`. Claude Code menunjukkan perintah dan URL arsip, dan mengunduh zip setelah Anda menerima.
583
584Sebelum v2.1.238, Claude Code mengunduh arsip entri tanpa `headers` atau `headersHelper`-nya, jadi instalasi yang bergantung pada mereka gagal dengan `HTTP 401 while downloading plugin archive from`, diikuti oleh URL, dengan kode status registry di tempat 401.
585
586<h4 id="write-the-headershelper-command">
587 Write the headersHelper command
588</h4>
589
590Baik Anda mengatur `headersHelper` pada sumber `url` marketplace atau pada entri plugin, tulis perintah untuk memenuhi persyaratan ini:
591
592* **Command text**: paling banyak 500 karakter ASCII yang dapat dicetak, tanpa run empat atau lebih spasi.
593* **Output**: cetak satu objek JSON dari nama header dan nilai string di stdout, kemudian keluar 0 dalam 10 detik.
594* **Shell dan working directory**: Claude Code menjalankan perintah melalui `sh`, atau `cmd.exe` di Windows, dari direktori konfigurasi, `~/.claude` atau [`CLAUDE_CONFIG_DIR`](/docs/id/env-vars#variables). Berikan jalur absolut atau perintah di `PATH`, karena jalur relatif diselesaikan terhadap direktori itu, bukan proyek pengguna.
595* **Variables Claude Code removes**: dari lingkungan perintah yang diatur dalam entri `marketplace.json` atau dalam `.claude/settings.json` atau `.claude/settings.local.json` proyek, Claude Code menghapus setiap variabel yang namanya berisi kata seperti `TOKEN`, `SECRET`, `KEY`, atau `AUTH`, termasuk `ANTHROPIC_API_KEY`. Claude Code tidak menerapkan penghapusan ini pada perintah yang diatur dalam pengaturan pengguna, file `--settings`, atau pengaturan yang dikelola.
596* **Variables Claude Code sets**: `CLAUDE_CODE_MARKETPLACE_URL` dan `CLAUDE_CODE_MARKETPLACE_NAME` untuk perintah sumber `url`, dan `CLAUDE_CODE_PLUGIN_NAME` dan `CLAUDE_CODE_PLUGIN_ARCHIVE_URL` untuk perintah entri. `CLAUDE_CODE_MARKETPLACE_NAME` tidak diatur pada pengambilan pertama setelah pengguna menambahkan marketplace berdasarkan URL, karena pengambilan itu adalah apa yang menyediakan nama.
597
598Perintah yang mencetak token bearer mencetak objek seperti ini:
599
600```json theme={null}
601{"Authorization": "Bearer eyJhbGciOiJSUzI1NiJ9"}
602```
603
604<h4 id="when-claude-code-skips-a-headershelper-command-or-drops-its-output">
605 When Claude Code skips a headersHelper command or drops its output
606</h4>
607
608Claude Code tidak menjalankan perintah `headersHelper`, atau menjatuhkan header yang berasal dari `headers` atau dari output perintah, dalam situasi ini:
609
610* **Command fails**: jika perintah keluar non-zero, berjalan melampaui 10 detik, atau mencetak apa pun selain objek JSON dari nilai string, Claude Code tidak membuat pengambilan atau unduhan yang menjalankan perintah untuk.
611* **Marketplace URL doesn't start with `https://`**: Claude Code tidak menjalankan perintah sumber `url` itu dan mengirim hanya header yang tercantum di field `headers`-nya.
612* **Redirect leaves the origin**: ketika unduhan dialihkan dari origin URL arsip, Claude Code menjatuhkan nilai `headers` dan output perintah dari sumber `url` marketplace dan entri plugin.
613* **Entry sets a routing or identity header**: Claude Code menjatuhkan nama perutean permintaan dan identitas klien seperti `Host`, `Cookie`, dan `X-Forwarded-*` dari `headers` entri dan output perintah, dan menyimpan nama autentikasi seperti `Authorization`. Claude Code memfilter setiap entri `marketplace.json` dengan cara ini, dan entri [inline settings](/docs/id/settings-reference#extraknownmarketplaces) tergantung file mana yang mendeklarasikannya.
614* **Command set in an `--add-dir` directory's settings**: Claude Code mengabaikannya, pada sumber `url` dan pada [entri plugin inline](/docs/id/settings-reference#extraknownmarketplaces) sama-sama, dan mengirim hanya `headers` file itu.
615* **Managed settings block the command**: mengatur [`disableCommandPluginSources`](/docs/id/settings-reference#disablecommandpluginsources) ke `true` memblokir perintah `headersHelper`, dan [`allowManagedHooksOnly`](/docs/id/settings-reference#allowmanagedhooksonly) juga memblokir mereka kecuali `disableCommandPluginSources` secara eksplisit `false`. Di bawah blok mana pun, Claude Code masih menjalankan perintah untuk marketplace yang pengaturan yang dikelola sendiri deklarasikan.
616
617<h4 id="how-users-accept-a-headershelper-command">
618 How users accept a headersHelper command
619</h4>
620
621Pengguna menerima perintah entri plugin setiap kali mereka memasang atau memperbarui plugin itu saja, dari tampilan plugin sendiri di `/plugin` atau dengan `claude plugin install` atau `claude plugin update`. Claude Code menunjukkan perintah dan URL arsip, dan menjalankan perintah hanya setelah pengguna menerima.
622
623Dalam shell non-interaktif, teruskan [`--yes`](/docs/id/plugins-reference#plugin-install) untuk menerimanya. Untuk menerima hanya perintah yang run `--json` sebelumnya ditampilkan, teruskan [`--accept-command`](/docs/id/plugins-reference#plugin-install) dengan `sha256` yang dilaporkan run.
624
625Claude Code menjalankan hanya perintah yang ditunjukkan, untuk URL arsip yang ditunjukkan. Jika perintah entri atau URL arsip berubah di antara, Claude Code menolak instalasi atau pembaruan. Perubahan dalam string kueri saja tidak dihitung.
626
627<h5 id="installs-and-updates-that-refuse-the-command-instead-of-asking">
628 Installs and updates that refuse the command instead of asking
629</h5>
630
631Pada operasi apa pun selain instalasi atau pembaruan plugin tunggal, Claude Code tidak menjalankan perintah entri atau mengunduh arsipnya, jadi plugin tetap pada versi yang dipasang atau tetap tidak dipasang. Apa yang dilihat pengguna tergantung pada operasi:
632
633* **Installing several plugins at once, from a plugin suggestion, or as another plugin's dependency**: Claude Code menolak plugin yang memiliki perintah dan menunjukkan pengguna pada tampilan plugin itu sendiri di `/plugin`. Plugin lain dalam instalasi massal masih memasang. Plugin yang bergantung pada plugin yang ditolak gagal memasang sampai pengguna memasang plugin yang ditolak itu sendiri.
634* **Background auto-update, or session start for a plugin whose archive was never downloaded**: Claude Code mencantumkan plugin di tab `/plugin` Errors sehingga pengguna tahu untuk memasang atau memperbarui itu dengan tangan. Pembaruan otomatis yang menemukan entri masih mengiklankan versi yang dipasang mencantumkan tidak ada.
635
636<h5 id="when-a-marketplace-url-source’s-command-runs">
637 When a marketplace `url` source's command runs
638</h5>
639
640`headersHelper` sumber `url` marketplace dideklarasikan dalam file pengaturan, seperti entri [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces), daripada dalam katalog yang dipublikasikan marketplace, jadi Claude Code tidak meminta pengguna untuk menerimanya pada setiap instalasi atau pembaruan. File pengaturan yang mendeklarasikannya menentukan kapan Claude Code menjalankannya:
641
642| File pengaturan | Kapan Claude Code menjalankan perintah |
643| :------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
644| Pengaturan pengguna, file `--settings`, atau file pengaturan yang dikelola pada mesin | Tanpa bertanya, termasuk selama penyegaran marketplace latar belakang |
645| `.claude/settings.json` atau `.claude/settings.local.json` proyek | Hanya setelah pengguna menerima [dialog kepercayaan workspace](/docs/id/permissions#what-runs-before-you-trust-a-folder) untuk folder itu sendiri. Sesi `-p` atau SDK tidak dihitung sebagai menerimanya, dan juga tidak kepercayaan yang diberikan ke folder induk |
646| Pengaturan yang dikelola server | Hanya setelah pengguna menyetujui pengaturan yang dikirimkan dalam [dialog persetujuan keamanan](/docs/id/server-managed-settings#security-approval-dialogs) |
647
648Dalam sesi `-p` atau SDK, Claude Code tidak dapat menunjukkan dialog persetujuan keamanan. Ini menerapkan pengaturan yang dikirimkan lainnya, tetapi pengambilan marketplace, dan unduhan arsip apa pun yang memerlukan perintah, gagal sampai pengguna telah menyetujui dalam sesi interaktif.
649
650Untuk [entri plugin inline](/docs/id/settings-reference#extraknownmarketplaces) dalam salah satu file ini, Claude Code memerlukan kepercayaan folder atau persetujuan pengaturan yang sama seperti untuk perintah tingkat marketplace dalam file itu, dan pengguna juga menerima perintah entri pada setiap instalasi atau pembaruan.
651
652<h3 id="command-sources">
653 Command sources
654</h3>
655
656Gunakan `command` ketika alat yang dipasang secara lokal menghasilkan direktori plugin, seperti IDE yang merender plugin untuk toolchain yang saat ini dipilih. Claude Code menjalankan perintah ketika pengguna memasang plugin dan menjalankannya kembali di latar belakang sekali per sesi, jadi pengguna Anda mengambil output alat yang berubah tanpa memasang ulang. Memerlukan Claude Code v2.1.229 atau lebih baru. Pada v2.1.120 hingga v2.1.228, memasang plugin gagal dengan `This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again.`, dan pada versi yang lebih lama seluruh marketplace gagal dimuat.
657
658Entri ini memasang plugin dari direktori apa pun yang dicetak alat:
659
660```json theme={null}
661{
662 "name": "my-plugin",
663 "source": {
664 "source": "command",
665 "command": "my-tool claude-plugin-path"
666 }
667}
668```
669
670Claude Code menjalankan perintah melalui shell platform, `sh` di macOS dan Linux atau `cmd.exe` di Windows, dari direktori home pengguna. Perintah harus mencetak tepat satu baris di stdout dan keluar dengan kode 0. Baris itu adalah jalur absolut dari direktori yang berisi plugin lengkap pada saat perintah keluar, dan jalur dapat berubah antara run.
671
672Claude Code menghentikan perintah yang berjalan lebih lama dari `timeout` detik, dan instalasi atau pembaruan gagal. Claude Code juga menolak jalur yang dicetak dalam kasus ini, dan instalasi atau pembaruan gagal dengan cara yang sama:
673
674* Direktori tidak memiliki konten plugin di tingkat atasnya, seperti direktori `.claude-plugin/` atau direktori `skills/`, `commands/`, `agents/`, atau `hooks/`
675* Direktori adalah yang Claude Code dimulai, atau salah satu induknya
676* Di Windows, jalur adalah jalur UNC
677
678Sumber perintah menerima field ini:
679
680| Field | Type | Deskripsi |
681| :-------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
682| `command` | string | Diperlukan. Perintah shell yang mencetak jalur absolut direktori plugin sebagai baris tunggal di stdout dan keluar 0. Harus ASCII yang dapat dicetak, paling banyak 500 karakter, tanpa run empat atau lebih spasi, sehingga pengguna dapat meninjau seluruh perintah yang mereka diminta untuk menerima |
683| `timeout` | number | Opsional. Jumlah detik keseluruhan untuk menunggu perintah sebelum menyerah (default: 60, maksimum: 600) |
684| `mode` | string | Opsional. `"copy"` (default) menyalin direktori yang dicetak ke cache plugin. `"link"` menggunakan direktori yang dicetak di tempat. Lihat [Copy mode and link mode](#copy-mode-and-link-mode) |
685
686<h4 id="copy-mode-and-link-mode">
687 Copy mode and link mode
688</h4>
689
690Dengan default `"mode": "copy"`, Claude Code menyalin direktori yang dicetak ke cache plugin yang tersimpan dan menurunkan [versi plugin](/docs/id/plugins-reference#version-management) dari hash konten direktori. Alat Anda dapat menghapus atau menulis ulang direktori setelah perintah keluar, dan re-run yang menghasilkan konten identik dihitung sebagai terkini. Claude Code menolak untuk memasang direktori yang lebih besar dari 256 MiB atau berisi lebih dari 20.000 entri.
691
692Atur `"mode": "link"` untuk direktori plugin besar yang tidak boleh disalin, seperti ekspor SDK yang dirender. Claude Code mengisi entri cache plugin dengan link ke setiap entri tingkat atas dari direktori yang dicetak dan menggunakan file di tempat, jadi tidak ada yang disalin, konten file tidak di-hash, dan batas ukuran tidak berlaku. Instalasi gagal jika entri tingkat atas adalah symlink yang menunjuk di luar direktori yang dicetak. Claude Code juga melewati [instalasi dependensi paket Node.js](/docs/id/plugins-reference#node-js-package-dependencies) untuk plugin mode link, jadi cetak direktori yang sudah berisi `node_modules` apa pun yang dibutuhkan plugin.
693
694Simpan direktori yang dicetak di tempat selama plugin tetap dipasang, karena Claude Code memuat plugin melalui link itu di setiap startup. Claude Code menurunkan [versi plugin](/docs/id/plugins-reference#version-management) dari jalur nyata direktori yang dicetak dan entri tingkat atasnya, bukan file di dalamnya, jadi cetak jalur berbeda untuk menandakan konten baru. Dalam sesi yang dimulai di direktori yang dicetak atau di mana pun di bawahnya, Claude Code tidak memuat plugin sama sekali.
695
696Claude Code tidak mendukung mode link di Windows dan menolak untuk memasang plugin mode link di sana. Deklarasikan `"mode": "copy"` sebagai gantinya.
697
698<h4 id="how-users-accept-the-command">
699 How users accept the command
700</h4>
701
702Claude Code menjalankan perintah Anda di mesin pengguna, jadi mengikat setiap run ke penerimaan eksplisit pengguna:
703
704* Ketika pengguna memasang plugin dari layar detailnya di `/plugin`, atau memasang atau memperbarui dengan `claude plugin install` atau `claude plugin update` di terminal interaktif, Claude Code menunjukkan string perintah yang tepat terlebih dahulu dan mencatat perintah yang diterima untuk instalasi itu. `claude plugin update` yang dapat dilanjutkan pada penerimaan perintah yang sama menunjukkan tidak ada.
705* Dalam shell non-interaktif, seperti skrip provisioning, teruskan `--yes` ke `claude plugin install` atau `claude plugin update` untuk menerima perintah yang dicetak. Untuk menerima hanya perintah yang run `--json` sebelumnya ditampilkan, teruskan [`--accept-command`](/docs/id/plugins-reference#plugin-install) dengan `sha256` yang dilaporkan run.
706* Setiap jalur lain menjalankan hanya perintah yang sudah diterima pengguna. Ini termasuk pembaruan yang dimulai dari `/plugin` dan run latar belakang yang dijelaskan dalam [When Claude Code re-runs the command](#when-claude-code-re-runs-the-command). Ketika tidak ada yang diterima, Claude Code menolak untuk menjalankan perintah dan memberi tahu pengguna cara meninjau. Claude Code tidak pernah memasang plugin bersumber perintah sebagai dependensi plugin lain, jadi pengguna memasangnya sendiri terlebih dahulu.
707* Jika Anda mengubah `command` entri, atau beralih `mode`-nya, pengguna menyimpan versi yang sudah mereka miliki dan Claude Code berhenti menjalankan perintah kembali. Dalam sesi interaktif, tab `/plugin` Errors menunjukkan perintah baru sampai pengguna meninjau dan menerimanya dengan menjalankan `claude plugin update <plugin>@<marketplace>`.
708
709Administrator dapat memblokir sumber perintah di seluruh organisasi dengan pengaturan yang dikelola [`disableCommandPluginSources`](/docs/id/settings-reference#disablecommandpluginsources). Jika organisasi mengatur [`allowManagedHooksOnly`](/docs/id/settings-reference#allowmanagedhooksonly), Claude Code memblokir sumber perintah secara default.
710
711<h4 id="when-claude-code-re-runs-the-command">
712 When Claude Code re-runs the command
713</h4>
714
715Direktori yang dicetak mencerminkan keadaan alat pada saat perintah berjalan, jadi Claude Code menjalankan perintah lagi pada waktu ini:
716
717* Setiap kali pengguna memasang atau memperbarui plugin
718* Sekali per sesi untuk setiap plugin bersumber perintah yang diaktifkan, di latar belakang, segera setelah sesi dimulai. Run ini tidak melalui pembaruan marketplace otomatis, jadi tidak bergantung pada [pengaturan pembaruan otomatis](/docs/id/discover-plugins#configure-auto-updates) marketplace
719* Pada startup atau di `/reload-plugins`, ketika versi yang dipasang plugin yang diaktifkan hilang dari cache plugin
720
721Claude Code melewati dua run latar belakang ketika pengguna mengatur [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/id/env-vars). Instalasi dan pembaruan eksplisit masih menjalankan perintah dengan variabel itu diatur.
722
723Ketika output yang di-hash perintah telah berubah, Claude Code memasang hasilnya sebagai versi baru dan memuat ulang dalam sesi interaktif yang berjalan, beralih [komponen yang sama yang `/reload-plugins` beralih](/docs/id/plugins-reference#environment-variables). Pengguna melihat notifikasi bahwa plugin dimuat ulang. Jika memuat ulang di tempat akan membatalkan cache prompt sesi, Claude Code malah meminta pengguna untuk menjalankan `/reload-plugins`, yang [memperingatkan tentang biaya cache dan menerapkan ketika dijalankan kembali dengan `--force`](/docs/id/prompt-caching#enabling-or-disabling-a-plugin).
724
725<h3 id="advanced-plugin-entries">
726 Entri plugin lanjutan
727</h3>
728
729Contoh ini menunjukkan entri plugin menggunakan banyak field opsional, termasuk jalur kustom untuk commands, agents, hooks, dan MCP servers:
730
731```json theme={null}
732{
733 "name": "enterprise-tools",
734 "source": {
735 "source": "github",
736 "repo": "company/enterprise-plugin"
737 },
738 "description": "Enterprise workflow automation tools",
739 "version": "2.1.0",
740 "author": {
741 "name": "Enterprise Team",
742 "email": "enterprise@example.com"
743 },
744 "homepage": "https://docs.example.com/plugins/enterprise-tools",
745 "repository": "https://github.com/company/enterprise-plugin",
746 "license": "MIT",
747 "keywords": ["enterprise", "workflow", "automation"],
748 "category": "productivity",
749 "commands": [
750 "./commands/core/",
751 "./commands/enterprise/",
752 "./commands/experimental/preview.md"
753 ],
754 "agents": ["./agents/security-reviewer.md", "./agents/compliance-checker.md"],
755 "hooks": {
756 "PostToolUse": [
757 {
758 "matcher": "Write|Edit",
759 "hooks": [
760 {
761 "type": "command",
762 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
763 }
764 ]
765 }
766 ]
767 },
768 "mcpServers": {
769 "enterprise-db": {
770 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
771 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]
772 }
773 },
774 "strict": false
775}
776```
777
778Hal-hal penting untuk diperhatikan:
779
780* **`commands` dan `agents`**: Anda dapat menentukan beberapa direktori atau file individual. Jalur relatif terhadap root plugin dan harus tetap di dalamnya.
781 * Claude Code menolak jalur yang diselesaikan di luar direktori plugin, seperti `./../shared.md`, dengan error [`path escapes plugin directory`](/docs/id/errors#path-escapes-plugin-directory), dan masih memuat plugin tanpa komponen itu
782* **`${CLAUDE_PLUGIN_ROOT}`**: gunakan variabel ini dalam perintah hook dan config MCP server untuk mereferensikan file dalam direktori instalasi plugin.
783 * Lihat [tabel substitusi](/docs/id/plugins-reference#environment-variables) untuk field config mana yang mensubstitusinya per tipe server
784 * Untuk dependensi atau state yang harus bertahan pembaruan plugin, gunakan [`${CLAUDE_PLUGIN_DATA}`](/docs/id/plugins-reference#persistent-data-directory) sebagai gantinya
785* **`strict: false`**: Karena ini diatur ke false, plugin tidak memerlukan `plugin.json` sendiri. Entri marketplace mendefinisikan semuanya. Lihat [Strict mode](#strict-mode) di bawah.
786
787Secara default, skills plugin dimuat dari direktori `skills/` di bawah `source`-nya. Jalur yang tercantum dalam field `skills` menambah pemindaian itu:
788
789```json theme={null}
790"skills": ["./skills/", "./extra-skills/"]
791```
792
793Ketika beberapa entri plugin berbagi satu folder `skills/` di root marketplace (`source: "./"`), cantumkan subdirektori spesifik sebagai gantinya sehingga setiap entri hanya memuat skills-nya sendiri:
794
795```json theme={null}
796"source": "./",
797"skills": ["./skills/code-review", "./skills/docs"]
798```
799
800Dengan sumber root marketplace, jalur yang tercantum adalah set lengkap untuk entri itu, dan direktori lain di folder `skills/` bersama tidak dimuat. Mencantumkan `./skills/` itu sendiri, atau root plugin, menjaga pemindaian penuh. Jika tidak ada jalur yang tercantum ada, pemindaian default berjalan sebagai gantinya.
801
802<h3 id="strict-mode">
803 Strict mode
804</h3>
805
806Field `strict` mengontrol apakah `plugin.json` adalah otoritas untuk definisi komponen (skills, agents, hooks, MCP servers, output styles).
807
808| Value | Perilaku |
809| :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ |
810| `true` (default) | `plugin.json` adalah otoritas. Entri marketplace dapat melengkapinya dengan komponen tambahan, dan kedua sumber digabungkan. |
811| `false` | Entri marketplace adalah definisi lengkap. Jika plugin juga memiliki `plugin.json` yang mendeklarasikan komponen, itu adalah konflik dan plugin gagal dimuat. |
812
813**Kapan menggunakan setiap mode:**
814
815* **`strict: true`**: plugin memiliki `plugin.json` sendiri dan mengelola komponennya sendiri. Entri marketplace dapat menambahkan skills atau hooks tambahan di atas. Ini adalah default dan berfungsi untuk sebagian besar plugin.
816* **`strict: false`**: operator marketplace menginginkan kontrol penuh. Repo plugin menyediakan file mentah, dan entri marketplace mendefinisikan file mana yang diekspos sebagai skills, agents, hooks, dll. Berguna ketika marketplace merestruktur atau mengkurasi komponen plugin secara berbeda dari yang dimaksudkan penulis plugin.
817
818<h2 id="host-and-distribute-marketplaces">
819 Host dan distribusikan marketplace
820</h2>
821
822Ketika pengguna menambahkan marketplace yang dihosting di repositori git, atau memasang plugin berbasis git yang tercantum, Claude Code mengklon repositori marketplace atau plugin itu ke mesin mereka. Klon tidak pernah mengunduh konten [Git LFS](https://git-lfs.com), jadi file yang dilacak LFS tiba sebagai file pointer. Jaga file yang dibutuhkan plugin Anda keluar dari LFS.
823
824<h3 id="host-on-github-recommended">
825 Host di GitHub (direkomendasikan)
826</h3>
827
828GitHub adalah cara yang direkomendasikan untuk host dan distribusikan marketplace:
829
8301. **Buat repositori**: siapkan repositori baru untuk marketplace Anda
8312. **Tambahkan file marketplace**: buat `.claude-plugin/marketplace.json` dengan definisi plugin Anda
8323. **Bagikan dengan tim**: pengguna menambahkan marketplace Anda dengan `/plugin marketplace add owner/repo`
833
834**Manfaat**: kontrol versi bawaan, pelacakan masalah, dan fitur kolaborasi tim.
835
836<h3 id="host-on-other-git-services">
837 Host di layanan git lainnya
838</h3>
839
840Layanan hosting git apa pun berfungsi, seperti GitLab, Bitbucket, dan server yang dihosting sendiri. Pengguna menambahkan dengan URL repositori lengkap:
841
842```shell theme={null}
843/plugin marketplace add https://gitlab.com/company/plugins.git
844```
845
846<h3 id="private-repositories">
847 Repositori pribadi
848</h3>
849
850Claude Code mendukung pemasangan plugin dari repositori pribadi. Jika Anda mendistribusikan marketplace Anda melalui [**Organization settings > Plugins**](https://claude.ai/admin-settings/plugins) sebagai gantinya, kredensial git Anda tidak terlibat: sinkronisasi organisasi membaca repositori marketplace melalui koneksi GitHub atau GitLab organisasi Anda di claude.ai. Lihat [Distribusikan melalui pengaturan organisasi](#distribute-through-organization-settings) untuk sumber plugin mana yang dapat bersifat pribadi.
851
852<h4 id="commands-you-run">
853 Perintah yang Anda jalankan
854</h4>
855
856Ketika Anda menjalankan `/plugin marketplace add`, `/plugin install`, `/plugin update`, atau `/plugin marketplace update`, Claude Code menggunakan helper kredensial git yang ada, jadi akses HTTPS melalui `gh auth login`, Keychain macOS, atau `git-credential-store` berfungsi sama seperti di terminal Anda. Akses SSH berfungsi selama host sudah ada di file `known_hosts` Anda dan kunci dimuat di `ssh-agent`, karena Claude Code menekan prompt SSH interaktif untuk sidik jari host dan passphrase kunci. Shorthand `owner/repo` GitHub mengklon melalui SSH secara default; atur [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/id/env-vars#variables) untuk mengklonnya melalui HTTPS sebagai gantinya.
857
858<h4 id="background-auto-updates">
859 Pembaruan otomatis latar belakang
860</h4>
861
862Pemeriksaan refresh latar belakang memeriksa remote marketplace untuk commit baru dengan helper kredensial git yang dikonfigurasi, sama seperti perintah yang Anda jalankan. Untuk remote SSH, kunci yang dimuat di `ssh-agent` mengautentikasi pemeriksaan. Claude Code menjalankan pemeriksaan secara non-interaktif: ia mematikan prompt terminal git dan program askpass, dan memberitahu helper kredensial untuk tidak meminta. Apakah pemeriksaan dapat mengautentikasi ke repositori pribadi melalui HTTPS tergantung pada helper Anda:
863
864* Helper yang dapat menyediakan kredensial yang disimpan tanpa meminta mengautentikasi pemeriksaan. Git Credential Manager, helper Keychain macOS, dan `git-credential-store` bekerja dengan cara ini setelah mereka menyimpan kredensial untuk host.
865* Helper yang perlu meminta Anda tidak dapat menjawab di latar belakang. Pembaruan gagal diam-diam dan checkout yang ada tetap di tempat, jadi plugin Anda terus bekerja dari status terakhir yang disinkronkan. Jalankan `/plugin marketplace update <name>` untuk menyegarkan marketplace dengan kredensial Anda.
866
867Ketika pemeriksaan menemukan checkout up to date, Claude Code meninggalkannya apa adanya. Ketika pemeriksaan menemukan commit baru, atau gagal karena tidak dapat menjangkau atau mengautentikasi ke remote, Claude Code mengklon marketplace lagi dan menukar klon baru. Jika klon itu gagal, checkout yang ada tetap di tempat. Pengklonaan ulang dapat [time out pada repositori besar](#git-operations-time-out).
868
869Dua pengaturan membuat marketplace pribadi berperilaku dapat diprediksi:
870
871* Atur `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1` untuk menyimpan checkout yang ada tanpa mencoba pengklonaan ulang ketika pemeriksaan latar belakang tidak dapat menjangkau atau mengautentikasi ke remote. Plugin Anda terus bekerja dari status terakhir yang disinkronkan, dan pembaruan manual dengan `/plugin marketplace update` masih mengautentikasi dengan kredensial Anda.
872* Konfigurasikan helper kredensial git, misalnya dengan `gh auth setup-git` untuk GitHub, sehingga pemeriksaan latar belakang dan pengklonaan ulang dapat mengautentikasi tanpa meminta.
873
874Menetapkan token penyedia seperti `GITHUB_TOKEN` di lingkungan Anda tidak dengan sendirinya mengaktifkan autentikasi latar belakang. Token hanya berlaku melalui helper kredensial yang dikonfigurasi, misalnya helper CLI `gh`, yang membaca `GH_TOKEN` dan `GITHUB_TOKEN`.
875
876<Note>
877 Dalam lingkungan CI/CD, konfigurasikan helper kredensial git sebelum memasang plugin dari repositori pribadi. Di GitHub Actions, ekspor token dengan akses read ke repositori marketplace sebagai `GH_TOKEN`, kemudian jalankan `gh auth setup-git`. Token workflow default hanya dapat mengakses repositori workflow itu sendiri, jadi marketplace pribadi di repositori lain memerlukan token akses pribadi atau token aplikasi.
878</Note>
879
880<h3 id="distribute-through-organization-settings">
881 Distribusikan melalui pengaturan organisasi
882</h3>
883
884Jika Anda mendistribusikan plugin melalui [**Organization settings > Plugins**](https://claude.ai/admin-settings/plugins) pada paket Team atau Enterprise, aturan sumber ini berlaku:
885
886* Di github.com dan gitlab.com, repositori marketplace harus bersifat pribadi atau internal. Sinkronisasi organisasi membaca repositori melalui koneksi yang cocok dengan hostnya:
887 * **github.com**: Claude GitHub App
888 * **Host GitHub Enterprise Server Anda**: [GitHub Enterprise App](/docs/id/github-enterprise-server#admin-setup) organisasi Anda
889 * **gitlab.com atau instance GitLab yang dikelola sendiri Anda**: token akses dalam [konfigurasi GitLab](#sync-a-gitlab-hosted-marketplace) organisasi Anda untuk host itu
890* Setiap sumber plugin harus bertipe `github`, `url`, atau `git-subdir`, atau [jalur relatif](#relative-paths) yang dimulai dengan `./`. Jika Anda membuat daftar plugin berdasarkan nama kosong di bawah `metadata.pluginRoot`, sinkronisasi organisasi menolaknya sebagai sumber yang tidak didukung, jadi tuliskan jalurnya, seperti `./plugins/deploy-tools`.
891* Sumber plugin dapat bersifat pribadi dalam tiga kasus:
892 * Sumber github.com yang berbagi pemilik repositori marketplace
893 * Sumber di host GitHub Enterprise organisasi Anda dengan GHE App yang dipasang di repositori
894 * Sumber `url` atau `git-subdir` di host GitLab yang sama dengan repositori marketplace. Di gitlab.com, sumber juga harus berada di bawah grup tingkat atas atau namespace pengguna yang sama dengan repositori marketplace.
895* Sumber plugin lainnya harus berupa repositori publik di github.com, gitlab.com, atau bitbucket.org, yang diambil sinkronisasi organisasi tanpa kredensial. Sinkronisasi organisasi menolak sumber plugin di host yang tidak dicakup aturan ini.
896
897Lihat [Manage plugins for your organization](https://support.claude.com/en/articles/13837433) untuk alur kerja admin.
898
899Untuk menyertakan plugin pribadi, tempatkan folder plugin di dalam repositori marketplace dan referensikan dengan [jalur relatif](#relative-paths). Sinkronisasi organisasi mengemas setiap plugin selama distribusi, jadi pengguna tidak pernah memerlukan akses ke repositori sumber terpisah.
900
901Misalnya, entri plugin `marketplace.json` ini mereferensikan plugin yang Anda komit di `plugins/deploy-tools` dalam repositori marketplace:
902
903```json theme={null}
904{
905 "name": "deploy-tools",
906 "source": "./plugins/deploy-tools"
907}
908```
909
910<h4 id="sync-a-gitlab-hosted-marketplace">
911 Sinkronkan marketplace yang dihosting GitLab
912</h4>
913
914Untuk menyinkronkan marketplace dari gitlab.com atau instance GitLab yang dikelola sendiri, [Owner](/docs/id/server-managed-settings#access-control) terlebih dahulu menambahkan konfigurasi GitLab untuk host itu di [**Organization settings > Claude Code**](https://claude.ai/admin-settings/claude-code). Konfigurasi GitLab dalam beta publik dan hanya berlaku untuk sinkronisasi marketplace plugin. Menambahkan satu tidak membuat repositori GitLab tersedia di [Claude Code di web](/docs/id/claude-code-on-the-web#limitations). Lihat [Manage plugins for your organization](https://support.claude.com/en/articles/13837433) untuk langkah-langkah setup.
915
916Ketika Anda menambahkan marketplace, masukkan URL HTTPS proyek, seperti `https://gitlab.example.com/platform/claude-plugins`. Proyek dalam subgrup bersarang berfungsi. Sinkronisasi organisasi membaca cabang default proyek. Jika Anda mengaktifkan **Sync automatically**, hanya push ke cabang default yang memulai sinkronisasi.
917
918<h4 id="keep-executables-out-of-the-top-level-bin-directory">
919 Jaga executable keluar dari direktori bin tingkat atas
920</h4>
921
922Jangan sertakan direktori `bin/` tingkat atas dalam plugin apa pun yang Anda distribusikan melalui pengaturan organisasi. claude.ai menolak plugin yang memilikinya, baik plugin tiba melalui sinkronisasi marketplace atau unggahan langsung:
923
924* **Sinkronisasi marketplace**: sinkronisasi organisasi menolak plugin itu dan menyinkronkan sisa marketplace. Pesan kesalahan dimulai dengan `Plugin contains a top-level bin/ directory`.
925* **Unggahan langsung**: jika Anda mengunggah plugin di [**Organization settings > Plugins**](https://claude.ai/admin-settings/plugins) sebagai gantinya, claude.ai menolak unggahan dengan pesan yang sama.
926
927Jaga executable di direktori lain, seperti `scripts/`, dan referensikan sebagai `${CLAUDE_PLUGIN_ROOT}/scripts/<name>` dari [skills, hooks, atau konfigurasi server MCP](/docs/id/plugins-reference#environment-variables) Anda.
928
929<h3 id="require-marketplaces-for-your-team">
930 Wajibkan marketplace untuk tim Anda
931</h3>
932
933Anda dapat mengonfigurasi repositori Anda sehingga Claude Code menambahkan marketplace Anda untuk anggota tim sekali mereka [mempercayai folder proyek](/docs/id/permissions#what-runs-before-you-trust-a-folder), tanpa prompt terpisah. Tambahkan marketplace Anda ke `.claude/settings.json`:
934
935```json theme={null}
936{
937 "extraKnownMarketplaces": {
938 "company-tools": {
939 "source": {
940 "source": "github",
941 "repo": "your-org/claude-plugins"
942 }
943 }
944 }
945}
946```
947
948Anda juga dapat menentukan plugin mana yang harus diaktifkan secara default:
949
950```json theme={null}
951{
952 "enabledPlugins": {
953 "code-formatter@company-tools": true,
954 "deployment-tools@company-tools": true
955 }
956}
957```
958
959Untuk opsi konfigurasi lengkap, lihat [Plugin settings](/docs/id/settings-reference#plugin-settings).
960
961<Note>
962 Jika Anda menggunakan sumber `directory` atau `file` lokal dengan jalur relatif, jalur diselesaikan terhadap checkout utama repositori Anda. Ketika Anda menjalankan Claude Code dari git worktree, jalur masih menunjuk ke checkout utama, jadi semua worktrees berbagi lokasi marketplace yang sama. Status marketplace disimpan sekali per pengguna di `~/.claude/plugins/known_marketplaces.json`, bukan per proyek.
963</Note>
964
965<h3 id="pre-populate-plugins-for-containers">
966 Pra-isi plugin untuk container
967</h3>
968
969Untuk image container dan lingkungan CI, Anda dapat pra-isi direktori plugin saat waktu build sehingga Claude Code dimulai dengan marketplace dan plugin yang sudah tersedia, tanpa mengklon apa pun saat runtime. Atur variabel lingkungan `CLAUDE_CODE_PLUGIN_SEED_DIR` untuk menunjuk ke direktori ini.
970
971Untuk melapisi beberapa direktori seed, pisahkan jalur dengan `:` di Unix atau `;` di Windows. Claude Code mencari setiap direktori secara berurutan dan menggunakan seed pertama yang berisi marketplace atau cache plugin yang diberikan.
972
973Direktori seed mencerminkan struktur `~/.claude/plugins`:
974
975```
976$CLAUDE_CODE_PLUGIN_SEED_DIR/
977 known_marketplaces.json
978 marketplaces/<name>/...
979 cache/<marketplace>/<plugin>/<version>/...
980```
981
982Untuk membangun direktori seed, jalankan Claude Code sekali selama image build, pasang plugin yang Anda butuhkan, kemudian salin direktori `~/.claude/plugins` yang dihasilkan ke image Anda dan tunjukkan `CLAUDE_CODE_PLUGIN_SEED_DIR` ke sana.
983
984Untuk melewati langkah copy, atur `CLAUDE_CODE_PLUGIN_CACHE_DIR` ke jalur target seed Anda selama build sehingga plugin dipasang langsung ke sana:
985
986```bash theme={null}
987CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/plugins
988CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install my-tool@your-plugins
989```
990
991Kemudian atur `CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed` di lingkungan runtime container Anda sehingga Claude Code membaca dari seed saat startup.
992
993Saat startup, Claude Code mendaftarkan marketplace yang ditemukan di `known_marketplaces.json` seed ke dalam konfigurasi utama, dan menggunakan cache plugin yang ditemukan di bawah `cache/` di tempat tanpa mengklon ulang. Ini berfungsi dalam mode interaktif dan mode non-interaktif dengan flag `-p`.
994
995Detail perilaku:
996
997* **Read-only**: Claude Code tidak pernah menulis ke direktori seed.
998* **Auto-updates disabled**: marketplace seed tidak auto-update.
999* **Entri seed mengambil prioritas**: marketplace yang dideklarasikan dalam seed menimpa entri yang cocok apa pun dalam konfigurasi pengguna di setiap startup. Untuk opt out dari plugin seed, gunakan `/plugin disable` daripada menghapus marketplace.
1000* **Resolusi jalur**: Claude Code menemukan konten marketplace dengan menyelidiki `$CLAUDE_CODE_PLUGIN_SEED_DIR/marketplaces/<name>/` saat runtime, bukan dengan mempercayai jalur yang disimpan di dalam JSON seed. Ini berarti seed berfungsi dengan benar bahkan ketika dipasang di jalur berbeda dari tempat dibangun.
1001* **Mutasi diblokir**: menjalankan `/plugin marketplace remove` atau `/plugin marketplace update` terhadap marketplace yang dikelola seed gagal dengan panduan untuk meminta administrator Anda memperbarui image seed.
1002* **Komposisi dengan pengaturan**: jika `extraKnownMarketplaces` atau `enabledPlugins` mendeklarasikan marketplace yang sudah ada di seed, Claude Code menggunakan salinan seed alih-alih mengklon.
1003
1004<h3 id="managed-marketplace-restrictions">
1005 Pembatasan marketplace yang dikelola
1006</h3>
1007
1008Untuk organisasi yang memerlukan kontrol ketat atas sumber plugin, administrator dapat membatasi marketplace plugin mana yang diizinkan pengguna untuk tambahkan menggunakan pengaturan [`strictKnownMarketplaces`](/docs/id/settings-reference#strictknownmarketplaces) dalam pengaturan yang dikelola. Untuk juga menolak flag CLI yang sideload plugin, agen, dan server MCP untuk satu kali jalankan, pasangkan dengan [`disableSideloadFlags`](/docs/id/settings-reference#disablesideloadflags). Untuk allowlist marketplace mana yang plugin-nya dapat muncul sebagai saran instalasi kontekstual, atur [`pluginSuggestionMarketplaces`](/docs/id/settings-reference#pluginsuggestionmarketplaces).
1009
1010`strictKnownMarketplaces` cocok dengan marketplace tempat plugin berasal, bukan entri di dalamnya, jadi pengguna masih dapat memasang plugin dengan [sumber `command`](#command-sources) dari marketplace yang diizinkan. Untuk memblokir sumber command juga, atur [`disableCommandPluginSources`](/docs/id/settings-reference#disablecommandpluginsources).
1011
1012Ketika `strictKnownMarketplaces` dikonfigurasi dalam pengaturan yang dikelola, perilaku pembatasan tergantung pada nilainya:
1013
1014| Value | Perilaku |
1015| --------------------------- | ------------------------------------------------------------------------------------------- |
1016| Tidak terdefinisi (default) | Tidak ada pembatasan. Pengguna dapat menambahkan marketplace apa pun |
1017| Array kosong `[]` | Lockdown lengkap. Memblokir setiap sumber marketplace, termasuk marketplace Anthropic resmi |
1018| Daftar sumber | Allowlist diterapkan. Pengguna hanya dapat menambahkan marketplace yang cocok dengan entri |
1019
1020<h4 id="common-configurations">
1021 Konfigurasi umum
1022</h4>
1023
1024Nonaktifkan semua penambahan marketplace, termasuk marketplace Anthropic resmi:
1025
1026```json theme={null}
1027{
1028 "strictKnownMarketplaces": []
1029}
1030```
1031
1032Claude Code mengunduh plugin [disinkronkan dari claude.ai](/docs/id/plugins-reference#synced-plugins) dari akun Anda daripada dari marketplace, jadi lockdown ini tidak mencakupnya. Untuk menghentikan yang juga, atur [`syncClaudeAiPlugins`](/docs/id/settings-reference#syncclaudeaiplugins) ke `false` dalam pengaturan yang dikelola, atau matikan Skills untuk organisasi Anda di claude.ai.
1033
1034Izinkan hanya marketplace Anthropic resmi. Pencocokan untuk entri repositori tunggal bersifat tepat, jadi entri ini tidak mencakup varian `ref` atau `path` dari repositori yang sama:
1035
1036```json theme={null}
1037{
1038 "strictKnownMarketplaces": [
1039 {
1040 "source": "github",
1041 "repo": "anthropics/claude-plugins-official"
1042 }
1043 ]
1044}
1045```
1046
1047Dengan entri ini, Claude Code menjaga marketplace resmi yang sudah terdaftar tetap tersedia dan, di mesin baru, mendaftarkan marketplace secara otomatis saat pertama kali Anda memulai Claude Code secara interaktif.
1048
1049Pendaftaran otomatis tidak mencakup setiap mesin. Paling sering melewatkan:
1050
1051* Lingkungan non-interaktif yang berjalan sebelum peluncuran interaktif pertama mesin.
1052* Mesin tempat Claude Code sudah berjalan secara interaktif di bawah kebijakan yang memblokir marketplace, seperti lockdown array kosong. Claude Code mencatat upaya yang diblokir dan tidak mencoba lagi setelah kebijakan berubah.
1053
1054Di mesin ini, tambahkan marketplace ke [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces) dalam `managed-settings.json` yang sama sehingga Claude Code mendaftarkannya secara otomatis, atau jalankan `claude plugin marketplace add anthropics/claude-plugins-official`.
1055
1056Izinkan marketplace tertentu saja:
1057
1058```json theme={null}
1059{
1060 "strictKnownMarketplaces": [
1061 {
1062 "source": "github",
1063 "repo": "acme-corp/approved-plugins"
1064 },
1065 {
1066 "source": "github",
1067 "repo": "acme-corp/security-tools",
1068 "ref": "v2.0"
1069 },
1070 {
1071 "source": "url",
1072 "url": "https://plugins.example.com/marketplace.json"
1073 }
1074 ]
1075}
1076```
1077
1078Izinkan setiap repositori marketplace di bawah organisasi GitHub dengan entri [owner-wildcard](/docs/id/settings-reference#owner-wildcards). Owner wildcards memerlukan Claude Code v2.1.223 atau lebih baru.
1079
1080```json theme={null}
1081{
1082 "strictKnownMarketplaces": [
1083 {
1084 "source": "github",
1085 "repo": "acme-corp/*"
1086 }
1087 ]
1088}
1089```
1090
1091Izinkan semua marketplace dari server git internal menggunakan pencocokan pola regex pada host. Ini adalah pendekatan yang direkomendasikan untuk [GitHub Enterprise Server](/docs/id/github-enterprise-server#plugin-marketplaces-on-ghes) atau instance GitLab yang dihosting sendiri:
1092
1093```json theme={null}
1094{
1095 "strictKnownMarketplaces": [
1096 {
1097 "source": "hostPattern",
1098 "hostPattern": "^github\\.example\\.com$"
1099 }
1100 ]
1101}
1102```
1103
1104Izinkan marketplace berbasis filesystem dari direktori tertentu menggunakan pencocokan pola regex pada jalur:
1105
1106```json theme={null}
1107{
1108 "strictKnownMarketplaces": [
1109 {
1110 "source": "pathPattern",
1111 "pathPattern": "^/opt/approved/"
1112 }
1113 ]
1114}
1115```
1116
1117Gunakan `".*"` sebagai `pathPattern` untuk mengizinkan jalur filesystem apa pun sambil tetap mengontrol sumber jaringan dengan `hostPattern`.
1118
1119<Note>
1120 `strictKnownMarketplaces` membatasi apa yang dapat ditambahkan pengguna, tetapi tidak mendaftarkan marketplace dengan sendirinya. Untuk mendaftarkan marketplace yang diizinkan untuk pengguna secara otomatis, tambahkan ke [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces) dalam `managed-settings.json` yang sama.
1121
1122 Marketplace Anthropic resmi adalah satu-satunya yang Claude Code daftarkan dengan sendirinya, dan hanya ketika allowlist mengizinkannya. Pendaftaran otomatis juga melewatkan beberapa mesin, seperti lingkungan non-interaktif dan mesin tempat kebijakan sebelumnya memblokirnya. Untuk mencakup mesin tersebut, tambahkan marketplace resmi ke `extraKnownMarketplaces` juga. Untuk kedua pengaturan bersama-sama, lihat [referensi `strictKnownMarketplaces`](/docs/id/settings-reference#strictknownmarketplaces).
1123</Note>
1124
1125<h4 id="how-restrictions-work">
1126 Cara pembatasan bekerja
1127</h4>
1128
1129Pembatasan diperiksa sebelum operasi jaringan atau filesystem apa pun. Pemeriksaan berjalan pada marketplace add dan pada plugin install, update, refresh, dan auto-update. Jika marketplace ditambahkan sebelum kebijakan dikonfigurasi dan sumbernya tidak lagi cocok dengan daftar izin, Claude Code menolak untuk memasang atau memperbarui plugin darinya. Penegakan yang sama berlaku untuk `blockedMarketplaces`.
1130
1131Tempat kedua daftar diterapkan tergantung pada tempat Anda menetapkannya:
1132
1133* **Konsol admin claude.ai**: Claude Code menerapkan kedua daftar dalam sesi yang [membaca pengaturan yang dikelola server](/docs/id/managed-settings#where-and-when-a-policy-applies). claude.ai juga memeriksanya ketika siapa pun dalam organisasi Anda menambahkan marketplace baru dari repositori git di claude.ai, atau dari **Customize** di aplikasi Claude Desktop di luar tab Code-nya. Itu mencakup marketplace yang ditambahkan anggota untuk akun mereka sendiri dan yang ditambahkan untuk seluruh organisasi di bawah [**Organization settings > Plugins**](https://claude.ai/admin-settings/plugins). claude.ai menolak repositori yang tidak diakui allowlist atau yang dinamai blocklist. Itu tidak memeriksa ulang marketplace yang ditambahkan di salah satu tempat sebelum Anda menetapkan daftar, dan itu tidak memeriksa plugin yang diunggah.
1134* **File pengaturan yang dikelola, kebijakan tingkat OS, atau sumber yang dikelola lainnya**: Claude Code menerapkan kedua daftar tempat itu membaca sumber itu. claude.ai tidak membacanya.
1135
1136Untuk memblokir setiap repositori marketplace di bawah pemilik GitHub, gunakan bentuk owner-wildcard dalam entri `blockedMarketplaces`: `{ "source": "github", "repo": "untrusted-org/*" }`. Memerlukan Claude Code v2.1.223 atau lebih baru. Untuk aturan pencocokan, yang berbeda antara blocklist dan allowlist, lihat [Owner wildcards](/docs/id/settings-reference#owner-wildcards).
1137
1138Ketika pengguna menambahkan URL repositori `https://` yang Claude Code [klon daripada ambil](/docs/id/discover-plugins#add-from-other-git-hosts), seperti URL repositori `github.com` atau `gitlab.com` kosong, Claude Code juga memeriksanya terhadap entri `url` dalam `blockedMarketplaces`. Claude Code memblokir penambahan jika entri menamai URL yang sama. Dalam perbandingan itu, Claude Code mengabaikan akhiran `.git` dan ref apa pun yang ditambahkan pengguna setelah `#`. Memerlukan Claude Code v2.1.232 atau lebih baru. Sebelum v2.1.232, Claude Code mencocokkan entri `url` hanya terhadap URL yang diambil sebagai file `marketplace.json` yang dihosting.
1139
1140Allowlist menggunakan pencocokan tepat untuk sebagian besar jenis sumber, terlepas dari entri `github` owner-wildcard. Agar marketplace diizinkan, semua field yang ditentukan harus cocok:
1141
1142* Untuk sumber GitHub: `repo` diperlukan, baik menamai satu repositori atau menggunakan bentuk owner-wildcard `owner/*` untuk mencakup setiap repositori di bawah pemilik itu. Untuk cara entri wildcard cocok, termasuk aturan kasus, lihat [Owner wildcards](/docs/id/settings-reference#owner-wildcards). Untuk entri repositori tunggal, `ref` harus cocok tepat atau tidak ada di kedua sumber marketplace dan entri allowlist, dan aturan yang sama berlaku untuk `path`
1143* Untuk sumber URL: URL lengkap harus cocok secara tepat
1144* Untuk sumber `hostPattern`: host marketplace dicocokkan dengan pola regex
1145* Untuk sumber `pathPattern`: jalur filesystem marketplace dicocokkan dengan pola regex
1146
1147Pencocokan tepat allowlist memperlakukan URL yang berbeda hanya dengan garis miring trailing, akhiran `.git`, atau skema `ssh://` dan `https://` sebagai nilai berbeda. Jika marketplace organisasi Anda dapat diklon oleh lebih dari satu bentuk URL, lebih suka entri `hostPattern` daripada URL literal sehingga bentuk `https://`, `ssh://`, dan `user@host:path` semuanya cocok.
1148
1149Marketplace yang [dihosting di claude.ai](/docs/id/discover-plugins#add-from-claude-ai) dicocokkan berdasarkan host: entri `hostPattern` yang cocok dengan `claude.ai` mengatur, dalam `strictKnownMarketplaces` dan dalam `blockedMarketplaces`. Di allowlist, entri seperti itu tidak mengakui unggahan claude.ai pribadi anggota. Memerlukan Claude Code v2.1.273 atau lebih baru.
1150
1151Karena `strictKnownMarketplaces` diatur dalam [pengaturan yang dikelola](/docs/id/managed-settings), konfigurasi pengguna individual dan proyek tidak dapat mengganti pembatasan ini.
1152
1153Untuk detail konfigurasi lengkap termasuk semua jenis sumber yang didukung dan perbandingan dengan `extraKnownMarketplaces`, lihat [referensi strictKnownMarketplaces](/docs/id/settings-reference#strictknownmarketplaces).
1154
1155<h3 id="version-resolution-and-release-channels">
1156 Resolusi versi dan saluran rilis
1157</h3>
1158
1159Versi plugin menentukan jalur cache dan deteksi pembaruan: jika versi yang diselesaikan cocok dengan apa yang sudah dimiliki pengguna, `/plugin update` dan auto-update melewati plugin. Untuk sumber berbasis git, jika Anda menghilangkan `version`, Claude Code menggunakan SHA commit yang diselesaikan dari sumber, jadi pengguna mendapatkan pembaruan setiap kali commit itu berubah; ini adalah setup paling sederhana untuk plugin internal atau yang sedang dikembangkan secara aktif. Lihat [Version management](/docs/id/plugins-reference#version-management) untuk urutan resolusi lengkap, termasuk sumber `archive`.
1160
1161<Warning>
1162 Menetapkan `version` menyematkan plugin untuk setiap jenis sumber kecuali [`command`](#command-sources), yang versinya selalu menyertakan hash dari apa yang dihasilkan perintah. Jika plugin [dimuat di tempat](/docs/id/plugins-reference#plugin-caching-and-file-resolution) dari marketplace yang ditambahkan sebagai direktori lokal juga tidak disematkan. Jika Anda mendeklarasikan `"version": "1.0.0"` dalam `plugin.json` dan mendorong commit baru tanpa mengubah string itu, pengguna yang ada dari sumber tersebut menyimpan salinan cache, karena Claude Code melihat versi yang sama. Bump field pada setiap rilis, atau hilangkan untuk kembali ke versi yang diselesaikan.
1163
1164 Hindari menetapkan `version` di kedua `plugin.json` dan entri marketplace. Nilai `plugin.json` selalu menang secara diam-diam, jadi versi manifest yang basi dapat menyembunyikan versi yang Anda atur di `marketplace.json`.
1165</Warning>
1166
1167<h4 id="set-up-release-channels">
1168 Siapkan saluran rilis
1169</h4>
1170
1171Untuk mendukung saluran rilis "stable" dan "latest" untuk plugin Anda, Anda dapat menyiapkan dua marketplace yang menunjuk ke refs atau SHA berbeda dari repo yang sama. Anda kemudian dapat memberikan setiap grup pengguna marketplace-nya sendiri melalui pengaturan yang dikelola dalam salah satu dari dua cara:
1172
1173* Terapkan [pengaturan yang dikelola endpoint terpisah](/docs/id/managed-settings#delivery-mechanisms), seperti file pengaturan yang dikelola atau profil MDM, ke perangkat setiap grup. [Cara Claude Code menggabungkan sumber yang dikelola](/docs/id/managed-settings#precedence-within-the-managed-tier) mengatakan apakah file per-grup atau profil berlaku di perangkat yang juga memiliki sumber organisasi-lebar.
1174* Tentukan satu [kebijakan gateway aplikasi Claude](/docs/id/claude-apps-gateway-config#managed) per grup. Gateway menerapkan kebijakan pertama yang aturan kecocokannya sesuai dengan pengguna, jadi urutkan kebijakan sehingga setiap pengguna mencapai kebijakan grup mereka. `extraKnownMarketplaces` kebijakan grup menggantikan peta kebijakan catch-all daripada menggabungkan dengannya, jadi daftarkan setiap marketplace yang dibutuhkan grup dalam kebijakan grup, bukan hanya marketplace salurannya.
1175
1176Pengaturan yang dikelola server dari konsol admin [berlaku untuk setiap pengguna dalam organisasi Anda](/docs/id/server-managed-settings#current-limitations), jadi mereka tidak dapat membawa penugasan per-grup.
1177
1178<Warning>
1179 Setiap saluran harus diselesaikan ke versi yang berbeda. Jika Anda menggunakan versi eksplisit, `plugin.json` harus mendeklarasikan `version` berbeda di setiap ref yang disematkan. Jika Anda menghilangkan `version`, SHA commit yang berbeda sudah membedakan saluran. Jika dua refs diselesaikan ke string versi yang sama, Claude Code memperlakukannya sebagai identik dan melewati pembaruan.
1180</Warning>
1181
1182<h5 id="example">
1183 Contoh
1184</h5>
1185
1186```json theme={null}
1187{
1188 "name": "stable-tools",
1189 "plugins": [
1190 {
1191 "name": "code-formatter",
1192 "source": {
1193 "source": "github",
1194 "repo": "acme-corp/code-formatter",
1195 "ref": "stable"
1196 }
1197 }
1198 ]
1199}
1200```
1201
1202```json theme={null}
1203{
1204 "name": "latest-tools",
1205 "plugins": [
1206 {
1207 "name": "code-formatter",
1208 "source": {
1209 "source": "github",
1210 "repo": "acme-corp/code-formatter",
1211 "ref": "latest"
1212 }
1213 }
1214 ]
1215}
1216```
1217
1218<h5 id="assign-channels-to-user-groups">
1219 Tetapkan saluran ke grup pengguna
1220</h5>
1221
1222Tetapkan setiap marketplace ke grup pengguna melalui pengaturan yang dikelola endpoint per-grup atau kebijakan gateway yang dijelaskan di bawah [Siapkan saluran rilis](#set-up-release-channels). Misalnya, grup stabil menerima:
1223
1224```json theme={null}
1225{
1226 "extraKnownMarketplaces": {
1227 "stable-tools": {
1228 "source": {
1229 "source": "github",
1230 "repo": "acme-corp/stable-tools"
1231 }
1232 }
1233 }
1234}
1235```
1236
1237Grup early-access menerima `latest-tools` sebagai gantinya:
1238
1239```json theme={null}
1240{
1241 "extraKnownMarketplaces": {
1242 "latest-tools": {
1243 "source": {
1244 "source": "github",
1245 "repo": "acme-corp/latest-tools"
1246 }
1247 }
1248 }
1249}
1250```
1251
1252<h4 id="pin-dependency-versions">
1253 Sematkan versi dependensi
1254</h4>
1255
1256Plugin dapat membatasi dependensinya ke rentang semver sehingga pembaruan dependensi tidak merusak plugin yang bergantung. Lihat [Batasi versi dependensi plugin](/docs/id/plugin-dependencies) untuk konvensi git-tag `{plugin-name}--v{version}`, sintaks rentang, dan bagaimana beberapa batasan pada dependensi yang sama digabungkan.
1257
1258<h3 id="rename-or-remove-a-plugin">
1259 Ubah nama atau hapus plugin
1260</h3>
1261
1262`name` plugin adalah pengidentifikasi stabilnya. Pengguna mereferensikannya dalam `enabledPlugins`, `pluginConfigs`, dan perintah `/plugin install`, jadi mengubahnya merusak setiap instalasi yang ada. Untuk mengubah label yang ditampilkan di UI tanpa merusak instalasi, atur [`displayName`](#optional-plugin-fields) dan jaga `name` tetap tidak berubah.
1263
1264Jika Anda harus mengubah `name` plugin, atau Anda menghapus plugin dari array `plugins`, tambahkan entri `renames` tingkat atas sehingga pengguna yang ada bermigrasi alih-alih melihat kesalahan `plugin-not-found`. Migrasi otomatis memerlukan Claude Code v2.1.193 atau lebih baru. Petakan setiap nama lama ke nama barunya, atau ke `null` jika plugin tidak lagi ada. Contoh berikut mengubah nama `formatter` menjadi `code-formatter` dan mencatat bahwa `legacy-linter` dihapus:
1265
1266```json theme={null}
1267{
1268 "name": "acme-tools",
1269 "owner": { "name": "Acme" },
1270 "plugins": [
1271 { "name": "code-formatter", "source": "./plugins/code-formatter" }
1272 ],
1273 "renames": {
1274 "formatter": "code-formatter",
1275 "legacy-linter": null
1276 }
1277}
1278```
1279
1280Ketika pengguna memulai Claude Code dengan nama lama masih dalam pengaturan mereka, Claude Code mengikuti peta `renames`:
1281
1282* Jika entri menunjuk ke nama baru, Claude Code memuat plugin dengan nama barunya dan menampilkan pemberitahuan satu baris seperti `Renamed to "code-formatter" in the "acme-tools" marketplace`. Kemudian menulis ulang kunci lama ke kunci baru dalam cakupan pengaturan pengguna, proyek, dan lokal untuk kedua `enabledPlugins` dan `pluginConfigs`, sehingga pemberitahuan muncul sekali.
1283* Untuk entri `null`, Claude Code menghapus kunci lama dan pemberitahuan melaporkan bahwa plugin dihapus dari marketplace.
1284* Jika plugin yang diubah nama menggunakan sumber jarak jauh seperti `github` atau `npm`, Claude Code melaporkan `plugin-cache-miss` setelah pengubahan nama dan pengguna harus menjalankan `/plugin install` sekali untuk mengambilnya dengan nama baru.
1285
1286Perlakukan `renames` sebagai riwayat append-only: jaga entri lama tetap ada bahkan setelah Anda mengharapkan setiap pengguna untuk bermigrasi. Claude Code mengikuti rantai, jadi jika Anda kemudian mengubah nama `code-formatter` menjadi `formatter-pro`, tambahkan entri kedua daripada mengedit yang pertama. Pengguna yang masih memiliki `formatter` asli yang diaktifkan kemudian diselesaikan melalui kedua entri ke `formatter-pro`.
1287
1288Jalankan `claude plugin validate .` setelah mengedit peta; itu menolak entri apa pun yang rantainya membentuk siklus atau tidak berakhir di `null` atau nama yang terdaftar dalam `plugins`.
1289
1290<Note>
1291 Pengaturan yang dikelola dan kebijakan adalah read-only untuk Claude Code, jadi plugin yang diaktifkan di sana tidak dapat ditulis ulang secara otomatis. Plugin yang diubah nama masih dimuat setiap sesi, tetapi pemberitahuan pengubahan nama berulang sampai administrator memperbarui `enabledPlugins` dalam file pengaturan yang dikelola untuk menggunakan nama baru. Hal yang sama berlaku untuk plugin yang diaktifkan melalui sumber read-only lainnya seperti `--add-dir`.
1292</Note>
1293
1294Versi Claude Code sebelumnya mengabaikan field `renames` dan melaporkan `plugin-not-found` untuk nama lama.
1295
1296<h2 id="validation-and-testing">
1297 Validasi dan pengujian
1298</h2>
1299
1300Uji marketplace Anda sebelum berbagi. Validasi memeriksa struktur file; untuk menguji apakah plugin mengubah apa yang Claude lakukan pada prompt realistis, jalankan suite eval-nya dengan [`claude plugin eval`](/docs/id/plugin-evals) sebelum Anda menerbitkan versi baru.
1301
1302Dari direktori marketplace Anda, validasi sintaks JSON:
1303
1304```bash theme={null}
1305claude plugin validate .
1306```
1307
1308Atau dari dalam Claude Code:
1309
1310```shell theme={null}
1311/plugin validate .
1312```
1313
1314Tambahkan marketplace untuk pengujian:
1315
1316```shell theme={null}
1317/plugin marketplace add ./path/to/marketplace
1318```
1319
1320Pasang plugin uji untuk memverifikasi semuanya berfungsi:
1321
1322```shell theme={null}
1323/plugin install test-plugin@marketplace-name
1324```
1325
1326Untuk alur kerja pengujian plugin lengkap, lihat [Uji plugin Anda secara lokal](/docs/id/plugins#test-your-plugins-locally). Untuk troubleshooting teknis, lihat [Plugins reference](/docs/id/plugins-reference).
1327
1328<h2 id="manage-marketplaces-from-the-cli">
1329 Kelola marketplace dari CLI
1330</h2>
1331
1332Claude Code menyediakan subperintah `claude plugin marketplace` non-interaktif untuk scripting dan otomasi. Ini setara dengan perintah `/plugin marketplace` yang tersedia dalam sesi interaktif.
1333
1334<h3 id="plugin-marketplace-add">
1335 Plugin marketplace add
1336</h3>
1337
1338Tambahkan marketplace dari repositori GitHub, URL git, URL jarak jauh, atau jalur lokal.
1339
1340```bash theme={null}
1341claude plugin marketplace add <source> [options]
1342```
1343
1344**Argumen:**
1345
1346* `<source>`: Shorthand GitHub `owner/repo`, URL git, URL jarak jauh ke file `marketplace.json`, atau jalur direktori lokal. Untuk menyematkan ke branch atau tag, tambahkan `@ref` ke shorthand GitHub atau `#ref` ke URL git
1347
1348URL harus menyertakan skemanya. Mulai dari Claude Code v2.1.196, host yang diketik tanpa skema, seperti `gitlab.example.com/team/plugins`, ditolak sebagai shorthand `owner/repo` yang tidak valid dan kesalahan memberi tahu Anda untuk menambahkan `https://` atau menggunakan `./` untuk jalur lokal. Versi sebelumnya salah membacanya sebagai jalur repositori GitHub dan gagal saat clone dengan kesalahan GitHub not-found.
1349
1350**Opsi:**
1351
1352| Opsi | Deskripsi | Default |
1353| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |
1354| `--scope <scope>` | Di mana mendeklarasikan marketplace: `user`, `project`, atau `local`. Lihat [Plugin installation scopes](/docs/id/plugins-reference#plugin-installation-scopes) | `user` |
1355| `--sparse <paths...>` | Batasi checkout ke direktori tertentu melalui git sparse-checkout. Berguna untuk monorepo | |
1356| `--claudeai` | Baca argumen sebagai nama [marketplace yang dihosting di claude.ai](/docs/id/discover-plugins#add-from-claude-ai) alih-alih sumber. Memerlukan Claude Code v2.1.273 atau lebih baru | |
1357
1358Tambahkan marketplace dari GitHub menggunakan shorthand `owner/repo`:
1359
1360```bash theme={null}
1361claude plugin marketplace add acme-corp/claude-plugins
1362```
1363
1364Sematkan ke branch atau tag tertentu dengan `@ref`:
1365
1366```bash theme={null}
1367claude plugin marketplace add acme-corp/claude-plugins@v2.0
1368```
1369
1370Tambahkan dari URL git di host non-GitHub:
1371
1372```bash theme={null}
1373claude plugin marketplace add https://gitlab.example.com/team/plugins.git
1374```
1375
1376Tambahkan dari URL jarak jauh yang melayani file `marketplace.json` secara langsung:
1377
1378```bash theme={null}
1379claude plugin marketplace add https://example.com/marketplace.json
1380```
1381
1382Tambahkan dari direktori lokal untuk pengujian:
1383
1384```bash theme={null}
1385claude plugin marketplace add ./my-marketplace
1386```
1387
1388Deklarasikan marketplace di scope proyek sehingga dibagikan dengan tim Anda melalui `.claude/settings.json`:
1389
1390```bash theme={null}
1391claude plugin marketplace add acme-corp/claude-plugins --scope project
1392```
1393
1394Untuk monorepo, batasi checkout ke direktori yang berisi konten plugin:
1395
1396```bash theme={null}
1397claude plugin marketplace add acme-corp/monorepo --sparse .claude-plugin plugins
1398```
1399
1400Tambahkan [marketplace yang dihosting di claude.ai](/docs/id/discover-plugins#add-from-claude-ai) berdasarkan nama yang dicetak di bagian `From claude.ai:` dari `claude plugin marketplace list`:
1401
1402```bash theme={null}
1403claude plugin marketplace add --claudeai claudeai-organization-library
1404```
1405
1406Dengan `--claudeai`, perintah menolak `--scope` dan `--sparse`. Marketplace dihosting untuk akun Anda, bukan dideklarasikan dalam file pengaturan, jadi Anda tidak dapat membagikannya melalui `.claude/settings.json` proyek.
1407
1408<h3 id="plugin-marketplace-list">
1409 Plugin marketplace list
1410</h3>
1411
1412Daftar semua marketplace yang dikonfigurasi.
1413
1414```bash theme={null}
1415claude plugin marketplace list [options]
1416```
1417
1418**Opsi:**
1419
1420| Opsi | Deskripsi |
1421| :------- | :------------------ |
1422| `--json` | Output sebagai JSON |
1423
1424Dengan `--json`, setiap entri mencakup `name`, `source`, bidang `installLocation` dengan jalur cache lokal tempat marketplace disimpan, dan bidang khusus sumber: `repo` untuk sumber GitHub, `url` untuk sumber git dan URL, dan `path` untuk sumber lokal. Sumber GitHub dan git juga menyertakan bidang `ref` ketika marketplace ditambahkan dengan branch atau tag yang disematkan.
1425
1426Marketplace [claude.ai](/docs/id/discover-plugins#add-from-claude-ai) yang ditambahkan tidak memiliki clone lokal, jadi entrinya membawa pengidentifikasi claude.ai-nya, `marketplaceId` dan `organizationUuid`, sebagai pengganti `installLocation`.
1427
1428Dalam sesi terminal di mana [plugin disinkronkan dari akun claude.ai Anda](/docs/id/plugins-reference#synced-plugins), daftar teks berakhir dengan bagian `From claude.ai:` yang menamai apa yang claude.ai daftarkan untuk akun Anda di luar marketplace yang telah Anda tambahkan. Untuk menambahkan salah satunya, lihat [Tambahkan dari claude.ai](/docs/id/discover-plugins#add-from-claude-ai). Output `--json` hanya mencakup marketplace yang dikonfigurasi dan meninggalkan bagian tersebut. Memerlukan Claude Code v2.1.273 atau lebih baru.
1429
1430<h3 id="plugin-marketplace-remove">
1431 Plugin marketplace remove
1432</h3>
1433
1434Hapus marketplace yang dikonfigurasi. Alias `rm` juga diterima.
1435
1436```bash theme={null}
1437claude plugin marketplace remove <name> [options]
1438```
1439
1440**Argumen:**
1441
1442* `<name>`: nama marketplace untuk dihapus, seperti yang ditunjukkan oleh `claude plugin marketplace list`. Ini adalah `name` dari `marketplace.json`, bukan sumber yang Anda teruskan ke `add`
1443
1444**Opsi:**
1445
1446| Opsi | Deskripsi | Default |
1447| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ |
1448| `--scope <scope>` | Batasi penghapusan ke scope pengaturan tunggal: `user`, `project`, atau `local`. Lihat [Plugin installation scopes](/docs/id/plugins-reference#plugin-installation-scopes). Ketika dihilangkan, deklarasi dihapus dari setiap scope yang dapat diedit. Ketika diberikan, hanya deklarasi scope tersebut yang dihapus; status bersama, cache, dan data plugin yang dipasang dipertahankan ketika marketplace masih dideklarasikan di scope lain | (semua scope) |
1449
1450<Warning>
1451 Menghapus marketplace dari scope terakhirnya yang tersisa juga mencopot plugin apa pun yang Anda pasang darinya. Untuk menyegarkan marketplace tanpa kehilangan plugin yang dipasang, gunakan `claude plugin marketplace update` sebagai gantinya.
1452</Warning>
1453
1454<h3 id="plugin-marketplace-update">
1455 Plugin marketplace update
1456</h3>
1457
1458Segarkan marketplace dari sumbernya untuk mengambil plugin baru dan perubahan versi. Marketplace yang ditambahkan dengan branch atau tag `ref` diperbarui ke commit terbaru dari ref tersebut, bukan branch default repositori.
1459
1460```bash theme={null}
1461claude plugin marketplace update [name]
1462```
1463
1464**Argumen:**
1465
1466* `[name]`: nama marketplace untuk diperbarui, seperti yang ditunjukkan oleh `claude plugin marketplace list`. Memperbarui semua marketplace jika dihilangkan
1467
1468Baik `remove` maupun `update` gagal ketika dijalankan terhadap marketplace yang dikelola seed, yang bersifat read-only. Saat memperbarui semua marketplace, entri yang dikelola seed dilewati dan marketplace lainnya masih diperbarui. Untuk mengubah plugin yang disediakan seed, minta administrator Anda memperbarui image seed. Lihat [Pra-isi plugin untuk container](#pre-populate-plugins-for-containers).
1469
1470<h2 id="troubleshooting">
1471 Troubleshooting
1472</h2>
1473
1474<h3 id="marketplace-not-loading">
1475 Marketplace tidak memuat
1476</h3>
1477
1478**Gejala**: Tidak dapat menambahkan marketplace atau melihat plugin darinya
1479
1480**Solusi**:
1481
1482* Verifikasi URL marketplace dapat diakses
1483* Periksa bahwa `.claude-plugin/marketplace.json` ada di jalur yang ditentukan
1484* Pastikan sintaks JSON valid menggunakan `claude plugin validate .` atau `/plugin validate .` dari direktori marketplace. Untuk memeriksa frontmatter skill, agent, dan command, lihat [Validate a plugin or a directory without a manifest](#validate-a-plugin-or-a-directory-without-a-manifest)
1485* Untuk repositori pribadi, konfirmasi Anda memiliki izin akses
1486
1487<h3 id="marketplace-validation-errors">
1488 Kesalahan validasi marketplace
1489</h3>
1490
1491Jalankan `claude plugin validate .` atau `/plugin validate .` dari direktori marketplace Anda untuk memeriksa masalah. Ketika ditunjukkan ke direktori marketplace, validator memeriksa `marketplace.json` untuk kesalahan skema, nama plugin duplikat, dan traversal jalur sumber. Untuk setiap entri yang `source`-nya adalah jalur lokal, validator juga memvalidasi `plugin.json` plugin tersebut dan memberikan peringatan ketika `version` entri tidak cocok dengan yang ada di `plugin.json`. Masalah yang ditemukan dalam `plugin.json` plugin diawali dengan indeks entri, dalam bentuk `plugins[2] plugin.json →`.
1492
1493Mulai dari Claude Code v2.1.196, pass per-entri juga:
1494
1495* mencakup plugin yang `source`-nya adalah `.`
1496* berjalan ketika `marketplace.json` berada di luar direktori `.claude-plugin`, menyelesaikan sumber terhadap direktori file itu sendiri
1497* melaporkan masalah setiap entri bahkan ketika bagian lain dari file memiliki kesalahan skema
1498
1499Versi sebelumnya melewati plugin di root marketplace dan hanya turun dari `.claude-plugin/marketplace.json`.
1500
1501Dari direktori marketplace, Claude Code tidak membuka file skill, agent, command, atau hook plugin. Untuk menemukan kesalahan dalam file tersebut, lihat [Validate a plugin or a directory without a manifest](#validate-a-plugin-or-a-directory-without-a-manifest). Tabel di bawah mencantumkan kesalahan paling umum dari direktori marketplace, dengan penyebab dan perbaikan untuk masing-masing:
1502
1503| Kesalahan | Penyebab | Solusi |
1504| :------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- |
1505| `No manifest found in directory. Expected .claude-plugin/marketplace.json or .claude-plugin/plugin.json` | Direktori yang Anda beri nama tidak memiliki `.claude-plugin/marketplace.json` atau `plugin.json`, dan tidak ada file skill, agent, atau command untuk diperiksa | Jalankan dari root marketplace, atau buat `.claude-plugin/marketplace.json` dengan field yang diperlukan |
1506| `Invalid JSON syntax: Unexpected token...` | Kesalahan sintaks JSON dalam marketplace.json | Periksa koma yang hilang, koma ekstra, atau string yang tidak dikutip |
1507| `Duplicate plugin name "x" found in marketplace` | Dua plugin berbagi nama yang sama | Berikan setiap plugin nilai `name` yang unik |
1508| `plugins[0].source: Path contains ".."` | Segmen jalur sumber adalah `..` | Gunakan jalur relatif terhadap root marketplace tanpa segmen `..`. Lihat [Relative paths](#relative-paths) |
1509| `Marketplace name cannot contain control or bidirectional-formatting characters` | Nama marketplace `name` berisi karakter bidirectional-formatting Unicode atau karakter kontrol, seperti escape atau newline | Hapus karakter dari nama. Sebelum v2.1.247, karakter ini menghasilkan kesalahan `Marketplace name impersonates an official Anthropic/Claude marketplace` |
1510| `Plugin name cannot contain control or bidirectional-formatting characters` | Nama plugin `name` berisi karakter bidirectional-formatting Unicode atau karakter kontrol, seperti escape atau newline | Hapus karakter dari nama. Sebelum v2.1.247, Claude Code tidak menjalankan pemeriksaan ini |
1511
1512**Peringatan** (non-blocking):
1513
1514* `Marketplace has no plugins defined`: tambahkan setidaknya satu plugin ke array `plugins`
1515* `No marketplace description provided`: tambahkan `description` tingkat atas untuk membantu pengguna memahami marketplace Anda
1516* `Plugin name "x" is not kebab-case`: ubah nama menjadi huruf kecil, digit, dan tanda hubung saja (misalnya, `my-plugin`). Claude Code menerima bentuk lain, tetapi sinkronisasi marketplace claude.ai menolaknya.
1517* `Marketplace name "x" is reserved in Claude Desktop`: marketplace dinamai `org`, `org-provisioned`, atau `unknown`, dalam huruf besar atau kecil apa pun. Claude Code menerima nama ini, tetapi sinkronisasi marketplace terkelola Claude Desktop menolak seluruh marketplace. Ubah nama marketplace. Sebelum v2.1.221, `claude plugin validate` tidak menjalankan pemeriksaan ini.
1518* `Marketplace name "x" is not accepted by Claude Desktop` atau `Plugin name "x" is not accepted by Claude Desktop`: Claude Desktop menerima nama hingga 128 karakter yang terdiri dari huruf, digit, `.`, `_`, dan `-`, dimulai dengan huruf atau digit. Claude Code menerima bentuk lain, tetapi sinkronisasi marketplace terkelola Claude Desktop menolak marketplace yang namanya gagal pemeriksaan dan secara diam-diam menghapus entri plugin yang namanya gagal. Ubah nama marketplace atau plugin. Sebelum v2.1.221, `claude plugin validate` tidak menjalankan pemeriksaan ini.
1519
1520<h4 id="validate-a-plugin-or-a-directory-without-a-manifest">
1521 Validate a plugin or a directory without a manifest
1522</h4>
1523
1524Untuk menemukan file skill, agent, dan command yang frontmatter-nya tidak parse, jalankan `claude plugin validate` dan beri nama direktori yang menahannya. Claude Code tidak mencari di luar direktori yang Anda beri nama. Setiap run kecuali satu terhadap plugin yang memiliki `plugin.json` memerlukan Claude Code v2.1.233 atau lebih baru.
1525
1526<h5 id="pick-the-directory-to-name">
1527 Pick the directory to name
1528</h5>
1529
1530Claude Code memeriksa file berbeda tergantung pada direktori mana yang Anda beri nama. Temukan apa yang ingin Anda periksa di kolom pertama, dan jalankan perintah baris itu:
1531
1532| Untuk memeriksa | Jalankan | Claude Code memeriksa |
1533| :------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1534| Plugin yang memiliki `plugin.json` | `claude plugin validate ./plugins/my-plugin` | `plugin.json`, `hooks/hooks.json`, dan direktori `skills`, `agents`, dan `commands` di root plugin |
1535| Satu direktori skill, agent, atau command, seperti plugin yang belum memiliki `plugin.json` | `claude plugin validate .claude/skills`, `~/.claude/agents`, atau `./my-plugin/agents` | Setiap file skill, agent, atau command dalam direktori itu |
1536| Folder yang skill-nya adalah root `SKILL.md`-nya | `claude plugin validate ./skills`, memberi nama direktori `skills` yang menahannya | Root `SKILL.md` setiap folder. Direktori yang menahan harus dinamai `skills`; folder di bawah nama lain, seperti `plugins/`, tidak memiliki run yang memeriksa root `SKILL.md`-nya |
1537| Tiga direktori proyek sekaligus | `claude plugin validate .claude`, atau root proyek ketika tidak memiliki manifest `.claude-plugin/` | `.claude/skills`, `.claude/agents`, dan `.claude/commands` |
1538| Direktori tingkat pengguna Anda | `claude plugin validate ~/.claude` | `~/.claude/skills`, `~/.claude/agents`, dan `~/.claude/commands` |
1539
1540<h5 id="check-a-plugin-whose-skill-is-its-root-skill-md">
1541 Check a plugin whose skill is its root `SKILL.md`
1542</h5>
1543
1544Ketika Anda menjalankan `claude plugin validate` terhadap direktori plugin, Claude Code tidak memeriksa `SKILL.md` di root plugin. Ketika plugin berada di direktori bernama `skills`, jalankan perintah dua kali:
1545
1546* Beri nama direktori `skills` itu untuk memeriksa root `SKILL.md` plugin.
1547* Beri nama direktori plugin untuk memeriksa sisanya.
1548
1549Ketika plugin berada di bawah nama lain, seperti `plugins/`, run direktori `skills` tidak tersedia, dan tidak ada run yang memeriksa root `SKILL.md`-nya.
1550
1551<h5 id="check-files-behind-symlinks">
1552 Check files behind symlinks
1553</h5>
1554
1555Ketika Anda menjalankan `claude plugin validate`, Claude Code tidak mengikuti symlink di dalam direktori yang Anda beri nama. Apa yang dilakukannya tergantung pada di mana link berada:
1556
1557* **Direktori `skills`, `agents`, atau `commands` yang tertaut di bawah root plugin atau `.claude`**: Claude Code memperingatkan bahwa tidak ada yang di dalamnya yang dibaca.
1558* **Entri tertaut di dalam direktori `skills`, `agents`, atau `commands`**: Claude Code melewatinya dan memperingatkan, per direktori, berapa banyak entri yang dilewatinya yang akan dimuat sesi.
1559* **Direktori `skills`, `agents`, atau `commands` yang Anda beri nama adalah symlink itu sendiri, atau direktori `.claude` induknya adalah**: Claude Code melaporkan kesalahan dan tidak memeriksa apa pun di dalamnya. Beri nama direktori nyata sebagai gantinya.
1560
1561Dalam dua kasus skill, run berlalu dengan peringatan. Untuk memeriksa file tertaut, jalankan lagi dan beri nama direktori yang menahannya secara langsung:
1562
1563* **Plugin yang direktori `skills`-nya [tertaut ke skill plugin sibling](/docs/id/plugins-reference#share-files-within-a-marketplace-with-symlinks)**: beri nama direktori plugin sibling.
1564* **[Entri skill tertaut](/docs/id/skills#where-skills-live) dalam `~/.claude/skills` atau `.claude/skills`**: Claude Code mengikuti entri dalam sesi. Untuk memeriksanya, beri nama direktori bernama `skills` yang menahannya folder nyata.
1565
1566<h5 id="read-the-validation-results">
1567 Read the validation results
1568</h5>
1569
1570Run yang bersih berakhir dengan `Validation passed`.
1571
1572`No manifest found in directory` berarti Claude Code tidak menemukan `plugin.json` atau `marketplace.json` di sana, dan tidak ada file skill, agent, atau command dalam direktori yang diprobnya di bawahnya. Beri nama direktori `skills`, `agents`, atau `commands` yang menahannya file Anda sebagai gantinya.
1573
1574Dua dari kesalahan yang dilaporkan Claude Code dari run ini, dengan perbaikan untuk masing-masing:
1575
1576* `YAML frontmatter failed to parse: ...`: perbaiki YAML dalam blok frontmatter file skill, agent, atau command. Sampai Anda melakukannya, sesi membaca tidak ada field frontmatter dari file
1577* `Invalid JSON syntax: ...` pada `hooks/hooks.json`: perbaiki sintaks JSON. Sampai Anda melakukannya, sesi memuat plugin tanpa hook dalam file itu. Claude Code melaporkan kesalahan ini hanya dalam run plugin
1578
1579Dalam run plugin, Claude Code juga memperingatkan tentang `CLAUDE.md` di root plugin. Untuk jalur yang Anda atur melalui [component path fields](/docs/id/plugins-reference#component-path-fields) dalam `plugin.json`, Claude Code memeriksa bahwa setiap jalur ada tetapi tidak membaca file di sana.
1580
1581<h3 id="plugin-installation-failures">
1582 Kegagalan instalasi plugin
1583</h3>
1584
1585**Gejala**: Marketplace muncul tetapi instalasi plugin gagal
1586
1587**Solusi**:
1588
1589* Verifikasi URL sumber plugin dapat diakses
1590* Periksa bahwa direktori plugin berisi file yang diperlukan
1591* Untuk sumber GitHub, pastikan repositori publik atau Anda memiliki akses
1592* Uji sumber plugin secara manual dengan mengklon/mengunduh
1593* Jika sumber menentukan baik `ref` maupun `sha`, cabang atau tag upstream yang dihapus tidak memblokir instalasi pada sebagian besar host git, termasuk GitHub, GitLab, dan Bitbucket. Pada server yang tidak mendukung pengambilan commit berdasarkan SHA, seperti AWS CodeCommit, `ref` masih harus ada dan commit yang ditentukan harus dapat dijangkau darinya. Jika instalasi masih gagal, konfirmasi commit yang ditentukan masih ada di repositori
1594
1595<h3 id="private-repository-authentication-fails">
1596 Autentikasi repositori pribadi gagal
1597</h3>
1598
1599**Gejala**: Kesalahan autentikasi saat memasang plugin dari repositori pribadi
1600
1601**Solusi**:
1602
1603Untuk instalasi manual dan pembaruan:
1604
1605* Verifikasi Anda diautentikasi dengan penyedia git Anda (misalnya, jalankan `gh auth status` untuk GitHub)
1606* Periksa bahwa helper kredensial Anda dikonfigurasi: `git config --global credential.helper`
1607* Jalankan `git ls-remote <marketplace-url>` untuk menguji apakah git dapat diautentikasi sendiri. Jika git meminta nama pengguna atau kata sandi, simpan kredensial terlebih dahulu: untuk GitHub melalui HTTPS, jalankan `gh auth setup-git`, dan untuk remote SSH, muat kunci Anda ke `ssh-agent`
1608
1609Untuk pembaruan otomatis latar belakang:
1610
1611* Pemeriksaan latar belakang menggunakan helper kredensial git yang dikonfigurasi tetapi tidak pernah meminta, jadi helper Anda harus dapat menjawab dengan kredensial yang disimpan. Remote SSH dengan kunci yang dimuat di `ssh-agent` juga diautentikasi
1612* Jika helper Anda perlu meminta Anda, pembaruan latar belakang gagal diam-diam dan klon yang ada tetap di tempat. Masuk ke helper Anda terlebih dahulu sehingga menyimpan kredensial untuk host. Untuk GitHub, jalankan `gh auth login`, kemudian `gh auth setup-git`
1613* Ketika pemeriksaan menemukan commit baru, atau tidak dapat menjangkau atau diautentikasi ke remote, Claude Code me-re-clone marketplace dengan kredensial yang sama. Re-clone mungkin time out pada repositori besar
1614* Atur `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1` untuk menyimpan klon yang ada tanpa mencoba re-clone ketika pemeriksaan latar belakang tidak dapat menjangkau atau diautentikasi ke remote
1615* Jika re-clone time out pada repositori besar, tingkatkan batas dengan [`CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS`](#git-operations-time-out)
1616* Atau perbarui marketplace pribadi secara manual dengan `/plugin marketplace update <name>`, yang menggunakan kredensial Anda
1617
1618Sebelum v2.1.280, pemeriksaan latar belakang berjalan tanpa helper kredensial git Anda dan tidak dapat diautentikasi ke repositori pribadi melalui HTTPS.
1619
1620<h3 id="marketplace-updates-fail-in-offline-environments">
1621 Pembaruan marketplace gagal di lingkungan offline
1622</h3>
1623
1624**Gejala**: Di lingkungan offline atau airgapped, penyegaran marketplace latar belakang tidak dapat menjangkau remote dan Claude Code berulang kali mencoba re-clone yang tidak dapat berhasil.
1625
1626**Penyebab**: Penyegaran latar belakang memeriksa remote marketplace untuk commit baru, dan ketika pemeriksaan tidak dapat menjangkau remote, Claude Code mencoba mengklon marketplace lagi. Offline, klon gagal dengan cara yang sama dan klon yang ada tetap di tempat. Sebelum v2.1.274, penyegaran menjalankan `git pull` dalam klon yang ada, memindahkan klon ke samping untuk re-clone ketika pull gagal, dan memulihkannya sesudahnya dengan basis best-effort.
1627
1628Penyegaran berjalan di latar belakang setelah startup, sehingga tidak menunda startup. Setiap sesi masih mengulangi upaya yang gagal, dan setiap operasi git dapat menunggu [timeout 120 detik](#git-operations-time-out).
1629
1630**Solusi**: Atur `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1` untuk melewati upaya re-clone dan terus menggunakan klon yang ada ketika pemeriksaan tidak dapat menjangkau remote:
1631
1632```bash theme={null}
1633export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1
1634```
1635
1636Untuk deployment yang sepenuhnya offline di mana repositori tidak akan pernah dapat dijangkau, gunakan [`CLAUDE_CODE_PLUGIN_SEED_DIR`](#pre-populate-plugins-for-containers) untuk pra-isi direktori plugin saat waktu build sebagai gantinya.
1637
1638<h3 id="git-operations-time-out">
1639 Operasi Git time out
1640</h3>
1641
1642**Gejala**: Instalasi plugin atau pembaruan marketplace gagal dengan kesalahan timeout seperti `Git clone timed out after 120s`.
1643
1644**Penyebab**: Claude Code menggunakan timeout 120 detik untuk semua operasi git, termasuk mengklon repositori plugin dan me-re-clone marketplace untuk memperbaruinya. Repositori besar atau koneksi jaringan lambat mungkin melebihi batas ini.
1645
1646**Solusi**: Tingkatkan timeout menggunakan variabel lingkungan `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS`. Nilainya dalam milidetik:
1647
1648```bash theme={null}
1649export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000 # 5 minutes
1650```
1651
1652<h3 id="plugins-with-relative-paths-fail-in-url-based-marketplaces">
1653 Plugin dengan jalur relatif gagal di marketplace berbasis URL
1654</h3>
1655
1656**Gejala**: Menambahkan marketplace melalui URL seperti `https://example.com/marketplace.json`, tetapi plugin dengan sumber jalur relatif seperti `"./plugins/my-plugin"` gagal dipasang dengan `its marketplace entry path does not stay inside the marketplace directory`. Plugin yang sudah dipasang gagal dimuat dengan `Plugin source path refused`. Kedua pesan memiliki [entri referensi kesalahan](/docs/id/errors#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory).
1657
1658**Penyebab**: Menambahkan marketplace berbasis URL hanya mengunduh file `marketplace.json` itu sendiri, dan Claude Code tidak mengambil file plugin berdasarkan jalur relatif dari server itu. Jalur relatif dalam entri marketplace mereferensikan file di server jarak jauh yang tidak diunduh.
1659
1660**Solusi**:
1661
1662* **Gunakan sumber eksternal**: ubah entri plugin ke [plugin source](#plugin-sources) apa pun selain jalur relatif:
1663 ```json theme={null}
1664 { "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } }
1665 ```
1666* **Gunakan marketplace berbasis Git**: Host marketplace Anda di repositori Git dan tambahkan dengan URL git. Marketplace berbasis Git mengklon seluruh repositori, membuat jalur relatif berfungsi dengan benar.
1667
1668<h3 id="files-not-found-after-installation">
1669 File tidak ditemukan setelah instalasi
1670</h3>
1671
1672**Gejala**: Plugin dipasang tetapi referensi ke file gagal, terutama file di luar direktori plugin
1673
1674**Penyebab**: Claude Code menyalin plugin yang dipasang ke direktori cache, kecuali plugin dimuat di tempat. [`command` source dalam link mode](#copy-mode-and-link-mode) dimuat di tempat, begitu juga [relative path source](#relative-paths) dalam marketplace yang ditambahkan dari direktori lokal. Jalur yang mereferensikan file di luar direktori plugin yang disalin (seperti `../shared-utils`) tidak akan berfungsi karena file tersebut tidak disalin.
1675
1676**Solusi**: Lihat [Plugin caching and file resolution](/docs/id/plugins-reference#plugin-caching-and-file-resolution) untuk solusi termasuk symlink dan restruktur direktori.
1677
1678Untuk alat debugging tambahan dan masalah umum, lihat [Debugging and development tools](/docs/id/plugins-reference#debugging-and-development-tools).
1679
1680<h2 id="see-also">
1681 Lihat juga
1682</h2>
1683
1684* [Temukan dan pasang plugin yang sudah dibuat](/docs/id/discover-plugins) - Memasang plugin dari marketplace yang ada
1685* [Plugins](/docs/id/plugins) - Membuat plugin Anda sendiri
1686* [Plugins reference](/docs/id/plugins-reference) - Spesifikasi teknis lengkap dan skema
1687* [Plugin settings](/docs/id/settings-reference#plugin-settings) - Opsi konfigurasi plugin
1688* [strictKnownMarketplaces reference](/docs/id/settings-reference#strictknownmarketplaces) - Pembatasan marketplace yang dikelola