🔬 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 congeo=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(constanteCLAUDE_BIN), invocado conspawnSyncy 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 eventointel_weekly. - Vars
.env: lee el.envcompleto pero el código solo depende de las tokens que consumanotify-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éntrends-hunter.out.logytrends-hunter.err.log). - Fallos típicos: si el RSS de Google cambia o bloquea (User-Agent), las funciones devuelven
[]silenciosamente → "0 tendencias". Si el binariogemini-clidevuelve status ≠ 0, lanza error y sale con exit 1 (revisartools/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.