Communitygithub.com

redirhan/panel-tr-lite

Panel TR — Grupo focal sintético basado en evidencia para audiencia turca. Evalúa reels, sitios web, publicaciones y ofertas antes de publicarlos, usando tarjetas de usuario turcas (18-24 a 55+, metropolitano/Anatolia/rural, usuarios intensivos/livianos de Instagram, escépticos y de baja tecnología) que responden en turco. Lite incluye 10 tarjetas de espectador, una opción y un informe rápido.

¿Qué es panel-tr-lite?

Panel TR-lite es un agente de IA especializado en grupos focales sintéticos para contenido dirigido a la audiencia turca. Simula 10 espectadores distintos (basados en datos demográficos reales de TÜİK, DataReportal y NapoleonCat) para evaluar reels, sitios web, publicaciones u ofertas antes de su lanzamiento. Los evaluadores analizan solo lo que realmente verían (fotogramas de video, capturas de pantalla del sitio, imágenes de publicaciones) y responden en turco con métricas clave: ¿se detendrían en los primeros 3 segundos?, ¿qué comunica?, confiabilidad del 1 al 5, intención de DM/seguimiento/compra, precio (si corresponde), principal objeción y una corrección concreta. Los grupos se ejecutan en subagentes separados (paralelos), los números los cuenta el script y el informe final incluye una casilla de honestidad obligatoria que recuerda que estos datos no son investigación de mercado real. Este skill es ideal para validación rápida antes de publicar, para elegir entre opciones A/B (en versión Pro) y se activa con comandos como "panel", "grupo focal", "test" o "muestra a diferentes grupos de edad". Se implementa con Python, Playwright (Firefox/WebKit), y requiere config.yaml para rutas y calibración.

Compatible con✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/redirhan/panel-tr-lite/tree/main

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Panel TR (grupo focal sintético)

Para qué sirve: detectar problemas antes de enfrentarse a una audiencia real — una oferta que no se entiende, texto pequeño ilegible, una apertura que no engancha en los primeros 3 segundos, algo que ahuyenta a cierto grupo de edad. Qué no es: una predicción de ventas o investigación de mercado. Los números son conteo de respuestas sintéticas, nunca un "% del mercado".

Versiones (archivo EDITION): Lite = 10 tarjetas de espectador, una opción, informe rápido listo. Pro = 30 espectadores + 24 tarjetas de comprador (10 segmentos), modo A/B, tablas y gráficos por segmento, redactor de informe separado. Los pasos exclusivos de Pro se marcan a continuación como (Pro); en Lite el script los rechaza cortésmente.

Archivos

