cd /news/ai-tools/i-built-a-repo-where-a-first-pr-is-o… · home › topics › ai-tools › article
[ARTICLE · art-163169] src=dev.to ↗ pub= topic=ai-tools verified=true sentiment=↑ positive

I built a repo where a first PR is one folder, and a 144-line validator reviews the format

A developer built skills-es, an open catalog of Spanish-language skills for Claude Code in which each contribution is a single folder containing a SKILL.md file. A 144-line Python validator using only the standard library runs in CI on every pull request, checking kebab-case naming that matches the folder, description length and character rules, a 'when to use' section, an example file, and the absence of secrets, binaries or executables, returning all errors for a skill at once. The project also ships a CONTRIBUTING guide, a PR checklist template and ten 'good first issue' tickets aimed at first-time contributors, with the developer noting uncertainty over the hand-rolled frontmatter parser and regex-based secret detection.

by read2 min views1 publishedNov 3, 2026

I'm a beginner in open source. A few weeks ago a fairly big pull request of mine was merged into someone else's project, and the review taught me how much of a maintainer's time goes into checking things a machine could check.

So I tried to design a small repo where that part is automatic: skills-es, an open catalog of Spanish-language skills for Claude Code.

Disclosure: I built it with Claude's help and reviewed the result myself.

The idea

A "skill" is a folder with a SKILL.md file: reusable instructions an AI coding assistant can follow. Almost every catalog is in English, so this one is in Spanish.

The contribution unit is one folder:

skills/

my-skill/

SKILL.md

ejemplos/ejemplo.md

Adding a skill never touches code. That matters for people sending their first PR.

The validator

Instead of the maintainer checking the format by hand, a Python script (standard library only, 144 lines) runs in CI on every PR. For each skill it checks:

name is kebab-case and matches the folder name

description is 20-1024 characters and has no < or >

there is a "when to use" section

an example file exists

no secrets (ghp_..., AKIA..., private keys), binaries, or executables

It returns all errors of a skill at once, not just the first, so a newcomer fixes everything in one round.

Some choices I made:

No YAML dependency. I parse the frontmatter by hand and only allow key: value on one line. It's less flexible, but there is nothing to install and the error messages are clearer. The trade-off: it will break the day someone wants a multi-line value.

Tests that build skills in a temp folder. Each rule has its own unit test (13 in total) that creates a tiny skill, breaks exactly one thing, and asserts the error. Adding a rule means adding one test.

Regex for secrets. Cheap and good enough for obvious leaks, but I'm not sure it's the right call versus a dedicated scanner in CI.

Making the first PR easy

CONTRIBUTING.md walks through fork, branch, folder, validate, PR.

A PR template with a checklist.

Ten issues labelled good first issue, each with acceptance criteria and a hint about where to look.

What I don't know yet

Whether a hand-rolled frontmatter parser is a mistake I'll regret.

Whether secret detection by regex is enough.

Whether anyone besides me needs these skills. That's the real test, and no amount of CI answers it.

If you want to try it or send a skill, the repo is here: https://github.com/DeadY2J/skills-es And if you've built contribution tooling for a small project, I'd love to hear what you'd do differently.

── more in #ai-tools 4 stories · sorted by recency
── more on @skills-es 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-built-a-repo-where…] indexed:0 read:2min 2026-11-03 · —