← Volver al catálogo

🔬 Trends Hunter

Archivo: /Users/user/rifai-agents/agentes/intel/trends-hunter.ts · Plist: com.rifai.trends-hunter · Horario: Diario a las 09:00 (StartCalendarInterval Hour 9, Minute 0). Nota: el .plist solo está en ~/Library/LaunchAgents/, NO existe copia fuente en cron/.

Qué hace

Detecta cada mañana productos en tendencia para España/Portugal cruzando varias fuentes públicas (Google Trends ES/PT y Google News de e-commerce). Filtra las tendencias que no había visto antes y se las pasa a un modelo Claude/Gemini local para que evalúe su potencial comercial dropshipping (producto físico, margen, demanda real, fit con audiencia urbana 18-45 y con movilidad/tech). Genera un máximo de 5 "picks" con score, categoría, proveedor sugerido y rango de precio de venta. Escribe un reporte markdown en reportes/ y notifica a Iván (intel) y CEOSEC vía el router. Es el primer paso del pipeline de inteligencia de mercado.

Cómo funciona

1. Parsea .env con el snippet estándar de la flota.

2. Carga el estado previo de data/trends-hunter-state.json (seen_titles, history).

3. En paralelo recopila tendencias de tres fuentes RSS:

  • fetchGoogleTrendsES()https://trends.google.com/trending/rss?geo=ES (hasta 25 items).
  • fetchGoogleTrendsPT() → mismo endpoint con geo=PT.
  • fetchEcommerceNews() → Google News RSS con 4 queries (más vendidos España, dropshipping 2026, viral TikTok, gadget tech), hasta 5 items por query.

4. Filtra a fresh las tendencias cuyo título no está en seen_titles. Si no hay nuevas, sale (exit 0).

5. Llama a claude() (binario local tools/gemini-cli, modelo sonnet) con un system prompt de analista e-commerce y pide JSON con picks[] (máx 5) + descartes_motivo.

6. Marca todas las fresh como vistas (capadas a 500), actualiza history y guarda estado.

7. Escribe reportes/trends-<YYYY-MM-DD>.md con resumen, top picks y tendencias raw.

8. Notifica vía notify-router (evento intel_weekly, nivel info): mensaje con los 3 mejores picks, o aviso de "0 picks comerciales hoy" si no hubo.

Datos/APIs

  • Google Trends RSS (ES y PT) — sin auth, vía fetch.
  • Google News RSS — sin auth, vía fetch.
  • Modelo IA local — binario tools/gemini-cli (constante CLAUDE_BIN), invocado con spawnSync y flags --print --dangerously-skip-permissions --model sonnet --system-prompt. No usa API key de OpenAI/Anthropic en .env.
  • notify-router (tools/notify-router.ts) → Telegram bot Iván/intel (TELEGRAM_INTEL_TOKEN) + CEOSEC vía routing del evento intel_weekly.
  • Vars .env: lee el .env completo pero el código solo depende de las tokens que consuma notify-router (p.ej. TELEGRAM_INTEL_TOKEN, TELEGRAM_CHAT_ID). No referencia ninguna var propia directamente.
  • Estado/salida: data/trends-hunter-state.json, reportes/trends-<fecha>.md.

Cómo probarlo

cd /Users/user/rifai-agents && npx tsx agentes/intel/trends-hunter.ts

No tiene flag FORCE; corre siempre. Espera ver en consola: 🔬 Trends Hunter, conteo de tendencias ES/PT/news, número de nuevas, picks identificados, ruta del reporte generado y ✅ Notificado a Iván + CEOSEC. Si no hay tendencias nuevas sale con ⚠️ Sin tendencias nuevas. Tras correrlo, comprueba reportes/trends-<hoy>.md y que llegó la notificación de Telegram a Iván.

Si se rompe / recuperar

  • Recargar el plist:
  launchctl unload ~/Library/LaunchAgents/com.rifai.trends-hunter.plist
  launchctl load   ~/Library/LaunchAgents/com.rifai.trends-hunter.plist
  • Logs: /Users/user/rifai-agents/logs/trends-hunter.log (también trends-hunter.out.log y trends-hunter.err.log).
  • Fallos típicos: si el RSS de Google cambia o bloquea (User-Agent), las funciones devuelven [] silenciosamente → "0 tendencias". Si el binario gemini-cli devuelve status ≠ 0, lanza error y sale con exit 1 (revisar tools/gemini-cli). Si el JSON del modelo no parsea, sale con exit 1.
  • Importante: no existe copia del plist en cron/. Si se pierde el de ~/Library/LaunchAgents/, hay que recrearlo a mano (ver "Cómo replicarlo").

Cómo replicarlo

Piezas necesarias:

1. Script TS que parsea .env (snippet estándar de la flota, sin dotenv).

2. Funciones fetch a Google Trends RSS (geo=ES, geo=PT) y Google News RSS, con parseo regex de <item>.

3. Binario local de IA tools/gemini-cli (envoltura tipo Claude CLI) invocado por spawnSync con system prompt de analista e-commerce y salida JSON.

4. Fichero de estado JSON para deduplicar títulos vistos (data/trends-hunter-state.json).

5. Generación de reporte markdown en reportes/.

6. tools/notify-router.ts con el evento intel_weekly enrutado a Iván + CEOSEC.

7. Un .plist con StartCalendarInterval Hour 9 Minute 0, cargado en ~/Library/LaunchAgents/, ejecutando npx tsx agentes/intel/trends-hunter.ts.