Spaces:
Running
Running
File size: 2,476 Bytes
51e0a42 4fa5831 51e0a42 4fa5831 51e0a42 4fa5831 51e0a42 4fa5831 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | ---
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.
|