A produção deixou de caber na cabeça de alguém. O Polylane guarda tudo: nuvens, código e telemetria em um único grafo ao vivo.
Entrar na lista de esperaIssue hotspot: 4 issues in the last 7 days
Change hotspot: 12 changes in the last 7 days
Change hotspot: 7 changes in the last 7 days
Issue hotspot: 2 issues in the last 7 days
Issue hotspot: 1 issue in the last 7 days
Change hotspot: 3 changes in the last 7 days
Agentes são tão bons quanto seu contexto. Veja como o Polylane aprende o seu.
-
Toda a sua nuvem, somente leitura
AWS por meio de uma role somente leitura, a maioria dos provedores com um token de API. Cada recurso entra no grafo, e ele se mantém atualizado sozinho.
-
Ligado entre provedores
Hostnames, registros DNS e IPs conectam as nuvens: um CNAME da Cloudflare apontando para um serviço no Render. O caminho real da requisição, não o diagrama de dois anos atrás.
-
O que importa, observado de perto
Cada recurso recebe um nível, de crítico a mínimo, calculado diariamente a partir do tráfego e do que depende dele. Você pode sobrescrever qualquer um.
-
Ele anota as coisas
Cada recurso mantém uma wiki que se reescreve conforme seu sistema muda, e os agentes deixam notas: a investigação de julho aprende com a de junho.
CLI ou MCP, você escolhe. Seu agente de programação se conecta do jeito que você preferir.
A CLI faz a ligação.
Uma instalação conecta sua stack e registra o Polylane em todos os agentes de programação da sua máquina.
O MCP entrega.
Suas nuvens, telemetria, deploys e código atrás de um único servidor MCP. Leituras por padrão; escritas ficam atrás de uma política de negação por padrão.
Na ferramenta que você já usa. Todo agente lê o mesmo grafo.
Code mode. Uma ida e volta, só a resposta.
Em vez de chamar ferramentas uma a uma, seu agente escreve TypeScript contra o namespace tools do MCP e o servidor executa. Resultados intermediários nunca tocam a janela de contexto; só a resposta volta.
// Which deploy slowed checkout-edge? const deploys = await tools.deployHistory({ service: "checkout-edge", hours: 24 }); const { points } = await tools.queryMetrics({ service: "checkout-edge", metric: "latency.p99", hours: 24, }); const median = (xs) => xs.sort((a, b) => a - b)[xs.length >> 1] ?? 0; const p99 = (t, side) => median(points.filter((p) => (side < 0 ? p.t < t : p.t > t)).map((p) => p.v)); // Score every deploy by the p99 shift across its timestamp. const [worst] = deploys .map((d) => ({ ...d, shift: p99(d.at, 1) / p99(d.at, -1) })) .sort((a, b) => b.shift - a.shift); // Pull the error logs right after the suspect deploy. const errors = await tools.queryLogs({ service: "checkout-edge", level: "error", after: worst.at, limit: 5, }); // Only this returns; the series and logs stay in the sandbox. return { deploy: worst.sha, // 9f3c2a1 p99Shift: worst.shift, // 4.8 topError: errors[0]?.message, // "Hyperdrive pool exhausted" };
✓ one answer back; twenty round trips saved