<?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: Karthikeyan Thiagarajan</title>
    <description>The latest articles on DEV Community by Karthikeyan Thiagarajan (@carthworks).</description>
    <link>https://dev.to/carthworks</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%2F291781%2F4e395589-2ae8-4942-bda7-f224c95e01e4.png</url>
      <title>DEV Community: Karthikeyan Thiagarajan</title>
      <link>https://dev.to/carthworks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/carthworks"/>
    <language>en</language>
    <item>
      <title>I Built a Collection of AI Agent Skills — Here's How They Work</title>
      <dc:creator>Karthikeyan Thiagarajan</dc:creator>
      <pubDate>Wed, 09 Sep 2026 06:23:26 +0000</pubDate>
      <link>https://dev.to/carthworks/i-built-a-collection-of-ai-agent-skills-heres-how-they-work-h17</link>
      <guid>https://dev.to/carthworks/i-built-a-collection-of-ai-agent-skills-heres-how-they-work-h17</guid>
      <description>&lt;p&gt;I created a free, open-source GitHub repo of drop-in &lt;code&gt;SKILL.md&lt;/code&gt; files that give your AI coding agent specialised, focused capabilities. Works with Antigravity IDE, and any agent that reads markdown instructions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 &lt;a href="https://github.com/carthworks/ai-agent-skills" rel="noopener noreferrer"&gt;github.com/carthworks/ai-agent-skills&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Problem With AI Coding Agents
&lt;/h2&gt;

&lt;p&gt;AI coding agents are powerful — but they're generalists. Ask one to review your code and you'll get a decent answer. Ask it to enforce Conventional Commits, or audit your app for production readiness, or tell you whether your Dockerfile is secure — and the quality becomes inconsistent. The agent has to "guess" what standard to apply.&lt;/p&gt;

&lt;p&gt;What if you could just &lt;em&gt;tell it exactly what to do&lt;/em&gt; for specific situations — once — and have it apply that consistently every time?&lt;/p&gt;

&lt;p&gt;That's what &lt;strong&gt;agent skills&lt;/strong&gt; solve.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is a Skill?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;skill&lt;/strong&gt; is a single markdown file called &lt;code&gt;SKILL.md&lt;/code&gt;. It lives in a folder inside &lt;code&gt;.agents/skills/&lt;/code&gt; at your project root.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;your-project/
└── .agents/
    └── skills/
        └── git-commit-quality/
            └── SKILL.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The file has two parts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. YAML frontmatter&lt;/strong&gt; — tells the agent &lt;em&gt;when&lt;/em&gt; to activate the skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;git-commit-quality&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;Enforces Conventional Commits. Use when the agent is about to run&lt;/span&gt;
  &lt;span class="s"&gt;`git commit` or help write a commit message. Blocks vague messages&lt;/span&gt;
  &lt;span class="s"&gt;like "fix", "update", "wip".&lt;/span&gt;
&lt;span class="na"&gt;license&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Apache-2.0&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
  &lt;span class="na"&gt;publisher&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;carthworks&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Markdown instructions&lt;/strong&gt; — tells the agent &lt;em&gt;what to do&lt;/em&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="gh"&gt;# Git Commit Quality&lt;/span&gt;

&lt;span class="gu"&gt;## Rules&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; Subject line: 50 chars max, imperative mood
&lt;span class="p"&gt;2.&lt;/span&gt; No vague messages: "fix", "wip", "update" are BLOCKED
&lt;span class="p"&gt;3.&lt;/span&gt; Format: &lt;span class="nt"&gt;&amp;lt;type&amp;gt;&lt;/span&gt;(&lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;): &lt;span class="nt"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;

&lt;span class="gu"&gt;## Examples&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; feat(auth): add JWT refresh token rotation
&lt;span class="p"&gt;-&lt;/span&gt; fix(api): handle 429 rate limit with exponential backoff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No code. No configuration files. No plugins to install. Just markdown.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works in Practice
&lt;/h2&gt;

&lt;p&gt;When you're working with your AI agent and it's about to write a commit message, it automatically reads the &lt;code&gt;git-commit-quality&lt;/code&gt; skill and applies those rules. You never have to prompt it. You never have to remind it.&lt;/p&gt;

&lt;p&gt;Here's what happens &lt;strong&gt;without&lt;/strong&gt; a skill:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Agent generates:&lt;/em&gt; &lt;code&gt;git commit -m "fix stuff"&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's what happens &lt;strong&gt;with&lt;/strong&gt; the &lt;code&gt;git-commit-quality&lt;/code&gt; skill:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Agent generates:&lt;/em&gt; &lt;code&gt;git commit -m "fix(auth): resolve token expiry not clearing session cookie"&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The difference is that you taught it once, and it applies that knowledge every time — even across teammates who use the same &lt;code&gt;.agents/skills/&lt;/code&gt; folder (because you commit it to your repo).&lt;/p&gt;




&lt;h2&gt;
  
  
  The 9 Skills I've Built So Far
&lt;/h2&gt;

