[{"data":1,"prerenderedAt":1182},["ShallowReactive",2],{"guide:/guides/claude-code-plugins":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"tag":10,"date":11,"body":12,"_type":1176,"_id":1177,"_source":1178,"_file":1179,"_stem":1180,"_extension":1181},"/guides/claude-code-plugins","guides",false,"","Claude Code plugins: how they are really built","A plugin bundles skills, agents, hooks and MCP servers into one folder. Here is the structure, the manifest, and what 295 published plugins really ship.","Workflow","2026-09-13",{"type":13,"children":14,"toc":1167},"root",[15,41,48,152,157,163,176,286,359,396,402,407,544,563,568,574,579,710,769,779,838,844,856,884,905,918,923,953,966,1063,1084,1090,1118,1139,1145,1150,1161],{"type":16,"tag":17,"props":18,"children":19},"element","p",{},[20,23,30,32,39],{"type":21,"value":22},"text","A Claude Code plugin is a directory you can install, containing any mix of skills, agents, hooks, MCP servers and LSP servers. It is the shareable form of the things you already keep in ",{"type":16,"tag":24,"props":25,"children":27},"code",{"className":26},[],[28],{"type":21,"value":29},".claude/",{"type":21,"value":31},". The format is simple, the traps are in the layout and in the manifest, and both are easy to check against what is actually published. Everything measured below comes from the official marketplace checkout on a machine running Claude Code 2.1.269. If you have not written a ",{"type":16,"tag":33,"props":34,"children":36},"a",{"href":35},"/guides/claude-code-skills",[37],{"type":21,"value":38},"skill",{"type":21,"value":40}," yet, start there: most plugins are mostly skills.",{"type":16,"tag":42,"props":43,"children":45},"h2",{"id":44},"plugin-or-just-a-claude-directory",[46],{"type":21,"value":47},"Plugin, or just a .claude directory?",{"type":16,"tag":49,"props":50,"children":51},"table",{},[52,79],{"type":16,"tag":53,"props":54,"children":55},"thead",{},[56],{"type":16,"tag":57,"props":58,"children":59},"tr",{},[60,64,74],{"type":16,"tag":61,"props":62,"children":63},"th",{},[],{"type":16,"tag":61,"props":65,"children":66},{},[67,69],{"type":21,"value":68},"Standalone ",{"type":16,"tag":24,"props":70,"children":72},{"className":71},[],[73],{"type":21,"value":29},{"type":16,"tag":61,"props":75,"children":76},{},[77],{"type":21,"value":78},"Plugin",{"type":16,"tag":80,"props":81,"children":82},"tbody",{},[83,110,128],{"type":16,"tag":57,"props":84,"children":85},{},[86,92,101],{"type":16,"tag":87,"props":88,"children":89},"td",{},[90],{"type":21,"value":91},"Skill name",{"type":16,"tag":87,"props":93,"children":94},{},[95],{"type":16,"tag":24,"props":96,"children":98},{"className":97},[],[99],{"type":21,"value":100},"/hello",{"type":16,"tag":87,"props":102,"children":103},{},[104],{"type":16,"tag":24,"props":105,"children":107},{"className":106},[],[108],{"type":21,"value":109},"/plugin-name:hello",{"type":16,"tag":57,"props":111,"children":112},{},[113,118,123],{"type":16,"tag":87,"props":114,"children":115},{},[116],{"type":21,"value":117},"Good for",{"type":16,"tag":87,"props":119,"children":120},{},[121],{"type":21,"value":122},"Personal workflows, project-specific work, quick iteration",{"type":16,"tag":87,"props":124,"children":125},{},[126],{"type":21,"value":127},"Sharing with a team, versioned releases, reuse across repos",{"type":16,"tag":57,"props":129,"children":130},{},[131,136,141],{"type":16,"tag":87,"props":132,"children":133},{},[134],{"type":21,"value":135},"Distribution",{"type":16,"tag":87,"props":137,"children":138},{},[139],{"type":21,"value":140},"Copy the files by hand",{"type":16,"tag":87,"props":142,"children":143},{},[144,150],{"type":16,"tag":24,"props":145,"children":147},{"className":146},[],[148],{"type":21,"value":149},"/plugin install",{"type":21,"value":151}," from a marketplace",{"type":16,"tag":17,"props":153,"children":154},{},[155],{"type":21,"value":156},"Start standalone. Convert when you want someone else to have it.",{"type":16,"tag":42,"props":158,"children":160},{"id":159},"the-structure",[161],{"type":21,"value":162},"The structure",{"type":16,"tag":17,"props":164,"children":165},{},[166,168,174],{"type":21,"value":167},"Everything lives at the plugin root. Only the manifest goes inside ",{"type":16,"tag":24,"props":169,"children":171},{"className":170},[],[172],{"type":21,"value":173},".claude-plugin/",{"type":21,"value":175},":",{"type":16,"tag":177,"props":178,"children":181},"pre",{"className":179,"code":180,"language":21,"meta":7,"style":7},"language-text shiki shiki-themes github-light github-dark","my-plugin/\n├── .claude-plugin/\n│   └── plugin.json      # the manifest, and nothing else\n├── skills/\n│   └── code-review/\n│       └── SKILL.md\n├── agents/\n├── hooks/\n│   └── hooks.json\n├── .mcp.json\n└── README.md\n",[182],{"type":16,"tag":24,"props":183,"children":184},{"__ignoreMap":7},[185,196,205,214,223,232,241,250,259,268,277],{"type":16,"tag":186,"props":187,"children":190},"span",{"class":188,"line":189},"line",1,[191],{"type":16,"tag":186,"props":192,"children":193},{},[194],{"type":21,"value":195},"my-plugin/\n",{"type":16,"tag":186,"props":197,"children":199},{"class":188,"line":198},2,[200],{"type":16,"tag":186,"props":201,"children":202},{},[203],{"type":21,"value":204},"├── .claude-plugin/\n",{"type":16,"tag":186,"props":206,"children":208},{"class":188,"line":207},3,[209],{"type":16,"tag":186,"props":210,"children":211},{},[212],{"type":21,"value":213},"│   └── plugin.json      # the manifest, and nothing else\n",{"type":16,"tag":186,"props":215,"children":217},{"class":188,"line":216},4,[218],{"type":16,"tag":186,"props":219,"children":220},{},[221],{"type":21,"value":222},"├── skills/\n",{"type":16,"tag":186,"props":224,"children":226},{"class":188,"line":225},5,[227],{"type":16,"tag":186,"props":228,"children":229},{},[230],{"type":21,"value":231},"│   └── code-review/\n",{"type":16,"tag":186,"props":233,"children":235},{"class":188,"line":234},6,[236],{"type":16,"tag":186,"props":237,"children":238},{},[239],{"type":21,"value":240},"│       └── SKILL.md\n",{"type":16,"tag":186,"props":242,"children":244},{"class":188,"line":243},7,[245],{"type":16,"tag":186,"props":246,"children":247},{},[248],{"type":21,"value":249},"├── agents/\n",{"type":16,"tag":186,"props":251,"children":253},{"class":188,"line":252},8,[254],{"type":16,"tag":186,"props":255,"children":256},{},[257],{"type":21,"value":258},"├── hooks/\n",{"type":16,"tag":186,"props":260,"children":262},{"class":188,"line":261},9,[263],{"type":16,"tag":186,"props":264,"children":265},{},[266],{"type":21,"value":267},"│   └── hooks.json\n",{"type":16,"tag":186,"props":269,"children":271},{"class":188,"line":270},10,[272],{"type":16,"tag":186,"props":273,"children":274},{},[275],{"type":21,"value":276},"├── .mcp.json\n",{"type":16,"tag":186,"props":278,"children":280},{"class":188,"line":279},11,[281],{"type":16,"tag":186,"props":282,"children":283},{},[284],{"type":21,"value":285},"└── README.md\n",{"type":16,"tag":17,"props":287,"children":288},{},[289,291,297,299,305,306,312,314,320,322,328,329,334,336,342,344,350,352,357],{"type":21,"value":290},"The single most common mistake is putting ",{"type":16,"tag":24,"props":292,"children":294},{"className":293},[],[295],{"type":21,"value":296},"skills/",{"type":21,"value":298},", ",{"type":16,"tag":24,"props":300,"children":302},{"className":301},[],[303],{"type":21,"value":304},"commands/",{"type":21,"value":298},{"type":16,"tag":24,"props":307,"children":309},{"className":308},[],[310],{"type":21,"value":311},"agents/",{"type":21,"value":313}," or ",{"type":16,"tag":24,"props":315,"children":317},{"className":316},[],[318],{"type":21,"value":319},"hooks/",{"type":21,"value":321}," ",{"type":16,"tag":323,"props":324,"children":325},"strong",{},[326],{"type":21,"value":327},"inside",{"type":21,"value":321},{"type":16,"tag":24,"props":330,"children":332},{"className":331},[],[333],{"type":21,"value":173},{"type":21,"value":335},". Only ",{"type":16,"tag":24,"props":337,"children":339},{"className":338},[],[340],{"type":21,"value":341},"plugin.json",{"type":21,"value":343}," belongs there. A plugin that ships exactly one skill can also drop a ",{"type":16,"tag":24,"props":345,"children":347},{"className":346},[],[348],{"type":21,"value":349},"SKILL.md",{"type":21,"value":351}," at the plugin root and skip the ",{"type":16,"tag":24,"props":353,"children":355},{"className":354},[],[356],{"type":21,"value":296},{"type":21,"value":358}," folder entirely.",{"type":16,"tag":17,"props":360,"children":361},{},[362,364,370,372,378,380,386,388,394],{"type":21,"value":363},"Hooks move house on the way in: the ",{"type":16,"tag":24,"props":365,"children":367},{"className":366},[],[368],{"type":21,"value":369},"hooks",{"type":21,"value":371}," object that lived in your ",{"type":16,"tag":24,"props":373,"children":375},{"className":374},[],[376],{"type":21,"value":377},"settings.json",{"type":21,"value":379}," goes to ",{"type":16,"tag":24,"props":381,"children":383},{"className":382},[],[384],{"type":21,"value":385},"hooks/hooks.json",{"type":21,"value":387},", same format. See ",{"type":16,"tag":33,"props":389,"children":391},{"href":390},"/guides/claude-code-hook-events",[392],{"type":21,"value":393},"hook events",{"type":21,"value":395}," for what you can bind to.",{"type":16,"tag":42,"props":397,"children":399},{"id":398},"what-295-published-plugins-actually-ship",[400],{"type":21,"value":401},"What 295 published plugins actually ship",{"type":16,"tag":17,"props":403,"children":404},{},[405],{"type":21,"value":406},"The official marketplace lists 295 plugins. Its repository carries 39 of them in its own tree, the rest pointing at external repositories. Of those 39:",{"type":16,"tag":49,"props":408,"children":409},{},[410,426],{"type":16,"tag":53,"props":411,"children":412},{},[413],{"type":16,"tag":57,"props":414,"children":415},{},[416,421],{"type":16,"tag":61,"props":417,"children":418},{},[419],{"type":21,"value":420},"Component",{"type":16,"tag":61,"props":422,"children":423},{},[424],{"type":21,"value":425},"Plugins shipping it",{"type":16,"tag":80,"props":427,"children":428},{},[429,446,463,479,495,511,527],{"type":16,"tag":57,"props":430,"children":431},{},[432,441],{"type":16,"tag":87,"props":433,"children":434},{},[435],{"type":16,"tag":24,"props":436,"children":438},{"className":437},[],[439],{"type":21,"value":440},"LICENSE",{"type":16,"tag":87,"props":442,"children":443},{},[444],{"type":21,"value":445},"39 (100%)",{"type":16,"tag":57,"props":447,"children":448},{},[449,458],{"type":16,"tag":87,"props":450,"children":451},{},[452],{"type":16,"tag":24,"props":453,"children":455},{"className":454},[],[456],{"type":21,"value":457},"README.md",{"type":16,"tag":87,"props":459,"children":460},{},[461],{"type":21,"value":462},"37 (95%)",{"type":16,"tag":57,"props":464,"children":465},{},[466,474],{"type":16,"tag":87,"props":467,"children":468},{},[469],{"type":16,"tag":24,"props":470,"children":472},{"className":471},[],[473],{"type":21,"value":296},{"type":16,"tag":87,"props":475,"children":476},{},[477],{"type":21,"value":478},"15 (38%)",{"type":16,"tag":57,"props":480,"children":481},{},[482,490],{"type":16,"tag":87,"props":483,"children":484},{},[485],{"type":16,"tag":24,"props":486,"children":488},{"className":487},[],[489],{"type":21,"value":304},{"type":16,"tag":87,"props":491,"children":492},{},[493],{"type":21,"value":494},"13 (33%)",{"type":16,"tag":57,"props":496,"children":497},{},[498,506],{"type":16,"tag":87,"props":499,"children":500},{},[501],{"type":16,"tag":24,"props":502,"children":504},{"className":503},[],[505],{"type":21,"value":311},{"type":16,"tag":87,"props":507,"children":508},{},[509],{"type":21,"value":510},"8 (21%)",{"type":16,"tag":57,"props":512,"children":513},{},[514,522],{"type":16,"tag":87,"props":515,"children":516},{},[517],{"type":16,"tag":24,"props":518,"children":520},{"className":519},[],[521],{"type":21,"value":319},{"type":16,"tag":87,"props":523,"children":524},{},[525],{"type":21,"value":526},"6 (15%)",{"type":16,"tag":57,"props":528,"children":529},{},[530,539],{"type":16,"tag":87,"props":531,"children":532},{},[533],{"type":16,"tag":24,"props":534,"children":536},{"className":535},[],[537],{"type":21,"value":538},".mcp.json",{"type":16,"tag":87,"props":540,"children":541},{},[542],{"type":21,"value":543},"1 (3%)",{"type":16,"tag":17,"props":545,"children":546},{},[547,549,561],{"type":21,"value":548},"Two findings worth keeping. Most plugins are small: the largest ships seven skills, and the next largest three. And ",{"type":16,"tag":323,"props":550,"children":551},{},[552,554,559],{"type":21,"value":553},"14 of the 39 have no ",{"type":16,"tag":24,"props":555,"children":557},{"className":556},[],[558],{"type":21,"value":341},{"type":21,"value":560}," at all",{"type":21,"value":562},", which is legal, because the manifest is optional when components sit in their default locations. The name then comes from the directory.",{"type":16,"tag":17,"props":564,"children":565},{},[566],{"type":21,"value":567},"By declared category, across all 295 entries: development 121, productivity 54, database 38, monitoring 21, security 18, deployment 9, design 8.",{"type":16,"tag":42,"props":569,"children":571},{"id":570},"the-manifest",[572],{"type":21,"value":573},"The manifest",{"type":16,"tag":17,"props":575,"children":576},{},[577],{"type":21,"value":578},"A real one, shipped by Anthropic, in full:",{"type":16,"tag":177,"props":580,"children":584},{"className":581,"code":582,"language":583,"meta":7,"style":7},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"agent-sdk-dev\",\n  \"description\": \"Claude Agent SDK Development Plugin\",\n  \"author\": {\n    \"name\": \"Anthropic\",\n    \"email\": \"support@anthropic.com\"\n  }\n}\n","json",[585],{"type":16,"tag":24,"props":586,"children":587},{"__ignoreMap":7},[588,597,622,643,656,677,694,702],{"type":16,"tag":186,"props":589,"children":590},{"class":188,"line":189},[591],{"type":16,"tag":186,"props":592,"children":594},{"style":593},"--shiki-default:#24292E;--shiki-dark:#E1E4E8",[595],{"type":21,"value":596},"{\n",{"type":16,"tag":186,"props":598,"children":599},{"class":188,"line":198},[600,606,611,617],{"type":16,"tag":186,"props":601,"children":603},{"style":602},"--shiki-default:#005CC5;--shiki-dark:#79B8FF",[604],{"type":21,"value":605},"  \"name\"",{"type":16,"tag":186,"props":607,"children":608},{"style":593},[609],{"type":21,"value":610},": ",{"type":16,"tag":186,"props":612,"children":614},{"style":613},"--shiki-default:#032F62;--shiki-dark:#9ECBFF",[615],{"type":21,"value":616},"\"agent-sdk-dev\"",{"type":16,"tag":186,"props":618,"children":619},{"style":593},[620],{"type":21,"value":621},",\n",{"type":16,"tag":186,"props":623,"children":624},{"class":188,"line":207},[625,630,634,639],{"type":16,"tag":186,"props":626,"children":627},{"style":602},[628],{"type":21,"value":629},"  \"description\"",{"type":16,"tag":186,"props":631,"children":632},{"style":593},[633],{"type":21,"value":610},{"type":16,"tag":186,"props":635,"children":636},{"style":613},[637],{"type":21,"value":638},"\"Claude Agent SDK Development Plugin\"",{"type":16,"tag":186,"props":640,"children":641},{"style":593},[642],{"type":21,"value":621},{"type":16,"tag":186,"props":644,"children":645},{"class":188,"line":216},[646,651],{"type":16,"tag":186,"props":647,"children":648},{"style":602},[649],{"type":21,"value":650},"  \"author\"",{"type":16,"tag":186,"props":652,"children":653},{"style":593},[654],{"type":21,"value":655},": {\n",{"type":16,"tag":186,"props":657,"children":658},{"class":188,"line":225},[659,664,668,673],{"type":16,"tag":186,"props":660,"children":661},{"style":602},[662],{"type":21,"value":663},"    \"name\"",{"type":16,"tag":186,"props":665,"children":666},{"style":593},[667],{"type":21,"value":610},{"type":16,"tag":186,"props":669,"children":670},{"style":613},[671],{"type":21,"value":672},"\"Anthropic\"",{"type":16,"tag":186,"props":674,"children":675},{"style":593},[676],{"type":21,"value":621},{"type":16,"tag":186,"props":678,"children":679},{"class":188,"line":234},[680,685,689],{"type":16,"tag":186,"props":681,"children":682},{"style":602},[683],{"type":21,"value":684},"    \"email\"",{"type":16,"tag":186,"props":686,"children":687},{"style":593},[688],{"type":21,"value":610},{"type":16,"tag":186,"props":690,"children":691},{"style":613},[692],{"type":21,"value":693},"\"support@anthropic.com\"\n",{"type":16,"tag":186,"props":695,"children":696},{"class":188,"line":243},[697],{"type":16,"tag":186,"props":698,"children":699},{"style":593},[700],{"type":21,"value":701},"  }\n",{"type":16,"tag":186,"props":703,"children":704},{"class":188,"line":252},[705],{"type":16,"tag":186,"props":706,"children":707},{"style":593},[708],{"type":21,"value":709},"}\n",{"type":16,"tag":17,"props":711,"children":712},{},[713,715,721,722,728,730,736,738,744,746,752,753,759,761,767],{"type":21,"value":714},"That is representative. Across the 25 manifests present in the checkout, ",{"type":16,"tag":24,"props":716,"children":718},{"className":717},[],[719],{"type":21,"value":720},"name",{"type":21,"value":298},{"type":16,"tag":24,"props":723,"children":725},{"className":724},[],[726],{"type":21,"value":727},"description",{"type":21,"value":729}," and ",{"type":16,"tag":24,"props":731,"children":733},{"className":732},[],[734],{"type":21,"value":735},"author",{"type":21,"value":737}," appear in 100 percent of them, and everything else is rare: ",{"type":16,"tag":24,"props":739,"children":741},{"className":740},[],[742],{"type":21,"value":743},"version",{"type":21,"value":745}," in 36 percent, ",{"type":16,"tag":24,"props":747,"children":749},{"className":748},[],[750],{"type":21,"value":751},"homepage",{"type":21,"value":729},{"type":16,"tag":24,"props":754,"children":756},{"className":755},[],[757],{"type":21,"value":758},"license",{"type":21,"value":760}," in 8 percent each, ",{"type":16,"tag":24,"props":762,"children":764},{"className":763},[],[765],{"type":21,"value":766},"repository",{"type":21,"value":768}," in 4 percent.",{"type":16,"tag":17,"props":770,"children":771},{},[772,777],{"type":16,"tag":24,"props":773,"children":775},{"className":774},[],[776],{"type":21,"value":743},{"type":21,"value":778}," deserves a decision rather than a default. When you set it, users only receive updates when you bump it. When you omit it, the version falls through to the next source, which means your users track your commits instead. Neither is wrong, but pick knowingly.",{"type":16,"tag":17,"props":780,"children":781},{},[782,784,790,791,797,799,804,805,810,811,816,818,823,824,829,831,836],{"type":21,"value":783},"The marketplace entry is a separate object from the manifest, and it is where ",{"type":16,"tag":24,"props":785,"children":787},{"className":786},[],[788],{"type":21,"value":789},"source",{"type":21,"value":729},{"type":16,"tag":24,"props":792,"children":794},{"className":793},[],[795],{"type":21,"value":796},"category",{"type":21,"value":798}," live. Across the 295 entries: ",{"type":16,"tag":24,"props":800,"children":802},{"className":801},[],[803],{"type":21,"value":720},{"type":21,"value":298},{"type":16,"tag":24,"props":806,"children":808},{"className":807},[],[809],{"type":21,"value":727},{"type":21,"value":729},{"type":16,"tag":24,"props":812,"children":814},{"className":813},[],[815],{"type":21,"value":789},{"type":21,"value":817}," on all of them, ",{"type":16,"tag":24,"props":819,"children":821},{"className":820},[],[822],{"type":21,"value":796},{"type":21,"value":729},{"type":16,"tag":24,"props":825,"children":827},{"className":826},[],[828],{"type":21,"value":751},{"type":21,"value":830}," on 95 percent, ",{"type":16,"tag":24,"props":832,"children":834},{"className":833},[],[835],{"type":21,"value":735},{"type":21,"value":837}," on 72 percent.",{"type":16,"tag":42,"props":839,"children":841},{"id":840},"install-test-reload",[842],{"type":21,"value":843},"Install, test, reload",{"type":16,"tag":17,"props":845,"children":846},{},[847,849,855],{"type":21,"value":848},"Test without installing anything. The flag takes a directory, a folder of plugins, or a ",{"type":16,"tag":24,"props":850,"children":852},{"className":851},[],[853],{"type":21,"value":854},".zip",{"type":21,"value":175},{"type":16,"tag":177,"props":857,"children":861},{"className":858,"code":859,"language":860,"meta":7,"style":7},"language-bash shiki shiki-themes github-light github-dark","claude --plugin-dir ./my-plugin\n","bash",[862],{"type":16,"tag":24,"props":863,"children":864},{"__ignoreMap":7},[865],{"type":16,"tag":186,"props":866,"children":867},{"class":188,"line":189},[868,874,879],{"type":16,"tag":186,"props":869,"children":871},{"style":870},"--shiki-default:#6F42C1;--shiki-dark:#B392F0",[872],{"type":21,"value":873},"claude",{"type":16,"tag":186,"props":875,"children":876},{"style":602},[877],{"type":21,"value":878}," --plugin-dir",{"type":16,"tag":186,"props":880,"children":881},{"style":613},[882],{"type":21,"value":883}," ./my-plugin\n",{"type":16,"tag":17,"props":885,"children":886},{},[887,889,895,897,903],{"type":21,"value":888},"Then invoke your skill as ",{"type":16,"tag":24,"props":890,"children":892},{"className":891},[],[893],{"type":21,"value":894},"/my-plugin:hello",{"type":21,"value":896},". Plugin skills are always namespaced, which is why installing two plugins with a ",{"type":16,"tag":24,"props":898,"children":900},{"className":899},[],[901],{"type":21,"value":902},"review",{"type":21,"value":904}," skill each is not a problem.",{"type":16,"tag":17,"props":906,"children":907},{},[908,910,916],{"type":21,"value":909},"After editing files, ",{"type":16,"tag":24,"props":911,"children":913},{"className":912},[],[914],{"type":21,"value":915},"/reload-plugins",{"type":21,"value":917}," picks up the changes without restarting: skills, agents, hooks, MCP and LSP servers. In a session with no interactive terminal, MCP server changes wait for the next session instead.",{"type":16,"tag":17,"props":919,"children":920},{},[921],{"type":21,"value":922},"To install from the community marketplace:",{"type":16,"tag":177,"props":924,"children":926},{"className":858,"code":925,"language":860,"meta":7,"style":7},"/plugin marketplace add anthropics/claude-plugins-community\n",[927],{"type":16,"tag":24,"props":928,"children":929},{"__ignoreMap":7},[930],{"type":16,"tag":186,"props":931,"children":932},{"class":188,"line":189},[933,938,943,948],{"type":16,"tag":186,"props":934,"children":935},{"style":870},[936],{"type":21,"value":937},"/plugin",{"type":16,"tag":186,"props":939,"children":940},{"style":613},[941],{"type":21,"value":942}," marketplace",{"type":16,"tag":186,"props":944,"children":945},{"style":613},[946],{"type":21,"value":947}," add",{"type":16,"tag":186,"props":949,"children":950},{"style":613},[951],{"type":21,"value":952}," anthropics/claude-plugins-community\n",{"type":16,"tag":17,"props":954,"children":955},{},[956,958,964],{"type":21,"value":957},"On disk, that lands under ",{"type":16,"tag":24,"props":959,"children":961},{"className":960},[],[962],{"type":21,"value":963},"~/.claude/plugins/",{"type":21,"value":965},", which is worth knowing when something behaves oddly:",{"type":16,"tag":49,"props":967,"children":968},{},[969,985],{"type":16,"tag":53,"props":970,"children":971},{},[972],{"type":16,"tag":57,"props":973,"children":974},{},[975,980],{"type":16,"tag":61,"props":976,"children":977},{},[978],{"type":21,"value":979},"File",{"type":16,"tag":61,"props":981,"children":982},{},[983],{"type":21,"value":984},"Holds",{"type":16,"tag":80,"props":986,"children":987},{},[988,1005,1029,1046],{"type":16,"tag":57,"props":989,"children":990},{},[991,1000],{"type":16,"tag":87,"props":992,"children":993},{},[994],{"type":16,"tag":24,"props":995,"children":997},{"className":996},[],[998],{"type":21,"value":999},"known_marketplaces.json",{"type":16,"tag":87,"props":1001,"children":1002},{},[1003],{"type":21,"value":1004},"Each marketplace, its GitHub source, install location and last update",{"type":16,"tag":57,"props":1006,"children":1007},{},[1008,1017],{"type":16,"tag":87,"props":1009,"children":1010},{},[1011],{"type":16,"tag":24,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":21,"value":1016},"installed_plugins.json",{"type":16,"tag":87,"props":1018,"children":1019},{},[1020,1022,1027],{"type":21,"value":1021},"What you have installed, under a ",{"type":16,"tag":24,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":21,"value":743},{"type":21,"value":1028}," key for the file format itself",{"type":16,"tag":57,"props":1030,"children":1031},{},[1032,1041],{"type":16,"tag":87,"props":1033,"children":1034},{},[1035],{"type":16,"tag":24,"props":1036,"children":1038},{"className":1037},[],[1039],{"type":21,"value":1040},"marketplaces/<name>/.claude-plugin/marketplace.json",{"type":16,"tag":87,"props":1042,"children":1043},{},[1044],{"type":21,"value":1045},"The catalogue you browse",{"type":16,"tag":57,"props":1047,"children":1048},{},[1049,1058],{"type":16,"tag":87,"props":1050,"children":1051},{},[1052],{"type":16,"tag":24,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":21,"value":1057},"marketplaces/<name>/plugins/",{"type":16,"tag":87,"props":1059,"children":1060},{},[1061],{"type":21,"value":1062},"The plugin folders vendored by that marketplace",{"type":16,"tag":17,"props":1064,"children":1065},{},[1066,1068,1074,1076,1082],{"type":21,"value":1067},"Before publishing, run ",{"type":16,"tag":24,"props":1069,"children":1071},{"className":1070},[],[1072],{"type":21,"value":1073},"claude plugin validate ./your-plugin",{"type":21,"value":1075},". The community review pipeline runs the same check, and ",{"type":16,"tag":24,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":21,"value":1081},"--strict",{"type":21,"value":1083}," turns warnings into errors.",{"type":16,"tag":42,"props":1085,"children":1087},{"id":1086},"when-your-plugin-installs-hooks",[1088],{"type":21,"value":1089},"When your plugin installs hooks",{"type":16,"tag":17,"props":1091,"children":1092},{},[1093,1095,1100,1102,1108,1110,1116],{"type":21,"value":1094},"This is where a plugin stops being passive. A plugin with a ",{"type":16,"tag":24,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":21,"value":385},{"type":21,"value":1101}," starts running commands on your machine on Claude Code events, which is exactly what makes plugins powerful and exactly why you should read one before installing it. The same applies to ",{"type":16,"tag":24,"props":1103,"children":1105},{"className":1104},[],[1106],{"type":21,"value":1107},"bin/",{"type":21,"value":1109},", whose executables join the Bash tool's ",{"type":16,"tag":24,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":21,"value":1115},"PATH",{"type":21,"value":1117}," while the plugin is enabled.",{"type":16,"tag":17,"props":1119,"children":1120},{},[1121,1123,1129,1131,1137],{"type":21,"value":1122},"If a hook from a plugin misbehaves, the debugging path is the same as for your own: see ",{"type":16,"tag":33,"props":1124,"children":1126},{"href":1125},"/guides/claude-code-hook-not-firing",[1127],{"type":21,"value":1128},"why a hook is not firing",{"type":21,"value":1130},", and remember that on Windows the shell is chosen for you, which ",{"type":16,"tag":33,"props":1132,"children":1134},{"href":1133},"/guides/claude-code-hooks-windows",[1135],{"type":21,"value":1136},"breaks quoting in specific ways",{"type":21,"value":1138},".",{"type":16,"tag":42,"props":1140,"children":1142},{"id":1141},"distributing-behaviour-is-not-the-same-as-seeing-it",[1143],{"type":21,"value":1144},"Distributing behaviour is not the same as seeing it",{"type":16,"tag":17,"props":1146,"children":1147},{},[1148],{"type":21,"value":1149},"A plugin can register background monitors, spawn agents and fire hooks without you typing anything. That is the point of it, and it is also the reason a session running someone else's plugin is harder to read at a glance than one running your own commands.",{"type":16,"tag":17,"props":1151,"children":1152},{},[1153,1159],{"type":16,"tag":33,"props":1154,"children":1156},{"href":1155},"/",[1157],{"type":21,"value":1158},"Blooby",{"type":21,"value":1160}," works from the same hook events your plugins use, and turns them into something ambient: one mascot per Claude Code session on your taskbar, showing which session is working, which is blocked on a permission, and which is done, whoever wrote the code that got it there.",{"type":16,"tag":1162,"props":1163,"children":1164},"style",{},[1165],{"type":21,"value":1166},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":7,"searchDepth":198,"depth":198,"links":1168},[1169,1170,1171,1172,1173,1174,1175],{"id":44,"depth":198,"text":47},{"id":159,"depth":198,"text":162},{"id":398,"depth":198,"text":401},{"id":570,"depth":198,"text":573},{"id":840,"depth":198,"text":843},{"id":1086,"depth":198,"text":1089},{"id":1141,"depth":198,"text":1144},"markdown","content:guides:claude-code-plugins.md","content","guides/claude-code-plugins.md","guides/claude-code-plugins","md",1]