Originally published byDev.to
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)
πΊπΈ
More news from United StatesUnited States
NORTH AMERICA
Related News
What Does "Building in Public" Actually Mean in 2026?
19h ago
The Agentic Headless Backend: What Vibe Coders Still Need After the UI Is Done
19h ago
Why Iβm Still Learning to Code Even With AI
21h ago
I gave Claude a persistent memory for $0/month using Cloudflare
1d ago
NYT: 'Meta's Embrace of AI Is Making Its Employees Miserable'
1d ago