From 952c84c19545536b23bce16e6ee765ffdfcbd13c Mon Sep 17 00:00:00 2001 From: Lucas Gomide Date: Tue, 26 May 2026 15:42:27 -0300 Subject: [PATCH] Add Agent Control Plane docs (#5939) * docs: split Agent Control Plane into Overview/Monitoring/Rules and localize Mirror the secrets-manager folder convention for ACP: one folder per locale with overview, monitoring, and rules pages. Replaces the two flat agent-control-plane.mdx / agent-control-plane-rules.mdx files with a 3-page layout, adds full translations for pt-BR, ko, and ar, and rewires docs.json to register the new paths under each locale's Manage group across the same 4 versions where ACP already lived. * docs: flag Agent Control Plane as Beta in overview pages Add a Beta callout right after the lead screenshot on the ACP overview page across en, pt-BR, ko, and ar, matching the convention used by Secrets Manager. --- .../agent-control-plane/monitoring.mdx | 104 +++++++++++++ .../features/agent-control-plane/overview.mdx | 74 +++++++++ .../features/agent-control-plane/rules.mdx | 114 ++++++++++++++ docs/docs.json | 144 ++++++++++++++++++ .../agent-control-plane/monitoring.mdx | 104 +++++++++++++ .../features/agent-control-plane/overview.mdx | 74 +++++++++ .../features/agent-control-plane/rules.mdx | 114 ++++++++++++++ .../enterprise/acp-automation-panel-costs.png | Bin 0 -> 203848 bytes .../acp-automation-panel-health.png | Bin 0 -> 182245 bytes .../acp-automation-panel-tokens.png | Bin 0 -> 159498 bytes .../enterprise/acp-automations-table.png | Bin 0 -> 350852 bytes .../enterprise/acp-consumption-table.png | Bin 0 -> 335208 bytes .../acp-overview-automations-sankey.png | Bin 0 -> 459454 bytes .../acp-overview-consumption-sankey.png | Bin 0 -> 380804 bytes .../enterprise/acp-provider-panel-cost.png | Bin 0 -> 168619 bytes .../enterprise/acp-provider-panel-tokens.png | Bin 0 -> 166208 bytes .../enterprise/acp-rules-edit-side-panel.png | Bin 0 -> 205013 bytes .../enterprise/acp-rules-engaged-modal.png | Bin 0 -> 74135 bytes docs/images/enterprise/acp-rules-list.png | Bin 0 -> 136777 bytes .../agent-control-plane/monitoring.mdx | 104 +++++++++++++ .../features/agent-control-plane/overview.mdx | 74 +++++++++ .../features/agent-control-plane/rules.mdx | 114 ++++++++++++++ .../agent-control-plane/monitoring.mdx | 104 +++++++++++++ .../features/agent-control-plane/overview.mdx | 74 +++++++++ .../features/agent-control-plane/rules.mdx | 114 ++++++++++++++ 25 files changed, 1312 insertions(+) create mode 100644 docs/ar/enterprise/features/agent-control-plane/monitoring.mdx create mode 100644 docs/ar/enterprise/features/agent-control-plane/overview.mdx create mode 100644 docs/ar/enterprise/features/agent-control-plane/rules.mdx create mode 100644 docs/en/enterprise/features/agent-control-plane/monitoring.mdx create mode 100644 docs/en/enterprise/features/agent-control-plane/overview.mdx create mode 100644 docs/en/enterprise/features/agent-control-plane/rules.mdx create mode 100644 docs/images/enterprise/acp-automation-panel-costs.png create mode 100644 docs/images/enterprise/acp-automation-panel-health.png create mode 100644 docs/images/enterprise/acp-automation-panel-tokens.png create mode 100644 docs/images/enterprise/acp-automations-table.png create mode 100644 docs/images/enterprise/acp-consumption-table.png create mode 100644 docs/images/enterprise/acp-overview-automations-sankey.png create mode 100644 docs/images/enterprise/acp-overview-consumption-sankey.png create mode 100644 docs/images/enterprise/acp-provider-panel-cost.png create mode 100644 docs/images/enterprise/acp-provider-panel-tokens.png create mode 100644 docs/images/enterprise/acp-rules-edit-side-panel.png create mode 100644 docs/images/enterprise/acp-rules-engaged-modal.png create mode 100644 docs/images/enterprise/acp-rules-list.png create mode 100644 docs/ko/enterprise/features/agent-control-plane/monitoring.mdx create mode 100644 docs/ko/enterprise/features/agent-control-plane/overview.mdx create mode 100644 docs/ko/enterprise/features/agent-control-plane/rules.mdx create mode 100644 docs/pt-BR/enterprise/features/agent-control-plane/monitoring.mdx create mode 100644 docs/pt-BR/enterprise/features/agent-control-plane/overview.mdx create mode 100644 docs/pt-BR/enterprise/features/agent-control-plane/rules.mdx diff --git a/docs/ar/enterprise/features/agent-control-plane/monitoring.mdx b/docs/ar/enterprise/features/agent-control-plane/monitoring.mdx new file mode 100644 index 000000000..952d5c783 --- /dev/null +++ b/docs/ar/enterprise/features/agent-control-plane/monitoring.mdx @@ -0,0 +1,104 @@ +--- +title: "راقب أتمتاتك" +description: "راقب صحة الأسطول واستهلاك LLM وسلوك كل أتمتة من تبويب Automations." +sidebarTitle: "المراقبة" +icon: "gauge" +mode: "wide" +--- + +## نظرة عامة + +تبويب **Automations** هو عرض العمليات للقراءة فقط في [Agent Control Plane](/ar/enterprise/features/agent-control-plane/overview). يجمع بين بطاقتَي مقاييس و sankey تفاعلي وجدولين فرعيين — **Automations** و **Consumption** — يمكنك البحث والتصفية والفرز فيهما. + + + ![نظرة عامة على Agent Control Plane](/images/enterprise/acp-overview-automations-sankey.png) + + +تحترم جميع المخططات والجداول مُحدّد **آخر 24 ساعة / الأسبوع الماضي / آخر 30 يوماً** في أعلى اليمين. تقارن قيم الفرق النافذة المختارة بالنافذة السابقة بنفس الطول. + + + تعرض الصفوف بيانات فقط لعمليات النشر على **crewAI v1.13 أو أحدث** — تظهر عمليات النشر الأقدم في لافتة *"We've detected N other automations that we can't display"* أسفل sankey ولا تساهم بأي مقاييس حتى يتم تحديثها وإعادة نشرها. راجع [نظرة عامة — المتطلبات](/ar/enterprise/features/agent-control-plane/overview#المتطلبات). + + +## لوحة المعلومات + +يحتوي رأس الصفحة على بطاقتَي مقاييس و sankey تفاعلي. النقر على أي من البطاقتين يبدّل sankey بين وضعَين: + +- **وضع الصحة** — `إجمالي الأتمتات → حِزم الحالة (Critical / Warning / Healthy)`. انقر على حِزمة لتصفية جدول Automations إلى عمليات النشر تلك فقط. +- **وضع الاستهلاك** — `مزودو النماذج → الأتمتات → التكلفة الإجمالية`. انقر على مزود لتصفية جدول Consumption إلى ذلك المزود. + +| البطاقة | ما تعرضه | +|------|---------------| +| **Automations** | الأتمتات `active` (والعدد الإجمالي)، إجمالي `errors` في النافذة، `active executions` الحالية (والإجمالي في النافذة)، مع الفرق مقابل الفترة السابقة. | +| **Consumption** | إجمالي `cost` و `tokens used`، مع فرق التكلفة مقابل الفترة السابقة. | + + + ![نظرة عامة مع sankey الاستهلاك](/images/enterprise/acp-overview-consumption-sankey.png) + + +## جدول Automations + +التبويب الفرعي **Automations** هو تفصيل صحة الأسطول لكل deployment. كل صف هو crew أو flow منشور. + + + ![جدول الأتمتات مع تفصيل حالة الصحة](/images/enterprise/acp-automations-table.png) + + +| العمود | ما يعرضه | +|--------|---------------| +| **Automation** | اسم الـ deployment وأي وسوم مُسنَدة إليه (مثل `production`، `financial`). | +| **Last execution** | الوقت المنقضي منذ آخر تنفيذ. | +| **Health Status Breakdown** | شريط مكدّس بنسب `Critical` / `Warning` / `Healthy` لعمليات التنفيذ في النافذة. | +| **Executions with Errors** | إجمالي عمليات التنفيذ الفاشلة في النافذة. | +| **PII detection applied** | `Yes` إذا كان هناك تكوين PII لكل deployment أو [قاعدة PII](/ar/enterprise/features/agent-control-plane/rules) مطابِقة نشطة. | +| **Executions** | إجمالي عمليات التنفيذ في النافذة. | +| **Last updated** | متى أُعيد نشر الـ deployment آخر مرة. | +| **Crew Version** | إصدار `crewai` الذي يُبلِّغ عنه الـ deployment. يشير أيقونة المعلومات بجانب الإصدارات الأقل من `1.13` إلى صفوف لا يمكنها المساهمة بالمقاييس. | + +ابحث بالاسم، صفِّ حسب `Status` (`Healthy` / `Warning` / `Critical`)، وافرز بأي رأس عمود. انقر على اسم الـ deployment لفتح **لوحة الأتمتة**. + +## جدول Consumption + +التبويب الفرعي **Consumption** هو تفصيل إنفاق LLM واستخدام الرموز لكل deployment. + + + ![جدول الاستهلاك مُفصَّل حسب مزود LLM](/images/enterprise/acp-consumption-table.png) + + +| العمود | ما يعرضه | +|--------|---------------| +| **Automation** | اسم الـ deployment. | +| **Last execution** | الوقت المنقضي منذ آخر تنفيذ. | +| **Tokens used** | صف واحد لكل مزود LLM تستخدمه هذه الأتمتة، مع الفرق مقابل الفترة السابقة. | +| **Cost** | التكلفة لكل مزود LLM، مع الفرق مقابل الفترة السابقة. | +| **Total cost** | المجموع عبر جميع المزودين، مع الفرق. | +| **Executions** | إجمالي عمليات التنفيذ في النافذة. | +| **Last updated** | متى أُعيد نشر الـ deployment آخر مرة. | +| **Crew Version** | إصدار `crewai` الذي يُبلِّغ عنه الـ deployment. | + +صفِّ حسب **LLM provider** وافرز حسب `Cost` أو `Executions` أو `Last run`. + + + **عادة ما تعني الخلايا الفارغة (`—` أو `$0.00`) أن الـ deployment أدنى من crewAI v1.13.** في اللقطة أعلاه، تظهر *Automation F* (`1.7.0`) و *Automation I* (`1.12.2`) فارغة في الرموز والتكلفة — لا تزال عمليات التنفيذ تعمل، لكنها لا تُصدِر التليمتري على مستوى المزود الذي يُغذِّي هذا الجدول. حدّث هذه الـ crews وأعد نشرها لبدء جمع بيانات الاستهلاك. + + +## ذو صلة + + + + ما هو ACP، المتطلبات، مستويات الخطط، و RBAC. + + + طبّق قواعد PII Redaction على مستوى المؤسسة عبر العديد من الأتمتات. + + + تعمّق في تنفيذ واحد لرؤية تفكير الوكيل واستدعاءات الأدوات واستخدام الرموز. + + + انشر crew على إصدار crewAI يدعم Agent Control Plane. + + + + + تواصل مع فريق الدعم للمساعدة في تفسير المقاييس داخل Agent Control Plane. + diff --git a/docs/ar/enterprise/features/agent-control-plane/overview.mdx b/docs/ar/enterprise/features/agent-control-plane/overview.mdx new file mode 100644 index 000000000..fc290d9d1 --- /dev/null +++ b/docs/ar/enterprise/features/agent-control-plane/overview.mdx @@ -0,0 +1,74 @@ +--- +title: نظرة عامة على Agent Control Plane +description: "مركز عمليات موحّد للأتمتات الجارية — صحة الأسطول واستهلاك LLM والسياسات على مستوى المؤسسة في مكان واحد." +sidebarTitle: نظرة عامة +icon: "book-open" +--- + +## نظرة عامة + +**Agent Control Plane** (ACP) هو مركز العمليات لكل ما يعمل لديك على CrewAI AMP. إنها شاشة واحدة — مقسّمة إلى تبويبَي **Automations** و **Rules** — تمنح فريقك القدرة على: + +- مراقبة **حالة (الصحة)** كل أتمتة حيّة (crew أو flow) بتفصيل `Critical` / `Warning` / `Healthy` وعدد عمليات التنفيذ. +- تتبع **استهلاك LLM** — الرموز (tokens) والتكلفة — لكل أتمتة ولكل مزود ولكل نموذج، مع الفرق مقابل الفترة السابقة. +- التعمّق في أي أتمتة منفردة أو مزود نماذج لرؤية المخططات الزمنية وتفصيل البيانات لكل مزود. +- تطبيق **قواعد (Rules)** على مستوى المؤسسة (اليوم: PII Redaction) عبر العديد من الأتمتات دفعة واحدة بدلاً من تعديل كل deployment على حدة. + + + ![نظرة عامة على Agent Control Plane](/images/enterprise/acp-overview-automations-sankey.png) + + + + Agent Control Plane مُوسوم حالياً بـ **Beta** في CrewAI Platform. + + +يجيب التبويبان عن سؤالَين مختلفَين: + +- **Automations** — *"كيف يتصرف أسطولي الآن، وكم يكلّفني؟"* راجع [المراقبة](/ar/enterprise/features/agent-control-plane/monitoring). +- **Rules** — *"كيف أفرض سياسة (مثل PII redaction) عبر العديد من عمليات النشر دون إعادة نشر كل واحدة؟"* راجع [القواعد](/ar/enterprise/features/agent-control-plane/rules). + +## المتطلبات + + + يُشترط **crewAI v1.13 أو أحدث** ليتمكن أي أتمتة من تعبئة أي بيانات على هذه الصفحة — تمر بيانات الصحة وعمليات التنفيذ والأخطاء والرموز والتكلفة عبر التليمتري الذي تم تفعيله في `crewai==1.13`. تظهر عمليات النشر الأقدم في لافتة *"We've detected N other automations that we can't display"* ولا تساهم بأي صفوف حتى يتم تحديثها وإعادة نشرها. + + + + يُشترط **خطة Enterprise أو Ultra** لإنشاء أو تعديل [القواعد](/ar/enterprise/features/agent-control-plane/rules). يمكن للمؤسسات على الخطط الأدنى فتح تبويب Rules وعرض القواعد الموجودة، ولكن يُعرض المحرر للقراءة فقط مع شارة قفل "Enterprise" والتنبيه *"PII Redaction rules require an Enterprise plan."*. المراقبة (تبويب Automations) متاحة في جميع الخطط حيث يكون هذا الميزة مفعّلة. + + +- يجب أن تكون ميزة **Agent Control Plane** مفعّلة لمؤسستك. إن لم ترها في الشريط الجانبي، اطلب من مالك الحساب تفعيلها. +- داخل ACP، يحكم [RBAC](/ar/enterprise/features/rbac) الوصول: `read` للعرض في لوحة المعلومات والقواعد، و`manage` لإنشاء وتعديل وتشغيل/إيقاف وحذف القواعد. +- يمكن ضبط نطاق جميع المخططات والجداول إلى **آخر 24 ساعة** أو **الأسبوع الماضي** أو **آخر 30 يوماً** عبر مُحدّد الوقت في أعلى اليمين. تقارن قيم الفرق (`↑ 8 vs yesterday`, `↓ $20.57 vs yesterday` وغيرها) النافذة المختارة بالنافذة السابقة بنفس الطول. + +## ما يمكنك فعله هنا + + + + راقب صحة الأسطول وإنفاق LLM عبر بطاقات المقاييس و sankey التفاعلي وجداول لكل أتمتة ولوحات جانبية للتعمق في أي أتمتة أو مزود. + + + طبّق سياسات PII Redaction على مستوى المؤسسة بنطاق محدد بالأدوات والوسوم. تسري التغييرات في التنفيذ التالي — دون الحاجة لإعادة نشر. + + + +## ذو صلة + + + + تعمّق في تنفيذ واحد لرؤية تفكير الوكيل واستدعاءات الأدوات واستخدام الرموز. + + + أدِر من يمكنه قراءة Agent Control Plane ومن يمكنه تعديل القواعد. + + + كتالوج الكيانات وضبط PII لكل deployment التي تستند إليها القواعد. + + + انشر crew على إصدار crewAI يدعم Agent Control Plane. + + + + + تواصل مع فريق الدعم للمساعدة في تفسير المقاييس أو تصميم القواعد. + diff --git a/docs/ar/enterprise/features/agent-control-plane/rules.mdx b/docs/ar/enterprise/features/agent-control-plane/rules.mdx new file mode 100644 index 000000000..17addc54a --- /dev/null +++ b/docs/ar/enterprise/features/agent-control-plane/rules.mdx @@ -0,0 +1,114 @@ +--- +title: "إعداد القواعد" +description: "طبّق سياسات على مستوى المؤسسة عبر العديد من الأتمتات من مكان واحد." +sidebarTitle: "القواعد" +icon: "shield-check" +mode: "wide" +--- + +## نظرة عامة + +تتيح لك القواعد تطبيق سياسات — اليوم: **PII Redaction** — عبر العديد من الأتمتات دفعة واحدة، بدلاً من ضبط كل deployment على حدة. افتح تبويب **Rules** في [Agent Control Plane](/ar/enterprise/features/agent-control-plane/overview) لإدارتها. + + + ![قائمة القواعد](/images/enterprise/acp-rules-list.png) + + +تعرض كل بطاقة قاعدة الاسم والوصف و**النطاق (scope)** الذي تنطبق عليه القاعدة (الأدوات والوسوم المختارة) وعدد **الأتمتات المُفعَّلة** — عمليات النشر التي تطابق النطاق حالياً. يقوم المُفتاح على اليمين بتشغيل القاعدة أو إيقافها دون حذفها. + +## المتطلبات + + + يُشترط **خطة Enterprise أو Ultra** لإنشاء أو تعديل قواعد PII Redaction. يمكن للمؤسسات على الخطط الأدنى فتح تبويب Rules وعرض القواعد الموجودة، ولكن يُعرض المحرر للقراءة فقط مع شارة قفل "Enterprise" والتنبيه *"PII Redaction rules require an Enterprise plan."* — تواصل مع مالك حسابك أو المبيعات للترقية. + + +- يجب أن تكون ميزة **Agent Control Plane** مفعّلة لمؤسستك. راجع [نظرة عامة — المتطلبات](/ar/enterprise/features/agent-control-plane/overview#المتطلبات). +- تحتاج إلى صلاحية `manage` ضمن [RBAC](/ar/enterprise/features/rbac) على Agent Control Plane لإنشاء وتعديل وتشغيل/إيقاف وحذف القواعد. صلاحية `read` كافية لعرضها. +- تُسجَّل جميع تغييرات القواعد بإصدارات للتدقيق. + +## أنواع القواعد المتاحة + +| النوع | ما تفعله | +|------|---------------| +| **PII Redaction** | تطبّق PII redaction على عمليات التنفيذ لكل أتمتة مطابِقة، باستخدام نفس كتالوج الكيانات و recognizers المخصصة الموثَّقة في [PII Redaction للـ Traces](/ar/enterprise/features/pii-trace-redactions). | + +سيتم إضافة أنواع قواعد أخرى مع الوقت. + +## إنشاء قاعدة + + + لوحة تعديل قاعدة جانبية بالشروط ونوع قناع PII + + + + + انقر على **+ Create new** في أعلى يمين تبويب Rules، أو على **View Details** في بطاقة قاعدة موجودة. + + + + أعطِ القاعدة اسماً واضحاً (مثل *Mask PII (CC)*) ووصفاً يشرح متى تنطبق. يظهر كلاهما على بطاقة القاعدة وفي مودال Engaged Automations. + + + + اليوم **PII Redaction** فقط متاحة. + + + + تحدد الشروط الأتمتات التي تنخرط معها القاعدة. كلاهما اختياري ويستخدم دلالات **مساواة المجموعات (set-equality)**: + + - **Tools** — تنخرط فقط الأتمتات التي تتطابق مجموعة أدواتها **تطابقاً تامّاً** مع الأدوات المختارة. اختر من تطبيقات Studio و MCPs والأدوات مفتوحة المصدر وأدوات سجل Tool Repository. + - **Automations** — تنخرط فقط الأتمتات التي تتطابق مجموعة وسومها **تطابقاً تامّاً** مع الوسوم المختارة. + + ترك مُحدِّد فارغ يعني "بدون تصفية على هذا البعد". ترك كليهما فارغَين يعني أن القاعدة تنطبق على **كل** أتمتة في المؤسسة. + + + + حدّد كل نوع كيان تريد تغطيته واختر **Mask** (يستبدل بتسمية الكيان مثل ``) أو **Redact** (يحذف النص المطابِق بالكامل). راجع [PII Redaction للـ Traces](/ar/enterprise/features/pii-trace-redactions) للاطلاع على كتالوج الكيانات الكامل وكيفية إضافة recognizers مخصصة على مستوى المؤسسة. + + + + تنطبق القاعدة على عمليات التنفيذ **المستقبلية** لكل أتمتة مُفعَّلة بمجرد الحفظ. لا حاجة لإعادة النشر. + + + +## الأتمتات المُفعَّلة + +انقر على **Engaged N automations** في أي بطاقة قاعدة لرؤية أي عمليات النشر تطابقها القاعدة حالياً بالضبط، إلى جانب آخر تنفيذ لكل منها. + + + ![مودال الأتمتات المُفعَّلة](/images/enterprise/acp-rules-engaged-modal.png) + + +هذه هي أسرع طريقة للتحقق من نطاق قاعدة قبل تمكينها — على سبيل المثال، للتأكد من أن قاعدة محدَّدة بنطاق وسم `production` لا تطابق عن طريق الخطأ deployment تجريبي. + +## قواعد على مستوى المؤسسة مقابل إعدادات لكل deployment + +يمكن ضبط PII Redaction في مكانين: + +- **لكل deployment** — ضمن **Settings → PII Protection** على كل deployment على حدة ([الدليل](/ar/enterprise/features/pii-trace-redactions)) +- **على مستوى المؤسسة** — كقاعدة في هذه الصفحة + +عندما يتطابق نطاق قاعدة مُفعَّلة على مستوى المؤسسة مع deployment، يُجاوز تكوين الكيانات الخاص بالقاعدة **إعدادات PII المملوكة من قبل الـ deployment** لعمليات تنفيذ ذلك الـ deployment — تصبح القاعدة المصدر الوحيد للحقيقة طالما هي مرتبطة. عطّل القاعدة أو فُكَّ ارتباطها (أو غيِّر نطاقها بحيث لا تتطابق بعد الآن) ويعود الـ deployment إلى إعدادات PII Protection الخاصة به. + +فضّل القواعد على مستوى المؤسسة عندما تريد فرض سياسة متسقة عبر العديد من عمليات النشر؛ احتفظ بالضبط لكل deployment للاستثناءات الفردية. + +## ذو صلة + + + + ما هو ACP، المتطلبات، مستويات الخطط، و RBAC. + + + راقب الأتمتات واستهلاك LLM عبر أسطولك. + + + كتالوج الكيانات، recognizers المخصصة، والضبط لكل deployment. + + + أدِر من يمكنه إنشاء أو تعديل القواعد. + + + + + تواصل مع فريق الدعم للمساعدة في تصميم قواعد لمؤسستك. + diff --git a/docs/docs.json b/docs/docs.json index 9faf03873..0a9cd86ed 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -2384,6 +2384,15 @@ { "group": "Manage", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "en/enterprise/features/agent-control-plane/overview", + "en/enterprise/features/agent-control-plane/monitoring", + "en/enterprise/features/agent-control-plane/rules" + ] + }, "en/enterprise/features/sso", "en/enterprise/features/rbac" ] @@ -2868,6 +2877,15 @@ { "group": "Manage", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "en/enterprise/features/agent-control-plane/overview", + "en/enterprise/features/agent-control-plane/monitoring", + "en/enterprise/features/agent-control-plane/rules" + ] + }, "en/enterprise/features/sso", "en/enterprise/features/rbac" ] @@ -3352,6 +3370,15 @@ { "group": "Manage", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "en/enterprise/features/agent-control-plane/overview", + "en/enterprise/features/agent-control-plane/monitoring", + "en/enterprise/features/agent-control-plane/rules" + ] + }, "en/enterprise/features/sso", "en/enterprise/features/rbac" ] @@ -3836,6 +3863,15 @@ { "group": "Manage", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "en/enterprise/features/agent-control-plane/overview", + "en/enterprise/features/agent-control-plane/monitoring", + "en/enterprise/features/agent-control-plane/rules" + ] + }, "en/enterprise/features/sso", "en/enterprise/features/rbac" ] @@ -9101,6 +9137,15 @@ { "group": "Gerenciar", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "pt-BR/enterprise/features/agent-control-plane/overview", + "pt-BR/enterprise/features/agent-control-plane/monitoring", + "pt-BR/enterprise/features/agent-control-plane/rules" + ] + }, "pt-BR/enterprise/features/rbac" ] }, @@ -9562,6 +9607,15 @@ { "group": "Gerenciar", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "pt-BR/enterprise/features/agent-control-plane/overview", + "pt-BR/enterprise/features/agent-control-plane/monitoring", + "pt-BR/enterprise/features/agent-control-plane/rules" + ] + }, "pt-BR/enterprise/features/rbac" ] }, @@ -10023,6 +10077,15 @@ { "group": "Gerenciar", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "pt-BR/enterprise/features/agent-control-plane/overview", + "pt-BR/enterprise/features/agent-control-plane/monitoring", + "pt-BR/enterprise/features/agent-control-plane/rules" + ] + }, "pt-BR/enterprise/features/rbac" ] }, @@ -10484,6 +10547,15 @@ { "group": "Gerenciar", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "pt-BR/enterprise/features/agent-control-plane/overview", + "pt-BR/enterprise/features/agent-control-plane/monitoring", + "pt-BR/enterprise/features/agent-control-plane/rules" + ] + }, "pt-BR/enterprise/features/rbac" ] }, @@ -15671,6 +15743,15 @@ { "group": "관리", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "ko/enterprise/features/agent-control-plane/overview", + "ko/enterprise/features/agent-control-plane/monitoring", + "ko/enterprise/features/agent-control-plane/rules" + ] + }, "ko/enterprise/features/rbac" ] }, @@ -16145,6 +16226,15 @@ { "group": "관리", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "ko/enterprise/features/agent-control-plane/overview", + "ko/enterprise/features/agent-control-plane/monitoring", + "ko/enterprise/features/agent-control-plane/rules" + ] + }, "ko/enterprise/features/rbac" ] }, @@ -16619,6 +16709,15 @@ { "group": "관리", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "ko/enterprise/features/agent-control-plane/overview", + "ko/enterprise/features/agent-control-plane/monitoring", + "ko/enterprise/features/agent-control-plane/rules" + ] + }, "ko/enterprise/features/rbac" ] }, @@ -17093,6 +17192,15 @@ { "group": "관리", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "ko/enterprise/features/agent-control-plane/overview", + "ko/enterprise/features/agent-control-plane/monitoring", + "ko/enterprise/features/agent-control-plane/rules" + ] + }, "ko/enterprise/features/rbac" ] }, @@ -22358,6 +22466,15 @@ { "group": "الإدارة", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "ar/enterprise/features/agent-control-plane/overview", + "ar/enterprise/features/agent-control-plane/monitoring", + "ar/enterprise/features/agent-control-plane/rules" + ] + }, "ar/enterprise/features/rbac" ] }, @@ -22832,6 +22949,15 @@ { "group": "الإدارة", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "ar/enterprise/features/agent-control-plane/overview", + "ar/enterprise/features/agent-control-plane/monitoring", + "ar/enterprise/features/agent-control-plane/rules" + ] + }, "ar/enterprise/features/rbac" ] }, @@ -23306,6 +23432,15 @@ { "group": "الإدارة", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "ar/enterprise/features/agent-control-plane/overview", + "ar/enterprise/features/agent-control-plane/monitoring", + "ar/enterprise/features/agent-control-plane/rules" + ] + }, "ar/enterprise/features/rbac" ] }, @@ -23780,6 +23915,15 @@ { "group": "الإدارة", "pages": [ + { + "group": "Agent Control Plane", + "icon": "gauge", + "pages": [ + "ar/enterprise/features/agent-control-plane/overview", + "ar/enterprise/features/agent-control-plane/monitoring", + "ar/enterprise/features/agent-control-plane/rules" + ] + }, "ar/enterprise/features/rbac" ] }, diff --git a/docs/en/enterprise/features/agent-control-plane/monitoring.mdx b/docs/en/enterprise/features/agent-control-plane/monitoring.mdx new file mode 100644 index 000000000..05b4e451e --- /dev/null +++ b/docs/en/enterprise/features/agent-control-plane/monitoring.mdx @@ -0,0 +1,104 @@ +--- +title: "Watch your Automations" +description: "Watch fleet health, LLM consumption, and per-automation behavior from the Automations tab." +sidebarTitle: "Monitoring" +icon: "gauge" +mode: "wide" +--- + +## Overview + +The **Automations** tab is the read-only operations view of the [Agent Control Plane](/en/enterprise/features/agent-control-plane/overview). It combines two metric cards, an interactive sankey, and two sub-tables — **Automations** and **Consumption** — that you can search, filter, and sort. + + + ![Agent Control Plane overview](/images/enterprise/acp-overview-automations-sankey.png) + + +All charts and tables respect the **Last 24 hours / Last Week / Last 30 days** selector at the top right. Deltas compare the selected window against the previous one of the same length. + + + Rows only show data for deployments on **crewAI v1.13 or higher** — older deployments appear in the *"We've detected N other automations that we can't display"* banner under the sankey and contribute zero metrics until they're updated and re-deployed. See [Overview — Requirements](/en/enterprise/features/agent-control-plane/overview#requirements). + + +## Dashboard + +The header of the page has two metric cards and an interactive sankey. Clicking either card switches the sankey between two modes: + +- **Health mode** — `Total Automations → status buckets (Critical / Warning / Healthy)`. Click a bucket to filter the Automations table to just those deployments. +- **Consumption mode** — `Model Providers → Automations → Total Cost`. Click a provider to filter the Consumption table to that provider. + +| Card | What it shows | +|------|---------------| +| **Automations** | `active` automations (and total count), total `errors` in the window, currently `active executions` (and total in the window), with a delta vs the previous period. | +| **Consumption** | Total `cost` and `tokens used`, with a cost delta vs the previous period. | + + + ![Overview with consumption sankey](/images/enterprise/acp-overview-consumption-sankey.png) + + +## Automations table + +The **Automations** sub-tab is the per-deployment breakdown of fleet health. Each row is one deployed crew or flow. + + + ![Automations table with health status breakdown](/images/enterprise/acp-automations-table.png) + + +| Column | What it shows | +|--------|---------------| +| **Automation** | Deployment name and any tags assigned to it (e.g. `production`, `financial`). | +| **Last execution** | Time since the most recent run. | +| **Health Status Breakdown** | Stacked bar of `Critical` / `Warning` / `Healthy` percentages for executions in the window. | +| **Executions with Errors** | Total failed executions in the window. | +| **PII detection applied** | `Yes` if a per-deployment PII config or a matching [PII rule](/en/enterprise/features/agent-control-plane/rules) is active. | +| **Executions** | Total executions in the window. | +| **Last updated** | When the deployment was last re-deployed. | +| **Crew Version** | The `crewai` version reported by the deployment. An info icon next to versions below `1.13` flags rows that can't contribute metrics. | + +Search by name, filter by `Status` (`Healthy` / `Warning` / `Critical`), and sort by any column header. Click a deployment name to open the **Automation panel** (see below). + +## Consumption table + +The **Consumption** sub-tab is the per-deployment breakdown of LLM spend and token usage. + + + ![Consumption table broken down by LLM provider](/images/enterprise/acp-consumption-table.png) + + +| Column | What it shows | +|--------|---------------| +| **Automation** | Deployment name. | +| **Last execution** | Time since the most recent run. | +| **Tokens used** | One row per LLM provider used by this automation, with the delta vs the previous period. | +| **Cost** | Cost per LLM provider, with the delta vs the previous period. | +| **Total cost** | Sum across all providers, with the delta. | +| **Executions** | Total executions in the window. | +| **Last updated** | When the deployment was last re-deployed. | +| **Crew Version** | The `crewai` version reported by the deployment. | + +Filter by **LLM provider** and sort by `Cost`, `Executions`, or `Last run`. + + + **Empty cells (`—` or `$0.00`) usually mean the deployment is below crewAI v1.13.** In the screenshot above, *Automation F* (`1.7.0`) and *Automation I* (`1.12.2`) show blanks for tokens and cost — their executions still run, but they don't emit the provider-level telemetry that powers this table. Update and re-deploy these crews to start collecting consumption data. + + +## Related + + + + What ACP is, requirements, plan tiers, and RBAC. + + + Apply organization-wide PII Redaction rules across many automations. + + + Drill into a single execution to see agent reasoning, tool calls, and token usage. + + + Deploy a crew on a crewAI version that supports the Agent Control Plane. + + + + + Contact our support team for help interpreting metrics in the Agent Control Plane. + diff --git a/docs/en/enterprise/features/agent-control-plane/overview.mdx b/docs/en/enterprise/features/agent-control-plane/overview.mdx new file mode 100644 index 000000000..dc2332764 --- /dev/null +++ b/docs/en/enterprise/features/agent-control-plane/overview.mdx @@ -0,0 +1,74 @@ +--- +title: Agent Control Plane Overview +description: "Single operations hub for live automations — fleet health, LLM consumption, and organization-wide policies in one place." +sidebarTitle: Overview +icon: "book-open" +--- + +## Overview + +The **Agent Control Plane** (ACP) is the operations hub for everything you have running on CrewAI AMP. It is a single screen — split into **Automations** and **Rules** tabs — that lets your team: + +- Monitor the **health** of every live automation (crew or flow), with `Critical` / `Warning` / `Healthy` breakdowns and execution counts. +- Track **LLM consumption** — tokens and cost — per automation, per provider, and per model, with a delta vs the previous period. +- Drill into any single automation or model provider for time-series charts and per-provider breakdowns. +- Apply organization-wide **Rules** (today: PII Redaction) across many automations at once instead of editing each deployment individually. + + + ![Agent Control Plane overview](/images/enterprise/acp-overview-automations-sankey.png) + + + + The Agent Control Plane is currently labeled **Beta** in CrewAI Platform. + + +The two tabs answer two different questions: + +- **Automations** — *"How is my fleet behaving right now, and what is it costing me?"* See [Monitoring](/en/enterprise/features/agent-control-plane/monitoring). +- **Rules** — *"How do I enforce a policy (e.g. PII redaction) across many deployments without re-deploying each one?"* See [Rules](/en/enterprise/features/agent-control-plane/rules). + +## Requirements + + + **crewAI v1.13 or higher** is required for an automation to populate any data on this page — health, executions, errors, tokens, and cost all flow through telemetry that lit up in `crewai==1.13`. Older deployments appear in the *"We've detected N other automations that we can't display"* banner and contribute zero rows until they are updated and re-deployed. + + + + **Enterprise Plan or Ultra Plan** is required to create or edit [Rules](/en/enterprise/features/agent-control-plane/rules). Lower-tier organizations can open the Rules tab and view existing rules, but the editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction rules require an Enterprise plan."* Monitoring (the Automations tab) is available on all plans where the feature is enabled. + + +- The **Agent Control Plane** feature must be enabled for your organization. If you don't see it in the sidebar, ask your account owner to request enablement. +- Inside ACP, [RBAC](/en/enterprise/features/rbac) governs access: `read` to view the dashboard and rules, `manage` to create, edit, toggle, or delete rules. +- All charts and tables can be scoped to the **Last 24 hours**, **Last Week**, or **Last 30 days** using the time selector at the top right. Deltas (`↑ 8 vs yesterday`, `↓ $20.57 vs yesterday`, etc.) compare the selected window against the previous one of the same length. + +## What you can do here + + + + Watch fleet health and LLM spend with metric cards, an interactive sankey, per-automation tables, and drill-down side panels for any automation or provider. + + + Apply organization-wide PII Redaction policies scoped by tools and tags. Changes take effect on the next execution — no re-deploy required. + + + +## Related + + + + Drill into a single execution to see agent reasoning, tool calls, and token usage. + + + Manage who can read the Agent Control Plane and who can edit rules. + + + Entity catalog and per-deployment PII configuration referenced by Rules. + + + Deploy a crew on a crewAI version that supports the Agent Control Plane. + + + + + Contact our support team for help interpreting metrics or designing rules. + diff --git a/docs/en/enterprise/features/agent-control-plane/rules.mdx b/docs/en/enterprise/features/agent-control-plane/rules.mdx new file mode 100644 index 000000000..6555ddec0 --- /dev/null +++ b/docs/en/enterprise/features/agent-control-plane/rules.mdx @@ -0,0 +1,114 @@ +--- +title: "Set up the Rules" +description: "Apply organization-wide policies across many automations from a single place." +sidebarTitle: "Rules" +icon: "shield-check" +mode: "wide" +--- + +## Overview + +Rules let you apply policies — today: **PII Redaction** — across many automations at once, instead of configuring each deployment individually. Open the **Rules** tab in the [Agent Control Plane](/en/enterprise/features/agent-control-plane/overview) to manage them. + + + ![Rules list](/images/enterprise/acp-rules-list.png) + + +Each rule card shows the name, description, the **scope** the rule applies to (selected tools and tags), and a count of **engaged automations** — deployments that currently match the scope. The toggle on the right enables or disables the rule without deleting it. + +## Requirements + + + **Enterprise Plan or Ultra Plan** is required to create or edit PII Redaction rules. Lower-tier organizations can still open the Rules tab and view existing rules, but the editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction rules require an Enterprise plan."* — contact your account owner or sales to upgrade. + + +- The **Agent Control Plane** feature must be enabled for your organization. See [Overview — Requirements](/en/enterprise/features/agent-control-plane/overview#requirements). +- The `manage` [RBAC permission](/en/enterprise/features/rbac) on Agent Control Plane is required to create, edit, toggle, or delete rules. The `read` permission is enough to view them. +- All rule changes are versioned for auditing. + +## Available rule types + +| Type | What it does | +|------|---------------| +| **PII Redaction** | Applies PII redaction to executions of every matching automation, using the same entity catalog and custom recognizers documented in [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions). | + +More rule types will be added over time. + +## Creating a rule + + + Rule edit side panel with conditions and PII mask type + + + + + Click **+ Create new** at the top-right of the Rules tab, or **View Details** on an existing rule card. + + + + Give the rule a clear name (e.g. *Mask PII (CC)*) and a description explaining when it applies. Both show up on the rule card and in the Engaged Automations modal. + + + + Today only **PII Redaction** is available. + + + + Conditions decide which automations the rule engages with. Both are optional and use **set-equality** semantics: + + - **Tools** — only automations whose tool set **exactly matches** the selected tools will engage. Picks from Studio apps, MCPs, OSS tools, and Tool Repository registry tools. + - **Automations** — only automations whose tag set **exactly matches** the selected tags will engage. + + Leaving a picker empty means "no filter on this dimension". Leaving both empty means the rule applies to **every** automation in the organization. + + + + Check each entity type you want covered and choose **Mask** (replaces with the entity label, e.g. ``) or **Redact** (removes the matched text entirely). See [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions) for the full entity catalog and how to add organization-level custom recognizers. + + + + The rule applies to **future** executions of every engaged automation as soon as you save. No re-deploy is needed. + + + +## Engaged automations + +Click **Engaged N automations** on any rule card to see exactly which deployments the rule is currently matching, along with each one's last execution. + + + ![Engaged automations modal](/images/enterprise/acp-rules-engaged-modal.png) + + +This is the fastest way to sanity-check a rule's scope before enabling it — for example, to confirm that a rule scoped to the `production` tag isn't accidentally matching a staging deployment. + +## Org-wide rules vs per-deployment settings + +PII Redaction can be configured in two places: + +- **Per-deployment** — under **Settings → PII Protection** on each individual deployment ([guide](/en/enterprise/features/pii-trace-redactions)) +- **Org-wide** — as a Rule on this page + +When an enabled org-wide rule's scope matches a deployment, the rule's entity configuration **overrides** the deployment-owned PII settings for that deployment's executions — the rule becomes the single source of truth while it's attached. Disable or detach the rule (or change its scope so it no longer matches) and the deployment falls back to its own PII Protection settings. + +Prefer org-wide rules when you want to enforce a consistent policy across many deployments; reserve per-deployment configuration for one-off exceptions. + +## Related + + + + What ACP is, requirements, plan tiers, and RBAC. + + + Monitor automations and LLM consumption across your fleet. + + + Entity catalog, custom recognizers, and per-deployment configuration. + + + Manage who can create or edit rules. + + + + + Contact our support team for help designing rules for your organization. + diff --git a/docs/images/enterprise/acp-automation-panel-costs.png b/docs/images/enterprise/acp-automation-panel-costs.png new file mode 100644 index 0000000000000000000000000000000000000000..c4cd684c756fcbacf2e069a84510b8e4cef61e94 GIT binary patch literal 203848 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�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