Technology Apr 18, 2026 · 3 min read

I Built a Skill Registration Framework for AI Agents in 3000 Lines of TypeScript

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. ## 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...

DE
DEV Community
by vardhineediganesh877-ui
I Built a Skill Registration Framework for AI Agents in 3000 Lines of TypeScript

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.

## 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
```typescript
import { toSkill, actionFromFunction } from "@ganeshvardhineedi/skillforge";

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

export default toSkill("weather", "Weather API integration", [getWeather]);
```
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:
```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` 
  }},
]);
```
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:
```typescript
eventBus.on("trading:price_alert", (data) => {
  pipeline.run([{ skillName: "telegram", actionName: "send_message", params: data }]);
});

eventBus.chain("api.call", "transform.data", "store.result");
```
## 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
```bash
npm install @ganeshvardhineedi/skillforge

# Or clone and run
git clone https://github.com/vardhineediganesh877-ui/skillforge.git
cd skillforge && npm install && npm run build
npx skillforge serve 3456
# Open http://localhost:3456/ui
```
## 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)
DE
Source

This article was originally published by DEV Community and written by vardhineediganesh877-ui.

Read original article on DEV Community
Back to Discover

Reading List