content-agent
Tu IA escribe los guiones. Tú solo grabas.
Un agente autónomo en Node.js que cada mañana busca tendencias, analiza tus métricas de Instagram y TikTok, y genera un guión personalizado que te llega directo a Telegram. Corre 24/7 en un VPS de €4 al mes.
Detecta tendencias
Brave Search + Claude
Genera guiones
Claude Sonnet 4.6
Llega a Telegram
Con botones inline
Cómo funciona
El pipeline completo que corre solo cada mañana
Research
Brave Search busca tendencias del nicho. Claude extrae los 8 temas más relevantes.
Analytics
Se conecta a Instagram Graph API y TikTok Research API para jalarse las métricas.
Script Gen
Claude genera el guión con contexto de tendencias + métricas + historial + insights.
Telegram
Briefing completo: analytics del día + 3 opciones de gancho + desarrollo + CTA.
Research adicional
El agente también hace refreshes de tendencias a las 12:00 PM, 4:00 PM y 8:00 PM para tener el contexto más actualizado posible al generar el guión del día siguiente.
Métricas de TikTok e Instagram
Guiones generados y si fueron grabados
Tendencias detectadas por día
Aprendizajes acumulados de lo que funciona
Antes de empezar
Lo que necesitas tener listo
Cuenta en Hetzner Cloud
hetzner.com/cloud — tarjeta de crédito requerida
Cuenta de Telegram
La app en tu celular es suficiente
API Key de Anthropic
console.anthropic.com — requiere pago mínimo ($5)
Repositorio del agente
El código de content-agent en GitHub o localmente
30–60 minutos
La primera vez. Luego actualizar toma 2 minutos
Terminal y SSH básico
Solo necesitas saber conectarte a un servidor remoto
Crear VPS en Hetzner
El servidor donde va a correr el agente 24/7 — €4.35/mes
- Ve a hetzner.com/cloud → New Project → Add Server
- Location: Helsinki o Falkenstein (EU)
- Image: Ubuntu 24.04 LTS
- Type: CX22 — 2 vCPU, 4GB RAM, €4.35/mes
- SSH Key: Agrega tu llave pública (requerido — no uses contraseña)
- Click Create & Buy Now — en ~30 segundos tienes la IP
# Conectar al servidor
ssh root@<IP_DEL_SERVIDOR>
# Actualizar paquetes
apt update && apt upgrade -y
# Instalar Node.js 24
curl -fsSL https://deb.nodesource.com/setup_24.x | bash -
apt install -y nodejs
# Verificar versión
node --version # v24.x.x
npm --version
# Instalar PM2 (process manager)
npm install -g pm2
# Instalar git
apt install -y gitGuarda la IP del servidor
La necesitas en todos los pasos. Se ve así: 204.168.226.123
Setup del servidor
Node.js 24, PM2 y git — verificar que quedó bien instalado
Los comandos del Paso 1 ya incluyen el setup completo. Después de ejecutarlos, verifica:
node --version # debe ser v24.x.x
pm2 --version # debe ser 5.x.x o mayor
git --version # cualquier versión moderna¿Por qué PM2?
PM2 mantiene el proceso vivo si se cae, lo reinicia automáticamente y guarda los logs. Es el estándar para Node.js en producción en VPS.
Obtener API Keys
Consigue las credenciales antes de desplegar
Telegram Bot
# 1. Habla con @BotFather en Telegram
# 2. Envía: /newbot
# 3. Ponle nombre (ej: Mi Content Agent)
# 4. Ponle username (debe terminar en "bot", ej: micontentagent_bot)
# 5. Copia el token que te da → es tu TELEGRAM_BOT_TOKEN
# Para obtener tu TELEGRAM_CHAT_ID:
# Habla con @userinfobot en Telegram — te lo da directamenteAnthropic (Claude)
# 1. Ve a console.anthropic.com
# 2. Sign Up / Login
# 3. Ve a "API Keys" → "Create Key"
# 4. Copia la key (empieza con sk-ant-...)
# 5. Agrega créditos en "Billing" (mínimo $5)
# Claude Sonnet 4.6 cuesta ~$0.003 por guión generadoBrave Search API
# 1. Ve a brave.com/search/api
# 2. Click "Get started for free"
# 3. Crea cuenta → Ve a "API Keys"
# 4. Crea una nueva API key
# Plan gratuito: 2,000 queries/mes
# El agente usa ~120/mes (4 queries x 30 días)Instagram Graph API
# 1. Ve a developers.facebook.com
# 2. Crea una App → tipo "Business"
# 3. Agrega el producto "Instagram Graph API"
# 4. Conecta tu cuenta Instagram Professional (Business o Creator)
# 5. Genera un Long-Lived Token (válido 60 días)
# 6. Obtén tu INSTAGRAM_ACCOUNT_ID con Graph API Explorer:
# GET /me?fields=id&access_token=TOKENTikTok Research API requiere aprobación manual de TikTok (puede tomar días). Ve a developers.tiktok.com → Research API. El agente funciona perfectamente sin TikTok al inicio.
Desplegar el código
Subir el agente al servidor
# En el servidor — crear directorio
mkdir -p /opt/content-agent
cd /opt/content-agent
# Opción A: clonar desde GitHub (recomendado)
git clone https://github.com/<tu-usuario>/content-agent.git .
# Opción B: copiar desde tu Mac con scp
# (ejecutar esto en tu Mac, no en el servidor)
scp -r /ruta/al/proyecto/* root@<IP>:/opt/content-agent/Recomendación: usa GitHub
Sube el código a un repo privado. Así actualizas con git pull && npm run build && pm2 restart content-agent.
Configurar variables de entorno
El .env es lo más importante — aquí van todas las credenciales
# Crear el archivo .env
cd /opt/content-agent
nano .env
# Pega la plantilla de abajo y completa los valoresVariables de entorno
Solo las 3 primeras son obligatorias. El agente detecta automáticamente qué plataformas están configuradas.
| Variable | Estado | Descripción |
|---|---|---|
ANTHROPIC_API_KEY | Requerida | API key de Claude — el cerebro del agente |
TELEGRAM_BOT_TOKEN | Requerida | Token del bot de Telegram que te envía los guiones |
TELEGRAM_CHAT_ID | Requerida | Tu ID personal de Telegram para recibir los mensajes |
BRAVE_SEARCH_API_KEY | Opcional | API de búsqueda para detectar tendencias (2,000 req/mes gratis) |
META_ACCESS_TOKEN | Opcional | Long-lived token de Instagram (expira cada 60 días) |
INSTAGRAM_ACCOUNT_ID | Opcional | ID de tu cuenta de Instagram Business/Creator |
META_APP_ID | Opcional | ID de tu app en Meta for Developers |
META_APP_SECRET | Opcional | Secret de tu app en Meta for Developers |
TIKTOK_ACCESS_TOKEN | Opcional | Token OAuth de TikTok Research API |
TIKTOK_APP_ID | Opcional | ID de tu app en TikTok for Developers |
TIKTOK_APP_SECRET | Opcional | Secret de tu app de TikTok |
TIKTOK_OPEN_ID | Opcional | Open ID de tu cuenta TikTok |
AGENT_TIMEZONEdefault: America/Bogota | Opcional | Zona horaria para los cron jobs |
DAILY_SCRIPT_HOURdefault: 8 | Opcional | Hora en que se genera y envía el guión diario (0-23) |
DAILY_SCRIPT_MINUTEdefault: 0 | Opcional | Minuto del envío diario |
RESEARCH_HOURdefault: 6 | Opcional | Hora del research matutino de tendencias |
SCRIPT_MEMORY_WINDOWdefault: 15 | Opcional | Cuántos guiones anteriores incluir como contexto para Claude |
Plantilla lista para copiar:
# REQUERIDAS
ANTHROPIC_API_KEY=sk-ant-...
TELEGRAM_BOT_TOKEN=123456:ABC...
TELEGRAM_CHAT_ID=123456789
# INSTAGRAM (opcional)
META_ACCESS_TOKEN=
INSTAGRAM_ACCOUNT_ID=
META_APP_ID=
META_APP_SECRET=
# TIKTOK (opcional)
TIKTOK_ACCESS_TOKEN=
TIKTOK_APP_ID=
TIKTOK_APP_SECRET=
TIKTOK_OPEN_ID=
# RESEARCH (opcional pero recomendado)
BRAVE_SEARCH_API_KEY=
# TIMING (opcionales — valores por defecto ya funcionan)
AGENT_TIMEZONE=America/Bogota
DAILY_SCRIPT_HOUR=8
DAILY_SCRIPT_MINUTE=0
RESEARCH_HOUR=6
SCRIPT_MEMORY_WINDOW=15Build y arrancar con PM2
Compilar TypeScript y dejar el agente corriendo
cd /opt/content-agent
# Instalar dependencias
npm install --omit=dev
# Compilar TypeScript
npm run build
# Crear directorio de logs
mkdir -p logs
# Iniciar con PM2
pm2 start ecosystem.config.js
# Guardar la lista de procesos (para que sobreviva reboots)
pm2 save
# Configurar autostart al reiniciar el servidor
pm2 startup
# Copia y ejecuta el comando que muestra este último stepImportante: ejecuta pm2 startup
pm2 startup genera un comando específico para tu sistema. Cópialo y ejecútalo — hace que el agente arranque automáticamente si el servidor se reinicia.
Verificar que funciona
Si ves 'online' en pm2 status, el agente está vivo
# Ver estado del proceso
pm2 status
# Debe mostrar: content-agent | online
# Ver logs en tiempo real
pm2 logs content-agent --lines 50
# Si ves errores, verificar .env:
cat /opt/content-agent/.envPrueba desde Telegram
Abre el chat con tu bot y prueba estos comandos:
/start → Muestra el menú de comandos
/status → Métricas y estado del agente
/script → Genera un guión ahora mismo
/analytics → Jala métricas de Instagram/TikTok
/history → Últimos 5 guiones generadosComandos útiles de PM2
pm2 restart content-agent # Reiniciar
pm2 stop content-agent # Detener
pm2 logs content-agent # Logs en tiempo real
pm2 monit # Dashboard de procesos
# Actualizar el agente
cd /opt/content-agent && git pull && npm run build && pm2 restart content-agentEl system prompt de Claude
El ADN del agente — aquí defines quién eres
Personaliza esto primero
Este prompt está escrito para Juan David Sierra. Cámbialo con tu nombre, tu nicho, tus empresas, cómo hablas y a quién le hablas. Cuanto más específico seas, más te va a sonar el guión. El archivo está en src/agents/script-agent.ts → variable JUAN_DAVID_SYSTEM.
Ver system prompt completo▶ Expandir
Eres el asistente creativo de Juan David Sierra, emprendedor colombiano de 21 años.
## Quién es Juan David
- Programador y estudiante de Ingeniería de Sistemas (último año)
- Fundador de Digit Deck: agencia digital con clientes internacionales, se posiciona como referente en el mercado
- Fundador de Growthly: SaaS para democratizar el CRO (Conversion Rate Optimization) para ecommerce
- Aprende constantemente sobre IA y soluciones de IA para ecommerce
- Practica boxeo, hace deporte regularmente
- Vive en Colombia, habla en español natural/colombiano (no muy formal, tampoco muy callejero)
- 21 años, en proceso — no millonario todavía pero construyendo activamente
- Tiene meses buenos y malos en facturación — es transparente con eso
- No quiere ser un "gurú" ni vender un lifestyle falso
## Su marca personal
- **Autenticidad ante todo**: habla desde su experiencia real, no desde donde quisiera estar
- **Aspiracional pero honesto**: inspira sin mentir, muestra el proceso real
- **Nicho = él mismo**: no se limita a un solo tema, conecta emprendimiento + programación + IA + vida
- **Tono**: cercano, directo, con confianza pero sin arrogancia, a veces vulnerable
- **No habla de**: política, temas polémicos sin relación a su marca
- **Siempre conecta con**: su audiencia de jóvenes latinoamericanos que quieren emprender o ya lo intentan
## Formato de videos (TikTok + Instagram Reels)
- Duración objetivo: 45-75 segundos
- Hook en los primeros 3 segundos: pregunta provocadora, dato sorprendente, o afirmación contraintuitiva
- Habla directamente a cámara, primera persona
- Un solo mensaje claro por video — no tratar de explicar todo
- CTA al final: siempre pedir algo concreto (seguir, comentar, compartir, guardar)
- Puede grabar caminando, en su escritorio, en el gym, en la calle
## Tu rol
Generas guiones completos listos para grabar. Los guiones deben sonar como Juan David habla, no como un texto corporativo.
Usas datos reales de performance y tendencias para decidir qué grabar.Contexto adicional que Claude recibe en cada guión
Costos mensuales
Todo en, menos de lo que te cuesta un café al día
| Servicio | Costo |
|---|---|
| Hetzner CX22 VPS | €4.35/mes |
| Anthropic Claude Sonnet 4.6 | ~$2–5/mes |
| Brave Search API | Gratis |
| Instagram Graph API | Gratis |
| TikTok Research API | Gratis |
| Telegram Bot | Gratis |
| Total | ~€8–10/mes |
* Claude Sonnet 4.6 cobra por tokens. 30 guiones/mes + research diario ≈ $2–5 USD. Puedes ajustar la frecuencia cambiando los cron jobs en src/scheduler/cron.ts.
Token de Instagram — expira cada 60 días
El long-lived token de Instagram dura exactamente 60 días. Si no lo renuevas, el agente deja de jalar métricas (sigue funcionando, solo sin datos de Instagram). Pon un recordatorio en tu calendario cada 50 días.
# En el servidor
curl "https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token=TU_TOKEN_ACTUAL"
# Copia el nuevo access_token de la respuesta JSON
# Luego actualiza el .env:
nano /opt/content-agent/.env
# Cambia META_ACCESS_TOKEN=nuevo_token_aqui
# Reinicia el agente
pm2 restart content-agent• El token nuevo también dura 60 días desde el momento de renovación
• Solo funciona si el token actual todavía no ha expirado
• Si ya expiró, necesitas generar uno nuevo completo desde developers.facebook.com
Problemas comunes
Las cosas que más fallan la primera vez