&lt;p&gt;I've published 9 skills covering the most common developer pain points:&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 Web
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;production-web-app-launch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full pre-launch audit — SEO, accessibility, security, forms, mobile, deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nextjs-performance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Core Web Vitals, rendering strategy (SSG/ISR/SSR), &lt;code&gt;next/image&lt;/code&gt;, bundle splitting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;api-design-rest&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;URL naming, HTTP status codes, error shapes, versioning, pagination&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🔷 TypeScript
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;typescript-strict-mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enforces &lt;code&gt;strict: true&lt;/code&gt;, bans &lt;code&gt;any&lt;/code&gt;, teaches discriminated unions and utility types&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🧪 Testing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;test-coverage-guidance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Decides what to unit/integration/E2E test, AAA pattern, CI setup&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚙️ DevOps
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git-commit-quality&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Conventional Commits, blocks vague messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;code-review-checklist&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BLOCKER / MAJOR / MINOR PR review across correctness, security, performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dockerfile-best-practices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Multi-stage builds, non-root user, layer caching, &lt;code&gt;.dockerignore&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🔒 Safety
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;env-secret-safety&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Detects hardcoded secrets, enforces &lt;code&gt;.env&lt;/code&gt; hygiene, secret rotation guide&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Installing a Skill Takes 10 Seconds
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Manual copy:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the repo once&lt;/span&gt;
git clone https://github.com/carthworks/ai-agent-skills.git

&lt;span class="c"&gt;# Drop any skill into your project&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; ai-agent-skills/skills/devops/git-commit-quality .agents/skills/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;One-liner (bash):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/carthworks/ai-agent-skills/main/scripts/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;One-liner (PowerShell):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://raw.githubusercontent.com/carthworks/ai-agent-skills/main/scripts/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both scripts show an interactive menu — pick the skills you want, they land in &lt;code&gt;.agents/skills/&lt;/code&gt; automatically. Commit that folder and every developer on your team gets the same AI behaviour, consistently.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters for Teams
&lt;/h2&gt;

&lt;p&gt;The real power isn't for solo developers — it's for &lt;strong&gt;teams&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you commit &lt;code&gt;.agents/skills/&lt;/code&gt; to your repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt; — every developer's AI agent applies the same standards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding&lt;/strong&gt; — new developers inherit your team's conventions instantly, through the agent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codified knowledge&lt;/strong&gt; — your best practices are written down in a place the AI actually reads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No prompt fatigue&lt;/strong&gt; — nobody has to remember to ask the agent to follow the style guide&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of skills as &lt;strong&gt;your team's AI config file&lt;/strong&gt; — as important as &lt;code&gt;.eslintrc&lt;/code&gt; or &lt;code&gt;tsconfig.json&lt;/code&gt;, but for agent behaviour.&lt;/p&gt;




&lt;h2&gt;
  
  
  Writing Your Own Skill
&lt;/h2&gt;

&lt;p&gt;The format is minimal on purpose. Here's the full template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-skill-name&lt;/span&gt;          &lt;span class="c1"&gt;# kebab-case, matches folder name&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;Use when X. Don't use when Y.&lt;/span&gt;
  &lt;span class="s"&gt;Be specific — this is how the agent decides to load the skill.&lt;/span&gt;
&lt;span class="na"&gt;license&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Apache-2.0&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
  &lt;span class="na"&gt;publisher&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;your-github-username&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="c1"&gt;# My Skill Title&lt;/span&gt;

&lt;span class="s"&gt;Write your instructions here as markdown.&lt;/span&gt;
&lt;span class="s"&gt;The agent reads this verbatim — so be precise and imperative.&lt;/span&gt;
&lt;span class="s"&gt;Use checklists, tables, and code examples.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;description&lt;/code&gt; field is the most important part. It's the activation condition — write it as "use when X, don't use when Y." Vague descriptions cause skills to fire at the wrong time.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm planning to add more skills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;react-component-patterns&lt;/code&gt; — compound components, render props, custom hooks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;database-migration-safety&lt;/code&gt; — never run destructive migrations without consent&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ci-github-actions&lt;/code&gt; — canonical workflow patterns for Node.js, Python, Docker&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;accessibility-audit&lt;/code&gt; — WCAG 2.1 AA checklist with specific fixes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openapi-spec-design&lt;/code&gt; — writing machine-readable, consumer-friendly specs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contributions are very welcome.&lt;/strong&gt; If you have a skill that made your workflow significantly better, open a PR. The bar is: does this solve a real, recurring problem in a way an AI agent can reliably apply?&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🐙 &lt;strong&gt;Repo&lt;/strong&gt;: &lt;a href="https://github.com/carthworks/ai-agent-skills" rel="noopener noreferrer"&gt;github.com/carthworks/ai-agent-skills&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Contributing guide&lt;/strong&gt;: &lt;a href="https://github.com/carthworks/ai-agent-skills/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;✉️ &lt;strong&gt;Contact&lt;/strong&gt;: &lt;a href="mailto:tkarthikeyan@gmail.com"&gt;tkarthikeyan@gmail.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this saved you time or sparked an idea, a ⭐ on the repo goes a long way.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Let's build a safer, more inclusive web — one skill at a time.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Tags: &lt;code&gt;ai&lt;/code&gt;, &lt;code&gt;developer-tools&lt;/code&gt;, &lt;code&gt;productivity&lt;/code&gt;, &lt;code&gt;llm&lt;/code&gt;, &lt;code&gt;coding-agent&lt;/code&gt;, &lt;code&gt;open-source&lt;/code&gt;, &lt;code&gt;typescript&lt;/code&gt;, &lt;code&gt;devops&lt;/code&gt;, &lt;code&gt;nextjs&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>github</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
