Não foi possível conectar em .
Verifique se o servidor FastAPI está rodando:
uvicorn main:app --reload
Nesta arquitetura, o agente atua como uma camada de inteligência sobre os dados operacionais. A partir de uma instrução em linguagem natural — digitada ou dita pelo usuário — o sistema consulta APIs e banco de dados em tempo real, processa os dados em ambiente Python isolado e entrega a análise na forma de texto, gráficos, planilhas Excel ou relatórios PDF.
O objetivo é eliminar a dependência de intermediários para consultas analíticas rotineiras: o operador ou gestor formula a pergunta diretamente ao sistema — "qual linha teve mais paradas esta semana?" — e recebe uma resposta fundamentada em dados reais, sem dado inventado e sem espera.
Em paralelo, um daemon de agendamento executa monitores periódicos definidos pelo próprio agente: dispara alertas de threshold visíveis no dashboard quando uma condição operacional é cruzada, e gera relatórios automáticos por e-mail nos horários configurados — tudo sem intervenção humana.
"Um orquestrador interpreta o pedido em linguagem natural: responde na hora com gráficos, tabelas ou PDFs via streaming SSE — ou agenda a ação para rodar automaticamente, gerando código Python validado que executa em sandbox determinístico sem depender do LLM a cada ciclo: alertas, relatórios, comandos em máquinas, notificações — operação autônoma 24/7."
A espinha dorsal é um grafo de estados (StateGraph) isolado em dois níveis de decisão.
O SchedulingGraph é um StateGraph determinístico com responsabilidade exclusiva de criar e manter o task_code. Para criação, o nó consultar_dados chama o sub-agente analista no modo PARA_AGENDAMENTO, que retorna apenas contexto estruturado (endpoint exato, colunas observadas, amostra de dados) — nunca o código em si. O nó gerar_codigo usa esse contexto como base para um LLM gerar o def run(from_date, to_date, ctx) determinístico. Para edições, o nó editar_codigo lê o código atual e aplica a modificação mínima solicitada, sem acionar o analista. Em ambos os fluxos, o código passa por testar_codigo (sandbox real), com até 3 ciclos de corrigir_codigo se houver erro. O sub-agente analista continua responsável por análises ad-hoc (PDF, Excel, gráficos); o sub-agente scheduling cuida das operações CRUD e versionamento do task_code com rollback. O daemon verifica tarefas a cada 60s e executa via runner.py em sandbox Python restrito (sem import dentro de run()). As ações possíveis vão muito além de relatórios — qualquer coisa acessível via ctx.api(): gráficos, PDFs, alertas por e-mail, notificações externas, etc.
Cada etapa chega ao frontend via Server-Sent Events, transmitida por um side-channel de fila por sessão.
| Linha | Paradas | OEE | Meta | Δ OEE |
|---|---|---|---|---|
| Linha 1 | 1 | 86,2% | 88,0% | −1,8 p.p. |
| Linha 2 | 3 | 81,4% | 87,8% | −6,4 p.p. |
| Linha 3 | 0 | 89,7% | 88,0% | +1,7 p.p. |
Gráficos Matplotlib são convertidos para PNG, salvos no SQLite com UUID e injetados como token no Markdown da resposta.
O agente não apenas responde — ele aprende uma tarefa e a executa sozinho no futuro. O gestor descreve em linguagem natural o que quer que aconteça e quando; o agente escreve, testa e salva o código Python de execução. A partir daí, o daemon roda o código diretamente no horário definido, sem passar pelo LLM.
"Me mande a produção do dia todo dia às 7h" — o agente infere nome, frequência e horário. Sem formulários.
O orquestrador executa a análise ao vivo, observa os dados reais e escreve o task_code com endpoints e colunas verificados. Testa antes de salvar.
O daemon roda o runner.py em sandbox restrito — sem LLM, sem variação. Retry automático com backoff. Histórico de versões com rollback.
Ações possíveis nas tarefas agendadas
Cada skill é um arquivo .md que documenta um endpoint industrial. O agente não carrega tudo no startup — isso desperdiçaria tokens em skills que podem nunca ser usadas naquela sessão.
read_skill('nome.md') e recebe o documento completo só naquele momento.
O agente gera e executa código Python em tempo real sobre os dados da operação. Não é uma consulta fixa — é um analista que raciocina, transforma e entrega o que for necessário.
O gestor pode pedir análise de um turno ou de seis meses — o agente trata da mesma forma, sem degradação de desempenho e sem aumento de custo proporcional ao volume.
Os DataFrames nunca trafegam para o LLM. O modelo recebe apenas metadados e raciocina sobre eles sem ver os dados brutos.
O agente processa os dados em passos incrementais no sandbox Python e só devolve o resultado final ao LLM.
Analisar 6 meses de produção custa os mesmos tokens que analisar 1 dia — o volume fica no banco, o LLM só vê o que importa.
O agente não depende apenas de dados estruturados — ele também enxerga o que está na tela. O usuário seleciona qualquer área do dashboard com um clique e arraste; a captura é enviada junto com a mensagem e o modelo analisa o conteúdo visual diretamente, identificando tendências, anomalias e padrões nos gráficos.
Usa a API getDisplayMedia do browser — captura o frame real da aba, incluindo fontes, oklch e recursos externos. Zero dependências externas, zero CORS.
Overlay com crosshair permite selecionar qualquer retângulo da tela com arrastar e soltar. Até 3 recortes por mensagem — o stream de vídeo é mantido aberto para não pedir permissão repetidamente.
As imagens são enviadas como partes de uma HumanMessage multimodal ao Gemini. O agente pode complementar a análise visual com dados numéricos exatos via get_dashboard_charts().
Como a engenharia de software aplicada resolve as dores do chão de fábrica.
Sub-agente só responde baseado no output de analisar_dataframe. Sem dados executados, sem resposta.
Streaming SSE ativo nativamente, atualizando o raciocínio e tool calls em tempo real.
O namespace em memória armazena as transformações por etapa sem poluir a janela de contexto do LLM.
Checkpointer nativo em SQLite salva o estado exato da conversa vinculada ao ID da sessão.
Extensibilidade plug-and-play através de arquivos Markdown simples em um diretório de skills mapeado.
Lazy-loading estratégico restringe a injeção do prompt de sistema apenas à skill correlacionada ao escopo.
O agente pode criar painéis de gráficos diretamente no dashboard a partir de uma instrução em chat — sem nenhum formulário ou configuração manual. Cada painel é salvo no banco vinculado ao user_id do browser e reaparece automaticamente a cada abertura da página. O usuário pode reordenar por arrastar-e-soltar e remover painéis individualmente.
"Crie um gráfico de barras com o OEE por linha dos últimos 7 dias" — o agente executa a análise, monta a config Chart.js e persiste no SQLite via POST /dashboard-widgets.
O endpoint GET /dashboard-widgets/{id}/data devolve o objeto Chart.js completo. O frontend instancia o gráfico diretamente — sem lógica de mapeamento no browser.
A ordem dos painéis é salva no localStorage por user_id. Drag-and-drop nativo sem bibliotecas — o DOM é a fonte de verdade da ordem.
Além das tarefas recorrentes, o agente suporta execuções disparadas manualmente a qualquer momento — sem necessidade de configurar frequência ou horário. O usuário pede a análise no chat com "execute agora e me avise quando terminar"; o daemon roda em background e empurra um alerta ao dashboard assim que conclui, sem bloquear a interface.
O agente cria uma tarefa com frequency="on_demand" e next_run imediato. O daemon a detecta no próximo ciclo (≤ 60s) e inicia a execução.
Roda no mesmo runner.py sandbox das tarefas agendadas — namespace efêmero, sem interferência nas sessões interativas do chat. O histórico de execução fica registrado em task_runs.
Ao finalizar, o daemon empurra um alerta via POST /alerts. O badge de alertas no header acende e o artefato gerado aparece no painel Artifacts — tudo sem recarregar a página.
Digite qualquer um dos comandos abaixo no chat. Clique no botão ↗ copiar para colar direto no campo de mensagem.