Spaces:
Running
Running
| 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. | |