Crear un marketplace de Claude Code y probarlo desde una carpeta local
Hola, bienvenido. En esta lección vamos a convertir el repo claude-plugins en el marketplace del equipo, que es el catálogo desde el que cada persona instala el plugin team por su nombre y con su versión. Lo vamos a probar desde una carpeta local, instalando el plugin en helpdesk, y veremos por qué esa forma de instalarlo sirve para probar pero no para el equipo. Después prepararemos el repo como lo que va a ser a partir de ahora, un producto que usa todo el equipo: con su changelog, un script que lo comprueba todo, un hook de git que no deja subir nada que no pase ese script y el primer tag de versión.
Hasta ahora el plugin solo existe en el disco de Marta, y para usarlo hay que arrancar Claude con --plugin-dir y una ruta. Eso vale para quien lo escribe, pero no para Jorge o Aitor, que no tendrían por qué saber dónde vive la carpeta ni acordarse de pasarla en cada sesión. Un marketplace resuelve las 2 cosas: cada persona lo añade una vez, instala el plugin por su nombre, team@cursosdesarrolloweb, y a partir de ahí Claude Code lo carga solo en cada sesión del repo.
El marketplace es un archivo JSON en un repo git, sin ningún servidor detrás. En esta lección vamos a probarlo desde una carpeta local, y en la siguiente lo añadiremos desde el repo privado del equipo. Por eso, al final de esta lección quitaremos el marketplace local que vamos a añadir ahora.
El catálogo: .claude-plugin/marketplace.json
El marketplace es un archivo, .claude-plugin/marketplace.json, en la raíz del repo. Cada plugin que lista lleva su nombre y dónde encontrarlo, en nuestro caso con una ruta relativa a esa raíz. En la pestaña claude-plugins:
name es el nombre del marketplace, el que va detrás de la arroba al instalar, y owner dice quién lo mantiene. Igual que en el plugin, debes poner tu usuario o tu organización. La descripción en metadata no es obligatoria para cargarlo, pero sin ella la validación estricta falla:
Fíjate en que la entrada de team no lleva version. La versión vive solo en el plugin.json, como vimos al crearlo: si la entrada tuviera otra, al instalar se ignoraría, y --strict lo marca como fallo para que no llegue a pasar. Con el archivo completo, vamos a validar la raíz del repo, en la pestaña claude-plugins:
El bloque Advice es un consejo y no cambia el resultado, que es Validation passed. Sale porque el README.md de claude-plugins no lleva una línea que instale el plugin. En este curso, los comandos de instalación van en el README.md de cada proyecto del equipo, como veremos en la lección siguiente, así que puedes ignorarlo.
Ahora tenemos 2 manifiestos, y conviene no confundirlos:
plugin.json |
marketplace.json |
|
|---|---|---|
| Dónde | plugins/team/.claude-plugin/ |
.claude-plugin/, en la raíz del repo |
| Qué describe | Un plugin: su nombre, su versión y su autor | El catálogo: su nombre, su dueño y qué plugins ofrece |
version |
Aquí, y solo aquí | La admite, pero no la escribimos: manda la del plugin.json |
| Qué valida | claude plugin validate plugins/team |
claude plugin validate . |
La validación de la raíz tiene un límite. validate . revisa marketplace.json y lee el plugin.json de cada plugin que lista, pero no comprueba que la carpeta de cada fuente exista: una entrada a ./plugins/fantasma pasa en verde. Tampoco revisa las skills de cada plugin. Por eso, un poco más abajo, el script que comprueba el repo validará también cada plugin y cruzará las entradas del catálogo con las carpetas.
- 02Instalar el plugin desde la carpeta del marketplace
- 03La caché y por qué una ruta local no vale para el equipo
- 04El repo como producto: changelog, check.sh y pre-push
- 05La CI como archivo: check.yml
- 06Las normas por escrito: CONTRIBUTING.md
- 07El primer tag: team--v1.0.0
- 08Quitar el marketplace local