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
How Braze’s CTO is rethinking engineering for the agentic area
11h ago
Amazon Employees Are 'Tokenmaxxing' Due To Pressure To Use AI Tools
22h ago
KDE Receives $1.4 Million Investment From Sovereign Tech Fund
2h ago
Instagram’s new ‘Instants’ feature combines elements from Snapchat and BeReal
2h ago
Six Claude Code Skills That Close the AI Agent Feedback Loop
2h ago