Naiavs.Flue
Análise comparativa entre a arquitetura agêntica em produção do Instituto Avalanche e o framework Flue. Onde se duplicam, onde se complementam, e onde o trabalho real precisa ficar.
A pergunta não é se Flue substitui Naia. É onde faz sentido coexistir.
São coisas diferentes. Naia é um sistema operacional agêntico maduro em produção; Flue é um framework de runtime experimental (v0.3.x). Comparar feature-a-feature é injusto pra ambos.
Existe complementaridade real: Flue brilha em agentes stateless serverless (escala a zero, custo variável, deploy global). Naia brilha em stateful com filesystem real, browser, MCPs, históricos longos.
O ganho prático não é trocar runtime — é extrair os conceitos do Flue (sandbox virtual, AGENTS.md MD-driven, deploy multi-target) e aplicar onde a arquitetura atual da Naia tem dívida (clones em VPS dedicada, custo fixo 24/7).
Lado a lado, sem rodeios.
Naia
Sistema agêntico operacional do Instituto Avalanche — Claude Code CLI rodando 24/7 em hardware dedicado.
- Tipo
- Runtime monolítico stateful
- Versão
- claude-opus-4-7 · effort max
- Idade
- ~9 meses em produção contínua
- Hosting
- Hetzner Dedicada · 16 vCPU · 64GB
- Modelo
- Anthropic Claude Code CLI oficial
- Stack
- tmux · systemd · Postgres+pgvector
Forças
- Filesystem real do SO: roda ffmpeg, browser headless, qualquer binário Linux
- Claude Code CLI maduro, atualizado pela Anthropic, hooks customizáveis
- Memória vetorial dedicada com 25k+ msgs e busca semântica <50ms
- Bot Telegram externo desacoplado: msgs nunca se perdem se Claude reinicia
- 5 clones systemd: paralelismo real entre agentes, cada um com session própria
- tmux session resumível: estado preservado entre restarts
- 14 subagents declarativos em Markdown: edição direta sem deploy
Fraquezas
- Custo fixo 24/7 da VPS dedicada, mesmo em silêncio
- Vertical-only: pra escalar precisa de mais RAM/CPU na mesma máquina
- Sem failover geográfico — se Hetzner cair, Naia some
- Onboarding manual: provisionar nova instância exige sysadmin
- Plugin ecosystem do Claude Code é limitado (3 MCP servers ativos)
- Você é responsável por backup, monitoring, hardening (PermitRootLogin pendente)
Flue
Framework TypeScript do time Astro pra construir agentes programáveis com sandbox e deploy multi-target.
- Tipo
- Framework de runtime stateless
- Versão
- @flue/sdk 0.3.11 · experimental
- Idade
- Lançado em 2026 · APIs em mudança
- Hosting
- Node.js · Cloudflare Workers + DO
- Modelos
- Multi-provider via pi-ai registry
- Stack
- esbuild · just-bash · Hono · DO SQLite
Forças
- Deploy multi-target idêntico:
flue build --target node|cloudflare - Custo elástico: paga só durante request, idle = $0
- Sessions automaticamente persistidas em DO SQLite (sem código)
- Sandbox virtual just-bash sem container = startup instantâneo
- Workers AI binding: usa Llama/Kimi/Mistral sem chave de API
- Skills/AGENTS.md descobertos em runtime do filesystem
- connectMcpServer() built-in pra integração MCP remota
- Distribuído globalmente — DO spawna no POP mais próximo do usuário
Fraquezas
- Experimental: README declara "APIs may change"
- Limites duros do Worker: 30s CPU/request, 128MB RAM
- Sem filesystem real — não roda ffmpeg, browser, binários nativos
- Pra trabalho pesado precisa de sandbox externo (Daytona/Modal/E2B = $$)
- Sem hooks/lifecycle equivalentes ao Claude Code (anti-promise, grounding)
- Ecossistema ainda raso (3 conectores oficiais documentados)
- Lock-in arquitetural caso APIs mudem em versões futuras
Linha por linha, onde uma vence e a outra perde.
| Dimensão | Naia (em produção) | Flue (alternativa) |
|---|---|---|
| RuntimeO que executa o agente | CLI OficialClaude Code CLI binário /usr/local/bin/claude rodando direto. Sem framework intermediário. Anthropic mantém. | Framework TSPacote npm @flue/sdk. Você escreve handler TS, ele constrói server. Atravessa esbuild + plugin de target. |
| ModeloLLM por baixo | Lock fixoclaude-opus-4-7 com --effort max. 1M de contexto. Modelo único, premium, sempre o mesmo. | Multi-provideranthropic/openai/google/openrouter/cloudflare. Troca por chamada. Inclui Workers AI free tier. |
| HospedagemOnde roda fisicamente | VPS fixaHetzner Dedicada Falkenstein. AMD Ryzen 7 PRO · 16 vCPU · 64GB RAM. Hardware seu. | Edge globalCloudflare Workers em 300+ POPs OU Node em qualquer host. Mesmo código, dois deploys. |
| CustoQuanto sai por mês | Fixo~R$500/mês de VPS dedicada (24/7) + token Claude OAuth (Plus). Mesmo se ninguém usar. | Variável$0 idle. Pay-per-request. Estimativa: 1k convs/dia × 10 msgs ≈ $10-30/mês em CF. |
| EscalaComo aguenta crescer | VerticalMais carga = mais RAM/CPU na mesma máquina. Limite físico do hardware. | Horizontal ∞Cada session = um DO próprio. CF spawna isolates conforme demanda. Sem teto. |
| Latência geográficaDe São Paulo, pra fora | ~250msHetzner Falkenstein, sempre quente. Rota fixa Brasil → Alemanha. | ~5-50msPOP mais próximo (GRU em SP). Cold start V8: 5ms. Latência depende de onde DO foi pinado. |
| Boot da sessãoComo começa | tmux + start.shsystemd → tmux → claude --continue. Auto-restart com backoff exponencial 5s→15s. 3 crashes em 2min vira FRESH. | StatelessWorker recebe request → DO acorda (instantâneo) → handler roda → DO dorme. Sem boot perceptível. |
| Persistência de sessãoMemória entre conversas | JSONL + PostgresSessions em ~/.claude/projects/*.jsonl. Memória vetorial em naia_memory Postgres com pgvector + HNSW. | DO SQLiteCada session = uma row em DO SQLite. Survives forever. Cloudflare faz backup. Zero código de persistência. |
| SubagentsComo delegar trabalho | 2 camadasCamada A: 14 .claude/agents/*.md (Agent tool, mesma sessão). Camada B: 5 clones systemd independentes com tmux+bot próprios. | session.task()Sub-sessão detached que herda sandbox. Ou role (instructions overlay). Dentro do mesmo runtime. |
| FilesystemO que o agente pode tocar | Linux realAcesso completo ao SO. ffmpeg, browser headless, binários nativos, qualquer apt-get. Sem sandbox. | Virtual ou externoDefault: just-bash em memória (rápido, barato). Pra real: integrar Daytona/E2B/Modal/CF Containers (extra $$). |
| Hooks de cicloCustomizar cada momento | 6 ativosSessionStart, UserPromptSubmit (grounding-search), PreCompact (memory flush), Stop (anti-promise + complete-task), SubagentStop, PostToolUse (keep-typing). | Ainda não temNenhum hook lifecycle equivalente. Você pode envelopar em código TS, mas não é um sistema declarativo. |
| MCPIntegração com tools externas | Configurado3 MCP servers ativos: github, filesystem, context7. Configurado em .mcp.json. | BuiltinconnectMcpServer() com transport HTTP/SSE. Tools fluem direto pro agent. |
| ChannelsComo o usuário fala com o agente | Telegram bot externoBot Python /opt/naia-bot/bot.py faz polling, escreve em inbox/, injeta no tmux via send-keys. Audio Whisper + ElevenLabs. | HTTP webhookCada agente é um endpoint /agents/<name>/<id>. Você integra qualquer canal por cima (Telegram, WhatsApp, web). |
| Memória vetorialBusca semântica | pgvector próprioPostgreSQL + extensão pgvector + índice HNSW. 25.660+ mensagens, 6.072 chunks indexados. Latência <50ms. | Você implementaNão é built-in. Pode usar Vectorize da CF (compatível DO) ou plugar Pinecone/Qdrant. Mais flexível mas mais trabalho. |
| ConcorrênciaMúltiplas conversas simultâneas | tmux multi-pane6 instâncias paralelas (Naia + 5 clones), cada uma single-threaded. Limite de RAM da máquina. | Isolate per sessionCada session ID = um isolate próprio em V8. CF garante isolamento e ordem por DO. |
| ObservabilidadeSaber o que tá rolando | journalctl + tailjournalctl -u naia-agent + tail logs/agent.log. tmux capture-pane pra ver state. Sem dashboard. | Wrangler + dashboardwrangler tail pra logs ao vivo. Cloudflare Analytics nativo. Métricas de DO no dashboard. |
| AtualizaçõesComo sobe versão | npm i -g claudeClaude CLI atualiza pelo npm global. Naia restart automático puxa nova versão. Anthropic decide cadência. | flue build + deploynpm update @flue/sdk + flue build + wrangler deploy. Você controla quando. |
| MaturidadePode confiar? | Produção real9 meses no ar, 25k msgs processadas, sobreviveu 4-day downtime de abril/2026 e o protocolo de boot foi reescrito por causa disso. | Experimentalv0.3.11. README diz textualmente "APIs may change". Backed pelo time Astro (sério), mas é cedo pra produção crítica. |
| Lock-inO que prende | Anthropic CLILock no Claude Code CLI + modelo Anthropic. Mas é a CLI oficial, não um wrapper de terceiros — risco baixo. | Framework jovemLock no @flue/sdk. Se Astro descontinuar ou refatorar pesado, você precisa migrar. |
| EcosistemaComunidade e plugins | Pequeno mas estávelSkills internos (videodb, remotion) + 3 MCP servers + bot Python custom. Você é o mantenedor. | Astro-adjacenteRepo open source Apache-2.0, 2.8k stars. Conectores via "flue add" (markdown). Ainda formando. |
Onde cada uma realmente brilha.
Naia continua sendo o coração
Conversa stateful longa (>10k msgs), workspace persistente em FS real, browser headless, edição de mídia, integração WhatsApp Cloud, projetos que dependem de binários Linux específicos.
O bot Telegram externo + memória vetorial + 6 instâncias paralelas é uma stack que não tem equivalente direto no Flue hoje. Trocar isso por Worker é regredir.
Custo fixo da Hetzner Dedicada se justifica enquanto Naia é o ponto único de contato com o Chefe e os clones operam 24/7.
Flue como infra complementar
Agentes stateless que não precisam de memória longa: webhook que classifica leads, transformação de payload, agente de pesquisa one-shot, automação de campanhas Meta Ads, OCR de documento.
Endpoints públicos multi-tenant: cada cliente do CRM Avalanche poderia ter um agente Flue isolado em DO próprio, com escala $0 idle e cobrança proporcional ao uso.
Funcionalidades novas que não exigem filesystem real e onde latência geográfica baixa é vantagem (resposta rápida em chat embarcado, p.ex.).
Não é migrar.
É combinar.
Ao invés de quebrar o que funciona, extrair os ganhos do Flue exatamente onde a Naia tem dor: clones que poderiam ser stateless, multi-tenancy, escala elástica e custo variável.
- Manter Naia como ponto único de comando. Ela continua sendo a interface principal com o Chefe. Telegram, memória, hooks, conversas longas — nada se mexe.
- Avaliar migração dos 5 clones (davi, fernando, jonathan, rafael, rodrigo) pra Flue. Cada clone hoje é uma instância Claude Code 24/7 em VPS dedicada. Se forem stateless ou semi-stateless, viram endpoint Flue com custo zero quando não estão atendendo. Naia chama via webhook.
- Construir o "squad SaaS" externo em Flue. Agentes pra cliente final do CRM Avalanche (SDR multi-tenant, atendimento white-label) ficam em Flue + Cloudflare. Cada cliente = um DO. Escala automática, custo proporcional.
- Importar o conceito AGENTS.md MD-driven do Flue pra dentro da Naia. O CLAUDE.md de 29KB hoje é um arquivo monolítico. O modelo Flue de skill packs separados (.agents/skills/<name>/SKILL.md) com discovery por filesystem cabe dentro da Naia também — mais modular, mais editável.
- Não tocar na memória vetorial pgvector. É a peça mais valiosa da arquitetura atual. Migrar pra Vectorize/Pinecone seria perda de controle e quebra de schema. Continue como está.
- Resolver as dívidas técnicas pendentes antes de qualquer coisa nova. STARTUP.md aponta IP errado, SOUL.md tem squad antigo (Scout/Codex/Pixel...), WhatsApp Cloud desconectado, hardening SSH, cron-scripts com erro. Casa em ordem antes de expandir.