clase:daw:daw-proyecto:tema02
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| clase:daw:daw-proyecto:tema02 [2026/10/14 09:55] – Coherencia del flujo: /revisar-ci, npm run test:api|test:e2e, scripts arrancar/parar/estado/logs también en el servidor (sin manage.sh), tests y revisión de calidad en su fase claude | clase:daw:daw-proyecto:tema02 [2026/10/15 07:02] (actual) – [Claude Code y OpenCode] Lorenzo | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== 2. Git en el proyecto | + | ====== 2. IA y agentes |
| - | Objetivo del tema: que nadie vuelva a escribir | + | Objetivo del tema: saber qué es lo que se va a usar durante todo el módulo. Es un repaso rápido |
| - | Lo que ya sabéis y aquí no se repite: | + | ===== Qué es un agente ===== |
| - | | + | Un **modelo |
| - | | + | |
| - | * Scrum y los tableros de GitHub: [[clase: | + | |
| - | ===== Git en Windows ===== | + | El bucle es siempre el mismo: |
| - | En Linux y Mac, git viene con bash. En Windows, el instalador de Git ([[https:// | + | - Recibe una petición |
| + | - Decide qué herramienta usar (leer '' | ||
| + | - Ejecuta la herramienta y el resultado entra en la conversación. | ||
| + | - Con lo que ha visto, decide la siguiente (editar el fichero, lanzar | ||
| + | - Repite hasta que considera que ha terminado, y responde. | ||
| - | {{:clase: | + | Dos consecuencias que explican casi todo lo que viene después: |
| - | Elegir | + | |
| + | * **Lo que el agente puede hacer es lo que sus herramientas y sus permisos le dejan.** Por eso en este módulo | ||
| - | {{:clase:daw:daw-proyecto: | + | El detalle, con los tipos de agente que existen, está en [[cursos:sdd:02-skills-agentes-mcp# |
| - | Elegir **«Only ever fast-forward»**. En este módulo nunca se hace '' | + | ===== Claude Code y OpenCode ===== |
| - | ===== El repositorio y el agente ===== | + | Son los dos agentes de terminal que se usan en el módulo. Se abren en la carpeta del proyecto, leen sus instrucciones fijas y, a partir de ahí, se habla con ellos. Hacen lo mismo con nombres distintos: |
| - | Antes de la primera skill hay que dejar el repositorio | + | ^ ^ Claude Code ^ OpenCode ^ |
| + | | Instrucciones fijas del proyecto | '' | ||
| + | | Skills | '' | ||
| + | | Modo plan: solo lee, no toca código | '' | ||
| + | | Cambiar de modelo | ''/ | ||
| + | | Ver cuánto contexto va usado | ''/ | ||
| + | | Vaciar la conversación | ''/ | ||
| + | | Permisos | ''/ | ||
| + | | Servidores MCP | '' | ||
| - | ==== El repositorio | + | Se usa cualquiera de los dos, y todo lo del proyecto |
| - | Un único repositorio en GitHub, creado desde cero por cada alumno, con el backend y el frontend dentro: | ||
| - | < | + | * Modos de Claude |
| - | mi-proyecto/ | + | |
| - | ├── backend/ | + | |
| - | ├── frontend/ | + | |
| - | ├── compose.yaml | + | |
| - | ├── compose.override.yaml | + | |
| - | ├── arrancar.sh, | + | |
| - | ├── estado.sh, logs.sh | + | |
| - | ├── planes/ | + | |
| - | ├── docs/ <- detalle para el agente, si hace falta | + | |
| - | ├── AGENTS.md | + | |
| - | ├── CLAUDE.md | + | |
| - | ├── .claude/ | + | |
| - | │ | + | |
| - | │ | + | |
| - | └── .github/ | + | |
| - | </code> | + | |
| - | La estructura interna de '' | + | ^ Modo ^ Leer ^ Editar en la propia carpeta ^ Comandos simples (mkdir, mv, cp, rm…) ^ Todo el resto ^ |
| + | | **Manual** | ✅ | Pregunta | Pregunta | Pregunta | | ||
| + | | **Accept Edits** | ✅ | ✅ | ✅ | Pregunta | | ||
| + | | **Plan** | ✅ | No edita en modo plan | ✅ (revisado por el clasificador) | Pregunta | | ||
| + | | **Auto** | ✅ | ✅ | ✅ | ✅ (revisado por el clasificador; | ||
| - | <note important> | + | |
| - | === Las dos ramas === | + | ^ Modo ^ Leer ^ Editar en la propia carpeta ^ Comandos simples ^ Todo el resto ^ |
| + | | Build | ✅ | ✅ | ✅ | ✅ (sin revisión; solo pregunta al leer .env o salir del workspace) | | ||
| + | | Plan | ✅ | Denegado (solo escribe en ~/ | ||
| + | ===== El contexto ===== | ||
| - | El proyecto | + | El **contexto** es todo lo que el modelo |
| - | * '' | + | * **Es limitado y se llena.** Cuando está lleno, el agente trabaja peor y cada petición cuesta más. |
| - | * '' | + | * **Lo que no está en el contexto no existe para el agente.** Y lo que está de más, estorba: un log de doscientas líneas pegado entero tapa las tres que importan. |
| - | Se crean las dos en el primer commit y se cambia la rama por defecto en GitHub (//Settings → General → Default branch//) o con '' | + | De aquí sale la regla de oro del módulo, que ya aparecía |
| - | <sxh bash> | + | ===== Skills |
| - | git switch -c develop | + | |
| - | git push -u origin develop | + | |
| - | gh repo edit --default-branch develop | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Instrucciones para el agente: AGENTS.md | + | |
| - | + | ||
| - | '' | + | |
| - | + | ||
| - | <sxh plain; | + | |
| - | @AGENTS.md | + | |
| - | </ | + | |
| - | + | ||
| - | Así los dos agentes leen exactamente lo mismo y solo hay un fichero que mantener. | + | |
| - | + | ||
| - | Lo que va dentro, y nada más: | + | |
| - | + | ||
| - | * **Qué es el proyecto**, en dos líneas. | + | |
| - | * **Cómo se compila, arranca y prueba**: los comandos exactos. En el tema 3 se añade dónde corren Maven y Playwright. | + | |
| - | * **Reglas del proyecto** que el agente tiene que respetar siempre: las ramas, que git se maneja con ''/ | + | |
| - | + | ||
| - | <note tip> | + | |
| - | + | ||
| - | ==== Skills en este proyecto ==== | + | |
| - | + | ||
| - | Qué es una skill y cómo se escribe su '' | + | |
| - | | + | Una **skill** es un fichero de instrucciones |
| - | * **Dos tipos**. Las **de tarea** | + | |
| - | * **'' | + | |
| - | <sxh yaml> | + | <sxh yaml; |
| --- | --- | ||
| - | name: estado | + | name: hola |
| - | description: | + | description: |
| - | allowed-tools: | + | |
| --- | --- | ||
| + | Saluda en castellano a la persona cuyo nombre llega en $ARGUMENTS. | ||
| + | Si no llega ningún nombre, pregúntalo. | ||
| </ | </ | ||
| - | '' | + | Lo que importa de cada parte: |
| - | ==== Permisos del agente: lo básico ==== | + | * **'' |
| + | * **El cuerpo** es el procedimiento, | ||
| + | * **'' | ||
| - | El agente pide permiso antes de ejecutar comandos o escribir | + | Cómo escribir |
| - | * **Claude Code**: ''/ | + | ===== MCP ===== |
| - | <sxh json; | + | Un **MCP** (//Model Context Protocol//) es un servidor que da al agente |
| - | { | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | ], | + | |
| - | " | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | | + | La diferencia con una skill: la skill es **conocimiento** (cómo se hace algo aquí); el MCP es **capacidad** (poder hacer algo que antes no podía). En el módulo se usan dos y ninguno más, Context7 y Playwright, y se configuran en el tema 5. |
| - | En el tema 4 se completa la lista con lo que haga falta para programar. | + | ===== Subagentes y bucles ===== |
| + | Un agente puede lanzar **otro agente** para una parte del trabajo: un **subagente**, | ||
| - | ===== Issues | + | * **Mantener limpio el contexto principal.** Buscar en qué ficheros se usa una clase lleva leer veinte; el subagente los lee y devuelve una lista de tres líneas. |
| + | * **Especializar.** Un subagente que solo revisa, con instrucciones de revisor y sin permiso para editar, no se deja llevar por lo que acaba de escribir. Un agente que revisa su propio código tiende a darlo por bueno; **otro agente, con otro contexto, no**. | ||
| - | Todo trabajo empieza por un **issue**. El issue es la unidad: de él sale la rama, su número va en los commits | + | Con subagentes se montan |
| - | El tablero es un **GitHub Project** del repositorio | + | En este módulo el bucle no está dentro de una herramienta: |
| - | Etiquetas: '' | + | El resto de patrones (pipeline, orquestador, |
| - | Los issues se crean desde la web o con '' | + | ===== Lo que el agente no decide ===== |
| - | <sxh bash> | + | Todo lo anterior hace el trabajo; nada de lo anterior decide |
| - | gh issue create --title "Alta de clientes" | + | |
| - | gh issue list | + | |
| - | gh issue view 12 | + | |
| - | </ | + | |
| - | + | ||
| - | ===== Las ramas de este proyecto ===== | + | |
| - | + | ||
| - | El modelo de ramas de Despliegue 2 tiene '' | + | |
| - | + | ||
| - | * '' | + | |
| - | * '' | + | |
| - | + | ||
| - | Y por cada issue, una **rama | + | |
| - | + | ||
| - | ^ Cosa ^ Nombre ^ Ejemplo ^ | + | |
| - | | Rama | ''< | + | |
| - | | Worktree | '' | + | |
| - | + | ||
| - | El número del issue en el nombre de la rama hace que la skill sepa siempre a qué issue pertenece, sin preguntarlo. | + | |
| - | + | ||
| - | **Sin pull requests.** En un proyecto individual nadie va a revisar el PR, así que es un trámite | + | |
| - | + | ||
| - | ===== El ciclo de una rama ===== | + | |
| - | + | ||
| - | - **Iniciar**: | + | |
| - | - **Trabajar** en el worktree. Commits pequeños con '' | + | |
| - | - **Actualizar**: | + | |
| - | - **Finalizar**: | + | |
| - | - **Publicar**: | + | |
| - | + | ||
| - | Por qué '' | + | |
| - | + | ||
| - | ==== El commit que cierra | + | |
| - | + | ||
| - | GitHub cierra un issue automáticamente cuando llega a la **rama por defecto** un commit cuyo mensaje contiene '' | + | |
| - | + | ||
| - | < | + | |
| - | feat(#12): Alta de clientes | + | |
| - | + | ||
| - | Closes #12 | + | |
| - | </ | + | |
| - | + | ||
| - | Al hacer push de '' | + | |
| - | + | ||
| - | ===== Reglas para que la IA toque git ===== | + | |
| - | + | ||
| - | Una skill que ejecuta git puede hacer daño si improvisa. Estas reglas van en la skill y no se negocian: | + | |
| - | + | ||
| - | * **Nunca '' | + | |
| - | * **Nunca '' | + | |
| - | * **Nunca resolver un conflicto**. Si un merge da conflicto, la skill **se para**, enseña '' | + | |
| - | * **La carpeta principal siempre en '' | + | |
| - | * **Una operación por invocación**: | + | |
| - | * **'' | + | |
| - | + | ||
| - | ===== La skill /git-flow ===== | + | |
| - | + | ||
| - | Se parte de la skill que ya enlaza Despliegue 2, {{ : | + | |
| - | + | ||
| - | * Quitar '' | + | |
| - | + | ||
| - | ^ Operación ^ Qué hace ^ | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | + | ||
| - | * El nombre | + | |
| - | * Añadir '' | + | |
| - | * '' | + | |
| - | + | ||
| - | En el tema 3 '' | + | |
| - | + | ||
| - | < | + | |
| ===== Ejercicios ===== | ===== Ejercicios ===== | ||
| - | Todos los ejercicios se hacen en el repositorio del tema 1. Desde el ejercicio 5, ningún comando de git se escribe a mano. | ||
| ==== Ejercicio 1 ==== | ==== Ejercicio 1 ==== | ||
| - | * Escribe | + | * Instala Claude Code y OpenCode siguiendo el curso. Abre cada uno en una carpeta vacía y pídele que cree un '' |
| - | * Crea '' | + | * Con '' |
| - | * Abre una conversación | + | |
| ==== Ejercicio 2 ==== | ==== Ejercicio 2 ==== | ||
| - | * Crea la rama '' | + | * Crea la skill '' |
| - | * Ponla como rama por defecto en GitHub con '' | + | * Cambia |
| - | * Comprueba en la web del repositorio que al entrar se ve '' | + | |
| ==== Ejercicio 3 ==== | ==== Ejercicio 3 ==== | ||
| - | * Escribe la skill ''/ | + | * En Claude Code, pídele |
| - | * Pon en '' | + | * Pídele |
| - | * Pruébala en Claude Code y en OpenCode. | + | |
| - | * Crea '' | + | |
| - | * Haz commit | + | |
| - | + | ||
| - | ==== Ejercicio 4 ==== | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | * Crea con '' | + | |
| - | + | ||
| - | ==== Ejercicio 5 ==== | + | |
| - | * Descarga {{ : | + | |
| - | * Pide al agente que la adapte a este proyecto: quitar '' | + | |
| - | * Pide que añada la operación '' | + | |
| - | * Añade a '' | + | |
| - | * Lee la skill entera y comprueba | + | |
| - | + | ||
| - | ==== Ejercicio 6 ==== | + | |
| - | * ''/ | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | * ''/ | + | |
| - | + | ||
| - | ==== Ejercicio 7 ==== | + | |
| - | * ''/ | + | |
| - | * Con la carpeta principal | + | |
clase/daw/daw-proyecto/tema02.1791964550.txt.gz · Última modificación: por claude
