Files
agents_and_robots/dev/issues/0032-e2e-create-agent-skill.md
T
egutierrez acbc8ef629 chore: agregar issues 0026-0032 y worktrees a gitignore
Registra los nuevos issues pendientes en el indice y excluye
la carpeta worktrees/ del control de versiones.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 23:05:47 +00:00

7.5 KiB

0032 — E2E: verificar skill /create-agent con agente de prueba

Objetivo

Crear un agente de prueba con personalidad muy marcada usando la skill /create-agent y escribir tests E2E con Playwright que verifiquen que el agente se creo correctamente y responde en Matrix con la personalidad esperada. Esto valida el pipeline completo: scaffold → build → register → verify → respuesta funcional.

Contexto

  • La skill /create-agent existe en .claude/skills/create-agent/ y ejecuta create-full.sh internamente
  • Ya hay E2E tests para assistant-bot y asistente-2 en e2e/tests/
  • Los tests E2E usan Playwright contra Element Web + homeserver real
  • No hay tests que validen el pipeline de creacion de agentes — solo se testean agentes ya existentes
  • El agente de prueba tendra una personalidad exagerada y facilmente verificable (ej: habla como pirata, responde siempre con rimas, etc.) para que los assertions sean robustos

Arquitectura

agents/test-personality/                NEW — agente creado por /create-agent
agents/test-personality/agent.go        NEW — reglas puras (llm-all)
agents/test-personality/config.yaml     NEW — config con personalidad marcada
agents/test-personality/prompts/        NEW — system prompt con personalidad exagerada
cmd/launcher/main.go                    MOD — registro del agente en rulesRegistry
e2e/tests/test-personality.spec.ts      NEW — tests E2E del agente
e2e/tests/create-agent-pipeline.spec.ts NEW — tests E2E del pipeline de creacion

Patron pure core / impure shell

  • pkg/ — sin cambios
  • shell/ — sin cambios
  • agents/test-personality/ — composicion: agent.go puro (reglas) + config YAML + system prompt
  • tools/ — sin cambios
  • e2e/ — tests Playwright (fuera del modulo Go)

Tareas

Fase 1: Crear agente de prueba con /create-agent

  • 1.1 Ejecutar /create-agent test-personality "Test Personality" con los siguientes inputs:
    • agent-id: test-personality
    • display-name: "Test Personality"
    • description: "Agente de prueba con personalidad de pirata espacial para validar el pipeline de creacion"
    • llm.provider: openai (default)
    • llm.model: gpt-4o (default)
    • tool_use: false
    • System prompt: personalidad de pirata espacial — siempre habla con jerga pirata mezclada con terminos de ciencia ficcion, usa emojis de calavera y cohetes, empieza cada respuesta con "¡Arrr, cosmonauta!" o variante, y termina con "¡Que la marea estelar te acompane!"
  • 1.2 Verificar que create-full.sh completa las 4 etapas sin errores (scaffold, build, register, verify)
  • 1.3 Personalizar agents/test-personality/prompts/system.md con la personalidad de pirata espacial (bien exagerada para que sea facilmente detectable en tests)
  • 1.4 Verificar compilacion: go build -tags goolm ./...
  • 1.5 Arrancar el servidor y verificar que el agente responde en Matrix: ./dev-scripts/server/start.sh

Fase 2: E2E tests del agente

  • 2.1 Crear e2e/tests/test-personality.spec.ts con los siguientes tests:
    • Responde a saludo: enviar "Hola" → verificar que la respuesta contiene jerga pirata/espacial (keywords: "arrr", "cosmonauta", "estelar", "marea", o similares)
    • Personalidad consistente: enviar pregunta seria ("Que es la gravedad?") → verificar que responde con contenido correcto pero manteniendo la personalidad (jerga pirata/espacial presente)
    • !help funciona: enviar !help → verificar que lista comandos (built-in commands)
    • !ping funciona: enviar !ping → verificar respuesta
    • Sin errores de descifrado: verificar assertNoDecryptionErrors en cada test
  • 2.2 Seguir el patron de los tests existentes (assistant-bot.spec.ts) para fixtures, imports y estructura
  • 2.3 Ejecutar los tests y verificar que pasan: ./dev-scripts/e2e/run.sh test-personality

