Arquitetura
Mapa
- Interface
- Acesso único
- Modelos
- Ferramentas e dados
- Automação
Visão geral
O Heimdall-ai tem quatro camadas, da base para o topo.
- Modelos. O Ollama executa os modelos de linguagem no Mac (chip Apple, 16 GB de memória).
- Acesso único. O LiteLLM Proxy (porta 9000) expõe todos os modelos em uma API compatível com a da OpenAI e repassa os servidores MCP. Clientes como o Open WebUI e aplicativos de iPhone falam só com ele.
- Ferramentas. Dois servidores MCP em Python (portas 8000 e 8001) e o servidor de documentação da AWS dão ao modelo ferramentas: busca na web, leitura de páginas, arquivos, memória, documentos pessoais.
- Automações. O n8n agenda fluxos que usam os modelos e as ferramentas. O agente do Mac (porta 8003) liga o n8n, que roda em Docker, aos aplicativos do macOS. O Bark entrega os avisos no iPhone.
O caminho de uma pergunta no chat
- A pessoa escreve no Open WebUI (pelo navegador ou pelo celular, pela rede privada Tailscale).
- O Open WebUI envia ao LiteLLM, que encaminha ao Ollama o modelo escolhido.
- Se o modelo decide usar uma ferramenta, devolve uma chamada estruturada; o LiteLLM a executa no servidor MCP correspondente e devolve o resultado ao modelo.
- O modelo escreve a resposta final com o que a ferramenta trouxe.
O caminho de uma automação
- O n8n dispara um fluxo no horário (ou por um evento, como um git push).
- O fluxo busca dados (feeds, SearXNG, Qdrant, notas) e pede análises ao modelo pelo LiteLLM.
- O resultado vai para o app Notas, o Calendário ou os Lembretes, pelo agente do Mac, e um resumo chega ao iPhone pelo Bark.
- Se qualquer etapa falha, o fluxo de aviso de falha notifica; nenhuma automação falha em silêncio.
Serviços e portas
| Serviço | Função | Porta | Como sobe |
|---|---|---|---|
| Ollama | Executa os modelos de linguagem no Mac. | 11434 | start_heimdall.sh (inicia se não estiver rodando) |
| LiteLLM Proxy | Ponto único de acesso (API compatível com a da OpenAI) aos modelos; também expõe os servidores MCP. | 9000 | start_heimdall.sh |
| Servidor MCP do Mac (admin) | Ferramentas que mexem no Mac: arquivos, métricas, memória e documentos. | 8000 | start_heimdall.sh |
| Servidor MCP público | Ferramentas seguras para convidados: web, cálculo, feeds, transcrições. | 8001 | start_heimdall.sh |
| SearXNG | Mecanismo de busca na web que não rastreia quem pesquisa. | 8080 | start_heimdall.sh (Docker) |
| Qdrant | Base vetorial: busca por significado nos documentos e nas notas. | 6333 | start_heimdall.sh (Docker) |
| Open WebUI | Interface de chat usada pelos convidados e pelo dono. | 3000 | --webui ou HEIMDALL_WEBUI=1 |
| Open Terminal | Terminal acessível pelo Open WebUI. | 8002 | --terminal |
| n8n | Automações e tarefas agendadas. | 5678 | --n8n ou HEIMDALL_N8N=1 |
| Agente do Mac | Ponte entre o n8n (no Docker) e o app Notas, o Calendário, os Lembretes e a voz do macOS. | 8003 | --agente (sobe sozinho com HEIMDALL_AGENTE_TOKEN) |
| Docling | Extração de texto de PDFs, com OCR. | 5001 | --docling ou HEIMDALL_DOCLING=1 |
| Uptime Kuma | Painel de disponibilidade dos serviços. | 3001 | start_heimdall.sh (HEIMDALL_MONITORING=0 desliga) |
| Dozzle | Leitor de logs dos contêineres. | 8081 | start_heimdall.sh (HEIMDALL_MONITORING=0 desliga) |
| Emulador de AWS (Moto ou LocalStack) | Para testar código de AWS sem custo. | 4566 | start_heimdall.sh (HEIMDALL_AWS_EMULATOR) |
Os serviços de Docker escutam só no próprio computador. O acesso de fora passa pela rede privada Tailscale ou por túnel da Cloudflare com autenticação.
Princípios de privacidade e segurança
- Dados pessoais ficam no Mac. Chaves e identificadores ficam no arquivo
.env, com permissão restrita, e nunca no repositório. - Pastas privadas são intocáveis. Notas de pastas marcadas como privadas nunca são lidas, indexadas nem analisadas. Se a verificação falhar, nenhuma nota é entregue.
- O agente só escreve onde deve. Grava apenas nas pastas do próprio Heimdall e nas pastas de temas de estudo.
- Autenticidade antes de confiança. O vigia de e-mail só trata como oficial o remetente que o Gmail confirmou, e nunca segue links.
- Sem falha silenciosa. Quando uma fonte não responde, o aviso diz isso e nunca finge que não há novidade.
- Entradas externas são dados, não ordens. Textos de páginas, e-mails e documentos passados ao modelo são tratados como conteúdo não confiável.