<?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: alapha888</title>
    <description>The latest articles on DEV Community by alapha888 (@alapha888).</description>
    <link>https://dev.to/alapha888</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%2F4153828%2F6afb4be1-2a52-4c73-a96a-cf85e344659f.png</url>
      <title>DEV Community: alapha888</title>
      <link>https://dev.to/alapha888</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alapha888"/>
    <language>en</language>
    <item>
      <title>Teach Your Coding Agent to Review Code Without the Style Nitpicks</title>
      <dc:creator>alapha888</dc:creator>
      <pubDate>Thu, 01 Oct 2026 18:57:31 +0000</pubDate>
      <link>https://dev.to/alapha888/teach-your-coding-agent-to-review-code-without-the-style-nitpicks-5mg</link>
      <guid>https://dev.to/alapha888/teach-your-coding-agent-to-review-code-without-the-style-nitpicks-5mg</guid>
      <description>&lt;p&gt;I asked my coding agent to review a 120-line pull request last month. It came back with 23 comments. Eighteen were about quote style, line length, and import order. It missed the SQL query built by string concatenation. It missed the database call inside the loop.&lt;/p&gt;

&lt;p&gt;The review was technically thorough and completely useless. The dangerous stuff sailed through while the agent graded my taste in quotation marks.&lt;/p&gt;

&lt;p&gt;That was the day I wrote down how I actually want code reviewed — and turned it into a skill the agent follows every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The review that got it wrong
&lt;/h2&gt;

&lt;p&gt;Here's the kind of diff I'm talking about — a small Python helper, the sort of thing that shows up in every PR:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_orders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT * FROM users WHERE id = &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;processed_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;86400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A free-form agent review of this tends to produce: "consider using double quotes consistently," "this function could use a docstring," "line 4 exceeds 88 characters." Meanwhile &lt;code&gt;results[0]["total"]&lt;/code&gt; throws an &lt;code&gt;IndexError&lt;/code&gt; on an empty order list, the user id is concatenated into raw SQL, and &lt;code&gt;db.query&lt;/code&gt; runs once per order inside the loop. The three things that would page someone at 2am get outvoted by formatting opinions.&lt;/p&gt;

&lt;p&gt;The problem isn't that the agent can't review code. It's that "review this code" is a vibe, not a procedure. Every session invents its own definition of what matters. So I wrote the definition down.&lt;/p&gt;

&lt;p&gt;That's what an agent skill is: a &lt;code&gt;SKILL.md&lt;/code&gt; file — frontmatter plus a step-by-step workflow — that lives in your agent's skills directory. When you ask the agent to do a matching task, it reads the skill and follows it. No re-prompting, no drift. (If you want the full version of this idea, my first post walks through the same pattern for commit messages.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Five axes, in order
&lt;/h2&gt;

&lt;p&gt;The skill — &lt;code&gt;code-review-checklist&lt;/code&gt; — reduces a review to one question: "Will this code become someone else's problem within three months?" Then it walks five axes in priority order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Correctness&lt;/strong&gt; — edge cases (null, empty, zero, negative, oversized), concurrency and timing assumptions, swallowed exceptions. The only axis that can block a merge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt; — user input concatenated into SQL, shell, or HTML; hard-coded secrets; sensitive data in logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readability&lt;/strong&gt; — names that say what things are, one job per function, no magic numbers. Flag only what you genuinely can't understand — not "I'd write it differently."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; — repeated queries or recomputation inside loops, N+1 problems, avoidable copies of large objects. No data-free speculation: "this might get slow" is not a comment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test coverage&lt;/strong&gt; — new logic has tests, edge cases have cases. All-green tests with the critical path uncovered still get sent back.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Three guardrails keep the review honest. &lt;strong&gt;Scope first&lt;/strong&gt;: over ~400 changed lines, the agent asks for a split — review quality on huge diffs always collapses, and pretending otherwise produces theater. &lt;strong&gt;At most 10 comments&lt;/strong&gt;: more than that means the code needs a rewrite, not fifty line-items of grading. &lt;strong&gt;No style policing&lt;/strong&gt;: indentation, quotes, semicolons — that's the linter's job, and the skill says so explicitly.&lt;/p&gt;

&lt;p&gt;Every comment has a fixed format — &lt;code&gt;[axis] file:line problem → suggested fix&lt;/code&gt; — and every comment must cite a concrete line. A comment without a code reference is invalid by definition. Then triage: &lt;code&gt;Must fix&lt;/code&gt; (correctness, security) blocks the merge; &lt;code&gt;Should fix&lt;/code&gt; (readability, performance, tests) doesn't, but the agent says so out loud instead of leaving you to guess which is which.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same diff, after
&lt;/h2&gt;

&lt;p&gt;Run the skill over that &lt;code&gt;process_orders&lt;/code&gt; function and you get something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Must fix][Correctness] orders.py:9  empty orders list triggers IndexError → guard for empty before taking [0]
[Must fix][Security] orders.py:4  user id concatenated into SQL string → use parameterized query
[Should fix][Performance] orders.py:4  db.query inside the loop (N+1) → batch-fetch users before the loop
[Should fix][Readability] orders.py:7  magic number 86400 → name it SECONDS_PER_DAY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four comments, all actionable, all pointing at lines. No quote-style opinions. The merge-blocking ones are labeled as such. This is what I wanted from a review all along: not a second pair of eyes grading my style, but a checklist that catches the 2am-paging stuff before it merges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install and use
&lt;/h2&gt;

