🫡 Aspira · Documentação Técnica

Daily Briefing — Workflow Completo

Arquitetura, agentes, fontes de dados e fluxo de execução do briefing diário de mercado crypto.

Horário 07:00 BRT diário
Destinos Telegram tópico 685 · WhatsApp
Script principal briefing-daily-telegram.sh
Status ● Operacional
18
Listas Twitter
11
Sites de notícias
8
Categorias
4
APIs de mercado
~10min
Tempo execução
1

Cron OpenClaw vs Crontab Linux

Duas camadas de agendamento — cada uma com propósito diferente

Linux Crontab
  • O que é: Agendador nativo do sistema operacional Linux. Existe fora do OpenClaw.
  • Executa: Scripts shell .sh, comandos do sistema, programas Node.js diretamente.
  • Não tem IA: Roda o script e pronto — sem raciocínio, sem contexto, sem memória.
  • Persiste: Mesmo se o OpenClaw reiniciar, o crontab continua funcionando.
  • Onde fica: Arquivo do sistema operacional (crontab -e).
  • Uso no Briefing: Dispara o briefing-daily-telegram.sh às 07h BRT todo dia.
# crontab -l (Linux system)
0 10 * * * /workspace/scripts/briefing-daily-telegram.sh
# ↑ 07:00 BRT (10:00 UTC)
OpenClaw Cron tool
  • O que é: Sistema de agendamento integrado ao OpenClaw — tem IA dentro.
  • Executa: Sessões de agentes (agentTurn) ou eventos de sistema (systemEvent).
  • Tem IA: O agente recebe o prompt, raciocina, usa ferramentas, lê arquivos, envia mensagens.
  • Gerenciado: Via cron(action=list/add/update/remove) ou interface OpenClaw.
  • Onde fica: Banco de dados interno do OpenClaw (persiste entre reinicios).
  • Uso no sistema: Analytics, HTML system manual, Meta Ads alerts, audit diário, etc.
// OpenClaw cron job (com IA)
{ schedule: "0 9 * * * America/Sao_Paulo",
  payload: { kind: "agentTurn",
    message: "Gere o analytics..." } }
💡
Por que o briefing usa crontab Linux e não OpenClaw cron? O agregador (aggregate.js) é um processo Node.js pesado que demora até 10 minutos e usa APIs externas diretamente — não precisa de raciocínio de IA para coletar dados. O crontab Linux é mais eficiente, confiável e barato para essa tarefa. O OpenClaw cron é ideal para tarefas que precisam de raciocínio (analytics, relatórios, suporte).
2

Qual agente faz as pesquisas?

Papel de cada agente no ecossistema de inteligência

🤖
Sistema Automático (aggregate.js)
Responsável pelo Daily Briefing — roda sem agente IA
  • Coleta dados de CoinGecko, FRED, Coinglass, Fear&Greed em paralelo
  • Raspa 11 sites de notícias crypto via Firecrawl
  • Lê 7 listas prioritárias + 7 secundárias do Twitter via bird CLI
  • Valida e enriquece com Perplexity AI + Groq para síntese final
  • Usa scoring semântico (mínimo 4/10) para filtrar ruído
  • Categoriza automaticamente em 8 categorias via LLM categorizer
Automático
🧠
NERD (Claude Haiku)
Especialista em pesquisa e análise profunda — chamado sob demanda
  • Usado quando Diego pede análise específica de mercado, projetos ou dados
  • Ferramentas: Perplexity, Tavily Search, Firecrawl, FRED API, YouTube API
  • Produz relatórios estruturados com citações e fontes
  • Não roda automaticamente no briefing — é chamado via sessions_spawn
Sob demanda
📊
ANALYTICS (Claude Sonnet)
Métricas, dashboards e Meta Ads — roda via OpenClaw cron
  • Roda às 09:00 BRT pelo OpenClaw cron para consolidar analytics do dia
  • Lê Instagram, Meta Ads e YouTube e monta relatório visual para Diego
  • Envia para tópico Analytics (10325) — separado do briefing de mercado
  • Também gere campanhas Meta Ads quando Diego solicita
OpenClaw cron
3

Workflow Completo do Daily Briefing

Cada fase, em ordem — do trigger até a entrega no Telegram e WhatsApp

trigger
FASE 0 Trigger — Linux Crontab 07:00 BRT exato

O crontab do Linux dispara o script briefing-daily-telegram.sh automaticamente às 07:00 BRT (10:00 UTC). Antes de qualquer coisa, o sistema verifica o lock file (/tmp/briefing-daily.lock) — se já estiver rodando, cancela para evitar duplicatas. Também checa a flag de envio (/tmp/briefing-sent-YYYY-MM-DD.flag) para garantir que só envia uma vez por dia.

