Buat dan distribusikan marketplace plugin
Bangun dan host marketplace plugin untuk mendistribusikan ekstensi Claude Code di seluruh tim dan komunitas.
Sebuah 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.
Mencari cara memasang plugin dari marketplace yang sudah ada? Lihat Temukan dan pasang plugin yang sudah dibuat.
Ikhtisar
Membuat dan mendistribusikan marketplace melibatkan:
- 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 untuk detail tentang cara membuat plugin.
- Membuat file marketplace: tentukan
marketplace.jsonyang mencantumkan plugin Anda dan di mana menemukannya. Lihat Buat file marketplace. - Host marketplace: dorong ke GitHub, GitLab, atau host git lainnya. Lihat Host dan distribusikan marketplace.
- Bagikan dengan pengguna: pengguna menambahkan marketplace Anda dengan
/plugin marketplace adddan memasang plugin individual. Lihat Temukan dan pasang plugin.
Setelah marketplace Anda aktif, Anda dapat memperbaruinya dengan mendorong perubahan ke repositori Anda. Pengguna menyegarkan salinan lokal mereka dengan /plugin marketplace update.
Panduan: buat marketplace lokal
Contoh 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.
Buat struktur direktori
mkdir -p my-marketplace/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review
Buat skill
Buat file SKILL.md yang mendefinisikan apa yang dilakukan skill quality-review.
---
description: Review code for bugs, security, and performance
---
Review the code I've selected or the recent changes for:
- Potential bugs or edge cases
- Security concerns
- Performance issues
- Readability improvements
Be concise and actionable.
Buat manifest plugin
Buat file plugin.json yang mendeskripsikan plugin. Manifest berada di direktori .claude-plugin/.
{
"name": "quality-review-plugin",
"description": "Adds a quality-review skill for quick code reviews",
"version": "1.0.0",
"author": {
"name": "Your Name"
}
}
Menetapkan version berarti pengguna hanya menerima pembaruan ketika Anda mengubah bidang ini, jadi tingkatkan pada setiap rilis. Plugin dengan sumber command tidak disematkan oleh bidang ini. Juga tidak plugin yang dimuat di tempat dari marketplace yang ditambahkan sebagai direktori lokal. Jika Anda menghilangkan version, versi berasal dari sumber berikutnya dalam manajemen versi.
Buat file marketplace
Buat katalog marketplace yang mencantumkan plugin Anda.
{
"name": "my-plugins",
"owner": {
"name": "Your Name"
},
"plugins": [
{
"name": "quality-review-plugin",
"source": "./plugins/quality-review-plugin",
"description": "Adds a quality-review skill for quick code reviews"
}
]
}
Tambahkan dan pasang
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.
/plugin marketplace add ./my-marketplace
/plugin install quality-review-plugin@my-plugins
Coba
Pilih beberapa kode di editor Anda dan jalankan skill baru Anda. Plugin skills memiliki namespace dengan nama plugin.
/quality-review-plugin:quality-review
Untuk mempelajari lebih lanjut tentang apa yang dapat dilakukan plugin, termasuk hooks, agents, MCP servers, dan LSP servers, lihat Plugins.
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 memuat di tempat, begitu juga sumber jalur relatif 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.
Jika Anda perlu berbagi file di seluruh plugin, gunakan symlink. Lihat Plugin caching and file resolution untuk detail.
Buat file marketplace
Buat .claude-plugin/marketplace.json di root repositori Anda. File ini mendefinisikan nama marketplace Anda, informasi pemilik, dan daftar plugin dengan sumbernya.
Setiap entri plugin memerlukan minimal name dan source yang memberitahu Claude Code di mana mengambilnya. Lihat skema lengkap di bawah untuk semua field yang tersedia.
{
"name": "company-tools",
"owner": {
"name": "DevTools Team",
"email": "devtools@example.com"
},
"plugins": [
{
"name": "code-formatter",
"source": "./plugins/formatter",
"description": "Automatic code formatting on save",
"version": "2.1.0",
"author": {
"name": "DevTools Team"
}
},
{
"name": "deployment-tools",
"source": {
"source": "github",
"repo": "company/deploy-plugin"
},
"description": "Deployment automation tools"
}
]
}
Skema marketplace
Field yang diperlukan
| Field | Type | Deskripsi | Contoh |
|---|---|---|---|
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. |
"acme-tools" |
owner |
object | Informasi pengelola marketplace. Lihat Field pemilik | |
plugins |
array | Daftar plugin yang tersedia | Lihat Entri plugin |
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.
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. 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.
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.
Field pemilik
| Field | Type | Diperlukan | Deskripsi |
|---|---|---|---|
name |
string | Ya | Nama pengelola atau tim |
email |
string | Tidak | Email kontak untuk pengelola |
url |
string | Tidak | Website, profil GitHub, atau URL organisasi |
Field opsional
| Field | Type | Deskripsi |
|---|---|---|
$schema |
string | URL JSON Schema untuk autocomplete dan validasi editor. Claude Code mengabaikan field ini saat waktu muat. |
description |
string | Deskripsi marketplace singkat |
version |
string | Versi manifest marketplace |
metadata.pluginRoot |
string | Direktori yang Claude Code selesaikan nama sumber plugin bare di bawahnya. Lihat Jalur relatif. Memerlukan Claude Code v2.1.239 atau lebih baru. |
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. |
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. Memerlukan Claude Code v2.1.193 atau lebih baru. |
description dan version juga diterima di bawah metadata untuk kompatibilitas mundur.
Entri plugin
Setiap entri plugin dalam array plugins mendeskripsikan plugin dan di mana menemukannya. Anda dapat menyertakan field apa pun dari skema manifest plugin, seperti description, version, author, commands, dan hooks, ditambah field khusus marketplace ini: source, category, tags, strict, relevance, headers, dan headersHelper.
Field yang diperlukan
| Field | Type | Deskripsi |
|---|---|---|
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). |
source |
string|object | Di mana mengambil plugin (lihat Plugin sources di bawah) |
Field plugin opsional
Field metadata standar:
| Field | Type | Deskripsi |
|---|---|---|
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. |
description |
string | Deskripsi plugin singkat |
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 tidak disematkan oleh field mana pun. Juga bukan plugin dimuat di tempat dari marketplace yang ditambahkan sebagai direktori lokal. Jika tidak diatur di tempat mana pun, versi berasal dari sumber berikutnya dalam version management. |
author |
object | Informasi penulis plugin (name diperlukan; email dan url opsional) |
homepage |
string | URL homepage atau dokumentasi plugin |
repository |
string | URL repositori kode sumber |
license |
string | Identifier lisensi SPDX (misalnya, MIT, Apache-2.0) |
keywords |
array | Tag untuk penemuan dan kategorisasi plugin |
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. |
category |
string | Kategori plugin untuk organisasi |
tags |
array | Tag untuk kemudahan pencarian |
strict |
boolean | Mengontrol apakah plugin.json adalah otoritas untuk definisi komponen (default: true). Lihat Strict mode di bawah. |
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. |
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. |
Baik 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:
- Untuk field yang Anda tetapkan pada entri, pengguna melihat nilai entri, bahkan ketika
plugin.jsonmenetapkan yang berbeda. - Untuk field yang entri biarkan tidak diatur, pengguna melihat nilai
plugin.json.
Sebelum pemasangan, Claude Code hanya dapat membaca plugin.json untuk entri dengan sumber relative-path, 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.
Field konfigurasi komponen:
| Field | Type | Deskripsi |
|---|---|---|
skills |
string|array | Jalur kustom ke direktori skill yang berisi <name>/SKILL.md |
commands |
string|array | Jalur kustom ke file skill .md datar atau direktori |
agents |
string|array | Jalur kustom ke file agent |
hooks |
string|object | Konfigurasi hooks kustom atau jalur ke file hooks |
mcpServers |
string|object | Konfigurasi MCP server atau jalur ke config MCP |
lspServers |
string|object | Konfigurasi LSP server atau jalur ke config LSP |
Field autentikasi archive:
Atur ini ketika entri memiliki archive source di server yang memerlukan kredensial.
| Field | Type | Deskripsi |
|---|---|---|
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. |
headersHelper |
string | Perintah yang mencetak header HTTP untuk unduhan archive entri ini sebagai satu objek JSON, untuk kredensial yang kedaluwarsa. Lihat Authenticate archive downloads. Entri juga harus menetapkan "strict": false. Memerlukan Claude Code v2.1.238 atau lebih baru. |
Plugin sources
Plugin 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.
Claude 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 dimuat di tempat, dan begitu juga relative path source dalam marketplace yang ditambahkan dari direktori lokal. Claude Code juga memasang dependensi paket Node.js yang memenuhi syarat dari plugin ke dalam salinan yang di-cache. Lihat Plugin caching and file resolution untuk cara plugin yang dimuat di tempat dari marketplace direktori lokal mengambil edit Anda.
| Source | Type | Fields | Catatan |
|---|---|---|---|
| Relative path | string (misalnya "./my-plugin") |
none | Direktori lokal dalam repo marketplace. Harus dimulai dengan ./, kecuali Anda menulis bare name di bawah metadata.pluginRoot. Claude Code menyelesaikan jalur relatif terhadap root marketplace, bukan direktori .claude-plugin/ |
github |
object | repo, ref?, sha? |
|
url |
object | url, ref?, sha? |
Sumber URL Git |
git-subdir |
object | url, path, ref?, sha? |
Subdirektori dalam repo git. Mengklon secara sparse untuk meminimalkan bandwidth untuk monorepo |
npm |
object | package, version?, registry? |
Paket npm, diambil dengan klien npm Anda dan dibuka tanpa menjalankan skrip install |
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 |
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 |
Marketplace sources vs plugin sources: Ini adalah konsep berbeda yang mengontrol hal berbeda.
- Marketplace source: di mana mengambil katalog
marketplace.jsonitu sendiri. Diatur ketika pengguna menjalankan/plugin marketplace addatau dalam pengaturanextraKnownMarketplaces. Sumber marketplace berbasis Git mendukungref(branch/tag) tetapi bukansha. - Plugin source: di mana mengambil plugin individual yang tercantum di marketplace. Diatur dalam field
sourcedari setiap entri plugin di dalammarketplace.json. Sumber plugin berbasis Git mendukung baikref(branch/tag) maupunsha(commit yang tepat).
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.
Jenis 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.
Pada 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.
Jika Anda mendistribusikan plugin melalui Organization settings > Plugins, hanya beberapa jenis source yang diizinkan. Lihat Distribute through organization settings.
Jalur relatif
Untuk plugin di repositori yang sama, gunakan jalur yang dimulai dengan ./:
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}
Jalur 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.
Bare name adalah nama direktori tunggal tanpa /, seperti "formatter". Untuk menulis bare names alih-alih jalur ./, atur metadata.pluginRoot 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.
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.
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 lainnya sebagai gantinya. Lihat Troubleshooting untuk detail.
Repositori GitHub
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo"
}
}
Anda dapat menyematkan ke branch, tag, atau commit tertentu:
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
| Field | Type | Deskripsi |
|---|---|---|
repo |
string | Diperlukan. Repositori GitHub dalam format owner/repo |
ref |
string | Opsional. Branch atau tag Git (default ke branch default repositori) |
sha |
string | Opsional. SHA commit git 40-karakter penuh untuk menyematkan ke versi yang tepat |
Repositori Git
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git"
}
}
Anda dapat menyematkan ke branch, tag, atau commit tertentu:
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git",
"ref": "main",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
| Field | Type | Deskripsi |
|---|---|---|
url |
string | Diperlukan. URL repositori git lengkap (https:// atau git@). Akhiran .git opsional, jadi URL Azure DevOps dan AWS CodeCommit tanpa akhiran berfungsi |
ref |
string | Opsional. Branch atau tag Git (default ke branch default repositori) |
sha |
string | Opsional. SHA commit git 40-karakter penuh untuk menyematkan ke versi yang tepat |
Subdirektori Git
Gunakan 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.
{
"name": "my-plugin",
"source": {
"source": "git-subdir",
"url": "https://github.com/acme-corp/monorepo.git",
"path": "tools/claude-plugin"
}
}
Anda dapat menyematkan ke branch, tag, atau commit tertentu:
{
"name": "my-plugin",
"source": {
"source": "git-subdir",
"url": "https://github.com/acme-corp/monorepo.git",
"path": "tools/claude-plugin",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
Field url juga menerima shorthand GitHub (owner/repo) atau URL SSH (git@github.com:owner/repo.git).
| Field | Type | Deskripsi |
|---|---|---|
url |
string | Diperlukan. URL repositori Git, shorthand GitHub owner/repo, atau URL SSH |
path |
string | Diperlukan. Jalur subdirektori dalam repo yang berisi plugin (misalnya, "tools/claude-plugin") |
ref |
string | Opsional. Branch atau tag Git (default ke branch default repositori) |
sha |
string | Opsional. SHA commit git 40-karakter penuh untuk menyematkan ke versi yang tepat |
Paket npm
Sumber 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.
Skrip install paket, seperti preinstall atau postinstall, tidak pernah berjalan, dan dependensinya tidak dipasang selama pengambilan.
Jika paket mengirimkan lockfile yang didukung di samping package.json-nya, Claude Code memasang dependensi paket Node.js 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.
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin"
}
}
Untuk menyematkan ke versi tertentu, tambahkan field version:
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin",
"version": "2.1.0"
}
}
Untuk memasang dari registry pribadi atau internal, tambahkan field registry:
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin",
"version": "^2.0.0",
"registry": "https://npm.example.com"
}
}
| Field | Type | Deskripsi |
|---|---|---|
package |
string | Diperlukan. Nama paket atau paket scoped (misalnya, @org/plugin) |
version |
string | Opsional. Versi atau rentang versi (misalnya, 2.1.0, ^2.0.0, ~1.5.0) |
registry |
string | Opsional. URL registry npm kustom. Default ke registry npm sistem (biasanya npmjs.org) |
Zip archives
Gunakan 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.
Entri ini memasang plugin dari file zip di server artefak:
{
"name": "my-plugin",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip"
}
}
Ketika 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:
my-plugin.zip my-plugin.zip
├── .claude-plugin/ └── my-plugin/
│ └── plugin.json ├── .claude-plugin/
└── commands/ │ └── plugin.json
└── commands/
Claude 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.
Untuk menyematkan file yang tepat, tambahkan field sha256 dengan digest arsip:
{
"name": "my-plugin",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip",
"sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"
}
}
Jika file yang diunduh tidak cocok dengan pin, Claude Code menolak instalasi dan melaporkan Plugin archive integrity check failed.
Sumber arsip menerima field ini:
| Field | Type | Deskripsi |
|---|---|---|
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 |
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 |
Digest sha256 juga berfungsi sebagai versi plugin ketika baik plugin.json maupun entri marketplace tidak mendeklarasikan satu. Lihat 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.
Authenticate archive downloads
Untuk 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. Pada Claude Code v2.1.238 atau lebih baru, Anda dapat mengaturnya pada entri plugin sebagai gantinya, di samping source.
Jika 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.
Tempat yang Anda pilih menentukan unduhan mana yang mendapatkan header dan kapan Claude Code menjalankan perintah:
| Tempat | Unduhan yang mendapatkan header | Kapan Claude Code menjalankan headersHelper yang diatur di sana |
|---|---|---|
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 |
| Entri plugin | Unduhan entri itu saja | Hanya ketika pengguna memasang atau memperbarui plugin itu saja dan menerima perintah |
Di 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.
Add a headersHelper to a plugin entry
Entri 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, entri marketplace adalah definisi lengkap plugin, jadi pengguna dapat meninjau apa yang berisi plugin sebelum menerima perintah:
{
"name": "my-plugin",
"description": "Formatting commands for internal services",
"strict": false,
"commands": "./commands",
"source": {
"source": "archive",
"url": "https://registry.example.com/plugins/my-plugin-2.1.0.zip"
},
"headersHelper": "/opt/bin/mint-registry-token.sh"
}
Untuk memeriksa entri, jalankan claude plugin install my-plugin@your-marketplace. Claude Code menunjukkan perintah dan URL arsip, dan mengunduh zip setelah Anda menerima.
Sebelum 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.
Write the headersHelper command
Baik Anda mengatur headersHelper pada sumber url marketplace atau pada entri plugin, tulis perintah untuk memenuhi persyaratan ini:
- Command text: paling banyak 500 karakter ASCII yang dapat dicetak, tanpa run empat atau lebih spasi.
- Output: cetak satu objek JSON dari nama header dan nilai string di stdout, kemudian keluar 0 dalam 10 detik.
- Shell dan working directory: Claude Code menjalankan perintah melalui
sh, ataucmd.exedi Windows, dari direktori konfigurasi,~/.claudeatauCLAUDE_CONFIG_DIR. Berikan jalur absolut atau perintah diPATH, karena jalur relatif diselesaikan terhadap direktori itu, bukan proyek pengguna. - Variables Claude Code removes: dari lingkungan perintah yang diatur dalam entri
marketplace.jsonatau dalam.claude/settings.jsonatau.claude/settings.local.jsonproyek, Claude Code menghapus setiap variabel yang namanya berisi kata sepertiTOKEN,SECRET,KEY, atauAUTH, termasukANTHROPIC_API_KEY. Claude Code tidak menerapkan penghapusan ini pada perintah yang diatur dalam pengaturan pengguna, file--settings, atau pengaturan yang dikelola. - Variables Claude Code sets:
CLAUDE_CODE_MARKETPLACE_URLdanCLAUDE_CODE_MARKETPLACE_NAMEuntuk perintah sumberurl, danCLAUDE_CODE_PLUGIN_NAMEdanCLAUDE_CODE_PLUGIN_ARCHIVE_URLuntuk perintah entri.CLAUDE_CODE_MARKETPLACE_NAMEtidak diatur pada pengambilan pertama setelah pengguna menambahkan marketplace berdasarkan URL, karena pengambilan itu adalah apa yang menyediakan nama.
Perintah yang mencetak token bearer mencetak objek seperti ini:
{"Authorization": "Bearer eyJhbGciOiJSUzI1NiJ9"}
When Claude Code skips a headersHelper command or drops its output
Claude Code tidak menjalankan perintah headersHelper, atau menjatuhkan header yang berasal dari headers atau dari output perintah, dalam situasi ini:
- 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.
- Marketplace URL doesn't start with
https://: Claude Code tidak menjalankan perintah sumberurlitu dan mengirim hanya header yang tercantum di fieldheaders-nya. - Redirect leaves the origin: ketika unduhan dialihkan dari origin URL arsip, Claude Code menjatuhkan nilai
headersdan output perintah dari sumberurlmarketplace dan entri plugin. - Entry sets a routing or identity header: Claude Code menjatuhkan nama perutean permintaan dan identitas klien seperti
Host,Cookie, danX-Forwarded-*dariheadersentri dan output perintah, dan menyimpan nama autentikasi sepertiAuthorization. Claude Code memfilter setiap entrimarketplace.jsondengan cara ini, dan entri inline settings tergantung file mana yang mendeklarasikannya. - Command set in an
--add-dirdirectory's settings: Claude Code mengabaikannya, pada sumberurldan pada entri plugin inline sama-sama, dan mengirim hanyaheadersfile itu. - Managed settings block the command: mengatur
disableCommandPluginSourcesketruememblokir perintahheadersHelper, danallowManagedHooksOnlyjuga memblokir mereka kecualidisableCommandPluginSourcessecara eksplisitfalse. Di bawah blok mana pun, Claude Code masih menjalankan perintah untuk marketplace yang pengaturan yang dikelola sendiri deklarasikan.
How users accept a headersHelper command
Pengguna 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.
Dalam shell non-interaktif, teruskan --yes untuk menerimanya. Untuk menerima hanya perintah yang run --json sebelumnya ditampilkan, teruskan --accept-command dengan sha256 yang dilaporkan run.
Claude 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.
Installs and updates that refuse the command instead of asking
Pada 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:
- 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. - Background auto-update, or session start for a plugin whose archive was never downloaded: Claude Code mencantumkan plugin di tab
/pluginErrors sehingga pengguna tahu untuk memasang atau memperbarui itu dengan tangan. Pembaruan otomatis yang menemukan entri masih mengiklankan versi yang dipasang mencantumkan tidak ada.
When a marketplace `url` source's command runs
headersHelper sumber url marketplace dideklarasikan dalam file pengaturan, seperti entri 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:
| File pengaturan | Kapan Claude Code menjalankan perintah |
|---|---|
Pengaturan pengguna, file --settings, atau file pengaturan yang dikelola pada mesin |
Tanpa bertanya, termasuk selama penyegaran marketplace latar belakang |
.claude/settings.json atau .claude/settings.local.json proyek |
Hanya setelah pengguna menerima dialog kepercayaan workspace untuk folder itu sendiri. Sesi -p atau SDK tidak dihitung sebagai menerimanya, dan juga tidak kepercayaan yang diberikan ke folder induk |
| Pengaturan yang dikelola server | Hanya setelah pengguna menyetujui pengaturan yang dikirimkan dalam dialog persetujuan keamanan |
Dalam 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.
Untuk entri plugin inline 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.
Command sources
Gunakan 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.
Entri ini memasang plugin dari direktori apa pun yang dicetak alat:
{
"name": "my-plugin",
"source": {
"source": "command",
"command": "my-tool claude-plugin-path"
}
}
Claude 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.
Claude 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:
- Direktori tidak memiliki konten plugin di tingkat atasnya, seperti direktori
.claude-plugin/atau direktoriskills/,commands/,agents/, atauhooks/ - Direktori adalah yang Claude Code dimulai, atau salah satu induknya
- Di Windows, jalur adalah jalur UNC
Sumber perintah menerima field ini:
| Field | Type | Deskripsi |
|---|---|---|
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 |
timeout |
number | Opsional. Jumlah detik keseluruhan untuk menunggu perintah sebelum menyerah (default: 60, maksimum: 600) |
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
Dengan default "mode": "copy", Claude Code menyalin direktori yang dicetak ke cache plugin yang tersimpan dan menurunkan versi plugin 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.
Atur "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 untuk plugin mode link, jadi cetak direktori yang sudah berisi node_modules apa pun yang dibutuhkan plugin.
Simpan 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 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.
Claude Code tidak mendukung mode link di Windows dan menolak untuk memasang plugin mode link di sana. Deklarasikan "mode": "copy" sebagai gantinya.
How users accept the command
Claude Code menjalankan perintah Anda di mesin pengguna, jadi mengikat setiap run ke penerimaan eksplisit pengguna:
- Ketika pengguna memasang plugin dari layar detailnya di
/plugin, atau memasang atau memperbarui denganclaude plugin installatauclaude plugin updatedi terminal interaktif, Claude Code menunjukkan string perintah yang tepat terlebih dahulu dan mencatat perintah yang diterima untuk instalasi itu.claude plugin updateyang dapat dilanjutkan pada penerimaan perintah yang sama menunjukkan tidak ada. - Dalam shell non-interaktif, seperti skrip provisioning, teruskan
--yeskeclaude plugin installatauclaude plugin updateuntuk menerima perintah yang dicetak. Untuk menerima hanya perintah yang run--jsonsebelumnya ditampilkan, teruskan--accept-commanddengansha256yang dilaporkan run. - Setiap jalur lain menjalankan hanya perintah yang sudah diterima pengguna. Ini termasuk pembaruan yang dimulai dari
/plugindan run latar belakang yang dijelaskan dalam 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. - Jika Anda mengubah
commandentri, atau beralihmode-nya, pengguna menyimpan versi yang sudah mereka miliki dan Claude Code berhenti menjalankan perintah kembali. Dalam sesi interaktif, tab/pluginErrors menunjukkan perintah baru sampai pengguna meninjau dan menerimanya dengan menjalankanclaude plugin update <plugin>@<marketplace>.
Administrator dapat memblokir sumber perintah di seluruh organisasi dengan pengaturan yang dikelola disableCommandPluginSources. Jika organisasi mengatur allowManagedHooksOnly, Claude Code memblokir sumber perintah secara default.
When Claude Code re-runs the command
Direktori yang dicetak mencerminkan keadaan alat pada saat perintah berjalan, jadi Claude Code menjalankan perintah lagi pada waktu ini:
- Setiap kali pengguna memasang atau memperbarui plugin
- 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 marketplace
- Pada startup atau di
/reload-plugins, ketika versi yang dipasang plugin yang diaktifkan hilang dari cache plugin
Claude Code melewati dua run latar belakang ketika pengguna mengatur CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC. Instalasi dan pembaruan eksplisit masih menjalankan perintah dengan variabel itu diatur.
Ketika 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. 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.
Entri plugin lanjutan
Contoh ini menunjukkan entri plugin menggunakan banyak field opsional, termasuk jalur kustom untuk commands, agents, hooks, dan MCP servers:
{
"name": "enterprise-tools",
"source": {
"source": "github",
"repo": "company/enterprise-plugin"
},
"description": "Enterprise workflow automation tools",
"version": "2.1.0",
"author": {
"name": "Enterprise Team",
"email": "enterprise@example.com"
},
"homepage": "https://docs.example.com/plugins/enterprise-tools",
"repository": "https://github.com/company/enterprise-plugin",
"license": "MIT",
"keywords": ["enterprise", "workflow", "automation"],
"category": "productivity",
"commands": [
"./commands/core/",
"./commands/enterprise/",
"./commands/experimental/preview.md"
],
"agents": ["./agents/security-reviewer.md", "./agents/compliance-checker.md"],
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
}
]
}
]
},
"mcpServers": {
"enterprise-db": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]
}
},
"strict": false
}
Hal-hal penting untuk diperhatikan:
commandsdanagents: Anda dapat menentukan beberapa direktori atau file individual. Jalur relatif terhadap root plugin dan harus tetap di dalamnya.- Claude Code menolak jalur yang diselesaikan di luar direktori plugin, seperti
./../shared.md, dengan errorpath escapes plugin directory, dan masih memuat plugin tanpa komponen itu
- Claude Code menolak jalur yang diselesaikan di luar direktori plugin, seperti
${CLAUDE_PLUGIN_ROOT}: gunakan variabel ini dalam perintah hook dan config MCP server untuk mereferensikan file dalam direktori instalasi plugin.- Lihat tabel substitusi untuk field config mana yang mensubstitusinya per tipe server
- Untuk dependensi atau state yang harus bertahan pembaruan plugin, gunakan
${CLAUDE_PLUGIN_DATA}sebagai gantinya
strict: false: Karena ini diatur ke false, plugin tidak memerlukanplugin.jsonsendiri. Entri marketplace mendefinisikan semuanya. Lihat Strict mode di bawah.
Secara default, skills plugin dimuat dari direktori skills/ di bawah source-nya. Jalur yang tercantum dalam field skills menambah pemindaian itu:
"skills": ["./skills/", "./extra-skills/"]
Ketika beberapa entri plugin berbagi satu folder skills/ di root marketplace (source: "./"), cantumkan subdirektori spesifik sebagai gantinya sehingga setiap entri hanya memuat skills-nya sendiri:
"source": "./",
"skills": ["./skills/code-review", "./skills/docs"]
Dengan 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.
Strict mode
Field strict mengontrol apakah plugin.json adalah otoritas untuk definisi komponen (skills, agents, hooks, MCP servers, output styles).
| Value | Perilaku |
|---|---|
true (default) |
plugin.json adalah otoritas. Entri marketplace dapat melengkapinya dengan komponen tambahan, dan kedua sumber digabungkan. |
false |
Entri marketplace adalah definisi lengkap. Jika plugin juga memiliki plugin.json yang mendeklarasikan komponen, itu adalah konflik dan plugin gagal dimuat. |
Kapan menggunakan setiap mode:
strict: true: plugin memilikiplugin.jsonsendiri dan mengelola komponennya sendiri. Entri marketplace dapat menambahkan skills atau hooks tambahan di atas. Ini adalah default dan berfungsi untuk sebagian besar plugin.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.
Host dan distribusikan marketplace
Ketika 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, jadi file yang dilacak LFS tiba sebagai file pointer. Jaga file yang dibutuhkan plugin Anda keluar dari LFS.
Host di GitHub (direkomendasikan)
GitHub adalah cara yang direkomendasikan untuk host dan distribusikan marketplace:
- Buat repositori: siapkan repositori baru untuk marketplace Anda
- Tambahkan file marketplace: buat
.claude-plugin/marketplace.jsondengan definisi plugin Anda - Bagikan dengan tim: pengguna menambahkan marketplace Anda dengan
/plugin marketplace add owner/repo
Manfaat: kontrol versi bawaan, pelacakan masalah, dan fitur kolaborasi tim.
Host di layanan git lainnya
Layanan hosting git apa pun berfungsi, seperti GitLab, Bitbucket, dan server yang dihosting sendiri. Pengguna menambahkan dengan URL repositori lengkap:
/plugin marketplace add https://gitlab.com/company/plugins.git
Repositori pribadi
Claude Code mendukung pemasangan plugin dari repositori pribadi. Jika Anda mendistribusikan marketplace Anda melalui Organization 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 untuk sumber plugin mana yang dapat bersifat pribadi.
Perintah yang Anda jalankan
Ketika 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 untuk mengklonnya melalui HTTPS sebagai gantinya.
Pembaruan otomatis latar belakang
Pemeriksaan 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:
- Helper yang dapat menyediakan kredensial yang disimpan tanpa meminta mengautentikasi pemeriksaan. Git Credential Manager, helper Keychain macOS, dan
git-credential-storebekerja dengan cara ini setelah mereka menyimpan kredensial untuk host. - 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.
Ketika 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.
Dua pengaturan membuat marketplace pribadi berperilaku dapat diprediksi:
- Atur
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1untuk 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 updatemasih mengautentikasi dengan kredensial Anda. - Konfigurasikan helper kredensial git, misalnya dengan
gh auth setup-gituntuk GitHub, sehingga pemeriksaan latar belakang dan pengklonaan ulang dapat mengautentikasi tanpa meminta.
Menetapkan 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.
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.
Distribusikan melalui pengaturan organisasi
Jika Anda mendistribusikan plugin melalui Organization settings > Plugins pada paket Team atau Enterprise, aturan sumber ini berlaku:
- Di github.com dan gitlab.com, repositori marketplace harus bersifat pribadi atau internal. Sinkronisasi organisasi membaca repositori melalui koneksi yang cocok dengan hostnya:
- github.com: Claude GitHub App
- Host GitHub Enterprise Server Anda: GitHub Enterprise App organisasi Anda
- gitlab.com atau instance GitLab yang dikelola sendiri Anda: token akses dalam konfigurasi GitLab organisasi Anda untuk host itu
- Setiap sumber plugin harus bertipe
github,url, ataugit-subdir, atau jalur relatif yang dimulai dengan./. Jika Anda membuat daftar plugin berdasarkan nama kosong di bawahmetadata.pluginRoot, sinkronisasi organisasi menolaknya sebagai sumber yang tidak didukung, jadi tuliskan jalurnya, seperti./plugins/deploy-tools. - Sumber plugin dapat bersifat pribadi dalam tiga kasus:
- Sumber github.com yang berbagi pemilik repositori marketplace
- Sumber di host GitHub Enterprise organisasi Anda dengan GHE App yang dipasang di repositori
- Sumber
urlataugit-subdirdi 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.
- 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.
Lihat Manage plugins for your organization untuk alur kerja admin.
Untuk menyertakan plugin pribadi, tempatkan folder plugin di dalam repositori marketplace dan referensikan dengan jalur relatif. Sinkronisasi organisasi mengemas setiap plugin selama distribusi, jadi pengguna tidak pernah memerlukan akses ke repositori sumber terpisah.
Misalnya, entri plugin marketplace.json ini mereferensikan plugin yang Anda komit di plugins/deploy-tools dalam repositori marketplace:
{
"name": "deploy-tools",
"source": "./plugins/deploy-tools"
}
Sinkronkan marketplace yang dihosting GitLab
Untuk menyinkronkan marketplace dari gitlab.com atau instance GitLab yang dikelola sendiri, Owner terlebih dahulu menambahkan konfigurasi GitLab untuk host itu di Organization 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. Lihat Manage plugins for your organization untuk langkah-langkah setup.
Ketika 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.
Jaga executable keluar dari direktori bin tingkat atas
Jangan 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:
- Sinkronisasi marketplace: sinkronisasi organisasi menolak plugin itu dan menyinkronkan sisa marketplace. Pesan kesalahan dimulai dengan
Plugin contains a top-level bin/ directory. - Unggahan langsung: jika Anda mengunggah plugin di Organization settings > Plugins sebagai gantinya, claude.ai menolak unggahan dengan pesan yang sama.
Jaga executable di direktori lain, seperti scripts/, dan referensikan sebagai ${CLAUDE_PLUGIN_ROOT}/scripts/<name> dari skills, hooks, atau konfigurasi server MCP Anda.
Wajibkan marketplace untuk tim Anda
Anda dapat mengonfigurasi repositori Anda sehingga Claude Code menambahkan marketplace Anda untuk anggota tim sekali mereka mempercayai folder proyek, tanpa prompt terpisah. Tambahkan marketplace Anda ke .claude/settings.json:
{
"extraKnownMarketplaces": {
"company-tools": {
"source": {
"source": "github",
"repo": "your-org/claude-plugins"
}
}
}
}
Anda juga dapat menentukan plugin mana yang harus diaktifkan secara default:
{
"enabledPlugins": {
"code-formatter@company-tools": true,
"deployment-tools@company-tools": true
}
}
Untuk opsi konfigurasi lengkap, lihat Plugin settings.
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.
Pra-isi plugin untuk container
Untuk 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.
Untuk 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.
Direktori seed mencerminkan struktur ~/.claude/plugins:
$CLAUDE_CODE_PLUGIN_SEED_DIR/
known_marketplaces.json
marketplaces/<name>/...
cache/<marketplace>/<plugin>/<version>/...
Untuk 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.
Untuk melewati langkah copy, atur CLAUDE_CODE_PLUGIN_CACHE_DIR ke jalur target seed Anda selama build sehingga plugin dipasang langsung ke sana:
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/plugins
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install my-tool@your-plugins
Kemudian atur CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed di lingkungan runtime container Anda sehingga Claude Code membaca dari seed saat startup.
Saat 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.
Detail perilaku:
- Read-only: Claude Code tidak pernah menulis ke direktori seed.
- Auto-updates disabled: marketplace seed tidak auto-update.
- 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 disabledaripada menghapus marketplace. - 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. - Mutasi diblokir: menjalankan
/plugin marketplace removeatau/plugin marketplace updateterhadap marketplace yang dikelola seed gagal dengan panduan untuk meminta administrator Anda memperbarui image seed. - Komposisi dengan pengaturan: jika
extraKnownMarketplacesatauenabledPluginsmendeklarasikan marketplace yang sudah ada di seed, Claude Code menggunakan salinan seed alih-alih mengklon.
Pembatasan marketplace yang dikelola
Untuk organisasi yang memerlukan kontrol ketat atas sumber plugin, administrator dapat membatasi marketplace plugin mana yang diizinkan pengguna untuk tambahkan menggunakan pengaturan strictKnownMarketplaces dalam pengaturan yang dikelola. Untuk juga menolak flag CLI yang sideload plugin, agen, dan server MCP untuk satu kali jalankan, pasangkan dengan disableSideloadFlags. Untuk allowlist marketplace mana yang plugin-nya dapat muncul sebagai saran instalasi kontekstual, atur pluginSuggestionMarketplaces.
strictKnownMarketplaces cocok dengan marketplace tempat plugin berasal, bukan entri di dalamnya, jadi pengguna masih dapat memasang plugin dengan sumber command dari marketplace yang diizinkan. Untuk memblokir sumber command juga, atur disableCommandPluginSources.
Ketika strictKnownMarketplaces dikonfigurasi dalam pengaturan yang dikelola, perilaku pembatasan tergantung pada nilainya:
| Value | Perilaku |
|---|---|
| Tidak terdefinisi (default) | Tidak ada pembatasan. Pengguna dapat menambahkan marketplace apa pun |
Array kosong [] |
Lockdown lengkap. Memblokir setiap sumber marketplace, termasuk marketplace Anthropic resmi |
| Daftar sumber | Allowlist diterapkan. Pengguna hanya dapat menambahkan marketplace yang cocok dengan entri |
Konfigurasi umum
Nonaktifkan semua penambahan marketplace, termasuk marketplace Anthropic resmi:
{
"strictKnownMarketplaces": []
}
Claude Code mengunduh plugin disinkronkan dari claude.ai dari akun Anda daripada dari marketplace, jadi lockdown ini tidak mencakupnya. Untuk menghentikan yang juga, atur syncClaudeAiPlugins ke false dalam pengaturan yang dikelola, atau matikan Skills untuk organisasi Anda di claude.ai.
Izinkan hanya marketplace Anthropic resmi. Pencocokan untuk entri repositori tunggal bersifat tepat, jadi entri ini tidak mencakup varian ref atau path dari repositori yang sama:
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "anthropics/claude-plugins-official"
}
]
}
Dengan 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.
Pendaftaran otomatis tidak mencakup setiap mesin. Paling sering melewatkan:
- Lingkungan non-interaktif yang berjalan sebelum peluncuran interaktif pertama mesin.
- 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.
Di mesin ini, tambahkan marketplace ke extraKnownMarketplaces dalam managed-settings.json yang sama sehingga Claude Code mendaftarkannya secara otomatis, atau jalankan claude plugin marketplace add anthropics/claude-plugins-official.
Izinkan marketplace tertentu saja:
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "acme-corp/approved-plugins"
},
{
"source": "github",
"repo": "acme-corp/security-tools",
"ref": "v2.0"
},
{
"source": "url",
"url": "https://plugins.example.com/marketplace.json"
}
]
}
Izinkan setiap repositori marketplace di bawah organisasi GitHub dengan entri owner-wildcard. Owner wildcards memerlukan Claude Code v2.1.223 atau lebih baru.
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "acme-corp/*"
}
]
}
Izinkan semua marketplace dari server git internal menggunakan pencocokan pola regex pada host. Ini adalah pendekatan yang direkomendasikan untuk GitHub Enterprise Server atau instance GitLab yang dihosting sendiri:
{
"strictKnownMarketplaces": [
{
"source": "hostPattern",
"hostPattern": "^github\\.example\\.com$"
}
]
}
Izinkan marketplace berbasis filesystem dari direktori tertentu menggunakan pencocokan pola regex pada jalur:
{
"strictKnownMarketplaces": [
{
"source": "pathPattern",
"pathPattern": "^/opt/approved/"
}
]
}
Gunakan ".*" sebagai pathPattern untuk mengizinkan jalur filesystem apa pun sambil tetap mengontrol sumber jaringan dengan hostPattern.
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 dalam managed-settings.json yang sama.
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.
Cara pembatasan bekerja
Pembatasan 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.
Tempat kedua daftar diterapkan tergantung pada tempat Anda menetapkannya:
- Konsol admin claude.ai: Claude Code menerapkan kedua daftar dalam sesi yang membaca pengaturan yang dikelola server. 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. 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.
- 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.
Untuk 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.
Ketika pengguna menambahkan URL repositori https:// yang Claude Code klon daripada ambil, 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.
Allowlist menggunakan pencocokan tepat untuk sebagian besar jenis sumber, terlepas dari entri github owner-wildcard. Agar marketplace diizinkan, semua field yang ditentukan harus cocok:
- Untuk sumber GitHub:
repodiperlukan, baik menamai satu repositori atau menggunakan bentuk owner-wildcardowner/*untuk mencakup setiap repositori di bawah pemilik itu. Untuk cara entri wildcard cocok, termasuk aturan kasus, lihat Owner wildcards. Untuk entri repositori tunggal,refharus cocok tepat atau tidak ada di kedua sumber marketplace dan entri allowlist, dan aturan yang sama berlaku untukpath - Untuk sumber URL: URL lengkap harus cocok secara tepat
- Untuk sumber
hostPattern: host marketplace dicocokkan dengan pola regex - Untuk sumber
pathPattern: jalur filesystem marketplace dicocokkan dengan pola regex
Pencocokan 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.
Marketplace yang dihosting di 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.
Karena strictKnownMarketplaces diatur dalam pengaturan yang dikelola, konfigurasi pengguna individual dan proyek tidak dapat mengganti pembatasan ini.
Untuk detail konfigurasi lengkap termasuk semua jenis sumber yang didukung dan perbandingan dengan extraKnownMarketplaces, lihat referensi strictKnownMarketplaces.
Resolusi versi dan saluran rilis
Versi 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 untuk urutan resolusi lengkap, termasuk sumber archive.
Menetapkan version menyematkan plugin untuk setiap jenis sumber kecuali command, yang versinya selalu menyertakan hash dari apa yang dihasilkan perintah. Jika plugin dimuat di tempat 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.
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.
Siapkan saluran rilis
Untuk 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:
- Terapkan pengaturan yang dikelola endpoint terpisah, seperti file pengaturan yang dikelola atau profil MDM, ke perangkat setiap grup. Cara Claude Code menggabungkan sumber yang dikelola mengatakan apakah file per-grup atau profil berlaku di perangkat yang juga memiliki sumber organisasi-lebar.
- Tentukan satu kebijakan gateway aplikasi Claude per grup. Gateway menerapkan kebijakan pertama yang aturan kecocokannya sesuai dengan pengguna, jadi urutkan kebijakan sehingga setiap pengguna mencapai kebijakan grup mereka.
extraKnownMarketplaceskebijakan grup menggantikan peta kebijakan catch-all daripada menggabungkan dengannya, jadi daftarkan setiap marketplace yang dibutuhkan grup dalam kebijakan grup, bukan hanya marketplace salurannya.
Pengaturan yang dikelola server dari konsol admin berlaku untuk setiap pengguna dalam organisasi Anda, jadi mereka tidak dapat membawa penugasan per-grup.
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.
Contoh
{
"name": "stable-tools",
"plugins": [
{
"name": "code-formatter",
"source": {
"source": "github",
"repo": "acme-corp/code-formatter",
"ref": "stable"
}
}
]
}
{
"name": "latest-tools",
"plugins": [
{
"name": "code-formatter",
"source": {
"source": "github",
"repo": "acme-corp/code-formatter",
"ref": "latest"
}
}
]
}
Tetapkan saluran ke grup pengguna
Tetapkan setiap marketplace ke grup pengguna melalui pengaturan yang dikelola endpoint per-grup atau kebijakan gateway yang dijelaskan di bawah Siapkan saluran rilis. Misalnya, grup stabil menerima:
{
"extraKnownMarketplaces": {
"stable-tools": {
"source": {
"source": "github",
"repo": "acme-corp/stable-tools"
}
}
}
}
Grup early-access menerima latest-tools sebagai gantinya:
{
"extraKnownMarketplaces": {
"latest-tools": {
"source": {
"source": "github",
"repo": "acme-corp/latest-tools"
}
}
}
}
Sematkan versi dependensi
Plugin dapat membatasi dependensinya ke rentang semver sehingga pembaruan dependensi tidak merusak plugin yang bergantung. Lihat Batasi versi dependensi plugin untuk konvensi git-tag {plugin-name}--v{version}, sintaks rentang, dan bagaimana beberapa batasan pada dependensi yang sama digabungkan.
Ubah nama atau hapus plugin
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 dan jaga name tetap tidak berubah.
Jika 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:
{
"name": "acme-tools",
"owner": { "name": "Acme" },
"plugins": [
{ "name": "code-formatter", "source": "./plugins/code-formatter" }
],
"renames": {
"formatter": "code-formatter",
"legacy-linter": null
}
}
Ketika pengguna memulai Claude Code dengan nama lama masih dalam pengaturan mereka, Claude Code mengikuti peta renames:
- 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 keduaenabledPluginsdanpluginConfigs, sehingga pemberitahuan muncul sekali. - Untuk entri
null, Claude Code menghapus kunci lama dan pemberitahuan melaporkan bahwa plugin dihapus dari marketplace. - Jika plugin yang diubah nama menggunakan sumber jarak jauh seperti
githubataunpm, Claude Code melaporkanplugin-cache-misssetelah pengubahan nama dan pengguna harus menjalankan/plugin installsekali untuk mengambilnya dengan nama baru.
Perlakukan 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.
Jalankan 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.
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.
Versi Claude Code sebelumnya mengabaikan field renames dan melaporkan plugin-not-found untuk nama lama.
Validasi dan pengujian
Uji 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 sebelum Anda menerbitkan versi baru.
Dari direktori marketplace Anda, validasi sintaks JSON:
claude plugin validate .
Atau dari dalam Claude Code:
/plugin validate .
Tambahkan marketplace untuk pengujian:
/plugin marketplace add ./path/to/marketplace
Pasang plugin uji untuk memverifikasi semuanya berfungsi:
/plugin install test-plugin@marketplace-name
Untuk alur kerja pengujian plugin lengkap, lihat Uji plugin Anda secara lokal. Untuk troubleshooting teknis, lihat Plugins reference.
Kelola marketplace dari CLI
Claude Code menyediakan subperintah claude plugin marketplace non-interaktif untuk scripting dan otomasi. Ini setara dengan perintah /plugin marketplace yang tersedia dalam sesi interaktif.
Plugin marketplace add
Tambahkan marketplace dari repositori GitHub, URL git, URL jarak jauh, atau jalur lokal.
claude plugin marketplace add <source> [options]
Argumen:
<source>: Shorthand GitHubowner/repo, URL git, URL jarak jauh ke filemarketplace.json, atau jalur direktori lokal. Untuk menyematkan ke branch atau tag, tambahkan@refke shorthand GitHub atau#refke URL git
URL 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.
Opsi:
| Opsi | Deskripsi | Default |
|---|---|---|
--scope <scope> |
Di mana mendeklarasikan marketplace: user, project, atau local. Lihat Plugin installation scopes |
user |
--sparse <paths...> |
Batasi checkout ke direktori tertentu melalui git sparse-checkout. Berguna untuk monorepo | |
--claudeai |
Baca argumen sebagai nama marketplace yang dihosting di claude.ai alih-alih sumber. Memerlukan Claude Code v2.1.273 atau lebih baru |
Tambahkan marketplace dari GitHub menggunakan shorthand owner/repo:
claude plugin marketplace add acme-corp/claude-plugins
Sematkan ke branch atau tag tertentu dengan @ref:
claude plugin marketplace add acme-corp/claude-plugins@v2.0
Tambahkan dari URL git di host non-GitHub:
claude plugin marketplace add https://gitlab.example.com/team/plugins.git
Tambahkan dari URL jarak jauh yang melayani file marketplace.json secara langsung:
claude plugin marketplace add https://example.com/marketplace.json
Tambahkan dari direktori lokal untuk pengujian:
claude plugin marketplace add ./my-marketplace
Deklarasikan marketplace di scope proyek sehingga dibagikan dengan tim Anda melalui .claude/settings.json:
claude plugin marketplace add acme-corp/claude-plugins --scope project
Untuk monorepo, batasi checkout ke direktori yang berisi konten plugin:
claude plugin marketplace add acme-corp/monorepo --sparse .claude-plugin plugins
Tambahkan marketplace yang dihosting di claude.ai berdasarkan nama yang dicetak di bagian From claude.ai: dari claude plugin marketplace list:
claude plugin marketplace add --claudeai claudeai-organization-library
Dengan --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.
Plugin marketplace list
Daftar semua marketplace yang dikonfigurasi.
claude plugin marketplace list [options]
Opsi:
| Opsi | Deskripsi |
|---|---|
--json |
Output sebagai JSON |
Dengan --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.
Marketplace claude.ai yang ditambahkan tidak memiliki clone lokal, jadi entrinya membawa pengidentifikasi claude.ai-nya, marketplaceId dan organizationUuid, sebagai pengganti installLocation.
Dalam sesi terminal di mana plugin disinkronkan dari akun claude.ai Anda, 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. Output --json hanya mencakup marketplace yang dikonfigurasi dan meninggalkan bagian tersebut. Memerlukan Claude Code v2.1.273 atau lebih baru.
Plugin marketplace remove
Hapus marketplace yang dikonfigurasi. Alias rm juga diterima.
claude plugin marketplace remove <name> [options]
Argumen:
<name>: nama marketplace untuk dihapus, seperti yang ditunjukkan olehclaude plugin marketplace list. Ini adalahnamedarimarketplace.json, bukan sumber yang Anda teruskan keadd
Opsi:
| Opsi | Deskripsi | Default |
|---|---|---|
--scope <scope> |
Batasi penghapusan ke scope pengaturan tunggal: user, project, atau local. Lihat 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) |
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.
Plugin marketplace update
Segarkan 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.
claude plugin marketplace update [name]
Argumen:
[name]: nama marketplace untuk diperbarui, seperti yang ditunjukkan olehclaude plugin marketplace list. Memperbarui semua marketplace jika dihilangkan
Baik 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.
Troubleshooting
Marketplace tidak memuat
Gejala: Tidak dapat menambahkan marketplace atau melihat plugin darinya
Solusi:
- Verifikasi URL marketplace dapat diakses
- Periksa bahwa
.claude-plugin/marketplace.jsonada di jalur yang ditentukan - 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 - Untuk repositori pribadi, konfirmasi Anda memiliki izin akses
Kesalahan validasi marketplace
Jalankan 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 →.
Mulai dari Claude Code v2.1.196, pass per-entri juga:
- mencakup plugin yang
source-nya adalah. - berjalan ketika
marketplace.jsonberada di luar direktori.claude-plugin, menyelesaikan sumber terhadap direktori file itu sendiri - melaporkan masalah setiap entri bahkan ketika bagian lain dari file memiliki kesalahan skema
Versi sebelumnya melewati plugin di root marketplace dan hanya turun dari .claude-plugin/marketplace.json.
Dari 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. Tabel di bawah mencantumkan kesalahan paling umum dari direktori marketplace, dengan penyebab dan perbaikan untuk masing-masing:
| Kesalahan | Penyebab | Solusi |
|---|---|---|
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 |
Invalid JSON syntax: Unexpected token... |
Kesalahan sintaks JSON dalam marketplace.json | Periksa koma yang hilang, koma ekstra, atau string yang tidak dikutip |
Duplicate plugin name "x" found in marketplace |
Dua plugin berbagi nama yang sama | Berikan setiap plugin nilai name yang unik |
plugins[0].source: Path contains ".." |
Segmen jalur sumber adalah .. |
Gunakan jalur relatif terhadap root marketplace tanpa segmen ... Lihat Relative paths |
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 |
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 |
Peringatan (non-blocking):
Marketplace has no plugins defined: tambahkan setidaknya satu plugin ke arraypluginsNo marketplace description provided: tambahkandescriptiontingkat atas untuk membantu pengguna memahami marketplace AndaPlugin 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.Marketplace name "x" is reserved in Claude Desktop: marketplace dinamaiorg,org-provisioned, atauunknown, 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 validatetidak menjalankan pemeriksaan ini.Marketplace name "x" is not accepted by Claude DesktopatauPlugin 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 validatetidak menjalankan pemeriksaan ini.
Validate a plugin or a directory without a manifest
Untuk 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.
Pick the directory to name
Claude 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:
| Untuk memeriksa | Jalankan | Claude Code memeriksa |
|---|---|---|
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 |
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 |
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 |
| Tiga direktori proyek sekaligus | claude plugin validate .claude, atau root proyek ketika tidak memiliki manifest .claude-plugin/ |
.claude/skills, .claude/agents, dan .claude/commands |
| Direktori tingkat pengguna Anda | claude plugin validate ~/.claude |
~/.claude/skills, ~/.claude/agents, dan ~/.claude/commands |
Check a plugin whose skill is its root `SKILL.md`
Ketika 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:
- Beri nama direktori
skillsitu untuk memeriksa rootSKILL.mdplugin. - Beri nama direktori plugin untuk memeriksa sisanya.
Ketika plugin berada di bawah nama lain, seperti plugins/, run direktori skills tidak tersedia, dan tidak ada run yang memeriksa root SKILL.md-nya.
Check files behind symlinks
Ketika 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:
- Direktori
skills,agents, ataucommandsyang tertaut di bawah root plugin atau.claude: Claude Code memperingatkan bahwa tidak ada yang di dalamnya yang dibaca. - Entri tertaut di dalam direktori
skills,agents, ataucommands: Claude Code melewatinya dan memperingatkan, per direktori, berapa banyak entri yang dilewatinya yang akan dimuat sesi. - Direktori
skills,agents, ataucommandsyang Anda beri nama adalah symlink itu sendiri, atau direktori.claudeinduknya adalah: Claude Code melaporkan kesalahan dan tidak memeriksa apa pun di dalamnya. Beri nama direktori nyata sebagai gantinya.
Dalam dua kasus skill, run berlalu dengan peringatan. Untuk memeriksa file tertaut, jalankan lagi dan beri nama direktori yang menahannya secara langsung:
- Plugin yang direktori
skills-nya tertaut ke skill plugin sibling: beri nama direktori plugin sibling. - Entri skill tertaut dalam
~/.claude/skillsatau.claude/skills: Claude Code mengikuti entri dalam sesi. Untuk memeriksanya, beri nama direktori bernamaskillsyang menahannya folder nyata.
Read the validation results
Run yang bersih berakhir dengan Validation passed.
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.
Dua dari kesalahan yang dilaporkan Claude Code dari run ini, dengan perbaikan untuk masing-masing:
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 fileInvalid JSON syntax: ...padahooks/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
Dalam run plugin, Claude Code juga memperingatkan tentang CLAUDE.md di root plugin. Untuk jalur yang Anda atur melalui component path fields dalam plugin.json, Claude Code memeriksa bahwa setiap jalur ada tetapi tidak membaca file di sana.
Kegagalan instalasi plugin
Gejala: Marketplace muncul tetapi instalasi plugin gagal
Solusi:
- Verifikasi URL sumber plugin dapat diakses
- Periksa bahwa direktori plugin berisi file yang diperlukan
- Untuk sumber GitHub, pastikan repositori publik atau Anda memiliki akses
- Uji sumber plugin secara manual dengan mengklon/mengunduh
- Jika sumber menentukan baik
refmaupunsha, 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,refmasih harus ada dan commit yang ditentukan harus dapat dijangkau darinya. Jika instalasi masih gagal, konfirmasi commit yang ditentukan masih ada di repositori
Autentikasi repositori pribadi gagal
Gejala: Kesalahan autentikasi saat memasang plugin dari repositori pribadi
Solusi:
Untuk instalasi manual dan pembaruan:
- Verifikasi Anda diautentikasi dengan penyedia git Anda (misalnya, jalankan
gh auth statusuntuk GitHub) - Periksa bahwa helper kredensial Anda dikonfigurasi:
git config --global credential.helper - 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, jalankangh auth setup-git, dan untuk remote SSH, muat kunci Anda kessh-agent
Untuk pembaruan otomatis latar belakang:
- 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-agentjuga diautentikasi - 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, kemudiangh auth setup-git - 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
- Atur
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1untuk menyimpan klon yang ada tanpa mencoba re-clone ketika pemeriksaan latar belakang tidak dapat menjangkau atau diautentikasi ke remote - Jika re-clone time out pada repositori besar, tingkatkan batas dengan
CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS - Atau perbarui marketplace pribadi secara manual dengan
/plugin marketplace update <name>, yang menggunakan kredensial Anda
Sebelum v2.1.280, pemeriksaan latar belakang berjalan tanpa helper kredensial git Anda dan tidak dapat diautentikasi ke repositori pribadi melalui HTTPS.
Pembaruan marketplace gagal di lingkungan offline
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.
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.
Penyegaran 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.
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:
export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1
Untuk deployment yang sepenuhnya offline di mana repositori tidak akan pernah dapat dijangkau, gunakan CLAUDE_CODE_PLUGIN_SEED_DIR untuk pra-isi direktori plugin saat waktu build sebagai gantinya.
Operasi Git time out
Gejala: Instalasi plugin atau pembaruan marketplace gagal dengan kesalahan timeout seperti Git clone timed out after 120s.
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.
Solusi: Tingkatkan timeout menggunakan variabel lingkungan CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS. Nilainya dalam milidetik:
export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000 # 5 minutes
Plugin dengan jalur relatif gagal di marketplace berbasis URL
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.
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.
Solusi:
- Gunakan sumber eksternal: ubah entri plugin ke plugin source apa pun selain jalur relatif:
{ "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } } - 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.
File tidak ditemukan setelah instalasi
Gejala: Plugin dipasang tetapi referensi ke file gagal, terutama file di luar direktori plugin
Penyebab: Claude Code menyalin plugin yang dipasang ke direktori cache, kecuali plugin dimuat di tempat. command source dalam link mode dimuat di tempat, begitu juga relative path source 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.
Solusi: Lihat Plugin caching and file resolution untuk solusi termasuk symlink dan restruktur direktori.
Untuk alat debugging tambahan dan masalah umum, lihat Debugging and development tools.
Lihat juga
- Temukan dan pasang plugin yang sudah dibuat - Memasang plugin dari marketplace yang ada
- Plugins - Membuat plugin Anda sendiri
- Plugins reference - Spesifikasi teknis lengkap dan skema
- Plugin settings - Opsi konfigurasi plugin
- strictKnownMarketplaces reference - Pembatasan marketplace yang dikelola