skill-forge / README.md
WhySoCodius's picture
Skill Forge: static browser app + Python/MCP port for Agent Skills
4fa5831 verified
|
Raw
History Blame Contribute Delete
2.48 kB
---
title: Skill Forge
emoji: πŸ› οΈ
colorFrom: indigo
colorTo: purple
sdk: static
app_file: index.html
pinned: false
license: mit
short_description: Validate, lint & scaffold Agent Skills in-browser
tags:
- agents
- skills
- developer-tools
- mcp
---
# πŸ› οΈ Skill Forge
Author better **Agent Skills**. A `SKILL.md` is a YAML frontmatter block plus a
Markdown body; the `description` is how an agent decides *when* to use the skill,
and a weak one means it silently never fires. Skill Forge catches that before you
ship β€” and runs **entirely client-side**, so nothing you paste leaves the page.
Rides the current wave of skill-centric agents β€” e.g.
[*Repo-To-Skill: Distilling GitHub Repositories Into AI4AI Skills*](https://huggingface.co/papers/2609.02749)
(a 5,000-skill library lifting an ML-research agent +134% on MLE-bench) β€” by
making the authoring loop fast and checkable.
## What it does
| Tab | Use |
|---|---|
| **Validate** | Parse `SKILL.md`; flag broken frontmatter, non-kebab `name`, over-long or trigger-less `description`, empty/unstructured body, absolute bundled-file links. |
| **Lint description** | Score the `description` 0–100 for trigger reliability: length band, explicit "use when", action verbs, concrete examples, third-person phrasing. |
| **Scaffold** | Generate a valid starter `SKILL.md` from a name + description + trigger, then validate it. |
## Files
| File | |
|---|---|
| [`index.html`](index.html) + [`skillforge.js`](skillforge.js) | the static app (js-yaml from CDN) |
| [`skillforge.py`](skillforge.py) | same logic in Python β€” `validate_skill`, `lint_description`, `scaffold_skill`, `package_skill` |
| [`app.py`](app.py) | Gradio UI **+ MCP server** (`skill_validate`, `skill_lint_description`, `skill_scaffold`) for running locally / on a PRO Space |
| `test_skillforge.py`, `test_skillforge.mjs` | self-checks for both ports |
### Run the MCP server locally
```bash
pip install -r requirements.txt
python app.py # UI on :7860, MCP at /gradio_api/mcp/sse
```
```json
{ "mcpServers": { "skill-forge": { "url": "http://localhost:7860/gradio_api/mcp/sse" } } }
```
## Scope
Only the **stable, host-agnostic** structure of the format is enforced β€” no
host-specific frontmatter keys are required, and unknown keys are reported as
info, not errors. The linter is opinionated about `description` quality because
that is what determines whether the skill is ever used.
MIT licensed. All original code.