9.2 KiB
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:
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):
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):
---
title: "Título"
status: borrador
tags: [tag1, tag2]
agentCreated: true
agentName: "Samwell"
---
Frontmatter generado (blog):
---
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:
- PR con descripción de impacto
- Plan de rollback explícito
- Comandos de verificación post-deploy
- 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):
## 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.logen 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:
interface LowerThirdProps {
name: string;
role: string;
duration?: number; // frames
}
export const LowerThird: React.FC<LowerThirdProps> = ({ 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:
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:
- Obtiene el SHA del último commit de
main - Crea una rama:
{branch_prefix}/{agent_name}-{timestamp}-{slug} - Hace commit del archivo en esa rama
- Abre un PR con etiquetas
agent-createdyneeds-review - Devuelve la URL del PR
Nunca hace commit a main.