Saltar al contenido
Curso Claude Code en equipo: una sola forma de trabajar
23/29 Bloque opcional · El paquete Composer de convenciones Skill init en el plugin de Claude Code: el siguiente proyecto del equipo en un comando
Tu lectura Quedan 22 min
Lección 23 de 29 · Bloque opcional · El paquete Composer de convenciones

Skill init en el plugin de Claude Code: el siguiente proyecto del equipo en un comando

22 min de lectura Claude Code 2.1

Hola, bienvenido. En esta lección vamos a convertir los pasos de la lección anterior en una skill del plugin team, init, que prepara el siguiente proyecto del equipo con un solo comando. Vamos a llevar al plugin las plantillas de .claude/settings.json y del .gitignore, y a enseñar al hook que comprueba el repo al abrir la sesión lo que vimos fallar en portal. Todo eso será la versión 1.6.0 del plugin.

Preparar portal fueron 6 pasos: el volumen y el repositorio del paquete, el paquete, las herramientas de QA sin restricciones de versión, como en helpdesk, conventions:install con el CLAUDE.md con lo esencial, .claude/settings.json y el .gitignore copiados de helpdesk, y la QA con sus correcciones. Ninguno es difícil, pero hay que acordarse de todos, y en el siguiente proyecto alguien se saltará uno o se dejará una herramienta. Además, algunos fallos no avisan: sin la testsuite Architecture, composer qa pasa en verde sin ejecutar ningún arch test.

Si te saltaste el bloque de QA, guardia y subagentes, tu doctor.sh no tiene la parte que comprueba la guardia. Copia el archivo completo en vez de aplicar el diff: esa parte solo se ejecuta si existe scripts/guard.sh, así que el archivo funciona igual sin ella. Del CHANGELOG.md, copia solo la entrada nueva.

Las plantillas del plugin

Vamos a crear la rama del cambio y las carpetas nuevas, en la pestaña claude-plugins:

Terminal
git switch -c feat/init
mkdir -p plugins/team/templates plugins/team/skills/init

En la lección 19 decidimos que cada archivo que se repite en los repos tiene una sola plantilla. Las del código están en el paquete, y las de la configuración de Claude Code, en el plugin, en la carpeta templates/. La primera es claude-plugins/plugins/team/templates/settings.json, el .claude/settings.json de portal con la versión mínima del plugin que trae init:

claude-plugins/plugins/team/templates/settings.json Nuevo +59
1{
2 "env": {
3 "TEAM_PLUGIN_MIN": "1.6.0"
4 },
5 "permissions": {
6 "allow": [
7 "Bash(./vendor/bin/sail composer qa)",
8 "Bash(./vendor/bin/sail composer test*)",
9 "Bash(./vendor/bin/sail composer pint*)",
10 "Bash(./vendor/bin/sail composer phpstan)",
11 "Bash(./vendor/bin/sail composer rector*)",
12 "Bash(./vendor/bin/sail bin pest *)",
13 "Bash(./vendor/bin/sail bin pint *)",
14 "Bash(./vendor/bin/sail artisan route:list *)",
15 "Bash(./vendor/bin/sail artisan make:*)",
16 "Bash(vendor/bin/sail composer qa)",
17 "Bash(vendor/bin/sail composer test*)",
18 "Bash(vendor/bin/sail composer pint*)",
19 "Bash(vendor/bin/sail composer phpstan)",
20 "Bash(vendor/bin/sail composer rector*)",
21 "Bash(vendor/bin/sail bin pest *)",
22 "Bash(vendor/bin/sail bin pint *)",
23 "Bash(vendor/bin/sail artisan route:list *)",
24 "Bash(vendor/bin/sail artisan make:*)",
25 "Bash(git add *)",
26 "Bash(git commit *)"
27 ],
28 "deny": [
29 "Read(.env)",
30 "Read(.env.production)",
31 "Bash(git push *)",
32 "Bash(./vendor/bin/sail artisan migrate:fresh*)",
33 "Bash(./vendor/bin/sail artisan migrate:reset*)",
34 "Bash(./vendor/bin/sail artisan db:wipe*)",
35 "Bash(vendor/bin/sail artisan migrate:fresh*)",
36 "Bash(vendor/bin/sail artisan migrate:reset*)",
37 "Bash(vendor/bin/sail artisan db:wipe*)"
38 ],
39 "ask": [
40 "Bash(./vendor/bin/sail composer require *)",
41 "Bash(./vendor/bin/sail composer remove *)",
42 "Bash(./vendor/bin/sail artisan migrate *)",
43 "Bash(vendor/bin/sail composer require *)",
44 "Bash(vendor/bin/sail composer remove *)",
45 "Bash(vendor/bin/sail artisan migrate *)"
46 ]
47 },
48 "enabledPlugins": {
49 "team@cursosdesarrolloweb": true
50 },
51 "extraKnownMarketplaces": {
52 "cursosdesarrolloweb": {
53 "source": {
54 "source": "git",
55 "url": "[email protected]:cursosdesarrolloweb/claude-plugins.git"
56 }
57 }
58 }
59}

La segunda es claude-plugins/plugins/team/templates/gitignore, con las líneas del .gitignore que el hook comprobaba con una lista fija en doctor.sh:

claude-plugins/plugins/team/templates/gitignore Nuevo +2
1/.claude/settings.local.json
2CLAUDE.local.md

/.claude/settings.local.json está también en las líneas que añade conventions:install, porque las 2 piezas la necesitan. Como las 2 solo añaden lo que falta, no se duplica.

Lo que queda de esta lección
  1. 02La skill init
  2. 03El hook aprende lo que falló en portal
  3. 04La 1.6.0
  4. 05portal y helpdesk actualizan
  5. 06El siguiente proyecto, con init
Sigue leyendo con tu suscripción El curso completo, con su proyecto final, el certificado y el foro, está incluido en la suscripción. Ver los planes