<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://petercort.github.io/petercort/feed.xml" rel="self" type="application/atom+xml" /><link href="https://petercort.github.io/petercort/" rel="alternate" type="text/html" /><updated>2026-05-11T12:00:09+00:00</updated><id>https://petercort.github.io/petercort/feed.xml</id><title type="html">Good Bloggo</title><subtitle>A collection of thinks and thunks. Some are good, most are not.</subtitle><author><name>Peter Cort</name></author><entry><title type="html">Copilot plugins!</title><link href="https://petercort.github.io/petercort/2026/05/07/plugins.html" rel="alternate" type="text/html" title="Copilot plugins!" /><published>2026-05-07T00:00:00+00:00</published><updated>2026-05-07T00:00:00+00:00</updated><id>https://petercort.github.io/petercort/2026/05/07/plugins</id><content type="html" xml:base="https://petercort.github.io/petercort/2026/05/07/plugins.html"><![CDATA[<p>As developers, we love customizing our workflows. 
But as the number of custom workflows, instructions, and tools grows, 
it can become incredibly hard to parse what exists 
and what is actually relevant to the task at hand. 
Suddenly, your workspace is cluttered with highly-specific commands and disconnected agents.</p>

<p>Enter Plugins.</p>

<h2 id="what-is-a-plugin">What is a plugin?</h2>
<p>A plugin is a packaged collection of customizations.
Agents, skills, hooks, MCP, and LSP servers centered around a single persona.</p>

<p>For example, the <a href="https://github.com/petercort/goose-plugin">Goose Plugin</a> gives you everything you need to 
embody the spirit of a chaotic goose in your workspace: 
angry avian agents, bug-crunching skills, and aggressive honks, I mean hooks.</p>

<h2 id="why-are-plugins-useful">Why are plugins useful?</h2>
<p>The primary benefit of plugins is logical, persona-driven grouping.</p>

<p>Instead of having a massive, disorganized list of hundreds of skills and agents 
that apply to every possible scenario, 
plugins let you load a specific “persona” or toolset into your workspace. 
When you want to approach a problem with a specific lens (like a frontend React expert, a rigorous QA tester, or… a goose), 
you install that plugin. It keeps your development environment clean, focused, and contextualized.</p>

<h2 id="the-structure-of-a-plugin">The structure of a plugin</h2>
<p>A plugin is simply a folder containing a manifest and optional capabilities:
See the <a href="https://code.visualstudio.com/docs/copilot/customization/agent-plugins#_plugin-metadata-pluginjson">documentation</a> 
for structure sharable across Copilot and Claude Code</p>
<pre><code>my-plugin/
├── plugin.json           # Required manifest
├── agents/               # Custom agents (optional)
│   └── helper.agent.md
├── skills/               # Skills (optional)
│   └── deploy/
│       └── SKILL.md
├── hooks.json            # Hook configuration (optional)
└── .mcp.json             # MCP server config (optional)
</code></pre>

<h2 id="how-to-install-plugins">How to install plugins</h2>
<p>Plugins are designed to be easily shareable and installable whether you are using the Copilot CLI or VS Code.</p>

<h3 id="copilot-cli">Copilot CLI</h3>
<p>You can quickly install plugins from various sources directly in the CLI using the /plugin command:</p>

<ul>
  <li>From a marketplace: /plugin install my-plugin@my-marketplace</li>
  <li>From a GitHub repo: /plugin install owner/repo</li>
  <li>From a subdirectory: /plugin install owner/repo:path/to/plugin</li>
  <li>From a full URL: /plugin install https://github.com/owner/repo</li>
</ul>

<h3 id="vs-code">VS Code</h3>
<ul>
  <li>Ensure that the setting chat.plugins.enabled is set to true in your VS Code settings.</li>
  <li>Open the Command Palette and run Chat: Install Plugin From Source.</li>
  <li>Open the Agent Customizations editor, navigate to the Plugins page, and click the + button.</li>
  <li>Enter the Git repository URL (for example, https://github.com/petercort/goose-plugin).</li>
  <li>VS Code will automatically clone and install the plugin for you.</li>
</ul>

<p>Once installed, your agents, skills, and hooks are ready to go. 
Whether you’re configuring a complex dev-ops deployment flow or just wanting to HONK at your own code, plugins package it all up neatly.</p>

<p>Happy coding (and honking)!</p>]]></content><author><name>Peter Cort</name></author><category term="Other" /><summary type="html"><![CDATA[As developers, we love customizing our workflows. But as the number of custom workflows, instructions, and tools grows, it can become incredibly hard to parse what exists and what is actually relevant to the task at hand. Suddenly, your workspace is cluttered with highly-specific commands and disconnected agents.]]></summary></entry><entry><title type="html">Agent Hooks</title><link href="https://petercort.github.io/petercort/2026/02/20/hooks.html" rel="alternate" type="text/html" title="Agent Hooks" /><published>2026-02-20T00:00:00+00:00</published><updated>2026-02-20T00:00:00+00:00</updated><id>https://petercort.github.io/petercort/2026/02/20/hooks</id><content type="html" xml:base="https://petercort.github.io/petercort/2026/02/20/hooks.html"><![CDATA[<hr />

<p>Have you ever kicked off an agent task that you suspect will be long running, and gotten up to get a cup of coffee, stopped to peer through the curtains and marvel at the sun, and gotten a snack, only to find out that when you get back to your computer, your agent task has been finished for many minutes, leaving you far behind the output of your friendly neighborhood 10x developer? Never fear, <a href="https://code.visualstudio.com/docs/copilot/customization/hooks">agent hooks</a> are here! New in version 1.109.3 in VSCode, there are a number of triggers you can make use of to do some pretty cool things.</p>

<p>I’ll let you figure out what the cool things are, I’m going to show you a dumb thing! Presenting the humble <code>stop</code> trigger that fires when an agent session ends and can run a command in the terminal.</p>

<p>Go ahead and create a new file in <code>.github/hooks/stop.json</code> and download your favorite sound file, and voila!</p>

<pre><code class="language-json">{
  "hooks": {
    "Stop": [
      {
        "type":"command",
        "command": "afplay ~/Downloads/im-tired-of-this-grandpa-thats-too-damn-bad.mp3"
      }
    ],
  }
}
</code></pre>
<p>And for your viewing consideration.</p>

<video width="640" controls="">
  <source src="/petercort/assets/hooks-demo.mp4" type="video/mp4" />
  Your browser does not support the video tag.
</video>]]></content><author><name>Peter Cort</name></author><category term="Other" /><summary type="html"><![CDATA[]]></summary></entry></feed>