cursos:sdd:08-skills-agentes
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| cursos:sdd:08-skills-agentes [2026/11/05 22:23] – Renumera el tema y sus referencias tras añadir el tema 7 (AGENTS.md) claude | cursos:sdd:08-skills-agentes [2026/11/06 00:11] (actual) – Ejercicios: nuevo ejercicio 2 (crear una skill y usarla en otra conversación) y ejercicio 3 (crear un agente y lanzarlo en otra conversación) claude | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== 8. Skills y agentes ====== | ====== 8. Skills y agentes ====== | ||
| - | Qué es una //skill// y qué es un subagente en dos líneas está en Conceptos básicos ([[cursos: | + | Las //skills// y los agentes son los dos ficheros markdown con instrucciones, |
| - | ---- | + | Más información: |
| - | + | ||
| - | ===== 1. Qué es una skill ===== | + | |
| - | + | ||
| - | Una //skill// es una carpeta con un fichero de instrucciones que le dice al agente **cómo se hace** una tarea concreta en tu equipo. No es código: es contexto empaquetado y versionado. | + | |
| - | + | ||
| - | <sxh text; | + | |
| - | .opencode | + | |
| - | └── skills | + | |
| - | └── revisar-pr | + | |
| - | ├── SKILL.md | + | |
| - | └── checklist.md | + | |
| - | </ | + | |
| - | + | ||
| - | <sxh markdown; | + | |
| - | --- | + | |
| - | name: revisar-pr | + | |
| - | description: | + | |
| - | --- | + | |
| - | + | ||
| - | # Revisión de pull request | + | |
| - | + | ||
| - | 1. Leer la descripción del PR y comprobar que hay una issue enlazada. | + | |
| - | 2. Revisar contra checklist.md, | + | |
| - | 3. Clasificar cada hallazgo: bloqueante, recomendable o nota. | + | |
| - | 4. No comentar estilo: de eso ya se encarga el formateador. | + | |
| - | </ | + | |
| - | + | ||
| - | Lo que hace que esto escale es **cómo se cargan**: de todas las //skills// instaladas, el agente lleva siempre en contexto solo el nombre y la descripción —dos líneas—, y el cuerpo entra únicamente cuando la tarea encaja. Por eso se pueden tener veinte sin llenar la ventana de contexto. | + | |
| - | + | ||
| - | La **descripción** es lo único que el modelo lee para decidir si la usa: [[# | + | |
| - | + | ||
| - | Dónde viven: | + | |
| - | + | ||
| - | * '' | + | |
| - | * '' | + | |
| - | + | ||
| - | Los comandos ''/ | + | |
| - | **Cuándo escribir una**: cuando algo se repite | + | |
| + | | ||
| + | * [[https:// | ||
| ---- | ---- | ||
| - | ===== 2. Cómo se escribe | + | ===== 1. Qué es una skill ===== |
| - | ==== El frontmatter ==== | + | Una //skill// es un fichero '' |
| - | Dos campos, los dos obligatorios: | + | Se carga **dentro de tu conversación**: el agente lee el skill y sigue trabajando con esas instrucciones. Es decir, llamar a un skill añade más prompt a tu conversación (contexto)., |
| - | * '' | + | ===== 2. Agente principal |
| - | * '' | + | |
| - | <sxh yaml> | + | Un agente es un fichero con las instrucciones para **hacer un trabajo cerrado y devolver un resultado**. En OpenCode, Plan y Build son los agentes // |
| - | # ✅ qué cubre, cuándo usarla | + | |
| - | description: Convenciones de los servicios de Pedidos | + | |
| - | errores de negocio). Usar al escribir, revisar o probar una clase *Service. | + | |
| - | # ❌ no dice cuándo: no se carga nunca | + | El subagente **empieza con el contexto vacío**: solo tiene su fichero y el prompt que le escribe el principal. Al terminar, al principal solo le vuelve su respuesta. |
| - | description: | + | |
| - | # ❌ cuenta el proceso, que va en el cuerpo, y no dice cuándo | + | ===== 3. Dónde se guardan ===== |
| - | description: | + | |
| - | </ | + | |
| - | ==== La carpeta ==== | + | En OpenCode, dentro de '' |
| - | + | ||
| - | Solo el '' | + | |
| <sxh text; | <sxh text; | ||
| .opencode | .opencode | ||
| - | └── skills | + | ├── skills |
| - | └── servicios | + | │ ├── servicios |
| - | ├── SKILL.md | + | │ |
| - | ├── | + | │ |
| - | ├── | + | │ ├── |
| - | ├── | + | │ └── |
| - | ├── | + | └── |
| - | └── | + | ├── |
| + | └── | ||
| </ | </ | ||
| - | * **'' | + | * **Cada //skill// va en su propia carpeta**, con el nombre de la //skill//, y dentro el fichero se llama siempre |
| - | * **'' | + | * **Todos los agentes van en una única carpeta**, |
| - | * **'' | + | |
| - | | + | <note warning>**En '' |
| - | * **'' | + | |
| + | ---- | ||
| - | ==== El SKILL.md ==== | + | ===== 4. El frontmatter ===== |
| - | Detrás del frontmatter, | + | Los dos ficheros |
| - | < | + | < |
| --- | --- | ||
| name: servicios | name: servicios | ||
| Línea 99: | Línea 57: | ||
| errores de negocio). Usar al escribir, revisar o probar una clase *Service. | errores de negocio). Usar al escribir, revisar o probar una clase *Service. | ||
| --- | --- | ||
| + | </ | ||
| - | # servicios | + | <sxh yaml; |
| + | --- | ||
| + | description: | ||
| + | Usar después de escribir o cambiar los tests de una clase *Service, antes del commit. | ||
| + | mode: subagent | ||
| + | permission: | ||
| + | edit: deny | ||
| + | --- | ||
| + | </ | ||
| - | Reglas de las clases `*Service` del servidor. | + | En la //skill//: |
| - | ## Índice | + | * '' |
| + | * '' | ||
| - | | Fichero | Qué contiene | | + | En el agente no hay '' |
| - | |---|---| | + | |
| - | | `transacciones.md` | Qué métodos son transaccionales y cómo | | + | |
| - | | `templates/ | + | |
| - | ## Convenciones | + | * '' |
| + | * '' | ||
| + | * '' | ||
| - | - Un servicio por agregado: `PedidoService`, | + | ==== La descripción ==== |
| - | - Valida al entrar y lanza `ErrorDeNegocio` con el código de `specs/`. | + | |
| - | - No devuelve entidades: devuelve DTOs. | + | |
| - | ## Ejemplos | + | **La '' |
| - | - ✅ `throw new ErrorDeNegocio(" | + | Tiene que decir **qué hace y cuándo usarlo**, con las palabras con las que se pedirá la tarea: |
| - | - ❌ `throw new IllegalStateException(" | + | |
| - | ## Nunca | + | <sxh yaml> |
| + | # ✅ qué cubre, cuándo usarla y con qué palabras se pide | ||
| + | description: | ||
| + | errores de negocio). Usar al escribir, revisar o probar una clase *Service. | ||
| - | - Llamar a un repositorio de otro agregado: se pasa por su servicio. | + | # ❌ no dice cuándo: no se carga nunca |
| - | </ | + | description: |
| - | ==== Cómo se redacta ==== | + | # ❌ cuenta |
| - | + | description: Primero lee el servicio, luego revisa las transacciones | |
| - | Una //skill// se lee **para | + | |
| - | + | ||
| - | * **La prueba de cada línea**: ¿cambiaría lo que hace el modelo si la quito? Si no, sobra. | + | |
| - | * **Nada que ya sepa**: qué es JPA o cómo funciona git. Solo lo propio del proyecto. | + | |
| - | * **Nada que se deduzca del código**: la lista de clases o de paquetes se queda vieja; se dice dónde mirarla. | + | |
| - | * **Listas, no párrafos**: | + | |
| - | * **Ejemplos ✅/❌**, y cada ❌ con su porqué entre paréntesis. Si una regla cabe en un ejemplo, va como ejemplo. | + | |
| - | * **Números, | + | |
| - | * **'' | + | |
| - | * **Cada regla en un solo fichero**: los demás la citan con un puntero, no la repiten. | + | |
| - | * **Máximo unas 2.500 palabras por fichero**: si pasa, se parte por temas. | + | |
| - | + | ||
| - | ==== Scripts ==== | + | |
| - | + | ||
| - | Lo que es determinista (validar un fichero, calcular una tabla, contar) va en un script de '' | + | |
| - | + | ||
| - | * Se cita con **el comando exacto** y la palabra «ejecuta». | + | |
| - | <sxh markdown> | + | |
| - | ✅ Ejecuta `python3 .claude/ | + | |
| - | ❌ Lee scripts/ | + | |
| - | ❌ Usa el script de transacciones. | + | |
| </ | </ | ||
| - | * **Los errores dicen cómo arreglarlo**: | ||
| - | * **Lo que necesita** (intérprete, | ||
| ---- | ---- | ||
| - | ===== 3. AGENTS.md | + | ===== 5. Skill o agente |
| + | |||
| + | ^ ^ Skill ^ Agente ^ | ||
| + | | Dónde trabaja | En tu conversación | En un contexto nuevo, vacío | | ||
| + | | Qué ve | Todo lo que habéis hablado | Solo su fichero y el prompt que le pasan | | ||
| + | | Qué queda en tu contexto | Todo lo que lee y hace | Solo su respuesta | | ||
| + | | Para qué | Saber cómo se hace algo en el proyecto o seguir un procedimiento contigo | Encargar un trabajo y recibir un resultado | | ||
| - | '' | + | Como ya hemos visto en ambos casos hay unas instrucciones |
| - | ==== Pequeño: | + | <note tip> |
| + | La única diferencia real entre skill y agente es que el agente lanza un nuevo " | ||
| + | </ | ||
| - | Como se paga en cada petición, '' | + | Y ahora viene lo más interesante: |
| <sxh text; | <sxh text; | ||
| - | AGENTS.md | ||
| .opencode | .opencode | ||
| - | └── skills | + | ├── skills |
| - | | + | │ |
| - | | + | │ |
| - | | + | │ └── |
| - | │ └── SKILL.md | + | │ |
| - | ├── arquitectura | + | └── |
| - | | + | ├── |
| - | │ ├── | + | └── |
| - | │ | + | |
| - | └── | + | |
| - | ├── | + | |
| - | | + | |
| - | | + | |
| </ | </ | ||
| - | Las que tiene que haber como mínimo: | + | **Ejemplo 1: cómo se hace un '' |
| - | * '' | + | < |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | + | ||
| - | Si hay varias arquitecturas, | + | |
| - | + | ||
| - | < | + | |
| --- | --- | ||
| - | name: arquitectura | + | name: repository-jpa |
| - | description: | + | description: |
| - | | + | o modificar una interfaz *Repository. |
| --- | --- | ||
| - | # Arquitectura | + | # Repositorios JPA |
| - | - Un paquete por funcionalidad (`pedidos`, `clientes`), no por capa. | + | - La interfaz extiende |
| - | - Los controladores solo validan y delegan: la lógica va en los servicios. | + | - Los métodos derivados se llaman |
| - | + | se escribe con `@Query` en JPQL. Nunca SQL nativo. | |
| - | Lee además | + | - Las búsquedas que pueden devolver muchas filas reciben `Pageable` y devuelven |
| + | - Las consultas usan `JOIN FETCH` para las relaciones que se van a leer. | ||
| </ | </ | ||
| - | '' | + | <sxh yaml; |
| + | --- | ||
| + | description: | ||
| + | o modificar | ||
| + | mode: subagent | ||
| + | --- | ||
| - | <sxh markdown; | + | # Repositorios JPA |
| - | # Pedidos | + | |
| - | API REST de pedidos con cliente web. Compilar | + | - La interfaz extiende `JpaRepository< |
| - | + | - Los métodos derivados se llaman | |
| - | ## Skills del proyecto | + | se escribe con `@Query` en JPQL. Nunca SQL nativo. |
| - | + | - Las búsquedas que pueden devolver muchas filas reciben | |
| - | Antes de empezar, lee la skill que necesite la tarea: | + | - Las consultas usan `JOIN FETCH` para las relaciones que se van a leer. |
| - | + | ||
| - | - `.claude/ | + | |
| - | - `.claude/ | + | |
| - | - `.claude/ | + | |
| - | - `.claude/ | + | |
| </ | </ | ||
| - | <note important> | + | **Ejemplo 2: generar los tests de una clase.** El fichero dice **cómo hacer un trabajo cerrado** del que interesa el resultado: el test terminado |
| - | Cómo generar | + | <sxh yaml; |
| + | --- | ||
| + | name: generar-tests | ||
| + | description: | ||
| + | y la deja pasando. Usar cuando se pida crear los tests de una clase. | ||
| + | --- | ||
| - | ==== CLAUDE.md: no usarlo ==== | + | # Generar tests |
| - | <note important>Existe también '' | + | 1. Lee la clase y apunta sus métodos públicos. |
| + | 2. Escribe `<Clase>Test` en `src/ | ||
| + | al menos un test por método público y uno por cada `ErrorDeNegocio` que lance. | ||
| + | 3. Ejecuta `mvn test -Dtest=< | ||
| + | 4. Si algún test falla, corrígelo | ||
| + | 5. Termina diciendo | ||
| + | </sxh> | ||
| - | Como basta con que alguien cree un '' | + | <sxh yaml;title:.opencode/ |
| + | --- | ||
| + | description: | ||
| + | y la deja pasando. Usar cuando se pida crear los tests de una clase. | ||
| + | mode: subagent | ||
| + | --- | ||
| - | <sxh java; | + | # Generar tests |
| - | class SinClaudeMdTest { | + | |
| - | @Test | + | 1. Lee la clase y apunta sus métodos públicos. |
| - | void noHayNingunClaudeMd() throws IOException { | + | 2. Escribe `<Clase>Test` en `src/test/java`, con JUnit 5 y Mockito para las dependencias: |
| - | try (Stream< | + | al menos un test por método público y uno por cada `ErrorDeNegocio` que lance. |
| - | List<Path> claudeMd = ficheros | + | 3. Ejecuta `mvn test -Dtest=< |
| - | .filter(f -> !f.startsWith(" | + | 4. Si algún test falla, corrígelo y vuelve a ejecutar hasta que pasen todos. |
| - | .filter(f | + | 5. Termina diciendo el fichero creado, cuántos tests tiene y si pasan. |
| - | .toList(); | + | |
| - | + | ||
| - | assertThat(claudeMd) | + | |
| - | .as(" | + | |
| - | .isEmpty(); | + | |
| - | } | + | |
| - | } | + | |
| - | } | + | |
| </ | </ | ||
| - | ---- | + | El cuerpo del fichero es el **prompt** que se carga, igual en la //skill// que en el agente: en la //skill// se añade a tu conversación y en el agente va a un contexto nuevo. Lo que escribes tú para que arranque también es lo mismo en los dos casos: para el ejemplo 1, «Crea el repository de '' |
| - | ===== 4. Cómo se organiza AGENTS.md ===== | + | ==== Ejemplo 1 como skill ==== |
| - | La [[# | + | Es lo que debería ser. El fichero se carga en tu conversación y el agente principal escribe |
| - | ==== Qué entra ==== | + | ==== Ejemplo 1 como agente |
| - | El agente **obedece** lo que pone el fichero: en el [[https:// | + | No pasa absolutamente nada. El principal lanza el agente, que arranca con el contexto vacío y lee su fichero. Y en ese fichero |
| - | * **Una frase** con qué es el proyecto. | + | En el mejor de los casos, el agente devuelve las reglas en su respuesta |
| - | * **Órdenes** para compilar, probar | + | |
| - | * **Convenciones que se apartan de lo normal**: las que el agente no adivinaría leyendo el código. | + | |
| - | * **Límites**: | + | |
| - | * **El índice de //skills//**, con cuándo leer cada una. | + | |
| - | + | ||
| - | Fuera: la descripción general del proyecto, | + | |
| - | + | ||
| - | <note important> | + | |
| - | + | ||
| - | <sxh markdown; | + | |
| - | # Pedidos | + | |
| - | + | ||
| - | API REST de pedidos con cliente web. | + | |
| - | + | ||
| - | ## Órdenes | + | |
| - | - Compilar y probar: `./mvnw verify` | + | |
| - | - Solo los tests del servidor: `./mvnw -pl servidor test` | + | |
| - | + | ||
| - | ## Convenciones | + | |
| - | - Los importes son `BigDecimal` con escala 2; nunca `double`. | + | |
| - | - Los errores de negocio heredan de `ErrorDeNegocio`; | + | |
| - | - Cada requisito de `specs/` tiene al menos un test que cita su identificador (`R-12`). | + | |
| - | + | ||
| - | ## Límites | + | |
| - | - No modifiques una migración ya aplicada: crea una nueva. | + | |
| - | - Pregunta antes de añadir una dependencia o de cambiar un requisito de `specs/`. | + | |
| - | + | ||
| - | ## Skills del proyecto | + | |
| - | Explora primero el código que toca la tarea. Después lee la skill que necesite: | + | |
| - | - `.claude/ | + | |
| - | - `.claude/ | + | |
| - | - `.claude/ | + | |
| - | - `.claude/ | + | |
| - | </ | + | |
| - | Cabe en una pantalla, y así tiene que seguir: **menos de 200 líneas**, mejor menos de 60. Cada instrucción de más hace que el modelo cumpla peor todas las demás, no solo la nueva. | + | ==== Ejemplo 2 como agente ==== |
| - | ==== Dónde va lo demás ==== | + | Es lo que debería ser. El principal lanza el agente con «Genera los tests de '' |
| - | ^ Qué es ^ Dónde va ^ Ejemplo | + | ==== Ejemplo |
| - | | Lo que vale en todas las tareas | '' | + | |
| - | | Lo que vale solo en una carpeta | '' | + | |
| - | | El detalle que solo hace falta en algunas tareas | Una //skill// | '' | + | |
| - | | Un procedimiento que se lanza para una tarea concreta | Una //skill// | '' | + | |
| - | | Lo que tiene que cumplirse siempre | Un test, el linter o un //hook// | '' | + | |
| - | * **'' | + | El trabajo también se hace, y se hace igual de bien: el principal carga el fichero |
| - | | + | |
| - | ==== Cómo se escriben las referencias ==== | ||
| - | Cada referencia lleva **la ruta entre comillas invertidas** y **cuándo leerla**. Nunca con '' | + | ==== Resumen ==== |
| - | ^ Referencia | + | ^ ^ Como skill ^ Como agente |
| - | | '' | + | | Ejemplo 1: cómo se hace un repository JPA | ✓ Las reglas se quedan y valen para el resto de la conversación |
| - | | '' | + | | Ejemplo 2: generar los tests de una clase | Funciona, pero los ficheros leídos, las salidas de '' |
| - | | '' | + | |
| - | <note warning> | + | ==== Un caso especial ==== |
| - | La condición se escribe con **las palabras con las que se pedirá la tarea** («antes de escribir o revisar una especificación»), | + | ¿Y si lanzas como // |
| - | Lo mismo vale para la '' | + | Piensa qué tienes: un contexto vacío al que se le añade el fichero y tu mensaje, trabaja, y lo que haya acumulado desaparece al cerrar porque nadie sigue hablando ahí. **Es exactamente un agente**, con la diferencia |
| ---- | ---- | ||
| - | ===== 5. Agente principal y subagentes | + | ===== 6. El SKILL.md |
| - | En este curso los agentes aparecen | + | Una //skill// **no lleva entradas ni salida**: trabaja dentro |
| - | * **El agente principal**: el que habla contigo. En [[cursos: | + | <sxh markdown; |
| - | | + | --- |
| + | name: servicios | ||
| + | description: Convenciones de los servicios de Pedidos (transacciones, | ||
| + | | ||
| + | --- | ||
| - | ---- | + | # servicios |
| - | ===== 6. Skill o agente ===== | + | Reglas de las clases `*Service` del servidor. |
| - | Una //skill// y un agente son los dos un markdown con frontmatter, | + | ## Convenciones |
| - | ^ Qué es ^ Skill ^ Agente ^ | + | - Un servicio por agregado: `PedidoService`, no `PedidoLineaService`. |
| - | | Convenciones, | + | - Valida al entrar |
| - | | Ejemplos ✅/❌, plantillas, documentación de terceros que usa más de un agente | ✓ | | | + | - No devuelve entidades: devuelve DTOs. |
| - | | Procedimiento de una tarea sin delegar («cómo se revisa un PR aquí») | ✓ | | | + | |
| - | | Rol, sesgo que evitar y criterio de bien o mal | | ✓ | | + | |
| - | | Herramientas permitidas y modelo | | ✓ | | + | |
| - | | Lanzar subagentes y juntar lo que devuelven | | ✓ | | + | |
| - | | Cuándo para: límite de vueltas y condiciones de parada | | ✓ | | + | |
| - | | Formato cerrado de la respuesta ('' | + | |
| - | | '' | + | |
| - | | Ejecutar scripts | ✓ | ✓ | | + | |
| - | Así que un agente no lleva las convenciones del proyecto: dice qué //skill// cargar. Tiene [[#la_carpeta_del_agente|la misma carpeta que una // | + | ## Ejemplos |
| - | <sxh markdown> | + | - ✅ `throw new ErrorDeNegocio(" |
| - | ✅ Antes de revisar, carga la skill servicios. | + | - ❌ `throw new IllegalStateException("No se puede" |
| - | ❌ Los servicios lanzan ErrorDeNegocio, | + | |
| </ | </ | ||
| - | < | + | Cómo se organiza por dentro |
| ---- | ---- | ||
| - | ===== 7. El cuerpo | + | ===== 7. El fichero |
| - | Las instrucciones del agente | + | Un agente |
| - | * **Rol**: quién es y **qué sesgo evita**. Un revisor que no se fía del resumen de quien implementó. | + | * **''## |
| - | * **Entradas**: lo que le llega en el prompt, con nombre. | + | * **''## |
| - | * **Proceso**: | + | * **''## |
| - | * **Criterios**: cuándo está bien, cuándo mal y qué hace **en la duda: fallar**. | + | |
| - | * **Salida**: | + | |
| - | <sxh markdown> | + | <sxh markdown; |
| - | # Verificador | + | --- |
| + | description: | ||
| + | Usar después de escribir o cambiar los tests de una clase *Service, antes del commit. | ||
| + | mode: subagent | ||
| + | permission: | ||
| + | edit: deny | ||
| + | --- | ||
| - | Comprueba que cada requisito | + | # Revisor |
| - | ## Rol | + | Revisas los tests de una clase. No arreglas nada: solo dices qué está mal. |
| - | Eres un verificador. No arreglas nada: solo dices qué falta. | + | |
| - | No te fíes del resumen de quien implementó: | + | |
| ## Entradas | ## Entradas | ||
| + | |||
| Te llegan en el prompt: | Te llegan en el prompt: | ||
| - | - `spec`: ruta del fichero | + | - `clase`: ruta de la clase que se prueba. |
| - | - `modulo`: módulo Maven donde están los tests. | + | - `test`: ruta de su clase de test. |
| ## Proceso | ## Proceso | ||
| - | 1. Saca los identificadores de la spec (`R-1`, `R-2`...). | ||
| - | 2. Busca en `src/test` el test que cita cada uno. | ||
| - | 3. Ejecuta `./mvnw -pl < | ||
| - | ## Criterios | + | 1. Lee `clase` |
| - | - OK: todos los requisitos tienen un test que lo cita y todos pasan. | + | 2. Lee `test` y busca al menos un test por cada método público. |
| - | - Fallo: un requisito sin test o un test que falla. | + | 3. Comprueba |
| - | - En la duda: fallo. | + | de producción (el IVA escrito a mano en vez de leerlo). |
| + | 4. En la duda, cuéntalo como problema. | ||
| ## Salida | ## Salida | ||
| - | Primera línea, exactamente `DONE` o `BLOCKED`. | ||
| - | Si es `BLOCKED`, una línea por problema: `R-12: sin test`. | ||
| - | </ | ||
| - | <note important> | + | La primera línea es exactamente `PASS` |
| - | + | Con `FAIL`, debajo, una línea por problema con el formato | |
| - | En el frontmatter de las dos herramientas hay tres decisiones que se toman igual: | + | - `fichero`: ruta relativa |
| - | + | - `inicio-fin`: las líneas donde está el problema. Si es una sola, `42-42`. | |
| - | * **'' | + | - `descripcion`: |
| - | * **Herramientas**: | + | |
| - | * **Modelo**: si no se pone, el del principal. Lo mecánico (verificar, contar, comprobar un formato) con el más barato: el principal no lo baja solo y gasta el caro. Lo que juzga, diseña o corrige, con el del principal. | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | ===== 8. La carpeta del agente ===== | + | |
| - | + | ||
| - | Un agente es **una carpeta con la misma estructura que una // | + | |
| - | + | ||
| - | <sxh text;gutter:false> | + | |
| - | .claude/ | + | |
| - | ├── AGENT.md | + | |
| - | ├── cobertura.md | + | |
| - | ├── agents/ | + | |
| - | │ | + | |
| - | ├── templates/ | + | |
| - | │ | + | |
| - | ├── examples/ | + | |
| - | │ | + | |
| - | ├── references/ | + | |
| - | │ | + | |
| - | ├── scripts/ | + | |
| - | │ | + | |
| - | ├── assets/ | + | |
| - | │ | + | |
| - | └── evals/ | + | |
| - | └── requisito-sin-test/ | + | |
| </ | </ | ||
| - | * **'' | + | <note important>**Lo que no está en '' |
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | La tabla índice del '' | + | ==== La salida: PASS o FAIL ==== |
| - | <sxh markdown; | + | El agente termina con **una sola palabra en la primera línea**: '' |
| - | # Verificador de tests | + | |
| - | Comprueba que cada requisito de la spec está cubierto | + | Con '' |
| - | ## Índice | + | <sxh markdown> |
| - | + | FAIL | |
| - | | Fichero | Qué contiene | Cuándo cargarlo | | + | src/test/java/com/tienda/ |
| - | |---|---|---| | + | src/test/java/com/tienda/PedidoServiceTest.java: |
| - | | `.claude/agents/verificador-tests/cobertura.md` | Cuándo un test cubre un requisito | Si un test no cita el identificador | | + | src/main/java/com/tienda/PedidoService.java: |
| - | | `.claude/agents/verificador-tests/agents/juez.md` | Rol del juez | Al lanzar | + | |
| - | | `.claude/agents/verificador-tests/templates/informe.md` | Formato del informe | Al escribir la salida | | + | |
| - | + | ||
| - | ## Rol | + | |
| - | ... | + | |
| </ | </ | ||
| - | <note important> | + | <sxh markdown> |
| - | + | PASS | |
| - | ---- | + | |
| - | + | ||
| - | ===== 9. Crear un agente en OpenCode ===== | + | |
| - | + | ||
| - | Va en '' | + | |
| - | + | ||
| - | <note warning> | + | |
| - | + | ||
| - | <sxh markdown; | + | |
| - | --- | + | |
| - | description: | + | |
| - | que pasa. Usar después de implementar una funcionalidad, | + | |
| - | mode: subagent | + | |
| - | model: anthropic/ | + | |
| - | permission: | + | |
| - | edit: deny | + | |
| - | bash: | + | |
| - | " | + | |
| - | " | + | |
| - | --- | + | |
| - | + | ||
| - | Antes de empezar, carga la skill requisitos. | + | |
| - | + | ||
| - | Lee `.claude/ | + | |
| </ | </ | ||
| - | |||
| - | * **'' | ||
| - | * **'' | ||
| - | * **'' | ||
| - | * **La //skill//** no se puede cargar desde el frontmatter: | ||
| - | |||
| - | Como principal, se pone '' | ||
| ---- | ---- | ||
| - | ===== 10. Crear un agente en Claude Code ===== | + | ===== Ejercicios |
| - | Va en '' | + | ==== Ejercicio 1 ==== |
| - | <sxh markdown; | + | Di si cada tarea se hace con una //skill// o con un agente, |
| - | --- | + | |
| - | name: verificador-tests | + | |
| - | description: | + | |
| - | que pasa. Usar después de implementar una funcionalidad, | + | |
| - | tools: Read, Grep, Bash | + | |
| - | model: haiku | + | |
| - | skills: | + | |
| - | - requisitos | + | |
| - | --- | + | |
| - | # Verificador | + | ^ Tarea ^ Skill o agente ^ Por qué ^ |
| + | | Las convenciones | ||
| + | | Comprobar que cada requisito de '' | ||
| + | | Cómo se escribe un mensaje de commit en el equipo | | | | ||
| + | | Revisar el servicio que se acaba de escribir | | | | ||
| - | Comprueba que cada requisito de la spec está cubierto por un test que pasa. | + | ==== Ejercicio 2 ==== |
| - | ## Índice | + | Escribe la //skill// '' |
| - | ... | + | |
| - | </sxh> | + | |
| - | | + | Abre **una conversación nueva** y pide «crea |
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | Como principal, para que toda la sesión siga su rol y pueda coordinar a otros: | + | ==== Ejercicio 3 ==== |
| - | + | ||
| - | <sxh bash> | + | |
| - | claude --agent orquestador | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | ===== Fuentes ===== | + | Escribe el agente '' |
| - | | + | Abre **una conversación nueva** y lánzalo con '' |
| - | | + | |
| - | | + | |
| - | | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
cursos/sdd/08-skills-agentes.1793913808.txt.gz · Última modificación: por claude