&lt;p&gt;Same pattern as the other skills — a folder you copy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/alapha888/agent-skills-en.git
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; agent-skills-en/skills/code-review-checklist ~/.claude/skills/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No dependencies, no network calls, no sign-up. Then: "Review this diff." The agent reads the skill and follows the axes. If you want the whole team on it, commit the folder to &lt;code&gt;.claude/skills/&lt;/code&gt; in the repo — now every review in the project runs the same checklist. The format is an open standard, so this isn't Claude-only; the same folder works in Codex, Cursor, Gemini CLI, and other hosts that support skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  The copyable core
&lt;/h2&gt;

&lt;p&gt;If you'd rather write your own, the heart of the skill is this checklist — the minimal executable version you can paste into your own &lt;code&gt;SKILL.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Code review checklist&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [ ] Correctness: edge cases (null/0/negative/oversized) handled, exceptions not swallowed
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Correctness: concurrency/timing assumptions hold, no races
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Security: no SQL/shell/HTML injection points, no hard-coded secrets, no sensitive data in logs
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Readability: names are descriptive, functions have a single responsibility, no magic numbers
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Performance: no repeated queries/computation in loops, no N+1, no evidence-free performance worries
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Tests: new logic is covered, edge cases have cases
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Scope: diff ≤ ~400 lines, otherwise split first
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plus the two rules that do most of the work: every comment cites a line, and style stays with the linter. Everything else is commentary.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it can't fix
&lt;/h2&gt;

&lt;p&gt;The skill won't save you from a 2,000-line diff — it will just ask you to split it, every time, until you do. It won't catch architectural mistakes, because a checklist reviews code, not design: if the whole approach is wrong, no axis flags it. And it inherits your tests' blind spots — if the critical path has no test and the reviewer (you) doesn't notice, the checklist can't notice for you. It's a mirror for your standards, not a replacement for judgment.&lt;/p&gt;

&lt;p&gt;But for the everyday case — a normal-sized PR, written in a hurry, reviewed at the end of the day — it turns "review this" from a vibe into a procedure. The dangerous stuff gets caught, the nitpicks go to the linter, and the author gets four comments instead of twenty-three.&lt;/p&gt;




&lt;p&gt;The code review skill is one of five I published — the set also covers commit messages, proofreading docs, meeting notes, and deep-research reports. All free, MIT licensed, same install pattern: &lt;a href="https://github.com/alapha888/agent-skills-en" rel="noopener noreferrer"&gt;github.com/alapha888/agent-skills-en&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it on a real PR, I'd like to know which axis fires most often for your codebase. Mine is readability, which tells me something about how I write code at 11pm.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>codereview</category>
      <category>productivity</category>
      <category>ai</category>
    </item>
    <item>
      <title>Teach Your Coding Agent to Write Commit Messages Your Team Will Actually Read</title>
      <dc:creator>alapha888</dc:creator>
      <pubDate>Thu, 01 Oct 2026 06:45:19 +0000</pubDate>
      <link>https://dev.to/alapha888/teach-your-coding-agent-to-write-commit-messages-your-team-will-actually-read-2fjp</link>
      <guid>https://dev.to/alapha888/teach-your-coding-agent-to-write-commit-messages-your-team-will-actually-read-2fjp</guid>
      <description>&lt;h1&gt;
  
  
  Teach Your Coding Agent to Write Commit Messages Your Team Will Actually Read
&lt;/h1&gt;

&lt;p&gt;Every team's git history has them. &lt;code&gt;fix stuff&lt;/code&gt;. &lt;code&gt;wip&lt;/code&gt;. &lt;code&gt;update code&lt;/code&gt;. &lt;code&gt;asdf&lt;/code&gt;. Messages that made sense at 11pm on a Friday and mean nothing by Monday.&lt;/p&gt;

