<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Notes on Agent Skills]]></title><description><![CDATA[Practical skills and workflows for coding agents.]]></description><link>https://alapha888.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>Notes on Agent Skills</title><link>https://alapha888.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 11:29:36 GMT</lastBuildDate><atom:link href="https://alapha888.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[A Local-First Web Highlighter, Now Live on Microsoft Edge Add-ons]]></title><description><![CDATA[Disclosure: I am the developer of this extension.

Why I Built It
Most web highlighters I tried required an account before they let me save anything. That means your reading history — which articles y]]></description><link>https://alapha888.hashnode.dev/a-local-first-web-highlighter-now-live-on-microsoft-edge-add-ons</link><guid isPermaLink="true">https://alapha888.hashnode.dev/a-local-first-web-highlighter-now-live-on-microsoft-edge-add-ons</guid><category><![CDATA[Browser Extension]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[privacy]]></category><category><![CDATA[microsoft edge]]></category><dc:creator><![CDATA[alapha888]]></dc:creator><pubDate>Tue, 06 Oct 2026 04:05:04 GMT</pubDate><content:encoded><![CDATA[<p><em>Disclosure: I am the developer of this extension.</em></p>
<hr />
<h2>Why I Built It</h2>
<p>Most web highlighters I tried required an account before they let me save anything. That means your reading history — which articles you annotated, what you underlined, what notes you left — lives on someone else's server, tied to a login. I wanted a tool that works the first time you click it, keeps your data in your own browser, and does not phone home.</p>
<p>So I built one.</p>
<hr />
<h2>What It Does</h2>
<p><strong>Highlighter</strong> is a free browser extension that lets you mark up any web page and leave inline notes, the same way you would with a physical book. You get multiple highlight colors to organize by theme or priority, and a side panel where you can search across everything you have saved.</p>
<p>A few practical extras:</p>
<ul>
<li><strong>Quote anchoring</strong> — highlights are stored as text excerpts with positional context, so they snap back to the right place when you revisit the page, even if the layout has shifted slightly.</li>
<li><strong>Weava CSV import</strong> — if you are moving from Weava, your existing highlights come with you.</li>
<li><strong>Flexible export</strong> — take your data out as JSON, CSV, or Markdown whenever you want.</li>
</ul>
<hr />
<h2>How the Local-First Part Works</h2>
<p>There is no account, no server, and no analytics. Everything is stored in browser local storage — your highlights never leave your device unless you export them yourself. The extension has no network permissions beyond loading the pages you are already visiting.</p>
<p>This also means no subscription, no "free tier" limits, and no service that could shut down and take your notes with it.</p>
<hr />
<h2>Try It and Tell Me What's Broken</h2>
<p>You can install it from the <a href="https://microsoftedge.microsoft.com/addons/detail/highlighter/ooocjgnapglfljdgojdoacjdedpaplhe">Microsoft Edge Add-ons store</a>.</p>
<p>I am still actively working on it. If a highlight lands in the wrong spot, a page causes a crash, or you want a feature that is obviously missing — leave a comment here or open an issue. Early feedback shapes what gets fixed first.</p>
]]></content:encoded></item><item><title><![CDATA[How to Write Your First Agent Skill]]></title><description><![CDATA[You have house rules for your coding agent: how commit messages should look, what a code review should check, how meeting notes should be structured. So you paste them into the chat at the start of ev]]></description><link>https://alapha888.hashnode.dev/how-to-write-your-first-agent-skill</link><guid isPermaLink="true">https://alapha888.hashnode.dev/how-to-write-your-first-agent-skill</guid><category><![CDATA[AI]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[programming]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[alapha888]]></dc:creator><pubDate>Tue, 06 Oct 2026 01:31:45 GMT</pubDate><content:encoded><![CDATA[<p>You have house rules for your coding agent: how commit messages should look, what a code review should check, how meeting notes should be structured. So you paste them into the chat at the start of every session — and by message ten the agent has drifted anyway. Next session, you paste again.</p>
<p>The problem is not memory. The instructions live in your clipboard instead of in a file the agent loads every time. A skill is that file.</p>
<h2>What a skill is</h2>
<p>A skill is a folder containing one file: <code>SKILL.md</code>. It has two parts.</p>
<p>The YAML frontmatter carries two fields — a <code>name</code> and a <code>description</code>. The description is the trigger: the agent scans the descriptions of its skills to decide which ones apply to your request. So the description does two jobs — say what the skill does, and name the situations where it fires. Write it as "does X. Use when the user asks for Y."</p>
<p>The body is plain markdown: the workflow, the rules, an example. No code, no config beyond the frontmatter.</p>
<h2>Teardown: a commit-message skill</h2>
<p>The smallest skill in my pack generates commit messages, and it shows every part doing a job. Its frontmatter, verbatim:</p>
<pre><code class="language-yaml">---
name: git-commit-message
description: "Generates conventional-commit messages from staged changes: type prefix + English imperative subject (≤50 chars) + optional body explaining why. Use when the user asks to write, generate, or polish a git commit message."
---
</code></pre>
<p>The workflow is five numbered steps, in execution order:</p>
<ol>
<li><p>Look at the changes (<code>git status --short</code>, <code>git diff --cached --stat</code>). If nothing is staged, stop and ask — never invent a message out of nothing.</p>
</li>
<li><p>Pick exactly one type prefix: <code>feat</code>, <code>fix</code>, <code>docs</code>, <code>refactor</code>, <code>test</code>, <code>chore</code>. A change that mixes types gets split into two commits, not averaged into one.</p>
</li>
<li><p>Write the subject: type + imperative phrase, ≤50 characters. Empty subjects like "update code" are banned.</p>
</li>
<li><p>Write an optional body: 1–3 lines explaining <em>why</em>, not a play-by-play of <em>how</em>.</p>
</li>
<li><p>Output a ready-to-run <code>git commit</code> command, not bare text the user has to assemble.</p>
</li>
</ol>
<p>Then come the rules that encode judgment — the things you would otherwise keep correcting in review:</p>
<ul>
<li><p>The subject is for skimmers; the body is for future-you in three months. Keep the two jobs separate.</p>
</li>
<li><p>No meta-commentary in the message ("generated by AI", etc.) — the message is about the change, nothing else.</p>
</li>
</ul>
<p>And one worked example, with the expected output:</p>
<pre><code class="language-bash">git commit -m "feat: add CAPTCHA verification to login endpoint" -m "Blocks automated credential stuffing; CAPTCHA valid 5 minutes, account locks 10 minutes after 3 failures."
</code></pre>
<p>Finally, the anti-patterns — the failure modes, named explicitly:</p>
<ul>
<li><p>Writing a message for an empty staging area: no diff, no commit message.</p>
</li>
<li><p>Catch-all <code>chore</code>: labeling every feat and fix as <code>chore</code> until the type system means nothing.</p>
</li>
<li><p>Novel-length subjects that praise the change instead of naming it.</p>
</li>
<li><p>Body as implementation log ("first changed line 20 of a.py, then b.py…") — the diff already shows that; the body explains why.</p>
</li>
</ul>
<p>Each part earns its place. The description decides triggering. The numbered steps fix the order of operations and include a stop condition. The rules hold the judgment calls. The example anchors the output format better than a paragraph of prose. The anti-patterns tell the agent what to refuse.</p>
<h2>Writing your own</h2>
<ol>
<li><p><strong>Pick a workflow you have explained at least three times.</strong> Repetition is the selection criterion.</p>
</li>
<li><p><strong>Write the description first.</strong> If you cannot write a clean trigger, the skill's scope is too wide.</p>
</li>
<li><p><strong>Write the workflow as numbered steps in execution order</strong>, with stop conditions for the cases where it should not proceed.</p>
</li>
<li><p><strong>Add the rules you always end up correcting</strong> — naming, format, what to do when the input is ambiguous.</p>
</li>
<li><p><strong>Add one worked example</strong> — real input, expected output, no placeholders.</p>
</li>
<li><p><strong>Add the anti-patterns.</strong> The ways this workflow goes wrong are as instructive as the steps.</p>
</li>
<li><p><strong>Keep it short.</strong> Two minutes to read. If a rule never fires, delete it; a short, accurate skill beats a long, stale one.</p>
</li>
</ol>
<h2>Using it</h2>
<p>Drop the folder into your agent's skills directory, and the agent picks it up by matching the description — no further configuration. If you want working examples first, the five skills in the pack this teardown came from are free and MIT-licensed: commit messages, code review, meeting minutes, technical proofreading, and structured deep research.</p>
<p>Repo: <a href="https://github.com/alapha888/agent-skills-en">https://github.com/alapha888/agent-skills-en</a></p>
<pre><code class="language-bash">npx skills add alapha888/agent-skills-en
</code></pre>
<p>The structure is the stable part; the rules are yours. Take the workflow you explained three times this week, and write it down once.</p>
]]></content:encoded></item><item><title><![CDATA[Research Reports Your Agent Writes Need Sources Before Sentences]]></title><description><![CDATA[Ask a coding agent for a research report and you usually get fluent prose first and evidence later — if at all. A single forum post becomes "research shows." A number from 2023 is presented as the cur]]></description><link>https://alapha888.hashnode.dev/research-reports-your-agent-writes-need-sources-before-sentences</link><guid isPermaLink="true">https://alapha888.hashnode.dev/research-reports-your-agent-writes-need-sources-before-sentences</guid><category><![CDATA[research]]></category><category><![CDATA[AI]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[writing]]></category><dc:creator><![CDATA[alapha888]]></dc:creator><pubDate>Mon, 05 Oct 2026 03:44:01 GMT</pubDate><content:encoded><![CDATA[<p>Ask a coding agent for a research report and you usually get fluent prose first and evidence later — if at all. A single forum post becomes "research shows." A number from 2023 is presented as the current state. Twenty sources are listed at the end, and you still cannot tell what the author actually believes.</p>
<p>The failure is structural, not stylistic: the writing started before the question was defined and before the sources were tiered. So I wrote the workflow down as a skill, and the skill's first claim is blunt: the quality floor of research is set by its sources, not its prose.</p>
<h2>Step one: define the question before searching anything</h2>
<p>The workflow starts with one sentence stating what the report must answer, plus at most three sub-questions. Starting before the question is clear guarantees the research will sprawl — the agent collects whatever it finds first and the report's shape is decided by search order instead of by the question.</p>
<h2>Step two: tier the sources before you believe them</h2>
<p>Sources are tiered before searching, so you don't believe whatever you find first:</p>
<ul>
<li><p><strong>Primary</strong>: official docs, original papers, original filings, protocol/legal texts, measured data.</p>
</li>
<li><p><strong>Secondary</strong>: reputable press, industry reports, expert interviews.</p>
</li>
<li><p><strong>Tertiary</strong>: social-media posts, forum threads, aggregator sites — leads only, never evidence.</p>
</li>
</ul>
<p>That last line is a hard rule in the skill: no tertiary source supports a core conclusion. A forum thread can point a direction, never serve as evidence.</p>
<h2>Step three: cross-verify, and count independence honestly</h2>
<p>Key conclusions need two or more independent sources. Two sources quoting the same origin don't count as independent — that is the trap that makes a single press release look like a consensus. If no second source exists, the conclusion is downgraded to a "single-source claim" and marked as such, instead of being quietly upgraded by confident wording.</p>
<p>Related rules:</p>
<ul>
<li><p>Every number in the report has a source. A number without a source is deleted, not rewritten.</p>
</li>
<li><p>Date every key fact ("as of Sep 2026"). Undated information is treated as "possibly stale" by default.</p>
</li>
</ul>
<h2>Writing structure: conclusion first, uncertainty last</h2>
<p>Only after those three steps does writing start, and the structure is fixed:</p>
<ul>
<li><p><strong>Opening</strong>: 3–5 lines stating the core conclusions.</p>
</li>
<li><p><strong>Body</strong>: one section per sub-question, each in "conclusion → evidence → sources" order.</p>
</li>
<li><p><strong>Closing</strong>: an uncertainty statement — what wasn't found, what's speculation, under what conditions the conclusions change.</p>
</li>
</ul>
<p>The skill also insists on ordering inside the author's head: state "what you don't know" before "what you know" — honest uncertainty beats pretty certainty. And mark speculation as speculation: use "may", "likely", "unverified" — never dress speculation up with "clearly" or "it is well known".</p>
<p>The report outline template from the skill:</p>
<pre><code class="language-markdown"># Research Report: &lt;Topic&gt; (example outline)

