# Create Repo Skill > Crea o actualiza una skill en este repositorio de la forma correcta: hogar canónico en `.agents/skills`, marca interna o pública, symlinks en `.claude/skills` y registro en las docs públicas para las skills de producto. Fuente: https://skillsagentes.com/skills/every-app/open-seo/create-repo-skill Markdown: https://skillsagentes.com/skills/every-app/open-seo/create-repo-skill.md Repositorio: https://github.com/every-app/open-seo Autor: every-app Licencia: MIT Actualizado: hace 13 días Coste de contexto: 85 tok instalada, 1.4k tok al activarse, 1.4k tok con todos los archivos del bundle Bundle: 1 archivo, 5 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add every-app/open-seo --skill create-repo-skill --agent claude-code # Cursor npx -y skills add every-app/open-seo --skill create-repo-skill --agent cursor # Codex npx -y skills add every-app/open-seo --skill create-repo-skill --agent codex # Gemini CLI npx -y skills add every-app/open-seo --skill create-repo-skill --agent gemini # Windsurf npx -y skills add every-app/open-seo --skill create-repo-skill --agent windsurf # Cline npx -y skills add every-app/open-seo --skill create-repo-skill --agent cline ``` ## Qué hace - Crea o actualiza una skill en este repositorio siguiendo sus invariantes de layout. - `.agents/skills//SKILL.md` es el único hogar canónico de cada skill; `.claude/skills/` solo contiene symlinks, nunca copias, para que los árboles no diverjan. - Marca la skill como interna (`metadata.internal: true`) o pública: una pública se sirve a SAM, el agente en la app, y la marca es fail-open. - Para una skill pública, la registra en todas las superficies donde los usuarios descubren skills: el roster de SAM, las páginas de docs, la navegación, `SKILL_NAMES`, seo-coach y los plugins de Claude Code y Codex. - Termina con `pnpm format:write`, el commit y un chequeo de sincronización que detecta symlinks rotos o fuentes canónicas ausentes. ## Cuándo usarla - Al añadir una skill nueva, convertir un flujo en skill, o cuando `.claude/skills` y `.agents/skills` parecen desincronizados. ## Qué la activa - "Crea una skill nueva en este repo para el flujo de release" - "Convierte este workflow en una skill pública de OpenSEO" - "`.claude/skills` y `.agents/skills` están desincronizados, arréglalo" ## Antes de instalar - Los cambios en `.agents/skills/**` son parte del plano de control de revisión (CODEOWNERS); hay que hacerlos en una rama y señalarlos en el PR. ## Archivos - SKILL.md — 5 KB ## SKILL.md Reproducido tal cual desde every-app/open-seo bajo MIT. Esta sección es el documento original y está en inglés. # Create a repo skill ## The layout (invariants) - **`.agents/skills//SKILL.md` is the only canonical home for every skill** — public product skills (SEO workflows customers install) and internal repo skills (agent workflows like `merge-ready`, `papercuts`, this one) alike. Users install from this tree via `npx skills add every-app/open-seo`. - **`.claude/skills/` contains only symlinks into `.agents/skills/`** — one per skill that Claude Code agents working in this repo should auto-load. Never copy files: `.agents/skills/` is prettier-ignored (vendored skills are hash-pinned) while `.claude/skills/` is not, so a copy gets reformatted on the `.claude` side and the trees drift — this happened to three skills before symlinks became the rule. `prettier --check .` does not descend into the symlinks, so a symlink stays byte-identical to its canonical source by construction. - **Vendored skills** (external origin) are hash-pinned in `skills-lock.json` (currently only `webapp-testing`, from `anthropics/skills`). Never hand-edit a vendored skill's content; re-vendor with the `skills` CLI so the lock hash stays valid. - `.agents/skills/**` is part of the **review control plane** (see `AGENTS.md`): changes require explicit maintainer review via CODEOWNERS. Make the change on a branch and call it out in the PR — never treat skill edits as incidental. ## Creating a skill 1. `mkdir .agents/skills/` and write `SKILL.md` with frontmatter: ```markdown --- name: # must match the directory name description: metadata: internal: true # ONLY for internal repo skills — omit for product skills --- ``` 2. Decide which kind it is: - **Internal repo skill** (agent/dev workflow): set `metadata.internal: true`. Do NOT register it on any public surface. If repo agents should auto-load it, add the mirror symlink: ```bash ln -s ../../.agents/skills/ .claude/skills/ ``` - **Public product skill** (a customer-facing SEO workflow): no `internal` flag, usually no `.claude/skills` symlink (repo agents don't need customer workflows). A public skill is **auto-served to SAM, the live in-app agent** — the marking is fail-open, so a missing `internal: true` ships repo-dev instructions to end users. Give it the standard "Project context" preamble (copy a sibling like `seo-audit`) with the skill's required sections, and register it everywhere users discover skills: - `src/server/features/sam/samSkills.test.ts` — add the name to the pinned public roster (the test fails otherwise; that failure is the guard) - `web/content/docs/skills/.mdx` — docs page (mirror a sibling like `competitor-analysis.mdx`: what it does, when to use it, what you get back, how to get the best result) - `web/content/docs/skills/index.md` — bullet in the right workflow section - `web/content/docs/skills/meta.json` — nav entry - `src/routes/_app/ai.tsx` — `SKILL_NAMES` - `.agents/skills/seo-coach/SKILL.md` — one line in the "What each workflow does" roster - `plugins/openseo/skills/` — add the skill to the `skills` list in `scripts/sync-plugin-skills.mjs`, then run `pnpm sync-plugin-skills` (this directory holds real copies, not symlinks — the Claude Code and Codex plugins bundle from here, and Codex's installer silently skips symlinked files, so a symlink would ship a skill-less plugin). `pnpm ci:check` re-runs the sync and fails on drift, so a missed update here is caught, but the skill count and roster below are prose and aren't checked — update them by hand: both `plugins/openseo/*/plugin.json` `description` fields, the Codex manifest's `interface.longDescription`, and the skill lists in `web/content/docs/claude-code-plugin.md` and `web/content/docs/codex-plugin.md` - Optional: `web/src/lib/feature-pages.ts` and `web/content/docs/skills/setup.md` if it deserves marketing/setup placement 3. If the skill references MCP tools, use exact tool names and keep them in sync with `src/server/mcp/server.ts` — the tool names in skills are load-bearing for agents following them. For public skills also check `src/server/features/sam/samChatTools.ts`: SAM's toolset is a curated subset, and a skill step that names a tool SAM lacks dead-ends in the in-app agent. 4. `pnpm format:write` (covers the docs pages; `.agents/skills` itself is intentionally untouched), then commit. Skill prose follows `openseo-review-web-content` standards when public. ## Sync check (run when in doubt, and after any skill change) ```bash for d in .claude/skills/*/; do n=$(basename "$d") [ -L "${d%/}" ] || echo "DRIFT RISK — not a symlink: $n" [ -e ".agents/skills/$n" ] || echo "BROKEN — no canonical source: $n" done ``` Anything flagged: move the canonical content to `.agents/skills//` (reconciling differences deliberately — diff both sides first, newest intent wins), delete the `.claude` copy, and replace it with the symlink. ## Dónde encaja - Categoría: [Herramientas para desarrolladores](https://skillsagentes.com/categorias/herramientas-desarrollo.md) — Skills que cambian cómo tu agente escribe, revisa y despliega código. - Creador: [every-app](https://skillsagentes.com/creators/every-app.md) — 19 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) ## Otras skills del mismo repositorio - [Seo Coach](https://skillsagentes.com/skills/every-app/open-seo/seo-coach.md): Entra en un modo de coach de OpenSEO cercano que explica los flujos, recomienda los siguientes pasos y ayuda a usar bien agentes, búsqueda web, scraping y datos MCP. - [Seo Project Setup](https://skillsagentes.com/skills/every-app/open-seo/seo-project-setup.md): Rellena el contexto compartido de OpenSEO de un proyecto (alcance del sitio, objetivos, posicionamiento, competidores, páginas clave y preferencias), más comprobaciones de MCP y entrada de Search Console. - [Seo Audit](https://skillsagentes.com/skills/every-app/open-seo/seo-audit.md): Audita un sitio y entrega un informe SEO de una página, en lenguaje llano, que cualquiera puede accionar, centrado en una única acción para esta semana. - [Keyword Research](https://skillsagentes.com/skills/every-app/open-seo/keyword-research.md): Descubre oportunidades de palabras clave, evalúa métricas y SERPs y guarda o etiqueta los términos prometedores usando los datos MCP de OpenSEO. - [Local Seo](https://skillsagentes.com/skills/every-app/open-seo/local-seo.md): Audita un Google Business Profile, lo compara con competidores locales y mapea la visibilidad en Google Maps alrededor de una ubicación para decidir qué arreglar primero. ## Skills relacionadas - [Papercuts](https://skillsagentes.com/skills/every-app/open-seo/papercuts.md): Registra en `.agents/PAPERCUTS.md` la fricción real y recurrente del repositorio (setup confuso, comandos inestables, errores engañosos, archivos generados obsoletos) y también revisa, deduplica y resuelve las entradas existentes. - [Simple Issue Description](https://skillsagentes.com/skills/every-app/open-seo/simple-issue-description.md): Convierte un reporte de bug tosco, una petición de feature, una nota de soporte o un PR en un issue corto y en lenguaje llano, centrado en el problema y el comportamiento deseado. - [Maintain Greptile Rules](https://skillsagentes.com/skills/every-app/open-seo/maintain-greptile-rules.md): Evalúa hallazgos verificados de revisiones de merge-ready, Greptile, PR, CI, seguridad y facturación, y promueve los huecos de revisión duraderos a la configuración versionada de `.greptile`. - [Keyword Research](https://skillsagentes.com/skills/every-app/open-seo/keyword-research.md): Descubre oportunidades de palabras clave, evalúa métricas y SERPs y guarda o etiqueta los términos prometedores usando los datos MCP de OpenSEO. - [Openseo Release Notes](https://skillsagentes.com/skills/every-app/open-seo/openseo-release-notes.md): Corta una release de OpenSEO: sube la versión, redacta notas de versión para el usuario desde los commits del último tag, pasa una revisión con verificación por subagentes y abre un PR `release: vX.X.X`. --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)