Die Produktion passt in keinen Kopf mehr. Polylane hält alles: Clouds, Code und Telemetrie in einem Live-Graph.
Auf die WartelisteIssue 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
Agenten sind so gut wie ihr Kontext. So lernt Polylane deinen.
-
Deine ganze Cloud, nur lesend
AWS über eine nur lesende Rolle, die meisten Provider mit einem API-Token. Jede Ressource kommt in den Graph, und er bleibt von selbst aktuell.
-
Über Provider hinweg verknüpft
Hostnames, DNS-Einträge und IPs verbinden die Clouds: ein Cloudflare-CNAME, der auf einen Render-Service zeigt. Der echte Request-Pfad, nicht das Diagramm von vor zwei Jahren.
-
Das Wichtige, genauer beobachtet
Jede Ressource bekommt ein Tier, von kritisch bis minimal, täglich abgeleitet aus Traffic und dem, was von ihr abhängt. Überschreib alles davon.
-
Es schreibt mit
Jede Ressource führt ein Wiki, das sich neu schreibt, wenn dein System driftet, und Agenten hinterlassen Notizen: Die Untersuchung im Juli lernt von der im Juni.
CLI oder MCP, deine Wahl. Dein Coding-Agent verbindet sich, wie du willst.
Die CLI verdrahtet es.
Eine Installation verbindet deinen Stack und registriert Polylane in jedem Coding-Agenten auf deinem Rechner.
MCP liefert es.
Deine Clouds, Telemetrie, Deploys und dein Code hinter einem MCP-Server. Lesen standardmäßig; Schreiben sitzt hinter einer Default-Deny-Policy.
Im Tool, das du schon benutzt. Jeder Agent liest denselben Graph.
Code Mode. Ein Roundtrip, nur die Antwort.
Statt Tools einzeln aufzurufen, schreibt dein Agent TypeScript gegen den tools-Namespace des MCP, und der Server führt es aus. Zwischenergebnisse berühren das Kontextfenster nie; nur die Antwort kommt zurück.
// 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