Buckets:
| import{s as nt,o as st,n as ye}from"../chunks/scheduler.4048030c.js";import{S as pt,i as it,e as v,s as i,c as j,h as at,a as b,d as t,b as a,f as tt,j as T,g as k,k as lt,l as ot,m as l,n as w,t as C,o as y,p as x}from"../chunks/index.5d0b9360.js";import{C as ut,H as Y,E as $t}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.8dfdfd7d.js";import{C as R}from"../chunks/CodeBlock.da9970c4.js";import{H as Qe,a as Ce}from"../chunks/HfOption.0fd5270b.js";function rt(L){let s,J,f,c="Claude Code installs plugins through marketplaces and the in-session <code>/plugin</code> command.",g,p,h,d,e,o,G="<code>/plugin</code> opens the plugin browser, where you can enable, disable, and uninstall plugins interactively.",q,P,M,A,V="For local development, point <code>/plugin</code> at a <code>marketplace.json</code> file that references your plugin directory:",ee,E,_,N,se="Then inside Claude Code:",ne,S,fe,te,Q="Claude Code reads <code>.claude-plugin/plugin.json</code>, loads skills from <code>skills/</code>, and starts MCP servers from <code>.mcp.json</code>.",pe,X,ce,z,O="Once loaded, skills are available conversationally or via explicit syntax:",ie,K,ae,F,oe="Or invoke with namespace:",D,ue,W,m,H,le,je="Use <code>/plugin</code> to review installed plugins, enable or disable them, and uninstall them. After editing a local plugin, disable and re-enable it from <code>/plugin</code> to reload it.",de,$e,re,ge,Me="Set environment variables required by plugins:",u,U,me,Te,we="Claude Code reads these from your shell environment when the plugin loads.",he;return s=new Y({props:{title:"Installing Plugins in Claude Code",local:"installing-plugins-in-claude-code",headingTag:"h3"}}),p=new Y({props:{title:"From a marketplace",local:"from-a-marketplace",headingTag:"h4"}}),d=new R({props:{code:"JTJGcGx1Z2luJTIwbWFya2V0cGxhY2UlMjBhZGQlMjAlM0Nvd25lciUzRSUyRiUzQ3JlcG8lM0UlMEElMkZwbHVnaW4lMjBpbnN0YWxsJTIwJTNDcGx1Z2luLW5hbWUlM0UlNDAlM0NtYXJrZXRwbGFjZS1uYW1lJTNF",highlighted:`/plugin marketplace add <owner>/<repo> | |
| /plugin install <plugin-name>@<marketplace-name>`,wrap:!1}}),P=new Y({props:{title:"From a local directory",local:"from-a-local-directory",headingTag:"h4"}}),E=new R({props:{code:"JTdCJTBBJTIwJTIwJTIybmFtZSUyMiUzQSUyMCUyMmxvY2FsLWV4YW1wbGUtcGx1Z2lucyUyMiUyQyUwQSUyMCUyMCUyMm93bmVyJTIyJTNBJTIwJTdCJTIwJTIybmFtZSUyMiUzQSUyMCUyMnlvdSUyMiUyMCU3RCUyQyUwQSUyMCUyMCUyMnBsdWdpbnMlMjIlM0ElMjAlNUIlMEElMjAlMjAlMjAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjJuYW1lJTIyJTNBJTIwJTIydGV4dC1wcm9jZXNzb3ItcGx1Z2luJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIyc291cmNlJTIyJTNBJTIwJTIyLiUyRnRleHQtcHJvY2Vzc29yLXBsdWdpbiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMmRlc2NyaXB0aW9uJTIyJTNBJTIwJTIyVGV4dCUyMGFuYWx5c2lzJTIwc2tpbGxzJTIyJTBBJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTVEJTBBJTdE",highlighted:`<span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"local-example-plugins"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"owner"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"you"</span> <span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"plugins"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span> | |
| <span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"text-processor-plugin"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"source"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"./text-processor-plugin"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"description"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Text analysis skills"</span> | |
| <span class="hljs-punctuation">}</span> | |
| <span class="hljs-punctuation">]</span> | |
| <span class="hljs-punctuation">}</span>`,wrap:!1}}),S=new R({props:{code:"JTJGcGx1Z2luJTIwbWFya2V0cGxhY2UlMjBhZGQlMjAlMkZhYnNvbHV0ZSUyRnBhdGglMkZ0byUyRm1hcmtldHBsYWNlLmpzb24lMEElMkZwbHVnaW4lMjBpbnN0YWxsJTIwdGV4dC1wcm9jZXNzb3ItcGx1Z2luJTQwbG9jYWwtZXhhbXBsZS1wbHVnaW5z",highlighted:`/plugin marketplace add /absolute/path/to/marketplace.json | |
| /plugin install text-processor-plugin@local-example-plugins`,wrap:!1}}),X=new Y({props:{title:"Using Plugin Skills",local:"using-plugin-skills",headingTag:"h3"}}),K=new R({props:{code:"QW5hbHl6ZSUyMHRoZSUyMHJlYWRpbmclMjBsZXZlbCUyMG9mJTIwdGhpcyUyMHBhcmFncmFwaA==",highlighted:'Analyze the reading level of <span class="hljs-keyword">this</span> paragraph',wrap:!1}}),ue=new R({props:{code:"JTJGdGV4dC1wcm9jZXNzb3ItcGx1Z2luJTNBY2hlY2stcmVhZGluZy1sZXZlbA==",highlighted:"/text-processor-plugin:check-reading-level",wrap:!1}}),m=new Y({props:{title:"Managing Installed Plugins",local:"managing-installed-plugins",headingTag:"h3"}}),$e=new Y({props:{title:"Configuring Plugins",local:"configuring-plugins",headingTag:"h3"}}),U=new R({props:{code:"ZXhwb3J0JTIwSEZfVE9LRU4lM0QlMjJoZl94eHh4eCUyMg==",highlighted:'<span class="hljs-built_in">export</span> HF_TOKEN=<span class="hljs-string">"hf_xxxxx"</span>',wrap:!1}}),{c(){j(s.$$.fragment),J=i(),f=v("p"),f.innerHTML=c,g=i(),j(p.$$.fragment),h=i(),j(d.$$.fragment),e=i(),o=v("p"),o.innerHTML=G,q=i(),j(P.$$.fragment),M=i(),A=v("p"),A.innerHTML=V,ee=i(),j(E.$$.fragment),_=i(),N=v("p"),N.textContent=se,ne=i(),j(S.$$.fragment),fe=i(),te=v("p"),te.innerHTML=Q,pe=i(),j(X.$$.fragment),ce=i(),z=v("p"),z.textContent=O,ie=i(),j(K.$$.fragment),ae=i(),F=v("p"),F.textContent=oe,D=i(),j(ue.$$.fragment),W=i(),j(m.$$.fragment),H=i(),le=v("p"),le.innerHTML=je,de=i(),j($e.$$.fragment),re=i(),ge=v("p"),ge.textContent=Me,u=i(),j(U.$$.fragment),me=i(),Te=v("p"),Te.textContent=we},l($){T(s.$$.fragment,$),J=a($),f=b($,"P",{"data-svelte-h":!0}),k(f)!=="svelte-18fqxca"&&(f.innerHTML=c),g=a($),T(p.$$.fragment,$),h=a($),T(d.$$.fragment,$),e=a($),o=b($,"P",{"data-svelte-h":!0}),k(o)!=="svelte-wswgud"&&(o.innerHTML=G),q=a($),T(P.$$.fragment,$),M=a($),A=b($,"P",{"data-svelte-h":!0}),k(A)!=="svelte-1avwlt2"&&(A.innerHTML=V),ee=a($),T(E.$$.fragment,$),_=a($),N=b($,"P",{"data-svelte-h":!0}),k(N)!=="svelte-590bu8"&&(N.textContent=se),ne=a($),T(S.$$.fragment,$),fe=a($),te=b($,"P",{"data-svelte-h":!0}),k(te)!=="svelte-xkya6b"&&(te.innerHTML=Q),pe=a($),T(X.$$.fragment,$),ce=a($),z=b($,"P",{"data-svelte-h":!0}),k(z)!=="svelte-d506ym"&&(z.textContent=O),ie=a($),T(K.$$.fragment,$),ae=a($),F=b($,"P",{"data-svelte-h":!0}),k(F)!=="svelte-es48p8"&&(F.textContent=oe),D=a($),T(ue.$$.fragment,$),W=a($),T(m.$$.fragment,$),H=a($),le=b($,"P",{"data-svelte-h":!0}),k(le)!=="svelte-ftftcq"&&(le.innerHTML=je),de=a($),T($e.$$.fragment,$),re=a($),ge=b($,"P",{"data-svelte-h":!0}),k(ge)!=="svelte-dogmdk"&&(ge.textContent=Me),u=a($),T(U.$$.fragment,$),me=a($),Te=b($,"P",{"data-svelte-h":!0}),k(Te)!=="svelte-zlnhdo"&&(Te.textContent=we)},m($,Z){w(s,$,Z),l($,J,Z),l($,f,Z),l($,g,Z),w(p,$,Z),l($,h,Z),w(d,$,Z),l($,e,Z),l($,o,Z),l($,q,Z),w(P,$,Z),l($,M,Z),l($,A,Z),l($,ee,Z),w(E,$,Z),l($,_,Z),l($,N,Z),l($,ne,Z),w(S,$,Z),l($,fe,Z),l($,te,Z),l($,pe,Z),w(X,$,Z),l($,ce,Z),l($,z,Z),l($,ie,Z),w(K,$,Z),l($,ae,Z),l($,F,Z),l($,D,Z),w(ue,$,Z),l($,W,Z),w(m,$,Z),l($,H,Z),l($,le,Z),l($,de,Z),w($e,$,Z),l($,re,Z),l($,ge,Z),l($,u,Z),w(U,$,Z),l($,me,Z),l($,Te,Z),he=!0},p:ye,i($){he||(C(s.$$.fragment,$),C(p.$$.fragment,$),C(d.$$.fragment,$),C(P.$$.fragment,$),C(E.$$.fragment,$),C(S.$$.fragment,$),C(X.$$.fragment,$),C(K.$$.fragment,$),C(ue.$$.fragment,$),C(m.$$.fragment,$),C($e.$$.fragment,$),C(U.$$.fragment,$),he=!0)},o($){y(s.$$.fragment,$),y(p.$$.fragment,$),y(d.$$.fragment,$),y(P.$$.fragment,$),y(E.$$.fragment,$),y(S.$$.fragment,$),y(X.$$.fragment,$),y(K.$$.fragment,$),y(ue.$$.fragment,$),y(m.$$.fragment,$),y($e.$$.fragment,$),y(U.$$.fragment,$),he=!1},d($){$&&(t(J),t(f),t(g),t(h),t(e),t(o),t(q),t(M),t(A),t(ee),t(_),t(N),t(ne),t(fe),t(te),t(pe),t(ce),t(z),t(ie),t(ae),t(F),t(D),t(W),t(H),t(le),t(de),t(re),t(ge),t(u),t(me),t(Te)),x(s,$),x(p,$),x(d,$),x(P,$),x(E,$),x(S,$),x(X,$),x(K,$),x(ue,$),x(m,$),x($e,$),x(U,$)}}}function ft(L){let s,J,f,c="Codex plugins are installed either from the built-in plugin browser or from marketplace configuration files for local and unpublished plugins.",g,p,h,d,e="Open the plugin directory in the CLI:",o,G,q,P,M="Search or browse, install the plugin, then start a new thread to use it.",A,V,ee,E,_="Copy the plugin into your personal plugin directory:",N,se,ne,S,fe="Then edit or create <code>~/.agents/plugins/marketplace.json</code>:",te,Q,pe="Because <code>source.path</code> is resolved relative to <code>~/.agents/plugins/marketplace.json</code>, the path needs to walk up from <code>~/.agents/plugins/</code> before pointing at <code>~/.codex/plugins/</code>.",X,ce,z,O,ie="Codex:",K,ae,F="<li>Reads <code>.codex-plugin/plugin.json</code></li> <li>Loads skills from the <code>skills/</code> directory</li> <li>Sets up optional MCP servers from <code>.mcp.json</code></li> <li>Caches plugin to <code>~/.codex/plugins/cache/$MARKETPLACE/$PLUGIN/$VERSION/</code></li>",oe,D,ue,W,m="Create <code>$REPO_ROOT/.agents/plugins/marketplace.json</code> in the repo that should expose the plugin list, keep the plugin folders at repo-relative paths such as <code>./plugins/text-processor-plugin</code>, then restart Codex and open <code>/plugins</code> in that repo.",H,le,je,de,$e,re,ge="Ask Codex naturally. It routes your request to the right plugin:",Me,u,U,me,Te="Codex:",we,he,$="<li>Recognizes this is a text analysis task</li> <li>Looks up the text-processor plugin’s skills</li> <li>Invokes the appropriate skill with parameters</li> <li>Returns results</li>",Z,xe,r,B,Xe="Codex plugins include skills for specific workflows. Type <code>@</code> to choose a plugin or bundled skill explicitly:",Be,Je,Ze,ve,ze="Or conversationally:",qe,be,Le,ke,Ne,Ue,Oe="Open the plugin browser to inspect installed plugins:",Ee,Ie,Re,_e,Ke="If you edit <code>~/.agents/plugins/marketplace.json</code>, update the local plugin directory, or change a plugin’s <code>enabled</code> flag in <code>~/.codex/config.toml</code>, restart Codex before testing again.",Ve,Pe,Se,Ge,De="Set environment variables in your shell:",We,He,Ye,Ae,et="Codex reads environment variables when loading plugins. Optional MCP servers are started if <code>.mcp.json</code> includes <code>mcpServers</code> entries.",Fe;return s=new Y({props:{title:"Installing Plugins in Codex",local:"installing-plugins-in-codex",headingTag:"h3"}}),p=new Y({props:{title:"From the Plugin Browser",local:"from-the-plugin-browser",headingTag:"h4"}}),G=new R({props:{code:"JTJGcGx1Z2lucw==",highlighted:"/plugins",wrap:!1}}),V=new Y({props:{title:"From the Personal Marketplace",local:"from-the-personal-marketplace",headingTag:"h4"}}),se=new R({props:{code:"bWtkaXIlMjAtcCUyMH4lMkYuY29kZXglMkZwbHVnaW5zJTBBY3AlMjAtUiUyMCUyRmxvY2FsJTJGcGF0aCUyRnRvJTJGdGV4dC1wcm9jZXNzb3ItcGx1Z2luJTIwfiUyRi5jb2RleCUyRnBsdWdpbnMlMkZ0ZXh0LXByb2Nlc3Nvci1wbHVnaW4=",highlighted:`<span class="hljs-built_in">mkdir</span> -p ~/.codex/plugins | |
| <span class="hljs-built_in">cp</span> -R /local/path/to/text-processor-plugin ~/.codex/plugins/text-processor-plugin`,wrap:!1}}),ce=new R({props:{code:"JTdCJTBBJTIwJTIwJTIybmFtZSUyMiUzQSUyMCUyMmxvY2FsLWV4YW1wbGUtcGx1Z2lucyUyMiUyQyUwQSUyMCUyMCUyMmludGVyZmFjZSUyMiUzQSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMmRpc3BsYXlOYW1lJTIyJTNBJTIwJTIyTG9jYWwlMjBFeGFtcGxlJTIwUGx1Z2lucyUyMiUwQSUyMCUyMCU3RCUyQyUwQSUyMCUyMCUyMnBsdWdpbnMlMjIlM0ElMjAlNUIlMEElMjAlMjAlMjAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjJuYW1lJTIyJTNBJTIwJTIydGV4dC1wcm9jZXNzb3ItcGx1Z2luJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIyc291cmNlJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyc291cmNlJTIyJTNBJTIwJTIybG9jYWwlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJwYXRoJTIyJTNBJTIwJTIyLi4lMkYuLiUyRi5jb2RleCUyRnBsdWdpbnMlMkZ0ZXh0LXByb2Nlc3Nvci1wbHVnaW4lMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjJwb2xpY3klMjIlM0ElMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJpbnN0YWxsYXRpb24lMjIlM0ElMjAlMjJBVkFJTEFCTEUlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJhdXRoZW50aWNhdGlvbiUyMiUzQSUyMCUyMk9OX0lOU1RBTEwlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjJjYXRlZ29yeSUyMiUzQSUyMCUyMlByb2R1Y3Rpdml0eSUyMiUwQSUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCU1RCUwQSU3RA==",highlighted:`<span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"local-example-plugins"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"interface"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"displayName"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Local Example Plugins"</span> | |
| <span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"plugins"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span> | |
| <span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"text-processor-plugin"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"source"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"source"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"local"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"path"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"../../.codex/plugins/text-processor-plugin"</span> | |
| <span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"policy"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"installation"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"AVAILABLE"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"authentication"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ON_INSTALL"</span> | |
| <span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"category"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Productivity"</span> | |
| <span class="hljs-punctuation">}</span> | |
| <span class="hljs-punctuation">]</span> | |
| <span class="hljs-punctuation">}</span>`,wrap:!1}}),D=new Y({props:{title:"From a Repo Marketplace",local:"from-a-repo-marketplace",headingTag:"h4"}}),le=new Y({props:{title:"Using Plugins in Codex",local:"using-plugins-in-codex",headingTag:"h3"}}),de=new Y({props:{title:"Conversational Invocation",local:"conversational-invocation",headingTag:"h4"}}),u=new R({props:{code:"V2hhdCdzJTIwdGhlJTIwcmVhZGluZyUyMGxldmVsJTIwb2YlMjB0aGlzJTIwUkVBRE1FJTNG",highlighted:'What<span class="hljs-comment">'s the reading level of this README?</span>',wrap:!1}}),xe=new Y({props:{title:"Using Plugin Skills",local:"using-plugin-skills",headingTag:"h4"}}),Je=new R({props:{code:"JTQwdGV4dC1wcm9jZXNzb3ItcGx1Z2lu",highlighted:'@<span class="hljs-built_in">text</span>-processor-plugin',wrap:!1}}),be=new R({props:{code:"RXh0cmFjdCUyMHRoZSUyMHRvcCUyMGtleXdvcmRzJTIwZnJvbSUyMHRoaXMlMjBkb2N1bWVudA==",highlighted:'<span class="hljs-title class_">Extract</span> the top keywords <span class="hljs-keyword">from</span> <span class="hljs-variable language_">this</span> <span class="hljs-variable language_">document</span>',wrap:!1}}),ke=new Y({props:{title:"Managing Plugins",local:"managing-plugins",headingTag:"h3"}}),Ie=new R({props:{code:"JTJGcGx1Z2lucw==",highlighted:"/plugins",wrap:!1}}),Pe=new Y({props:{title:"Configuring Codex Plugins",local:"configuring-codex-plugins",headingTag:"h3"}}),He=new R({props:{code:"ZXhwb3J0JTIwSEZfVE9LRU4lM0QlMjJoZl94eHh4eCUyMg==",highlighted:'<span class="hljs-built_in">export</span> HF_TOKEN=<span class="hljs-string">"hf_xxxxx"</span>',wrap:!1}}),{c(){j(s.$$.fragment),J=i(),f=v("p"),f.textContent=c,g=i(),j(p.$$.fragment),h=i(),d=v("p"),d.textContent=e,o=i(),j(G.$$.fragment),q=i(),P=v("p"),P.textContent=M,A=i(),j(V.$$.fragment),ee=i(),E=v("p"),E.textContent=_,N=i(),j(se.$$.fragment),ne=i(),S=v("p"),S.innerHTML=fe,te=i(),Q=v("p"),Q.innerHTML=pe,X=i(),j(ce.$$.fragment),z=i(),O=v("p"),O.textContent=ie,K=i(),ae=v("ol"),ae.innerHTML=F,oe=i(),j(D.$$.fragment),ue=i(),W=v("p"),W.innerHTML=m,H=i(),j(le.$$.fragment),je=i(),j(de.$$.fragment),$e=i(),re=v("p"),re.textContent=ge,Me=i(),j(u.$$.fragment),U=i(),me=v("p"),me.textContent=Te,we=i(),he=v("ol"),he.innerHTML=$,Z=i(),j(xe.$$.fragment),r=i(),B=v("p"),B.innerHTML=Xe,Be=i(),j(Je.$$.fragment),Ze=i(),ve=v("p"),ve.textContent=ze,qe=i(),j(be.$$.fragment),Le=i(),j(ke.$$.fragment),Ne=i(),Ue=v("p"),Ue.textContent=Oe,Ee=i(),j(Ie.$$.fragment),Re=i(),_e=v("p"),_e.innerHTML=Ke,Ve=i(),j(Pe.$$.fragment),Se=i(),Ge=v("p"),Ge.textContent=De,We=i(),j(He.$$.fragment),Ye=i(),Ae=v("p"),Ae.innerHTML=et},l(n){T(s.$$.fragment,n),J=a(n),f=b(n,"P",{"data-svelte-h":!0}),k(f)!=="svelte-vof76x"&&(f.textContent=c),g=a(n),T(p.$$.fragment,n),h=a(n),d=b(n,"P",{"data-svelte-h":!0}),k(d)!=="svelte-10s3f5x"&&(d.textContent=e),o=a(n),T(G.$$.fragment,n),q=a(n),P=b(n,"P",{"data-svelte-h":!0}),k(P)!=="svelte-ufldyp"&&(P.textContent=M),A=a(n),T(V.$$.fragment,n),ee=a(n),E=b(n,"P",{"data-svelte-h":!0}),k(E)!=="svelte-2ixeyy"&&(E.textContent=_),N=a(n),T(se.$$.fragment,n),ne=a(n),S=b(n,"P",{"data-svelte-h":!0}),k(S)!=="svelte-1sewc0n"&&(S.innerHTML=fe),te=a(n),Q=b(n,"P",{"data-svelte-h":!0}),k(Q)!=="svelte-wtpceu"&&(Q.innerHTML=pe),X=a(n),T(ce.$$.fragment,n),z=a(n),O=b(n,"P",{"data-svelte-h":!0}),k(O)!=="svelte-6enwqh"&&(O.textContent=ie),K=a(n),ae=b(n,"OL",{"data-svelte-h":!0}),k(ae)!=="svelte-141juxb"&&(ae.innerHTML=F),oe=a(n),T(D.$$.fragment,n),ue=a(n),W=b(n,"P",{"data-svelte-h":!0}),k(W)!=="svelte-1gmjqyu"&&(W.innerHTML=m),H=a(n),T(le.$$.fragment,n),je=a(n),T(de.$$.fragment,n),$e=a(n),re=b(n,"P",{"data-svelte-h":!0}),k(re)!=="svelte-hpxxp2"&&(re.textContent=ge),Me=a(n),T(u.$$.fragment,n),U=a(n),me=b(n,"P",{"data-svelte-h":!0}),k(me)!=="svelte-6enwqh"&&(me.textContent=Te),we=a(n),he=b(n,"OL",{"data-svelte-h":!0}),k(he)!=="svelte-2jlxj4"&&(he.innerHTML=$),Z=a(n),T(xe.$$.fragment,n),r=a(n),B=b(n,"P",{"data-svelte-h":!0}),k(B)!=="svelte-pgmwlo"&&(B.innerHTML=Xe),Be=a(n),T(Je.$$.fragment,n),Ze=a(n),ve=b(n,"P",{"data-svelte-h":!0}),k(ve)!=="svelte-1gflol4"&&(ve.textContent=ze),qe=a(n),T(be.$$.fragment,n),Le=a(n),T(ke.$$.fragment,n),Ne=a(n),Ue=b(n,"P",{"data-svelte-h":!0}),k(Ue)!=="svelte-1w2ph51"&&(Ue.textContent=Oe),Ee=a(n),T(Ie.$$.fragment,n),Re=a(n),_e=b(n,"P",{"data-svelte-h":!0}),k(_e)!=="svelte-1jv91ul"&&(_e.innerHTML=Ke),Ve=a(n),T(Pe.$$.fragment,n),Se=a(n),Ge=b(n,"P",{"data-svelte-h":!0}),k(Ge)!=="svelte-cfv1jy"&&(Ge.textContent=De),We=a(n),T(He.$$.fragment,n),Ye=a(n),Ae=b(n,"P",{"data-svelte-h":!0}),k(Ae)!=="svelte-14igf2v"&&(Ae.innerHTML=et)},m(n,I){w(s,n,I),l(n,J,I),l(n,f,I),l(n,g,I),w(p,n,I),l(n,h,I),l(n,d,I),l(n,o,I),w(G,n,I),l(n,q,I),l(n,P,I),l(n,A,I),w(V,n,I),l(n,ee,I),l(n,E,I),l(n,N,I),w(se,n,I),l(n,ne,I),l(n,S,I),l(n,te,I),l(n,Q,I),l(n,X,I),w(ce,n,I),l(n,z,I),l(n,O,I),l(n,K,I),l(n,ae,I),l(n,oe,I),w(D,n,I),l(n,ue,I),l(n,W,I),l(n,H,I),w(le,n,I),l(n,je,I),w(de,n,I),l(n,$e,I),l(n,re,I),l(n,Me,I),w(u,n,I),l(n,U,I),l(n,me,I),l(n,we,I),l(n,he,I),l(n,Z,I),w(xe,n,I),l(n,r,I),l(n,B,I),l(n,Be,I),w(Je,n,I),l(n,Ze,I),l(n,ve,I),l(n,qe,I),w(be,n,I),l(n,Le,I),w(ke,n,I),l(n,Ne,I),l(n,Ue,I),l(n,Ee,I),w(Ie,n,I),l(n,Re,I),l(n,_e,I),l(n,Ve,I),w(Pe,n,I),l(n,Se,I),l(n,Ge,I),l(n,We,I),w(He,n,I),l(n,Ye,I),l(n,Ae,I),Fe=!0},p:ye,i(n){Fe||(C(s.$$.fragment,n),C(p.$$.fragment,n),C(G.$$.fragment,n),C(V.$$.fragment,n),C(se.$$.fragment,n),C(ce.$$.fragment,n),C(D.$$.fragment,n),C(le.$$.fragment,n),C(de.$$.fragment,n),C(u.$$.fragment,n),C(xe.$$.fragment,n),C(Je.$$.fragment,n),C(be.$$.fragment,n),C(ke.$$.fragment,n),C(Ie.$$.fragment,n),C(Pe.$$.fragment,n),C(He.$$.fragment,n),Fe=!0)},o(n){y(s.$$.fragment,n),y(p.$$.fragment,n),y(G.$$.fragment,n),y(V.$$.fragment,n),y(se.$$.fragment,n),y(ce.$$.fragment,n),y(D.$$.fragment,n),y(le.$$.fragment,n),y(de.$$.fragment,n),y(u.$$.fragment,n),y(xe.$$.fragment,n),y(Je.$$.fragment,n),y(be.$$.fragment,n),y(ke.$$.fragment,n),y(Ie.$$.fragment,n),y(Pe.$$.fragment,n),y(He.$$.fragment,n),Fe=!1},d(n){n&&(t(J),t(f),t(g),t(h),t(d),t(o),t(q),t(P),t(A),t(ee),t(E),t(N),t(ne),t(S),t(te),t(Q),t(X),t(z),t(O),t(K),t(ae),t(oe),t(ue),t(W),t(H),t(je),t($e),t(re),t(Me),t(U),t(me),t(we),t(he),t(Z),t(r),t(B),t(Be),t(Ze),t(ve),t(qe),t(Le),t(Ne),t(Ue),t(Ee),t(Re),t(_e),t(Ve),t(Se),t(Ge),t(We),t(Ye),t(Ae)),x(s,n),x(p,n),x(G,n),x(V,n),x(se,n),x(ce,n),x(D,n),x(le,n),x(de,n),x(u,n),x(xe,n),x(Je,n),x(be,n),x(ke,n),x(Ie,n),x(Pe,n),x(He,n)}}}function ct(L){let s,J,f,c="OpenCode plugins are JavaScript/TypeScript modules loaded at startup. Skills and MCP configuration are related extension surfaces, but they are not the plugin itself.",g,p,h,d,e="Place <code>.js</code> or <code>.ts</code> plugin files in one of the documented plugin directories:",o,G,q,P,M="Files in those directories are loaded automatically when OpenCode starts.",A,V,ee,E,_="Add plugin package names to <code>opencode.json</code>:",N,se,ne,S,fe="OpenCode installs npm plugins with Bun at startup.",te,Q,pe,X,ce="If you also want reusable skills or the Unit 2 Python MCP server, configure those separately:",z,O,ie,K,ae="OpenCode discovers skills automatically from <code>.opencode/skills/</code>, <code>.claude/skills/</code>, and <code>.agents/skills/</code>.",F,oe,D="Configure MCP servers separately in <code>opencode.json</code>:",ue,W,m,H,le,je,de="Once OpenCode starts, the plugin’s hooks or custom tools are available:",$e,re,ge,Me,u="If the plugin adds hooks, they run as those events fire. If it adds custom tools, OpenCode can call them alongside built-in tools.",U,me,Te,we,he,$,Z="Or remove the package name from the <code>plugin</code> array in <code>opencode.json</code>. Restart OpenCode after editing plugin files or the <code>plugin</code> list so startup picks up the new state.",xe;return s=new Y({props:{title:"Installing Plugins in OpenCode",local:"installing-plugins-in-opencode",headingTag:"h3"}}),p=new Y({props:{title:"From Local Files",local:"from-local-files",headingTag:"h4"}}),G=new R({props:{code:"Lm9wZW5jb2RlJTJGcGx1Z2lucyUyRiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHByb2plY3QtbGV2ZWwlMjBwbHVnaW5zJTBBfiUyRi5jb25maWclMkZvcGVuY29kZSUyRnBsdWdpbnMlMkYlMjAlMjAlMjAlMjAlMjAlMjMlMjBnbG9iYWwlMjBwbHVnaW5z",highlighted:`.opencode/plugins/ # project-level plugins | |
| ~/.config/opencode/plugins/ # global plugins`,wrap:!1}}),V=new Y({props:{title:"From npm",local:"from-npm",headingTag:"h4"}}),se=new R({props:{code:"JTdCJTBBJTIwJTIwJTIyJTI0c2NoZW1hJTIyJTNBJTIwJTIyaHR0cHMlM0ElMkYlMkZvcGVuY29kZS5haSUyRmNvbmZpZy5qc29uJTIyJTJDJTBBJTIwJTIwJTIycGx1Z2luJTIyJTNBJTIwJTVCJTIyJTQweW91ci1vcmclMkZ0ZXh0LXByb2Nlc3Nvci1wbHVnaW4lMjIlNUQlMEElN0Q=",highlighted:`<span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"$schema"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://opencode.ai/config.json"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"plugin"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">"@your-org/text-processor-plugin"</span><span class="hljs-punctuation">]</span> | |
| <span class="hljs-punctuation">}</span>`,wrap:!1}}),Q=new Y({props:{title:"What Stays Separate",local:"what-stays-separate",headingTag:"h4"}}),O=new R({props:{code:"bWtkaXIlMjAtcCUyMC5vcGVuY29kZSUyRnNraWxscyUyRmFuYWx5emUtdGV4dCUwQSUyMyUyMEFkZCUyMFNLSUxMLm1kJTIwdG8lMjB0aGUlMjBkaXJlY3Rvcnk=",highlighted:`<span class="hljs-built_in">mkdir</span> -p .opencode/skills/analyze-text | |
| <span class="hljs-comment"># Add SKILL.md to the directory</span>`,wrap:!1}}),W=new R({props:{code:"JTdCJTBBJTIwJTIwJTIybWNwJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIydGV4dC1wcm9jZXNzb3IlMjIlM0ElMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjJ0eXBlJTIyJTNBJTIwJTIycmVtb3RlJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIydXJsJTIyJTNBJTIwJTIyaHR0cHMlM0ElMkYlMkZZT1VSLVVTRVJOQU1FLXRleHQtcHJvY2Vzc29yLW1jcC5oZi5zcGFjZSUyRmdyYWRpb19hcGklMkZtY3AlMkYlMjIlMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlN0QlMEElN0Q=",highlighted:`<span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"mcp"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"text-processor"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"type"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"remote"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"url"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://YOUR-USERNAME-text-processor-mcp.hf.space/gradio_api/mcp/"</span> | |
| <span class="hljs-punctuation">}</span> | |
| <span class="hljs-punctuation">}</span> | |
| <span class="hljs-punctuation">}</span>`,wrap:!1}}),H=new Y({props:{title:"Using Plugin Behavior",local:"using-plugin-behavior",headingTag:"h4"}}),re=new R({props:{code:"U3VtbWFyaXplJTIwdGhpcyUyMGZpbGUlMjBhbmQlMjBub3RlJTIwYW55JTIwdGV4dC1hbmFseXNpcyUyMGZvbGxvdy11cCUyMHRoYXQlMjB3b3VsZCUyMGhlbHAu",highlighted:'<span class="hljs-keyword">Summarize</span> this <span class="hljs-keyword">file</span> and <span class="hljs-keyword">note</span> any text-analysis follow-up that would <span class="hljs-keyword">help</span>.',wrap:!1}}),me=new Y({props:{title:"Managing Plugins",local:"managing-plugins",headingTag:"h4"}}),we=new R({props:{code:"cm0lMjAub3BlbmNvZGUlMkZwbHVnaW5zJTJGdGV4dC1wcm9jZXNzb3ItcGx1Z2luLnRz",highlighted:'<span class="hljs-built_in">rm</span> .opencode/plugins/text-processor-plugin.ts',wrap:!1}}),{c(){j(s.$$.fragment),J=i(),f=v("p"),f.textContent=c,g=i(),j(p.$$.fragment),h=i(),d=v("p"),d.innerHTML=e,o=i(),j(G.$$.fragment),q=i(),P=v("p"),P.textContent=M,A=i(),j(V.$$.fragment),ee=i(),E=v("p"),E.innerHTML=_,N=i(),j(se.$$.fragment),ne=i(),S=v("p"),S.textContent=fe,te=i(),j(Q.$$.fragment),pe=i(),X=v("p"),X.textContent=ce,z=i(),j(O.$$.fragment),ie=i(),K=v("p"),K.innerHTML=ae,F=i(),oe=v("p"),oe.innerHTML=D,ue=i(),j(W.$$.fragment),m=i(),j(H.$$.fragment),le=i(),je=v("p"),je.textContent=de,$e=i(),j(re.$$.fragment),ge=i(),Me=v("p"),Me.textContent=u,U=i(),j(me.$$.fragment),Te=i(),j(we.$$.fragment),he=i(),$=v("p"),$.innerHTML=Z},l(r){T(s.$$.fragment,r),J=a(r),f=b(r,"P",{"data-svelte-h":!0}),k(f)!=="svelte-xzick4"&&(f.textContent=c),g=a(r),T(p.$$.fragment,r),h=a(r),d=b(r,"P",{"data-svelte-h":!0}),k(d)!=="svelte-1spphjp"&&(d.innerHTML=e),o=a(r),T(G.$$.fragment,r),q=a(r),P=b(r,"P",{"data-svelte-h":!0}),k(P)!=="svelte-1glt99q"&&(P.textContent=M),A=a(r),T(V.$$.fragment,r),ee=a(r),E=b(r,"P",{"data-svelte-h":!0}),k(E)!=="svelte-191k1m3"&&(E.innerHTML=_),N=a(r),T(se.$$.fragment,r),ne=a(r),S=b(r,"P",{"data-svelte-h":!0}),k(S)!=="svelte-1y6mr7j"&&(S.textContent=fe),te=a(r),T(Q.$$.fragment,r),pe=a(r),X=b(r,"P",{"data-svelte-h":!0}),k(X)!=="svelte-hkf4nm"&&(X.textContent=ce),z=a(r),T(O.$$.fragment,r),ie=a(r),K=b(r,"P",{"data-svelte-h":!0}),k(K)!=="svelte-1uyl1b"&&(K.innerHTML=ae),F=a(r),oe=b(r,"P",{"data-svelte-h":!0}),k(oe)!=="svelte-1xi9u19"&&(oe.innerHTML=D),ue=a(r),T(W.$$.fragment,r),m=a(r),T(H.$$.fragment,r),le=a(r),je=b(r,"P",{"data-svelte-h":!0}),k(je)!=="svelte-18g3l2v"&&(je.textContent=de),$e=a(r),T(re.$$.fragment,r),ge=a(r),Me=b(r,"P",{"data-svelte-h":!0}),k(Me)!=="svelte-44etfu"&&(Me.textContent=u),U=a(r),T(me.$$.fragment,r),Te=a(r),T(we.$$.fragment,r),he=a(r),$=b(r,"P",{"data-svelte-h":!0}),k($)!=="svelte-11wgfpi"&&($.innerHTML=Z)},m(r,B){w(s,r,B),l(r,J,B),l(r,f,B),l(r,g,B),w(p,r,B),l(r,h,B),l(r,d,B),l(r,o,B),w(G,r,B),l(r,q,B),l(r,P,B),l(r,A,B),w(V,r,B),l(r,ee,B),l(r,E,B),l(r,N,B),w(se,r,B),l(r,ne,B),l(r,S,B),l(r,te,B),w(Q,r,B),l(r,pe,B),l(r,X,B),l(r,z,B),w(O,r,B),l(r,ie,B),l(r,K,B),l(r,F,B),l(r,oe,B),l(r,ue,B),w(W,r,B),l(r,m,B),w(H,r,B),l(r,le,B),l(r,je,B),l(r,$e,B),w(re,r,B),l(r,ge,B),l(r,Me,B),l(r,U,B),w(me,r,B),l(r,Te,B),w(we,r,B),l(r,he,B),l(r,$,B),xe=!0},p:ye,i(r){xe||(C(s.$$.fragment,r),C(p.$$.fragment,r),C(G.$$.fragment,r),C(V.$$.fragment,r),C(se.$$.fragment,r),C(Q.$$.fragment,r),C(O.$$.fragment,r),C(W.$$.fragment,r),C(H.$$.fragment,r),C(re.$$.fragment,r),C(me.$$.fragment,r),C(we.$$.fragment,r),xe=!0)},o(r){y(s.$$.fragment,r),y(p.$$.fragment,r),y(G.$$.fragment,r),y(V.$$.fragment,r),y(se.$$.fragment,r),y(Q.$$.fragment,r),y(O.$$.fragment,r),y(W.$$.fragment,r),y(H.$$.fragment,r),y(re.$$.fragment,r),y(me.$$.fragment,r),y(we.$$.fragment,r),xe=!1},d(r){r&&(t(J),t(f),t(g),t(h),t(d),t(o),t(q),t(P),t(A),t(ee),t(E),t(N),t(ne),t(S),t(te),t(pe),t(X),t(z),t(ie),t(K),t(F),t(oe),t(ue),t(m),t(le),t(je),t($e),t(ge),t(Me),t(U),t(Te),t(he),t($)),x(s,r),x(p,r),x(G,r),x(V,r),x(se,r),x(Q,r),x(O,r),x(W,r),x(H,r),x(re,r),x(me,r),x(we,r)}}}function mt(L){let s,J,f,c="Pi’s closest equivalent to a plugin is a Pi package: a local folder, git repo, or npm package that bundles skills, extensions, prompts, and themes.",g,p,h,d,e,o,G="<code>-l</code> writes the package into <code>.pi/settings.json</code> for the current project.",q,P,M,A,V,ee,E,_,N="If the package’s skills depend on the Unit 2 MCP server, install the adapter once and add the server to <code>.mcp.json</code>:",se,ne,S,fe,te,Q,pe,X,ce="Once loaded, use the skill conversationally or explicitly:",z,O,ie,K,ae,F,oe,D,ue="Use <code>/reload</code> inside Pi after editing local package files or <code>.mcp.json</code>.",W;return s=new Y({props:{title:"Installing Packages in Pi",local:"installing-packages-in-pi",headingTag:"h3"}}),p=new Y({props:{title:"From a local directory",local:"from-a-local-directory",headingTag:"h4"}}),d=new R({props:{code:"cGklMjBpbnN0YWxsJTIwJTJGbG9jYWwlMkZwYXRoJTJGdG8lMkZ0ZXh0LXByb2Nlc3Nvci1wbHVnaW4lMjAtbA==",highlighted:"pi install /local/path/to/text-processor-plugin -l",wrap:!1}}),P=new Y({props:{title:"From npm or git",local:"from-npm-or-git",headingTag:"h4"}}),A=new R({props:{code:"cGklMjBpbnN0YWxsJTIwbnBtJTNBJTQweW91ci1vcmclMkZ0ZXh0LXByb2Nlc3Nvci1wbHVnaW4lMEFwaSUyMGluc3RhbGwlMjBnaXQlM0FnaXRodWIuY29tJTJGeW91ci1vcmclMkZ0ZXh0LXByb2Nlc3Nvci1wbHVnaW4=",highlighted:`pi install npm:@your-org/text-processor-plugin | |
| pi install git:github.com/your-org/text-processor-plugin`,wrap:!1}}),ee=new Y({props:{title:"Pairing with MCP",local:"pairing-with-mcp",headingTag:"h4"}}),ne=new R({props:{code:"cGklMjBpbnN0YWxsJTIwbnBtJTNBcGktbWNwLWFkYXB0ZXI=",highlighted:"pi install npm:pi-mcp-adapter",wrap:!1}}),fe=new R({props:{code:"JTdCJTBBJTIwJTIwJTIybWNwU2VydmVycyUyMiUzQSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMnRleHQtcHJvY2Vzc29yJTIyJTNBJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIydXJsJTIyJTNBJTIwJTIyaHR0cHMlM0ElMkYlMkZZT1VSLVVTRVJOQU1FLXRleHQtcHJvY2Vzc29yLW1jcC5oZi5zcGFjZSUyRmdyYWRpb19hcGklMkZtY3AlMkYlMjIlMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlN0QlMEElN0Q=",highlighted:`<span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"mcpServers"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"text-processor"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"url"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://YOUR-USERNAME-text-processor-mcp.hf.space/gradio_api/mcp/"</span> | |
| <span class="hljs-punctuation">}</span> | |
| <span class="hljs-punctuation">}</span> | |
| <span class="hljs-punctuation">}</span>`,wrap:!1}}),Q=new Y({props:{title:"Using Package Behavior",local:"using-package-behavior",headingTag:"h4"}}),O=new R({props:{code:"V2hhdCdzJTIwdGhlJTIwcmVhZGluZyUyMGxldmVsJTIwb2YlMjB0aGlzJTIwUkVBRE1FJTNGJTBBJTJGc2tpbGwlM0FjaGVjay1yZWFkaW5nLWxldmVsJTIwV2hhdCdzJTIwdGhlJTIwcmVhZGluZyUyMGxldmVsJTIwb2YlMjB0aGlzJTIwUkVBRE1FJTNG",highlighted:`What's the reading level of this README? | |
| /skill:check-reading-level What's the reading level of this README?`,wrap:!1}}),K=new Y({props:{title:"Managing Packages",local:"managing-packages",headingTag:"h4"}}),F=new R({props:{code:"cGklMjBsaXN0JTBBcGklMjBjb25maWclMEFwaSUyMHJlbW92ZSUyMCUyRmxvY2FsJTJGcGF0aCUyRnRvJTJGdGV4dC1wcm9jZXNzb3ItcGx1Z2lu",highlighted:`pi list | |
| pi config | |
| pi remove /local/path/to/text-processor-plugin`,wrap:!1}}),{c(){j(s.$$.fragment),J=i(),f=v("p"),f.textContent=c,g=i(),j(p.$$.fragment),h=i(),j(d.$$.fragment),e=i(),o=v("p"),o.innerHTML=G,q=i(),j(P.$$.fragment),M=i(),j(A.$$.fragment),V=i(),j(ee.$$.fragment),E=i(),_=v("p"),_.innerHTML=N,se=i(),j(ne.$$.fragment),S=i(),j(fe.$$.fragment),te=i(),j(Q.$$.fragment),pe=i(),X=v("p"),X.textContent=ce,z=i(),j(O.$$.fragment),ie=i(),j(K.$$.fragment),ae=i(),j(F.$$.fragment),oe=i(),D=v("p"),D.innerHTML=ue},l(m){T(s.$$.fragment,m),J=a(m),f=b(m,"P",{"data-svelte-h":!0}),k(f)!=="svelte-5f0aft"&&(f.textContent=c),g=a(m),T(p.$$.fragment,m),h=a(m),T(d.$$.fragment,m),e=a(m),o=b(m,"P",{"data-svelte-h":!0}),k(o)!=="svelte-5ls83n"&&(o.innerHTML=G),q=a(m),T(P.$$.fragment,m),M=a(m),T(A.$$.fragment,m),V=a(m),T(ee.$$.fragment,m),E=a(m),_=b(m,"P",{"data-svelte-h":!0}),k(_)!=="svelte-1py8wjd"&&(_.innerHTML=N),se=a(m),T(ne.$$.fragment,m),S=a(m),T(fe.$$.fragment,m),te=a(m),T(Q.$$.fragment,m),pe=a(m),X=b(m,"P",{"data-svelte-h":!0}),k(X)!=="svelte-1cmjuti"&&(X.textContent=ce),z=a(m),T(O.$$.fragment,m),ie=a(m),T(K.$$.fragment,m),ae=a(m),T(F.$$.fragment,m),oe=a(m),D=b(m,"P",{"data-svelte-h":!0}),k(D)!=="svelte-1qf3y35"&&(D.innerHTML=ue)},m(m,H){w(s,m,H),l(m,J,H),l(m,f,H),l(m,g,H),w(p,m,H),l(m,h,H),w(d,m,H),l(m,e,H),l(m,o,H),l(m,q,H),w(P,m,H),l(m,M,H),w(A,m,H),l(m,V,H),w(ee,m,H),l(m,E,H),l(m,_,H),l(m,se,H),w(ne,m,H),l(m,S,H),w(fe,m,H),l(m,te,H),w(Q,m,H),l(m,pe,H),l(m,X,H),l(m,z,H),w(O,m,H),l(m,ie,H),w(K,m,H),l(m,ae,H),w(F,m,H),l(m,oe,H),l(m,D,H),W=!0},p:ye,i(m){W||(C(s.$$.fragment,m),C(p.$$.fragment,m),C(d.$$.fragment,m),C(P.$$.fragment,m),C(A.$$.fragment,m),C(ee.$$.fragment,m),C(ne.$$.fragment,m),C(fe.$$.fragment,m),C(Q.$$.fragment,m),C(O.$$.fragment,m),C(K.$$.fragment,m),C(F.$$.fragment,m),W=!0)},o(m){y(s.$$.fragment,m),y(p.$$.fragment,m),y(d.$$.fragment,m),y(P.$$.fragment,m),y(A.$$.fragment,m),y(ee.$$.fragment,m),y(ne.$$.fragment,m),y(fe.$$.fragment,m),y(Q.$$.fragment,m),y(O.$$.fragment,m),y(K.$$.fragment,m),y(F.$$.fragment,m),W=!1},d(m){m&&(t(J),t(f),t(g),t(h),t(e),t(o),t(q),t(M),t(V),t(E),t(_),t(se),t(S),t(te),t(pe),t(X),t(z),t(ie),t(ae),t(oe),t(D)),x(s,m),x(p,m),x(d,m),x(P,m),x(A,m),x(ee,m),x(ne,m),x(fe,m),x(Q,m),x(O,m),x(K,m),x(F,m)}}}function gt(L){let s,J,f,c,g,p,h,d;return s=new Ce({props:{id:"tool",option:"Claude Code",$$slots:{default:[rt]},$$scope:{ctx:L}}}),f=new Ce({props:{id:"tool",option:"Codex",$$slots:{default:[ft]},$$scope:{ctx:L}}}),g=new Ce({props:{id:"tool",option:"OpenCode",$$slots:{default:[ct]},$$scope:{ctx:L}}}),h=new Ce({props:{id:"tool",option:"Pi",$$slots:{default:[mt]},$$scope:{ctx:L}}}),{c(){j(s.$$.fragment),J=i(),j(f.$$.fragment),c=i(),j(g.$$.fragment),p=i(),j(h.$$.fragment)},l(e){T(s.$$.fragment,e),J=a(e),T(f.$$.fragment,e),c=a(e),T(g.$$.fragment,e),p=a(e),T(h.$$.fragment,e)},m(e,o){w(s,e,o),l(e,J,o),w(f,e,o),l(e,c,o),w(g,e,o),l(e,p,o),w(h,e,o),d=!0},p(e,o){const G={};o&2&&(G.$$scope={dirty:o,ctx:e}),s.$set(G);const q={};o&2&&(q.$$scope={dirty:o,ctx:e}),f.$set(q);const P={};o&2&&(P.$$scope={dirty:o,ctx:e}),g.$set(P);const M={};o&2&&(M.$$scope={dirty:o,ctx:e}),h.$set(M)},i(e){d||(C(s.$$.fragment,e),C(f.$$.fragment,e),C(g.$$.fragment,e),C(h.$$.fragment,e),d=!0)},o(e){y(s.$$.fragment,e),y(f.$$.fragment,e),y(g.$$.fragment,e),y(h.$$.fragment,e),d=!1},d(e){e&&(t(J),t(c),t(p)),x(s,e),x(f,e),x(g,e),x(h,e)}}}function dt(L){let s,J="Set environment variables in your shell before running Claude Code:",f,c,g,p,h="Claude Code reads these when plugins load. No in-app configuration needed.",d;return c=new R({props:{code:"ZXhwb3J0JTIwSEZfVE9LRU4lM0QlMjJoZl94eHh4eCUyMiUwQWV4cG9ydCUyME9QRU5BSV9BUElfS0VZJTNEJTIyc2tfeHh4eHglMjI=",highlighted:`<span class="hljs-built_in">export</span> HF_TOKEN=<span class="hljs-string">"hf_xxxxx"</span> | |
| <span class="hljs-built_in">export</span> OPENAI_API_KEY=<span class="hljs-string">"sk_xxxxx"</span>`,wrap:!1}}),{c(){s=v("p"),s.textContent=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.textContent=h},l(e){s=b(e,"P",{"data-svelte-h":!0}),k(s)!=="svelte-1ebz20z"&&(s.textContent=J),f=a(e),T(c.$$.fragment,e),g=a(e),p=b(e,"P",{"data-svelte-h":!0}),k(p)!=="svelte-8ewo0q"&&(p.textContent=h)},m(e,o){l(e,s,o),l(e,f,o),w(c,e,o),l(e,g,o),l(e,p,o),d=!0},p:ye,i(e){d||(C(c.$$.fragment,e),d=!0)},o(e){y(c.$$.fragment,e),d=!1},d(e){e&&(t(s),t(f),t(g),t(p)),x(c,e)}}}function Mt(L){let s,J="Set environment variables in your shell:",f,c,g;return c=new R({props:{code:"ZXhwb3J0JTIwSEZfVE9LRU4lM0QlMjJoZl94eHh4eCUyMiUwQWV4cG9ydCUyMEdJVEhVQl9UT0tFTiUzRCUyMmdocF94eHh4eCUyMg==",highlighted:`<span class="hljs-built_in">export</span> HF_TOKEN=<span class="hljs-string">"hf_xxxxx"</span> | |
| <span class="hljs-built_in">export</span> GITHUB_TOKEN=<span class="hljs-string">"ghp_xxxxx"</span>`,wrap:!1}}),{c(){s=v("p"),s.textContent=J,f=i(),j(c.$$.fragment)},l(p){s=b(p,"P",{"data-svelte-h":!0}),k(s)!=="svelte-cfv1jy"&&(s.textContent=J),f=a(p),T(c.$$.fragment,p)},m(p,h){l(p,s,h),l(p,f,h),w(c,p,h),g=!0},p:ye,i(p){g||(C(c.$$.fragment,p),g=!0)},o(p){y(c.$$.fragment,p),g=!1},d(p){p&&(t(s),t(f)),x(c,p)}}}function ht(L){let s,J="Set environment variables in your shell:",f,c,g,p,h="Or configure them directly in <code>opencode.json</code> under each MCP server’s <code>environment</code> block.",d;return c=new R({props:{code:"ZXhwb3J0JTIwSEZfVE9LRU4lM0QlMjJoZl94eHh4eCUyMiUwQWV4cG9ydCUyMEdJVEhVQl9UT0tFTiUzRCUyMmdocF94eHh4eCUyMg==",highlighted:`<span class="hljs-built_in">export</span> HF_TOKEN=<span class="hljs-string">"hf_xxxxx"</span> | |
| <span class="hljs-built_in">export</span> GITHUB_TOKEN=<span class="hljs-string">"ghp_xxxxx"</span>`,wrap:!1}}),{c(){s=v("p"),s.textContent=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.innerHTML=h},l(e){s=b(e,"P",{"data-svelte-h":!0}),k(s)!=="svelte-cfv1jy"&&(s.textContent=J),f=a(e),T(c.$$.fragment,e),g=a(e),p=b(e,"P",{"data-svelte-h":!0}),k(p)!=="svelte-ve8nur"&&(p.innerHTML=h)},m(e,o){l(e,s,o),l(e,f,o),w(c,e,o),l(e,g,o),l(e,p,o),d=!0},p:ye,i(e){d||(C(c.$$.fragment,e),d=!0)},o(e){y(c.$$.fragment,e),d=!1},d(e){e&&(t(s),t(f),t(g),t(p)),x(c,e)}}}function jt(L){let s,J="Set environment variables in your shell:",f,c,g,p,h="Pi reads shell environment variables directly, and <code>pi-mcp-adapter</code> can interpolate them from <code>.mcp.json</code> server entries.",d;return c=new R({props:{code:"ZXhwb3J0JTIwSEZfVE9LRU4lM0QlMjJoZl94eHh4eCUyMg==",highlighted:'<span class="hljs-built_in">export</span> HF_TOKEN=<span class="hljs-string">"hf_xxxxx"</span>',wrap:!1}}),{c(){s=v("p"),s.textContent=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.innerHTML=h},l(e){s=b(e,"P",{"data-svelte-h":!0}),k(s)!=="svelte-cfv1jy"&&(s.textContent=J),f=a(e),T(c.$$.fragment,e),g=a(e),p=b(e,"P",{"data-svelte-h":!0}),k(p)!=="svelte-1eyiim9"&&(p.innerHTML=h)},m(e,o){l(e,s,o),l(e,f,o),w(c,e,o),l(e,g,o),l(e,p,o),d=!0},p:ye,i(e){d||(C(c.$$.fragment,e),d=!0)},o(e){y(c.$$.fragment,e),d=!1},d(e){e&&(t(s),t(f),t(g),t(p)),x(c,e)}}}function Tt(L){let s,J,f,c,g,p,h,d;return s=new Ce({props:{id:"tool",option:"Claude Code",$$slots:{default:[dt]},$$scope:{ctx:L}}}),f=new Ce({props:{id:"tool",option:"Codex",$$slots:{default:[Mt]},$$scope:{ctx:L}}}),g=new Ce({props:{id:"tool",option:"OpenCode",$$slots:{default:[ht]},$$scope:{ctx:L}}}),h=new Ce({props:{id:"tool",option:"Pi",$$slots:{default:[jt]},$$scope:{ctx:L}}}),{c(){j(s.$$.fragment),J=i(),j(f.$$.fragment),c=i(),j(g.$$.fragment),p=i(),j(h.$$.fragment)},l(e){T(s.$$.fragment,e),J=a(e),T(f.$$.fragment,e),c=a(e),T(g.$$.fragment,e),p=a(e),T(h.$$.fragment,e)},m(e,o){w(s,e,o),l(e,J,o),w(f,e,o),l(e,c,o),w(g,e,o),l(e,p,o),w(h,e,o),d=!0},p(e,o){const G={};o&2&&(G.$$scope={dirty:o,ctx:e}),s.$set(G);const q={};o&2&&(q.$$scope={dirty:o,ctx:e}),f.$set(q);const P={};o&2&&(P.$$scope={dirty:o,ctx:e}),g.$set(P);const M={};o&2&&(M.$$scope={dirty:o,ctx:e}),h.$set(M)},i(e){d||(C(s.$$.fragment,e),C(f.$$.fragment,e),C(g.$$.fragment,e),C(h.$$.fragment,e),d=!0)},o(e){y(s.$$.fragment,e),y(f.$$.fragment,e),y(g.$$.fragment,e),y(h.$$.fragment,e),d=!1},d(e){e&&(t(J),t(c),t(p)),x(s,e),x(f,e),x(g,e),x(h,e)}}}function wt(L){let s,J="Check if <code>.claude-plugin/plugin.json</code> exists and is valid:",f,c,g,p,h="Ensure skills directory exists:",d,e,o,G,q="Re-enable the plugin from <code>/plugin</code> to reload it.",P;return c=new R({props:{code:"Y2F0JTIwLiUyRm15LXBsdWdpbiUyRi5jbGF1ZGUtcGx1Z2luJTJGcGx1Z2luLmpzb24=",highlighted:'<span class="hljs-built_in">cat</span> ./my-plugin/.claude-plugin/plugin.json',wrap:!1}}),e=new R({props:{code:"bHMlMjAtbGElMjAuJTJGbXktcGx1Z2luJTJGc2tpbGxzJTJG",highlighted:'<span class="hljs-built_in">ls</span> -la ./my-plugin/skills/',wrap:!1}}),{c(){s=v("p"),s.innerHTML=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.textContent=h,d=i(),j(e.$$.fragment),o=i(),G=v("p"),G.innerHTML=q},l(M){s=b(M,"P",{"data-svelte-h":!0}),k(s)!=="svelte-awjivx"&&(s.innerHTML=J),f=a(M),T(c.$$.fragment,M),g=a(M),p=b(M,"P",{"data-svelte-h":!0}),k(p)!=="svelte-1fncsnh"&&(p.textContent=h),d=a(M),T(e.$$.fragment,M),o=a(M),G=b(M,"P",{"data-svelte-h":!0}),k(G)!=="svelte-4l3uiv"&&(G.innerHTML=q)},m(M,A){l(M,s,A),l(M,f,A),w(c,M,A),l(M,g,A),l(M,p,A),l(M,d,A),w(e,M,A),l(M,o,A),l(M,G,A),P=!0},p:ye,i(M){P||(C(c.$$.fragment,M),C(e.$$.fragment,M),P=!0)},o(M){y(c.$$.fragment,M),y(e.$$.fragment,M),P=!1},d(M){M&&(t(s),t(f),t(g),t(p),t(d),t(o),t(G)),x(c,M),x(e,M)}}}function Ct(L){let s,J="Check if plugin is in marketplace and properly formatted:",f,c,g,p,h="Verify <code>.codex-plugin/plugin.json</code> has correct <code>skills</code> and <code>mcpServers</code> paths:",d,e,o,G,q="Open the plugin browser:",P,M,A,V,ee="If you changed marketplace or config files, restart Codex before checking again.",E;return c=new R({props:{code:"Y2F0JTIwfiUyRi5hZ2VudHMlMkZwbHVnaW5zJTJGbWFya2V0cGxhY2UuanNvbg==",highlighted:'<span class="hljs-built_in">cat</span> ~/.agents/plugins/marketplace.json',wrap:!1}}),e=new R({props:{code:"JTdCJTBBJTIwJTIwJTIyc2tpbGxzJTIyJTNBJTIwJTIyLiUyRnNraWxscyUyRiUyMiUyQyUwQSUyMCUyMCUyMm1jcFNlcnZlcnMlMjIlM0ElMjAlMjIuJTJGLm1jcC5qc29uJTIyJTBBJTdE",highlighted:`<span class="hljs-punctuation">{</span> | |
| <span class="hljs-attr">"skills"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"./skills/"</span><span class="hljs-punctuation">,</span> | |
| <span class="hljs-attr">"mcpServers"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"./.mcp.json"</span> | |
| <span class="hljs-punctuation">}</span>`,wrap:!1}}),M=new R({props:{code:"JTJGcGx1Z2lucw==",highlighted:"/plugins",wrap:!1}}),{c(){s=v("p"),s.textContent=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.innerHTML=h,d=i(),j(e.$$.fragment),o=i(),G=v("p"),G.textContent=q,P=i(),j(M.$$.fragment),A=i(),V=v("p"),V.textContent=ee},l(_){s=b(_,"P",{"data-svelte-h":!0}),k(s)!=="svelte-xgm6m"&&(s.textContent=J),f=a(_),T(c.$$.fragment,_),g=a(_),p=b(_,"P",{"data-svelte-h":!0}),k(p)!=="svelte-7c2bgk"&&(p.innerHTML=h),d=a(_),T(e.$$.fragment,_),o=a(_),G=b(_,"P",{"data-svelte-h":!0}),k(G)!=="svelte-17q2oa0"&&(G.textContent=q),P=a(_),T(M.$$.fragment,_),A=a(_),V=b(_,"P",{"data-svelte-h":!0}),k(V)!=="svelte-h6u140"&&(V.textContent=ee)},m(_,N){l(_,s,N),l(_,f,N),w(c,_,N),l(_,g,N),l(_,p,N),l(_,d,N),w(e,_,N),l(_,o,N),l(_,G,N),l(_,P,N),w(M,_,N),l(_,A,N),l(_,V,N),E=!0},p:ye,i(_){E||(C(c.$$.fragment,_),C(e.$$.fragment,_),C(M.$$.fragment,_),E=!0)},o(_){y(c.$$.fragment,_),y(e.$$.fragment,_),y(M.$$.fragment,_),E=!1},d(_){_&&(t(s),t(f),t(g),t(p),t(d),t(o),t(G),t(P),t(A),t(V)),x(c,_),x(e,_),x(M,_)}}}function yt(L){let s,J="Check that the plugin file is in a supported directory:",f,c,g,p,h="If you use npm-installed plugins, verify the <code>plugin</code> array in <code>opencode.json</code>. If the plugin imports external packages, make sure <code>.opencode/package.json</code> contains those dependencies. Then restart OpenCode so startup reloads the plugin.",d;return c=new R({props:{code:"bHMlMjAtbGElMjAub3BlbmNvZGUlMkZwbHVnaW5zJTJG",highlighted:'<span class="hljs-built_in">ls</span> -la .opencode/plugins/',wrap:!1}}),{c(){s=v("p"),s.textContent=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.innerHTML=h},l(e){s=b(e,"P",{"data-svelte-h":!0}),k(s)!=="svelte-plgluq"&&(s.textContent=J),f=a(e),T(c.$$.fragment,e),g=a(e),p=b(e,"P",{"data-svelte-h":!0}),k(p)!=="svelte-f4m3m9"&&(p.innerHTML=h)},m(e,o){l(e,s,o),l(e,f,o),w(c,e,o),l(e,g,o),l(e,p,o),d=!0},p:ye,i(e){d||(C(c.$$.fragment,e),d=!0)},o(e){y(c.$$.fragment,e),d=!1},d(e){e&&(t(s),t(f),t(g),t(p)),x(c,e)}}}function xt(L){let s,J="Then inspect the installed package list:",f,c,g,p,h="Use <code>/reload</code> after fixing the local files so Pi refreshes the package in the current session.",d;return c=new R({props:{code:"cGklMjBsaXN0",highlighted:"pi list",wrap:!1}}),{c(){s=v("p"),s.textContent=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.innerHTML=h},l(e){s=b(e,"P",{"data-svelte-h":!0}),k(s)!=="svelte-o784mk"&&(s.textContent=J),f=a(e),T(c.$$.fragment,e),g=a(e),p=b(e,"P",{"data-svelte-h":!0}),k(p)!=="svelte-v9r9yy"&&(p.innerHTML=h)},m(e,o){l(e,s,o),l(e,f,o),w(c,e,o),l(e,g,o),l(e,p,o),d=!0},p:ye,i(e){d||(C(c.$$.fragment,e),d=!0)},o(e){y(c.$$.fragment,e),d=!1},d(e){e&&(t(s),t(f),t(g),t(p)),x(c,e)}}}function Jt(L){let s,J,f,c,g,p,h,d;return s=new Ce({props:{id:"tool",option:"Claude Code",$$slots:{default:[wt]},$$scope:{ctx:L}}}),f=new Ce({props:{id:"tool",option:"Codex",$$slots:{default:[Ct]},$$scope:{ctx:L}}}),g=new Ce({props:{id:"tool",option:"OpenCode",$$slots:{default:[yt]},$$scope:{ctx:L}}}),h=new Ce({props:{id:"tool",option:"Pi",$$slots:{default:[xt]},$$scope:{ctx:L}}}),{c(){j(s.$$.fragment),J=i(),j(f.$$.fragment),c=i(),j(g.$$.fragment),p=i(),j(h.$$.fragment)},l(e){T(s.$$.fragment,e),J=a(e),T(f.$$.fragment,e),c=a(e),T(g.$$.fragment,e),p=a(e),T(h.$$.fragment,e)},m(e,o){w(s,e,o),l(e,J,o),w(f,e,o),l(e,c,o),w(g,e,o),l(e,p,o),w(h,e,o),d=!0},p(e,o){const G={};o&2&&(G.$$scope={dirty:o,ctx:e}),s.$set(G);const q={};o&2&&(q.$$scope={dirty:o,ctx:e}),f.$set(q);const P={};o&2&&(P.$$scope={dirty:o,ctx:e}),g.$set(P);const M={};o&2&&(M.$$scope={dirty:o,ctx:e}),h.$set(M)},i(e){d||(C(s.$$.fragment,e),C(f.$$.fragment,e),C(g.$$.fragment,e),C(h.$$.fragment,e),d=!0)},o(e){y(s.$$.fragment,e),y(f.$$.fragment,e),y(g.$$.fragment,e),y(h.$$.fragment,e),d=!1},d(e){e&&(t(J),t(c),t(p)),x(s,e),x(f,e),x(g,e),x(h,e)}}}function vt(L){let s,J="Verify <code>.mcp.json</code> has valid JSON with <code>mcpServers</code> key:",f,c,g,p,h="Re-enable the plugin from <code>/plugin</code> after editing the config.",d;return c=new R({props:{code:"Y2F0JTIwLiUyRi5tY3AuanNvbg==",highlighted:'<span class="hljs-built_in">cat</span> ./.mcp.json',wrap:!1}}),{c(){s=v("p"),s.innerHTML=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.innerHTML=h},l(e){s=b(e,"P",{"data-svelte-h":!0}),k(s)!=="svelte-reux9m"&&(s.innerHTML=J),f=a(e),T(c.$$.fragment,e),g=a(e),p=b(e,"P",{"data-svelte-h":!0}),k(p)!=="svelte-yyk091"&&(p.innerHTML=h)},m(e,o){l(e,s,o),l(e,f,o),w(c,e,o),l(e,g,o),l(e,p,o),d=!0},p:ye,i(e){d||(C(c.$$.fragment,e),d=!0)},o(e){y(c.$$.fragment,e),d=!1},d(e){e&&(t(s),t(f),t(g),t(p)),x(c,e)}}}function bt(L){let s,J="MCP servers are optional in Codex plugins. If they aren’t starting, check:",f,c,g="<li><code>.codex-plugin/plugin.json</code> points <code>mcpServers</code> at <code>./.mcp.json</code></li> <li><code>.mcp.json</code> contains a valid <code>mcpServers</code> object</li> <li>the marketplace entry points to the right plugin directory</li>";return{c(){s=v("p"),s.textContent=J,f=i(),c=v("ul"),c.innerHTML=g},l(p){s=b(p,"P",{"data-svelte-h":!0}),k(s)!=="svelte-15vslh6"&&(s.textContent=J),f=a(p),c=b(p,"UL",{"data-svelte-h":!0}),k(c)!=="svelte-936ug0"&&(c.innerHTML=g)},m(p,h){l(p,s,h),l(p,f,h),l(p,c,h)},p:ye,d(p){p&&(t(s),t(f),t(c))}}}function kt(L){let s,J="Plugins and MCP servers are separate in OpenCode. If the separately configured server isn’t starting, debug the MCP config:",f,c,g,p,h="Check that <code>opencode.json</code> is valid JSON and MCP server commands point to existing files.",d;return c=new R({props:{code:"b3BlbmNvZGUlMjBtY3AlMjBkZWJ1ZyUyMHRleHQtcHJvY2Vzc29y",highlighted:"opencode mcp debug text-processor",wrap:!1}}),{c(){s=v("p"),s.textContent=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.innerHTML=h},l(e){s=b(e,"P",{"data-svelte-h":!0}),k(s)!=="svelte-tojuko"&&(s.textContent=J),f=a(e),T(c.$$.fragment,e),g=a(e),p=b(e,"P",{"data-svelte-h":!0}),k(p)!=="svelte-johblq"&&(p.innerHTML=h)},m(e,o){l(e,s,o),l(e,f,o),w(c,e,o),l(e,g,o),l(e,p,o),d=!0},p:ye,i(e){d||(C(c.$$.fragment,e),d=!0)},o(e){y(c.$$.fragment,e),d=!1},d(e){e&&(t(s),t(f),t(g),t(p)),x(c,e)}}}function Ut(L){let s,J="Pi packages and MCP are separate. If the package loads but the adapter does not see the server:",f,c,g,p,h="Inside Pi, use:",d,e,o,G,q="Check that <code>pi-mcp-adapter</code> is installed and the server entry uses a valid <code>command</code>/<code>args</code> or <code>url</code>.",P;return c=new R({props:{code:"Y2F0JTIwLiUyRi5tY3AuanNvbg==",highlighted:'<span class="hljs-built_in">cat</span> ./.mcp.json',wrap:!1}}),e=new R({props:{code:"JTJGbWNwJTBBJTJGbWNwJTIwcmVjb25uZWN0JTIwdGV4dC1wcm9jZXNzb3IlMEElMkZtY3AlMjB0b29scw==",highlighted:`/mcp | |
| /mcp reconnect text-processor | |
| /mcp tools`,wrap:!1}}),{c(){s=v("p"),s.textContent=J,f=i(),j(c.$$.fragment),g=i(),p=v("p"),p.textContent=h,d=i(),j(e.$$.fragment),o=i(),G=v("p"),G.innerHTML=q},l(M){s=b(M,"P",{"data-svelte-h":!0}),k(s)!=="svelte-1fiifz3"&&(s.textContent=J),f=a(M),T(c.$$.fragment,M),g=a(M),p=b(M,"P",{"data-svelte-h":!0}),k(p)!=="svelte-7ofa48"&&(p.textContent=h),d=a(M),T(e.$$.fragment,M),o=a(M),G=b(M,"P",{"data-svelte-h":!0}),k(G)!=="svelte-bvykl0"&&(G.innerHTML=q)},m(M,A){l(M,s,A),l(M,f,A),w(c,M,A),l(M,g,A),l(M,p,A),l(M,d,A),w(e,M,A),l(M,o,A),l(M,G,A),P=!0},p:ye,i(M){P||(C(c.$$.fragment,M),C(e.$$.fragment,M),P=!0)},o(M){y(c.$$.fragment,M),y(e.$$.fragment,M),P=!1},d(M){M&&(t(s),t(f),t(g),t(p),t(d),t(o),t(G)),x(c,M),x(e,M)}}}function It(L){let s,J,f,c,g,p,h,d;return s=new Ce({props:{id:"tool",option:"Claude Code",$$slots:{default:[vt]},$$scope:{ctx:L}}}),f=new Ce({props:{id:"tool",option:"Codex",$$slots:{default:[bt]},$$scope:{ctx:L}}}),g=new Ce({props:{id:"tool",option:"OpenCode",$$slots:{default:[kt]},$$scope:{ctx:L}}}),h=new Ce({props:{id:"tool",option:"Pi",$$slots:{default:[Ut]},$$scope:{ctx:L}}}),{c(){j(s.$$.fragment),J=i(),j(f.$$.fragment),c=i(),j(g.$$.fragment),p=i(),j(h.$$.fragment)},l(e){T(s.$$.fragment,e),J=a(e),T(f.$$.fragment,e),c=a(e),T(g.$$.fragment,e),p=a(e),T(h.$$.fragment,e)},m(e,o){w(s,e,o),l(e,J,o),w(f,e,o),l(e,c,o),w(g,e,o),l(e,p,o),w(h,e,o),d=!0},p(e,o){const G={};o&2&&(G.$$scope={dirty:o,ctx:e}),s.$set(G);const q={};o&2&&(q.$$scope={dirty:o,ctx:e}),f.$set(q);const P={};o&2&&(P.$$scope={dirty:o,ctx:e}),g.$set(P);const M={};o&2&&(M.$$scope={dirty:o,ctx:e}),h.$set(M)},i(e){d||(C(s.$$.fragment,e),C(f.$$.fragment,e),C(g.$$.fragment,e),C(h.$$.fragment,e),d=!0)},o(e){y(s.$$.fragment,e),y(f.$$.fragment,e),y(g.$$.fragment,e),y(h.$$.fragment,e),d=!1},d(e){e&&(t(J),t(c),t(p)),x(s,e),x(f,e),x(g,e),x(h,e)}}}function _t(L){let s,J,f,c,g,p,h,d,e,o="Now that you’ve built a plugin, let’s learn how to install and use them, both your own and plugins from others. The process differs slightly across platforms, but the core idea is identical: <strong>discover → install → configure → use</strong>.",G,q,P,M,A,V,ee,E,_,N,se="All platforms need API keys for plugins that call external services.",ne,S,fe,te,Q,pe,X="<strong>Plugin not loading?</strong>",ce,z,O,ie,K="<strong>Bundled or adjacent MCP server not starting?</strong>",ae,F,oe,D,ue,W,m="In Claude Code, use <code>/plugin marketplace add</code> and <code>/plugin install</code>, with <code>/plugin</code> as the browser. In Codex, use <code>/plugins</code> plus repo or personal marketplace files, and restart after changes. In OpenCode, native plugins are JS/TS modules in <code>.opencode/plugins/</code> or npm packages listed in <code>opencode.json</code>; skills and MCP servers remain separate extension points. In Pi, install packages with <code>pi install</code>, keep plugin-equivalent resources in <code>package.json</code> plus <code>skills/</code> or <code>extensions/</code>, and pair them with <code>pi-mcp-adapter</code> when you need MCP tools.",H,le,je="Next up: a quiz on plugin distribution and best practices.",de,$e,re,ge,Me;return g=new ut({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),h=new Y({props:{title:"Using Plugins",local:"using-plugins",headingTag:"h1"}}),q=new Y({props:{title:"Installing Plugins",local:"installing-plugins",headingTag:"h2"}}),M=new Qe({props:{id:"tool",options:["Claude Code","Codex","OpenCode","Pi"],$$slots:{default:[gt]},$$scope:{ctx:L}}}),V=new Y({props:{title:"Common Plugin Tasks",local:"common-plugin-tasks",headingTag:"h2"}}),E=new Y({props:{title:"Configuring API Keys",local:"configuring-api-keys",headingTag:"h3"}}),S=new Qe({props:{id:"tool",options:["Claude Code","Codex","OpenCode","Pi"],$$slots:{default:[Tt]},$$scope:{ctx:L}}}),te=new Y({props:{title:"Troubleshooting Plugin Issues",local:"troubleshooting-plugin-issues",headingTag:"h3"}}),z=new Qe({props:{id:"tool",options:["Claude Code","Codex","OpenCode","Pi"],$$slots:{default:[Jt]},$$scope:{ctx:L}}}),F=new Qe({props:{id:"tool",options:["Claude Code","Codex","OpenCode","Pi"],$$slots:{default:[It]},$$scope:{ctx:L}}}),D=new Y({props:{title:"Key Takeaways",local:"key-takeaways",headingTag:"h2"}}),$e=new $t({props:{source:"https://github.com/huggingface/context-course/blob/main/units/en/unit3/using-plugins.mdx"}}),{c(){s=v("meta"),J=i(),f=v("p"),c=i(),j(g.$$.fragment),p=i(),j(h.$$.fragment),d=i(),e=v("p"),e.innerHTML=o,G=i(),j(q.$$.fragment),P=i(),j(M.$$.fragment),A=i(),j(V.$$.fragment),ee=i(),j(E.$$.fragment),_=i(),N=v("p"),N.textContent=se,ne=i(),j(S.$$.fragment),fe=i(),j(te.$$.fragment),Q=i(),pe=v("p"),pe.innerHTML=X,ce=i(),j(z.$$.fragment),O=i(),ie=v("p"),ie.innerHTML=K,ae=i(),j(F.$$.fragment),oe=i(),j(D.$$.fragment),ue=i(),W=v("p"),W.innerHTML=m,H=i(),le=v("p"),le.textContent=je,de=i(),j($e.$$.fragment),re=i(),ge=v("p"),this.h()},l(u){const U=at("svelte-u9bgzb",document.head);s=b(U,"META",{name:!0,content:!0}),U.forEach(t),J=a(u),f=b(u,"P",{}),tt(f).forEach(t),c=a(u),T(g.$$.fragment,u),p=a(u),T(h.$$.fragment,u),d=a(u),e=b(u,"P",{"data-svelte-h":!0}),k(e)!=="svelte-5xmeqy"&&(e.innerHTML=o),G=a(u),T(q.$$.fragment,u),P=a(u),T(M.$$.fragment,u),A=a(u),T(V.$$.fragment,u),ee=a(u),T(E.$$.fragment,u),_=a(u),N=b(u,"P",{"data-svelte-h":!0}),k(N)!=="svelte-95otfw"&&(N.textContent=se),ne=a(u),T(S.$$.fragment,u),fe=a(u),T(te.$$.fragment,u),Q=a(u),pe=b(u,"P",{"data-svelte-h":!0}),k(pe)!=="svelte-9ka57u"&&(pe.innerHTML=X),ce=a(u),T(z.$$.fragment,u),O=a(u),ie=b(u,"P",{"data-svelte-h":!0}),k(ie)!=="svelte-rq2bx9"&&(ie.innerHTML=K),ae=a(u),T(F.$$.fragment,u),oe=a(u),T(D.$$.fragment,u),ue=a(u),W=b(u,"P",{"data-svelte-h":!0}),k(W)!=="svelte-147hevs"&&(W.innerHTML=m),H=a(u),le=b(u,"P",{"data-svelte-h":!0}),k(le)!=="svelte-1my61z"&&(le.textContent=je),de=a(u),T($e.$$.fragment,u),re=a(u),ge=b(u,"P",{}),tt(ge).forEach(t),this.h()},h(){lt(s,"name","hf:doc:metadata"),lt(s,"content",Pt)},m(u,U){ot(document.head,s),l(u,J,U),l(u,f,U),l(u,c,U),w(g,u,U),l(u,p,U),w(h,u,U),l(u,d,U),l(u,e,U),l(u,G,U),w(q,u,U),l(u,P,U),w(M,u,U),l(u,A,U),w(V,u,U),l(u,ee,U),w(E,u,U),l(u,_,U),l(u,N,U),l(u,ne,U),w(S,u,U),l(u,fe,U),w(te,u,U),l(u,Q,U),l(u,pe,U),l(u,ce,U),w(z,u,U),l(u,O,U),l(u,ie,U),l(u,ae,U),w(F,u,U),l(u,oe,U),w(D,u,U),l(u,ue,U),l(u,W,U),l(u,H,U),l(u,le,U),l(u,de,U),w($e,u,U),l(u,re,U),l(u,ge,U),Me=!0},p(u,[U]){const me={};U&2&&(me.$$scope={dirty:U,ctx:u}),M.$set(me);const Te={};U&2&&(Te.$$scope={dirty:U,ctx:u}),S.$set(Te);const we={};U&2&&(we.$$scope={dirty:U,ctx:u}),z.$set(we);const he={};U&2&&(he.$$scope={dirty:U,ctx:u}),F.$set(he)},i(u){Me||(C(g.$$.fragment,u),C(h.$$.fragment,u),C(q.$$.fragment,u),C(M.$$.fragment,u),C(V.$$.fragment,u),C(E.$$.fragment,u),C(S.$$.fragment,u),C(te.$$.fragment,u),C(z.$$.fragment,u),C(F.$$.fragment,u),C(D.$$.fragment,u),C($e.$$.fragment,u),Me=!0)},o(u){y(g.$$.fragment,u),y(h.$$.fragment,u),y(q.$$.fragment,u),y(M.$$.fragment,u),y(V.$$.fragment,u),y(E.$$.fragment,u),y(S.$$.fragment,u),y(te.$$.fragment,u),y(z.$$.fragment,u),y(F.$$.fragment,u),y(D.$$.fragment,u),y($e.$$.fragment,u),Me=!1},d(u){u&&(t(J),t(f),t(c),t(p),t(d),t(e),t(G),t(P),t(A),t(ee),t(_),t(N),t(ne),t(fe),t(Q),t(pe),t(ce),t(O),t(ie),t(ae),t(oe),t(ue),t(W),t(H),t(le),t(de),t(re),t(ge)),t(s),x(g,u),x(h,u),x(q,u),x(M,u),x(V,u),x(E,u),x(S,u),x(te,u),x(z,u),x(F,u),x(D,u),x($e,u)}}}const Pt='{"title":"Using Plugins","local":"using-plugins","sections":[{"title":"Installing Plugins","local":"installing-plugins","sections":[{"title":"Installing Plugins in Claude Code","local":"installing-plugins-in-claude-code","sections":[{"title":"From a marketplace","local":"from-a-marketplace","sections":[],"depth":4},{"title":"From a local directory","local":"from-a-local-directory","sections":[],"depth":4}],"depth":3},{"title":"Using Plugin Skills","local":"using-plugin-skills","sections":[],"depth":3},{"title":"Managing Installed Plugins","local":"managing-installed-plugins","sections":[],"depth":3},{"title":"Configuring Plugins","local":"configuring-plugins","sections":[],"depth":3},{"title":"Installing Plugins in Codex","local":"installing-plugins-in-codex","sections":[{"title":"From the Plugin Browser","local":"from-the-plugin-browser","sections":[],"depth":4},{"title":"From the Personal Marketplace","local":"from-the-personal-marketplace","sections":[],"depth":4},{"title":"From a Repo Marketplace","local":"from-a-repo-marketplace","sections":[],"depth":4}],"depth":3},{"title":"Using Plugins in Codex","local":"using-plugins-in-codex","sections":[{"title":"Conversational Invocation","local":"conversational-invocation","sections":[],"depth":4},{"title":"Using Plugin Skills","local":"using-plugin-skills","sections":[],"depth":4}],"depth":3},{"title":"Managing Plugins","local":"managing-plugins","sections":[],"depth":3},{"title":"Configuring Codex Plugins","local":"configuring-codex-plugins","sections":[],"depth":3},{"title":"Installing Plugins in OpenCode","local":"installing-plugins-in-opencode","sections":[{"title":"From Local Files","local":"from-local-files","sections":[],"depth":4},{"title":"From npm","local":"from-npm","sections":[],"depth":4},{"title":"What Stays Separate","local":"what-stays-separate","sections":[],"depth":4},{"title":"Using Plugin Behavior","local":"using-plugin-behavior","sections":[],"depth":4},{"title":"Managing Plugins","local":"managing-plugins","sections":[],"depth":4}],"depth":3},{"title":"Installing Packages in Pi","local":"installing-packages-in-pi","sections":[{"title":"From a local directory","local":"from-a-local-directory","sections":[],"depth":4},{"title":"From npm or git","local":"from-npm-or-git","sections":[],"depth":4},{"title":"Pairing with MCP","local":"pairing-with-mcp","sections":[],"depth":4},{"title":"Using Package Behavior","local":"using-package-behavior","sections":[],"depth":4},{"title":"Managing Packages","local":"managing-packages","sections":[],"depth":4}],"depth":3}],"depth":2},{"title":"Common Plugin Tasks","local":"common-plugin-tasks","sections":[{"title":"Configuring API Keys","local":"configuring-api-keys","sections":[],"depth":3},{"title":"Troubleshooting Plugin Issues","local":"troubleshooting-plugin-issues","sections":[],"depth":3}],"depth":2},{"title":"Key Takeaways","local":"key-takeaways","sections":[],"depth":2}],"depth":1}';function Gt(L){return st(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Lt extends pt{constructor(s){super(),it(this,s,Gt,_t,nt,{})}}export{Lt as component}; | |
Xet Storage Details
- Size:
- 60.7 kB
- Xet hash:
- c7f2de71c5595dacc7af413119560ed6535b296b3c18936e80a2457b7ff237b8
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.