Panel TR (grupo focal sintético)
Para que serve: capturar problemas antes de um público real — oferta incompreensível, letra pequena ilegível, abertura que não prende ninguém nos primeiros 3 segundos, algo que afasta uma determinada faixa etária. O que não é: previsão de vendas ou pesquisa de mercado. Os números são contagens de respostas sintéticas, nunca "% do mercado".
Versões (arquivo EDITION): Lite = 10 cartões de espectador, uma única opção, relatório rápido pronto. Pro = 30 espectadores + 24 cartões de comprador (10 segmentos), modo A/B, tabelas e gráficos por segmento, redator de relatório separado. Etapas exclusivas do Pro estão marcadas abaixo como (Pro) ; no Lite, o script as recusa educadamente.
Arquivos
SKILL.md este arquivo
EDITION lite | pro
config.example.yaml copiar -> config.yaml (caminhos, navegador, taxas base); caminho absoluto não é necessário
requirements.txt PyYAML, Pillow, playwright (para modo site)
personas/viewers.yaml cartões de espectador (Lite 10, Pro 30)
personas/buyers.yaml cartões de comprador (apenas Pro, 24)
sources/index.yaml + *.md resumos de fontes públicas referenciadas pelos cartões (TÜİK, DataReportal, ...)
prompts/persona_batch.md instrução para subagente de um lote (panel.py preenche o plano)
prompts/aggregator.md (Pro) instrução para redator de relatório (panel.py preenche report-prompt)
scripts/make_stimulus.py vídeo/site/postagem -> quadros, capturas de tela, stimulus.md
scripts/panel.py doctor | validate | cite | init-run | plan [--dry-run] | report-prompt (Pro)
scripts/aggregate.py responses/*.json -> tabelas, gráficos, verificações de integridade, relatório rápido
examples/demo-kafe-reel/ execução de exemplo completa com um Reels fictício de cafeteria
Abaixo, S = a pasta desta skill (geralmente ~/.claude/skills/panel-tr), PY = python3 (de preferência S/.venv/bin/python). As pastas de execução são gravadas em runs_dir dentro do config.yaml (padrão ~/panel-tr-runs).
Etapas
- Na primeira instalação / em caso de problema:
PY S/scripts/panel.py doctor(dependências, ffmpeg, navegador, versão). Se os cartões mudaram:PY S/scripts/panel.py validatedeve indicar 0 erros.PY S/scripts/panel.py cite V07exibe um cartão lado a lado com as linhas da fonte a que se refere. - Pasta de execução:
RUN=$(PY S/scripts/panel.py init-run --slug kafe-reels-v2)→ modelos emRUN/inputs/. - Escreva as entradas (em
RUN/inputs/), em turco neutro, a partir da sua própria análise:context.txt— onde e como a pessoa vê isso ("Aparece no feed de Reels; a conta que compartilha é @x; há texto de descrição / não há"). Escreva a conta que compartilha apenas se ela aparecer no aplicativo. Nunca escreva quem fez, qual é o objetivo ou qual versão é preferida.onscreen.txt(vídeo) — cada texto na tela, com intervalo de tempo, exatamente como aparece na tela.audio.txt(vídeo) — o que se ouve, como fato: som ambiente ou qual música, a partir de qual segundo, há fala/efeitos sonoros, é coerente com a imagem. É mostrado às pessoas com o título "NOSSA ANÁLISE — você não ouviu".caption.txt(postagem/Reels) — o texto de descrição que será publicado, se houver.
- Estímulo (um para cada opção; A/B =
stimulus_A,stimulus_B):
Vídeo: quadros em 0,0 / 0,5 / … / 2,5 segundos, depois um por segundo + último quadro;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://exemplo.com RUN/stimulus # ou um .html local PY S/scripts/make_stimulus.py post a.jpg,b.jpg,c.jpg RUN/stimulus --caption RUN/inputs/caption.txtsheet_00_ilk3sn.jpge páginas numeradas 2-3 com cada quadro abaixo com o tempo;--transcriptadiciona o texto da fala se houver (se faster-whisper / openai-whisper estiver instalado). Site: Playwright Firefox (padrão) ou WebKit — desktop 1440×900 e mobile 390×844, primeira tela + página inteira em fatias de duas telas, além do texto visível. Chrome / Chromium / Chrome for Testing nunca são abertos. Abra as páginas você mesmo e verifique seonscreen.txtcorresponde aos quadros. - Planeje o painel:
Tamanhos: verificação rápida 10 pessoas (2×5); verificação completa (Pro) 30 espectadores (6×5) e/ou 24 compradores (5×~5). A seleção de espectadores é ponderada pela distribuição etária do Instagram na Turquia (config: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 cafeteria_restaurante,imoveis,… … (Pro) PY S/scripts/panel.py plan … --stimulus-a RUN/stimulus_A --stimulus-b RUN/stimulus_B (Pro, A/B)viewer_age_weights, fonte NapoleonCat), pelo menos uma pessoa de cada faixa etária; ~20% de pessoas "fora do alvo" (--out-share);--local İzmirprioriza pessoas dessa cidade;--idspara seleção manual. Cada painel mantém pelo menos um cético/pessoa fora do alvo. A/B (Pro): as opções são mostradas como "Opção 1/2"; grupos ímpares veem A primeiro, grupos pares veem B primeiro; a chave fica apenas emplan.json, não em nenhum prompt. Se a pergunta de ação padrão não se aplicar, use--actionpara alterá-la ("Ao ver este Reels, você iria lá neste fim de semana?"). - Execute os lotes — cada lote em um subagente separado e novo, todos em paralelo. Na ferramenta de agente, use um agente de propósito geral, não fork (fork carrega nosso contexto e expectativa). Prompt: "Leia
<RUN>/batches/batch_NN.mde faça exatamente o que ele diz. Escreva apenas o arquivo JSON que ele nomeia." Cada subagente vê apenas seu próprio arquivo de prompt e as imagens. Depois verifique se cada arquivoRUN/responses/batch_NN.jsonexiste; execute novamente o lote com falha uma vez com o mesmo prompt. - Conte:
PY S/scripts/aggregate.py RUN --title "…" [--real-people "…"]→RUN/data/panel_data.md,chart_acao.png,chart_pri3seg.png,all_answers.mde verificações: schema, base (referência a um quadro não mostrado = a pessoa inventou algo), eco do cartão (a pessoa repetiu seu próprio cartão), monofonia (sobreposição de palavras dentro do lote vs entre lotes). Lite também escreve aqui o relatório rápidoRUN/PANEL_REPORT.md. Pro adicionalmente escreve tabelas para cada dimensão, gráficos por segmento (chart_acao_<dimensao>.png) e a preferência A/B. - (Pro) Relatório:
PY S/scripts/panel.py report-prompt --run RUN --title "…" --real-people "…"→RUN/aggregator_prompt.md. Dê a um novo subagente ("Leia … e faça") →RUN/PANEL_REPORT.md(objeções agrupadas, correções prioritárias, comentário por segmento). Leia o relatório comparando comall_answers.md(as citações devem ser reais, os números não devem ter sido alterados). - Diga ao usuário (em turco): 3-5 linhas de resultados com números, as primeiras 3 correções, a frase da caixa de honestidade e quem deveriam ser 3-5 pessoas reais. O painel não substitui o gosto do usuário ou do cliente.
Regras
- Evidência primeiro. Cada característica do cartão termina com
[CHAVE:Fnn](uma linha de fato emsources/) ou[suposicao].panel.py validateverifica cada referência. Hoje cerca de metade das características são[suposicao](não há dados públicos medidos para personalidade e gosto) — o relatório imprime essa proporção. Para adicionar sua própria pesquisa, escreva um .md com linhas "Fnn …" emsources/e adicione sua chave emsources/index.yaml. - Sem ficção/teoria de marketing nos cartões. Os cartões trazem fatos sobre a pessoa (trabalho, cidade, orçamento, hábito), não nossas opiniões (como "os primeiros 2 segundos são importantes"). Caso contrário, o painel apenas repetiria nossas próprias crenças.
- Diversidade intencional: céticos, sensíveis a preço, pessoas com baixa tecnologia, moradores de vilas, conservadores, idosos com uso intenso de Facebook, pessoas fora do alvo permanecem. O "não" deles é informação de segmentação.
- Avalie apenas o que é mostrado. As pessoas veem os quadros, capturas de tela, imagens e os fatos de texto/áudio que escrevemos. Elas não assistiram ao vídeo, não ouviram o áudio; cada resposta é baseada em ≥ 2 quadros; o que não puderam avaliar vai para o campo
naovejo. O áudio é sempre "nossa análise", nunca "ouvi". - Teste cego: os arquivos context/onscreen/audio não contêm quem fez, "nossa versão" ou a resposta esperada; os rótulos A/B são neutros e a ordem é balanceada.
- Não educado, calibrado: o prompt carrega uma taxa base real (
calibrationno config.yaml; padrões são taxas de engajamento do Click Analytic / Socialinsider e taxa de resposta de e-mail frio do Hunter, vejasources/EB_*.md). Se você conhece a taxa real da sua conta, escreva-a. Um painel onde a maioria diz "Eu mandaria DM" é uma bandeira vermelha, não um sucesso. - Contextos independentes: um subagente por lote; dentro do lote, cada pessoa escreve em sequência, sem usar as frases da pessoa anterior. Se aggregate.py emitir um aviso de monofonia, execute novamente com lotes menores (3).
- O script conta os números, o modelo escreve as palavras. O redator do relatório não pode inventar ou recontar números.
- Caixa de honestidade obrigatória em todo relatório: sintético ≠ dados de mercado; valide com 3-5 pessoas reais (você pararia nos primeiros 3 segundos? O que explica em uma frase? O que faria depois?).
- As respostas são em turco e do próprio vocabulário da pessoa; nas citações, preserva-se o İ/ı turco.
- Custo: ~6-8 imagens por lote; execução de 10 pessoas ≈ 2 subagentes paralelos; 30 pessoas ≈ 6 subagentes + 1 redator de relatório. Para rascunhos, verificação rápida (10); para a versão final, painel completo (Pro, 24-30).
- Privacidade: as pastas de execução são locais; não enviam material do cliente para nenhum outro lugar. Antes de compartilhar, limpe as entradas que contenham nome do cliente ou dados pessoais.
Pasta de saída
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: relatório rápido; Pro: relatório do redator de relatório, relatório rápido data/quick_report.md)
RUN/aggregator_prompt.md (Pro)