**Core conclusions** (3–5 lines): …

## 1. Sub-question one
- Conclusion: …
- Evidence: … (source: primary/secondary, as of …)
- Evidence: … (second independent source)

## 2. Sub-question two
…

## Uncertainty statement
- Not found: …
- Single-source claims: … (one source only, pending verification)
- Invalidation conditions: if … changes, conclusion X in this report needs reassessment.
</code></pre>
<h2>The anti-patterns are the point</h2>
<p>The skill lists its own failure modes explicitly:</p>
<ul>
<li><p>Single-source verdicts: one social-media post becomes "research shows".</p>
</li>
<li><p>Speculation as fact: "clearly" and "it is well known" are the most dangerous words in a research report.</p>
</li>
<li><p>Undated facts: 2023 data presented as the current state; the conclusion quietly expires.</p>
</li>
<li><p>Evidence pile with no conclusion: 20 sources listed, and the reader still can't tell what the author believes.</p>
</li>
<li><p>Hiding the unknowns: burying what wasn't found makes the report look omniscient and plants landmines.</p>
</li>
</ul>
<p>That last one is why the uncertainty statement is a required closing section rather than a footnote. A report whose unknowns are explicit can be trusted where it does claim something; a report that hides them cannot be trusted anywhere.</p>
<h2>The skill</h2>
<p>This is one of five free, MIT-licensed skills in a small pack I maintain — the others cover commit messages, code review, meeting minutes, and technical proofreading. Each one is a single <code>SKILL.md</code> file: copy the folder into your agent's skills directory and it applies the workflow without being re-explained every session.</p>
<p>Repo: <a href="https://github.com/alapha888/agent-skills-en">https://github.com/alapha888/agent-skills-en</a> — the research skill is under <code>skills/deep-research-framework/</code>, including the full workflow and anti-pattern list.</p>
<p>If your work has house rules of its own — sources you always trust or never cite — fork the file and add them to the tiering step. The structure is the stable part; the source list is yours.</p>
]]></content:encoded></item><item><title><![CDATA[5 Production-Ready Skills for Your Coding Agent]]></title><description><![CDATA[Two of these skills — git-commit-message and code-review-checklist — were originally covered in depth on dev.to: Teach Your Coding Agent to Write Commit Messages Your Team Will Actually Read and Teach]]></description><link>https://alapha888.hashnode.dev/5-production-ready-skills-for-your-coding-agent</link><guid isPermaLink="true">https://alapha888.hashnode.dev/5-production-ready-skills-for-your-coding-agent</guid><category><![CDATA[claude-code]]></category><category><![CDATA[ai agents]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[alapha888]]></dc:creator><pubDate>Sun, 04 Oct 2026 11:17:54 GMT</pubDate><content:encoded><![CDATA[<p><em>Two of these skills — git-commit-message and code-review-checklist — were originally covered in depth on dev.to: <a href="https://dev.to/alapha888/teach-your-coding-agent-to-write-commit-messages-your-team-will-actually-read-2fjp">Teach Your Coding Agent to Write Commit Messages Your Team Will Actually Read</a> and <a href="https://dev.to/alapha888/teach-your-coding-agent-to-review-code-without-the-style-nitpicks-5mg">Teach Your Coding Agent to Review Code Without the Style Nitpicks</a>. This post is the combined release guide for the full five-skill pack.</em></p>
<hr />
<p>Every developer who has worked with a coding agent for more than a day has run into this: you start a new session, the agent asks you to write a commit message, and you spend two minutes re-explaining your team's commit format — conventional commits, imperative subject, body explains why not how. Or you ask for a code review and get back a list of semicolon complaints. Or you paste meeting notes and the agent invents a name for the action item owner because you forgot to assign one.</p>
<p>These are recurring conventions, not one-off instructions. The right fix is to write each convention down once, in a file the whole team can version-control and share. That is what a skill does: a folder with a <code>SKILL.md</code> that your agent (Claude Code, Codex, Cursor, Gemini CLI, or any tool that reads from a skills directory) loads when the task matches. The file carries the workflow, the rules, the examples, and the anti-patterns. Once committed to the repo, every teammate's agent follows the same rules without any of them having to explain it again.</p>
<p>The pack below is free and MIT-licensed. Five skills, one repo: <a href="https://github.com/alapha888/agent-skills-en">github.com/alapha888/agent-skills-en</a>.</p>
<hr />
<h2>1. <code>git-commit-message</code></h2>
<p><strong>The pain:</strong> Agents default to vague commit messages — <code>fix bug</code>, <code>update file</code>, <code>refactor</code>. Getting a useful message requires spelling out your format every time, and even then the agent often conflates the subject line with an explanation.</p>
<p><strong>What the skill does:</strong> The agent follows a strict two-part structure. The subject is <code>type: imperative phrase</code>, capped at 50 characters. The body explains <em>why</em> the change was made, not how. Bug fixes must include the trigger condition. If the staging area is empty, the agent stops and asks rather than inventing a message from context.</p>
<blockquote>
<p>"The subject is for skimmers; the body is for future-you in three months. Keep the two jobs separate."</p>
</blockquote>
<p>A real example the skill ships with:</p>
<pre><code>git commit -m "fix: keep order-list filters across pagination" -m "Trigger: filter first, then turn the page. Cause: page turns dropped the query params."
</code></pre>
<p><strong>Install:</strong> Clone the repo and copy <code>skills/git-commit-message</code> into <code>~/.claude/skills/</code> (global) or <code>.claude/skills/</code> inside your project.</p>
<hr />
<h2>2. <code>code-review-checklist</code></h2>
<p><strong>The pain:</strong> Ask an agent to review a PR and you get a mix of real issues and style opinions — trailing spaces, quote style, indentation. The noise buries the signal, and team members learn to ignore agent reviews.</p>
<p><strong>What the skill does:</strong> Reviews follow five axes in strict priority order: correctness, security, readability, performance, test coverage. Every comment is formatted as <code>[axis] file:line problem → suggested fix</code>. The review is capped at 10 comments. Diffs over roughly 400 lines are flagged for splitting before the review proceeds. Correctness and security issues are marked <code>Must fix</code>; the rest are <code>Should fix</code>.</p>
<blockquote>
<p>"No style policing: indentation, quotes, semicolons — that's the linter's job, not a human's."</p>
</blockquote>
<p>A real example comment the skill ships with:</p>
<pre><code>[Must fix][Correctness] order.py:87 empty order list triggers IndexError → guard for empty before taking [0]
</code></pre>
<p><strong>Install:</strong> Copy <code>skills/code-review-checklist</code> into <code>~/.claude/skills/</code> or <code>.claude/skills/</code> in your project.</p>
<hr />
<h2>3. <code>meeting-notes</code></h2>
<p><strong>The pain:</strong> Raw meeting notes are long and unstructured. Paste them into an agent and you typically get a bullet-point summary that buries the actual decisions, invents deadlines that were never mentioned, and assigns owners to action items that had none.</p>
<p><strong>What the skill does:</strong> The output opens with the conclusion, then organizes everything into three buckets. Decisions are phrased as "Decided to do X" — never "Discussed X." Action items each carry an owner and a deadline; missing owners are marked <code>[unassigned]</code>, missing deadlines <code>[TBD]</code>. Open questions state what is blocking and who owns the next step. The final minutes are no longer than one third the length of the raw notes.</p>
<blockquote>
<p>"Do not fabricate. Names, dates, and numbers not in the notes must not appear; mark missing ones <code>[to confirm]</code>."</p>
</blockquote>
<p><strong>Install:</strong> Copy <code>skills/meeting-notes</code> into <code>~/.claude/skills/</code> or <code>.claude/skills/</code> in your project.</p>
<hr />
<h2>4. <code>deep-research-framework</code></h2>
<p><strong>The pain:</strong> Agents are willing to write confident-sounding research reports full of numbers with no traceable source. You ask for a competitive analysis and get statistics that either come from a single blog post or cannot be verified at all.</p>
<p><strong>What the skill does:</strong> Before searching, the agent writes the research question in one sentence. Sources are tiered before searching begins: primary sources are official docs, original papers, filings, and measured data; secondary sources are reputable press, industry reports, and expert interviews; tertiary sources — social posts, forum threads, aggregator sites — are leads only, never evidence. Key conclusions require two or more independent sources (two sources quoting the same origin do not count as independent). Reports open with conclusions and close with an explicit uncertainty statement. Every key fact is dated.</p>
<blockquote>
<p>"Every number in the report has a source. A number without a source is deleted, not rewritten."</p>
</blockquote>
<p><strong>Install:</strong> Copy <code>skills/deep-research-framework</code> into <code>~/.claude/skills/</code> or <code>.claude/skills/</code> in your project.</p>
<hr />
<h2>5. <code>tech-writing-proofread</code></h2>
<p><strong>The pain:</strong> Ask an agent to proofread a README or doc and it rewrites the whole thing — changing the structure, rephrasing accurate but imperfect sentences, and occasionally "correcting" technical claims it does not fully understand.</p>
<p><strong>What the skill does:</strong> The agent proofreads only, in one pass, across six specific categories: typos and spelling, grammar, punctuation, inline code and proper noun formatting, sentence style, and structure. The output is an itemized list in the format <code>Original → Suggestion → Reason</code>, followed by a short count of issues by category. Suspected factual errors are flagged <code>[verify]</code> and left as-is. The agent does not touch anything outside those six categories.</p>
<blockquote>
<p>"Fix language, not facts."</p>
</blockquote>
<p><strong>Install:</strong> Copy <code>skills/tech-writing-proofread</code> into <code>~/.claude/skills/</code> or <code>.claude/skills/</code> in your project.</p>
<hr />
<h2>Install the Whole Pack</h2>
<p>To add all five skills at once:</p>
<pre><code class="language-bash">npx skills add alapha888/agent-skills-en
</code></pre>
<p>The pack is free and MIT-licensed — use it, fork it, or adapt it for your team's conventions.</p>
<p>A Pro pack with three additional skills is available for $39: <a href="https://alapha888.github.io/agent-skills-pro/">https://alapha888.github.io/agent-skills-pro/</a></p>
]]></content:encoded></item></channel></rss>