LangSmith Debugger — CULTIVA IA
⬡ cultiva-agentes-prod ⏱ últimas 2 horas · 2026-06-12 12:45–14:45 UTC ● LIVE
Terminal — langsmith-fetch v0.3.1
cultivaia@prod:~/agents$ langsmith-fetch traces --last-n-minutes 120 --limit 50 --format json --include-metadata
✓ Conectado a LangSmith — proyecto: cultiva-agentes-prod
✓ Rango temporal: 2026-06-12T12:45:00Z → 14:45:00Z
✓ 47 trazas recuperadas (7 con error · 2 con advertencia)
⚠ Anomalía detectada: seo-agent p95 latencia = 21.3s (baseline: 4.1s)
✕ crm-agent: 5 fallos por autenticación Huly API (401 Unauthorized)
→ Analizando patrones de error...
Informe de Depuración — CULTIVA IA Agentes
Período: 2026-06-12 12:45–14:45 UTC · Proyecto: cultiva-agentes-prod · 47 trazas analizadas
🔍 Deep Dive — Traza a3f7c2d1 · seo-agent TIMEOUT
Objetivo: "Audita la web de cliente Café Origen y genera 5 meta-descripciones optimizadas"
Flujo de ejecución
1
extract_sitemap(url="cafe-origen.es")
→ 48 URLs encontradas · sitemap.xml parseado
✓ OK — 0.3s
0.3s
2
scrape_url(url="cafe-origen.es/menu")
→ Iniciando scraping de página principal...
✓ OK — 1.2s
1.2s
3
scrape_url(url="cafe-origen.es/blog/origen-aromas")
→ playwright.launch() · waiting for response...
✕ TimeoutError: Navigation timeout 20000ms exceeded
20.0s
Ejecución interrumpida
→ LangGraph max_retries=0 · no retry configurado
Stacktrace
PlaywrightTimeoutError: page.goto: Timeout 20000ms exceeded.
  at scrape_url (tools/scraper.py:47)
  at SEONode.execute (agents/seo_agent.py:112)
  at LangGraph.run_node (graph/runner.py:89)
Caused by: net::ERR_CONNECTION_TIMED_OUT
  Target: https://cafe-origen.es/blog/origen-aromas
🎯 Causa Raíz
La herramienta scrape_url usa Playwright con un timeout fijo de 20 s y sin manejo de reintentos. La URL del blog del cliente está bloqueando bots (Cloudflare Bot Management activado desde 2026-06-12 ~12:30 UTC). El agente no tiene fallback a requests + BeautifulSoup cuando Playwright falla, ni omite páginas problemáticas para continuar con el resto de la auditoría.
Recomendaciones
  • 🔧 Añadir max_retries=2, timeout=8000 a Playwright y fallback a requests cuando el status HTTP es 403/429/timeout.
  • Implementar scrape_url(skip_on_error=True) para que el agente registre el fallo y continúe con las demás URLs en lugar de abortar la tarea completa.
  • 🛡️ Añadir User-Agent rotation y headers estándar de navegador real. Considerar proxy residencial para clientes con Cloudflare empresarial.
🤖 Deep Dive — Traza b9e1a403 · crm-agent AUTH 401
Objetivo: "Crea una tarea en Huly para hacer seguimiento al lead 'Restaurante Brasa & Co' — reunión el lunes"
Flujo de ejecución
1
search_contacts(query="Brasa & Co")
→ Huly CRM · GET /api/v1/contacts?q=brasa
✓ 1 resultado: org_id=ORG-0042
0.8s
2
create_task(project="ventas-q3", assignee="alvaro", due="2026-06-15")
→ Huly API · POST /api/v1/issues · Bearer token enviado
✕ HTTPError: 401 Unauthorized — Token expired or revoked
2.3s
Ejecución interrumpida · Sin confirmación al usuario
→ crm-agent no captura 401 → falla silenciosamente
Respuesta API Huly
HTTP 401 Unauthorized
{"error": "token_expired", "message": "Bearer token expired at 2026-06-12T09:00:00Z",
 "hint": "Re-authenticate via POST /api/v1/auth/refresh"}

→ Token generado: 2026-06-09T09:00:00Z (TTL=72h, expirado hace 5h45min)
🎯 Causa Raíz
El token de acceso a la Huly API tiene TTL de 72 horas y fue generado el 2026-06-09. Expiró a las 09:00 UTC del 2026-06-12. El crm-agent no implementa refresh automático de tokens (no hay lógica de 401 → refresh → retry), y cuando la llamada falla, el error no es propagado al usuario — el agente devuelve una respuesta vacía sin avisar del problema.
Recomendaciones
  • 🔑 Implementar middleware de refresh: interceptar 401, llamar a POST /api/v1/auth/refresh, reintentar la petición original automáticamente. Patrón estándar OAuth2.
  • Añadir cron de renovación proactiva: refrescar token cada 60 h (12 h antes de expirar) para evitar ventanas de error en producción.
  • 🔔 Capturar la excepción y devolver un mensaje explícito al usuario: "No pude crear la tarea: problema de autenticación. Contacta al equipo técnico." — nunca fallar silenciosamente.
📊 Análisis de errores — últimas 2 horas 7 errores · 14.9%
5
Huly API 401 Unauthorized
POST /api/v1/issues — token expired @ 09:00Z
agente: crm-agent · herramienta: create_task, update_contact
12:52 – 14:41
4
Playwright Navigation Timeout
ERR_CONNECTION_TIMED_OUT — cafe-origen.es/blog/*
agente: seo-agent · herramienta: scrape_url
13:10 – 14:44
2
Latencia degradada seo-agent (>15s)
Páginas con Cloudflare JS challenge — Playwright bloqueado
agente: seo-agent · herramienta: scrape_url (no timeout aún)
14:02 – 14:35
Rendimiento por agente seo-agent degradado
Agente Trazas Éxito p50 latencia p95 latencia Tokens p50 Coste est.
content-agent 22 100%
3.8s
5.9s
1,640 $0.024
seo-agent 18 66.7%
14.1s
21.3s
2,104 $0.031
crm-agent 7 28.6%
2.9s
4.7s
876 $0.013
💾 Sesión exportada ✓ 47 archivos
✓ Sesión exportada correctamente

Ubicación: langsmith-debug/session-20260612-144500/
├── traces/      → 47 archivos JSON
├── threads/     → 12 conversaciones
└── metadata/   → 47 ficheros de contexto

Tamaño total: 4.7 MB
Errores exportados: 7
Para compartir con equipo: tar -czf debug-20260612.tar.gz langsmith-debug/
Plan de acción inmediato
  • 🚨 URGENTE (hoy): Regenerar token Huly API y desplegarlo como secreto en el entorno. Añadir lógica de refresh automático en crm-agent.
  • ⚠️ Esta semana: Añadir skip_on_error=True y fallback a requests en seo-agent.scrape_url. Rotación de User-Agent.
  • 📈 Monitoreo: Configurar alert en LangSmith si p95 latencia > 10s o tasa de error > 5% en ventana de 30 min.