<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Agent Skills &#8211; About Things | A Hans Scharler Blog</title>
	<atom:link href="https://nothans.com/tag/agent-skills/feed" rel="self" type="application/rss+xml" />
	<link>https://nothans.com</link>
	<description>Life, Comedy, Games, Tech, Marketing, and Community</description>
	<lastBuildDate>Fri, 19 Jun 2026 01:15:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/nothans.com/wp-content/uploads/2023/02/cropped-settings.png?fit=32%2C32&#038;ssl=1</url>
	<title>Agent Skills &#8211; About Things | A Hans Scharler Blog</title>
	<link>https://nothans.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">114568856</site>	<item>
		<title>Create the &#8220;Best Agent Skill&#8221; with SkillOpt from Microsoft Research</title>
		<link>https://nothans.com/create-the-best-agent-skill-with-skillopt-from-microsoft-research</link>
					<comments>https://nothans.com/create-the-best-agent-skill-with-skillopt-from-microsoft-research#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Fri, 19 Jun 2026 01:15:49 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Agent Skills]]></category>
		<category><![CDATA[Codex]]></category>
		<category><![CDATA[Microsoft Research]]></category>
		<category><![CDATA[OpenAI]]></category>
		<category><![CDATA[SkillOpt]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=5447</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p>For two years the move was simple: pick a better model. Then the models got good, and stayed good, and the gaps between them got boring. So the interesting lever is the other thing you hand the agent now. The skill file.</p>



<p>Microsoft Research just shipped a tool called <a href="https://github.com/microsoft/SkillOpt">SkillOpt</a> that takes that idea literally.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.</p>
</blockquote>



<p>It treats the skill markdown you hand an agent (the instructions, the system prompt, the SKILL.md) as trainable state. It runs epochs. It has a batch size. It has a learning rate. It just never touches the model weights. The weights stay frozen behind the API. The thing that gets trained is the text.</p>



<p>The loop is short. Run the agent on a batch of tasks. Score each one. A second model reads the failures and proposes small edits to the skill file. Keep an edit only if it improves a held-out score. Repeat. What you get at the end is a&nbsp;<code>best_skill.md</code>&nbsp;you drop in front of the same unchanged model.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="https://github.com/microsoft/SkillOpt"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="750" height="750" data-attachment-id="5448" data-permalink="https://nothans.com/create-the-best-agent-skill-with-skillopt-from-microsoft-research/image-108" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/image.png?fit=750%2C750&amp;ssl=1" data-orig-size="750,750" data-comments-opened="0" data-image-title="SkillOpt from Microsoft Research" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/image.png?fit=750%2C750&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/image.png?resize=750%2C750&#038;ssl=1" alt="" class="wp-image-5448" style="width:504px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/image.png?w=750&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/image.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/image.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/image.png?resize=530%2C530&amp;ssl=1 530w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/image.png?resize=500%2C500&amp;ssl=1 500w" sizes="(max-width: 750px) 100vw, 750px" /></a><figcaption class="wp-element-caption">Microsoft Research <a href="https://github.com/microsoft/SkillOpt">SkillOpt</a></figcaption></figure>
</div>


<p>I wanted to see it actually work, so I gave it a job&#8230;</p>


<h2 class="wp-block-heading" id="the-setup">The setup</h2>


<p>I had OpenAI Codex do the writing. The task: take a paragraph stuffed with AI slop and clean it up. The skill it started from was short:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Improve the passage so it reads a little better. Keep the meaning and roughly the length.</p>
</blockquote>



<p>No mention of slop. No list of banned words. Nothing to go on.</p>



<p>The verifier was the part that mattered. I wrote a dumb little counter that scans the output for the tells (the canned phrases, the em-dashes) and returns how many are left. Fewer is better. That is the whole eval. Objective, cheap, no judgment calls.</p>



<p>Then I let SkillOpt run.</p>


<h2 class="wp-block-heading" id="what-it-wrote">What it wrote</h2>


<p>The seed turned into a thirty-line deslop skill. SkillOpt wrote it.</p>



<p>It worked out, on its own, that &#8220;remove AI slop&#8221; is a removal constraint and not a tone nudge. It named the exact phrases that kept leaking through (&#8220;let&#8217;s dive in,&#8221; &#8220;have you ever wondered,&#8221; &#8220;it&#8217;s worth noting,&#8221; &#8220;furthermore,&#8221; &#8220;in conclusion,&#8221; &#8220;great question&#8221;). It flagged em-dashes. And it caught the sneaky failure mode I never told it about: the model dodging a banned word by swapping in a synonym. That one became its own rule, the last line of the file:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Before answering, do a quick scan to ensure none of the original flagged words remain, including close synonyms you may have introduced.</p>
</blockquote>



<p>The score went from passing half the held-out passages to passing all of them. The skill it wrote is one I would actually keep.</p>


<h2 class="wp-block-heading" id="the-part-worth-keeping">The part worth keeping</h2>


<p>The optimizer is the easy part.</p>



<p>I went in assuming the clever bit was the model proposing edits. It isn&#8217;t. The clever bit is the verifier. Give SkillOpt a score and nothing else and it does nothing. I tried that first. It saw the failures, shrugged, and changed not a single line, because &#8220;you got a 0.6&#8221; tells it nothing about what to fix. The run that worked was the one where the verifier also said which words leaked. Same model, same loop. The difference was the signal.</p>



<p>So the rule of thumb is less &#8220;use the self-improving optimizer&#8221; and more: can you score this cheaply, and can you tell it why it failed. If yes, the skill mostly writes itself. If no, there is nothing to train and the fancy loop sits there idle.</p>



<p>That is also the catch, and it is the same catch hiding under every self-improving-agent demo. A slop counter is a clean verifier. Most of what you do in a day is not. &#8220;Was this brief any good.&#8221; &#8220;Did this post land.&#8221; No cheap score, no training. The optimizer was never the bottleneck. The verifier is.</p>



<p>So build the verifier first. Get that right and the skill mostly writes itself.</p>


<h2 class="wp-block-heading" id="bonus-a-taste-of-running-it">Bonus: a taste of running it</h2>


<p>The repo is&nbsp;<a href="https://github.com/microsoft/SkillOpt">github.com/microsoft/SkillOpt</a>. MIT licensed, Python.</p>



<p>Get it:</p>



<pre class="wp-block-code"><code>pip install skillopt
# or, to poke at the internals:
git clone https://github.com/microsoft/SkillOpt &amp;&amp; cd SkillOpt &amp;&amp; pip install -e .</code></pre>



<p>The mental model is one small folder per task. A loader that hands over your examples, a rollout that runs your agent and scores it, and a seed skill to start from. SkillOpt&#8217;s whole job is to grow that seed.</p>



<p>The config reads like a training run, on purpose:</p>



<pre class="wp-block-code"><code>train:
  num_epochs: 4
  batch_size: 40
optimizer:
  learning_rate: 4        # max edits to the skill per step
  lr_scheduler: cosine
evaluation:
  use_gate: true          # keep an edit only if it beats the held-out score
model:
  optimizer: gpt-5.4      # the model that proposes the edits</code></pre>



<p>Then it is one command:</p>



<pre class="wp-block-code"><code>python scripts/train.py --config configs/yourtask/default.yaml</code></pre>



<p>The only part that is really on you is the scoring. Your rollout returns, per task, a pass/fail and a number between 0 and 1:</p>



<pre class="wp-block-code"><code>return {"id": task_id, "hard": passed, "soft": fraction_correct}</code></pre>



<p>That is the whole contract. Give it tasks, a way to score them, and a skill to start from. It runs the epochs.</p>



<p>One side note: keep the tasks hard enough that the agent fails some of them. If it aces everything on the seed skill, there is nothing to learn and SkillOpt politely does nothing. Ask me how I know.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/create-the-best-agent-skill-with-skillopt-from-microsoft-research/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5447</post-id>	</item>
		<item>
		<title>What I Learned from Garry Tan and gstack</title>
		<link>https://nothans.com/what-i-learned-from-garry-tan-and-gstack</link>
					<comments>https://nothans.com/what-i-learned-from-garry-tan-and-gstack#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Sat, 06 Jun 2026 15:28:44 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[Agent Skills]]></category>
		<category><![CDATA[agents]]></category>
		<category><![CDATA[Garry Tan]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=5438</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p>Garry Tan, the guy who runs Y Combinator, just open-sourced a toolkit called <a href="https://github.com/garrytan/gstack">gstack</a>. It runs on top of Claude Code and turns it into a virtual engineering team. Twenty-three specialized skills, eight power tools, each one playing a role you&#8217;d normally have to hire for. A CEO that rethinks your product. An engineering manager that locks down the architecture. A designer that catches AI slop. A QA lead that drives a real browser and files bugs against you.</p>



<p>I read through it expecting to roll my eyes. Instead I sat there nodding, because I&#8217;d accidentally built a tiny version of the same thing for this blog.</p>


<h2 class="wp-block-heading" id="the-pitch">The pitch</h2>


<p>gstack&#8217;s whole argument is that solo builders don&#8217;t lose to big teams because they&#8217;re worse engineers. They lose because they skip process. One person at a keyboard, prompting Claude into existence one vibe at a time, eventually ships something that works. Until it doesn&#8217;t. No review. No second opinion. No one asking &#8220;wait, should we even build this?&#8221;</p>



<p>So gstack bakes the process in. Every skill is a slash command, and each command plays a role in a pipeline:</p>



<p><strong>Think → Plan → Build → Review → Test → Ship → Reflect</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img data-recalc-dims="1" decoding="async" width="750" height="500" data-attachment-id="5437" data-permalink="https://nothans.com/gstack-overview-infographic" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?fit=1536%2C1024&amp;ssl=1" data-orig-size="1536,1024" data-comments-opened="0" data-image-title="gstack-overview-infographic" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?fit=750%2C500&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?resize=750%2C500&#038;ssl=1" alt="gstack: seven stages from Think to Reflect, with roles like CEO, Designer, Eng Manager, QA, Security, and Release mapped underneath." class="wp-image-5437" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?resize=1024%2C683&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?resize=300%2C200&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?resize=768%2C512&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?resize=750%2C500&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?resize=420%2C280&amp;ssl=1 420w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?resize=1320%2C880&amp;ssl=1 1320w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/06/gstack-overview-infographic.png?w=1536&amp;ssl=1 1536w" sizes="(max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">gsta</figcaption></figure>
</div>


<p>You start a project with&nbsp;<code>/office-hours</code>, which hits you with six forcing questions before you write a line of code. Then&nbsp;<code>/plan-ceo-review</code>&nbsp;challenges your scope.&nbsp;<code>/plan-eng-review</code>&nbsp;draws the data-flow diagrams and enumerates the edge cases. You build.&nbsp;<code>/review</code>&nbsp;does a staff-engineer pass and auto-fixes the obvious stuff.&nbsp;<code>/qa</code>&nbsp;opens an actual Chromium browser, clicks through your app, finds bugs, and writes a regression test for each one it fixes.&nbsp;<code>/ship</code>&nbsp;runs the suite and opens the PR.</p>



<p>Each stage feeds the next. The CEO&#8217;s decisions constrain the engineer. The engineer&#8217;s plan constrains the build. Nothing happens in a vacuum. That&#8217;s exactly the part solo work gets wrong.</p>



<p>There&#8217;s a whole security wing too. A&nbsp;<code>/cso</code>&nbsp;skill that runs OWASP Top 10 and STRIDE threat modeling. A sidebar Claude that watches for prompt injection. A&nbsp;<code>/careful</code>&nbsp;mode that warns you before&nbsp;<code>rm -rf</code>&nbsp;ruins your afternoon. It&#8217;s a lot. The point isn&#8217;t that you use all of it. The point is that the roles exist, named and on call.</p>


<h2 class="wp-block-heading" id="why-this-looked-familiar">Why this looked familiar</h2>


<p>Here&#8217;s the thing. I don&#8217;t ship code through a blog. I ship words. But the moment I saw that pipeline I recognized it, because the posts you&#8217;re reading go through the same kind of relay.</p>



<p>When I write here, an idea doesn&#8217;t go straight from my head to WordPress. It moves through stages, and each stage has one job:</p>



<ul class="wp-block-list">
<li><strong>Research</strong> does the digging and writes up a structured report. Pitch, key facts, angle, the competition check.</li>



<li><strong>Refine</strong> tightens the structure and pacing without touching the voice.</li>



<li><strong>De-slop</strong> strips out the AI tells. The em-dashes, the &#8220;it&#8217;s not just X, it&#8217;s Y,&#8221; the forced enthusiasm, the closer that tries to sound profound.</li>



<li><strong>Voice</strong> rewrites it to sound like me. Short sentences. Plain words. No throat-clearing.</li>



<li><strong>Format</strong> turns it into clean WordPress blocks.</li>
</ul>



<p>Each one hands off to the next. Same shape as gstack. A CEO who reframes the product is doing what my research stage does for a post. A designer who catches AI slop is, almost word for word, my de-slop pass. Garry Tan built an org chart for shipping software. I built a smaller one for shipping writing, and I didn&#8217;t even notice the resemblance until his showed up.</p>



<p>I&#8217;m not claiming I invented anything. The idea is in the water. Once you spend enough time working alongside an agent, you stop treating it like one genius who does everything and start treating it like a team you have to manage. You give each role a narrow job and a clean handoff. That&#8217;s not a trick. It&#8217;s just how good teams have always worked, now running in a terminal.</p>


<h2 class="wp-block-heading" id="the-number-everyones-going-to-argue-about">The number everyone&#8217;s going to argue about</h2>


<p>gstack ships with a doc making a bold claim: Garry measured his own output and found he&#8217;s writing about 810 times more code per day than he did back in 2013 when he was coding part-time around a day job. Eleven thousand logical lines a day across his first 108 days.</p>



<p>Your skepticism alarm should be going off. So was his. He concedes up front that lines of code is a garbage quality metric. His own line: measuring programming progress by lines of code is like measuring aircraft-building progress by weight. So he deflates the number hard. Strips comments and blanks, applies a 2x penalty for AI being verbose and defensive, and lands at something like 5,700 lines a day. Still a wild figure. Still self-reported, so take it with salt.</p>



<p>But the interesting claim isn&#8217;t the speed. It&#8217;s the quality holding steady while the speed goes up. A 2 percent revert rate, right in line with the open-source baseline. Two thousand-plus automated tests with CI. A 95 percent success rate across 305,000 skill runs. His actual thesis is buried under the headline number:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>&#8220;Testing at multiple levels is what makes AI-assisted coding actually work.&#8221;</p>
</blockquote>



<p>That one I believe without reservation, because it&#8217;s the same thing the pipeline is really about. The process isn&#8217;t there to make the agent faster. It&#8217;s there to catch the agent when it&#8217;s confidently wrong, which it will be, several times a day. Every stage is a checkpoint, a chance for something to get caught before it ships. The payoff isn&#8217;t speed, it&#8217;s fewer mistakes reaching the end.</p>


<h2 class="wp-block-heading" id="what-i-did-with-it">What I did with it</h2>


<p>I&#8217;m not installing the whole thing. gstack is TypeScript and Bun and Playwright, built for shipping web apps, and Windows is a second-class citizen in it. Not my stack. Not my use case.</p>



<p>So I stole the front of it instead. The skill I keep coming back to is&nbsp;<code>/office-hours</code>: six forcing questions you have to answer before you&#8217;re allowed to build anything. Who is this for. What&#8217;s the sharpest version of it. What are you quietly avoiding. It&#8217;s a CEO review for an idea that doesn&#8217;t exist yet.</p>



<p>That maps straight onto the worst part of blogging, which is deciding what&#8217;s even worth writing. So I pointed it at this blog. Before a topic earns a draft, I run it through the same kind of interrogation in Claude Code. What&#8217;s the one sentence. Who already wrote it better. What&#8217;s the angle only I have. Why now. Most ideas die right there, which is the point. The ones that live show up to the draft stage already knowing what they are.</p>



<p>This post is one of them. gstack was the raw idea. The forcing questions are what turned &#8220;gstack exists, that&#8217;s neat&#8221; into something with an angle worth your time. The tool I borrowed from is the tool that helped me write about borrowing from it.</p>



<p>So here&#8217;s what you should know today. gstack is out there, it&#8217;s free, and even if you never run a line of it, the shape is worth stealing. Garry Tan built that discipline for code. I run a lighter version of it on words. You can point it at whatever you make. The pipeline is the product. The agent&#8217;s just the labor.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/what-i-learned-from-garry-tan-and-gstack/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5438</post-id>	</item>
		<item>
		<title>Claude Code and Agent Skills for Electron App Development: Your Desktop App Just Got a Cheat Code</title>
		<link>https://nothans.com/claude-code-and-agent-skills-for-electron-app-development-your-desktop-app-just-got-a-cheat-code</link>
					<comments>https://nothans.com/claude-code-and-agent-skills-for-electron-app-development-your-desktop-app-just-got-a-cheat-code#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 00:14:19 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Agent Skills]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[Compound Engineering]]></category>
		<category><![CDATA[ElectronJS]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=5336</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p>I&#8217;ve been thinking about <a href="https://nothans.com/compound-engineering-what-if-every-project-made-the-next-one-easier">Compound Engineering</a> a lot lately. This is the idea that every project should make the next one easier. And right now, there&#8217;s no better example of that than what&#8217;s happening with Claude Code, Agent Skills, and Electron app development.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img data-recalc-dims="1" decoding="async" width="750" height="750" data-attachment-id="5338" data-permalink="https://nothans.com/claude-code-and-agent-skills-for-electron-app-development-your-desktop-app-just-got-a-cheat-code/image-95" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?fit=1024%2C1024&amp;ssl=1" data-orig-size="1024,1024" data-comments-opened="0" data-image-title="Agent Skills for Electron App Development" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?fit=750%2C750&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?resize=750%2C750&#038;ssl=1" alt="" class="wp-image-5338" style="width:450px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?w=1024&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?resize=768%2C768&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?resize=530%2C530&amp;ssl=1 530w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?resize=750%2C750&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/03/image-1.png?resize=500%2C500&amp;ssl=1 500w" sizes="(max-width: 750px) 100vw, 750px" /></figure>
</div>


<p>Here&#8217;s the irony that got me started down this rabbit hole. Anthropic&#8217;s own Claude desktop app? It&#8217;s an Electron app. Boris Cherny from the Claude Code team <a href="https://news.ycombinator.com/item?id=47104973">confirmed it on Hacker News</a>. The framework that everyone loves to hate is still the pragmatic choice. That tension tells you something important about where we actually are with AI-assisted development.</p>


<h2 class="wp-block-heading" id="the-groundhog-day-problem-electron-edition">The Groundhog Day Problem (Electron Edition)</h2>


<p>Every Electron project starts the same way. You configure <code>BrowserWindow</code> with <code>contextIsolation: true</code> and <code>nodeIntegration: false</code>. You write a preload script with <code>contextBridge.exposeInMainWorld</code>. You set up IPC channels. You configure Content Security Policy headers. You wrestle with <code>electron-builder.yml</code>. You set up code signing. You do this from memory, or you copy-paste from your last project, or you spend an hour on Stack Overflow re-finding the patterns you already know.</p>



<p>I called this the Groundhog Day Problem in my Compound Engineering post. Sixty to eighty percent of what you do on a new project, you&#8217;ve already done before. And yet, every time, you start from scratch.</p>



<p>Agent Skills fix this. Not like templates — templates are dead things. Skills are living context that Claude Code loads on demand when it recognizes you&#8217;re doing Electron work.</p>


<h2 class="wp-block-heading" id="what-are-agent-skills-the-60second-version">What Are Agent Skills? (The 60-Second Version)</h2>


<p>If you haven&#8217;t been following the Agent Skills story, here&#8217;s the short version.</p>



<p>A skill is a folder with a <code>SKILL.md</code> file. It contains YAML frontmatter (name, description) and markdown instructions that Claude follows when the skill activates. Anthropic released Agent Skills as an <a href="https://agentskills.io">open standard</a> in December 2025, and it&#8217;s been adopted by over 26 platforms — not just Claude Code, but also OpenAI Codex, Gemini CLI, GitHub Copilot, Cursor, VS Code, and more.</p>



<p>The key design principle is progressive disclosure. Only the skill&#8217;s name and description load at startup — roughly 30 to 50 tokens per skill. The full <code>SKILL.md</code> loads only when triggered. Reference files and scripts load only when needed during execution. This means you can have dozens of skills installed without bloating your context window.</p>



<p>Think of it like an onboarding guide for a new team member — except the new team member is an AI agent that reads and follows instructions instantly.</p>


<h2 class="wp-block-heading" id="the-electron-skill-stack">The Electron Skill Stack</h2>


<p>Here&#8217;s where it gets practical. There&#8217;s already a growing ecosystem of skills and subagents specifically for Electron development. Let&#8217;s walk through the ones worth knowing about — and how to install each one.</p>


<h3 class="wp-block-heading" id="1-electronscaffold">1. electron-scaffold</h3>


<p><strong>What it does:</strong> Scaffolds production-ready Electron apps with security hardening baked in from the start. It handles the architecture decisions (Electron Forge vs. Vite vs. electron-builder), sets up proper IPC patterns with <code>contextBridge</code>, configures CSP headers, enables context isolation, sets up auto-updates, integrates native menus, and generates the full project structure with TypeScript support.</p>



<p><strong>Why it matters:</strong> This is the security-first scaffolding that most tutorials skip. It encodes the difference between a toy Electron app and one that&#8217;s ready for distribution.</p>



<p><strong>How to install:</strong></p>



<p>Using the Vercel skills CLI (works across Claude Code, Codex, Cursor, and others):</p>



<pre class="wp-block-code"><code>npx skills add chrisvoncsefalvay/claude-skills --skill electron-scaffold</code></pre>



<p>Or manually: download from the <a href="https://claude-plugins.dev/skills/@chrisvoncsefalvay/claude-skills/electron-scaffold">claude-plugins.dev listing</a>, extract the ZIP, and drop the folder into <code>~/.claude/skills/</code>.</p>



<p>For Claude.ai users, go to <a href="https://claude.ai/settings/capabilities">claude.ai/settings/capabilities</a>, find the Skills section, and upload the downloaded ZIP.</p>


<h3 class="wp-block-heading" id="2-electronpro-subagent">2. electron-pro (Subagent)</h3>


<p><strong>What it does:</strong> This isn&#8217;t a skill — it&#8217;s a full subagent. Think of it as a senior Electron developer persona with deep expertise in Electron 27+ and native OS integrations. It follows a phased approach: understanding your requirements, designing secure architecture, implementing with a full security checklist (context isolation, CSP, IPC validation, code signing), and packaging for multi-platform distribution.</p>



<p><strong>Why it matters:</strong> It&#8217;s the difference between asking Claude to &#8220;make an Electron app&#8221; and having a dedicated Electron specialist with a checklist that covers everything from memory budgets to auto-update rollback strategies.</p>



<p><strong>How to install:</strong></p>



<p>Download the subagent file directly from <a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/electron-pro.md">VoltAgent&#8217;s repository</a> and save it to your agents directory:</p>



<pre class="wp-block-code"><code>mkdir -p ~/.claude/agents
curl -o ~/.claude/agents/electron-pro.md \
  https:&#47;&#47;raw.githubusercontent.com/VoltAgent/awesome-claude-code-subagents/main/categories/01-core-development/electron-pro.md</code></pre>



<p>Or use the built-in agent installer in Claude Code by typing <code>/agents</code> and creating a new agent from the file.</p>


<h3 class="wp-block-heading" id="3-fullstack-electron-skill-partmeai">3. Full-Stack Electron Skill (partme-ai)</h3>


<p><strong>What it does:</strong> A comprehensive Electron reference skill organized to mirror the official Electron documentation structure. It covers everything: main process, renderer process, IPC communication, <code>BrowserWindow</code> management, menus, tray icons, native integrations, packaging with ASAR, electron-builder configuration, code signing, auto-updates, debugging, memory profiling, crash reporting, and security best practices including sandboxing and CSP.</p>



<p><strong>Why it matters:</strong> This is the one that turns Claude Code into something like having the entire Electron docs loaded as contextual intelligence. Instead of searching docs, Claude just <em>knows</em> the right patterns.</p>



<p><strong>How to install:</strong></p>



<p>Via the Vercel skills CLI:</p>



<pre class="wp-block-code"><code>npx skills add partme-ai/full-stack-skills --skill electron</code></pre>



<p>Via LobeHub:</p>



<pre class="wp-block-code"><code>mkdir -p ~/.claude/skills/partme-ai-full-stack-skills-electron &amp;&amp; \
curl -fsSL "https://market.lobehub.com/api/v1/skills/partme-ai-full-stack-skills-electron/download" \
  -o /tmp/electron-skill.zip &amp;&amp; \
unzip -o /tmp/electron-skill.zip \
  -d ~/.claude/skills/partme-ai-full-stack-skills-electron</code></pre>


<h3 class="wp-block-heading" id="4-electrons-own-claudemd">4. Electron&#8217;s Own CLAUDE.md</h3>


<p><strong>What it does:</strong> The Electron framework itself ships a <code>CLAUDE.md</code> in its repository. This teaches Claude Code the Electron project&#8217;s structure — where the C++ shell code lives, how TypeScript implementations map to API modules, how to work with the 159+ Chromium patches and 48+ Node.js patches, and the build workflow using <code>@electron/build-tools</code>. It even includes a dedicated &#8220;Electron Chromium Upgrade&#8221; skill for Chromium version bumps.</p>



<p><strong>Why it matters:</strong> This is a real-world example of a major open source project using <code>CLAUDE.md</code> to encode institutional knowledge. If you&#8217;re contributing to Electron itself, or if you want inspiration for structuring your own project&#8217;s <code>CLAUDE.md</code>, this is the gold standard.</p>



<p><strong>How to access:</strong> No installation needed — it&#8217;s in the <a href="https://github.com/electron/electron/blob/main/CLAUDE.md">Electron repo</a>. But the pattern is what matters. Your own Electron app should have a <code>CLAUDE.md</code> at the project root that teaches Claude Code about your specific architecture, IPC channel naming conventions, and build setup.</p>


<h3 class="wp-block-heading" id="5-electron-fsd-react-19">5. Electron FSD + React 19</h3>


<p><strong>What it does:</strong> A specialized skill for building Electron apps using Feature-Sliced Design architecture combined with React 19 patterns. It enforces a clean separation of concerns across the three-process model (Main, Preload, Renderer) while implementing strict FSD layer responsibilities. Covers modern React patterns like the <code>use()</code> hook and <code>useActionState</code>.</p>



<p><strong>Why it matters:</strong> If your Electron app is a React app (and let&#8217;s be honest, a lot of them are), this skill bridges the gap between &#8220;generic Electron best practices&#8221; and &#8220;how to actually structure a complex React-based desktop application.&#8221;</p>



<p><strong>How to install:</strong></p>



<p>Available on <a href="https://mcpmarket.com/tools/skills/electron-fsd-development">MCPMarket</a>. Download the skill ZIP and extract it:</p>



<pre class="wp-block-code"><code>mkdir -p ~/.claude/skills/electron-fsd-development
# Extract the downloaded ZIP into the directory above</code></pre>



<p>Or upload it directly as a skill in Claude.ai settings.</p>


<h2 class="wp-block-heading" id="building-your-own-electron-skills">Building Your Own Electron Skills</h2>


<p>The pre-built skills get you started, but the real compounding happens when you build your own. Here&#8217;s the thing — you already have the knowledge. It&#8217;s just locked in your head.</p>



<p>That IPC channel naming convention you use across every project? That&#8217;s a skill. Your <code>electron-builder.yml</code> that took you a weekend to get right? That&#8217;s a skill. The way you structure preload scripts for your team? Skill.</p>



<p>Here&#8217;s what a simple custom Electron skill looks like:</p>



<pre class="wp-block-code"><code>---
name: my-electron-conventions
description: Project conventions for Electron IPC channels,
  preload patterns, and build configuration. Use when creating
  new IPC handlers, preload scripts, or modifying build config.
---

<strong>#</strong><strong> Electron Project Conventions</strong>

<strong>##</strong><strong> IPC Channel Naming</strong>
- Use colon-separated namespaces: `app:get-version`, `file:open`
- Prefix with `dialog:` for user-facing dialogs
- Prefix with `store:` for persistent data operations

<strong>##</strong><strong> Preload Script Pattern</strong>
- One preload file per window type
- Always use `contextBridge.exposeInMainWorld`
- Never expose raw `ipcRenderer`

<strong>##</strong><strong> Build Configuration</strong>
- Target: DMG for macOS, NSIS for Windows, AppImage for Linux
- Always enable `hardenedRuntime` on macOS
- Auto-updater points to GitHub Releases</code></pre>



<p>Save that to <code>~/.claude/skills/my-electron-conventions/SKILL.md</code> and it&#8217;s active globally across all your projects. Or put it in your project&#8217;s <code>.claude/skills/</code> directory to scope it to one repo.</p>



<p>Since this follows the Agent Skills open standard, it also works in Codex, Cursor, Gemini CLI, and anywhere else that supports the spec.</p>


<h2 class="wp-block-heading" id="what-happens-when-you-actually-use-them">What Happens When You Actually Use Them</h2>


<p>Stephan Miller <a href="https://www.stephanmiller.com/electron-project-from-scratch-with-claude-code/">documented building an Electron writing app</a> from scratch with Claude Code — 16 hours and $80 in API costs. His biggest lesson? Planning saves time. He had to stop and refactor his <code>CLAUDE.md</code> because the project outgrew his initial architecture.</p>



<p>Skills encode that planning. They front-load the decisions so you don&#8217;t have to make them again. With the Electron skills loaded, Claude Code doesn&#8217;t just generate code — it generates <em>correct</em> code with context isolation enabled, CSP headers configured, proper IPC patterns, and a project structure that scales.</p>



<p>This is the compound engineering flywheel in action. Project 1, you build everything from scratch and learn the hard way. By project 3, your skills are doing the heavy lifting. By project 5, you describe what you want and the system drafts the first 70% with security baked in. You refine, you polish, you add the creative spark.</p>


<h2 class="wp-block-heading" id="the-meta-question-should-ai-kill-electron">The Meta Question: Should AI Kill Electron?</h2>


<p>Drew Breunig <a href="https://www.dbreunig.com/2026/02/21/why-is-claude-an-electron-app.html">wrote a post</a> asking why Anthropic doesn&#8217;t use Claude to build a native desktop app instead. If coding agents are so good, why not generate native apps for each platform from a spec and test suite?</p>



<p>The answer is pragmatic. Agents excel at the first 90% of development, but that last 10% — edge cases, real-world testing, ongoing support — is still hard. And with three different native apps, your bug surface area triples. Electron still makes sense for most teams.</p>



<p>But here&#8217;s what skills change about the equation: they make Electron <em>better</em>. The security hardening that would normally be forgotten? A skill remembers it. The IPC patterns that would normally be sloppy? A skill enforces them. The packaging configuration that would normally be a weekend of trial and error? A skill has it pre-encoded.</p>



<p>Agent Skills don&#8217;t make Electron obsolete. They make Electron apps that feel like they were built by a team that actually cares about security and native integration.</p>


<h2 class="wp-block-heading" id="start-the-flywheel">Start the Flywheel</h2>


<p>Here&#8217;s your homework. This week, install one of the Electron skills I listed above. Or better yet, write one. Take that <code>electron-builder.yml</code> you&#8217;ve tweaked fifty times. That preload script pattern you copy from project to project. That IPC naming convention that lives in your team&#8217;s heads.</p>



<p>Codify it. Make it a <code>SKILL.md</code>. Drop it in <code>~/.claude/skills/</code>. Watch what happens on the next project.</p>



<p>If you want to get started quickly, here are all the install commands in one place:</p>



<pre class="wp-block-code"><code># electron-scaffold (security-first scaffolding)
npx skills add chrisvoncsefalvay/claude-skills --skill electron-scaffold

# Full-Stack Electron reference (partme-ai)
npx skills add partme-ai/full-stack-skills --skill electron

# electron-pro subagent
mkdir -p ~/.claude/agents &amp;&amp; curl -o ~/.claude/agents/electron-pro.md \
  https:&#47;&#47;raw.githubusercontent.com/VoltAgent/awesome-claude-code-subagents/main/categories/01-core-development/electron-pro.md

# Your own custom skill
mkdir -p ~/.claude/skills/my-electron-conventions
# Then create SKILL.md with your conventions</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/claude-code-and-agent-skills-for-electron-app-development-your-desktop-app-just-got-a-cheat-code/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5336</post-id>	</item>
	</channel>
</rss>