&lt;p&gt;I use Claude Code every day, and for months my fix was the same as everyone's: I'd sigh, type out my commit conventions &lt;em&gt;again&lt;/em&gt; in the prompt — conventional commits, imperative mood, short subject, explain the why in the body — and hope the agent remembered. It mostly worked. Until it didn't, because every session started from zero and every phrasing of my instructions produced a slightly different result.&lt;/p&gt;

&lt;p&gt;The actual problem isn't that agents can't write good commit messages. It's that my expectations lived in my head, re-typed slightly differently each time. What I needed was to write the workflow down once, in a form the agent would follow the same way every time.&lt;/p&gt;

&lt;p&gt;That's what an agent skill is: a &lt;code&gt;SKILL.md&lt;/code&gt; file — frontmatter plus a step-by-step workflow — that lives in your agent's skills directory. When you ask the agent to do a matching task, it reads the skill and follows it. No re-prompting, no drift.&lt;/p&gt;

&lt;p&gt;I ended up writing five of these for the repetitive knowledge-work tasks I kept re-explaining (proofreading docs, commit messages, meeting notes, code review, research reports). This post is about one of them — the commit message skill — because it's the smallest one to install and the easiest to feel the difference from. Ten minutes, and your whole team gets consistent messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a skill, not a saved prompt?
&lt;/h2&gt;

&lt;p&gt;You might wonder why this needs to be a "skill" at all instead of a text snippet you paste, or a paragraph in your project's &lt;code&gt;CLAUDE.md&lt;/code&gt;. I tried all three, and they fail differently.&lt;/p&gt;

&lt;p&gt;A pasted prompt works but resets every session. You're still the human linter, noticing when the agent drifted from your convention and correcting it. &lt;code&gt;CLAUDE.md&lt;/code&gt; instructions are better — they're loaded automatically — but they compete with everything else in that file for the agent's attention, and they tend to grow into a junk drawer of project lore. A slash command is closer, but commands are usually about &lt;em&gt;doing&lt;/em&gt; something specific ("run the deploy script"), not about &lt;em&gt;how to think through&lt;/em&gt; a recurring judgment call.&lt;/p&gt;

&lt;p&gt;A skill sits in the middle: it loads only when the task matches, it carries the full workflow (rules, examples, anti-patterns) instead of a one-line instruction, and it lives in a directory your whole team shares. The mental model that finally clicked for me: a saved prompt is a reminder to yourself; a skill is a checklist for the agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Install the skill
&lt;/h2&gt;

&lt;p&gt;The skill is a single folder. Clone the repo and copy that folder into your agent's skills directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/alapha888/agent-skills-en.git
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.claude/skills
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; agent-skills-en/skills/git-commit-message ~/.claude/skills/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire install. No dependencies, no network calls, no sign-up. The skill is a markdown file; the agent reads it like a human would read a checklist.&lt;/p&gt;

&lt;p&gt;If you want the whole team on the same conventions, put it at the project level instead: copy the folder to &lt;code&gt;.claude/skills/&lt;/code&gt; in your repo and commit it. Now everyone who opens the project — and every agent session in it — follows the same workflow.&lt;/p&gt;

&lt;p&gt;One line in your &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; and the convention is documented, versioned, and enforced by default rather than by nagging:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Commit messages&lt;/span&gt;

Commit messages are written with the &lt;span class="sb"&gt;`git-commit-message`&lt;/span&gt; skill
(&lt;span class="sb"&gt;`.claude/skills/git-commit-message/`&lt;/span&gt;): &lt;span class="sb"&gt;`type: imperative subject`&lt;/span&gt; ≤ 50 chars,
body explains the &lt;span class="ge"&gt;*why*&lt;/span&gt;. Don't hand-write them from memory — let the agent do it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The format is an open standard, so this isn't Claude-only. The same folder works in Codex, Cursor, Gemini CLI, and other hosts that support skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Understand what the skill actually does
&lt;/h2&gt;

&lt;p&gt;Before trusting it, read the workflow. It's short, and knowing what's inside is the difference between using a skill and cargo-culting one. Here's what the skill instructs the agent to do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Look at the real changes first.&lt;/strong&gt; Run &lt;code&gt;git status --short&lt;/code&gt; and &lt;code&gt;git diff --cached --stat&lt;/code&gt;. If the staging area is empty, stop and ask the user — never invent a commit message out of nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick exactly one type prefix&lt;/strong&gt; from &lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, based on the diff. If one commit mixes types, the agent asks you to split it instead of papering over the mess.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the subject&lt;/strong&gt; as &lt;code&gt;type: imperative phrase&lt;/code&gt;, 50 characters max, starting with a verb: "Add…", "Fix…", "Remove…", "Unify…". Empty subjects like "update code" or "fix bug" are banned by name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the body&lt;/strong&gt; (1–3 lines) explaining &lt;em&gt;why&lt;/em&gt;, not &lt;em&gt;how&lt;/em&gt;. Bug fixes must state the trigger conditions. The diff already shows what changed line by line; the body is for the person reading this in three months.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output a ready-to-run command&lt;/strong&gt;, not bare text you have to assemble yourself.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two design decisions in there are worth noticing. First, the subject is for skimmers and the body is for future-you — the skill keeps those two jobs separate instead of blending them. Second, there's no meta-commentary allowed: no "generated by AI" footers, no praise. The message is about the change, nothing else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Use it on a real commit
&lt;/h2&gt;

