<?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: vardhineediganesh877-ui</title>
    <description>The latest articles on DEV Community by vardhineediganesh877-ui (@vardhineediganesh877ui).</description>
    <link>https://dev.to/vardhineediganesh877ui</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3885512%2F5a66d353-006a-4dac-b194-0c80eba8fb56.png</url>
      <title>DEV Community: vardhineediganesh877-ui</title>
      <link>https://dev.to/vardhineediganesh877ui</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vardhineediganesh877ui"/>
    <language>en</language>
    <item>
      <title>I Built a Skill Registration Framework for AI Agents in 3000 Lines of TypeScript</title>
      <dc:creator>vardhineediganesh877-ui</dc:creator>
      <pubDate>Sat, 18 Apr 2026 12:29:00 +0000</pubDate>
      <link>https://dev.to/vardhineediganesh877ui/i-built-a-skill-registration-framework-for-ai-agents-in-3000-lines-of-typescript-28db</link>
      <guid>https://dev.to/vardhineediganesh877ui/i-built-a-skill-registration-framework-for-ai-agents-in-3000-lines-of-typescript-28db</guid>
      <description>&lt;p&gt;I was tired of every AI agent framework having a different way to register tools. So I built one that works for all of them.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## The Problem
If you've built AI agents, you know the pain. Every framework — LangChain, AutoGen, CrewAI, OpenClaw — has its own way to define tools and skills. Want to add a weather API? Different syntax everywhere. Want credentials? Good luck figuring out each one's approach.

I wanted something lightweight, embeddable, and opinionated. Not another Zapier. Not another n8n. Just the infrastructure layer that any agent framework could use.

So I built SkillForge (https://github.com/vardhineediganesh877-ui/skillforge).

## What It Does
SkillForge is a skill/tool registration framework. You define skills (groups of actions), each skill has:

• Actions — what the skill can do, with JSON Schema input validation
• Triggers — polling, webhooks, or event-driven
• Credentials — AES-256 encrypted, decoupled from skill logic
• Schema — self-describing, so the UI generates itself

The whole thing is ~3000 lines of TypeScript with only 4 dependencies (express, ajv, uuid, jsonwebtoken).

## A Skill Looks Like This
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```typescript
import { toSkill, actionFromFunction } from "@ganeshvardhineedi/skillforge";

const getWeather = actionFromFunction(
  async ({ city, units = "metric" }) =&amp;gt; {
    const res = await fetch(
      `https://api.openweathermap.org/data/2.5/weather?q=${city}&amp;amp;units=${units}&amp;amp;appid=${key}`
    );
    return res.json();
  },
  { name: "get_forecast", description: "Get current weather" }
);

export default toSkill("weather", "Weather API integration", [getWeather]);
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;That's it. The framework handles:

• ✅ Input validation (JSON Schema)
• ✅ Retry with exponential backoff
• ✅ Timeout enforcement
• ✅ Execution logging
• ✅ Credential encryption
• ✅ Auto-generated UI with forms
• ✅ REST API + CLI

## The Pipeline Runner
My favorite feature. Chain multiple skills into a pipeline:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```typescript
const result = await pipeline.run([
  { skillName: "trading", actionName: "get_price", params: { symbol: "BTC-USD" } },
  { skillName: "telegram", actionName: "send_message", params: { 
    message: `BTC is at $.steps.trading.get_price.price` 
  }},
]);
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Each step's output is available to subsequent steps via $.steps. Lifecycle hooks (before/onError/finally) handle cleanup and error recovery.

## The Event Bus
Skills can talk to each other:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```typescript
eventBus.on("trading:price_alert", (data) =&amp;gt; {
  pipeline.run([{ skillName: "telegram", actionName: "send_message", params: data }]);
});

eventBus.chain("api.call", "transform.data", "store.result");
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Auto-Generated UI
No frontend needed. SkillForge reads your schemas and generates:

• 📊 Dashboard with all registered skills
• 📝 Forms for every action's inputs
• ▶️ Run button with live results
• 🔐 Admin token required for execution

## Security
• 🔐 AES-256 credential encryption (required key, no silent fallback)
• 🛡️ execFileSync + input validation (no shell injection)
• 🔑 JWT auth with expiration
• 🧹 XSS-safe HTML escaping
• 🔒 All write endpoints require admin JWT

## Try It
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```bash
npm install @ganeshvardhineedi/skillforge

# Or clone and run
git clone https://github.com/vardhineediganesh877-ui/skillforge.git
cd skillforge &amp;amp;&amp;amp; npm install &amp;amp;&amp;amp; npm run build
npx skillforge serve 3456
# Open http://localhost:3456/ui
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## What's Next
• [ ] More example skills
• [ ] Plugin system for custom credential providers
• [ ] Websocket support for real-time event streaming
• [ ] Skill marketplace

## What Do You Think?
I'd love feedback. Is this useful? What would make you want to use it in your agent projects?
Drop a comment or open an issue on GitHub (https://github.com/vardhineediganesh877-ui/skillforge).

───

If you found this interesting, follow me for more posts on AI agent infrastructure. Building in public is better alone.

🔗 GitHub: vardhineediganesh877-ui/skillforge (https://github.com/vardhineediganesh877-ui/skillforge) | npm: @ganeshvardhineedi/skillforge (https://www.npmjs.com/package/@ganeshvardhineedi/skillforge)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>typescript</category>
      <category>ai</category>
      <category>opensrc</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
