# Referencia de Agentes Todos los agentes comparten la misma arquitectura base pero tienen roles, canales y system prompts distintos. --- ## Arquitectura Común **Tecnología:** Python 3.12, discord.py 2.3, httpx, PyGithub **Patrón:** Discord bot que llama a OpenWebUI y opcionalmente crea PRs en GitHub **Variables de entorno requeridas por todos:** ```bash DISCORD_TOKEN # Token del bot de Discord DISCORD_CHANNEL_ID # ID del canal que monitoriza este agente OPENWEBUI_URL # https://ai.carlospalanca.es OPENWEBUI_API_KEY # API key de OpenWebUI OPENWEBUI_MODEL # Modelo a usar (gpt-4o, claude-3-5-sonnet, etc.) GITHUB_TOKEN # Fine-grained PAT de GitHub GITHUB_REPO # usuario/carlospalanca.es ``` --- ## Tyrion Lannister — La Mano del Rey **Rol:** Orquestador principal **Canal Discord:** `#el-trono-de-hierro` **Archivo:** `agents/tyrion/` **Función:** Analiza cada mensaje de Carlos y decide qué agente debe manejarlo. Publica la tarea delegada en el canal del agente destino. **Variables adicionales (solo Tyrion):** ```bash DISCORD_CHANNEL_VARYS DISCORD_CHANNEL_SAMWELL DISCORD_CHANNEL_BRONN DISCORD_CHANNEL_BRAN DISCORD_CHANNEL_DAVOS DISCORD_CHANNEL_ARYA DISCORD_CHANNEL_DAENERYS DISCORD_CHANNEL_JON ``` **Lógica de enrutamiento:** | Solicitud | Agente destino | |-----------|---------------| | SEO, keywords, títulos YouTube, tags | Varys | | Guión de vídeo, artículo de blog | Samwell | | Sponsor, colaboración, afiliado | Bronn | | Servidor, Docker, nginx, infra | Bran | | Twitter, LinkedIn, Instagram, redes | Davos | | Code review, revisar PR | Arya | | Thumbnail, gráfico, animación, Remotion | Daenerys | | Certificación, curso, formación, AWS | Jon | **No hace:** Nunca ejecuta tareas directamente. Solo coordina. --- ## Varys — El Pajarito **Rol:** SEO & Research **Canal Discord:** `#el-pajarillo` **Archivo:** `agents/varys/` **Outputs típicos:** - 3 variantes de título (CTR-optimized) - Descripción YouTube (primeras 150 chars son críticas) - Lista de hasta 15 tags (max 500 chars total) - Copy para thumbnail (4 palabras principales + 3 secundarias) - Análisis de keywords con intención de búsqueda **PRs que crea:** `seo/varys-YYYYMMDD-tema` en `src/content/` (solo para análisis documentados largos) **No hace:** No crea guiones ni artículos de blog. Solo SEO y research. --- ## Samwell Tarly — El Maestre **Rol:** Guiones & Blog **Canal Discord:** `#la-ciudadela` **Archivo:** `agents/samwell/` **Outputs típicos:** - Guiones completos con estructura hook → secciones → demo → CTA - Artículos de blog en MDX con frontmatter correcto - Documentación técnica **PRs que crea:** - Guiones: `guiones/samwell-YYYYMMDD-slug` → `src/content/guiones/nombre.md` - Blog: `blog/samwell-YYYYMMDD-slug` → `src/content/blog/YYYY-MM-DD-nombre.md` **Detección automática de tipo:** Si el LLM responde con frontmatter que contiene `status:` → es guión. Si contiene `pubDate:` → es blog post. **Frontmatter generado (guiones):** ```yaml --- title: "Título" status: borrador tags: [tag1, tag2] agentCreated: true agentName: "Samwell" --- ``` **Frontmatter generado (blog):** ```yaml --- title: "Título" description: "150-160 chars" pubDate: YYYY-MM-DD author: "Carlos Palanca" tags: [tag1, tag2] draft: true agentCreated: true agentName: "Samwell" --- ``` --- ## Bronn — El Mercenario **Rol:** Sponsors & Monetización **Canal Discord:** `#el-banco-de-hierro` **Archivo:** `agents/bronn/` **Outputs típicos:** - Informe de sponsor potencial (relevancia, precio estimado, red flags) - Lista de programas de afiliados relevantes con URLs - Plantilla de outreach para contactar empresas **PRs que crea:** `sponsors/bronn-YYYYMMDD-empresa` → `docs/sponsors/nombre-empresa.md` **Rechaza automáticamente:** crypto dudoso, gambling, MLM, esquemas piramidales. **Afiliados de alto valor para el nicho:** - Cloud: Hetzner, DigitalOcean, Linode, Vultr - AWS: programa de afiliados de A Cloud Guru, Udemy - Tools: JetBrains, DataDog, Grafana Cloud - Cursos: Udemy, Coursera, Linux Foundation --- ## Bran Stark — El Cuervo de Tres Ojos **Rol:** Infraestructura & DevOps **Canal Discord:** `#el-muro` **Archivo:** `agents/bran/` **Outputs típicos:** - Dockerfiles y Docker Compose configs - Playbooks de Ansible - Configuraciones de nginx - Scripts de mantenimiento del servidor **PRs que crea:** `infra/bran-YYYYMMDD-cambio` → `vps/` o `agents/` **Regla de oro:** Cualquier cambio en producción requiere: 1. PR con descripción de impacto 2. Plan de rollback explícito 3. Comandos de verificación post-deploy 4. Aprobación de Carlos **No hace sin confirmación:** Comandos destructivos (`rm`, `drop`, `reset`, reinicio de servicios críticos). --- ## Davos Seaworth — El Caballero de la Cebolla **Rol:** Redes Sociales & Comunicación **Canal Discord:** `#desembarco-del-rey` **Archivo:** `agents/davos/` **Outputs típicos (por vídeo publicado):** - Tweet de anuncio (día -1) - Thread técnico en Twitter/X con puntos clave (día +2) - Post para LinkedIn (día +7) - Copy para Instagram/Reel con descripción de edición (día +14) **PRs que crea:** `social/davos-YYYYMMDD-plataforma` → `docs/social/nombre-video.md` **Formato del entregable (siempre listo para copiar/pegar):** ```markdown ## Twitter/X — Tweet de anuncio 🧵 [Texto del tweet - 280 chars] ## Twitter/X — Thread completo 1/ [...] 2/ [...] ## LinkedIn [Texto del post] ## Instagram [Descripción visual + texto sobreimpuesto sugerido] ``` **No hace:** Nunca publica directamente en ninguna red social. --- ## Arya Stark — Sin Nombre **Rol:** Code Review & Seguridad **Canal Discord:** `#cara-sin-nombre` **Archivo:** `agents/arya/` **Cómo usarla:** Tyrion la activa cuando hay un PR que revisar, o Carlos escribe directamente en `#cara-sin-nombre` con la URL del PR. **Checklist de revisión:** - Secretos o credenciales expuestos → **SIEMPRE BLOQUEANTE** - Build roto → **BLOQUEANTE** - Tipos TypeScript incorrectos → **MEJORA o BLOQUEANTE** - Frontmatter MDX inválido según content.config.ts → **BLOQUEANTE** - Nombres de archivos en kebab-case → **NITPICK** - Commit message en formato Conventional Commits → **NITPICK** - `console.log` en código de producción → **MEJORA** **Etiquetas de respuesta:** - `[BLOQUEANTE]` — No se mergea hasta corregir - `[MEJORA]` — Recomendado pero opcional - `[NITPICK]` — Estilo, no crítico - `[APROBADO]` — Todo correcto **No hace:** No crea contenido nuevo, no hace commits. --- ## Daenerys Targaryen — La Madre de Dragones **Rol:** Recursos Visuales & Remotion **Canal Discord:** `#poniente-en-llamas` **Archivo:** `agents/daenerys/` **Outputs típicos:** - Componentes Remotion en TypeScript/React - Descripción detallada de thumbnails (copy, colores, composición) - Lower thirds animados reutilizables - Intros/outros de 3-5 segundos **PRs que crea:** `visual/daenerys-YYYYMMDD-componente` → `remotion/src/components/` **Especificaciones técnicas:** - Resolución: 1920×1080 (16:9) para vídeos, 1080×1920 para Shorts - FPS: 30 para general, 60 para animaciones fluidas - Todos los colores en variables CSS - Props tipadas con interfaces TypeScript **Ejemplo de componente:** ```tsx interface LowerThirdProps { name: string; role: string; duration?: number; // frames } export const LowerThird: React.FC = ({ name, role, duration = 90 }) => { // ... }; ``` --- ## Jon Snow — El Guardián **Rol:** Formación & Certificaciones **Canal Discord:** `#la-guardia-de-la-noche` **Archivo:** `agents/jon/` **Outputs típicos:** - Roadmaps de certificación por semanas - Comparativa de recursos (gratuitos vs pago) - Plan de estudio personalizado - Sugerencias de series de vídeos educativos para el canal **PRs que crea:** `edu/jon-YYYYMMDD-certificacion` → `docs/certifications/` **Certificaciones cubiertas:** | Cert | Código | Dificultad | Horas estudio | |------|--------|-----------|--------------| | AWS Solutions Architect Associate | SAA-C03 | Media | 80-120h | | AWS DevOps Engineer Professional | DOP-C02 | Alta | 100-150h | | Certified Kubernetes Administrator | CKA | Alta | 80-120h | | HashiCorp Terraform Associate | 003 | Media | 40-60h | | AWS Security Specialty | SCS-C02 | Alta | 100-150h | **Regla crítica:** NUNCA reproduce preguntas reales de exámenes (copyright). Solo crea preguntas de práctica propias basadas en los dominios públicos. --- ## `agents/shared/github_client.py` Módulo compartido por todos los agentes que crean contenido. **Función principal:** ```python create_content_pr( file_path: str, # Ruta del archivo en el repo (ej: "src/content/blog/post.md") content: str, # Contenido del archivo title: str, # Título del PR description: str, # Cuerpo del PR agent_name: str, # Nombre del agente (ej: "Samwell") branch_prefix: str, # Prefijo de rama (ej: "blog", "guiones", "seo") ) -> str # Devuelve la URL del PR ``` **Lo que hace internamente:** 1. Obtiene el SHA del último commit de `main` 2. Crea una rama: `{branch_prefix}/{agent_name}-{timestamp}-{slug}` 3. Hace commit del archivo en esa rama 4. Abre un PR con etiquetas `agent-created` y `needs-review` 5. Devuelve la URL del PR **Nunca hace commit a `main`.**