<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Local Plugins</title>
    <description>The latest articles on DEV Community by Local Plugins (@localplugins).</description>
    <link>https://dev.to/localplugins</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4028827%2F63f80f4f-fee5-47cc-a99e-d04953c600ab.png</url>
      <title>DEV Community: Local Plugins</title>
      <link>https://dev.to/localplugins</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/localplugins"/>
    <language>en</language>
    <item>
      <title>Local-first Claude Code plugins: no keys, no network, open source</title>
      <dc:creator>Local Plugins</dc:creator>
      <pubDate>Tue, 14 Jul 2026 13:30:56 +0000</pubDate>
      <link>https://dev.to/localplugins/local-first-claude-code-plugins-no-keys-no-network-open-source-3ak5</link>
      <guid>https://dev.to/localplugins/local-first-claude-code-plugins-no-keys-no-network-open-source-3ak5</guid>
      <description>&lt;p&gt;I keep living inside Claude Code, and I kept wanting small, useful tools in&lt;br&gt;
there that didn't phone home. Not another SaaS with a login and an API key,&lt;br&gt;
just something that runs on my machine, does one job well, and that I can read&lt;br&gt;
before I trust it.&lt;/p&gt;

&lt;p&gt;So I packaged the workflows I actually use into a few open-source plugins and&lt;br&gt;
put them in one marketplace. This is the first write-up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "local-first" means here
&lt;/h2&gt;

&lt;p&gt;The rule I set for myself: a plugin should run entirely on your machine by&lt;br&gt;
default. No account, no API key, no network call, nothing uploaded or&lt;br&gt;
auto-posted. And if a plugin genuinely needs the network, it should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;obvious,&lt;/li&gt;
&lt;li&gt;isolated to a single module,&lt;/li&gt;
&lt;li&gt;off by default, and&lt;/li&gt;
&lt;li&gt;using your own key.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That way you can &lt;code&gt;grep&lt;/code&gt; the code and see exactly what touches the outside&lt;br&gt;
world. For a tool that generates your logo or your résumé, that inspectability&lt;br&gt;
matters.&lt;/p&gt;

&lt;p&gt;Two honest exceptions, called out up front: &lt;code&gt;docpin&lt;/code&gt; fetches library&lt;br&gt;
documentation from the web (always cited), and &lt;code&gt;brand-forge&lt;/code&gt; has one opt-in&lt;br&gt;
module that can call an image API for AI photography. Everything else is local.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the suite
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;brand-forge&lt;/strong&gt; — save a brand profile once (colors, fonts, voice), then
generate on-brand logos, social templates, and doc/deck templates as SVG.
The vector output is drawn by local code, so it's deterministic: the same
profile always produces the same asset.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cv-forge&lt;/strong&gt; — keep one résumé in the JSON Resume schema, generate a clean,
ATS-friendly PDF from a local HTML template and your browser's print. No
Node, no keys, no network.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;content-multiplier&lt;/strong&gt; — turn one idea into on-brand, multi-channel,
multi-language content from a single command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;docpin&lt;/strong&gt; — ground code against your &lt;em&gt;installed&lt;/em&gt; version of a library by
pulling version-matched, cited docs.&lt;/li&gt;
&lt;li&gt;plus a couple more in the same spirit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing
&lt;/h2&gt;

&lt;p&gt;Everything installs through Claude Code's plugin system. In a session:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugin marketplace add localplugins/plugins
/plugin install brand-forge@localplugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then a natural request like &lt;code&gt;/brand-make instagram post "We just shipped"&lt;/code&gt; uses&lt;br&gt;
your saved brand and returns an editable SVG in &lt;code&gt;output/&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A few design choices worth calling out
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Deterministic generation over an LLM round-trip.&lt;/strong&gt; brand-forge's logos and&lt;br&gt;
templates are generated by plain code from your profile, not by asking a model&lt;br&gt;
to draw them. That makes them reproducible, diffable, and editable, and they&lt;br&gt;
don't drift between runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The network boundary is a single file.&lt;/strong&gt; In brand-forge, the only module&lt;br&gt;
that can reach the internet is the opt-in image generator. It's off unless you&lt;br&gt;
set an env var and provide your own key, and the text of your asset is&lt;br&gt;
composited locally as an SVG overlay so it never goes into the image prompt.&lt;br&gt;
One file to audit, not a whole codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plugin anatomy.&lt;/strong&gt; Each plugin is a normal Claude Code plugin: slash commands,&lt;br&gt;
skills that trigger from natural requests, sometimes a SessionStart hook that&lt;br&gt;
loads context, and in brand-forge's case two subagents (an art-director that&lt;br&gt;
plans a multi-asset set, and a visual-guardian that checks output against the&lt;br&gt;
brand for palette and contrast). If you're building your own plugins, they're&lt;br&gt;
small enough to read as examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this isn't
&lt;/h2&gt;

&lt;p&gt;It's not a design tool that will out-polish a human designer, and it isn't&lt;br&gt;
trying to be. It's a way to get consistent, on-brand, good-enough assets and&lt;br&gt;
documents without leaving your terminal or signing up for anything. If you need&lt;br&gt;
pixel-perfect art direction, use it for the scaffolding and finish by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;It's all MIT and open source, built with Claude Code itself:&lt;br&gt;
&lt;a href="https://github.com/localplugins/plugins" rel="noopener noreferrer"&gt;https://github.com/localplugins/plugins&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd genuinely like feedback on two things: what feels useful vs. gimmicky, and&lt;br&gt;
where you think the line should be for what a local-first plugin is allowed to&lt;br&gt;
do. Issues and comments welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
