Communitygithub.com

Agente Jornalista de Dados (Data2Story)

Transforma dados brutos em uma história multimídia verificável, orquestrando uma sequência de agentes especializados.

O que é Agente Jornalista de Dados (Data2Story)?

Este skill implementa um pipeline completo de jornalismo de dados que transforma conjuntos de dados brutos em blogs HTML ricos em multimídia e totalmente rastreáveis. Ele orquestra sete agentes em sequência: Detetive (pesquisa contexto externo), Analista (realiza análise quantitativa exaustiva), Editor (decide a narrativa), Designer (cria ativos visuais e multimídia usando ferramentas OpenRouter), Programador (codifica o HTML final), Auditor (corrige problemas de layout) e Inspetor (verifica a rastreabilidade sentença por sentença). O skill suporta qualquer plataforma que permita rodar scripts Python e Bash, como Claude Code, Cursor ou Codex, e exige a variável de ambiente OPENROUTER_API_KEY para geração de mídia. A principal inovação é o sistema de IDs de rastreabilidade que conecta cada elemento visual e textual no HTML final às suas fontes de dados e decisões editoriais, permitindo verificação completa da origem de cada afirmação.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add QinghongLin/data2story-skill

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Agente Jornalista de Dados (Data2Story) faz?

Transforme $ARGUMENTS em um blog. Orquestra os papéis abaixo em sequência.

Configuração

Resolva os caminhos antes de fazer qualquer coisa:

  • Nunca codifique caminhos fixos da máquina local e nunca peça ao usuário para exportar variáveis de caminho.
  • Resolva SKILL_DIR = o diretório que contém este SKILL.md (.../skills/data2story)
  • Resolva ARCHIVE_DIR = o diretório ancestral que contém skills/ (dois níveis acima de SKILL_DIR, ou seja, SKILL_DIR/../..)
  • Resolva DATA2STORY_ROOT = pai de ARCHIVE_DIR
  • Os comandos abaixo usam placeholders simbólicos como ARCHIVE_DIR; substitua-os pelos caminhos resolvidos e entre aspas antes de executar Bash.
  • DATA_NAME = o nome da pasta do conjunto de dados (ex.: pick_a_card)
  • DATA_DIR = se $ARGUMENTS for um caminho existente, use esse caminho; caso contrário, use DATA2STORY_ROOT/data/{DATA_NAME}
  • TIMESTAMP = hora atual formatada como MMDD_HHMM (ex.: 0401_1618): date +%m%d_%H%M (executar em bash)
  • PROJECT_DIR = DATA2STORY_ROOT/project/{DATA_NAME}/blog_{MODEL}_{TIMESTAMP}
  • Crie PROJECT_DIR/, PROJECT_DIR/assets/, PROJECT_DIR/code/

Arquivamento

Imediatamente após criar PROJECT_DIR, tire um snapshot dos skills atuais:

mkdir -p PROJECT_DIR/archival
cp -r ARCHIVE_DIR/skills PROJECT_DIR/archival/skills

Isso preserva as versões exatas dos skills usadas nesta execução.

Ferramentas disponíveis

Todas as ferramentas de mídia roteiam através do OpenRouter. Defina OPENROUTER_API_KEY antes de qualquer chamada de geração.

A geração de mídia é trabalho do Designer, então as ferramentas de mídia (text2image, text2video, image2video, text2music, embeddings) ficam em SKILL_DIR/designer/scripts/openrouter-*/. A lista completa — modelos padrão e invocações exatas de python3 ... — está em designer/references/tools.json; a documentação completa por ferramenta está no próprio SKILL.md de cada uma, em SKILL_DIR/designer/scripts/openrouter-*/.

Visão Geral do Pipeline

O pipeline é uma única sequência linear que produz um blog HTML rastreável a partir de dados brutos:

DADOS → Detetive → Analista → Editor → Designer → Programador → Auditor → Inspetor → index.html final + viewer.html

Execute cada estágio em ordem. Cada estágio lê o(s) artefato(s) anterior(es) antes de começar. Não prossiga para o próximo estágio até que o artefato atual esteja completo.

Estágio 1 — Detetive

Entrada: DATA_DIR Saída: PROJECT_DIR/detective.json O quê: Pesquisa contexto externo — conhecimento de fundo, histórico do domínio, descobertas relacionadas, por que esses dados importam. Cada descoberta recebe um ID det_xx.

Estágio 2 — Analista