&lt;p&gt;Let's walk through a concrete example. Say you've staged a change that adds rate limiting to your login endpoint. With the skill installed, you just say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write a commit message for my staged changes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent reads the staged diff, sees it's a new behavior (not a bug fix, not a refactor), and produces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: add rate limiting to login endpoint"&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Blocks brute-force attempts; limit is 5 tries per minute per IP, returns 429."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type prefix, imperative subject under 50 characters, body that explains the &lt;em&gt;why&lt;/em&gt; (brute-force protection) and the key behavior (5/min/IP, 429) — the two things you'd want to know without opening the diff.&lt;/p&gt;

&lt;p&gt;Here's a bug-fix example, where the skill's "state the trigger conditions" rule earns its keep:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"fix: keep order-list filters across pagination"&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Trigger: filter first, then turn the page. Cause: page turns dropped the query params."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"Trigger: filter first, then turn the page" is the kind of sentence that saves someone twenty minutes of reproduction six months from now. Nobody writes that sentence unless a checklist tells them to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: What it refuses to do (and why that matters)
&lt;/h2&gt;

&lt;p&gt;A skill is as defined by its refusals as its instructions. This one has four I like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Empty staging area?&lt;/strong&gt; It stops and asks. It will not write a commit message from vibes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixed commit?&lt;/strong&gt; A feature plus a refactor becomes two commits. The skill won't let one &lt;code&gt;feat:&lt;/code&gt; subject cover both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catch-all &lt;code&gt;chore&lt;/code&gt;?&lt;/strong&gt; Labeling everything &lt;code&gt;chore&lt;/code&gt; until the type system means nothing is called out as an anti-pattern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Novel-length subject?&lt;/strong&gt; &lt;code&gt;feat: add a really useful feature that greatly improves the user experience&lt;/code&gt; gets flagged — the subject says &lt;em&gt;what&lt;/em&gt;, praise is the user's job.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These sound obvious written down. That's the point: obvious, written down, followed every time, beats clever, in-your-head, followed sometimes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the skill can't fix
&lt;/h2&gt;

&lt;p&gt;Honest caveat: no skill fixes bad commit &lt;em&gt;hygiene&lt;/em&gt;. If your habit is to &lt;code&gt;git add -A&lt;/code&gt; the entire afternoon's work and ask for one message, the skill will correctly refuse to split it for you — it can ask you to stage things separately, but it can't decide what belonged together. The skill assumes you stage deliberately (per feature, per fix) and does the wording. Garbage in, slightly better-worded garbage out.&lt;/p&gt;

&lt;p&gt;Similarly, the body explains &lt;em&gt;why&lt;/em&gt; only if you can articulate why. When the agent asks "why did you make this change?", "because the ticket said so" is a sign the commit probably shouldn't exist in that form. The skill is a mirror for your process, not a replacement for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this goes from here
&lt;/h2&gt;

&lt;p&gt;The commit message skill is the smallest of the five I published — the full set also covers proofreading technical docs (itemized checklist, never rewrites your voice), turning meeting notes into minutes (every action item gets an owner and a deadline), five-axis code review (capped at 10 actionable comments, no style nitpicks), and structuring deep-research reports (explicit uncertainty statements). All free, MIT licensed, same install pattern: copy a folder, use it.&lt;/p&gt;

&lt;p&gt;They started as a Chinese-language pack I use daily; I rewrote every example for English workplace context rather than translating. If your team has the same five repetitive workflows I did, they're yours to take: &lt;a href="https://github.com/alapha888/agent-skills-en" rel="noopener noreferrer"&gt;github.com/alapha888/agent-skills-en&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One last thing: the pattern generalizes. Any task you find yourself re-explaining to an agent weekly — a report format, a review checklist, a translation convention — is a skill waiting to be written down. A &lt;code&gt;SKILL.md&lt;/code&gt; is just frontmatter (name, description) plus a workflow with one runnable example and a short anti-pattern list. Write the first one for the task that annoys you most; the rest get easier.&lt;/p&gt;

&lt;p&gt;And if you try the commit message skill, I'd genuinely like to know where its workflow is wrong for your team. The fastest way to improve a checklist is to watch someone trip over it.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>git</category>
      <category>productivity</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
