Referensi Marketplace
Referensi lengkap untuk field marketplace.json, entri plugin, dan objek sumber plugin dan marketplace, dengan tempat masing-masing valid.
marketplace.json adalah file yang mendefinisikan marketplace plugin. File ini berisi nama marketplace, pemiliknya, dan satu entri per plugin. Sumber plugin setiap entri mengatakan di mana Claude Code mengambil plugin tersebut.
Sumber marketplace adalah objek terpisah yang mengatakan di mana Claude Code mengambil file marketplace itu sendiri. Anda menulis satu di pengaturan, atau Claude Code membangunnya ketika Anda menjalankan claude plugin marketplace add.
Referensi ini untuk pengelola marketplace yang membutuhkan nama atau nilai field yang tepat, dan untuk administrator yang perlu mengetahui nilai source mana yang valid dalam extraKnownMarketplaces, strictKnownMarketplaces, dan blockedMarketplaces.
[!NOTE]
Kasus-kasus ini tercakup di halaman lain:
- Membangun atau menghosting marketplace: lihat Buat marketplace dan Host dan kelola marketplace
- Resep allowlist dan blocklist: lihat Kelola plugin untuk organisasi Anda
Temukan bagian untuk apa yang Anda tulis atau baca:
- File marketplace: Field tingkat atas dan Entri plugin
sourceentri: Sumber plugin- Objek
sourcedi pengaturan: Sumber marketplace - Output dari
claude plugin validate <path>: Pesan validasi, yang memetakan setiap pesan ke field yang disebutnya
File marketplace
Simpan file marketplace di .claude-plugin/marketplace.json di direktori marketplace Anda. Jika Anda menyimpan file di tempat lain di repositori, pengguna harus mendeklarasikan marketplace di extraKnownMarketplaces dengan path diatur pada sumbernya, karena claude plugin marketplace add tidak memiliki opsi untuk itu.
Direktori yang berisi .claude-plugin/ disebut akar marketplace, dan setiap sumber plugin relatif diselesaikan darinya, bukan dari .claude-plugin/.
Setiap pengguna mendaftarkan satu marketplace per name, jadi pengguna tidak dapat memiliki dua marketplace dengan nama yang sama terdaftar sekaligus.
Claude Code mengabaikan kunci tingkat atas yang tidak dikenal atau kunci entri plugin daripada menolaknya, jadi typo dimuat diam-diam. claude plugin validate melaporkan setiap kunci yang tidak dikenal sebagai peringatan.
Nama yang dicadangkan
Anda tidak dapat memberikan marketplace Anda salah satu nama berikut:
- Nama marketplace resmi:
claude-code-marketplace,claude-code-plugins,claude-plugins-official,anthropic-marketplace,anthropic-plugins,agent-skills,anthropic-agent-skills,life-sciences,knowledge-work-plugins,claude-for-legal,claude-for-financial-services,financial-services-plugins,first-party-plugins, danclaude-tag-plugins. Dicadangkan kecuali marketplace berasal darigithubataugitsumber marketplace di bawahgithub.com/anthropics/. - Nama marketplace komunitas:
claude-community,claude-plugins-community, danhealthcare. Dicadangkan di bawah aturan yang sama dengan nama resmi. - Nama direktori plugin:
anthropic-plugin-directorydanclaude-plugin-directory. Dicadangkan di bawah aturan yang sama dengan nama resmi. - Nama yang menyamar sebagai marketplace resmi: nama seperti
official-claude-pluginsatauclaude-plugins-v2, dan nama apa pun yang berisi karakter non-ASCII. Kesalahannya adalahMarketplace name impersonates an official Anthropic/Claude marketplace. Karakter kontrol atau pemformatan bidirectional dalam nama juga melaporkanMarketplace name cannot contain control or bidirectional-formatting characters. Marketplace yang sudah terdaftar di bawah nama seperti itu berhenti dimuat, bersama dengan pluginnya. - Ejaan lain dari nama yang dicadangkan: nama yang berbeda dari nama yang dicadangkan hanya dengan titik di akhir, atau dengan simbol selain garis bawah sebagai pengganti tanda hubung, jadi
claude.code.pluginsdihitung sebagaiclaude-code-plugins. Menambahkan marketplace gagal denganis another spelling of "<reserved>", a reserved marketplace name, dan marketplace yang sudah terdaftar dengan nama seperti itu berhenti dimuat. Pemeriksaan ini memerlukan Claude Code v2.1.280 atau lebih baru. - Nama yang Claude Code gunakan untuk plugin yang tidak berasal dari marketplace:
inlineuntuk plugin yang dimuat dengan--plugin-dir,builtinuntuk plugin bawaan,skills-diruntuk plugin yang dimuat otomatis dari.claude/skills/, dansynceduntuk plugin yang disinkronkan dari akun claude.ai Anda.claude-plugin-testjuga dicadangkan.skills-dirjuga muncul sebagai{"source": "skills-dir"}dalamstrictKnownMarketplacesdanblockedMarketplaces, dijelaskan di bawah Nilai sumber yang valid hanya dalam daftar kebijakan. npm,pip,uv,cargo,github, dangh: dicadangkan dalam huruf apa pun. Pemeriksaan ini memerlukan Claude Code v2.1.275 atau lebih baru.- Nama anggota yang dimiliki setiap objek JavaScript:
constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString, danvalueOf.claude plugin marketplace addmenolak marketplace yang menggunakan salah satunya denganClaude Code reserves this name and cannot register a marketplace under it. Pemeriksaan ini memerlukan Claude Code v2.1.296 atau lebih baru. - Nama yang dimulai dengan
claudeai-: dicadangkan untuk marketplace yang dihosting di claude.ai.claude plugin marketplace addmenolak marketplace lain apa pun yang menggunakannya denganCannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai. - Folder unduhan dari marketplace GitHub yang terdaftar,
<owner>-<repo>: Claude Code mengunduh marketplace yang ditambahkan dari sumbergithubsepertiacme/x-toolsmelalui folder bernamaacme-x-tools, apa punnamemilik marketplace tersebut. Selama marketplace tersebut terdaftar dengan nama selainacme-x-tools,claude plugin marketplace addmenolak marketplace lain yang bernamaacme-x-toolssetelah mengunduhnya, dan melaporkanCan't use the marketplace name "acme-x-tools". Pemeriksaan ini memerlukan Claude Code v2.1.290 atau lebih baru.
Ketika marketplace yang terdaftar berhenti dimuat karena namanya meniru nama resmi, claude plugin list dan /plugin melaporkan Claude Code refuses the marketplace name "<name>". Pesan tersebut memberi tahu Anda untuk menghapus marketplace. Menghapusnya juga mencopot plugin-nya dan menghapus data, opsi, dan secret-nya. Pesan penolakan bernama ini memerlukan Claude Code v2.1.282 atau lebih baru.
Jika file pengaturan mendeklarasikan marketplace secara inline, pesan tersebut memberi tahu Anda untuk mengganti nama entrinya sebelum Anda menghapus nama lama. Untuk langkah-langkahnya, lihat Claude Code refuses the marketplace name. Pesan tersebut mencantumkan langkah-langkah ini di Claude Code v2.1.292 atau lebih baru.
Field tingkat atas
Tabel mencantumkan setiap kunci yang Claude Code baca dari marketplace.json. name, owner, dan plugins diperlukan.
| Field | Tipe | Deskripsi |
|---|---|---|
name |
string | Pengenal marketplace: huruf, digit, ., _, dan -, dimulai dengan huruf atau digit, dan tidak ada ... claude plugin validate gagal untuk nama lain, karena Claude Code tidak dapat memasang plugin dari marketplace yang menggunakan nama tersebut. Pengguna mengetik nama ini setelah @ dalam ID plugin seperti my-plugin@my-marketplace ketika mereka memasang plugin. Lihat Nama yang dicadangkan |
owner |
object | Informasi pengelola. name diperlukan; email dan url opsional |
plugins |
array | Entri plugin. Setiap entri divalidasi sendiri, jadi satu entri yang tidak valid tidak gagal marketplace |
$schema |
string | URL JSON Schema untuk pelengkapan otomatis editor. Diabaikan saat waktu muat |
description |
string | Deskripsi marketplace yang ditampilkan kepada pengguna. claude plugin validate memperingatkan ketika hilang |
version |
string | Versi manifest marketplace |
metadata.description, metadata.version |
string | Lokasi alternatif untuk description dan version |
metadata.pluginRoot |
string | Direktori yang nama sumber plugin bare diselesaikan di bawahnya. Lihat Sumber plugin jalur relatif. Memerlukan Claude Code v2.1.239 atau lebih baru |
forceRemoveDeletedPlugins |
boolean | Ketika true, plugin yang Anda hapus dari plugins dihapus di mesin pengguna. Lihat Host dan kelola marketplace |
allowCrossMarketplaceDependenciesOn |
array of strings | Nama marketplace yang plugin-nya dapat dipasang sebagai dependensi plugin marketplace ini. Ketika Anda memasang plugin, hanya daftar di marketplace plugin itu sendiri yang berlaku, untuk seluruh rantai dependensinya. Lihat Dependensi plugin |
renames |
object | Peta dari name plugin sebelumnya ke nama saat ini, atau ke null untuk plugin yang Anda hapus. Lihat Host dan kelola marketplace |
Entri plugin
Setiap objek dalam array plugins tingkat atas dari marketplace.json memberi nama plugin dan menunjukkan di mana mengambilnya. name dan source diperlukan.
Selain field daftar direktori, sebuah entri juga menerima setiap field plugin.json, seperti description, version, author, commands, dan hooks. Untuk mengetahui kapan field tersebut berlaku, lihat Bagaimana entri menggabungkan dengan plugin.json.
Tabel mencantumkan field entri sendiri dan field manifest yang maknanya berubah dalam entri.
| Field | Type | Description |
|---|---|---|
name |
string | Pengidentifikasi plugin: huruf, digit, ., _, dan -, dimulai dengan huruf atau digit. claude plugin validate gagal untuk nama lain, yang tidak dapat diinstal oleh Claude Code. Pengguna mengetiknya sebelum @ saat mereka menginstal, bahkan ketika plugin.json plugin sendiri menetapkan name yang berbeda |
source |
string or object | Di mana mengambil plugin. Lihat Sumber plugin |
description |
string | Ditampilkan dalam daftar dan detail /plugin |
version |
string | String versi untuk plugin. Ketika plugin.json juga menetapkan version, plugin.json diutamakan dan claude plugin validate memberikan peringatan. Lihat Referensi pemuatan plugin |
category |
string | Kategori bentuk bebas untuk mengorganisir katalog |
tags |
array of strings | Tag bentuk bebas untuk pencarian |
strict |
boolean | Default true. Apakah plugin.json adalah sumber definitif untuk komponen plugin. Lihat Mode ketat |
relevance |
object | Sinyal yang memberi tahu Claude Code kapan menyarankan plugin. Lihat Rekomendasikan plugin untuk organisasi Anda |
dependencies |
array | Plugin yang harus diaktifkan agar plugin ini berfungsi. Setiap item adalah "name", "name@marketplace", atau objek. Lihat Dependensi plugin |
defaultEnabled |
boolean | Default true. Apakah plugin dimulai diaktifkan ketika pengguna belum menetapkannya dalam enabledPlugins. Nilai entri diutamakan daripada plugin.json |
displayName |
string | Nama yang dapat dibaca manusia ditampilkan di UI. Ketika baik entri maupun plugin.json plugin tidak menetapkan satu, pengguna melihat name plugin |
metadata |
object | Objek bentuk bebas untuk field Anda sendiri. Claude Code tidak membacanya |
headers |
object | Header HTTP yang dikirim Claude Code saat mengunduh arsip entri ini. Header yang ditetapkan di sini menggantikan header dengan nama yang sama dari headers sumber marketplace. Memerlukan Claude Code v2.1.238 atau lebih baru |
headersHelper |
string | Perintah yang mencetak header unduhan arsip entri ini sebagai satu objek JSON, untuk kredensial yang kedaluwarsa. Entri juga harus menetapkan "strict": false. Memerlukan Claude Code v2.1.238 atau lebih baru. Lihat Autentikasi unduhan arsip |
Bagaimana entri menggabungkan dengan plugin.json
Field entri berlaku berbeda untuk plugin yang diambil yang memiliki .claude-plugin/plugin.json sendiri dan untuk yang tidak:
- Tidak ada
plugin.json: entri adalah manifest terlepas daristrict. Setiap field manifest yang diterima entri berlaku, termasukmcpServers,lspServers,userConfig, danchannels. plugin.jsonada:plugin.jsonadalah manifest. Mode ketat memutuskan apakah enam field komponen entri,commands,agents,skills,hooks,outputStyles, danthemes, digabungkan dengannya atau ditolak sebagai konflik. EntrymcpServers,lspServers,userConfig, danchannelstidak berlaku. Deklarasikan mereka dalamplugin.json.
Hooks dalam entri
Tulis entry hooks sebagai objek inline yang memetakan nama event hook ke array matcher. Jika Anda menulis jalur file atau array sebagai gantinya, claude plugin validate menerimanya. Hook tersebut tidak akan pernah berjalan, dan Claude Code melaporkan error not yet supported in a marketplace entry untuk plugin. Letakkan hook berbasis file dalam hooks/hooks.json plugin sendiri atau plugin.json.
Field tampilan
Baik entri maupun plugin.json plugin sendiri dapat menetapkan field tampilan displayName, description, author, homepage, repository, license, dan keywords. Pengguna melihat nilai-nilai ini dalam daftar dan detail plugin, sebelum dan sesudah instalasi:
- Untuk field yang Anda tetapkan pada entri, pengguna melihat nilai entri, bahkan ketika
plugin.jsonmenetapkan yang berbeda. - Untuk field yang entri biarkan tidak ditetapkan, pengguna melihat nilai
plugin.json.
Sebelum instalasi, Claude Code hanya dapat membaca plugin.json untuk entri dengan sumber jalur relatif, yang file pluginnya berada di dalam marketplace itu sendiri. Untuk entri dengan jenis sumber lain apa pun, pengguna hanya melihat field entri sendiri sampai mereka menginstal plugin.
Mode ketat
strict memutuskan apa yang terjadi ketika plugin yang diambil memiliki plugin.json sendiri dan entri juga mendeklarasikan salah satu dari field komponen: commands, agents, skills, hooks, outputStyles, atau themes. Dengan strict: true, default, Claude Code menambahkan field komponen entri ke plugin.json, kecuali hooks, yang matcher-nya menggantikan manifest per event. Dengan strict: false, entri yang mendeklarasikan field komponen apa pun adalah konflik, dan plugin gagal dimuat. Tabel menunjukkan setiap kombinasi strict, plugin.json, dan field komponen entri.
strict |
plugin.json |
Entry component fields | Result |
|---|---|---|---|
| any | absent | any | Entri adalah manifest |
true, default |
present | any | plugin.json adalah otoritas. Claude Code menambahkan field komponen entri ke dalamnya, kecuali hooks, yang matcher-nya menggantikan manifest per event |
false |
present | none | plugin.json adalah manifest, seperti dengan true |
false |
present | one or more | Konflik. Plugin gagal dimuat dengan Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components |
Sumber plugin
source pada entri plugin menyatakan dari mana Claude Code mengambil plugin tersebut. Nilainya berupa string path relatif atau objek yang key source-nya sendiri menyebutkan tipenya, sehingga sebuah entri terlihat seperti "source": { "source": "github", "repo": "your-org/formatter" }.
Tabel berikut mencantumkan setiap tipe sumber plugin beserta field-nya.
| Tipe | Field | Catatan |
|---|---|---|
| Path relatif | string itu sendiri | Direktori di dalam marketplace, di-resolve dari root marketplace. Harus diawali dengan ./, kecuali jika Anda menulis nama polos di bawah metadata.pluginRoot. "." saja berarti root itu sendiri |
github |
repo, ref, sha |
Repositori GitHub dalam bentuk owner/repo |
url |
url, ref, sha |
Repositori git apa pun melalui URL |
git-subdir |
url, path, ref, sha |
Satu subdirektori dari repositori git, diambil dengan sparse checkout |
npm |
package, version, registry |
Paket registry npm atau tautan tarball, diambil dengan klien npm Anda dan diekstrak tanpa menjalankan skrip install |
archive |
url, sha256 |
Arsip zip melalui HTTPS |
command |
command, timeout, mode |
Direktori yang dicetak oleh perintah yang dijalankan Claude Code di mesin pengguna. Memerlukan Claude Code v2.1.229 atau lebih baru |
Nama url dan github juga merupakan tipe sumber marketplace, di mana url berarti tautan langsung ke file marketplace.json, bukan repositori git. git hanya ada sebagai sumber marketplace, dan npm ada sebagai keduanya. git-subdir, archive, dan command hanya ada sebagai sumber plugin.
Gunakan path relatif untuk plugin di subdirektori repositori marketplace itu sendiri. Gunakan git-subdir untuk subdirektori dari repositori lain.
Sumber github, url, dan git-subdir berbagi field ref dan sha:
ref: branch atau tag. Default-nya adalah branch default repositori.sha: SHA commit lengkap 40 karakter dalam huruf kecil. Saat Anda mengaturrefdanshasekaligus, Claude Code melakukan checkoutsha. Pada sebagian besar host git, termasuk GitHub, GitLab, dan Bitbucket, ini berarti instalasi berhasil meskipun branch atau tag yang disebut olehreftelah dihapus di upstream, selama commit tersebut masih dapat dijangkau dari repositori. Beberapa server, seperti AWS CodeCommit, tidak mendukung pengambilan commit berdasarkan SHA. Pada server tersebut,refharus tetap ada dan commit yang disematkan harus dapat dijangkau darinya.
Untuk cara setiap tipe diambil, di-cache, dan diberi versi, lihat Referensi pemuatan plugin.
Sumber plugin path relatif
Path di-resolve dari root marketplace. ./plugins/formatter adalah <root>/plugins/formatter meskipun file marketplace berada di <root>/.claude-plugin/.
Path yang berisi .. gagal validasi. Di macOS dan Linux, Claude Code menolak path entri yang berisi backslash di mana pun setelah ./ di awal, jadi tulis path dengan garis miring maju.
{ "name": "formatter", "source": "./plugins/formatter" }
Path relatif hanya dapat di-resolve ketika Claude Code memiliki file-file marketplace, jadi periksa tipe sumber marketplace:
github,git,file, dandirectory: Claude Code memiliki file-file marketplace.url: Claude Code hanya mengambilmarketplace.json, sehingga path relatif tidak dapat di-resolve. Berikan setiap plugin sumber berupa objek, sepertigithubataugit-subdir.settings: path relatif langsung ditolak.
Submodule git di repositori marketplace
Saat Claude Code meng-clone repositori marketplace, Claude Code hanya mengambil submodule git yang berisi file plugin. Memerlukan Claude Code v2.1.295 atau lebih baru.
Versi sebelumnya mengambil setiap submodule, termasuk yang bersarang. Jika repositori memiliki submodule besar, Claude Code dapat melewati timeout clone saat mengambilnya.
Untuk plugin di subdirektori, seperti ./plugins/formatter, Claude Code mengambil submodule dalam kasus-kasus berikut:
- Plugin berada di dalam submodule: submodule adalah direktori plugin atau direktori di atasnya
- Submodule berada di dalam plugin: submodule berada di mana pun di bawah direktori plugin
- Tautan simbolis mengarah ke dalam submodule: tautan yang di-commit ke repositori memiliki target di dalam submodule
Plugin di root marketplace, dengan "source": "./", mendapatkan semua submodule di repositori atau tidak sama sekali. Claude Code mengambil semua submodule ketika salah satu dari hal berikut mengarah ke submodule mana pun:
- Direktori komponen: direktori di root yang berisi komponen plugin, seperti
skills/,hooks/, ataubin/ - Path dalam konfigurasi plugin: path dalam entri marketplace plugin, dalam
plugin.json-nya, atau dalam file konfigurasi seperti.mcp.jsonatauhooks/hooks.json - Tautan simbolis: tautan yang di-commit ke repositori
- Teks dalam file plugin: path submodule, seperti
vendor/tool, yang ditulis dalam file konfigurasi atau dalam file di bawah direktori komponen
Jika tidak satu pun yang demikian, Claude Code tidak mengambil submodule apa pun untuk plugin tersebut. Repositori yang sekaligus merupakan proyek dan plugin sering kali memiliki submodule yang hanya digunakan oleh build proyek, dan aturan ini mengecualikannya.
Claude Code juga mengambil semua submodule ketika tidak dapat menentukan mana yang berisi file plugin, seperti:
SKILL.mddi root: seluruh repositori kemudian menjadi direktori satu skill- File yang tidak dapat dibaca Claude Code: file marketplace, salah satu file konfigurasi plugin, atau
.gitmodules
Jika Anda menambahkan marketplace dengan --sparse, atau sumbernya mengatur sparsePaths, Claude Code hanya melakukan checkout direktori yang disebutkan di sana dan tidak mengambil submodule apa pun. Versi sebelumnya melakukan hal yang sama.
Untuk mengecualikan submodule yang tidak digunakan plugin Anda dari clone, lihat Keluarkan submodule yang tidak digunakan dari clone.
Nama polos di bawah pluginRoot
Nama polos adalah satu nama direktori tanpa /, seperti "formatter". Untuk menulis nama polos alih-alih path ./, atur metadata.pluginRoot ke direktori tempat nama tersebut di-resolve. Dengan "pluginRoot": "./plugins", "source": "formatter" di-resolve ke ./plugins/formatter. Memerlukan Claude Code v2.1.239 atau lebih baru.
metadata.pluginRoot memiliki batasan berikut:
- Nilainya sendiri harus berupa path relatif di dalam marketplace.
- Tidak berpengaruh pada sumber yang sudah diawali dengan
./. - Sumber yang berisi
/, sepertiteam-a/formatter, bukan nama polos dan tetap memerlukan awalan./, bahkan ketikametadata.pluginRootdiatur.
Sumber plugin github
repo menerima owner/repo. ref dan sha bersifat opsional.
{
"name": "formatter",
"source": {
"source": "github",
"repo": "your-org/formatter",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
Sumber plugin url
url adalah URL git lengkap: https://, http://, file://, atau git@. Akhiran .git tidak diperlukan, sehingga URL Azure DevOps dan AWS CodeCommit berfungsi sebagaimana ditulis. Tipe ini tidak menerima singkatan owner/repo.
{
"name": "formatter",
"source": {
"source": "url",
"url": "https://gitlab.example.com/your-group/formatter.git",
"ref": "main"
}
}
Sumber plugin git-subdir
url menerima URL git lengkap atau singkatan GitHub owner/repo. path adalah subdirektori yang berisi plugin, dan Claude Code hanya melakukan checkout subdirektori tersebut. Melalui URL https atau SSH, Claude Code meminta partial clone dari server, sehingga dari host yang mendukung partial clone, plugin dalam monorepo besar dapat diinstal tanpa mengunduh sisa repositori.
{
"name": "formatter",
"source": {
"source": "git-subdir",
"url": "https://github.com/your-org/monorepo.git",
"path": "tools/formatter"
}
}
Sumber plugin npm
Sumber npm menerima field berikut:
package: nama paket registry seperti@your-org/formatter, nama dengan versi yang ditambahkan seperti@your-org/formatter@2.0.0, atau tautanhttpske file tarball paketversion: versi, rentang semver, atau dist-tag, digunakan ketikapackageadalah nama paket tanpa versi yang ditambahkan. Hilangkan untuk mengambillatestregistry: URL registry untuk paket yang tidak berada di registry default
Claude Code mengambil paket dengan klien npm Anda. Skrip install paket, seperti preinstall atau postinstall, tidak pernah dijalankan, dan dependensinya tidak diinstal selama pengambilan. Jika paket memiliki lockfile yang didukung di samping package.json-nya, Claude Code menginstal dependensi paket Node.js tersebut dalam langkah terpisah, juga dengan skrip dinonaktifkan.
Claude Code memeriksa nilai package sebelum mengambil apa pun. Nilai yang ditolak menggagalkan instalasi dengan pesan yang menyebutkan nilai dan alasannya. Nilai yang ditolak meliputi:
- Alamat git, folder atau path
file:, atau aliasnpm:: gunakan sumbergithub,url, ataugit-subdiruntuk repositori git, path relatif untuk folder di marketplace, dan nama paket itu sendiri untuk alias - Tautan tarball di github.com, gist.github.com, gitlab.com, bitbucket.org, atau git.sr.ht: ditolak bahkan ketika tautan tersebut adalah unduhan rilis GitHub, kecuali jika tautan tersebut adalah tautan registry npm GitLab di bawah
gitlab.com/api/v4/ - Tautan tarball melalui
http: ditolak kecuali jika mengarah ke registry npm default milik pengguna yang menginstal
URL registry harus menggunakan https kecuali jika URL tersebut adalah registry npm default milik pengguna yang menginstal. Dengan registry http lainnya, instalasi gagal sebelum npm menghubunginya.
{
"name": "formatter",
"source": {
"source": "npm",
"package": "@your-org/formatter",
"version": "^2.0.0",
"registry": "https://npm.example.com"
}
}
Sumber plugin archive
url harus menggunakan https:// dan tidak boleh mengarah ke host loopback, link-local, atau cloud-metadata. Untuk batas ukuran, timeout, redirect, dan ekstraksi pada unduhan, lihat Tetap dalam batas unduhan untuk file yang di-host.
Root plugin boleh berada di tingkat teratas zip atau satu direktori di bawahnya.
sha256 adalah digest arsip berupa 64 karakter heksadesimal, huruf besar atau huruf kecil. Saat Anda mengaturnya, Claude Code menolak unduhan yang tidak cocok.
{
"name": "formatter",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/formatter-2.0.0.zip",
"sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"
}
}
Sumber plugin command
Gunakan sumber command ketika alat yang terinstal di mesin pengguna menghasilkan direktori plugin, seperti IDE yang me-render plugin-nya untuk toolchain yang dipilih pengguna. Claude Code menjalankan perintah tersebut saat pengguna menginstal atau memperbarui plugin, dan sekali lagi per sesi, sehingga pengguna mendapatkan output alat yang berubah tanpa menginstal ulang.
Sumber command menerima field berikut:
command: perintah shell yang mencetak path absolut direktori plugin sebagai satu baris dan keluar dengan 0. Claude Code menampilkan seluruh string kepada pengguna untuk ditinjau sebelum dijalankan. Tulis dalam ASCII yang dapat dicetak, maksimal 500 karakter, tanpa deretan empat spasi atau lebih.timeout: bilangan bulat detik dari 1 hingga 600. Default-nya 60.mode:copy, default, ataulink. Lihat Mode copy dan mode link.
{
"name": "formatter",
"source": {
"source": "command",
"command": "my-tool claude-plugin-path",
"timeout": 120
}
}
Untuk cara pengguna menerima perintah, lihat Instal dari shell Anda. Untuk apa yang dilihat pengguna setelah Anda mengubahnya, lihat Ubah perintah sumber command. Administrator mematikan sumber command dengan disableCommandPluginSources.
Apa yang harus dilakukan perintah
Tulis perintah agar memenuhi persyaratan berikut:
- Shell dan direktori kerja: Claude Code menjalankan perintah melalui
sh, atau melaluicmd.exedi Windows, dari direktori home pengguna. Berikan path absolut atau perintah yang ada diPATH. - Output: cetak tepat satu baris di stdout, yaitu path absolut direktori plugin, dan keluar dengan 0 dalam
timeoutdetik. - Isi direktori: direktori berisi plugin lengkap pada saat perintah keluar. Path dapat berbeda dari satu eksekusi ke eksekusi berikutnya.
Output yang menggagalkan instalasi atau pembaruan
Instalasi atau pembaruan gagal ketika perintah keluar dengan nilai bukan nol, berjalan lebih lama dari timeout, atau mencetak apa pun selain satu path absolut. Instalasi atau pembaruan juga gagal ketika direktori yang dicetak adalah salah satu dari berikut:
- Tidak ada konten plugin: direktori yang dicetak tidak memiliki konten plugin di tingkat teratasnya, seperti direktori
.claude-plugin/atau direktoriskills/,commands/,agents/, atauhooks/. - Direktori sesi itu sendiri: direktori yang dicetak adalah direktori tempat Claude Code dimulai, atau salah satu induknya.
- Path jaringan: di Windows, path yang dicetak adalah path UNC.
- Terlalu besar untuk disalin: dalam mode copy, direktori berukuran lebih dari 256 MiB atau memiliki lebih dari 20.000 entri.
Mode copy dan mode link
mode menentukan apakah Claude Code menyalin direktori yang dicetak atau menggunakannya di tempat:
copy: Claude Code menyalin direktori ke cache plugin dan menurunkan versi plugin dari hash file yang disalin. Alat Anda dapat menghapus atau menulis ulang direktori setelah perintah keluar. Eksekusi ulang yang menghasilkan file identik dianggap sudah mutakhir.link: Claude Code mengisi entri cache plugin dengan tautan ke setiap entri tingkat teratas dari direktori yang dicetak dan memuat file di tempat. Tidak ada yang disalin, isi file tidak di-hash, dan batas ukuran tidak berlaku. Gunakan untuk direktori yang terlalu besar untuk disalin, seperti ekspor SDK yang di-render.
Plugin mode link memiliki persyaratan berikut:
- Biarkan direktori di tempatnya: Claude Code memuat plugin melalui tautan di setiap startup, sehingga direktori yang dicetak harus tetap berada di tempatnya selama plugin tetap terinstal.
- Cetak path yang berbeda untuk menandakan konten baru: versi berasal dari path sebenarnya direktori yang dicetak dan entri tingkat teratasnya, bukan dari file di dalamnya.
- Jaga symlink tingkat teratas tetap di dalam direktori: instalasi gagal jika entri tingkat teratas adalah symlink yang mengarah ke luar direktori yang dicetak.
- Sertakan
node_modules: Claude Code melewati instalasi dependensi paket Node.js untuk plugin mode link, jadi cetak direktori yang sudah berisi paket yang dibutuhkan plugin. - Sesi yang dimulai di dalam direktori: sesi yang dimulai di direktori yang dicetak atau di mana pun di bawahnya tidak memuat plugin.
- Tidak di Windows: Claude Code menolak menginstal plugin mode link di Windows. Deklarasikan
"mode": "copy"di sana.
Sumber marketplace
Sumber marketplace mengatakan di mana Claude Code mengambil marketplace.json dari. CLI membangun satu untuk Anda ketika Anda menambahkan marketplace, dan Anda menulis satu sendiri di pengaturan:
claude plugin marketplace add: Claude Code membangun sumber dari string yang Anda lewatkan.extraKnownMarketplaces: Anda menulis sumber sendiri sebagai objeksource.strictKnownMarketplacesdanblockedMarketplaces: administrator menulis sumber dalam dua daftar kebijakan ini.strictKnownMarketplacesadalah allowlist danblockedMarketplacesadalah blocklist.
Nama tipe url, git, dan github berarti sesuatu yang berbeda dalam sumber marketplace daripada dalam sumber plugin:
| Nama tipe | Sebagai sumber marketplace | Sebagai sumber plugin |
|---|---|---|
url |
Tautan langsung ke file marketplace.json, dengan field url, headers, dan headersHelper |
Repositori git untuk diklon, dengan field url, ref, dan sha |
git |
Repositori git untuk diklon, dengan field url, ref, path, dan sparsePaths |
Tidak ada |
github |
Repositori GitHub, dengan field repo, ref, path, dan sparsePaths |
Repositori GitHub, dengan field repo, ref, dan sha, dan tidak ada path |
Tabel mencantumkan setiap tipe sumber marketplace dengan field-nya, input claude plugin marketplace add yang menghasilkannya, dan apa yang dilakukannya di masing-masing dari tiga kunci pengaturan.
| Tipe | Field | Input marketplace add |
extraKnownMarketplaces |
strictKnownMarketplaces |
blockedMarketplaces |
|---|---|---|---|---|---|
url |
url, headers, headersHelper |
URL http:// atau https:// yang tidak cocok dengan bentuk git |
Dimuat | Memungkinkan URL yang sama | Memblokir URL yang sama |
github |
repo, ref, path, sparsePaths |
owner/repo, owner/repo@ref, atau owner/repo#ref |
Dimuat | Memungkinkan repo, ref, dan path yang sama. repo mungkin owner/* |
Memblokir yang sama, dan URL git ke repositori yang sama |
git |
url, ref, path, sparsePaths |
URL user@host:path, atau URL http:// atau https:// yang berakhir dengan .git, berisi /_git/, atau menamai repositori github.com atau gitlab.com. #ref menyematkan ref |
Dimuat | Memungkinkan URL, ref, dan path yang sama |
Memblokir yang sama, dan ejaan lain dari repositori github.com yang sama |
npm |
package |
Tidak diproduksi | Gagal dimuat: NPM marketplace sources not yet implemented |
Diuraikan tetapi tidak cocok dengan apa pun, karena tidak ada yang mendaftarkan marketplace npm |
Diuraikan tetapi tidak cocok dengan apa pun |
file |
path |
Jalur ke file .json |
Dimuat | Memungkinkan jalur yang sama | Memblokir jalur yang sama |
directory |
path |
Jalur ke direktori | Dimuat | Memungkinkan jalur yang sama | Memblokir jalur yang sama |
settings |
name, plugins, owner |
Tidak diproduksi | Dimuat | Memungkinkan entri dengan name dan plugins yang sama |
Memblokir name yang sama |
skills-dir |
none | Tidak diproduksi | Gagal dimuat: Unsupported marketplace source type |
Memungkinkan plugin direktori skills. Lihat Nilai sumber yang valid hanya dalam daftar kebijakan | Menghentikan plugin direktori skills dari dimuat |
hostPattern |
hostPattern |
Tidak diproduksi | Gagal dimuat: Unsupported marketplace source type |
Memungkinkan sumber github, git, dan url yang host-nya cocok |
Memblokir sumber tersebut |
pathPattern |
pathPattern |
Tidak diproduksi | Gagal dimuat: Unsupported marketplace source type |
Memungkinkan sumber file dan directory yang path-nya cocok |
Memblokir sumber tersebut |
Field menurut tipe
Tabel mencantumkan setiap field sumber marketplace yang memiliki default, batasan, atau makna khusus untuk tipenya.
| Field | Tipe | Deskripsi |
|---|---|---|
url |
url |
Tautan ke file marketplace.json. Claude Code hanya mengunduh file itu, jadi plugin marketplace tidak dapat menggunakan sumber jalur relatif. Lihat Tetap dalam batas unduhan untuk file yang dihosting untuk batas ukuran, timeout, dan pengalihan |
url |
git |
Repositori git untuk diklon |
headers |
url |
Peta header HTTP yang Claude Code kirim dengan pengambilan, untuk host yang diautentikasi |
headersHelper |
url |
Perintah yang mencetak header yang nilai-nilainya terlalu pendek untuk didaftar dalam headers. Memerlukan Claude Code v2.1.238 atau lebih baru. Lihat Autentikasi unduhan arsip |
repo |
github |
Dalam marketplace add dan extraKnownMarketplaces, repo harus menamai satu repositori. marketplace add menolak owner/* sebagai shorthand owner/repo yang tidak valid; dalam extraKnownMarketplaces Claude Code mengambilnya secara harfiah dan klon gagal |
ref |
github, git |
Cabang atau tag. Default ke cabang default repositori |
path |
github, git |
Jalur file marketplace di dalam repositori. Default ke .claude-plugin/marketplace.json |
path |
file |
File marketplace itu sendiri. Claude Code membacanya di tempat dan mengambil direktori dua level ke atas sebagai akar marketplace, jadi simpan file di <root>/.claude-plugin/marketplace.json |
path |
directory |
Akar marketplace, direktori yang berisi .claude-plugin/marketplace.json |
sparsePaths |
github, git |
Array direktori untuk sparse checkout, seperti [".claude-plugin", "plugins"]. claude plugin marketplace add --sparse menetapkannya |
skipLfs |
github, git |
Diterima dan tidak berpengaruh. Lihat Simpan file plugin di luar Git LFS |
name |
settings |
Harus sama dengan kunci extraKnownMarketplaces dan tidak dapat menjadi nama yang dicadangkan |
plugins |
settings |
Katalog inline, tanpa file yang dihosting. Setiap item mengambil name, source, description, version, strict, headers, dan headersHelper. Tulis source setiap item sebagai tipe objek, karena jalur relatif tidak memiliki repositori untuk diselesaikan |
Nilai sumber yang valid hanya dalam daftar kebijakan
hostPattern, pathPattern, skills-dir, dan bentuk owner/* dari repo hanya valid dalam dua daftar kebijakan, strictKnownMarketplaces dan blockedMarketplaces:
hostPatterndanpathPattern: ekspresi reguler yang Claude Code uji terhadap sumber sebelum mengambil darinya.skills-dir: bukan sumber. Jika Anda menetapkanstrictKnownMarketplacestanpa entri{"source": "skills-dir"}, plugin direktori skills berhenti dimuat. Jika Anda mengunci tipe kustomisasi apa pun denganstrictPluginOnlyCustomization, plugin tersebut berhenti dimuat terlepas dari ada atau tidaknya entri tersebut.owner/*: sebagai nilairepogithub, cocok dengan setiap repositori di bawah pemilik GitHub yang tepat. Memerlukan Claude Code v2.1.223 atau lebih baru.
Untuk urutan kecocokan, semantik ref yang tepat, dan resep, lihat Kelola plugin untuk organisasi Anda.
Objek sumber di pengaturan
Nilai extraKnownMarketplaces adalah peta dari nama marketplace ke objek dengan source. Entri ini mendaftarkan marketplace dari repositori git di cabang main-nya:
{
"extraKnownMarketplaces": {
"your-marketplace": {
"source": {
"source": "git",
"url": "https://git.example.com/your-org/your-marketplace.git",
"ref": "main"
}
}
}
}
strictKnownMarketplaces dan blockedMarketplaces adalah array objek sumber. Allowlist ini mengakui satu pemilik GitHub dan satu host internal:
{
"strictKnownMarketplaces": [
{ "source": "github", "repo": "your-org/*" },
{ "source": "hostPattern", "hostPattern": "^git\\.example\\.com$" }
]
}
Pesan validasi
claude plugin validate <path> mengambil akar marketplace atau file marketplace itu sendiri. Agar file tersebut divalidasi sebagai marketplace dan bukan sebagai manifest plugin, beri nama marketplace.json. Untuk kode keluar dan --strict, lihat plugin validate.
Pesan menamai entri plugin menurut indeksnya, ditulis sebagai plugins.1.source atau plugins[1].source.
Pesan yang diawali dengan indeks entri dan plugin.json →, seperti plugins[2] plugin.json →, adalah tentang file plugin itu sendiri. claude plugin validate melaporkan kesalahan mencantumkan pesan tersebut dengan perbaikannya.
Peringatan yang menyebutkan nama flag Claude Desktop menandai nama yang Claude Desktop tolak.
Tabel memetakan pesan tingkat marketplace ke field yang masing-masing tentang.
| Pesan | Level | Field |
|---|---|---|
Marketplace must have a name |
Error | name kosong |
Marketplace name cannot contain spaces. Use kebab-case (e.g., "my-marketplace") |
Error | name |
Marketplace name cannot contain path separators (/ or \), ".." sequences, or be "." |
Error | name |
Marketplace name impersonates an official Anthropic/Claude marketplace |
Error | name. Lihat Nama yang dicadangkan |
Marketplace name cannot contain control or bidirectional-formatting characters |
Error | name berisi karakter kontrol, seperti escape atau newline, atau karakter pemformatan bidirectional Unicode |
Marketplace name "inline" is reserved for --plugin-dir session plugins, dan varian builtin, skills-dir, synced, claude-plugin-test, npm, pip, uv, cargo, github, dan gh |
Error | name |
Author name cannot be empty |
Error | owner.name |
Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin") |
Error | plugins[i].name |
Plugin name cannot contain control or bidirectional-formatting characters |
Error | plugins[i].name |
Plugin name "x" is reserved: it passes as one of Anthropic's own |
Error | plugins[i].name. Lihat name manifest untuk nama yang dicadangkan |
Plugin name "x" reads as one of Anthropic's own |
Warning | plugins[i].name |
Claude Code cannot install plugins from marketplace "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change the marketplace's "name". |
Error | name |
Claude Code cannot install plugin "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change this entry's "name". |
Error | plugins[i].name |
Duplicate plugin name "x" found in marketplace |
Error | Dua entri berbagi name |
plugins.i.source: Invalid input |
Error | source entri tidak cocok dengan tipe apa pun. Lihat Invalid input pada sumber |
plugins.i.source: Invalid string: must start with "./" |
Error | source jalur relatif tanpa awalan ./. Sebelum v2.1.285, kesalahan ini mencetak Invalid input sebagai gantinya |
plugins[i].source: Path contains "..": <path> |
Error | source relatif yang melarikan diri dari akar marketplace |
source.source: 'unsupported' is a parse-time placeholder and cannot be authored |
Error | plugins[i].source |
Plugin "x" sets headersHelper but is not "strict": false |
Error | plugins[i].headersHelper, pada entri archive |
chain does not resolve (<reason>) — target must be a name in plugins[], a key in renames, or null |
Error | renames.<old> |
target "x" is not a valid plugin name (PluginIdSchema) |
Error | renames.<old> |
Unknown field 'x'. Claude Code ignores it at load time. |
Warning | Kunci bernama di tingkat atas, di bawah metadata, dalam entri, atau di bawah relevance entri |
Marketplace has no plugins defined |
Warning | plugins kosong |
Plugin "x" sets headers/headersHelper, which only apply to "archive" sources; they have no effect on this entry. |
Warning | plugins[i].headers atau plugins[i].headersHelper, pada entri yang source-nya bukan archive |
Plugin "x" fetches its archive with a headersHelper but sets no sha256 pin |
Warning | plugins[i].source.sha256 |
Header "x" is a request-routing/identity header that catalog entries may not set; Claude Code drops it at download time. |
Warning | plugins[i].headers.<name> |
Local source "x" is or traverses a symlink, so <path> was not read |
Warning | plugins[i].source |
No marketplace description provided. Adding a description helps users understand what this marketplace offers |
Warning | description |
Entry declares version "x" but <path>/plugin.json says "y". At install time, plugin.json wins |
Warning | plugins[i].version, pada entri jalur relatif |
'relevance' must be an object containing topic and signals; got <type>. It will be ignored at load time. |
Warning | plugins[i].relevance |
'metadata' must be a free-form object; got <type>. It will be ignored at load time. |
Warning | plugins[i].metadata |
'experimental' must be an object containing component declarations; got <type>. It will be ignored at load time. |
Warning | plugins[i].experimental |
Marketplace name "x" is reserved in Claude Desktop |
Warning | name adalah org, org-provisioned, atau unknown. Claude Desktop menolak marketplace |
Marketplace name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars) |
Warning | name. Claude Desktop menolak marketplace |
Plugin name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars) |
Warning | plugins[i].name. Claude Desktop menjatuhkan entri |
Invalid input pada sumber
Invalid input pada source berarti objek tidak cocok dengan tipe sumber apa pun. Periksa penyebab ini:
packagenpm yang berisi..- Tipe
sourceyang bukan salah satu dari sumber plugin - Tipe yang dikenal dengan field yang diperlukan hilang atau tipe yang salah, seperti
githubtanparepo
Jalur relatif yang tidak dimulai dengan ./, selain "." atau nama bare di bawah metadata.pluginRoot, gagal dengan Invalid string: must start with "./". Sebelum v2.1.285, jalur tersebut mencetak Invalid input seperti penyebab di atas.
Kegagalan yang validasi tidak tangkap
claude plugin validate tidak melaporkan setiap kegagalan. Entri hooks yang ditulis sebagai jalur file atau array melewati validasi, dan kesalahan muncul hanya ketika plugin dimuat, seperti Hooks dalam entri menjelaskan. Kesalahan pengambilan source juga muncul hanya setelah install, bukan dalam validasi.
claude plugin list menunjukkan plugin yang gagal dimuat dengan kesalahannya, dan Troubleshoot plugins mencakup string waktu muat.
Langkah berikutnya
- Buat marketplace: bangun marketplace dari field ini dan pasang darinya secara lokal
- Host dan kelola marketplace: di mana menempatkan file dan cara pengguna menerima perubahan
- Referensi manifest plugin: field
plugin.jsonyang dapat ditimpa entri - Kelola plugin untuk organisasi Anda: resep allowlist dan blocklist yang menggunakan nilai sumber ini