لم يعد الإنتاج يتسع في رأس أي أحد. تحتفظ Polylane به كله: السحابات والكود وبيانات القياس عن بُعد في مخطط حي واحد.
انضم إلى قائمة الانتظارIssue 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
الوكلاء بجودة سياقهم. هكذا تتعلم Polylane سياقك.
-
سحابتك كاملة، للقراءة فقط
AWS عبر دور للقراءة فقط، ومعظم المزودين عبر رمز API. كل مورد ينضم إلى المخطط، ويبقى محدثًا من تلقاء نفسه.
-
مترابط عبر المزودين
أسماء المضيفين وسجلات DNS وعناوين IP تربط السحابات: سجل CNAME في Cloudflare يشير إلى خدمة في Render. مسار الطلب الحقيقي، لا المخطط الذي رُسم قبل سنتين.
-
المهم يُراقَب بعناية أكبر
يحصل كل مورد على فئة، من حرج إلى هامشي، تُحسب يوميًا من حركة المرور ومما يعتمد عليه. ويمكنك تجاوز أي منها.
-
يدوّن ما يتعلمه
يحتفظ كل مورد بصفحة ويكي تعيد كتابة نفسها كلما انحرف نظامك، ويترك الوكلاء ملاحظاتهم: تحقيق يوليو يتعلم من تحقيق يونيو.
CLI أو MCP، الخيار لك. يتصل وكيل البرمجة الخاص بك بالطريقة التي تريدها.
تربطه أداة CLI.
تثبيت واحد يربط حزمتك التقنية ويسجّل Polylane في كل وكيل برمجة على جهازك.
يقدّمه MCP.
سحاباتك وبيانات القياس عن بُعد وعمليات النشر والكود خلف خادم MCP واحد. القراءة افتراضيًا؛ والكتابة خلف سياسة رفض افتراضي.
في الأداة التي تستخدمها أصلًا. كل وكيل يقرأ المخطط نفسه.
Code mode. رحلة واحدة ذهابًا وإيابًا، والجواب فقط.
بدلًا من استدعاء الأدوات واحدة تلو الأخرى، يكتب وكيلك TypeScript على مساحة الأسماء tools في MCP ويشغّله الخادم. النتائج الوسيطة لا تمر أبدًا بنافذة السياق؛ ولا يعود سوى الجواب.
// 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