Visão da stack
Tudo orquestrado via Docker Compose num único host (MVP) ou escalando horizontalmente. Zero dependência cloud no caminho crítico — invariante do projeto.
flowchart TB IG["Ingress
FastAPI :8000"] --> TEMP DASH["Dashboard
Next.js :3002"] --> APIGW["API Gateway
tRPC :4000"] --> TEMP MCP["MCP Server
FastMCP :8765"] --> TEMP TEMP["Temporal :7233
UI :8088"] --> PG[("Postgres :5432
+ pgvector")] TEMP --> LWT[local_worktree] & DOC[docker] & SSH[ssh] & E2B["remote_sandbox
e2b"] LWT & DOC & SSH & E2B --> LMS["LMStudio :1234
gemma4-27b + nomic"] LWT & DOC & SSH & E2B --> CLD["Claude Code CLI
Sonnet · Haiku"] TEMP --> LF["Langfuse :3000"] TEMP --> OTEL["OTel · Tempo · Loki"] --> GRAF["Grafana :3001"] PG --> GRAF
| Porta | Serviço | Função |
|---|---|---|
| 8000 | Ingress (FastAPI) | POST /v1/ingress · idempotência por content_hash · transactional outbox |
| 3002 | Dashboard (Next.js) | Inbox kanban, gates, timeline, cost explorer, releases |
| 4000 | API Gateway (tRPC) | Auth, rate-limit, audit, espelha tools MCP |
| 8765 | MCP Server (FastMCP) | 16 tools + 3 resources para Claude Code CLI humano |
| 7233 | Temporal Server | Workflow engine durável (gRPC) |
| 8088 | Temporal UI | Inspeção de workflows, signals, history |
| 5432 | Postgres + pgvector | Estado canônico · FSM · phase_events · embeddings |
| 1234 | LMStudio | gemma4-27b chat + nomic-embed-text-v1.5 (768-dim) |
| 3000 | Langfuse Web | Traces de LLM, scoring, datasets, eval |
| 3001 | Grafana | 5 dashboards + alertas Alertmanager |
| 4317/4318 | OTel Collector | gRPC/HTTP — agrega spans |
| 3100 | Loki | Logs estruturados por phase_event_id |
| 3200 | Tempo | Armazenamento distribuído de traces |
| 9090 | Prometheus | TSDB métricas (15d retention) |
Coração durável
Workflow engine self-hosted, persistido em Postgres. Cada uma das 11 fases é um child workflow durável.
Falha de processo, restart de worker, cluster reboot — o estado sobrevive. Replay determinístico para debug.
Signals para gates humanos (sem polling). Schedules para batches (MemorySync, DocGen, KnowledgeTree). Search attributes por ProjectID e ItemID para auditoria sob demanda.
Estado canônico
Nada em Redis. Nada em MongoDB. Nada perdido em cache volátil. Toda transição de estado, todo artefato, todo custo, toda memória semântica vive em uma única instância.
backlog_items
FSM canônica do item — status, content_hash, branch, commit_sha
phase_events
Audit trail invariante — toda transição de status persiste uma linha
artifacts
Plans, diffs, test_results, postmortems, deploy_logs versionados
agent_runs
Cada chamada LLM com prompt_hash, modelo efetivo, tokens, binding_role
cost_ledger
tokens_in, tokens_out, USD por run · pivot em dashboards
memory vector(768)
Embeddings pgvector · scope project · busca semântica + híbrida
gates
discovery_review, execution_gate, publication_gate, production_approval · SLA, decisão, reviewer
execution_environments
Por projeto — kind, config, commands, env_vars, env_secrets
agent_model_bindings
Mapa agente → modelo default + fallback chain · global e por projeto
Cérebros
Local em :1234/v1: gemma4-27b para chat estruturado · nomic-embed-text-v1.5 para embeddings 768-dim. Custo: zero.
Premium via Claude Code CLI: Haiku (fallback universal, $1/$5 por MTok) · Sonnet (execução em tasks L/XL, $3/$15 por MTok).
O LLMRouter resolve por agente em três camadas: override de projeto → binding default → fallback chain. Cada fallback grava agent_runs.binding_role='fallback'. Sem fallback silencioso. Custo entra como tie-breaker.
Mãos especializadas
Cada problema, sua ferramenta. O LLMRouter escolhe; o Temporal orquestra; o coding agent executa.
| Agente | Stack | Quando |
|---|---|---|
| Claude Code CLI | claude --max-turns 200 --output-format stream-json --cwd <wt> · subprocess · MCPs por projeto via ~/.claude/projects/<slug>/settings.json |
code_executor em tasks L/XL |
| OpenHands SDK | Python in-process · bash + filesystem · LLM aponta para LMStudio | code_executor em S/M · qa_triage · deploy_agent |
| OpenCode CLI | opencode run --format json --agent plan · modo plan = read-only |
planner · plan_critic · discovery_history · discovery_tech |
| Hermes Agent | hermes chat --max-turns 30 · toolsets browser/web/file/search · skill browser-harness |
discovery_market · discovery_docs · discovery_state · doc_auditor |
Ambientes por projeto
Cada projeto declara execution_environments e mapeia quatro roles a backends. Multi-tenant desde o dia zero — zero acoplamento entre projetos.
Backends: local_worktree docker ssh remote_sandbox (e2b)
Roles: agent (onde o agente roda) · task_runner (executor de tarefas) · validator (suite de testes) · publisher (deploy)
| Projeto | agent | task_runner | validator | publisher |
|---|---|---|---|---|
| nexo (NestJS) | local | docker | docker | docker compose |
| reconvert (microserviços) | local | docker | docker | ssh / EC2 |
| docgen (Python) | local | local | local | none |
Sentinelas
Um trace cruza todas. Trace LLM no Langfuse referencia o trace_id OTel, que aponta para o Activity Temporal, que persiste o phase_event_id em Postgres.
Prompts, respostas, tool calls, scoring assíncrono (5% sample), datasets para eval, prompt versioning. Cada agente abre uma trace por execução.
Spans de Activities Temporal, queries Postgres, chamadas Executor. Correlação trace_id ↔ Temporal history ↔ Langfuse trace.
Logs estruturados JSON. Busca por phase_event_id. Retenção hot 30d / cold 1y.
Métricas (latência, queue depth, health). 5 dashboards: Item Timeline, Project Health, Cost Explorer, Agent Performance, Gates Inbox. Alertas Alertmanager: budget, gate expirado, validation loop, LMStudio down, queue backlog, Postgres p99.
Portas
Quatro formas de submeter, observar e operar o pipeline. Mesma fonte de verdade no Postgres por trás de todas.
POST /v1/ingress com idempotência por content_hash em janela de 24h. Transactional outbox dispara o workflow Temporal.
Inbox kanban, gate review, item timeline, cost explorer, releases. tRPC + TanStack Query + shadcn/ui.
Auth (JWT/magic-link), rate-limit, audit log. Espelha as tools do MCP Server para integrações externas.
16 tools + 3 resources para Claude Code CLI humano: aprovações de gate, submit, search semântica, refresh memory, cost summary.
Mesma topologia roda no Mac do dev e em escala horizontal. Zero dependência cloud no caminho crítico.
← Voltar à visão executiva