Converter → Validator
SKILL.md Validator
Paste your SKILL.md below. The validator checks the five rules that cause upload failures: name format, hyphen rules, name/folder match, description length, and external-request scripts. Nothing is uploaded — validation runs in your browser.
Two rules cause most rejections: the skill name inside SKILL.md must be all lowercase with words separated by hyphens, and scripts cannot make requests to external websites. Everything else this validator checks is a smaller variation on those, or a length limit.
One more failure you will not get an error for: if the name field does not match the parent folder name, the upload succeeds and the skill appears in your list — but it never triggers when you ask for it. Enter your folder name below to catch that.
Nothing you paste leaves your browser. All validation runs locally in JavaScript — there is no server receiving your file.
What this validator checks
| Check | Rule | Why it matters |
|---|---|---|
| Frontmatter present | File must start with a --- block |
A file without frontmatter is not a skill |
name present |
Required field | Missing name is the most common upload failure |
| Lowercase only | No uppercase letters | PDF-Processing is rejected; use pdf-processing |
| Allowed characters | Letters, numbers, hyphens only | Underscores and spaces are rejected |
| Hyphen placement | No leading or trailing hyphen | -pdf and pdf- both fail |
| Consecutive hyphens | pdf--processing is rejected |
Caused by empty words between separators |
| Name length | 1–64 characters | Over 64 is rejected outright |
| Folder match | Must equal the parent folder name | Silent failure: uploads but never triggers |
description present |
Required field | The AI cannot match a skill with no description |
| Description length | 1–1024 characters | Over 1024 is rejected |
| Trigger quality | Should say when to use it | Warning only — valid but may never trigger |
| Body content | Must not be empty | An empty body gives the AI nothing to do |
| External requests | No fetch, curl, axios or similar |
Scripts calling external sites are rejected |
| File types | No .docx, .xlsx or other binaries |
Binary formats must be converted first |
Which validator do you need?
SKILL.md is used by more than one platform, and the limits differ slightly. If you are not sure which set of rules applies to you, match your case below.
| Your situation | Which rules apply | Limit that differs |
|---|---|---|
| You are converting a Gemini Gem before Nov 17, 2026 | Gemini skill rules — what this validator checks | 100 skills active at once, 100 MB total upload |
| You are writing a Claude Code skill | The same core format rules | SKILL.md is identical; directory conventions differ |
| You are building a portable skill for several platforms | The intersection of all three sets | Stay under the lowest limit of each: 64-character name and 1024-character description everywhere |
The format itself is open and Markdown-native, so a skill you write once is no longer locked to one vendor. That portability is something a Gemini Gem never offered — and it is the main practical reason to convert manually rather than waiting for the automatic migration.
How to fix the five failures
1. Uppercase in the name
# Wrong
name: PDF-Processing
# Right
name: pdf-processing
2. Name does not match the folder
pdf-text-extractor/ <- folder name
---
name: pdf-text-extraction <- mismatch, never triggers
Rename the folder to pdf-text-extraction, or change the name to pdf-text-extractor. They have to be identical.
3. Leading, trailing or consecutive hyphens
# Wrong
name: -pdf-extract
name: pdf-extract-
name: pdf--extract
# Right
name: pdf-extract
name: pdf-toolkit
4. Description too long or too vague
# Over 1024 characters -> rejected
# Valid but weak
description: Helps with PDFs
# Valid and effective
description: Extracts text and tables from PDF files and fills forms.
Use when the user mentions PDFs, forms, or document extraction,
even if they don't say "extract".
5. External requests in scripts
# Wrong
const res = await fetch("https://api.example.com/data")
# Right: bundle the data in the skill folder
const data = require("./data/values.json")
FAQ
- Is my SKILL.md uploaded anywhere?
- No. Validation runs entirely in your browser using local JavaScript. Nothing you paste is transmitted, stored or logged. You can verify this in your browser dev tools: there are zero network requests after clicking Validate.
- What are the most common SKILL.md errors?
- In order of frequency: uppercase letters in the name, a name that does not match the folder, leading or trailing hyphens, consecutive hyphens, an underscore in the name, a description over 1024 characters, and scripts containing external requests.
- Does this work with Claude Code skills too?
- Yes. SKILL.md is an open standard used by Anthropic Agent Skills and adopted by Gemini, so the same rules apply to any platform following the specification.
- Why does it warn about my description when the description is valid?
- Because valid and effective are different. A description that passes the length check but never says when to use the skill may simply never trigger. That warning does not block upload.
- What is the 100 MB limit?
- Total size across all files in a skill folder, capped at 100 MB. This validator cannot check total size from pasted text alone — check your folder size separately if your skill includes large assets.
- How many skills can I have active?
- Up to 100 simultaneously. You can keep more templates than that, but only 100 will be active at once.