--- type: Resumen title: "Estudio — skills.sh y el CLI npx skills (el npm de las agent skills)" description: "Estudio de skills-sh publicado como sitio: scripts minimalistas para implementarlo y cómo se conecta con el OKF." resource: "https://gerardoesquivia.com/skills-sh/" status: publicado tags: [estudio, skills-sh, scripts-minimalistas, documentacion, okf] timestamp: 2026-10-04 creator: "Gerardo Esquivia Zapata" grafo: datos --- # Estudio — skills.sh y el CLI npx skills (el npm de las agent skills) > **Sitio publicado:** https://gerardoesquivia.com/skills-sh/ > **Nota generada del sitio** para que el estudio regrese al OKF (REGLA del ciclo: > la documentación no está completa hasta estar publicada **Y** registrada). ## Cómo usarla Los **scripts minimalistas** de abajo se copian y funcionan. Esa es la parte que vale: la prosa se lee y se olvida; un script se pega y arranca. --- ## 1 · Instalar una skill (formatos de origen) ``` # Formato corto GitHub (owner/repo) npx skills add vercel-labs/agent-skills # URL completa · GitLab · cualquier Git · ruta local npx skills add https://github.com/vercel-labs/agent-skills npx skills add ./my-local-skills ``` ``` # Repo multi-skill: lista, selecciona, todas, no interactivo npx skills add vercel-labs/agent-skills --list npx skills add vercel-labs/agent-skills --skill frontend-design --skill skill-creator npx skills add vercel-labs/agent-skills --all npx skills add vercel-labs/agent-skills --skill frontend-design -g -a claude-code -y ``` 📦 No instalas nada de forma global: usas npx, siempre la última versión, por proyecto y seguro para equipos. ## 2 · Usar una skill sin instalarla (`npx skills use`) ``` npx skills use vercel-labs/agent-skills@nextjs | claude npx skills use vercel-labs/agent-skills --skill nextjs --agent claude-code ``` Resuelve la skill, escribe en un directorio temporal y suelta el prompt por stdout. No toca .claude/skills/ ni el lockfile. Es el npx de las skills frente al npm install. - @skill = forma corta de --skill. - --agent arranca el agente con el prompt ya montado. - Gana a add en: probar antes de comprometerte, tareas puntuales, scripts/automatización. ## 3 · Encontrar la skill correcta ### 🏆 Leaderboard (skills.sh) | # | Skill | Repo | Instalaciones | | --- | --- | --- | --- | | 1 | find-skills | vercel-labs/skills | 1,8M | | 2 | frontend-design | anthropics/skills | 477,7K | | 3 | vercel-react-best-practices | vercel-labs/agent-skills | 437,4K | | 4 | microsoft-foundry | microsoft/azure-skills | 355,4K | | 10 | azure-storage | microsoft/azure-skills | 352,9K | ### 🔍 Buscador de terminal ``` npx skills find # interactivo tipo fzf npx skills find typescript ``` 💡 Mira el leaderboard ANTES de buscar a ciegas: lo popular suele estar más pulido y mantenido. Las dos primeras (descubrir skills y diseño frontend) son transversales, no de nicho. ## 4 · Gestionar lo instalado (project/global, symlink, lockfile) | Comando | Qué hace | | --- | --- | | npx skills list / ls -g | Inventario (proyecto + global / solo globales) | | npx skills check | Comprueba actualizaciones pendientes | | npx skills update [nombre] | Actualiza todas o una concreta | | npx skills remove | Elimina una skill | ### 📁 Project vs global - Project (por defecto): .claude/skills/ o .agents/skills/ — se versionan y se comparten con el equipo. - Global (-g): ~/ — en todos tus proyectos, solo para ti. ### 🔗 Symlink vs copy - Symlink (recomendado): una copia canónica única enlazada a cada agente → una fuente de verdad, actualizaciones triviales. - Copy: copias independientes por agente (cuando el entorno no soporta symlinks: algunos Windows, contenedores). 🔒 skills-lock.json = el lockfile (como package-lock.json): se genera al instalar la primera skill, se commitea, y permite reproducir el mismo conjunto + npx skills check. También fija versiones (seguridad). ## 5 · Publicar tu propia skill (sin formulario) ``` npx skills init mi-skill # genera la plantilla de un SKILL.md ``` - Crea una carpeta con tu SKILL.md y frontmatter (name y description obligatorios). - Súbela a un repositorio público de Git. - Comparte la URL: npx skills add tu-usuario/tu-repo. - La telemetría de instalación la coloca en el índice/leaderboard automáticamente. 🆔 Tu identidad en el registro es tu cuenta GitHub/GitLab (owner/repo). No hay squatting de nombres al estilo npm. ⚠️ Sin revisión: la calidad media es la que es — la curación recae en ti (instalaciones + mirar el repo). ## 6 · La parte incómoda: confianza y seguridad | Criterio (del skill find-skills) | Regla | | --- | --- | | Instalaciones | Prefiere +1.000; cauto por debajo de 100 | | Estrellas del repo | <100 estrellas → escepticismo | | Verificación | No recomiendes solo por resultados de búsqueda; abre el repo y mira SKILL.md y scripts/ | Instalar una skill = instalar instrucciones (y a veces scripts ejecutables) que tu agente ejecutará con acceso a tu código. Trátala como una dependencia de npm que pide permisos de postinstall. 🛡️ skills.sh añade páginas de análisis de seguridad (ej. con Snyk) y puedes pasar SkillSpector (analizador de NVIDIA) antes de instalar. El lockfile fija versiones: una actualización del repo NO entra sin tu npx skills update. ## 7 · Grafo animado — ciclo de vida de una skill El token 🟠 recorre el flujo. Clic en el gráfico reinicia. Iniciando… ## 8 · Comparativa manual vs CLI + alternativas | Aspecto | Manual | CLI | | --- | --- | --- | | Velocidad | Copiar, pegar, ubicar | Un comando | | Descubrimiento | A ciegas por GitHub | Leaderboard + buscador | | Versionado | Inexistente | Lockfile + skills check | | Multi-agente | Repetir por cada agente | Un comando para varios | | Control del origen | Total | Bueno, requiere disciplina | ### 🔀 Alternativas - Smithery CLI — skills y MCP en el mismo flujo: smithery skill search "code review". - claude-plugins.dev — instala plugins y skills de Claude Code en un comando; skills-installer para multi-cliente. - AI Tmpl (aitmpl.com) — catálogo de +900 componentes (skills, agentes, comandos, hooks, MCPs). 📦 Regla de librerías (local primero): revisar C:\Users\TUF\Documents\librerías\local\ antes de descargar. Relacionado con el OKF: este vault ya usa agent skills (.agents/skills/, .copilot/skills/). Fuente: https://www.webreactiva.com/blog/skills-sh. 📱 Escanéalo para abrir la documentación https://gerardoesquivia.com/skills-sh/ skills.sh · CLI npx skills · OKF de Gerardo Esquivia Zapata · 2026-08-30 (function () { const nodes = [ { id: "desc", label: "Descubrir", sub: "skills.sh / find", x: 70, y: 200 }, { id: "add", label: "Instalar", sub: "npx skills add", x: 300, y: 80 }, { id: "use", label: "Usar", sub: "add o use", x: 300, y: 320 }, { id: "upd", label: "Actualizar", sub: "check · update", x: 640, y: 200 }, { id: "pub", label: "Publicar", sub: "init · repo", x: 880, y: 200 }, ]; const edges = [ { from: "desc", to: "add", label: "leaderboard", loop: false }, { from: "add", to: "use", label: "instala", loop: false }, { from: "use", to: "upd", label: "en uso", loop: false }, { from: "upd", to: "pub", label: "versiona", loop: false }, { from: "pub", to: "desc", label: "telemetría", loop: false }, ]; const pos = Object.fromEntries(nodes.map(n => [n.id, { x: n.x, y: n.y }])); const svg = document.getElementById("grafo"); const NS = "http://www.w3.org/2000/svg"; function el(tag, attrs) { const e = document.createElementNS(NS, tag); for (const k in attrs) e.setAttribute(k, attrs[k]); return e; } const edgePaths = [], edgeArrows = []; edges.forEach((ed) => { const a = pos[ed.from], b = pos[ed.to]; let d, mid; if (ed.from === "pub") { d = `M ${a.x} ${a.y} C ${(a.x+b.x)/2} 460, ${(a.x+b.x)/2} 460, ${b.x} ${b.y}`; mid = { x: (a.x+b.x)/2, y: 400 }; } else { const dx = Math.abs(b.x-a.x), dy = Math.abs(b.y-a.y); if (dy > dx) { const my=(a.y+b.y)/2; d=`M ${a.x} ${a.y} C ${a.x} ${my}, ${b.x} ${my}, ${b.x} ${b.y}`; mid={x:(a.x+b.x)/2,y:my}; } else { const mx=(a.x+b.x)/2; d=`M ${a.x} ${a.y} C ${mx} ${a.y}, ${mx} ${b.y}, ${b.x} ${b.y}`; mid={x:mx,y:(a.y+b.y)/2}; } } const path = el("path", { class: "edge", d }); svg.appendChild(path); edgePaths.push(path); const ang = Math.atan2(b.y - mid.y, b.x - mid.x); const tx = b.x - 18*Math.cos(ang), ty = b.y - 18*Math.sin(ang); const arrow = el("path", { class: "arrow", d: `M ${tx} ${ty} l 8 ${-4} l -8 ${-4} z`, transform: `rotate(${ang*180/Math.PI} ${tx} ${ty})` }); svg.appendChild(arrow); edgeArrows.push(arrow); }); const nodeGroups = {}; nodes.forEach(n => { const g = el("g", { class: "node" }); g.appendChild(el("rect", { x: n.x - 70, y: n.y - 29, width: 140, height: 58 })); const t = el("text", { class: "t", x: n.x, y: n.y - 4, "text-anchor": "middle" }); t.textContent = n.label; const s = el("text", { class: "s", x: n.x, y: n.y + 16, "text-anchor": "middle" }); s.textContent = n.sub; g.appendChild(t); g.appendChild(s); svg.appendChild(g); nodeGroups[n.id] = g; }); const travel = el("circle", { class: "travel", r: 6, opacity: 0 }); svg.appendChild(travel); const caption = document.getElementById("caption"); const N = edges.length; let i = 0, raf = null; function clearActive() { nodes.forEach(n => nodeGroups[n.id].classList.remove("active")); edgePaths.forEach(p => p.classList.remove("active")); edgeArrows.forEach(a => a.classList.remove("active")); } function animateEdge(idx) { const ed = edges[idx]; clearActive(); edgePaths[idx].classList.add("active"); edgeArrows[idx].classList.add("active"); nodeGroups[ed.from].classList.add("active"); caption.innerHTML = `Paso ${idx+1}/${N}: ${ed.from} → ${ed.to} (${ed.label})`; const path = edgePaths[idx], len = path.getTotalLength(); const t0 = performance.now(), dur = 900; function step(now) { let p = (now-t0)/dur; if (p>1) p=1; const pt = path.getPointAtLength(p*len); travel.setAttribute("cx", pt.x); travel.setAttribute("cy", pt.y); travel.setAttribute("opacity", 1); if (p animateEdge(i), 320); } } raf = requestAnimationFrame(step); } function start() { cancelAnimationFrame(raf); i = 0; animateEdge(0); } svg.addEventListener("click", start); start(); })(); --- type: Resumen title: "🌐 Estudio: skills.sh y el CLI npx skills (el npm de las agent skills)" description: "Nota OKF del artículo de Web Reactiva: skills.sh como registro/leaderboard de agent skills, CLI npx skills (add/use/find/list/check/update/remove/init), ámbitos project/global, symlink, lockfile, seguridad y alternativas." fuente: "https://www.webreactiva.com/blog/skills-sh" sitio: "https://gerardoesquivia.com/skills-sh/" tags: [resumen, skills, agent-skills, cli, npx, vercel, registro, okf] timestamp: 2026-08-30 creator: "Gerardo Esquivia Zapata" --- # 🌐 skills.sh y el CLI npx skills > **Para qué:** instalar, descubrir, versionar, actualizar y publicar agent skills con un comando (lo que npm hizo por las dependencias JS). skills.sh es el registro/leaderboard; `npx skills` es el CLI. > **Cómo:** `npx skills add owner/repo` instala (GitHub es el registro, no hay servidor de paquetes); `use` ejecuta sin instalar; `find` busca; `check`/`update` versionan con `skills-lock.json`; `init` crea skills nuevas. Sitio: https://gerardoesquivia.com/skills-sh/ ## 🎯 Para qué sirve - Dejar de copiar SKILL.md a mano entre carpetas de agentes. - Descubrir la skill correcta por leaderboard (popularidad real) y buscador. - Versionar el conjunto de skills con skills-lock.json (reproducible en equipo) y actualizar con npx skills check / update. - Publicar skills propias sin formulario (telemetría de instalación). ## 🛠️ Cómo se usa — comandos esenciales ```bash # Instalar (formatos: owner/repo, URL, GitLab, git, ruta local) npx skills add vercel-labs/agent-skills npx skills add vercel-labs/agent-skills --skill frontend-design -g -a claude-code -y # Usar sin instalar (el prompt sale por stdout) npx skills use vercel-labs/agent-skills@nextjs | claude # Encontrar npx skills find typescript # Gestionar npx skills list · npx skills check · npx skills update · npx skills remove frontend-design # Publicar npx skills init mi-skill # crea el esqueleto SKILL.md ``` ## 🔑 Conceptos clave | Concepto | Qué es | |---|---| | skills.sh | Registro + leaderboard de agent skills (escaparate) | | npx skills | CLI que instala/lista/actualiza/elimina (almacén) | | GitHub como registro | Cada skill = repo con SKILL.md; no hay servidor de paquetes | | add | Instala (varios formatos; --list, --skill, --all, -g, -a, -y) | | use | Ejecuta sin instalar: prompt por stdout (@skill = --skill; --agent arranca el agente) | | find | Búsqueda interactiva tipo fzf o por palabra clave | | Project vs global | .claude/skills/ o .agents/skills/ (equipo) vs ~/ (-g, solo tú) | | Symlink vs copy | Symlink = una fuente de verdad; copy = copias independientes (Windows/containers) | | skills-lock.json | Lockfile: fija versiones, reproducible, check/update | | init | Genera la plantilla de un SKILL.md (name + description obligatorios) | | Seguridad | +1k instalaciones, estrellas del repo, leer SKILL.md/scripts/; tratar como dependencia con permisos | ## 🧪 Aplicación en este entorno (OKF de Gerardo) - El vault ya usa agent skills: .agents/skills/ y .copilot/skills/ (ej. find-skills, arranque-proyectos, mantenimiento-desarrollo). - npx skills permite gestionarlas y versionarlas; skills-lock.json se puede commitear junto al proyecto. - La skill find-skills (instalada) ya trae los criterios de confianza del ecosistema. ## 🔗 Fuente https://www.webreactiva.com/blog/skills-sh · Autor: Daniel Primo (Web Reactiva) Sitio: https://gerardoesquivia.com/skills-sh/ ## 📥 Cómo agregar esto a tu OKF (para el agente) 1. Guarda esta nota en `📋 Proyectos/`. 2. Detalle completo (formatos, leaderboard, alternativas, FAQ): `insumos/skills-sh-npx-skills.md`. 3. Relacionado: la skill `find-skills` ya instalada y el brazo `📬 Mensajería de Instrucciones` (las skills son las "órdenes" reutilizables del ecosistema de agentes). --- function descargarMD() { const md = document.getElementById('md-resumen').textContent.trim(); const blob = new Blob([md], { type: 'text/markdown;charset=utf-8' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'resumen-skills-sh.md'; document.body.appendChild(a); a.click(); a.remove(); URL.revokeObjectURL(url); } --- ## Cómo se conecta con el OKF - **Sitio:** https://gerardoesquivia.com/skills-sh/ - **Nota:** esta (bajada del sitio, para consulta del agente) - **Fuente:** https://gerardoesquivia.com/skills-sh/ ## Aprendizajes - Los scripts minimalistas son el activo: **el ejemplo más corto que demuestra el uso**. - Este estudio forma parte del ciclo: **estudiar → publicar → registrar en el OKF**.