SKILL.md                    este archivo
EDITION                     lite | pro
config.example.yaml         copiar -> config.yaml (rutas, navegador, tasas base); no requiere ruta absoluta
requirements.txt            PyYAML, Pillow, playwright (para el modo sitio)
personas/viewers.yaml       tarjetas de espectador (Lite 10, Pro 30)
personas/buyers.yaml        tarjetas de comprador (solo Pro, 24)
sources/index.yaml + *.md   resúmenes de fuentes públicas citadas por las tarjetas (TÜİK, DataReportal, ...)
prompts/persona_batch.md    instrucción para un subagente de grupo (panel.py completa el plan)
prompts/aggregator.md       (Pro) instrucción para el redactor de informe (panel.py completa report-prompt)
scripts/make_stimulus.py    video/sitio/publicación -> fotogramas, capturas de pantalla, stimulus.md
scripts/panel.py            doctor | validate | cite | init-run | plan [--dry-run] | report-prompt (Pro)
scripts/aggregate.py        responses/*.json -> tablas, gráficos, controles de honestidad, informe rápido
examples/demo-kafe-reel/    ejemplo completo con un reel ficticio de cafetería

A continuación, S = carpeta de este skill (generalmente ~/.claude/skills/panel-tr), PY = python3 (preferiblemente S/.venv/bin/python). Las carpetas de ejecución se escriben dentro de runs_dir en config.yaml (por defecto ~/panel-tr-runs).

Pasos

  1. En la instalación inicial / si hay problemas: PY S/scripts/panel.py doctor (dependencias, ffmpeg, navegador, versión). Si las tarjetas cambiaron: PY S/scripts/panel.py validate debe dar 0 errores. PY S/scripts/panel.py cite V07 imprime una tarjeta junto con las líneas de la fuente que cita.
  2. Carpeta de ejecución: RUN=$(PY S/scripts/panel.py init-run --slug kafe-reels-v2) → plantillas en RUN/inputs/.
  3. Escribir las entradas (en RUN/inputs/), en turco neutro, a partir de tu propia revisión:
    • context.txt — dónde y cómo la persona ve esto ("Aparece en el feed de Reels; la cuenta que lo comparte es @x; tiene texto de descripción o no"). Escribe la cuenta solo si es visible en la aplicación. Nunca escribas quién lo hizo, qué objetivo tiene o qué versión prefieres.
    • onscreen.txt (video) — cada texto en pantalla, con intervalo de tiempo, tal como aparece.
    • audio.txt (video) — lo que se escucha, como hecho: sonido ambiente o qué pista, desde qué segundo, si hay voz/efectos, si es coherente con la imagen. Se muestra a las personas con el título "NUESTRO ANÁLISIS — tú no lo has oído".
    • caption.txt (publicación/reel) — texto de descripción que se publicará, si lo hay.
  4. Estímulo (uno por opción; A/B = stimulus_A, stimulus_B):
    PY S/scripts/make_stimulus.py video IN.mp4 RUN/stimulus --onscreen RUN/inputs/onscreen.txt --audio RUN/inputs/audio.txt [--caption RUN/inputs/caption.txt] [--transcript]
    PY S/scripts/make_stimulus.py site https://ejemplo.com RUN/stimulus        # o un .html local
    PY S/scripts/make_stimulus.py post a.jpg,b.jpg,c.jpg RUN/stimulus --caption RUN/inputs/caption.txt
    
    Video: fotogramas en 0,0/0,5/…/2,5 segundos, luego uno por segundo + último fotograma; sheet_00_ilk3sn.jpg y páginas numeradas 2-3 con la marca de tiempo debajo de cada fotograma; --transcript añade el texto si hay voz (si faster-whisper / openai-whisper está instalado). Sitio: Playwright Firefox (predeterminado) o WebKit — escritorio 1440×900 y móvil 390×844, primera pantalla + página completa en fragmentos de dos pantallas, además del texto visible. Chrome / Chromium / Chrome for Testing no se abre nunca. Abre las páginas tú mismo y verifica que onscreen.txt coincida con los fotogramas.
  5. Planificar el panel:
    PY S/scripts/panel.py plan --run RUN --panel viewer --n 10 --batches 2 --stimulus RUN/stimulus --context-file RUN/inputs/context.txt [--action "…"] [--seed 7] [--dry-run]
    PY S/scripts/panel.py plan --run RUN --panel viewer --n 30 --batches 6 …                                   (Pro)
    PY S/scripts/panel.py plan --run RUN --panel buyer --n 24 --batches 5 --segments kafe_restoran,emlak,… …   (Pro)
    PY S/scripts/panel.py plan … --stimulus-a RUN/stimulus_A --stimulus-b RUN/stimulus_B                     (Pro, A/B)
    
    Tamaños: control rápido 10 personas (2×5); control completo (Pro) 30 espectadores (6×5) y/o 24 compradores (5×~5). La selección de espectadores se pondera según la distribución de edad de Instagram Turquía (config: viewer_age_weights, fuente NapoleonCat), al menos una persona por grupo de edad; ~20% personas "fuera de objetivo" (--out-share); --local İzmir prioriza personas de esa ciudad; --ids para selección manual. En cada panel queda al menos un escéptico/fuera de objetivo. A/B (Pro): las opciones se muestran como "Opción 1/2"; los grupos impares ven primero A, los pares ven primero B; la clave solo está en plan.json, no en ningún prompt. Si la pregunta de acción predeterminada no encaja, cámbiala con --action ("¿Al ver este reel irías este fin de semana?").
  6. Ejecutar los grupos — un subagente nuevo y separado por cada grupo, todos en paralelo. Usa un agente de propósito general en la herramienta de agente, no un fork (el fork carga nuestro contexto y expectativa). Prompt: "Lee <RUN>/batches/batch_NN.md y haz exactamente lo que dice. Escribe solo el archivo JSON que nombra." Cada subagente solo ve su propio archivo de prompt y las imágenes. Luego verifica que exista cada archivo RUN/responses/batch_NN.json; vuelve a ejecutar una vez el grupo fallido con el mismo prompt.
  7. Contar: PY S/scripts/aggregate.py RUN --title "…" [--real-people "…"] → RUN/data/panel_data.md, chart_aksiyon.png, chart_ilk3sn.png, all_answers.md y controles: esquema, fundamento (referencia a un fotograma no mostrado = la persona inventó algo), eco de tarjeta (la persona repitió su propia tarjeta), univocidad (solapamiento de palabras dentro del grupo vs entre grupos). Lite también escribe aquí el informe rápido RUN/PANEL_REPORT.md. Pro además escribe tablas y gráficos por segmento (chart_aksiyon_<dimensión>.png) y la preferencia A/B.
  8. (Pro) Informe: PY S/scripts/panel.py report-prompt --run RUN --title "…" --real-people "…" → RUN/aggregator_prompt.md. Entrégaselo a un subagente nuevo ("Lee … y hazlo") → RUN/PANEL_REPORT.md (objeciones agrupadas, correcciones prioritarias, comentario de segmento). Lee el informe comparándolo con all_answers.md (las citas deben ser reales, los números no deben haber cambiado).
  9. Informar al usuario (en turco): 3-5 líneas de resultado con números, primeras 3 correcciones, la frase de la casilla de honestidad y 3-5 personas reales que deberían verificar el resultado. El panel no reemplaza el gusto del usuario o del cliente.

Reglas

  • Primero la evidencia. Cada característica de la tarjeta termina con [CLAVE:Fnn] (una línea de hecho en sources/) o [suposición]. panel.py validate verifica cada referencia. Hoy aproximadamente la mitad de las características son [suposición] (no hay datos públicos medidos para personalidad y gusto) — el informe imprime esta proporción. Para añadir tu propia investigación, escribe un .md con líneas "Fnn …" dentro de sources/ y agrega su clave a sources/index.yaml.
  • Sin teoría de ficción/marketing en las tarjetas. Las tarjetas contienen hechos sobre la persona (trabajo, ciudad, presupuesto, hábito), no nuestras opiniones (como "los primeros 2 segundos son importantes"). De lo contrario, el panel nos devolvería nuestras propias creencias.
  • Variedad intencionada: se mantienen escépticos, sensibles al precio, personas con baja tecnología, habitantes rurales, conservadores, personas mayores con uso intensivo de Facebook, personas fuera de objetivo. Su "no" es información valiosa para la segmentación.
  • Evaluar solo lo mostrado. Las personas ven fotogramas, capturas de pantalla, imágenes y los hechos de texto/audio que escribimos. No vieron el video ni oyeron el audio; cada respuesta se basa en ≥ 2 fotogramas; lo que no pueden evaluar va al campo goremedigim. El audio siempre es "nuestro análisis", nunca "lo oí".
  • Prueba ciega: en los archivos context/onscreen/audio no hay información sobre quién lo hizo, "nuestra versión" o la respuesta esperada; las etiquetas A/B son neutras y el orden está balanceado.
  • No amable, sino calibrado: el prompt incluye una tasa base real (archivo calibration en config.yaml; valores predeterminados de tasas de interacción de Click Analytic / Socialinsider y tasa de respuesta de correo frío de Hunter, ver sources/EB_*.md). Si conoces la tasa real de tu cuenta, escríbela. Un panel donde la mayoría dice "le envío un DM" es una bandera roja, no un éxito.
  • Contextos independientes: un subagente por grupo; dentro del grupo, cada persona responde por turno, sin usar las frases de la persona anterior. Si aggregate.py advierte de univocidad, vuelve a ejecutar con grupos más pequeños (3).
  • Los números los cuenta el script, las palabras las escribe el modelo. El redactor del informe no puede inventar ni volver a contar los números.
  • Casilla de honestidad obligatoria en cada informe: sintético ≠ datos de mercado; verificar con 3-5 personas reales (¿te detendrías en los primeros 3 segundos? ¿qué comunica en una frase? ¿qué harías después?).
  • Las respuestas son en turco y en boca de la persona; en las citas se conserva la İ/ı turca.
  • Costo: ~6-8 imágenes por grupo; una ejecución de 10 personas ≈ 2 subagentes en paralelo; una de 30 personas ≈ 6 subagentes + 1 redactor de informe. Para borradores, control rápido (10); para la versión final, panel completo (Pro, 24-30).
  • Privacidad: las carpetas de ejecución son locales; no suben material del cliente a otro lugar. Antes de compartir, limpia las entradas que contengan nombre del cliente o datos personales.

Carpeta de salida

RUN/inputs/{context,onscreen,audio,caption}.txt
RUN/stimulus[_A|_B]/{stimulus.md,stimulus.json,sheet_*.jpg,frames/|shots/|post/}
RUN/plan.json  RUN/batches/batch_NN.md  RUN/responses/batch_NN.json
RUN/data/{panel_data.md,panel_data.json,all_answers.md,chart_*.png}
RUN/PANEL_REPORT.md            (Lite: informe rápido; Pro: informe del redactor, informe rápido en data/quick_report.md)
RUN/aggregator_prompt.md       (Pro)

Skills relacionados