Fase 3: E2E test del pipeline de creacion (validacion estructural)

  • 3.1 Crear e2e/tests/create-agent-pipeline.spec.ts (o un test dentro de test-personality.spec.ts) que valide la estructura generada por el pipeline:
    • Verificar que agents/test-personality/agent.go existe y exporta Rules()
    • Verificar que agents/test-personality/config.yaml tiene agent.id: test-personality
    • Verificar que agents/test-personality/prompts/system.md contiene la seccion de seguridad obligatoria
    • Verificar que cmd/launcher/main.go contiene el import y la entrada en rulesRegistry
  • 3.2 Estos tests pueden ser scripts bash o tests de Node.js que lean los archivos — no requieren Playwright

Fase 4: Tests

  • 4.1 Ejecutar suite E2E completa: ./dev-scripts/e2e/run.sh (todos los tests, incluyendo los nuevos)
  • 4.2 Verificar que los tests existentes de assistant-bot y asistente-2 siguen pasando (no regresion)
  • 4.3 Verificar build completo: go build -tags goolm ./... y go test -tags goolm ./...

Fase 5: Cleanup y docs

  • 5.1 Actualizar CLAUDE.md tabla de agentes con test-personality
  • 5.2 Documentar en e2e/README.md el nuevo spec y la estrategia de personalidad para tests

Ejemplo de uso

# 1. Crear el agente con la skill
> /create-agent test-personality "Test Personality"
(skill ejecuta create-full.sh, personaliza archivos)

# 2. Arrancar y probar manualmente
> ./dev-scripts/server/start.sh
> (en Matrix) Hola!
< ¡Arrr, cosmonauta! 🏴‍☠️🚀 Bienvenido a bordo de la nave...
  ¡Que la marea estelar te acompane!

# 3. Correr E2E
> ./dev-scripts/e2e/run.sh test-personality
  ✓ responde con personalidad de pirata espacial (15s)
  ✓ personalidad consistente en respuestas serias (18s)
  ✓ !help muestra comandos (3s)
  ✓ !ping responde (2s)
  4 passed

Decisiones de diseno

  • Pirata espacial como personalidad: es suficientemente exagerada para generar keywords detectables (arrr, cosmonauta, estelar, marea) pero no tan absurda como para que el LLM la ignore. Las assertions buscan presencia de al menos una keyword de un set, no matching exacto.
  • Assertions flexibles para LLM: las respuestas LLM son no-deterministicas, asi que verificamos presencia de keywords del tema pirata/espacial, no texto exacto. Para !help y !ping si usamos assertions estrictas (son comandos deterministicos).
  • Test de pipeline como script separado: la validacion estructural (archivos existen, config correcto) no necesita Playwright, asi que puede ser un test de Node.js simple o bash script. Esto lo hace mas rapido y mas facil de debuggear.
  • Agente permanente: el agente de prueba se queda en el repo como agente real. Sirve como referencia de creacion y como target permanente para E2E tests del pipeline.

Prerequisitos

  • E2E infrastructure funcionando (issue 0022 completado)
  • Skill /create-agent funcionando (ya existe en .claude/skills/create-agent/)
  • Variables de entorno del homeserver configuradas (MATRIX_ADMIN_TOKEN, etc.)
  • Element Web disponible para tests Playwright

Riesgos

  • LLM no respeta personalidad: mitigacion — system prompt muy explicito y exagerado, keywords amplias (buscar cualquiera de un set, no todas)
  • Rate limits del LLM: mitigacion — pocos tests con respuesta LLM (2-3), el resto son comandos directos
  • create-full.sh falla por estado previo: mitigacion — verificar que no exista agents/test-personality/ antes de ejecutar, o limpiar si existe
  • Flakiness en E2E por timing: mitigacion — timeouts generosos (60s para LLM), reintentos en el pipeline de Playwright