Referensi Plugins
Referensi teknis lengkap untuk sistem plugin Claude Code, termasuk skema, perintah CLI, dan spesifikasi komponen.
Mencari cara memasang plugins? Lihat Temukan dan pasang plugins. Untuk membuat plugins, lihat Plugins. Untuk mendistribusikan plugins, lihat Plugin marketplaces.
Sebuah plugin adalah direktori yang mandiri berisi komponen-komponen yang memperluas Claude Code dengan fungsionalitas khusus. Komponen plugin mencakup skills, agents, hooks, MCP servers, LSP servers, dan monitors.
Referensi komponen plugin
Skills
Plugin menambahkan skills ke Claude Code, membuat pintasan /name yang dapat Anda atau Claude panggil.
Lokasi: Direktori skills/ atau commands/ di root plugin, atau file SKILL.md tunggal di root plugin
Format file: Skills adalah direktori dengan SKILL.md; commands adalah file markdown sederhana
Struktur skill:
skills/
├── pdf-processor/
│ ├── SKILL.md
│ ├── reference.md (opsional)
│ └── scripts/ (opsional)
└── code-reviewer/
└── SKILL.md
Skills dan commands secara otomatis ditemukan ketika plugin diinstal.
Jika plugin tidak memiliki direktori skills/ dan tidak memiliki field manifest skills, file SKILL.md di root plugin dimuat sebagai skill tunggal. Atur field frontmatter name untuk mengontrol nama invokasi skill. Tanpanya, Claude Code kembali ke nama direktori instalasi, yang untuk plugin yang diinstal dari marketplace adalah string versi yang berubah pada setiap pembaruan. Untuk plugin yang mengirimkan lebih dari satu skill, gunakan tata letak direktori skills/ yang ditunjukkan di atas.
Dalam skills dan commands plugin, field frontmatter Boolean seperti disable-model-invocation menerima yes, no, on, off, 1, dan 0 dalam huruf apa pun, selain true dan false. Sebelum v2.1.218, Claude Code hanya mengenali true dan false.
Untuk detail lengkap, lihat Skills.
Agents
Plugin dapat menyediakan subagents khusus untuk tugas-tugas tertentu yang dapat Claude panggil secara otomatis jika sesuai.
Lokasi: Direktori agents/ di root plugin
Format file: File markdown yang menjelaskan kemampuan agent
Struktur agent:
---
name: agent-name
description: Apa yang agent ini spesialisasikan dan kapan Claude harus memanggilnya
model: sonnet
effort: medium
maxTurns: 20
disallowedTools: Write, Edit
---
Prompt sistem terperinci untuk agent yang menjelaskan peran, keahlian, dan perilakunya.
Plugin agents mendukung field frontmatter name, description, model, effort, maxTurns, tools, disallowedTools, skills, memory, background, dan isolation. Satu-satunya nilai isolation yang valid adalah "worktree". Untuk alasan keamanan, hooks, mcpServers, dan permissionMode tidak didukung untuk agents yang dikirimkan plugin.
Claude Code memuat agent plugin bahkan ketika frontmatternya tidak memiliki name atau tidak dapat diuraikan:
- Tidak ada
name: Claude Code memberi nama agent sesuai file, jadiagents/reviewer.mddalam plugin bernamamy-plugindimuat sebagaimy-plugin:reviewer - Frontmatter yang tidak dapat diuraikan: Claude Code memberi nama agent sesuai file, menggunakan
Agent from my-plugin pluginsebagai deskripsinya, dan mengabaikan setiap field dalam file
Sebaliknya, Claude Code melewati file project, user, atau managed agent yang frontmatternya tidak memiliki name atau tidak dapat diuraikan.
Untuk menemukan file dalam direktori agents/ default plugin yang frontmatternya tidak dapat diuraikan, jalankan claude plugin validate. Path yang Anda berikan tergantung pada apakah plugin memiliki manifest, dan kedua contoh menggunakan ./my-plugin sebagai direktori plugin:
- Plugin dengan manifest:
claude plugin validate ./my-plugin - Plugin tanpa manifest:
claude plugin validate ./my-plugin/agents. Memerlukan Claude Code v2.1.233 atau lebih baru.
Agents muncul dalam @-mention typeahead di bawah nama scoped mereka, seperti my-plugin:code-reviewer, setelah plugin diaktifkan.
Untuk detail lengkap, lihat Subagents.
Hooks
Plugin dapat menyediakan event handlers yang merespons event Claude Code secara otomatis.
Lokasi: hooks/hooks.json di root plugin, atau inline dalam plugin.json
Format: Konfigurasi JSON dengan event matchers dan actions
Konfigurasi hook:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/format-code.sh"
}
]
}
]
}
}
Plugin hooks merespons event lifecycle yang sama seperti user-defined hooks:
| Event | Kapan event ini dipicu |
|---|---|
SessionStart |
Ketika sesi dimulai atau dilanjutkan |
Setup |
Ketika Anda memulai Claude Code dengan --init-only, atau dengan --init atau --maintenance dalam mode -p. Untuk persiapan satu kali dalam CI atau skrip |
UserPromptSubmit |
Ketika Anda mengirimkan prompt, sebelum Claude memprosesnya |
UserPromptExpansion |
Ketika perintah yang diketik pengguna berkembang menjadi prompt, sebelum mencapai Claude. Dapat memblokir ekspansi |
PreToolUse |
Sebelum panggilan alat dieksekusi. Dapat memblokir |
PermissionRequest |
Ketika panggilan alat memerlukan keputusan izin |
PermissionDenied |
Ketika mode otomatis menolak panggilan alat, termasuk penolakan tanpa putusan classifier. Gunakan JSON hookSpecificOutput.retry: true untuk memberitahu model bahwa mungkin dapat mencoba ulang panggilan alat yang ditolak. Claude Code mengabaikan retry ketika classifier tidak menghasilkan putusan |
PostToolUse |
Setelah panggilan alat berhasil |
PostToolUseFailure |
Setelah panggilan alat gagal |
PostToolBatch |
Setelah batch lengkap panggilan alat paralel terselesaikan, sebelum panggilan model berikutnya |
Notification |
Ketika Claude Code mengirimkan notifikasi |
MessageDisplay |
Saat teks pesan asisten ditampilkan |
SubagentStart |
Ketika subagent dimulai |
SubagentStop |
Ketika subagent selesai |
TaskCreated |
Ketika tugas sedang dibuat melalui TaskCreate |
TaskCompleted |
Ketika tugas sedang ditandai sebagai selesai |
Stop |
Ketika Claude selesai merespons |
StopFailure |
Ketika giliran berakhir karena kesalahan API |
TeammateIdle |
Ketika rekan tim agent team akan menjadi idle |
InstructionsLoaded |
Ketika file CLAUDE.md atau .claude/rules/*.md dimuat ke dalam konteks. Dipicu saat awal sesi dan ketika file dimuat dengan malas selama sesi |
ConfigChange |
Ketika file konfigurasi berubah selama sesi |
CwdChanged |
Ketika direktori kerja berubah, misalnya ketika Claude mengeksekusi perintah cd. Berguna untuk manajemen lingkungan reaktif dengan alat seperti direnv |
DirectoryAdded |
Ketika direktori kerja ditambahkan di tengah sesi melalui /add-dir atau permintaan kontrol SDK register_repo_root |
FileChanged |
Ketika file yang dipantau berubah di disk. Bidang matcher menentukan nama file mana yang dipantau |
WorktreeCreate |
Ketika worktree sedang dibuat melalui --worktree, isolation: "worktree", atau untuk sesi latar belakang. Menggantikan perilaku git default |
WorktreeRemove |
Ketika worktree sedang dihapus saat keluar sesi, ketika subagent selesai, atau ketika Anda menghapus sesi latar belakang |
PreCompact |
Sebelum pemadatan konteks |
PostCompact |
Setelah pemadatan konteks selesai |
PreModelSwitch |
Sebelum Claude Code menerapkan pergantian model yang Anda atau klien minta. Dapat memblokir pergantian |
PostModelSwitch |
Setelah model sesi berubah, termasuk perubahan yang Claude Code lakukan sendiri, seperti memulihkan model ketika Anda melanjutkan sesi |
Elicitation |
Ketika server MCP meminta input pengguna selama panggilan alat |
ElicitationResult |
Setelah pengguna merespons elicitation MCP, sebelum respons dikirim kembali ke server |
SessionEnd |
Ketika sesi berakhir |
Tipe hook:
command: jalankan perintah shell atau scripthttp: kirim event JSON sebagai POST request ke URLmcp_tool: panggil tool pada MCP server yang dikonfigurasiprompt: evaluasi prompt dengan LLM (menggunakan placeholder$ARGUMENTSuntuk konteks)agent: jalankan verifier agentic dengan tools untuk tugas verifikasi kompleks
Hooks yang menargetkan bundled MCP server plugin sendiri harus menggunakan nama scopednya. Tool matchers dan field if mengambil nama tool scoped mcp__plugin_<plugin-name>_<server-name>__<tool>, dan field server hook mcp_tool mengambil plugin:<plugin-name>:<server-name>. Matcher yang ditulis terhadap bare server key tidak pernah aktif. Lihat Match MCP tools dan Plugin-provided MCP servers.
MCP servers
Plugin dapat membundel Model Context Protocol (MCP) servers untuk menghubungkan Claude Code dengan tools dan services eksternal.
Lokasi: .mcp.json di root plugin, atau inline dalam plugin.json
Format: Konfigurasi MCP server standar
Konfigurasi MCP server:
{
"mcpServers": {
"plugin-database": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": {
"DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
}
},
"plugin-api-client": {
"command": "npx",
"args": ["@company/mcp-server", "--plugin-mode"]
}
}
}
Perilaku integrasi:
- MCP servers plugin dimulai secara otomatis ketika plugin diaktifkan
- Servers muncul sebagai MCP tools standar dalam toolkit Claude
- Plugin servers dapat dikonfigurasi secara independen dari user MCP servers
- Jika Anda menjalankan
/reload-pluginsdi tengah sesi, Claude Code mempertahankan koneksi live dari servers yang konfigurasinya tidak berubah
LSP servers
Mencari untuk menggunakan LSP plugins? Instal dari marketplace resmi: cari "lsp" di tab Discover /plugin. Bagian ini mendokumentasikan cara membuat LSP plugins untuk bahasa yang tidak tercakup oleh marketplace resmi.
Plugin dapat menyediakan Language Server Protocol (LSP) servers untuk memberikan Claude real-time code intelligence saat bekerja pada codebase Anda.
Lokasi: .lsp.json di root plugin, atau inline dalam plugin.json
Format: Konfigurasi JSON yang memetakan nama language server ke konfigurasi mereka
Format file .lsp.json:
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
Inline dalam plugin.json:
{
"name": "my-plugin",
"lspServers": {
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
}
Field yang diperlukan:
| Field | Deskripsi |
|---|---|
command |
Binary LSP yang akan dieksekusi (harus dalam PATH) |
extensionToLanguage |
Memetakan ekstensi file ke identifier bahasa |
Field opsional:
| Field | Deskripsi |
|---|---|
args |
Argumen command-line untuk LSP server |
transport |
Transport komunikasi: stdio (default) atau socket. Claude Code menerima socket tetapi menjalankan setiap server melalui stdio, jadi aturan protokol stdout berlaku untuk semua servers |
env |
Variabel environment yang diatur saat memulai server |
initializationOptions |
Opsi yang dilewatkan ke server selama inisialisasi |
settings |
Settings yang dilewatkan melalui workspace/didChangeConfiguration |
workspaceFolder |
Path folder workspace untuk server |
startupTimeout |
Waktu maksimal untuk menunggu startup server (milliseconds) |
shutdownTimeout |
Waktu maksimal untuk menunggu graceful shutdown (milliseconds). Ketika timeout berlalu, Claude Code menghentikan proses server. Ketika tidak diatur, tidak ada timeout yang berlaku |
restartOnCrash |
Apakah memulai ulang server setelah crash. Default ke true. Atur ke false untuk membiarkan server yang crash tetap berhenti daripada memulai ulang |
maxRestarts |
Jumlah maksimal upaya restart sebelum menyerah |
diagnostics |
Apakah mendorong diagnostics ke konteks Claude setelah edits (default true). Atur ke false untuk menjaga navigasi kode tetapi menekan injeksi diagnostik otomatis. |
restartOnCrash dan shutdownTimeout memerlukan Claude Code v2.1.205 atau lebih baru. Sebelum v2.1.205, skema config menerima kedua opsi tetapi mengatur salah satu menyebabkan Claude Code melewati LSP server itu sepenuhnya pada startup, dengan alasan hanya terlihat dalam output claude --debug.
Multiple servers untuk ekstensi yang sama: ketika lebih dari satu LSP server yang diaktifkan mendeklarasikan ekstensi file yang sama dalam extensionToLanguage, apakah servers berasal dari satu plugin atau dari plugin berbeda, server pertama yang terdaftar menangani file dengan ekstensi itu dan yang lain tidak pernah dimulai. Interface /plugin menampilkan peringatan yang menamai plugin yang servernya aktif.
Servers yang gagal menginisialisasi: Claude Code melewati server yang konfigurasinya tidak valid, misalnya yang hilang command atau extensionToLanguage, dan server yang dikonfigurasi lainnya masih dimulai. Jalankan claude --debug untuk melihat mengapa server dilewati.
Server yang dilewati tidak mengklaim ekstensi filenya, jadi server valid lain yang mendeklarasikan ekstensi yang sama, dari plugin yang sama atau berbeda, masih menangani file tersebut.
Kirim output log ke stderr, bukan stdout: Claude Code membaca stdout server hanya sebagai pesan protokol, dan menerima header pesan hingga 64 KiB dan body pesan hingga 32 MiB. Claude Code memutuskan server yang melebihi batas apa pun atau menulis output non-protokol ke stdout, dan menghitung putus sebagai crash untuk restartOnCrash dan maxRestarts. Ketika Anda menjalankan dengan --debug, Claude Code menulis error yang menamai penyebabnya ke debug log.
Anda harus menginstal binary language server secara terpisah. LSP plugins mengonfigurasi cara Claude Code terhubung ke language server, tetapi mereka tidak menyertakan server itu sendiri. Jika Anda melihat Executable not found in $PATH di tab Errors /plugin, instal binary yang diperlukan untuk bahasa Anda.
Plugin LSP yang tersedia:
| Plugin | Language server | Perintah instalasi |
|---|---|---|
pyright-lsp |
Pyright (Python) | pip install pyright atau npm install -g pyright |
typescript-lsp |
TypeScript Language Server | npm install -g typescript-language-server typescript |
rust-analyzer-lsp |
rust-analyzer | Lihat instalasi rust-analyzer |
Instal language server terlebih dahulu, kemudian instal plugin dari marketplace.
Monitors
Plugin dapat mendeklarasikan background monitors yang Claude Code mulai secara otomatis ketika plugin aktif. Setiap monitor menjalankan perintah shell untuk seumur hidup sesi dan mengirimkan setiap baris stdout ke Claude sebagai notifikasi, sehingga Claude dapat bereaksi terhadap entri log, perubahan status, atau event yang dipolling tanpa diminta untuk memulai watch itu sendiri.
Plugin monitors menggunakan mekanisme yang sama seperti Monitor tool dan berbagi batasan ketersediaannya. Mereka hanya berjalan dalam sesi CLI interaktif, berjalan unsandboxed pada tingkat kepercayaan yang sama seperti hooks, dan dilewati pada host di mana Monitor tool tidak tersedia.
Lokasi: monitors/monitors.json di root plugin, atau inline dalam plugin.json
Format: Array JSON dari entri monitor
monitors/monitors.json berikut mengawasi endpoint status deployment dan log error lokal:
[
{
"name": "deploy-status",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/poll-deploy.sh",
"description": "Deployment status changes"
},
{
"name": "error-log",
"command": "tail -F ./logs/error.log",
"description": "Application error log",
"when": "on-skill-invoke:debug"
}
]
Untuk mendeklarasikan monitors inline, atur experimental.monitors dalam plugin.json ke array yang sama. Untuk memuat dari path non-default, atur experimental.monitors ke string path relatif seperti "./config/monitors.json". Monitors adalah komponen eksperimental.
Field yang diperlukan:
| Field | Deskripsi |
|---|---|
name |
Identifier unik dalam plugin. Mencegah proses duplikat ketika plugin dimuat ulang atau skill dipanggil lagi |
command |
Perintah shell yang dijalankan sebagai proses background persisten dalam direktori kerja sesi |
description |
Ringkasan singkat tentang apa yang sedang diawasi. Ditampilkan dalam panel task dan dalam ringkasan notifikasi |
Field opsional:
| Field | Deskripsi |
|---|---|
when |
Mengontrol kapan monitor dimulai. "always" memulainya pada startup sesi dan pada reload plugin, dan merupakan default. "on-skill-invoke:<skill-name>" memulainya pertama kali skill bernama dalam plugin ini dikirimkan |
Nilai command mendukung substitusi path path substitutions ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, dan ${CLAUDE_PROJECT_DIR}, ditambah ${ENV_VAR} apa pun dari environment. Awali perintah dengan cd "${CLAUDE_PLUGIN_ROOT}" && jika script perlu berjalan dari direktori plugin itu sendiri.
Monitor command tidak dapat mereferensikan nilai ${user_config.*}. Perintah berjalan melalui shell, jadi Claude Code menolak monitor dengan error daripada mensubstitusi nilai. Proses monitor tidak menerima variabel environment CLAUDE_PLUGIN_OPTION_<KEY>, jadi biarkan script monitor membaca nilai dari file config yang dimilikinya.
Jika Anda menonaktifkan plugin di tengah sesi, Claude Code tidak menghentikan monitors yang sudah berjalan; mereka berhenti ketika sesi berakhir.
Themes
Plugin dapat mengirimkan color themes yang muncul dalam /theme bersama preset built-in dan themes lokal pengguna. Theme adalah file JSON dalam themes/ dengan preset base dan map overrides sparse dari color tokens. Themes adalah komponen eksperimental.
{
"name": "Dracula",
"base": "dark",
"overrides": {
"claude": "#bd93f9",
"error": "#ff5555",
"success": "#50fa7b"
}
}
Ketika pengguna memilih theme plugin, Claude Code menyimpan custom:<plugin-name>:<slug> dalam config mereka. Plugin themes adalah read-only: ketika pengguna menekan Ctrl+E pada satu dalam /theme, Claude Code menyalinnya ke ~/.claude/themes/ sehingga mereka dapat mengedit salinannya.
Cakupan instalasi plugin
Ketika Anda menginstal plugin, Anda memilih cakupan yang menentukan di mana plugin tersedia dan siapa lagi yang dapat menggunakannya:
| Cakupan | File pengaturan | Kasus penggunaan |
|---|---|---|
user |
~/.claude/settings.json |
Plugin pribadi tersedia di semua proyek (default) |
project |
.claude/settings.json |
Plugin tim yang dibagikan melalui kontrol versi |
local |
.claude/settings.local.json |
Plugin khusus proyek, diabaikan git ketika Claude Code menyimpan pengaturan ke dalamnya |
managed |
Managed settings | Plugin terkelola (baca saja, hanya perbarui) |
Plugin menggunakan sistem cakupan yang sama dengan konfigurasi Claude Code lainnya. Untuk instruksi instalasi dan flag cakupan, lihat Install plugins. Untuk penjelasan lengkap tentang cakupan, lihat Configuration scopes.
Plugin direktori skills
Folder apa pun di bawah direktori skills yang berisi manifes .claude-plugin/plugin.json dimuat sebagai plugin bernama <name>@skills-dir pada sesi berikutnya, tanpa marketplace dan tanpa langkah instalasi. Buat satu dengan plugin init. Tidak seperti instalasi marketplace yang disalin, plugin ditemukan di tempat daripada disalin ke cache plugin.
Pohon direktori skills mendukung tiga hal yang berbeda:
| Apa yang Anda miliki | Apa itu |
|---|---|
<skills-dir>/foo/SKILL.md tanpa manifes |
skill biasa bernama foo |
<skills-dir>/foo/.claude-plugin/plugin.json |
Plugin foo@skills-dir, yang dapat menggabungkan skills, agents, hooks, dan lainnya miliknya sendiri |
<plugin>/skills/bar/SKILL.md |
Skill bar yang dikemas di dalam plugin |
Pilih tempat plugin dimuat dari
| Direktori skills | Cakupan | Memuat |
|---|---|---|
~/.claude/skills/ |
personal | Di setiap proyek, karena lokasi hanya milik Anda |
<cwd>/.claude/skills/ |
proyek | Hanya setelah Anda menerima dialog kepercayaan workspace untuk folder tersebut |
Plugin dengan cakupan proyek diperiksa ke dalam repositori dan menjangkau setiap kolaborator yang mengklonnya. Karena konten tersebut berasal dari repositori daripada dari Anda, konten tersebut dimuat hanya setelah gerbang kepercayaan yang sama yang mengatur aturan izin proyek di .claude/settings.json, jadi mempercayai folder induk atau menjalankan dengan -p tidak cukup, dan komponen yang menjalankan kode dibatasi lebih lanjut:
- Server MCP yang dideklarasikannya melalui persetujuan per-server yang sama sebagai
.mcp.jsonproyek - Server LSP dimulai hanya setelah Anda mempercayai workspace
- Monitor latar belakang tidak dimuat
Plugin dengan cakupan personal tidak memiliki pembatasan ini.
Plugin @skills-dir dengan cakupan proyek dimuat hanya dari .claude/skills/ dari direktori kerja utama sesi. Mereka tidak berjalan ke akar repositori seperti yang dilakukan skills dan perintah biasa, jadi peluncuran dari subdirektori melewatkan plugin yang berada di akar repo. Luncurkan dari akar repositori, atau pindahkan sesi ke sana dengan /cd pada v2.1.246 atau lebih baru.
Edit, muat ulang, dan nonaktifkan plugin direktori skills
Perubahan yang Anda buat pada SKILL.md skill berlaku segera dalam sesi saat ini. Perubahan pada komponen lain plugin, seperti hooks/, .mcp.json, agents/, dan output-styles/, tidak. Jalankan /reload-plugins atau mulai ulang Claude Code untuk mengambilnya. Lihat Deteksi perubahan langsung.
Untuk menghentikan pemuatan plugin direktori skills, hapus foldernya atau nonaktifkan berdasarkan nama. Tidak ada langkah uninstall karena tidak ada yang diinstal dari marketplace.
claude plugin disable my-tool@skills-dir
Plugin yang disinkronkan dari claude.ai
Di Cowork dan sesi cloud, Claude Code mengunduh plugin yang diaktifkan untuk akun claude.ai Anda ke dalam ~/.claude/plugins/synced/ di lingkungan sesi itu sendiri dan memuat masing-masing sebagai <name>@synced, tanpa marketplace dan tanpa catatan instalasi. Claude Code tidak memuat plugin tersebut di sesi yang Anda mulai di terminal Anda sendiri. Di dalam lingkungan Cowork atau cloud tersebut, claude plugin list menampilkan salinan yang diunduh di bawah judul Synced from claude.ai. Sebelum v2.1.239, Claude Code memuat plugin ini sebagai <name>@inline, identitas yang digunakan plugin --plugin-dir.
Kelola plugin yang disinkronkan dengan ID <name>@synced yang dicetak oleh claude plugin list:
- Matikan salah satu: di sesi yang disinkronkan, jalankan
claude plugin disable <name>@synced, atau minta Claude untuk menjalankannya. Claude Code menyimpan pilihan sebagai"<name>@synced": falsedienabledPluginstingkat pengguna lingkungan tersebut. Untuk menghidupkan kembali plugin, jalankanclaude plugin enable <name>@synceddi sesi yang sama. Untuk menjaga plugin tetap keluar dari setiap sesi yang disinkronkan, matikan untuk akun claude.ai Anda. Untuk menjaganya tetap keluar dari sesi yang disinkronkan satu proyek di setiap lingkungan, atur"<name>@synced": falsedi bawahenabledPluginsdi.claude/settings.jsonproyek yang berkomitmen tersebut. - Kelola plugin itu sendiri di claude.ai:
claude plugin install,update, danuninstalltidak berlaku untuk plugin yang disinkronkan. Untuk menghapusnya, matikan plugin untuk akun claude.ai Anda; sesi yang disinkronkan berikutnya dimulai tanpanya.
Ketika plugin yang diaktifkan dari sumber lain, seperti instalasi marketplace, plugin skills-directory, atau plugin --plugin-dir, cocok dengan nama plugin yang disinkronkan, Claude Code memuat plugin tersebut dan melaporkan salinan yang disinkronkan sebagai tidak dimuat. Untuk menggunakan salinan claude.ai sebagai gantinya, nonaktifkan salinan Anda sendiri. Sebelum v2.1.239, Claude Code memuat salinan yang disinkronkan alih-alih instalasi marketplace dengan nama yang sama.
Skema manifes plugin
File .claude-plugin/plugin.json mendefinisikan metadata dan konfigurasi plugin Anda.
Manifes bersifat opsional. Jika dihilangkan, Claude Code secara otomatis menemukan komponen di lokasi default dan menurunkan nama plugin dari nama direktori. Gunakan manifes ketika Anda perlu memberikan metadata atau jalur komponen kustom.
Skema lengkap
{
"name": "plugin-name",
"displayName": "Plugin Name",
"version": "1.2.0",
"description": "Brief plugin description",
"author": {
"name": "Author Name",
"email": "author@example.com",
"url": "https://github.com/author"
},
"homepage": "https://docs.example.com/plugin",
"repository": "https://github.com/author/plugin",
"license": "MIT",
"keywords": ["keyword1", "keyword2"],
"metadata": { "catalogId": "cat-123", "tier": "pro" },
"skills": "./custom/skills/",
"commands": ["./custom/commands/special.md"],
"agents": ["./custom/agents/reviewer.md"],
"hooks": "./config/hooks.json",
"mcpServers": "./mcp-config.json",
"outputStyles": "./styles/",
"lspServers": "./.lsp.json",
"experimental": {
"themes": "./themes/",
"monitors": "./monitors.json",
"evals": "quality/evals"
},
"dependencies": [
"helper-lib",
{ "name": "secrets-vault", "version": "~2.1.0" }
]
}
Bidang yang diperlukan
Jika Anda menyertakan manifes, name adalah satu-satunya bidang yang diperlukan.
| Bidang | Tipe | Deskripsi | Contoh |
|---|---|---|---|
name |
string | Pengidentifikasi unik dalam kebab-case, tanpa spasi, karakter kontrol, atau karakter pemformatan bidirectional. Ketika entri marketplace mencantumkan plugin dengan nama berbeda, nama entri marketplace adalah yang digunakan oleh kunci enabledPlugins dan /plugin |
"deployment-tools" |
Nama ini digunakan untuk namespacing komponen. Misalnya, di UI, agent agent-creator untuk plugin dengan nama plugin-dev akan muncul sebagai plugin-dev:agent-creator.
Bidang yang tidak dikenali
Claude Code mengabaikan bidang tingkat atas yang tidak dikenalinya. Anda dapat menyimpan metadata dari ekosistem lain di plugin.json dan plugin masih dimuat. Ini membuat praktis untuk mempertahankan satu manifes yang berfungsi ganda sebagai manifes ekstensi VS Code atau Cursor, package.json npm, atau manifes bundle MCPB/DXT.
claude plugin validate melaporkan bidang yang tidak dikenali sebagai peringatan, bukan kesalahan. Jika bidang hanya berbeda satu atau dua karakter dari yang dikenali, peringatan menyarankan nama yang mungkin dimaksudkan. Plugin dengan hanya peringatan bidang yang tidak dikenali masih lulus validasi dan dimuat saat runtime.
Bagaimana Claude Code menangani bidang yang dikenali yang nilainya memiliki tipe salah tergantung pada bidangnya:
- Sebagian besar bidang: plugin gagal dimuat. Misalnya, nilai
keywordsyang berupa string alih-alih array adalah kesalahan pemuatan, danclaude plugin validatemelaporkannya sebagai demikian. experimentaldanmetadata: Claude Code mengabaikan nilai non-objek, danclaude plugin validatemelaporkan peringatan.
Teruskan --strict untuk memperlakukan peringatan sebagai kesalahan. Gunakan di CI untuk menangkap nama bidang yang salah ketik atau bidang yang tersisa dari manifes alat lain sebelum menerbitkan, meskipun plugin akan dimuat saat runtime.
claude plugin validate ./my-plugin --strict
Bidang metadata
| Bidang | Tipe | Deskripsi | Contoh |
|---|---|---|---|
$schema |
string | URL JSON Schema untuk autocomplete dan validasi editor. Claude Code mengabaikan bidang ini saat waktu pemuatan. | "https://json.schemastore.org/claude-code-plugin-manifest.json" |
displayName |
string | Nama yang dapat dibaca manusia ditampilkan di pemilih /plugin dan permukaan UI lainnya. Untuk plugin yang diinstal marketplace, displayName pada entri marketplace mengambil alih nilai ini. Ketika tidak ada nama tampilan yang ditetapkan di tempat mana pun, pengguna melihat name. Tidak seperti name, dapat berisi spasi dan casing apa pun. Tidak digunakan untuk namespacing atau pencarian. |
"Deployment Tools" |
version |
string | Opsional. Versi semantik. Menetapkan ini mengikat plugin ke string versi itu, sehingga pengguna hanya menerima pembaruan ketika Anda menaikkannya, kecuali untuk sumber command; lihat Manajemen versi. Jika juga ditetapkan di entri marketplace, plugin.json menang. Jika dihilangkan, versi berasal dari sumber berikutnya di Manajemen versi. |
"2.1.0" |
description |
string | Penjelasan singkat tentang tujuan plugin | "Deployment automation tools" |
author |
object | Informasi penulis | {"name": "Dev Team", "email": "dev@company.com"} |
homepage |
string | URL dokumentasi | "https://docs.example.com" |
repository |
string | URL kode sumber | "https://github.com/user/plugin" |
license |
string | Pengidentifikasi lisensi | "MIT", "Apache-2.0" |
keywords |
array | Tag penemuan | ["deployment", "ci-cd"] |
metadata |
object | Objek bentuk bebas untuk data Anda sendiri, seperti bidang hak atau katalog. Claude Code tidak membacanya, jadi nilai tidak pernah mempengaruhi perilaku plugin. Claude Code mengabaikan nilai non-objek, dan claude plugin validate melaporkannya sebagai peringatan. Sebelum v2.1.222, Claude Code memperlakukan kunci sebagai bidang yang tidak dikenali. |
{"catalogId": "cat-123"} |
defaultEnabled |
boolean | Apakah plugin dimulai dalam keadaan diaktifkan ketika pengguna belum menetapkan satu. Default ke true. Lihat Pengaktifan default. |
false |
Pengaktifan default
Atur defaultEnabled: false di plugin.json untuk mengirimkan plugin yang diinstal dalam keadaan dinonaktifkan. Pengguna menghidupkannya dengan claude plugin enable <plugin> atau antarmuka /plugin. Gunakan ini untuk plugin yang menambah biaya atau ruang lingkup yang harus dipilih pengguna, seperti yang menghubungkan ke layanan eksternal.
defaultEnabled adalah fallback ketika tidak ada yang telah memutuskan status plugin. Dua hal mengambil alih:
- Pengaturan pengguna: entri untuk plugin di
enabledPluginsdi ruang lingkup pengaturan apa pun. Setelah ditulis, itu bertahan di seluruh pembaruan dan penginstalan ulang plugin, jadi mengubahdefaultEnableddalam rilis kemudian tidak membalik pengguna yang ada. - Persyaratan ketergantungan: ketika plugin diperlukan oleh plugin lain yang aktif, Claude Code menulis
trueuntuk itu pada waktu instalasi atau pengaktifan. Itu memberikannya pengaturan eksplisit, jadi default-nya sendiri tidak lagi berlaku. Lihat Aktifkan atau nonaktifkan plugin dengan ketergantungan.
Bidang yang sama dapat muncul di entri marketplace plugin, di mana itu mengambil alih nilai di plugin.json. Lihat Bidang plugin opsional.
Bidang jalur komponen
| Bidang | Tipe | Deskripsi | Contoh |
|---|---|---|---|
skills |
string|array | Direktori skill kustom yang berisi <name>/SKILL.md. Menambah pemindaian skills/ default. Lihat Aturan perilaku jalur untuk pengecualian akar marketplace |
"./custom/skills/" |
commands |
string|array | File skill .md datar kustom atau direktori (menggantikan commands/ default) |
"./custom/cmd.md" atau ["./cmd1.md"] |
agents |
string|array | File agent kustom (menggantikan agents/ default) |
"./custom/agents/reviewer.md" |
workflows |
string|array | File skrip workflow kustom atau direktori (menggantikan workflows/ default) |
"./custom/workflows/" |
hooks |
string|array|object | Jalur konfigurasi hook atau konfigurasi inline | "./my-extra-hooks.json" |
mcpServers |
string|array|object | Jalur konfigurasi MCP atau konfigurasi inline | "./my-extra-mcp-config.json" |
outputStyles |
string|array | File/direktori gaya output kustom (menggantikan output-styles/ default) |
"./styles/" |
lspServers |
string|array|object | Konfigurasi Language Server Protocol untuk intelijen kode (buka definisi, temukan referensi, dll.) | "./.lsp.json" |
experimental.themes |
string|array | File/direktori tema warna (menggantikan themes/ default). Lihat Tema |
"./themes/" |
experimental.monitors |
string|array | Konfigurasi Monitor latar belakang yang dimulai secara otomatis ketika plugin aktif. Lihat Monitor | "./monitors.json" |
experimental.evals |
string|array | Direktori di bawah akar plugin yang menyimpan kasus eval plugin, ketika bukan evals/ default. claude plugin eval --eval-dir menggantinya |
"quality/evals" |
userConfig |
object | Nilai yang dapat dikonfigurasi pengguna yang diminta saat pengaktifan. Lihat Konfigurasi pengguna | Lihat di bawah |
channels |
array | Deklarasi saluran untuk injeksi pesan (gaya Telegram, Slack, Discord). Lihat Saluran | Lihat di bawah |
dependencies |
array | Plugin lain yang diperlukan plugin ini, secara opsional dengan batasan versi semver. Lihat Batasi versi ketergantungan plugin | [{ "name": "secrets-vault", "version": "~2.1.0" }] |
Komponen eksperimental
Komponen di bawah kunci experimental, themes dan monitors, memiliki skema manifes yang mungkin berubah antar rilis saat mereka stabil. Tempat Anda mendeklarasikannya adalah migrasi terpisah: tingkat atas masih berfungsi, claude plugin validate memperingatkan, dan rilis mendatang akan memerlukan experimental.*.
Konfigurasi pengguna
Bidang userConfig mendeklarasikan nilai yang diminta Claude Code kepada pengguna ketika plugin diaktifkan. Gunakan ini alih-alih mengharuskan pengguna untuk mengedit settings.json secara manual.
{
"userConfig": {
"api_endpoint": {
"type": "string",
"title": "API endpoint",
"description": "Your team's API endpoint"
},
"api_token": {
"type": "string",
"title": "API token",
"description": "API authentication token",
"sensitive": true
}
}
}
Kunci harus berupa pengidentifikasi yang valid. Setiap opsi mendukung bidang-bidang ini:
| Bidang | Diperlukan | Deskripsi |
|---|---|---|
type |
Ya | Salah satu dari string, number, boolean, directory, atau file |
title |
Ya | Label ditampilkan di dialog konfigurasi |
description |
Ya | Teks bantuan ditampilkan di bawah bidang |
sensitive |
Tidak | Jika true, menyembunyikan input dan menyimpan nilai dalam penyimpanan aman alih-alih settings.json |
required |
Tidak | Jika true, validasi gagal ketika bidang kosong |
default |
Tidak | Nilai yang digunakan ketika pengguna tidak memberikan apa pun |
multiple |
Tidak | Untuk tipe string, izinkan array string |
min / max |
Tidak | Batas untuk tipe number |
Setiap nilai tersedia untuk substitusi sebagai ${user_config.KEY} di konfigurasi server MCP dan LSP serta perintah hook. Nilai non-sensitif juga dapat disubstitusi dalam konten skill dan agent. Semua nilai diekspor ke proses hook sebagai variabel lingkungan CLAUDE_PLUGIN_OPTION_<KEY>, di mana <KEY> adalah kunci opsi dengan huruf besar.
Bidang yang berjalan dalam shell menolak ${user_config.*}: mensubstitusi nilai yang dikonfigurasi ke dalam perintah shell akan membiarkan shell menjalankan apa pun yang berisi nilai itu, jadi komponen gagal dengan kesalahan sebagai gantinya. Setiap bidang yang ditolak memiliki cara alternatif untuk melewatkan nilai:
| Bidang yang ditolak | Cara melewatkan nilai |
|---|---|
| Perintah hook bentuk shell | Gunakan bentuk exec dengan args, atau baca CLAUDE_PLUGIN_OPTION_<KEY> dari lingkungan hook |
| Perintah Monitor | Baca nilai dari file konfigurasi dalam skrip |
MCP headersHelper |
Baca nilai dari file konfigurasi dalam skrip |
Sebelum v2.1.207, bidang-bidang ini mensubstitusi nilai ${user_config.KEY}; perbarui plugin yang mengandalkan ini.
Nilai non-sensitif disimpan di bawah kunci pluginConfigs di settings.json pengguna Anda sebagai pluginConfigs[<plugin-id>].options.
Di macOS, Claude Code menyimpan nilai sensitif di macOS Keychain, kembali ke ~/.claude/.credentials.json ketika Keychain menolak penulisan. Di platform tanpa keychain yang didukung, itu menyimpannya di ~/.claude/.credentials.json. Penyimpanan Keychain dibagikan dengan token OAuth dan memiliki batas total sekitar 2 KB, jadi simpan nilai sensitif tetap kecil.
Claude Code membaca semua nilai pluginConfigs dari hanya tiga sumber pengaturan:
- Pengaturan pengguna:
~/.claude/settings.json, file yang ditulis prompt waktu pengaktifan --settings: bendera CLI atau pengaturan inline SDK- Pengaturan terkelola: kebijakan yang dikendalikan organisasi
Ketika lebih dari satu sumber menetapkan kunci yang sama, pengaturan terkelola mengambil alih, kemudian --settings, kemudian pengaturan pengguna. Satu-satunya sumber yang dapat Anda hapus dari daftar ini adalah pengaturan pengguna: teruskan --setting-sources tanpa user dan Claude Code melewatinya. Pengaturan terkelola dan --settings tetap apa pun yang Anda teruskan. Opsi settingSources SDK menetapkan daftar yang sama.
Entri di .claude/settings.json atau .claude/settings.local.json proyek diabaikan. Kedua file berada di workspace, jadi repositori yang dikloning dapat menyediakan nilai di sana, dan nilai-nilai itu akan mengalir ke perintah hook plugin, konfigurasi server MCP, perintah LSP, dan perintah monitor. Sebelum v2.1.207, entri-entri ini dibaca. Pembatasan khusus untuk pluginConfigs: enabledPlugins masih menghormati pengaturan proyek dan lokal.
Saluran
Bidang channels memungkinkan plugin mendeklarasikan satu atau lebih saluran pesan yang menyuntikkan konten ke dalam percakapan. Setiap saluran mengikat ke server MCP yang disediakan plugin.
{
"channels": [
{
"server": "telegram",
"userConfig": {
"bot_token": {
"type": "string",
"title": "Bot token",
"description": "Telegram bot token",
"sensitive": true
},
"owner_id": {
"type": "string",
"title": "Owner ID",
"description": "Your Telegram user ID"
}
}
}
]
}
Bidang server diperlukan dan harus cocok dengan kunci di mcpServers plugin. userConfig per-saluran opsional menggunakan skema yang sama dengan bidang tingkat atas, memungkinkan plugin untuk meminta token bot atau ID pemilik ketika plugin diaktifkan.
Aturan perilaku jalur
Apakah jalur kustom menggantikan atau memperluas direktori default plugin tergantung pada bidangnya:
- Menggantikan default:
commands,agents,workflows,outputStyles,experimental.themes,experimental.monitors. Misalnya, ketika manifes menentukancommands, direktoricommands/default tidak dipindai. Untuk menyimpan default dan menambah lebih banyak, cantumkan secara eksplisit:"commands": ["./commands/", "./extras/"] - Menambah default:
skills. Direktoriskills/default selalu dipindai, dan direktori yang tercantum diskillsdimuat bersama dengannya. Pengecualian: untuk entri marketplace yangsource-nya diselesaikan ke akar marketplace, mendeklarasikan subdirektori spesifik menggantikan pemindaianskills/default - Aturan penggabungan sendiri: hooks, server MCP, dan server LSP. Lihat setiap bagian untuk cara beberapa sumber menggabungkan
Ketika plugin memiliki folder default dan kunci manifes yang cocok, Claude Code memperingatkan tentang folder yang diabaikan di claude plugin list dan tampilan detail /plugin. Plugin masih dimuat menggunakan jalur manifes. Claude Code tidak memperingatkan ketika kunci manifes menunjuk ke folder default, misalnya "commands": ["./commands/deploy.md"], karena jalur itu secara eksplisit menamai folder.
Untuk semua bidang jalur:
- Semua jalur harus relatif terhadap akar plugin dan dimulai dengan
./, kecuali bidangskillsjuga menerima"."- Baik
"."maupun"./"menunjukkan akar plugin itu sendiri - Sebelum v2.1.221,
"."gagal validasi manifes dan plugin tidak dimuat, jadi gunakan"./"untuk mendukung versi sebelumnya
- Baik
- Komponen dari jalur kustom menggunakan aturan penamaan dan namespacing yang sama
- Beberapa jalur dapat ditentukan sebagai array
- Jalur skill dapat menunjuk ke direktori yang berisi
SKILL.mdsecara langsung, misalnya"skills": ["."]untuk akar plugin- Claude Code mengambil nama invokasi skill dari bidang frontmatter
namediSKILL.md, jadi nama tetap stabil apa pun direktori instalasi dinamai - Jika
nametidak ditetapkan di frontmatter, Claude Code kembali ke nama dasar direktori
- Claude Code mengambil nama invokasi skill dari bidang frontmatter
Plugin yang memiliki SKILL.md di akarnya, tidak ada subdirektori skills/, dan tidak ada bidang manifes skills secara otomatis dimuat sebagai plugin skill tunggal. Anda tidak perlu menetapkan "skills": ["./"] di plugin.json untuk tata letak ini.
Contoh jalur:
{
"commands": [
"./specialized/deploy.md",
"./utilities/batch-process.md"
],
"agents": [
"./custom-agents/reviewer.md",
"./custom-agents/tester.md"
]
}
Variabel lingkungan
Claude Code menyediakan tiga variabel untuk mereferensikan jalur:
| Variabel | Diselesaikan ke | Gunakan untuk |
|---|---|---|
${CLAUDE_PLUGIN_ROOT} |
Jalur absolut ke direktori instalasi plugin | Skrip, biner, dan file konfigurasi yang disertakan dengan plugin |
${CLAUDE_PLUGIN_DATA} |
Direktori persisten yang bertahan pembaruan plugin, dibuat pada referensi pertama | Ketergantungan yang diinstal seperti node_modules atau lingkungan virtual Python, kode yang dihasilkan, dan cache |
${CLAUDE_PROJECT_DIR} |
Akar proyek | Skrip dan file konfigurasi lokal proyek |
Ketiga-tiganya diekspor sebagai variabel lingkungan ke proses hook dan ke subproses server MCP dan LSP. Bidang mana yang mensubstitusi mereka secara inline tergantung pada komponen plugin:
| Komponen plugin | Bidang tempat placeholder diselesaikan |
|---|---|
| Konten skill dan agent | Di mana pun placeholder muncul |
| Perintah hook dan monitor | Di mana pun placeholder muncul |
Server MCP stdio |
command, args, env |
Server MCP http, sse, ws |
url, headers, headersHelper |
| Server LSP | command, args, env, workspaceFolder |
Dalam perintah hook, gunakan bentuk exec dengan args sehingga setiap jalur dilewatkan sebagai satu argumen tanpa tanda kutip. Dalam hook bentuk shell dan perintah monitor, bungkus variabel dalam tanda kutip ganda, seperti "${CLAUDE_PROJECT_DIR}/scripts/server.sh". Hook bentuk shell ini menjalankan skrip yang disertakan dengan plugin:
{
"hooks": {
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/process.sh"
}
]
}
]
}
}
${CLAUDE_PLUGIN_ROOT} berubah ketika plugin diperbarui. Direktori versi sebelumnya tetap di disk untuk periode tenggang setelah pembaruan, tetapi perlakukan sebagai sementara dan jangan tulis status di sana. Lihat plugin caching untuk semantik pembersihan.
Ketika plugin diperbarui di tengah sesi, perintah hook, monitor, server MCP, dan server LSP terus menggunakan jalur versi sebelumnya. Jalankan /reload-plugins untuk beralih hook, server MCP, dan server LSP ke jalur baru; monitor memerlukan restart sesi. Dalam sesi tanpa terminal interaktif, reload meninggalkan server MCP plugin di jalur lama sampai sesi berikutnya.
Untuk plugin dengan sumber command, Claude Code dapat memuat ulang plugin itu sendiri.
Server MCP juga dapat memanggil permintaan roots/list untuk membaca direktori kerja sesi saat runtime. Lihat apa yang dikembalikan roots/list dan kapan Claude Code memberi tahu server tentang perubahan.
Direktori data persisten
Direktori ${CLAUDE_PLUGIN_DATA} diselesaikan ke ~/.claude/plugins/data/{id}/, di mana {id} adalah pengidentifikasi plugin dengan karakter di luar a-z, A-Z, 0-9, _, dan - diganti dengan -. Untuk plugin yang diinstal sebagai formatter@my-marketplace, direktorinya adalah ~/.claude/plugins/data/formatter-my-marketplace/.
Penggunaan umum adalah menginstal ketergantungan bahasa sekali dan menggunakannya kembali di seluruh sesi dan pembaruan plugin. Gunakan untuk ketergantungan Python, ketergantungan yang dikunci dengan Yarn atau pnpm, dan paket yang skrip siklus hidupnya harus berjalan. Untuk plugin yang diinstal marketplace, Anda mungkin tidak membutuhkannya sama sekali: Claude Code secara otomatis menginstal ketergantungan paket Node.js yang memenuhi syarat ketika itu cache plugin.
Karena direktori data melampaui versi plugin apa pun, pemeriksaan keberadaan direktori saja tidak dapat mendeteksi ketika pembaruan mengubah manifes ketergantungan plugin. Pola yang direkomendasikan membandingkan manifes bundel terhadap salinan di direktori data dan menginstal ulang ketika mereka berbeda.
Hook SessionStart ini menginstal node_modules pada run pertama dan lagi kapan pun pembaruan plugin menyertakan package.json yang berubah:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""
}
]
}
]
}
}
diff keluar nonzero ketika salinan yang disimpan hilang atau berbeda dari yang bundel, mencakup run pertama dan pembaruan yang mengubah ketergantungan. Jika npm install gagal, rm trailing menghapus manifes yang disalin sehingga sesi berikutnya mencoba lagi.
Skrip yang disertakan dalam ${CLAUDE_PLUGIN_ROOT} kemudian dapat berjalan terhadap node_modules yang persisten:
{
"mcpServers": {
"routines": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],
"env": {
"NODE_PATH": "${CLAUDE_PLUGIN_DATA}/node_modules"
}
}
}
}
Direktori data dihapus secara otomatis ketika Anda mencopot plugin dari ruang lingkup terakhir tempat itu diinstal. Antarmuka /plugin menampilkan ukuran direktori dan meminta sebelum menghapus. CLI menghapus secara default; teruskan --keep-data untuk mempertahankannya.
Caching plugin dan resolusi file
Plugin ditentukan dalam salah satu dari dua cara:
- Melalui
claude --plugin-diratauclaude --plugin-url, untuk durasi sesi. - Melalui marketplace, diinstal untuk sesi mendatang.
Untuk tujuan keamanan dan verifikasi, Claude Code menyalin plugin marketplace ke plugin cache lokal pengguna (~/.claude/plugins/cache) daripada menggunakannya di tempat, kecuali untuk command sources dalam link mode, yang Claude Code gunakan di tempat melalui link dalam entri cache.
Untuk plugin yang disalin, setiap versi yang diinstal adalah direktori terpisah dalam cache, dikelompokkan berdasarkan marketplace dan plugin serta dinamai untuk versi yang diselesaikan, dengan salinannya sendiri dari file plugin dan dependensi paket Node.js. Dependensi yang diselesaikan dari release tag mendapatkan nama direktori dengan akhiran commit-SHA.
Ketika Anda memperbarui atau mencopot plugin, Claude Code menandai direktori versi sebelumnya sebagai orphaned dan menghapusnya dalam sweep latar belakang kira-kira 14 hari kemudian. Periode grace memungkinkan sesi Claude Code bersamaan yang sudah memuat versi lama untuk terus berjalan tanpa kesalahan. Claude Code menjalankan sweep hanya saat setidaknya satu plugin diinstal; setelah Anda mencopot plugin terakhir Anda, direktori orphaned tetap di disk sampai Anda menginstal plugin lagi.
Claude Code menghapus folder plugin atau marketplace dari cache hanya ketika tidak lagi berisi direktori atau symlink apa pun. Jika Anda membuat symlink dari checkout pengembangan ke dalam cache sebagai entri versi plugin, Claude Code tidak pernah menandai link sebagai orphaned dan tidak pernah menghapusnya atau folder yang menahannya. Claude Code juga tidak pernah menulis file pelacakan versinya di dalam checkout yang ditautkan.
Tools Glob dan Grep Claude melewati direktori versi orphaned selama pencarian, sehingga hasil file tidak menyertakan kode plugin yang sudah ketinggalan zaman.
Dependensi paket Node.js
Ketika Claude Code menyalin plugin ke dalam cache, Claude Code juga menginstal dependensi paket Node.js plugin di sana, sehingga hooks dan MCP servers plugin dapat memuatnya. Bagian ini mencakup paket npm dan Bun yang dideklarasikan plugin dalam package.json miliknya sendiri. Untuk plugin yang bergantung pada plugin lain, lihat versi dependensi plugin.
Claude Code menjalankan install di dalam direktori versi yang disalin setiap kali membuat satu: ketika Anda menginstal plugin, ketika Claude Code memperbarui plugin ke versi baru, dan pada awal sesi ketika plugin yang diaktifkan belum di-cache, seperti pada mesin baru. Install hanya berjalan ketika direktori root plugin berisi package.json dan lockfile yang didukung:
| Lockfile | Command |
|---|---|
bun.lock atau bun.lockb |
bun install --frozen-lockfile --ignore-scripts |
npm-shrinkwrap.json atau package-lock.json |
npm ci --ignore-scripts |
Jika plugin berisi lebih dari satu lockfile ini, Claude Code menggunakan kecocokan pertama, memeriksa secara berurutan: bun.lock, bun.lockb, npm-shrinkwrap.json, package-lock.json. Claude Code melewati yarn.lock dan pnpm-lock.yaml karena Yarn dan pnpm mendukung hook konfigurasi waktu resolusi yang melewati --ignore-scripts.
Kirimkan lockfile npm untuk jangkauan terluas. Claude Code menjalankan package manager lockfile yang cocok dari PATH pengguna dan tidak kembali ke lockfile lain jika hilang. Untuk plugin yang didistribusikan melalui sumber npm, gunakan npm-shrinkwrap.json; npm mengecualikan package-lock.json dari paket yang dipublikasikan.
Claude Code membatasi install dependensi ini sehingga tidak ada kode dari plugin atau paketnya yang dieksekusi selama install, dan membatasi berapa lama install dapat berjalan:
- Frozen resolution: Bun dan npm menginstal dengan tepat apa yang dikunci lockfile, dan gagal daripada re-resolve versi ketika
package.jsondan lockfile tidak setuju. - No lifecycle scripts:
--ignore-scriptsmenjaga agar scriptpreinstall,install, danpostinstalltidak berjalan, sehingga dependensi yang membangun modul native dalam script tersebut diunduh tetapi tidak dikompilasi selama install ini. - 60-second timeout: Claude Code menghentikan install yang berjalan lebih lama dan memperlakukannya sebagai gagal.
Mengambil plugin sumber npm itu sendiri menjalankan npm install dengan lifecycle scripts diaktifkan, sebelum install dependensi ini berjalan.
Install yang gagal atau dilewati tidak pernah memblokir plugin. Ketika install gagal, atau Claude Code melewati lockfile yarn atau pnpm, Claude Code mencatat alasannya sebagai peringatan dalam debug output. Plugin dengan package.json dan tidak ada lockfile dilewati tanpa entri log. Install yang time-out dapat meninggalkan pohon node_modules parsial dalam salinan cache.
Anda tidak dapat mematikan install otomatis; tidak ada pengaturan atau variabel lingkungan yang menonaktifkannya. Di jaringan terbatas, lihat persyaratan akses jaringan untuk host yang diizinkan.
Untuk dependensi yang install otomatis tidak dapat sediakan, seperti paket yang memerlukan lifecycle scripts mereka untuk membangun, dependensi Python, atau plugin yang dikunci dengan Yarn atau pnpm, instal dari hook ke direktori data persisten.
Batasan path traversal
Claude Code tidak membiarkan plugin mereferensikan file di luar direktorinya sendiri. Claude Code menolak path komponen yang diselesaikan di luar root plugin, apakah path dideklarasikan dalam plugin.json atau dalam entri marketplace. Itu mencakup path yang menunjuk di luar plugin seperti yang ditulis, seperti ../shared-utils, dan symlink yang mengarah di luar plugin, selain link dalam satu marketplace.
Di macOS dan Linux, Claude Code juga menolak path komponen yang berisi backslash di mana pun dalam path, bahkan ketika path tetap berada di dalam plugin. Komponen yang dideklarasikan dengan path backslash oleh karena itu hanya dimuat di Windows. Tulis path komponen dengan forward slash, seperti ./commands/deploy.md.
Ketika Claude Code menolak path, Claude Code melaporkan error path escapes plugin directory dan memuat plugin tanpa komponen tersebut.
Claude Code juga tidak menyalin file di luar direktori plugin ke dalam cache ketika menginstal plugin, jadi ketika script di dalam plugin yang disalin membaca path di atas root plugin, script tidak menemukan file tersebut juga.
Bagikan file dalam marketplace dengan symlink
Jika plugin Anda perlu berbagi file dengan bagian lain dari marketplace yang sama, Anda dapat membuat symbolic link di dalam direktori plugin Anda. Bagaimana symlink ditangani ketika plugin disalin ke dalam cache tergantung pada di mana targetnya diselesaikan:
- Dalam direktori plugin sendiri: symlink dipertahankan sebagai symlink relatif dalam cache, sehingga tetap diselesaikan ke target yang disalin saat runtime.
- Di tempat lain dalam marketplace yang sama: symlink didereferensikan. Konten target disalin ke dalam cache di tempatnya. Ini memungkinkan direktori
skills/meta-plugin untuk menautkan ke skill yang ditentukan oleh plugin lain dalam marketplace. - Di luar marketplace: symlink dilewati untuk keamanan. Ini mencegah plugin dari menarik file host arbitrer seperti path sistem ke dalam cache.
Untuk plugin yang diinstal dengan --plugin-dir, dari path lokal, atau dari command source dalam copy mode, hanya symlink yang diselesaikan dalam direktori plugin sendiri yang dipertahankan. Semua yang lain dilewati.
Perintah berikut membuat link dari dalam plugin marketplace ke skill bersama yang ditentukan oleh plugin sibling. Di Windows, gunakan mklink /D dari Command Prompt yang ditingkatkan atau aktifkan Developer Mode:
ln -s ../../shared-plugin/skills/foo ./skills/foo
Struktur direktori plugin
Tata letak plugin standar
Plugin lengkap mengikuti struktur ini:
enterprise-plugin/
├── .claude-plugin/ # Direktori metadata (opsional)
│ └── plugin.json # manifes plugin
├── skills/ # Skills
│ ├── code-reviewer/
│ │ └── SKILL.md
│ └── pdf-processor/
│ ├── SKILL.md
│ └── scripts/
├── commands/ # Skills sebagai file .md datar
│ ├── status.md
│ └── logs.md
├── agents/ # Definisi subagent
│ ├── security-reviewer.md
│ ├── performance-tester.md
│ └── compliance-checker.md
├── workflows/ # Skrip workflow
│ └── release-audit.js
├── output-styles/ # Definisi gaya output
│ └── terse.md
├── themes/ # Definisi tema warna
│ └── dracula.json
├── monitors/ # Konfigurasi monitor latar belakang
│ └── monitors.json
├── hooks/ # Konfigurasi hooks
│ ├── hooks.json # Konfigurasi hook utama
│ └── security-hooks.json # Hooks tambahan
├── bin/ # Plugin yang dapat dijalankan ditambahkan ke PATH
│ └── my-tool # Dapat dipanggil sebagai perintah bare di Bash tool
├── settings.json # Pengaturan default untuk plugin
├── .mcp.json # Definisi server MCP
├── .lsp.json # Konfigurasi server LSP
├── scripts/ # Skrip hook dan utilitas
│ ├── security-scan.sh
│ ├── format-code.py
│ └── deploy.js
├── LICENSE # File lisensi
└── CHANGELOG.md # Riwayat versi
Direktori .claude-plugin/ berisi file plugin.json. Semua direktori lainnya (commands/, agents/, skills/, workflows/, output-styles/, themes/, monitors/, hooks/) harus berada di root plugin, bukan di dalam .claude-plugin/.
File CLAUDE.md di root plugin tidak dimuat sebagai konteks proyek. Plugin berkontribusi konteks melalui skills, agents, dan hooks daripada CLAUDE.md. Untuk mengirimkan instruksi yang dimuat ke dalam konteks Claude, letakkan di skill.
Referensi lokasi file
| Komponen | Lokasi Default | Tujuan |
|---|---|---|
| Manifes | .claude-plugin/plugin.json |
Metadata dan konfigurasi plugin (opsional) |
| Skills | skills/ |
Skills dengan struktur <name>/SKILL.md |
| Commands | commands/ |
Skills sebagai file Markdown datar. Gunakan skills/ untuk plugin baru |
| Agents | agents/ |
File Markdown subagent |
| Workflows | workflows/ |
File skrip Workflow |
| Output styles | output-styles/ |
Definisi gaya output |
| Themes | themes/ |
Definisi tema warna |
| Hooks | hooks/hooks.json |
Konfigurasi hook |
| Server MCP | .mcp.json |
Definisi server MCP |
| Server LSP | .lsp.json |
Konfigurasi language server |
| Monitors | monitors/monitors.json |
Konfigurasi monitor latar belakang |
| Executables | bin/ |
Executable yang ditambahkan ke PATH Bash tool dan dapat dipanggil sebagai perintah bare saat plugin diaktifkan. Anda tidak dapat menyertakan direktori ini dalam plugin yang Anda distribusikan melalui pengaturan organisasi claude.ai |
| Settings | settings.json |
Konfigurasi default yang diterapkan saat plugin diaktifkan. Hanya kunci agent dan subagentStatusLine yang didukung |
Referensi perintah CLI
Claude Code menyediakan perintah CLI untuk manajemen plugin non-interaktif, berguna untuk skrip dan otomasi.
plugin init
Membuat perancah plugin baru di ~/.claude/skills/<name>/. Pada sesi Claude Code berikutnya, plugin akan dimuat secara otomatis sebagai <name>@skills-dir dan muncul di /plugin dan claude plugin list tanpa langkah instalasi.
Lihat Skills-directory plugins untuk persyaratan cakupan dan kepercayaan.
claude plugin init <name> [options]
Perintah ini mengambil argumen-argumen berikut:
<name>: Nama plugin. Menjadi namespace skill dan nama direktori di bawah~/.claude/skills/, jadi tidak boleh mengandung spasi atau pemisah jalur.
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
--description <text> |
Deskripsi manifest | |
--author <name> |
Nama penulis | git config user.name |
--author-email <email> |
Email penulis | git config user.email |
--with <components...> |
Juga membuat perancah folder komponen. Nilai yang valid: skills, agents, hooks, mcp, lsp, output-style, channel |
|
-f, --force |
Timpa .claude-plugin/ yang ada di target |
|
-h, --help |
Tampilkan bantuan untuk perintah |
claude plugin new adalah alias untuk perintah ini.
Setiap nilai --with menambahkan file pemula untuk komponen tersebut, siap untuk diedit:
| Komponen | Apa yang dibuat perancah |
|---|---|
skills |
Skill <name>:example dengan namespace tambahan di samping yang default |
agents |
Definisi subagent agents/ |
hooks |
hooks/hooks.json dengan contoh penanganan acara |
mcp |
.mcp.json dengan contoh server HTTP dan stdio |
lsp |
Contoh language-server .lsp.json |
output-style |
output-styles/<name>.md yang diterapkan secara otomatis saat plugin diaktifkan |
channel |
channel berbasis MCP: server stdio (server.ts), .mcp.json-nya, dan package.json |
Plugin yang dibuat perancah menggunakan sumber @skills-dir daripada marketplace. Admin dapat memblokir sumber ini dengan strictKnownMarketplaces atau dengan menambahkan {"source": "skills-dir"} ke blockedMarketplaces dalam managed settings. Ketika diblokir, plugin init gagal sebelum menulis.
Contoh-contoh ini menunjukkan invokasi umum:
# Membuat perancah plugin minimal
claude plugin init my-helper
# Membuat perancah dengan folder skill dan hook
claude plugin init my-helper --with skills hooks
# Timpa perancah yang ada
claude plugin init my-helper --force
plugin install
Instal plugin dari marketplace yang tersedia.
claude plugin install <plugin> [options]
Perintah ini mengambil argumen-argumen berikut:
<plugin>: Nama plugin atauplugin-name@marketplace-nameuntuk marketplace tertentu
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
-s, --scope <scope> |
Cakupan instalasi: user, project, atau local |
user |
--config <key=value> |
Atur opsi userConfig yang dideklarasikan dalam manifest plugin. Ulangi flag untuk mengatur beberapa opsi |
|
-y, --yes |
Terima perintah yang dideklarasikan marketplace plugin, tanpa prompt konfirmasi: perintah yang menghasilkan plugin dengan sumber command, atau headersHelper yang mengautentikasi unduhan arsip. Menerima headersHelper memerlukan Claude Code v2.1.238 atau lebih baru. Claude Code masih mencetak perintah terlebih dahulu. Diperlukan ketika stdin atau stdout bukan TTY. Tidak berpengaruh di dalam sesi Claude Code, jadi jalankan perintah dari terminal Anda sendiri |
|
--json |
Cetak hasil sebagai satu objek JSON pada baris terakhir stdout alih-alih pesan yang dapat dibaca manusia, untuk digunakan dalam skrip. Lihat format hasil JSON. Memerlukan Claude Code v2.1.268 atau lebih baru | |
-h, --help |
Tampilkan bantuan untuk perintah |
Cakupan menentukan file pengaturan mana yang ditambahkan plugin yang diinstal. Misalnya, --scope project menulis ke enabledPlugins dalam .claude/settings.json, membuat plugin tersedia untuk semua orang yang mengkloning repositori proyek.
Dengan --json, baris terakhir stdout adalah satu objek JSON. Parsing hanya baris itu, karena Claude Code mencetak perintah apa pun yang dideklarasikan marketplace sebelumnya. Tiga field selalu ada:
command: subperintah yang dijalankan, sepertiinstalloutcome:okataufailedmessage: deskripsi hasil yang dapat dibaca manusia
Field lain, seperti pluginId, scope, dan failureCode, muncul hanya ketika berlaku. Opsi --json pada plugin uninstall, plugin update, plugin enable, dan plugin disable mencetak objek yang sama dengan field subperintah tersebut. Kesalahan penggunaan, seperti --scope yang tidak valid, tidak mencetak baris hasil dan keluar 1 dengan alasan di stderr.
Contoh-contoh ini menunjukkan invokasi umum:
# Instal ke cakupan pengguna (default)
claude plugin install formatter@my-marketplace
# Instal ke cakupan proyek (dibagikan dengan tim)
claude plugin install formatter@my-marketplace --scope project
# Instal ke cakupan lokal (tidak dibagikan dengan tim)
claude plugin install formatter@my-marketplace --scope local
plugin uninstall
Hapus plugin yang diinstal.
claude plugin uninstall <plugin> [options]
Perintah ini mengambil argumen-argumen berikut:
<plugin>: Nama plugin atauplugin-name@marketplace-name
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
-s, --scope <scope> |
Copot instalasi dari cakupan: user, project, atau local |
user |
--keep-data |
Pertahankan direktori data persisten plugin | |
--prune |
Juga hapus dependensi yang diinstal otomatis yang tidak diperlukan plugin lain. Lihat plugin prune | |
-y, --yes |
Lewati prompt konfirmasi --prune. Diperlukan ketika stdin atau stdout bukan TTY |
|
--json |
Cetak hasil sebagai satu objek JSON pada baris terakhir stdout, dalam format yang sama seperti plugin install --json. Tidak dapat digabungkan dengan --prune. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
-h, --help |
Tampilkan bantuan untuk perintah |
claude plugin remove dan claude plugin rm adalah alias untuk perintah ini.
Secara default, mencopot instalasi dari cakupan terakhir yang tersisa juga menghapus direktori ${CLAUDE_PLUGIN_DATA} plugin. Gunakan --keep-data untuk mempertahankannya, misalnya saat menginstal ulang setelah menguji versi baru.
Ketika plugin yang diinstal dari marketplace berbeda berbagi nama, bentuk plugin-name@marketplace-name mencopot instalasi hanya plugin dari marketplace bernama. Sebelum v2.1.212, bentuk yang memenuhi syarat dapat mencocokkan dan mencopot instalasi plugin dengan nama yang sama dari marketplace berbeda.
plugin prune
Hapus dependensi plugin yang diinstal otomatis yang tidak lagi diperlukan oleh plugin yang diinstal. Dependensi yang Claude Code tarik untuk memenuhi field dependencies plugin lain dihapus; plugin yang Anda instal secara langsung tidak pernah disentuh.
claude plugin prune [options]
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
-s, --scope <scope> |
Prune pada cakupan: user, project, atau local |
user |
--dry-run |
Daftar apa yang akan dihapus tanpa menghapus apa pun | |
-y, --yes |
Lewati prompt konfirmasi. Diperlukan ketika stdin atau stdout bukan TTY | |
-h, --help |
Tampilkan bantuan untuk perintah |
claude plugin autoremove adalah alias untuk perintah ini.
Perintah mencantumkan dependensi yatim piatu dan meminta konfirmasi sebelum menghapusnya. Untuk menghapus plugin dan membersihkan dependensinya dalam satu langkah, jalankan claude plugin uninstall <plugin> --prune.
plugin enable
Aktifkan plugin yang dinonaktifkan. Ketika target diinstal dari marketplace dan mendeklarasikan dependencies, Claude Code mengaktifkannya secara transitif pada cakupan yang sama. Perintah gagal dalam kondisi yang Enable or disable a plugin with dependencies daftar.
claude plugin enable <plugin> [options]
Perintah ini mengambil argumen-argumen berikut:
<plugin>: Nama plugin atauplugin-name@marketplace-name
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
-s, --scope <scope> |
Cakupan untuk diaktifkan: user, project, atau local. Ketika dihilangkan, Claude Code mendeteksi cakupan tempat plugin diinstal |
Auto-detect |
--json |
Cetak hasil sebagai satu objek JSON pada baris terakhir stdout, dalam format yang sama seperti plugin install --json. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
-h, --help |
Tampilkan bantuan untuk perintah |
plugin disable
Nonaktifkan plugin tanpa mencopot instalasinya. Ketika target diinstal dari marketplace, perintah gagal jika plugin yang diaktifkan lain bergantung pada itu. Pesan kesalahan mencakup perintah berantai yang menonaktifkan setiap plugin yang bergantung padanya terlebih dahulu.
claude plugin disable [plugin] [options]
Perintah ini mengambil argumen-argumen berikut:
[plugin]: Nama plugin atauplugin-name@marketplace-name. Opsional saat menggunakan--all
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
-a, --all |
Nonaktifkan semua plugin yang diaktifkan. Tidak dapat digabungkan dengan --scope |
|
-s, --scope <scope> |
Cakupan untuk dinonaktifkan: user, project, atau local. Ketika dihilangkan, Claude Code mendeteksi cakupan tempat plugin diinstal |
Auto-detect |
--json |
Cetak hasil sebagai satu objek JSON pada baris terakhir stdout, dalam format yang sama seperti plugin install --json. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
-h, --help |
Tampilkan bantuan untuk perintah |
plugin update
Perbarui plugin ke versi terbaru.
claude plugin update <plugin> [options]
Perintah ini mengambil argumen-argumen berikut:
<plugin>: Nama plugin atauplugin-name@marketplace-name
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
-s, --scope <scope> |
Cakupan untuk diperbarui: user, project, local, atau managed |
user |
-y, --yes |
Terima perintah yang dideklarasikan marketplace plugin, tanpa prompt konfirmasi: perintah yang menghasilkan plugin dengan sumber command, atau headersHelper yang mengautentikasi unduhan arsip. Menerima headersHelper memerlukan Claude Code v2.1.238 atau lebih baru. Claude Code masih mencetak perintah terlebih dahulu. Diperlukan ketika stdin atau stdout bukan TTY. Tidak berpengaruh di dalam sesi Claude Code, jadi jalankan perintah dari terminal Anda sendiri |
|
--json |
Cetak hasil sebagai satu objek JSON pada baris terakhir stdout, dalam format yang sama seperti plugin install --json. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
-h, --help |
Tampilkan bantuan untuk perintah |
Claude Code menyelesaikan nama plugin tanpa kualifikasi terhadap plugin yang diinstal. Ketika plugin yang diinstal dari marketplace berbeda berbagi nama, Claude Code menolak pembaruan dan mencantumkan perintah plugin-name@marketplace-name yang memenuhi syarat untuk dijalankan sebagai gantinya. Sebelum v2.1.246, Claude Code hanya menerima bentuk yang memenuhi syarat dan menolak nama tanpa kualifikasi sebagai tidak ditemukan.
plugin list
Daftar plugin yang diinstal dengan versi, marketplace sumber, dan status pengaktifan mereka.
claude plugin list [options]
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
--json |
Output sebagai JSON. Baris plugin dengan masalah pemuatan atau peringatan penulisan membawa array string errors atau notes. Pada Claude Code v2.1.268 atau lebih baru, array errorDetails dan noteDetails paralel memberikan type diagnostik setiap entri dan nama yang dirujuknya, seperti plugin, marketplace, server, atau file |
|
--available |
Sertakan plugin yang tersedia dari marketplace. Memerlukan --json |
|
-h, --help |
Tampilkan bantuan untuk perintah |
Dalam sesi interaktif, /plugin list mencetak daftar serupa secara inline, tetapi mencakup hanya plugin yang diinstal marketplace:
- Plugin yang dimuat dari direktori skills muncul di antarmuka
/plugindan dalamclaude plugin list, tetapi tidak dalam output/plugin listinline. - Pada Claude Code v2.1.239 atau lebih baru, plugin yang disinkronkan dari claude.ai muncul dalam
claude plugin listketika Anda menjalankannya di lingkungan tempat sesi yang disinkronkan mengunduhnya. Mereka tidak muncul dalam output/plugin listinline. - Plugin yang dimuat untuk sesi dengan
--plugin-diratau--plugin-urlmuncul di antarmuka/plugin, dan dalamclaude plugin listhanya ketika flag yang sama mendahului subperintah, seperti dalamclaude --plugin-dir <dir> plugin list. Hanya nama flag lokasi mereka, jadiclaude plugin listtanpa kualifikasi tidak dapat menemukannya, tidak seperti plugin yang disinkronkan dan plugin direktori skills, yang direktorinya tetap Claude Code pindai.
Bentuk interaktif menerima --enabled atau --disabled untuk menampilkan hanya plugin dalam status itu, dan ls sebagai singkatan untuk list.
plugin details
Tampilkan inventaris komponen plugin dan biaya token yang diproyeksikan. Output mencantumkan semua komponen yang disumbangkan plugin, dikelompokkan sebagai Skills, Agents, Hooks, server MCP, dan server LSP, bersama dengan perkiraan berapa banyak token yang ditambahkannya ke setiap sesi. Grup Skills mencakup entri skills/ dan commands/.
claude plugin details <name>
Perintah ini mengambil argumen-argumen berikut:
<name>: Nama plugin atauplugin-name@marketplace-name
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
-h, --help |
Tampilkan bantuan untuk perintah |
Output menampilkan dua angka biaya untuk setiap komponen:
- Always-on: token yang ditambahkan ke setiap sesi oleh teks daftar plugin, seperti deskripsi skill, deskripsi agent, dan nama perintah, terlepas dari apakah komponen apa pun diaktifkan.
- On-invoke: token yang dihabiskan komponen saat diaktifkan. Ditampilkan per komponen, bukan sebagai total plugin, karena sesi khas hanya mengaktifkan subset komponen.
Contoh ini menunjukkan seperti apa output untuk plugin dengan dua skill:
dependency-guard 1.2.0
Dependency analysis for Claude Code sessions
Source: dependency-guard@example-marketplace
Component inventory
Skills (2) scan-dependencies, review-changes
Agents (0)
Hooks (1) SessionStart (harness-only — no model context cost)
MCP servers (0)
LSP servers (0)
Projected token cost
Always-on: ~180 tok added to every session
Per-component (rounded)
component always-on on-invoke
scan-dependencies ~100 ~2400
review-changes ~80 ~1800
On-invoke cost is paid each time a skill or agent fires.
Token counts are estimates and may differ from actual usage.
Total always-on dihitung melalui API count_tokens untuk model aktif Anda. Angka per-komponen diskalakan secara proporsional dari total itu. Jika API tidak dapat dijangkau, perintah kembali ke perkiraan berbasis karakter.
plugin validate
Periksa plugin atau marketplace untuk kesalahan sintaks dan skema sebelum menerbitkan.
Perintah keluar 0 ketika validasi lulus, 1 ketika gagal, dan 2 ketika validasi itu sendiri gagal, seperti ketika jalur yang Anda berikan tidak dapat dibaca.
claude plugin validate <path> [options]
Perintah ini mengambil argumen-argumen berikut:
<path>: Jalur ke direktori plugin atau direktori marketplace. Lihat Validate a plugin or a directory without a manifest untuk file mana yang dicakup plugin run.
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
--strict |
Perlakukan peringatan sebagai kesalahan dan keluar 1 pada mereka. Gunakan dalam CI untuk menangkap masalah yang ditoleransi runtime, seperti unrecognized fields | |
--json |
Output laporan validasi sebagai satu objek JSON dengan kode keluar yang sama. Memerlukan Claude Code v2.1.259 atau lebih baru | |
-h, --help |
Tampilkan bantuan untuk perintah |
Dengan --json, Claude Code menulis laporan ke stdout sebagai satu objek JSON dengan field tingkat atas ini:
success: versi yang sama yang diberikan kode keluarstrict: apakah run memperlakukan peringatan sebagai kesalahantarget: jalur yang diselesaikan Claude Code divalidasimanifest: hasil manifest itu sendiri, ataunulluntuk run tanpa manifestcontents: hasil per-file, masing-masing menamaifile-nya dan membawa arrayerrors,warnings, dannotes
Pada keluar 2, perintah tidak menulis apa pun ke stdout; pesan kesalahan masuk ke stderr.
Dalam sesi interaktif, /plugin validate <path> menjalankan pemeriksaan yang sama secara inline.
plugin eval
Jalankan eval cases plugin dan laporkan hasil yang diskor. Memerlukan Claude Code v2.1.269 atau lebih baru. Setiap case adalah prompt plus graders; Claude Code menjalankannya beberapa kali dalam sesi terisolasi dengan hanya plugin target yang dimuat, dan secara default juga tanpa plugin sehingga laporan menunjukkan perbedaannya. Lihat Test plugins with evals untuk format case, graders, hasil, dan penggunaan CI.
claude plugin eval [target] [options]
Target opsional adalah direktori plugin, file prompt.md atau case.yaml tunggal, plugin yang diinstal sebagai name atau name@marketplace, atau name@skills-dir, dan default ke direktori saat ini. Letakkan sebelum --tag, --allow-tools, dan --json.
Tabel ini mencantumkan opsi yang paling banyak digunakan run. Jalankan claude plugin eval --help untuk set lengkap, termasuk --case, --tag, --output-dir, --report, --allow-real-servers, --keep-temp, dan --verbose.
| Opsi | Deskripsi | Default |
|---|---|---|
--runs <n> |
Runs per case per arm | Setiap case's runs, else 3 |
-j, --concurrency <n> |
Sesi agent untuk dijalankan sekaligus, 1 hingga 8. Mereka berbagi batas laju Anda | 1 |
--model <model> |
Model untuk agent yang diuji | Setiap case's model, else ANTHROPIC_MODEL jika diatur, else default Claude Code |
--judge-model <model> |
Model untuk llm dan baseline graders |
Model kecil cepat |
--ablation <mode> |
none atau with-without. Lihat Compare against a no-plugin baseline |
with-without ketika plugin diselesaikan, else none |
--threshold <0..1> |
Keluar 1 jika case apa pun mencetak di bawah ini | 1.0 |
--max-cost-usd <usd> |
Berhenti sebelum run berikutnya setelah pengeluaran mencapai ini, keluar 2, dan laporkan hasil parsial | Tidak ada batas |
--allow-tools <tools...> |
Berikan tools di luar set read-only, seperti Bash, Write, Edit, atau "mcp__plugin_<plugin>_<server>__*". Lihat Grant tools |
|
--scaffold |
Jalankan setiap case's scaffold_script |
Off |
--trust-plugin |
Lewati prompt kepercayaan first-run, untuk CI. Lihat What a run can access | Off |
--mocks <mode> |
record atau off. Lihat Mock MCP servers |
record |
--eval-dir <dir> |
Direktori di bawah plugin yang menyimpan cases | Manifest's experimental.evals, else evals |
--json [path] |
Cetak result document ke stdout, atau tulis ke path .json |
|
--no-publish |
Simpan laporan HTML secara lokal | |
-h, --help |
Tampilkan bantuan untuk perintah |
Perintah keluar 0 ketika setiap case memenuhi threshold, 1 pada case yang gagal, kesalahan load, atau direktori plugin yang tidak dipercaya, 2 pada run parsial, 130 ketika terputus, dan 143 ketika dihentikan. Lihat Run evals in CI.
plugin eval init
Buat suite eval untuk plugin di direktori saat ini. Memerlukan Claude Code v2.1.269 atau lebih baru. Di terminal ini memulai wawancara penulisan yang membaca plugin, mengusulkan cases dan graders, pilot mereka, dan menulis file. Dengan --bare, atau tanpa terminal, itu menulis template single-case kosong sebagai gantinya. Jalankan dari dalam sesi Claude Code interaktif, itu mencetak instruksi wawancara untuk sesi itu ikuti daripada menulis template. Lihat Create your first eval suite.
claude plugin eval init [name] [options]
Name opsional adalah case name: wawancara tidak memerlukan satu, sementara --bare dan path template no-terminal memerlukan satu. Itu menerima opsi ini:
| Opsi | Deskripsi | Default |
|---|---|---|
--bare |
Tulis prompt.md kosong dan graders/criteria.md untuk <name> alih-alih menjalankan wawancara |
|
-i, --interactive |
Perlukan wawancara. Gagal tanpa terminal alih-alih menulis template | |
--eval-dir <dir> |
Direktori di bawah direktori saat ini untuk menulis cases ke | Manifest's experimental.evals, else evals |
-h, --help |
Tampilkan bantuan untuk perintah |
plugin tag
Buat tag git rilis untuk plugin. Secara default perintah menandai plugin di direktori saat ini; berikan jalur untuk menandai plugin di tempat lain. Lihat Tag plugin releases.
claude plugin tag [path] [options]
Perintah ini mengambil argumen-argumen berikut:
[path]: Jalur ke direktori plugin. Default ke direktori saat ini.
Perintah ini menerima opsi-opsi berikut:
| Opsi | Deskripsi | Default |
|---|---|---|
--push |
Dorong tag ke remote setelah membuatnya | |
--dry-run |
Cetak apa yang akan ditandai tanpa membuat tag | |
-f, --force |
Buat tag bahkan jika pohon kerja kotor atau tag sudah ada | |
-m, --message <msg> |
Pesan anotasi tag. Gunakan %s sebagai placeholder untuk versi |
|
--remote <name> |
Remote untuk didorong dengan --push |
origin |
-h, --help |
Tampilkan bantuan untuk perintah |
Alat debugging dan pengembangan
Perintah debugging
Gunakan claude --debug untuk melihat detail pemuatan plugin:
Ini menampilkan:
- Plugin mana yang sedang dimuat
- Kesalahan apa pun dalam manifes plugin
- Pendaftaran skill, agent, dan hook
- Inisialisasi server MCP
Masalah umum
| Masalah | Penyebab | Solusi |
|---|---|---|
| Plugin tidak dimuat | plugin.json tidak valid |
Jalankan claude plugin validate ./my-plugin atau /plugin validate ./my-plugin, di mana ./my-plugin adalah direktori plugin Anda, untuk memeriksa plugin.json, hooks/hooks.json, dan frontmatter dari skills, agents, dan commands di direktori default plugin untuk kesalahan sintaks dan skema. Lihat Validate a plugin or a directory without a manifest untuk mengetahui apa yang dicakup oleh suatu run |
| Skills tidak muncul | Struktur direktori salah | Pastikan skills/ atau commands/ berada di root plugin, bukan di dalam .claude-plugin/ |
| Hooks tidak aktif | Script tidak dapat dieksekusi | Jalankan chmod +x script.sh |
| Server MCP gagal | ${CLAUDE_PLUGIN_ROOT} hilang |
Gunakan variabel untuk semua path plugin |
| Kesalahan path | Path absolut digunakan | Buat path relatif, dimulai dengan ./; lihat Path behavior rules, yang mencakup pengecualian "." di field skills |
LSP Executable not found in $PATH |
Language server tidak terinstal | Instal binary (misalnya, npm install -g typescript-language-server typescript) |
Contoh pesan kesalahan
Kesalahan validasi manifes:
Invalid JSON syntax: Unexpected token } in JSON at position 142: periksa koma yang hilang, koma berlebih, atau string yang tidak dikutipPlugin <name> has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Invalid input: expected string, received undefined: field yang diperlukan hilangPlugin <name> has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...: kesalahan sintaks JSON. Sebelum v2.1.246, Claude Code juga menghasilkan kesalahan ini untukplugin.jsonyang disimpan sebagai UTF-8 dengan byte-order mark (BOM) di awal, bahkan ketika JSON sebaliknya valid.
Kesalahan pemuatan plugin:
Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.: path command ada tetapi tidak berisi file command yang validPlugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.: pathsourcedi marketplace.json menunjuk ke direktori yang tidak adaPlugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.: hapus definisi komponen duplikat atau hapusstrict: falsedi entri marketplace
Troubleshooting hook
Hook script tidak dieksekusi:
- Periksa script dapat dieksekusi:
chmod +x ./scripts/your-script.sh - Verifikasi baris shebang: Baris pertama harus
#!/bin/bashatau#!/usr/bin/env bash - Periksa path menggunakan
${CLAUDE_PLUGIN_ROOT}:"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh" - Uji script secara manual:
./scripts/your-script.sh
Hook tidak dipicu pada event yang diharapkan:
- Verifikasi nama event benar (case-sensitive):
PostToolUse, bukanpostToolUse - Periksa pola matcher cocok dengan tools Anda:
"matcher": "Write|Edit"untuk operasi file - Konfirmasi tipe hook valid:
command,http,mcp_tool,prompt, atauagent
Troubleshooting server MCP
Server tidak memulai:
- Periksa command ada dan dapat dieksekusi
- Verifikasi semua path menggunakan variabel
${CLAUDE_PLUGIN_ROOT} - Periksa log server MCP:
claude --debugmenampilkan kesalahan inisialisasi - Uji server secara manual di luar Claude Code
Tool server tidak muncul:
- Pastikan server dikonfigurasi dengan benar di
.mcp.jsonatauplugin.json - Verifikasi server mengimplementasikan protokol MCP dengan benar
- Periksa timeout koneksi di output debug
Kesalahan struktur direktori
Gejala: Plugin dimuat tetapi komponen (skills, agents, hooks) hilang.
Struktur yang benar: Komponen harus berada di root plugin, bukan di dalam .claude-plugin/. Hanya plugin.json yang termasuk dalam .claude-plugin/.
Daftar periksa debug:
- Jalankan
claude --debugdan cari pesan "loading plugin" - Periksa bahwa setiap direktori komponen terdaftar di output debug
- Verifikasi izin file memungkinkan membaca file plugin
Referensi distribusi dan versioning
Manajemen versi
Claude Code menggunakan versi plugin sebagai cache key yang menentukan apakah update tersedia. Ketika Anda menjalankan /plugin update atau auto-update aktif, Claude Code menghitung versi saat ini dan melewati update jika cocok dengan yang sudah terinstal.
Untuk setiap tipe sumber kecuali command, Claude Code menyelesaikan versi dari yang pertama dari ini yang diatur:
- Field
versiondalamplugin.jsonplugin - Field
versiondalam entri marketplace plugin dalammarketplace.json - SHA commit git dari sumber plugin, untuk sumber
github,url,git-subdir, dan relative-path dalam marketplace yang di-host git - Digest SHA-256, untuk sumber
archive: pinsha256dalam entri marketplace, atau digest dari file yang diunduh ketika Anda tidak menetapkan pin. Claude Code mempersingkatnya menjadi 12 karakter pertama unknown, untuk sumbernpmatau direktori lokal yang tidak berada dalam repositori git
Untuk sumber command, Claude Code selalu menurunkan versi dari apa yang dihasilkan perintah: hash konten 12-karakter sendiri, atau ditambahkan ke versi plugin.json sebagai <version>-<hash> ketika satu diatur. Claude Code mengabaikan field version entri marketplace untuk sumber command. Perintah yang output hash-nya berubah oleh karena itu menghasilkan versi baru, bahkan ketika string versi yang ditulis tetap sama. Dalam link mode, hash mencakup path nyata direktori yang dicetak dan entri tingkat atasnya daripada konten file.
Untuk tipe sumber tersebut, ini memberi Anda tiga cara untuk membuat versi plugin:
| Pendekatan | Cara | Perilaku update | Terbaik untuk |
|---|---|---|---|
| Versi eksplisit | Atur "version": "2.1.0" dalam plugin.json |
Pengguna mendapatkan update hanya ketika Anda menaikkan field ini. Mendorong commit baru tanpa menaikkannya tidak berpengaruh, dan /plugin update melaporkan "already at the latest version". |
Plugin yang dipublikasikan dengan siklus rilis stabil |
| Versi commit-SHA | Hilangkan version dari plugin.json dan entri marketplace |
Pengguna mendapatkan update kapan pun commit yang diselesaikan sumber berubah | Plugin internal atau tim dalam pengembangan aktif |
| Versi digest | Gunakan sumber archive dan hilangkan version dari plugin.json dan entri marketplace |
Dengan pin sha256, pengguna mendapatkan update ketika Anda mengubah pin. Tanpa satu, pengguna mendapatkan update kapan pun byte file zip yang di-host berubah |
Plugin yang dipublikasikan sebagai file zip ke server statis atau repositori artefak |
Jika Anda menggunakan versi eksplisit, ikuti semantic versioning (MAJOR.MINOR.PATCH): naikkan MAJOR untuk perubahan breaking, MINOR untuk fitur baru, PATCH untuk perbaikan bug. Dokumentasikan perubahan dalam CHANGELOG.md.