¿Qué hace WinNow?
Winnow ejecuta un motor Python headless que extrae contenido de los últimos 30 días desde fuentes de reseñas y plataformas regionales, puntúa cada ítem por autenticidad (detectores de ráfagas / duplicados / texto fino / anónimos) y clasifica según interacción ponderada por autenticidad. Tu trabajo es ejecutar el motor, leer su markdown estructurado y sintetizar un informe breve y honesto.
El motor hace la recuperación, puntuación y clasificación. Tú haces la prosa. No re-clasifiques, re-puntúes ni inventes datos — las etiquetas de confianza están calculadas, confía en ellas.
Ejecutar el motor
Resuelve SKILL_DIR al directorio de este SKILL.md, luego localiza el motor. Está en uno de dos lugares conocidos — empaquetado dentro del skill (instalaciones independientes) o dos niveles arriba (clon del repositorio). Revisa ambos, sin búsqueda abierta:
ENGINE=""
for cand in "$SKILL_DIR/engine/winnow.py" "$SKILL_DIR/../../engine/winnow.py"; do
[ -f "$cand" ] && ENGINE="$cand" && break
done
python3 "$ENGINE" "<TOPIC>" --sources <sources> --limit 25
- Fuentes predeterminadas:
appstorepara un nombre de app;appstore,pantipsi el usuario quiere señal regional/de Tailandia;playstorecuando el tema es un id de paquete (contiene puntos, ej.com.whatsapp). - Los nombres de apps se resuelven automáticamente a un id de App Store. Los ids de paquete van a Play Store.
- Una fuente muerta nunca falla la ejecución; registra en stderr y continúa.
Desambigua marcas ambiguas. Cuando el tema es una palabra que también significa otra cosa (Notion la app vs la banda; Apple la empresa vs la fruta) y estás usando una fuente de palabras clave (reddit, youtube, x, pantip), TÚ sabes qué sentido se quiere — así que pásalo:
--context-exclude "song,lyrics,album,music video,band,movie,trailer"
--context-include "app,software,workspace,update,feature"
Estos filtros se aplican SOLO a fuentes de palabras clave (las fuentes de reseñas se obtienen por id de app y ya son inequívocas). Proporciona una lista de exclusión ajustada para cualquier tema cuyo nombre coincida con un significado común no relacionado. Ambas banderas no tienen efecto si se omiten.
Leer la salida
El motor imprime un informe markdown: un encabezado, advertencias opcionales del corpus ⚠️, luego ítems clasificados. Cada ítem lleva:
- una etiqueta de fuente (
appstore/playstore/pantip) - calificación
N★(fuentes de reseñas) trust 0.00–1.00con una etiqueta: ✅ trusted · ⚠️ mixed · 🚩 suspiciousflags:las señales de autenticidad que se activaron (ej.review-burst, near-duplicate)
Una advertencia del corpus como "Baja confianza en el corpus (48%)" significa que la interacción está muy manipulada — dilo claramente en tu informe.
Sintetizar el informe
Emitir, en este orden:
- Título de una línea sobre lo que los usuarios reales están diciendo realmente este mes.
- Qué funciona / qué no funciona — 2–4 puntos con viñetas, cada uno basado en una reseña citada. Enlaza cada cita como
[source](url). - Nota de confianza — si algún ítem de alto rango está marcado o la confianza del corpus es baja, menciónalo: "N de los ítems principales muestran señales de push coordinado."
- Los recibos — pasa la lista clasificada del motor (o los 5–8 principales).
Reglas, mantenidas cortas a propósito:
- Nunca fabriques una reseña, calificación o número. Si el motor no devolvió nada, dilo.
- Cada cita proviene de la salida del motor. Cada enlace es un
[texto](url)real. - Lidera con la historia de autenticidad — es el objetivo principal de esta herramienta.
- Sin guiones largos en tu propia prosa; usa
-.
Eso es todo. El motor es el contrato; este archivo es delgado por diseño.