Referensi ini menyediakan spesifikasi teknis lengkap untuk sistem plugin Claude Code, termasuk skema komponen, perintah CLI, dan alat pengembangan.
Sebuah plugin adalah direktori yang mandiri berisi komponen yang memperluas Claude Code dengan fungsionalitas khusus. Komponen plugin mencakup skills, agents, hooks, MCP servers, dan LSP servers.
Referensi komponen plugin
Skills
Plugins menambahkan skills ke Claude Code, membuat pintasan /name yang dapat Anda atau Claude panggil.
Lokasi: Direktori skills/ atau commands/ 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
Perilaku integrasi:
- Skills dan commands secara otomatis ditemukan saat plugin dipasang
- Claude dapat memanggilnya secara otomatis berdasarkan konteks tugas
- Skills dapat menyertakan file pendukung di samping SKILL.md
Untuk detail lengkap, lihat Skills.
Agents
Plugins 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 dikirim plugin.
Titik integrasi:
- Agents muncul di antarmuka
/agents
- Claude dapat memanggil agents secara otomatis berdasarkan konteks tugas
- Agents dapat dipanggil secara manual oleh pengguna
- Plugin agents bekerja bersama agents Claude bawaan
Untuk detail lengkap, lihat Subagents.
Hooks
Plugins dapat menyediakan event handlers yang merespons peristiwa Claude Code secara otomatis.
Lokasi: hooks/hooks.json di root plugin, atau inline di 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 peristiwa lifecycle yang sama seperti hooks yang ditentukan pengguna:
| Event | When it fires |
|---|
SessionStart | When a session begins or resumes |
UserPromptSubmit | When you submit a prompt, before Claude processes it |
PreToolUse | Before a tool call executes. Can block it |
PermissionRequest | When a permission dialog appears |
PermissionDenied | When a tool call is denied by the auto mode classifier. Return {retry: true} to tell the model it may retry the denied tool call |
PostToolUse | After a tool call succeeds |
PostToolUseFailure | After a tool call fails |
Notification | When Claude Code sends a notification |
SubagentStart | When a subagent is spawned |
SubagentStop | When a subagent finishes |
TaskCreated | When a task is being created via TaskCreate |
TaskCompleted | When a task is being marked as completed |
Stop | When Claude finishes responding |
StopFailure | When the turn ends due to an API error. Output and exit code are ignored |
TeammateIdle | When an agent team teammate is about to go idle |
InstructionsLoaded | When a CLAUDE.md or .claude/rules/*.md file is loaded into context. Fires at session start and when files are lazily loaded during a session |
ConfigChange | When a configuration file changes during a session |
CwdChanged | When the working directory changes, for example when Claude executes a cd command. Useful for reactive environment management with tools like direnv |
FileChanged | When a watched file changes on disk. The matcher field specifies which filenames to watch |
WorktreeCreate | When a worktree is being created via --worktree or isolation: "worktree". Replaces default git behavior |
WorktreeRemove | When a worktree is being removed, either at session exit or when a subagent finishes |
PreCompact | Before context compaction |
PostCompact | After context compaction completes |
Elicitation | When an MCP server requests user input during a tool call |
ElicitationResult | After a user responds to an MCP elicitation, before the response is sent back to the server |
SessionEnd | When a session terminates |
Tipe hook:
command: jalankan perintah shell atau scripts
http: kirim JSON event sebagai POST request ke URL
prompt: evaluasi prompt dengan LLM (menggunakan placeholder $ARGUMENTS untuk konteks)
agent: jalankan verifier agentic dengan tools untuk tugas verifikasi kompleks
MCP servers
Plugins dapat menggabungkan Model Context Protocol (MCP) servers untuk menghubungkan Claude Code dengan alat dan layanan eksternal.
Lokasi: .mcp.json di root plugin, atau inline di 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"],
"cwd": "${CLAUDE_PLUGIN_ROOT}"
}
}
}
Perilaku integrasi:
- Plugin MCP servers dimulai secara otomatis saat plugin diaktifkan
- Servers muncul sebagai alat MCP standar di toolkit Claude
- Kemampuan server terintegrasi dengan mulus dengan alat Claude yang ada
- Plugin servers dapat dikonfigurasi secara independen dari MCP servers pengguna
LSP servers
Mencari cara menggunakan LSP plugins? Pasang dari marketplace resmi: cari “lsp” di tab Discover /plugin. Bagian ini mendokumentasikan cara membuat LSP plugins untuk bahasa yang tidak tercakup oleh marketplace resmi.
Plugins dapat menyediakan server Language Server Protocol (LSP) untuk memberikan Claude intelijen kode real-time saat bekerja pada codebase Anda.
Integrasi LSP menyediakan:
- Diagnostik instan: Claude melihat kesalahan dan peringatan segera setelah setiap edit
- Navigasi kode: buka definisi, temukan referensi, dan informasi hover
- Kesadaran bahasa: informasi tipe dan dokumentasi untuk simbol kode
Lokasi: .lsp.json di root plugin, atau inline di plugin.json
Format: Konfigurasi JSON yang memetakan nama language server ke konfigurasinya
Format file .lsp.json:
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
Inline di plugin.json:
{
"name": "my-plugin",
"lspServers": {
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
}
Field yang diperlukan:
| Field | Deskripsi |
|---|
command | Biner LSP yang akan dijalankan (harus ada di PATH) |
extensionToLanguage | Memetakan ekstensi file ke pengenal bahasa |
Field opsional:
| Field | Deskripsi |
|---|
args | Argumen baris perintah untuk LSP server |
transport | Transport komunikasi: stdio (default) atau socket |
env | Variabel lingkungan yang diatur saat memulai server |
initializationOptions | Opsi yang diteruskan ke server selama inisialisasi |
settings | Pengaturan yang diteruskan melalui workspace/didChangeConfiguration |
workspaceFolder | Jalur folder workspace untuk server |
startupTimeout | Waktu maksimal untuk menunggu startup server (milidetik) |
shutdownTimeout | Waktu maksimal untuk menunggu shutdown yang elegan (milidetik) |
restartOnCrash | Apakah secara otomatis memulai ulang server jika crash |
maxRestarts | Jumlah maksimal upaya restart sebelum menyerah |
Anda harus memasang biner 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, pasang biner yang diperlukan untuk bahasa Anda.
LSP plugins 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-lsp | rust-analyzer | Lihat instalasi rust-analyzer |
Pasang language server terlebih dahulu, kemudian pasang plugin dari marketplace.
Cakupan instalasi plugin
Saat Anda memasang 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 version control |
local | .claude/settings.local.json | Plugin khusus proyek, gitignored |
managed | Pengaturan terkelola | Plugin terkelola (read-only, hanya update) |
Plugins menggunakan sistem cakupan yang sama dengan konfigurasi Claude Code lainnya. Untuk instruksi instalasi dan flag cakupan, lihat Pasang plugins. Untuk penjelasan lengkap tentang cakupan, lihat Configuration scopes.
Skema manifest plugin
File .claude-plugin/plugin.json mendefinisikan metadata dan konfigurasi plugin Anda. Bagian ini mendokumentasikan semua field dan opsi yang didukung.
Manifest bersifat opsional. Jika dihilangkan, Claude Code secara otomatis menemukan komponen di lokasi default dan menurunkan nama plugin dari nama direktori. Gunakan manifest saat Anda perlu memberikan metadata atau jalur komponen khusus.
Skema lengkap
{
"name": "plugin-name",
"version": "1.2.0",
"description": "Brief plugin description",
"author": {
"name": "Author Name",
"email": "[email protected]",
"url": "https://github.com/author"
},
"homepage": "https://docs.example.com/plugin",
"repository": "https://github.com/author/plugin",
"license": "MIT",
"keywords": ["keyword1", "keyword2"],
"commands": ["./custom/commands/special.md"],
"agents": "./custom/agents/",
"skills": "./custom/skills/",
"hooks": "./config/hooks.json",
"mcpServers": "./mcp-config.json",
"outputStyles": "./styles/",
"lspServers": "./.lsp.json"
}
Field yang diperlukan
Jika Anda menyertakan manifest, name adalah satu-satunya field yang diperlukan.
| Field | Tipe | Deskripsi | Contoh |
|---|
name | string | Pengenal unik (kebab-case, tanpa spasi) | "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.
| Field | Tipe | Deskripsi | Contoh |
|---|
version | string | Versi semantik. Jika juga diatur di entri marketplace, plugin.json memiliki prioritas. Anda hanya perlu mengaturnya di satu tempat. | "2.1.0" |
description | string | Penjelasan singkat tentang tujuan plugin | "Deployment automation tools" |
author | object | Informasi penulis | {"name": "Dev Team", "email": "[email protected]"} |
homepage | string | URL dokumentasi | "https://docs.example.com" |
repository | string | URL kode sumber | "https://github.com/user/plugin" |
license | string | Pengenal lisensi | "MIT", "Apache-2.0" |
keywords | array | Tag penemuan | ["deployment", "ci-cd"] |
Field jalur komponen
| Field | Tipe | Deskripsi | Contoh |
|---|
commands | string|array | File/direktori command tambahan | "./custom/cmd.md" atau ["./cmd1.md"] |
agents | string|array | File agent tambahan | "./custom/agents/reviewer.md" |
skills | string|array | Direktori skill tambahan | "./custom/skills/" |
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 tambahan | "./styles/" |
lspServers | string|array|object | Konfigurasi Language Server Protocol untuk intelijen kode (buka definisi, temukan referensi, dll.) | "./.lsp.json" |
userConfig | object | Nilai yang dapat dikonfigurasi pengguna yang diminta saat enable. Lihat User configuration | Lihat di bawah |
channels | array | Deklarasi channel untuk message injection (Telegram, Slack, Discord style). Lihat Channels | Lihat di bawah |
User configuration
Field userConfig mendeklarasikan nilai yang Claude Code minta dari pengguna saat plugin diaktifkan. Gunakan ini daripada memerlukan pengguna untuk mengedit settings.json secara manual.
{
"userConfig": {
"api_endpoint": {
"description": "Endpoint API tim Anda",
"sensitive": false
},
"api_token": {
"description": "Token autentikasi API",
"sensitive": true
}
}
}
Kunci harus berupa pengenal yang valid. Setiap nilai tersedia untuk substitusi sebagai ${user_config.KEY} di konfigurasi MCP dan LSP server, perintah hook, dan (hanya untuk nilai non-sensitif) konten skill dan agent. Nilai juga diekspor ke subprocess plugin sebagai variabel lingkungan CLAUDE_PLUGIN_OPTION_<KEY>.
Nilai non-sensitif disimpan di settings.json di bawah pluginConfigs[<plugin-id>].options. Nilai sensitif masuk ke keychain sistem (atau ~/.claude/.credentials.json di mana keychain tidak tersedia). Penyimpanan keychain dibagikan dengan token OAuth dan memiliki batas total sekitar 2 KB, jadi jaga nilai sensitif tetap kecil.
Channels
Field channels memungkinkan plugin mendeklarasikan satu atau lebih message channels yang menyuntikkan konten ke dalam percakapan. Setiap channel mengikat ke MCP server yang disediakan plugin.
{
"channels": [
{
"server": "telegram",
"userConfig": {
"bot_token": { "description": "Token bot Telegram", "sensitive": true },
"owner_id": { "description": "ID pengguna Telegram Anda", "sensitive": false }
}
}
]
}
Field server diperlukan dan harus cocok dengan kunci di mcpServers plugin. Field userConfig per-channel opsional menggunakan skema yang sama dengan field tingkat atas, memungkinkan plugin meminta token bot atau ID pemilik saat plugin diaktifkan.
Aturan perilaku jalur
Penting: Jalur khusus melengkapi direktori default - mereka tidak menggantikannya.
- Jika
commands/ ada, itu dimuat selain jalur command khusus
- Semua jalur harus relatif terhadap root plugin dan dimulai dengan
./
- Commands dari jalur khusus menggunakan aturan penamaan dan namespacing yang sama
- Beberapa jalur dapat ditentukan sebagai array untuk fleksibilitas
Contoh jalur:
{
"commands": [
"./specialized/deploy.md",
"./utilities/batch-process.md"
],
"agents": [
"./custom-agents/reviewer.md",
"./custom-agents/tester.md"
]
}
Variabel lingkungan
Claude Code menyediakan dua variabel untuk mereferensikan jalur plugin. Keduanya disubstitusi inline di mana pun mereka muncul dalam konten skill, konten agent, perintah hook, dan konfigurasi MCP atau LSP server. Keduanya juga diekspor sebagai variabel lingkungan ke proses hook dan subprocess MCP atau LSP server.
${CLAUDE_PLUGIN_ROOT}: jalur absolut ke direktori instalasi plugin Anda. Gunakan ini untuk mereferensikan scripts, binaries, dan file konfigurasi yang disertakan dengan plugin. Jalur ini berubah saat plugin diperbarui, jadi file yang Anda tulis di sini tidak bertahan setelah update.
${CLAUDE_PLUGIN_DATA}: direktori persisten untuk state plugin yang bertahan setelah updates. Gunakan ini untuk dependensi yang dipasang seperti node_modules atau Python virtual environments, kode yang dihasilkan, caches, dan file lainnya yang harus bertahan di seluruh versi plugin. Direktori dibuat secara otomatis pertama kali variabel ini direferensikan.
{
"hooks": {
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/process.sh"
}
]
}
]
}
}
Direktori data persisten
Direktori ${CLAUDE_PLUGIN_DATA} diselesaikan ke ~/.claude/plugins/data/{id}/, di mana {id} adalah pengenal plugin dengan karakter di luar a-z, A-Z, 0-9, _, dan - diganti dengan -. Untuk plugin yang dipasang sebagai formatter@my-marketplace, direktorinya adalah ~/.claude/plugins/data/formatter-my-marketplace/.
Penggunaan umum adalah memasang dependensi bahasa sekali dan menggunakannya kembali di seluruh sesi dan update plugin. Karena direktori data bertahan lebih lama dari versi plugin tunggal, pemeriksaan keberadaan direktori saja tidak dapat mendeteksi saat update mengubah manifest dependensi plugin. Pola yang direkomendasikan membandingkan manifest yang disertakan terhadap salinan di direktori data dan memasang ulang saat mereka berbeda.
Hook SessionStart ini memasang node_modules pada run pertama dan lagi kapan pun update 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 saat salinan yang disimpan hilang atau berbeda dari yang disertakan, mencakup run pertama dan updates yang mengubah dependensi. Jika npm install gagal, trailing rm menghapus manifest yang disalin sehingga sesi berikutnya mencoba lagi.
Scripts yang disertakan di ${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 saat Anda menghapus plugin dari cakupan terakhir di mana itu dipasang. Antarmuka /plugin menunjukkan ukuran direktori dan meminta sebelum menghapus. CLI menghapus secara default; teruskan --keep-data untuk mempertahankannya.
Caching plugin dan resolusi file
Plugins ditentukan dalam salah satu dari dua cara:
- Melalui
claude --plugin-dir, untuk durasi sesi.
- Melalui marketplace, dipasang 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. Memahami perilaku ini penting saat mengembangkan plugins yang mereferensikan file eksternal.
Batasan path traversal
Plugin yang dipasang tidak dapat mereferensikan file di luar direktorinya. Jalur yang melintasi di luar root plugin (seperti ../shared-utils) tidak akan berfungsi setelah instalasi karena file eksternal tersebut tidak disalin ke cache.
Bekerja dengan dependensi eksternal
Jika plugin Anda perlu mengakses file di luar direktorinya, Anda dapat membuat symbolic links ke file eksternal dalam direktori plugin Anda. Symlinks dihormati selama proses penyalinan:
# Di dalam direktori plugin Anda
ln -s /path/to/shared-utils ./shared-utils
Konten yang di-symlink akan disalin ke plugin cache. Ini memberikan fleksibilitas sambil mempertahankan manfaat keamanan dari sistem caching.
Struktur direktori plugin
Tata letak plugin standar
Plugin lengkap mengikuti struktur ini:
enterprise-plugin/
├── .claude-plugin/ # Direktori metadata (opsional)
│ └── plugin.json # plugin manifest
├── commands/ # Lokasi command default
│ ├── status.md
│ └── logs.md
├── agents/ # Lokasi agent default
│ ├── security-reviewer.md
│ ├── performance-tester.md
│ └── compliance-checker.md
├── skills/ # Agent Skills
│ ├── code-reviewer/
│ │ └── SKILL.md
│ └── pdf-processor/
│ ├── SKILL.md
│ └── scripts/
├── hooks/ # Konfigurasi hook
│ ├── hooks.json # Konfigurasi hook utama
│ └── security-hooks.json # Hook tambahan
├── settings.json # Pengaturan default untuk plugin
├── .mcp.json # Definisi MCP server
├── .lsp.json # Konfigurasi LSP server
├── scripts/ # Hook dan utility scripts
│ ├── 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/, hooks/) harus berada di root plugin, bukan di dalam .claude-plugin/.
Referensi lokasi file
| Komponen | Lokasi Default | Tujuan |
|---|
| Manifest | .claude-plugin/plugin.json | Metadata dan konfigurasi plugin (opsional) |
| Commands | commands/ | File Markdown Skill (legacy; gunakan skills/ untuk skill baru) |
| Agents | agents/ | File Markdown Subagent |
| Skills | skills/ | Skills dengan struktur <name>/SKILL.md |
| Hooks | hooks/hooks.json | Konfigurasi hook |
| MCP servers | .mcp.json | Definisi MCP server |
| LSP servers | .lsp.json | Konfigurasi language server |
| Settings | settings.json | Konfigurasi default yang diterapkan saat plugin diaktifkan. Saat ini hanya pengaturan agent yang didukung |
Referensi perintah CLI
Claude Code menyediakan perintah CLI untuk manajemen plugin non-interaktif, berguna untuk scripting dan otomasi.
plugin install
Pasang plugin dari marketplace yang tersedia.
claude plugin install <plugin> [options]
Argumen:
<plugin>: Nama plugin atau plugin-name@marketplace-name untuk marketplace tertentu
Opsi:
| Opsi | Deskripsi | Default |
|---|
-s, --scope <scope> | Cakupan instalasi: user, project, atau local | user |
-h, --help | Tampilkan bantuan untuk perintah | |
Cakupan menentukan file pengaturan mana yang ditambahkan plugin yang dipasang. Misalnya, —scope project menulis ke enabledPlugins di .claude/settings.json, membuat plugin tersedia untuk semua orang yang mengkloning repositori proyek.
Contoh:
# Pasang ke cakupan user (default)
claude plugin install formatter@my-marketplace
# Pasang ke cakupan project (dibagikan dengan tim)
claude plugin install formatter@my-marketplace --scope project
# Pasang ke cakupan local (gitignored)
claude plugin install formatter@my-marketplace --scope local
plugin uninstall
Hapus plugin yang dipasang.
claude plugin uninstall <plugin> [options]
Argumen:
<plugin>: Nama plugin atau plugin-name@marketplace-name
Opsi:
| Opsi | Deskripsi | Default |
|---|
-s, --scope <scope> | Hapus dari cakupan: user, project, atau local | user |
--keep-data | Pertahankan direktori data persisten plugin | |
-h, --help | Tampilkan bantuan untuk perintah | |
Alias: remove, rm
Secara default, menghapus dari cakupan terakhir yang tersisa juga menghapus direktori ${CLAUDE_PLUGIN_DATA} plugin. Gunakan --keep-data untuk mempertahankannya, misalnya saat memasang ulang setelah menguji versi baru.
plugin enable
Aktifkan plugin yang dinonaktifkan.
claude plugin enable <plugin> [options]
Argumen:
<plugin>: Nama plugin atau plugin-name@marketplace-name
Opsi:
| Opsi | Deskripsi | Default |
|---|
-s, --scope <scope> | Cakupan untuk diaktifkan: user, project, atau local | user |
-h, --help | Tampilkan bantuan untuk perintah | |
plugin disable
Nonaktifkan plugin tanpa menghapusnya.
claude plugin disable <plugin> [options]
Argumen:
<plugin>: Nama plugin atau plugin-name@marketplace-name
Opsi:
| Opsi | Deskripsi | Default |
|---|
-s, --scope <scope> | Cakupan untuk dinonaktifkan: user, project, atau local | user |
-h, --help | Tampilkan bantuan untuk perintah | |
plugin update
Perbarui plugin ke versi terbaru.
claude plugin update <plugin> [options]
Argumen:
<plugin>: Nama plugin atau plugin-name@marketplace-name
Opsi:
| Opsi | Deskripsi | Default |
|---|
-s, --scope <scope> | Cakupan untuk diperbarui: user, project, local, atau managed | user |
-h, --help | Tampilkan bantuan untuk perintah | |
Alat debugging dan pengembangan
Perintah debugging
Gunakan claude --debug untuk melihat detail loading plugin:
Ini menunjukkan:
- Plugin mana yang sedang dimuat
- Kesalahan apa pun dalam manifest plugin
- Registrasi command, agent, dan hook
- Inisialisasi MCP server
Masalah umum
| Masalah | Penyebab | Solusi |
|---|
| Plugin tidak dimuat | plugin.json tidak valid | Jalankan claude plugin validate atau /plugin validate untuk memeriksa plugin.json, frontmatter skill/agent/command, dan hooks/hooks.json untuk kesalahan sintaks dan skema |
| Commands tidak muncul | Struktur direktori salah | Pastikan commands/ di root, bukan di .claude-plugin/ |
| Hooks tidak aktif | Script tidak dapat dieksekusi | Jalankan chmod +x script.sh |
| MCP server gagal | ${CLAUDE_PLUGIN_ROOT} hilang | Gunakan variabel untuk semua jalur plugin |
| Kesalahan jalur | Jalur absolut digunakan | Semua jalur harus relatif dan dimulai dengan ./ |
LSP Executable not found in $PATH | Language server tidak dipasang | Pasang biner (misalnya, npm install -g typescript-language-server typescript) |
Contoh pesan kesalahan
Kesalahan validasi manifest:
Invalid JSON syntax: Unexpected token } in JSON at position 142: periksa koma yang hilang, koma ekstra, atau string yang tidak dikutip
Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required: field yang diperlukan hilang
Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...: kesalahan sintaks JSON
Kesalahan loading plugin:
Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.: jalur command ada tetapi tidak berisi file command yang valid
Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.: jalur source di marketplace.json menunjuk ke direktori yang tidak ada
Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.: hapus definisi komponen duplikat atau hapus strict: false di entri marketplace
Troubleshooting hook
Hook script tidak dieksekusi:
- Periksa script dapat dieksekusi:
chmod +x ./scripts/your-script.sh
- Verifikasi baris shebang: Baris pertama harus
#!/bin/bash atau #!/usr/bin/env bash
- Periksa jalur 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, bukan postToolUse
- Periksa pola matcher cocok dengan alat Anda:
"matcher": "Write|Edit" untuk operasi file
- Konfirmkan tipe hook valid:
command, http, prompt, atau agent
Troubleshooting MCP server
Server tidak dimulai:
- Periksa command ada dan dapat dieksekusi
- Verifikasi semua jalur menggunakan variabel
${CLAUDE_PLUGIN_ROOT}
- Periksa log MCP server:
claude --debug menunjukkan kesalahan inisialisasi
- Uji server secara manual di luar Claude Code
Alat server tidak muncul:
- Pastikan server dikonfigurasi dengan benar di
.mcp.json atau plugin.json
- Verifikasi server mengimplementasikan protokol MCP dengan benar
- Periksa timeout koneksi di output debug
Kesalahan struktur direktori
Gejala: Plugin dimuat tetapi komponen (commands, agents, hooks) hilang.
Struktur yang benar: Komponen harus berada di root plugin, bukan di dalam .claude-plugin/. Hanya plugin.json yang termasuk di .claude-plugin/.
my-plugin/
├── .claude-plugin/
│ └── plugin.json ← Hanya manifest di sini
├── commands/ ← Di level root
├── agents/ ← Di level root
└── hooks/ ← Di level root
Jika komponen Anda berada di dalam .claude-plugin/, pindahkan ke root plugin.
Daftar periksa debug:
- Jalankan
claude --debug dan 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
Ikuti semantic versioning untuk rilis plugin:
{
"name": "my-plugin",
"version": "2.1.0"
}
Format versi: MAJOR.MINOR.PATCH
- MAJOR: Perubahan breaking (perubahan API yang tidak kompatibel)
- MINOR: Fitur baru (penambahan yang kompatibel ke belakang)
- PATCH: Perbaikan bug (perbaikan yang kompatibel ke belakang)
Best practices:
- Mulai dari
1.0.0 untuk rilis stabil pertama Anda
- Perbarui versi di
plugin.json sebelum mendistribusikan perubahan
- Dokumentasikan perubahan dalam file
CHANGELOG.md
- Gunakan versi pre-release seperti
2.0.0-beta.1 untuk pengujian
Claude Code menggunakan versi untuk menentukan apakah akan memperbarui plugin Anda. Jika Anda mengubah kode plugin Anda tetapi tidak meningkatkan versi di plugin.json, pengguna plugin Anda yang ada tidak akan melihat perubahan Anda karena caching.Jika plugin Anda berada dalam direktori marketplace, Anda dapat mengelola versi melalui marketplace.json sebagai gantinya dan menghilangkan field version dari plugin.json.
Lihat juga
- Plugins - Tutorial dan penggunaan praktis
- Plugin marketplaces - Membuat dan mengelola marketplace
- Skills - Detail pengembangan skill
- Subagents - Konfigurasi dan kemampuan agent
- Hooks - Penanganan event dan otomasi
- MCP - Integrasi alat eksternal
- Settings - Opsi konfigurasi untuk plugins