🔍 check
FASE 1 Pre-Flight Validation ~10 segundos

Antes de coletar qualquer dado, o health-check.js valida o sistema: verifica se as credenciais do 1Password estão acessíveis, se as APIs essenciais estão respondendo e se o ambiente está saudável. Se falhar aqui, o briefing aborta completamente — melhor não enviar do que enviar dados errados. Em seguida, o recovery.js cria um backup do briefing anterior antes de sobrescrever.

📡 coleta
FASE 2 Coleta de Dados — Paralelo Total ~3-5 minutos

O aggregate.js dispara todas as coletas em paralelo usando Promise.all().

📈 CoinGecko Preços BTC, ETH, SOL e top altcoins em tempo real
🏛️ FRED API Dados macro: CPI, Fed Funds, DXY, Treasury yields
📊 Coinglass Derivativos: funding rates, OI, liquidações, CVD
😨 Fear & Greed Índice de sentimento do mercado (0-100)
🕷️ Firecrawl 11 sites de notícias crypto (The Block, Decrypt, Defiant...)
🐦 Twitter/X 7 listas priority + 7 secundárias + 19 perfis via bird CLI
🔎 Tavily Search Busca web para validar notícias e completar gaps
🔐 1Password Todas as chaves de API carregadas via op read — zero hardcode
🧠 process
FASE 3 Processamento e Inteligência IA ~3-4 minutos

Após coletar, os dados brutos passam por 6 camadas de processamento em sequência: Filter + Clean, LLM Categorizer, Translate, Confluence Detection, Narrative Analysis, Perplexity Enrichment.

🧹 Filter + Clean

Remove spam, duplicatas e conteúdo irrelevante. Aplica scoring de engajamento mínimo (score ≥ 10) e scoring semântico mínimo (score ≥ 4/10) para cada item.

🏷️ LLM Categorizer

Classifica cada item nas 8 categorias usando Groq (modelo rápido). Máximo de 5 itens por categoria para não sobrecarregar o briefing.

8 Categorias do Briefing Final
🌍
MACRO
CRYPTO
🏦
DEFI
🏛️
INSTITUCIONAL
🎁
AIRDROPS
ALPHAS
📊
ON-CHAIN
🔗
TOKENIZATION
✍️ format
FASE 4 Formatação — Compacto Diego v3 ~30 segundos

O format-diego-compact-v3.js converte o JSON processado em texto compacto para Telegram/WhatsApp. 100% português brasileiro, links incluídos, formato otimizado para leitura rápida. Se o v3 falhar, tenta v2 automaticamente como fallback, depois v1 como último recurso.

format-v3.js
PT-BR + links (principal)
⚠️
format-v2.js
Fallback automático
🆘
format-v1.js
Último recurso
🚨
Emergency
recovery.js gera mínimo
📤 envio
FASE 5 Entrega nos Canais ~10 segundos

O briefing formatado é enviado para dois canais. O Telegram é crítico — se falhar, o processo aborta e cria uma flag de pendência que o heartbeat processa depois. O WhatsApp é não-crítico — falha é logada mas não interrompe.

✈️
Telegram
Grupo Central Aspira · Tópico 685
🔴 Crítico
💬
WhatsApp
+555599096505 (Diego)
🟡 Não-crítico
done
FASE 6 Finalização e Limpeza ~5 segundos

Cria a flag /tmp/briefing-sent-YYYY-MM-DD.flag para garantir que não rode de novo hoje. Remove arquivos com mais de 7 dias do diretório de output. Remove backups com mais de 3 dias. Registra status de sucesso via mc-register.sh para auditoria.

4

Sistema de Recovery (Falhas)

O que acontece quando algo dá errado

⚠️
Aggregator falha
Timeout, API down, erro de rede
  • Script detecta o erro e dispara recovery.js emergency
  • Emergency gera um briefing minimalista com os dados em cache
  • Se o emergency também falhar, grava flag /tmp/briefing-pending-send.flag
  • No próximo heartbeat, ASPIRA detecta a flag e tenta reenviar
🔴
Telegram falha no envio
API timeout, gateway offline
  • Script aborta e grava /tmp/briefing-pending-send.flag com a data
  • No próximo heartbeat, ASPIRA lê a flag, carrega o output/YYYY-MM-DD-diego-compact.md
  • ASPIRA envia o conteúdo diretamente para Diego no WhatsApp
  • Deleta a flag após envio bem-sucedido
5

Configuração Atual do Sistema

Estado operacional em produção

Horário
07:00 BRT
10:00 UTC · todo dia útil
crontab: 0 10 * * *
Destinos
✈️ Telegram tópico 685
💬 WhatsApp +55 55 9909-6505
Credenciais
🔐 1Password vault "Aspira"
Groq API · Perplexity · Twitter
Firecrawl · Coinglass · FRED