Entrada: DATA_DIR, PROJECT_DIR/detective.json Saída: PROJECT_DIR/code/*.py, PROJECT_DIR/analyst.json O quê: Análise quantitativa exaustiva dos dados, informada pelo contexto do detetive. Todo o código salvo em code/ como scripts executáveis. Cada descoberta recebe um ID ana_xx com calculation (arquivo + linhas + saída) e data_table (dados prontos para gráfico).

Estágio 3 — Editor

Entrada: PROJECT_DIR/detective.json, PROJECT_DIR/analyst.json Saída: PROJECT_DIR/editor.md, PROJECT_DIR/editor.json O quê: Decisões editoriais — quais descobertas importam, qual é o arco narrativo, o que o blog argumenta. Cada seção recebe um ID edt_xx com referências explícitas a descobertas ana_xx e contexto det_xx. Sem design visual.

Estágio 4 — Designer

Entrada: PROJECT_DIR/editor.md, PROJECT_DIR/editor.json, PROJECT_DIR/analyst.json Saída: PROJECT_DIR/designer.json, PROJECT_DIR/assets/* O quê: Decisões visuais criativas baseadas em dados — como apresentar cada ponto usando gráficos, imagens, vídeos, áudio, mapas, interativos, destaques de estatísticas, instâncias ou tratamento somente texto quando apropriado. A mistura de mídia deve emergir das propriedades do conjunto de dados, não de uma lista fixa. A página deve ser rica em multimídia por padrão: tome emprestada a linguagem visual do skill compartilhado frontend-design e use todos os cinco canais (gráfico, imagem, vídeo, áudio, interativo/mapa) a menos que o fallback documentado de um canal seria fabricado ou puramente decorativo. Cada visual recebe um ID des_xx com data_source apontando para data_tables de ana_xx quando orientado a dados. Gera os ativos selecionados. Sem HTML.

Estágio 5 — Programador

Entrada: PROJECT_DIR/editor.md, PROJECT_DIR/editor.json, PROJECT_DIR/analyst.json, PROJECT_DIR/designer.json Saída: PROJECT_DIR/index.html O quê: Implementa o blog final em HTML. Aplica o tema/acento registrado em designer.json page_rhythm e toma emprestadas receitas de componentes + tokens do skill frontend-design. Resolve dados de gráficos a partir de data_tables em analyst.json (SEM acesso a dados brutos). Marca cada elemento com atributos data-edt, data-ana, data-det, data-des para rastreabilidade.

Estágio 6 — Auditor

Entrada: PROJECT_DIR/index.html Saída: PROJECT_DIR/index.html (modificado), PROJECT_DIR/auditor.json O quê: Detecta e corrige problemas de layout (sobreposição, espaçamento, alinhamento) sem alterar conteúdo ou intenção de design. Executa automaticamente após o Programador para garantir que os elementos visuais estejam devidamente encapsulados e espaçados.

Chamada: Skill auditor PROJECT_DIR

Estágio 7 — Inspetor

Entrada: PROJECT_DIR/index.html, todos os arquivos JSON Saída: PROJECT_DIR/inspector.json, PROJECT_DIR/viewer.html O quê: Executa verificação de rastreabilidade no nível da sentença e gera um visualizador interativo. Dois passos:

python3 SKILL_DIR/inspector/scripts/verify.py PROJECT_DIR --log-errors
python3 SKILL_DIR/inspector/scripts/generate_viewer.py PROJECT_DIR

Passo 1 produz inspector.json (mapeamento sentença→evidência). Passo 2 produz viewer.html (autocontido, funciona em file:// — nenhum servidor necessário). Veja inspector/SKILL.md para detalhes.

Rastreabilidade: fluxo de IDs através do pipeline

det_01 ──┐
det_02 ──┤
         ├──▶ ana_01 (based_on: [det_02]) ──┐
         │    ana_02 (based_on: [])          ├──▶ edt_01 (findings: [ana_01, ana_02], context: [det_01]) ──▶ des_01 (section: edt_01, data_source: ana_01)
         │    ana_03 (based_on: [det_01])    │    edt_02 (findings: [ana_03], context: [det_02])         ──▶ des_02 (section: edt_02, data_source: ana_03)
         └────────────────────────────────────┘

Cada valor no HTML final pode ser rastreado: HTML data-des="des_01" → designer.json des_01.data_source="ana_01" → analyst.json ana_01.calculation.code → verificável.

Regras de transferência

  • Cada artefato deve estar completo antes do próximo estágio começar.
  • Se um artefato estiver faltando seções obrigatórias, corrija-o antes de prosseguir.
  • Portão de riqueza multimídia (após Designer, antes do Programador): designer.json deve exercitar todos os cinco canais (gráfico, imagem, vídeo, áudio, interativo_ou_mapa). Para qualquer canal marcado como used:false, confirme que seu fallback documentado foi genuinamente tentado e uma razão baseada em dados foi registrada em meta.media_decisions. Se um canal foi pulado por conveniência e não porque os dados não o suportam, envie-o de volta ao Designer antes que o Programador execute.
  • Todos os ativos gerados vão apenas para PROJECT_DIR/assets/.
  • Entregas finais: PROJECT_DIR/index.html, PROJECT_DIR/detective.json, PROJECT_DIR/analyst.json, PROJECT_DIR/code/*.py, PROJECT_DIR/editor.md, PROJECT_DIR/editor.json, PROJECT_DIR/designer.json, PROJECT_DIR/inspector.json, PROJECT_DIR/viewer.html.

Habilidades Relacionadas