diff --git a/docs/ar/admin/keys-and-permissions.mdx b/docs/ar/admin/keys-and-permissions.mdx
index 1a402c6f6..6c067bb02 100644
--- a/docs/ar/admin/keys-and-permissions.mdx
+++ b/docs/ar/admin/keys-and-permissions.mdx
@@ -1,74 +1,54 @@
---
title: "المفاتيح والأذونات"
-description: "أنشئ مفاتيح API ذات نطاق محدد للآلات والأتمتة والمشغّلين."
+description: "إنشاء بيانات اعتماد للأفراد والأتمتة والآلات."
icon: "key-round"
---
-تنتمي مفاتيح API إلى منظمة وتحمل أذونات صريحة. استخدم مفاتيح منفصلة لاستيعاب الوكلاء، وتسليم السياسات، والمقيّمين، وأتمتة CI، والبرامج الإدارية.
+استخدم مفتاحًا منفصلًا لكل شخص أو آلة أو مهمة أتمتة. امنح فقط الأذونات التي تحتاجها.
## إنشاء وتدوير مفتاح
-
-
- 1. انتقل إلى **Administration → Keys**، اختر **new key**، وأدخل اسم حمل العمل.
- 2. اختر مجموعة أذونات واضبط الأذونات الفردية فقط عندما تكون مجموعة الإعدادات المسبقة غير كافية.
- 3. أنشئ المفتاح وانسخ سرّه لمرة واحدة فوراً.
- 4. افتح المفتاح لاحقاً لتحديث المنح أو تعطيله أو إعادة توليد السرّ.
+استخدم **Admin → Keys**، أو واجهة سطر الأوامر للسحابة:
- درج الإنشاء هو حيث تختار أضيق المنح المطلوبة بواسطة حمل العمل.
+```bash
+fp keys list
+fp keys create "audit automation" --add audits:read
+fp keys disable "audit automation"
+```
- 
+احفظ السر عند إنشاؤه؛ لن يتم عرضه مرة أخرى. قم بالتدوير بإنشاء بديل وتحديث المستهلك ثم تعطيل المفتاح القديم.
- بعد الإنشاء، تعرض صفحة المفاتيح البيانات الوصفية الدائمة وإجراءات الإدارة. لن يتم عرض السرّ لمرة واحدة مرة أخرى.
+## مفاتيح الآلات
- 
+يربط مفتاح الآلة الخدمة المحلية بالسحابة:
- استخدم هذه القائمة لمراجعة المنح بشكل منتظم وتعطيل المفاتيح التي لا تعود مرتبطة بحمل عمل نشط.
-
-
- ```bash
- fp keys create production-agents \
- --add events:add \
- --add policies:pull
- fp keys show production-agents
- fp keys update production-agents --add events:read
- fp keys regenerate production-agents --yes
- fp keys disable production-agents
- ```
+```bash
+export FAILPROOFAI_CLOUD_TOKEN=""
+failproofai config
+```
- أعد توجيه أو احصر مخرجات الإنشاء/إعادة التوليد بشكل آمن؛ يتم إرجاع السرّ مرة واحدة فقط.
-
-
+قد تحتاج الآلة المتصلة إلى قدرتين:
-الأذونان المطلوبان بواسطة آلة Failproof AI متصلة مستقلان:
+- `policies:pull` لاستقبال السياسات المدارة من السحابة.
+- `events:add` لإرسال القرارات والجلسات.
-- `events:add` يرسل الأحداث وبيانات الجلسة.
-- `policies:pull` يسترجع نشرات السياسات المعيّنة.
+تقارير الحالة تقدم هذه بشكل منفصل لأن أحدهما قد يعمل بينما الآخر لا يعمل.
-يتم عرض أسرار المفاتيح عند إنشاؤها أو إعادة توليدها. قم بتخزينها في مدير الأسرار وأدرها دون إعادة استخدام بيانات اعتماد المشغّل التفاعلية.
+## الأذونات الشائعة
-## كتالوج الأذونات
-
-| المجال | الأذونات |
+| الإذن | السماح به |
| --- | --- |
-| الأحداث | `events:add`, `events:read` |
-| المفاتيح | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`; `keys:update` متاح فقط للجلسات البشرية |
-| المستخدمون | `users:create`, `users:read`, `users:update`, `users:delete` |
-| التقييمات | `evaluations:read`, `evaluations:trigger` |
-| لوحات المعلومات | `dashboards:read`, `dashboards:write`, `dashboards:delete` |
-| الاستعلامات | `queries:read`, `queries:write`, `queries:delete`, `queries:run` |
-| المساعد | `agent:use` |
-| الإعدادات | `settings:read`, `settings:write` |
-| التنبيهات | `alerts:read`, `alerts:write` |
-| المشاكل | `issues:read`, `issues:create`, `issues:close` |
-| عمليات التدقيق | `audits:read`, `audits:write` |
-| السياسات | `policies:read`, `policies:write`, `policies:pull` |
-| الاستخدام | `usage:read` |
-
-`orgs:admin` محفوظ لمشغّل النموذج ولا يمكن منحه لمفتاح منظمة أو عضو عادي. تقبل الرموز المتقاعدة `incidents:*` و `alerts:ack` من أجل التوافقية وتُعاد معايرتها إلى أذونات `issues:*` الحالية.
+| `events:add` | إرسال الأحداث |
+| `events:read` | قراءة الأحداث والأخطاء |
+| `evaluations:read` | قراءة الجلسات والتقييمات |
+| `audits:read` / `audits:write` | مراجعة أو إدارة التدقيقات |
+| `policies:read` / `policies:write` | مراجعة أو نشر السياسات |
+| `policies:pull` | سحب تعيينات سياسات الآلة |
+| `keys:create` / `keys:disable` | إنشاء أو تعطيل المفاتيح |
+| `orgs:admin` | إدارة المنظمة على مستوى المثيل؛ غير قابلة للتعيين لمفتاح تنظيمي |
-مجموعات الأذونات المدمجة هي `read-only` و `standard` و `admin`. تضيف `standard` تفعيل التقييم وتنفيذ الاستعلامات والرد على المشاكل واستخدام المساعد إلى أذونات القراءة. يزيل إنشاء المفتاح المنح الخاصة بالبشر فقط حتى عندما تحتوي مجموعة الأذونات عليها.
+تتطلب بعض أوامر `fp fleet` و `fp guardrails` الإدارية جلسة مستخدم موقعة بدلاً من مفتاح API. يشير نص المساعدة فيها إلى ذلك قبل تقديم طلب.
- يمكن لمفاتيح النطاق على مستوى النموذج تحديد منظمة باستخدام رأس `X-AgentEye-Org`. قم بتعيينها بشكل صريح على نشرات متعددة المنظمات؛ قد يؤدي الحذف إلى تحديد المنظمة الافتراضية.
+ لا تعد استخدام بيانات اعتماد الاستيعاب مثل `AGENTEYE_KEY` أو `AGENTEYE_API_KEY` كـ `FP_API_KEY`. فهي تخدم أنظمة وأذونات مختلفة.
\ No newline at end of file
diff --git a/docs/ar/admin/overview.mdx b/docs/ar/admin/overview.mdx
index 8bfcd1d87..76e9481d8 100644
--- a/docs/ar/admin/overview.mdx
+++ b/docs/ar/admin/overview.mdx
@@ -1,22 +1,30 @@
---
title: "الإدارة"
-description: "تشغيل الوصول والاستخدام والمنظمات والأمان دون دمجها في سير عمل الموثوقية."
+description: "تشغيل وصول Cloud والعضوية والإعدادات والاستهلاك دون دمجها في سير عمل الموثوقية."
icon: "settings-2"
---
-تحتوي الإدارة على عناصر التحكم اللازمة لتشغيل Failproof AI عبر فريق. يمكن لمعظم المستخدمين البقاء في الجلسات والتدقيق والسياسات؛ يستخدم المسؤولون هذا القسم لإدارة الوصول وحدود التشغيل.
+الإدارة هي نصف Failproof AI في Cloud. المؤسسات والأعضاء ومفاتيح API وإعدادات المؤسسة والاستهلاك المقاس — كل هذا يتطلب اتصال Cloud.
+
+
+ يعمل Failproof AI أيضاً بدون حساب على الإطلاق. آلة محلية تفرض السياسة، وتحتفظ بسجل الجلسة على القرص، وتخدم لوحة المعلومات المحلية على `localhost:8020`، وتشغل `failproofai audit` دون إرسال أي شيء في أي مكان. اطلع على تكوين الآلة في [machine configuration](/ar/reference/events-and-configuration#machine-configuration) لمفاتيح `collector` المحلية. تخطَّ بقية هذا القسم إذا لم تكن تستخدم Cloud.
+
+
+## حيث تقع الأدوات
-
- استخدم قسم **Admin** في الشريط الجانبي للسحابة للوصول إلى **محرر السياسات** و**الإنفاذ** و**الاستخدام** و**المفاتيح** و**المستخدمين** و**الإعدادات**. يشير العنصر المقفل إلى أن حسابك يفتقد إلى صلاحية القراءة.
+
+ مجموعة **admin** في شريط الجانب Cloud تحتوي على **محرر السياسة** و**الإنفاذ** و**الاستخدام** و**المفاتيح** و**المستخدمون** و**الإعدادات**.
- 
+ 
-
+
+ ثبّت Cloud CLI كأداة منفصلة، ثم قم بتسجيل الدخول:
+
```bash
+ uv tool install fp-cloud-cli
+ fp login
fp whoami
- fp orgs current
- fp orgs perms
fp usage
```
@@ -24,17 +32,43 @@ icon: "settings-2"
+## إنسان مسجل دخول أو مفتاح API
+
+يعمل `fp` في أحد وضعي المصادقة، والفاصل يحدد الأوامر التي تعمل. الأمر الذي لا يمكن لمفتاح API تنفيذه يرفض قبل فتح الاتصال ويسمي السبب، بدلاً من ترك 401 أو 403 يحل محله.
+
+| الأمر | مفتاح API | الإذن |
+| --- | --- | --- |
+| `fp whoami` | نعم | لا شيء |
+| `fp usage` | نعم | `usage:read` |
+| `fp keys list` / `show` | نعم | `keys:read` |
+| `fp keys create` | نعم | `keys:create` |
+| `fp keys disable` | نعم | `keys:disable` |
+| `fp keys regenerate` | نعم | `keys:regenerate` |
+| `fp keys update` | لا | `keys:update`، الذي لا يمكن لأي مفتاح أن يحتفظ به |
+| `fp users list` / `show` | نعم | `users:read` |
+| `fp users create` | نعم | `users:create` |
+| `fp users update` | نعم | `users:update` |
+| `fp users disable` / `enable` | نعم | `users:delete` |
+| `fp settings list` / `schema` | نعم | `settings:read` |
+| `fp settings set` | نعم | `settings:write` |
+| `fp orgs list` / `switch` / `current` / `perms` | لا | جلسة مسجلة دخول فقط |
+
+`fp usage` هو الأمر الذي يجب إعطاؤه لسكريبت إعداد التقارير: يعمل دون مراقبة تحت مفتاح ويحتاج فقط `usage:read`.
+
-
- فحص نوافذ الفوترة واستهلاك المنظمة.
-
-
- منح الآلات والأتمتة الصلاحيات المطلوبة فقط.
+
+ أنشئ بيانات اعتماد الآلة، وامنح كل عملية فقط الأذونات التي تحتاجها.
-
- إدارة العضوية والإعدادات الافتراضية وحدود المنظمة.
+
+ أدِر العضوية، واحتفظ بنطاق بيانات كل مؤسسة وإجراءاتها.
- تكوين إعدادات التشغيل ومعالجة البيانات وأمان النشر.
+ عيّن قيم تسجيل الدخول والتنبيهات، وحدد بيانات الوكيل التي تغادر الآلة.
+
+
+ اقرأ ما قاست المؤسسة خلال نافذتها الحالية من 30 يوماً.
+
+
+ انظر الآلات المسجلة والكيفية التي تُحدَّد بها وما تفرضه.
\ No newline at end of file
diff --git a/docs/ar/admin/settings-and-security.mdx b/docs/ar/admin/settings-and-security.mdx
index b8c121dcd..40abbcc67 100644
--- a/docs/ar/admin/settings-and-security.mdx
+++ b/docs/ar/admin/settings-and-security.mdx
@@ -1,68 +1,38 @@
---
+---
title: "الإعدادات والأمان"
-description: "قم بتكوين الإعدادات التشغيلية واتخذ قرارات مدروسة حول بيانات الوكيل."
-icon: "lock-keyhole"
+description: "التحكم في إعدادات المؤسسة الافتراضية ومعالجة البيانات بيانات الاعتماد للآلة."
+icon: "shield"
---
-استخدم الإعدادات للقيم التشغيلية الخاصة بالنشر وتجاوزات نافذة سياق النموذج. افحص مخطط الإعدادات قبل تغيير قيمة من خلال واجهة برمجية التطبيقات أو واجهة سطر الأوامر.
-
-## تغيير إعداد المؤسسة
-
-
-
- 1. انتقل إلى **Administration → Settings**، وابحث عن مجموعة الإعدادات، واقرأ وصفها والمصدر الحالي.
- 2. غيّر القيمة واحفظها.
- 3. بالنسبة لنوافذ سياق النموذج، أضف أو حدّث تجاوز النموذج وأكّد الحد الفعلي.
- 4. أعد التحقق من الجلسات والمقاييس التي تعتمد على القيمة المتغيرة.
-
- 
-
-
- ```bash
- fp settings list
- fp settings schema
- fp settings set --value
- fp settings set alerts.email_default_recipients \
- --json-value '["oncall@example.com"]'
- ```
+إعدادات المؤسسة تؤثر على الجميع في منظمة Cloud تلك. غيّرها من **Admin → settings** أو باستخدام `fp settings`.
- شغّل `fp settings set --help` للحصول على نوع القيمة وأعلام التأكيد المستخدمة بواسطة واجهة سطر الأوامر المثبتة.
-
-
+```bash
+fp settings list
+fp settings set
+```
-## خيارات معالجة البيانات
+## معالجة البيانات
-يؤدي توصيل Failproof AI CLI إلى إرسال النصوص الكاملة بشكل افتراضي لأن التتبعات والتدقيقات تعتمد على محتواها. استخدم `--no-transcripts` عندما يجب أن تبقى المطالبات أو محتويات الملفات أو إدخال الطرفية محلية؛ يمكن لا يزال الإبلاغ عن نشاط الخطاف وقرارات السياسة.
+الآلة المتصلة ترسل قرارات السياسة والنسخ الكاملة من جلسات العمل بشكل افتراضي. لإرسال القرارات فقط، اضبط `collector.sessions` على `false` في ملف `~/.failproofai/config.json` الخاص بالآلة بعد الاتصال. علم الإعداد الحالي `--no-transcripts` لا ينطبق على هذا الإعداد.
-يتم تخزين بيانات اعتماد الإدخال المحلي بشكل منفصل عن إعدادات خادم غير سرية ويتم كتابتها بأذونات مقيدة. يجب بالتالي إدارة مفاتيح واجهة برمجية التطبيقات كأسرار الإنتاج.
+يتم حذف بيانات الاعتماد على الآلة قبل التحميل، لكن إزالة الالتباس هي الحد الأدنى للأمان وليست بديلاً عن التحكم بالوصول.
-## مرجع إعداد المؤسسة
+الاستخدام المحلي فقط لا يتطلب حساباً. تاريخ الجلسة والتدقيق يبقى على الآلة، ما عدا التدقيق المحلي المجدول الذي يرسل هوية الآلة وملخص محدود بعد أن توافق عليه. يمكن تعطيل قياس الاستخدام المجهول للـ CLI باستخدام `FAILPROOFAI_TELEMETRY_DISABLED=1`.
-جميع الإعدادات القابلة للتحرير في لوحة المعلومات لها نطاق تنظيمي. يبقى السلوك على مستوى النشر الكامل كتكوين بيئة الخادم.
+## بيانات الاعتماد
-| المفتاح | الافتراضي | الغرض |
-| --- | --- | --- |
-| `allowed_sign_ins` | `[]` | قيّد الأعضاء الحاليين إلى رسائل بريد إلكترونية دقيقة أو `*@domain`؛ القائمة الفارغة تعني عدم وجود تقييد إضافي. |
-| `session_ttl_secs` | `86400` | مدة جلسة لوحة المعلومات؛ النطاق المقبول من 60 ثانية إلى 30 يومًا. |
-| `otp_ttl_secs` | `600` | مدة OTP والرابط السحري؛ النطاق المقبول هو 60–1800 ثانية. |
-| `alerts.email_default_recipients` | `[]` | المستلمون الافتراضيون عندما لا تتجاوز قناة البريد الإلكترونية للتنبيهات عنهم. |
-| `alerts.slack_default_webhook` | فارغ | عنوان URL ويب هوك Slack الافتراضي. |
-| `alerts.webhook_default_url` | فارغ | عنوان URL ويب هوك JSON عام افتراضي. |
-| `alerts.webhook_signing_secret` | فارغ | مفتاح HMAC-SHA256 المستخدم لرأس `X-AgentEye-Signature`؛ القراءات مخفية. |
-| `alerts.enabled_channels` | البريد الإلكترونية، Slack، ويب هوك | أنواع القنوات على مستوى المنظمة التي قد ترسل قواعد التنبيهات. |
-| `default_user_permissions` | `standard` | مجموعة الأذونات المسماة المحددة مسبقًا للدعوات الجديدة. |
+رموز الآلة مخزنة تحت `~/.failproofai/` برأذونات تابعة للمالك فقط. لا يتم كتابتها في تعريف الخدمة.
-`allowed_sign_ins` هو مرشح، وليس منح: يجب أن يكون الشخص بالفعل عضوًا في المنظمة. استخدم قائمة فارغة للسماح لكل عضو؛ القيمة المكررة `*` مرفوضة. يجب أن تستخدم عناوين URL للتنبيهات HTTPS باستثناء عناوين التطوير loopback.
+استخدم مفاتيح منفصلة للأشخاص والأتمتة والآلات. أعطِ كل واحدة الأذونات التي تحتاجها فقط، وأدرها عند تغيير الملكية، وألغِ إذنها عندما تتقاعد الآلة أو سير العمل.
-## قائمة التحقق من الأمان
+## قائمة التحقق
-- استخدم HTTPS للاتصالات السحابية.
-- حصّر المفاتيح على أصغر مجموعة أذونات.
-- افصل بين بيئات الإنتاج وغير الإنتاج.
-- راجع إعدادات التقاط والتحرير النصي قبل النشر.
-- دقّق التغييرات في المستخدمين والمفاتيح والمنظمة.
-- اختبر متطلبات النسخة الاحتياطية والاحتفاظ واستجابة الحوادث للنشر الخاص بك.
+- اطلب أضيق أذونات مفيدة.
+- اضبط `collector.sessions` على `false` حيث لا تكون محتويات كاملة ضرورية.
+- راجع من يمكنه نشر السياسات الملزمة.
+- اختبر السياسات في وضع المراقبة قبل التطبيق.
+- اجعل تسميات الآلة واضحة ومعرّفات الآلة مستقرة.
+- شغّل `failproofai config --status` بعد تغيير إعدادات الاتصال.
-
- إيقاف تشغيل التقاط النصي يغيّر ما يمكن للتدقيقات والتحقيقات أن تثبته. سجّل القرار والقيود المتوقعة منه.
-
\ No newline at end of file
+انظر [المفاتيح والأذونات](/ar/admin/keys-and-permissions) للحصول على كتالوج الأذونات.
\ No newline at end of file
diff --git a/docs/ar/admin/usage.mdx b/docs/ar/admin/usage.mdx
index bde9fa61c..9492b39d6 100644
--- a/docs/ar/admin/usage.mdx
+++ b/docs/ar/admin/usage.mdx
@@ -1,38 +1,78 @@
---
---
title: "الاستخدام"
-description: "فحص استهلاك المؤسسة ونافذة الفواتير النشطة."
+description: "فحص استهلاك المؤسسة للنافذة الحالية المدتها 30 يوماً."
icon: "chart-no-axes-combined"
---
-يعرض الاستخدام استهلاك المؤسسة الحالية ونوافذ الفواتير الخاصة بها. استخدمه لفهم كيفية تأثير نشر الإنتاج وحجم النصوص والتقييمات وتكرار التدقيق على خطتك.
+يعرض الاستخدام ما قامت المؤسسة الحالية بقياسه خلال نافذة مدتها 30 يوماً. النافذة ثابتة ومرتبطة بكل مؤسسة، والاستخدام للقراءة فقط: لا ينطبق ولا يعرض أي حدود أو حصص أو عتبات خطة. كلا الواجهتين تشير إلى ذلك — لوحة سطر الأوامر تطبع "استخدام للقراءة فقط، لا توجد حدود مطبقة".
## مراجعة الاستخدام
-
- 1. انتقل إلى **الإدارة → الاستخدام**.
- 2. تأكد من المؤسسة ونافذة القياس.
- 3. راجع الاستيعاب والجلسات والتقييمات والمقاييس والتدقيقات والنتائج والتنبيهات والمستخدمين والمفاتيح.
- 4. قارن عمل التدقيق الذي تم بدؤه واكتماله عندما يبدو استخدام التدقيق غير متوقع.
+
+ 1. انتقل إلى **admin → usage**.
+ 2. أكّد المؤسسة والنافذة الزمنية — يعرض الرأس بداية ونهاية النافذة واليوم فيها والوقت المنقضي.
+ 3. اقرأ كتلة البطل: الأحداث المدرجة والجلسات والوكلاء والبيئات.
+ 4. اقرأ خطوط الأنابيب الاثنين: التقييمات (مع النقاط والمقاييس) والتدقيقات (مع المشاكل والتنبيهات)، كل منها يعرض الحالات المكتملة مقابل الحالات المبدوءة.
+ 5. اقرأ كتل مساحة العمل والوصول: الاستعلامات المحفوظة والبيانات والتنبيهات والمشاكل الفريدة والأعضاء ومفاتيح API.
- 
+ الأرقام مخزنة في الذاكرة المؤقتة وليست مباشرة. استخدم التحكم في التحديث في الأعلى يميناً بعد إجراء تتوقع أن ترى تأثيره.
+
+ 
-
+
```bash
fp usage
fp --json usage
fp --org reliability-team --json usage
```
+
+ يحتاج `fp usage` إلى `usage:read` ويعمل تحت مفتاح API، مما يجعله الأمر المناسب لـ cron التقارير.
+
+ مع `--json` يعيد استجابة لوحة البيانات دون تغيير: `org_id` و `billing_anchor` و `window` و `usage` و `calculated_at` و `stale_after`. `calculated_at` و `stale_after` هما كيفية معرفة قدم الرقم.
+
+ لا يأخذ `fp usage` أي أعلام خاصة به — فقط `--json` و `--org` العامة. يقارير النافذة الحالية فقط وليس شيء قبلها، لذا احتفظ بسجلك الخاص بتشغيله بجدول زمني وتخزين حمولة `--json` بدلاً من توقع الاستعلام عن نافذة سابقة لاحقاً.
+
+ ```bash
+ fp --json usage | jq '.usage.events_ingested'
+ ```
-## التحقيق في التغيير
+### مفاتيح المقاييس
+
+كل شيء تحت `usage` في حمولة JSON، لذا يمكن لبرنامج نصي أن يسمي حقلاً بدلاً من تحليل لوحة.
+
+| المجموعة | المفاتيح |
+| --- | --- |
+| بيانات المراقبة | `events_ingested` و `sessions` و `agents` و `environments` |
+| التقييمات | `evaluation_runs` و `evaluation_finishes` و `evaluations` و `metrics` |
+| التدقيقات | `audit_runs` و `audit_finishes` و `issues_created` و `alerts_created` |
+| مساحة العمل | `queries_created` و `dashboards_created` |
+| الوصول | `users_active` و `users_created` و `keys_active` و `keys_created` |
+
+تقارير كل خط أنابيب العد المبدوء والمكتمل بشكل منفصل، لذا فإن الفجوة بين `audit_runs` و `audit_finishes` تعني عملاً بدأ ولم ينته — يستحق التحقق قبل أن تقرأ أي شيء في عدد المشاكل تحته.
+
+## التحقق من التغيير
+
+يتم تحديد حجم البيانات المدرجة لكل آلة وليس بشكل مركزي. ابدأ من المؤسسة والنافذة، ثم تابع ما تغير على الآلات التي تقدم البيانات إليها.
+
+| السبب | مكان التحقق | ما يجب تغييره |
+| --- | --- | --- |
+| آلة تقوم بإرسال نصوص الجلسة | `collector.sessions` في `~/.failproofai/config.json` لتلك الآلة | اضبطها على `false` لإرسال القرارات فقط |
+| يتم إرسال نشاط الخطاف بالكامل | `collector.hooks_verbosity` في نفس الملف | `decisions` يسمح بالتجميع كل دقيقة؛ `off` يوقف أحداث الخطاف تماماً |
+| تمت إضافة موقع التقاط جديد | `failproofai harness list` | أزله باستخدام `failproofai harness remove-path ` |
+| تم إعادة إرسال السجل | عمليات `failproofai backfill` للآلة | تقوم بإعادة الإرسال بإزالة التكرار على تجزئة المحتوى والانهيار في الصفوف الموجودة بالفعل، لذا لا تعد مزدوجة |
+| بدأت تكامل جديد في الإبلاغ | عدد `agents` و `environments` وقائمة الجلسات | حدد نطاق إعدادات المجمع للآلة الجديدة قبل طرحها |
-1. تأكد من المؤسسة ونافذة النشاط.
-2. قارن الزيادة مع حجم الجلسات حسب البيئة.
-3. تحقق مما إذا بدأت عملية دمج جديدة في إرسال النصوص.
-4. راجع تغييرات التقييم وتكرار التدقيق.
-5. قارن مقابل الحدود على خطة التسعير الحالية.
+الاستخدام لا يقارن شيئاً مقابل خطة. افعل ذلك خارج المنتج.
-تعيد واجهة سطر الأوامر نفس الملخص للسكريبتات.
\ No newline at end of file
+
+
+ إعدادات التعامل مع البيانات لكل آلة خلف هذه الأرقام.
+
+
+ سطح `fp` الكامل، بما في ذلك التثبيت والدخول.
+
+
\ No newline at end of file
diff --git a/docs/ar/admin/users-and-organizations.mdx b/docs/ar/admin/users-and-organizations.mdx
index 0ce50af87..188d3f215 100644
--- a/docs/ar/admin/users-and-organizations.mdx
+++ b/docs/ar/admin/users-and-organizations.mdx
@@ -1,21 +1,16 @@
---
-title: "المستخدمون والمؤسسات"
-description: "التحكم في العضوية والحفاظ على نطاق بيانات وإجراءات كل مؤسسة."
+title: "المستخدمون والمنظمات"
+description: "تحكم في العضويات واحفظ بيانات وإجراءات كل منظمة في نطاق محدد."
icon: "users"
---
-تعزل المؤسسات الجلسات والتقييمات والتدقيقات والمشاكل والتنبيهات والاستعلامات لوحات المعلومات والمستخدمين والمفاتيح. تأكد من المؤسسة النشطة قبل تغيير الموارد الإدارية.
+تعزل المنظمات الجلسات والتقييمات والتدقيقات والمشاكل والتنبيهات والاستعلامات وجداول المعلومات والمستخدمين والمفاتيح. تأكد من المنظمة النشطة قبل تغيير أي مورد إداري.
-## إدارة الأعضاء والمؤسسات
+## اختيار المنظمة
-
- 1. استخدم محول المؤسسة في أعلى الشريط الجانبي للسحابة لتبديل المؤسسات.
- 2. انتقل إلى **Administration → Users** للبحث عن الأعضاء أو التصفية حسب حالة النشاط والدور.
- 3. حدد **new user**، وأدخل البريد الإلكتروني، واختر مجموعة أذونات، وعدّل الاستثناءات إذا لزم الأمر.
- 4. افتح مستخدماً لاحقاً لتحديث المنح أو تعطيل تسجيل الدخول أو إعادة تفعيل الحساب.
-
- 
+
+ استخدم محدد المنظمة في أعلى شريط الجانب في السحابة. كل ما يليه — بما في ذلك كل صفحة في **admin** — يقرأ ويكتب إلى هذه المنظمة.
```bash
@@ -23,22 +18,62 @@ icon: "users"
fp orgs switch reliability-team
fp orgs current
fp orgs perms
+ ```
+
+ `fp orgs switch` بدون معرف يفتح منتقي أسهم يبدأ من منظمتك الحالية؛ التشغيل غير التفاعلي يعود إلى طلب مرقم، وتحت `--json` يلزم معرف. يستمر الاختيار إلى `~/.failproofai/fpcli/cli-auth.json`، لذا تُرسل الأوامر اللاحقة المستأجر النشط. تجاوزه لأمر واحد باستخدام `--org ` أو `FP_ORG`.
+
+
+
+
+ كل أمر `fp orgs` يحتاج إلى شخص موقع ويرفض تحت مفتاح API، لأن عضوية المنظمة تنتمي إلى شخص والمفتاح يعمل بالفعل لمنظمة واحدة. أوامر `fp users` أدناه تعمل بكلا الطريقتين.
+
+
+## إدارة الأعضاء
+
+
+
+ 1. انتقل إلى **admin → users** وابحث عن الأعضاء حسب البريد الإلكتروني، أو ضيّق القائمة باستخدام شرائح الفلتر `protected` و `admin` و `standard` و `read-only`.
+ 2. اختر **new user**، أدخل البريد الإلكتروني، اختر مجموعة الأذونات، وأضبط التجاوزات الخاصة بكل عضو إذا لزم الأمر.
+ 3. افتح عضواً لاحقاً لتغيير الأذونات أو تعطيل تسجيل الدخول أو إعادة تفعيل الحساب.
+ 
+
+ شرائح الأذونات في هذا الإطار أسبق من إعادة تسمية `incidents:*` إلى `issues:*`؛ قائمة [الأذونات الشائعة](/ar/admin/keys-and-permissions#common-permissions) محدثة.
+
+
+ ```bash
+ fp users list
+ fp users list --active-only
fp users create engineer@example.com --permission-set standard
fp users show engineer@example.com
fp users update engineer@example.com --add audits:write
fp users disable engineer@example.com
fp users enable engineer@example.com
```
+
+ يتم توجيه الأعضاء بالبريد الإلكتروني وحلهم بعدم الحساسية لحالة الأحرف، لذا `fp users show Alice.Chen@Example.com` و `fp users create alice.chen@example.com` يشيران إلى نفس الشخص.
-يمكن للمسؤولين إنشاء وتحديث وتعطيل وإعادة تفعيل المستخدمين، ثم تعيين مجموعة الأذونات المناسبة لدورهم. يستخدم API عملية حذف للتعطيل، لكنها لا تزيل الحساب أو سجل عضويته.
+### الأذونات وما يحتاجه كل فعل
+
+تستخدم أذونات الأعضاء نفس الحساب مثل المفاتيح: الأذونات الفعلية هي `(set ∪ added) − removed`، و `--add` / `--remove` تأخذ رموز `slug:action.action` المختصرة حيث تتسع الإجراءات المنقوطة. انظر [المفاتيح والأذونات](/ar/admin/keys-and-permissions).
+
+| الفعل | الأذونة | ملاحظات |
+| --- | --- | --- |
+| `fp users list` / `show` | `users:read` | `--active-only` يخفي الأعضاء المعطلين. |
+| `fp users create` | `users:create` | `--permission-set` يعين الدور؛ `--add` / `--remove` يطبقان تجاوزات. |
+| `fp users update` | `users:update` | `--permission-set` **يستبدل** تجاوزات العضو الخاصة به؛ `--add` / `--remove` وحدهما متزايدان مقابل أذوناته الحالية. |
+| `fp users disable` / `enable` | `users:delete` | كلاهما، بما في ذلك التفعيل — منح هذا بشكل مقصود. |
+
+يرفض التعطيل حالتين بشكل مباشر، كخطأ Forbidden وليس رسالة تحقق: لا يمكن تعطيل عضو **protected**، ولا يمكنك تعطيل حسابك الخاص. تعطيل عضو معطل بالفعل، أو تفعيل عضو نشط بالفعل، هو عدم تدخل هادئ. تستخدم API عملية حذف للتعطيل، لكنها لا تزيل الحساب أو سجل العضوية.
+
+تحكم إعدادات منظمتين في العضوية: `default_user_permissions` يحدد مجموعة الأذونات للدعوة الجديدة، و `allowed_sign_ins` يتحكم في العناوين التي يمكنها تلقي رمز تسجيل دخول. أدرها من [صفحة الإعدادات](/ar/admin/settings-and-security).
- يؤدي تعطيل مستخدم إلى منع هذه الهوية من تسجيل الدخول إلى كل مؤسسة، وليس فقط المؤسسة المحددة حالياً. يستعيد إعادة التفعيل تسجيل الدخول العام وأذونات العضو في هذه المؤسسة.
+ تعطيل مستخدم يمنع هذه الهوية من تسجيل الدخول إلى كل منظمة، وليس فقط المنظمة المحددة حالياً. إعادة التفعيل تستعيد تسجيل الدخول العام وأذونات العضو في هذه المنظمة.
- أعطِ حسابات الخدمة أسماء وصفية مرتبطة بعبء العمل والمالك. تجنب مشاركة المفاتيح بين المؤسسات أو بين الأشخاص والآلات.
+ أعط حسابات الخدمة أسماء وصفية مرتبطة بسير عمل والمالك. لا تشارك مفتاحاً بين المنظمات، أو بين شخص وآلة.
\ No newline at end of file
diff --git a/docs/ar/audits/alerts.mdx b/docs/ar/audits/alerts.mdx
index 1442287d5..f0eacd434 100644
--- a/docs/ar/audits/alerts.mdx
+++ b/docs/ar/audits/alerts.mdx
@@ -1,63 +1,104 @@
---
---
title: "التنبيهات"
-description: "كتشف تكرار الحادثة وأرسلها إلى المستجيبين المناسبين."
+description: "كشف التكرار وتوجيه المشكلة إلى المستجيبين المناسبين."
icon: "bell-ring"
---
-تراقب التنبيهات حالة قابلة للقياس وتنشئ حادثة عندما تنطلق. استخدمها عندما يجب أن ينتج عن الفشل استجابة في الوقت المناسب، بغض النظر عما إذا كانت السياسة يمكنها حجبه أم لا.
+يراقب التنبيه حالة قابلة للقياس ويفتح مشكلة عند تفعيله. استخدمه عندما يجب أن ينتج عن الفشل استجابة فورية، سواء كانت السياسة قادرة على حجبه أم لا.
## إنشاء واختبار تنبيه
- 1. انتقل إلى **Analyze → Alerts** واختر **new alert**. يمكنك أيضًا البدء من رمز الجرس على خطأ تمثيلي.
+ 1. انتقل إلى **Analyze → Alerts** واختر **new alert**. يمكنك أيضًا البدء من أيقونة الجرس على خطأ تمثيلي.
2. أدخل الاسم والخطورة ونوع المشغل والشرط وفترة التقييم وعدد الانتهاكات والنافذة والقنوات.
- 3. احفظ التنبيه وافتح صفحة التفاصيل الخاصة به وقم بتشغيل **test**.
- 4. انتقل إلى **Analyze → Issues** للقبول والتعيين والنقاش والاشتراك والتحقق من الحوادث التي أنشأها التنبيه.
+ 3. احفظ التنبيه وافتح صفحة التفاصيل الخاصة به وشغّل **test**.
+ 4. انتقل إلى **Analyze → Issues** للإقرار والتعيين والمناقشة والاشتراك في المشاكل التي يفتحها التنبيه وحلها.
- يحدد الجزء الأول من النموذج التنبيه والإشارة التي يجب أن تشغله.
+ يحدد الجزء الأول من النموذج التنبيه والإشارة التي يجب أن تفعله.
- 
+ 
- يتحكم الجزء الثاني في مدة استمرار الحالة وعدد مرات تقييمها وحيث يتم إرسال الإخطارات.
+ يتحكم الجزء الثاني في المدة التي يجب أن يستمر الشرط فيها، وعدد مرات تقييمه، وأين يتم إرسال الإخطارات.
- 
+ 
- بعد الحفظ، استخدم قائمة التنبيهات للتأكد من تفعيل القاعدة وأن مشغلها ونافذتها وخطورتها وقنواتها تطابق ما كنت تقصده.
+ بعد الحفظ، استخدم قائمة التنبيهات للتأكد من تفعيل القاعدة وأن المشغل والنافذة والخطورة والقنوات تطابق ما قصدته. تُظهر البطاقة التي تحتوي على مشاكل مفتوحة العدد؛ تحذف البطاقة بدون مشاكل هذا السطر تمامًا، لذا غيابها لا يخبرك بشيء. لقراءة الرقم لكل قاعدة بما في ذلك الأصفار، استخدم `fp alerts show `، والذي يطبعها دائمًا.
- 
-
- اختبر التنبيه قبل الاعتماد عليه للاستجابة الإنتاجية.
+ 
-
+
```bash
fp alerts create high-errors \
--trigger-kind metric_threshold \
--severity warning \
- --trigger-spec '{"metric":"error_count","op":">","value":50,"window_secs":900}'
+ --trigger-spec '{"metric":"error_count","op":">","value":50,"window_secs":900}' \
+ --eval-interval-secs 300 \
+ --min-breaches 2 \
+ --eval-window 3
fp alerts show high-errors
fp alerts test high-errors
fp alerts update high-errors --severity critical --yes
```
- استخدم `fp alerts list` لمراجعة القواعد و `fp alerts delete ` لحذف واحدة.
+ تبدأ التنبيهات الجديدة **مفعلة**، ويتم رفض تضارب الأسماء قبل إنشاء أي شيء.
+
+ يستبدل `fp alerts update` التعريف الكامل من جانب الخادم، لذا يقرأ CLI التنبيه ويضع أعلامك فوقه — يحتاج التحديث الذي يحتوي على أعلام فقط على `alerts:read` **بالإضافة إلى** `alerts:write`، ويؤكد إلا إذا مررت `--yes`.
+
+ استخدم `fp alerts list` لمراجعة القواعد و `fp alerts delete ` لإزالة واحدة. يعاين الحذف القاعدة — بما في ذلك عدد المشاكل المفتوحة — ويؤكد قبل التصرف، لأنه لا يمكن التراجع عنه.
+
+ الحذف ليس الطريقة لتسكيت قاعدة مزعجة. `DELETE /alerts/{id}` يتسلسل: كل مشكلة فتحتها التنبيهات تذهب معها، تأخذ تعليقاتها والمشتركين وسجل النشاط. صندوق تأكيد CLI يعبر عن هذا بأن المشاكل المفتوحة يتم "حذفها بدون مالك"؛ عقد API هو حذف متسلسل، لذا تعامل مع السجل على أنه ذهب. لإيقاف تشغيل قاعدة والاحتفاظ بما سجلته، قم بإيقاف تشغيلها بدلاً من ذلك — نموذج التنبيهات على لوحة التحكم يحتوي على تبديل مفعّل، و لا يكشف `fp alerts create` و `fp alerts update` عن علم `--enabled`، لذا فإن مسار CLI هو `fp alerts update --file` مع تعريف كامل يحمل `enabled: false`.
- اطلع على مرجع [`fp alerts`](/ar/reference/cloud-cli#alerts) للحصول على مجموعة أوامر التنبيه الكاملة.
+ راجع [مرجع `fp alerts`](/ar/reference/cloud-cli#alerts) للحصول على مجموعة أوامر التنبيهات الكاملة.
-يمكن أن تكون شروط التنبيه مبنية على الأخطاء أو درجات التقييم أو تركيبات التقييم أو SQL مخصص. أضف المستقبلين واختبر القاعدة وافتح الحادثة الناتجة للقبول والتعيين والتعليق والاشتراك والتحقق منها.
+
+ **test** يسلم إخطارات حقيقية. يرسل إلى قنوات البريد الإلكتروني و Slack والـ webhook الحقيقية للتنبيه ويفتح مشكلة اصطناعية، لذا يمكن أن ينبه من هو في الخدمة. يؤكد أولاً على محطة طرفية تفاعلية؛ `--yes` و `--json` و stdin المعاد توجيهه جميعًا يتخطون هذا الموجه. يبلغ الخادم أيضًا عن النجاح بمجرد التوزيع، لذا فإن الاختبار الأخضر يثبت أن الرسالة غادرت، وليس أنها وصلت.
+
+
+## حدد المشغل
+
+هناك خمسة أنواع مشغلات:
+
+| `--trigger-kind` | يتفعل عندما |
+| --- | --- |
+| `metric_threshold` | تتجاوز مقياس حد معين — الأخطاء أو زمن الاستجابة أو التكلفة أو أي شيء آخر يمكنك قياسه. |
+| `per_event` | يصل حدث مطابق واحد. |
+| `evaluation_score` | تتجاوز درجة المقيّم حد معين. |
+| `eval_compound` | يتم دمج عدة شروط درجات، مثل فشل اثنين من ثلاث درجات. |
+| `custom_sql` | تُرجع استعلام تكتبه انتهاكًا. |
-## تصميم التنبيه الجيد
+يذهب الشرط نفسه إلى `--trigger-spec`، مشكل للنوع الذي اخترته.
+
+## ضبط أرقام التقييم
+
+تطلب نموذج لوحة التحكم و CLI نفس القيم الأربع.
+
+| الإعداد | العلم | القيم المقبولة |
+| --- | --- | --- |
+| الخطورة | `--severity` | `info`, `warning`, `critical` |
+| فترة التقييم | `--eval-interval-secs` | 30–86,400 ثانية |
+| عدد الانتهاكات | `--min-breaches` | واحد على الأقل، وليس أبدًا أكثر من النافذة |
+| نافذة التقييم | `--eval-window` | واحد على الأقل، محسوبة بـ **intervals**، وليس بالثواني |
+
+لذا فإن `--eval-interval-secs 300 --min-breaches 2 --eval-window 3` يعني "قيّم كل خمس دقائق، وتفعّل عندما يكون اثنان من آخر ثلاث تقييمات قد انتهكا".
+
+## تصميم التنبيهات الجيدة
- سمّ الحالة وسير العمل المتأثر.
-- حدد البيئة بشكل صريح.
-- عيّن نافذة وحد يتجنب الاستجابة لحدث واحد غير ضار.
-- أضف رابطًا أو استعلامًا يقود المستجيبين إلى الجلسات.
+- حدد البيئة بوضوح.
+- ضع نافذة وحد يتجنب الرد على حدث واحد ضار.
+- أضف ارتباط أو استعلام يوجه المستجيبين إلى الجلسات.
- عيّن مالكًا قبل تفعيل القاعدة.
+- تحقق من `fp alerts show ` من عدد المشاكل المفتوحة قبل إضافة قاعدة أخرى للأعراض نفسها. تطبع بطاقة لوحة التحكم هذا السطر فقط عندما يكون العدد غير صفر.
- بعد حل نتيجة التدقيق، أضف تنبيهًا عندما قد يحدث نفس الفشل مرة أخرى خارج تغطية السياسة.
-
\ No newline at end of file
+ بعد حل نتيجة تدقيق، أضف تنبيهًا عندما يمكن أن يحدث نفس الفشل خارج تغطية السياسة.
+
+
+
+ الإقرار والتعيين والتعليق والاشتراك والحل — سير العمل الذي ينزل فيه كل تنبيه متفعل.
+
\ No newline at end of file
diff --git a/docs/ar/audits/cadence.mdx b/docs/ar/audits/cadence.mdx
index 1b468c8a0..b97c6ddb0 100644
--- a/docs/ar/audits/cadence.mdx
+++ b/docs/ar/audits/cadence.mdx
@@ -1,27 +1,29 @@
---
-title: "تكرار التدقيق"
+title: "دورة التدقيق"
description: "اختر متى يتم تشغيل التدقيقات المتكررة وكمية البيانات التي تراجعها."
icon: "calendar-clock"
---
-استخدم التدقيقات المتكررة لأنماط الأعطال التي يمكن أن تعود مع تغير الوكلاء والمطالبات والأدوات والنماذج.
+استخدم التدقيقات المتكررة لأنماط الفشل التي قد تظهر مجددًا مع تغير الوكلاء والمحفزات والأدوات والنماذج.
-## غيّر الجدول الزمني
+## تغيير الجدول الزمني
1. انتقل إلى **Analyze → Audits** وافتح التدقيق.
- 2. افتح إعداداته وغيّر حالة التفعيل أو الفترة الزمنية أو إرساء التوقيت العالمي أو وضع النافذة أو المراجعة للخلف.
- 3. احفظ التدقيق وأكّد وقت التشغيل التالي على بطاقة التدقيق.
- 4. استخدم **run now** مرة واحدة بعد تغيير النطاق أو السياق الرئيسي.
+ 2. اختر **edit settings** وغيّر الدورة والنافذة والحساسية أو عدد النتائج في كل تشغيل.
+ 3. احفظ التدقيق وأكّد وقت التشغيل التالي في رأس التدقيق.
+ 4. توقف واستأنف الجدول الزمني من نفس الرأس، بجانب **run now**.
+ 5. استخدم **run now** مرة واحدة بعد تغيير كبير في النطاق أو السياق.
- 
+ 
```bash
fp audits edit checkout-reliability \
--schedule-interval-secs 86400 \
--schedule-anchor 2026-08-15T09:00:00Z \
+ --window-mode since_last \
--lookback-window-secs 86400 \
--yes
@@ -29,21 +31,50 @@ icon: "calendar-clock"
fp audits edit checkout-reliability --enabled --yes
```
- انظر إلى [مرجع `fp audits`](/ar/reference/cloud-cli#audits) لحدود الجدول الزمني وسلوك النافذة وجميع أوامر التدقيق.
+ يطلب `fp audits edit` تأكيدًا قبل تغيير أي شيء، ولهذا يمرر كل مثال هنا `--yes`. يستبدل الخادم التعريف بالكامل في كل تحرير، لذا تعيد CLI إرسال التدقيق الحالي مع تطبيق التغييرات — يحتاج التحرير الذي يتضمن الأعلام فقط إلى `audits:read` **وكذلك** `audits:write`. حدّد نطاق مفتاح CI لكليهما.
+
+ انظر [مرجع `fp audits`](/ar/reference/cloud-cli#audits) لحدود الجدول الزمني وسلوك النافذة وجميع أوامر التدقيق.
-اختر التكرار بناءً على سرعة وتكلفة المخاطرة:
+## حدا الجدول الزمني
+
+كل التوصيات أدناه يجب أن تناسب داخل هذه الحدود. النطاقات من الخادم، و`fp` يعكسها على الجانب الضيف، لذا القيمة خارج أحدها تخرج 2 محليًا بدلاً من أن تكلف جولة 422.
+
+| الحقل | العلم | النطاق | الافتراضي |
+| --- | --- | --- | --- |
+| فترة الجدول الزمني | `--schedule-interval-secs` | 3,600–604,800 ثانية (ساعة واحدة إلى 7 أيام) | 86,400 (يومي) |
+| نافذة الاسترجاع | `--lookback-window-secs` | 3,600–7,776,000 ثانية (ساعة واحدة إلى 90 يومًا) | 604,800 (7 أيام) |
+
+سبعة أيام هي الحد الأقصى للدورة. لا يوجد تدقيق شهري في Cloud.
-| نمط المخاطرة | التكرار الأولي |
+## اختر دورة
+
+اختر من سرعة وتكلفة المخاطر:
+
+| نمط المخاطر | دورة البداية |
| --- | --- |
-| إجراء الإنتاج عالي التأثير | يومي |
-| انحدار سير العمل أو النموذج | أسبوعي |
-| مراجعة الحوكمة أو الوصول | شهري |
-| تحقيق إصدار لمرة واحدة | تشغيل مرة واحدة |
+| إجراء الإنتاج عالي التأثير | يومي، أو كل ساعة أثناء توجيه تغيير محفوف بالمخاطر |
+| تراجع سير العمل أو النموذج | أسبوعي |
+| مراجعة الحوكمة أو الوصول | أسبوعي — أطول فترة متاحة |
+
+وازن نافذة الاسترجاع مع الدورة حتى لا تترك التشغيلات فجوات ولا تفحص مجموعة سكانية كبيرة بلا داع بشكل متكرر.
+
+لا يوجد تدقيق لمرة واحدة؛ كل تدقيق يحمل فترة جدول زمني. للتحقيق من الإصدار، أنشئه مفعلاً، اترك التشغيل الأول ينطلق — يتم وضع التشغيل الأول في الطابور فورًا عند الإنشاء، بغض النظر عن الهدف — ثم أوقفه مؤقتًا باستخدام `fp audits edit --disabled --yes`. أعد التفعيل قبل استخدام **run now**: التدقيق المعطل ليس لديه صف قائمة انتظار، والتشغيل اليدوي عليه سيتم رفضه برمز 409.
+
+## وضع النافذة والهدف
+
+يقرر `--window-mode` نافذة كل تشغيل يقوم بمسحها:
+
+| الوضع | السلوك |
+| --- | --- |
+| `since_last` | المتابعة من نهاية النافذة المحللة بالكامل الأخيرة، لذا يترك التشغيل المتخطى بدون فجوة. |
+| `fixed` | أعد فحص `lookback_window_secs` المتجدد في كل تشغيل، مهما كان ما غطاه التشغيل الأخير. |
+
+`--schedule-anchor` يثبت المرحلة بدلاً من التكرار: تهبط التشغيلات على `anchor + N × interval`. أغفله والهدف الافتراضي هو 09:00 UTC التالي؛ يتم رفض هدف أكثر من 365 يومًا. يدخل تغيير الفترة أو الهدف حيز التنفيذ في إعادة الجدولة التالية، وليس في التشغيل المصفوف بالفعل، والتشغيل الفاشل لا يحرك الهدف.
-قم بمواءمة نافذة المراجعة للخلف مع التكرار بحيث لا تترك التشغيلات فجوات ولا تفحص مجموعة سكانية كبيرة بلا داع بشكل متكرر. بعد تغيير هدف التدقيق أو سياقه، قم بتشغيله يدويًا مرة واحدة قبل الاعتماد على النتيجة المجدولة التالية.
+بعد تغيير هدف التدقيق أو سياقه، قم بتشغيله يدويًا مرة واحدة قبل الاعتماد على النتيجة المجدولة التالية.
- يتم تكوين التدقيقات المجدولة المحلية على الجهاز وتفحص سجل الوكيل المحلي. جداول التدقيق السحابية تعمل على جلسات السحابة. تعامل مع نتائجها وملكيتها بشكل منفصل.
+ هذه الصفحة تتعلق بجداول تدقيق Cloud، التي تعمل على جلسات Cloud. التدقيق المحلي لديه مؤقت خاص به: `failproofai audit --schedule [days]` يأخذ 1–90 يومًا والافتراضي 7، ويمسح تاريخ الوكيل على تلك الآلة الواحدة، وهو السطح الوحيد مع خيار شهري. النتائج والملكية منفصلة عن أي شيء هنا — انظر [Audit local agent history](/ar/audits/local-audit).
\ No newline at end of file
diff --git a/docs/ar/audits/findings-and-issues.mdx b/docs/ar/audits/findings-and-issues.mdx
index ae002177a..b04bb857a 100644
--- a/docs/ar/audits/findings-and-issues.mdx
+++ b/docs/ar/audits/findings-and-issues.mdx
@@ -1,94 +1,137 @@
---
---
title: "النتائج والمشاكل"
-description: "حول أدلة التدقيق إلى عمل معالجة مملوك وقابل للتتبع."
+description: "حوّل أدلة التدقيق إلى عمل إصلاح مملوك وقابل للتتبع."
icon: "clipboard-check"
---
-النتيجة هي البيان المدعوم بالأدلة من التدقيق حول فشل ما. المشكلة هي سير العمل الدائم للرد عليها.
+النتيجة هي البيان المدعوم بالأدلة من التدقيق حول فشل ما. المشكلة هي سير العمل الدائم للاستجابة لها.
-## فرز وإسناد العمل
+يستخدم الكائنان مفردات مختلفة، وهما يقفان بجانب بعضهما البعض، لذا يستحق الأمر توضيح الفرق بينهما أولاً:
+
+| | النتيجة | المشكلة |
+| --- | --- | --- |
+| الحالات | `open`, `recurring`, `resolved`, `dismissed`, `muted` | `firing`, `acknowledged`, `resolved` |
+| علم التصفية | `--status` | `--state` |
+| المعرّف | معرّف النتيجة | معرّف المشكلة |
+| الإدراج الافتراضي | المجموعة النشطة: مفتوحة وحالات متكررة | الأحدث مفتوحة أولاً |
+
+## فرز العمل وإسناده
-
- 1. افتح **تحليل → التدقيقات**، اختر جولة مكتملة، ثم حدد نتيجة لفحص تحليلها والتوصية والجلسات واستعلامات الأدلة.
- 2. أقرّ أو أسند أو ارفض أو أسكت أو حل أو أعد فتح النتيجة بعد التحقق من أدلتها.
- 3. انتقل إلى **تحليل → المشاكل** وصفّ صندوق الوارد الدائم حسب الحالة أو الخطورة أو المسؤول.
- 4. افتح المشكلة لإسنادها وإضافة تعليقات أو مشتركين، وحلّها بعد التحقق من الإصلاح.
+
+ 1. افتح **Analyze → Audits**، واختر عملية اكتملت، ثم حدد نتيجة للفحص تفصيلاً تحليلها وتوصياتها والجلسات واستعلامات الأدلة.
+ 2. اعترف بالنتيجة، أو أسندها، أو أرفضها، أو أكتمها، أو حلها، أو أعد فتحها بعد التحقق من أدلتها.
+ 3. انتقل إلى **Analyze → Issues** وصفّ صندوق الوارد الدائم حسب الحالة أو الخطورة أو المسؤول.
+ 4. افتح المشكلة لإسنادها وإضافة تعليقات أو مشتركين، ثم حلها بعد التحقق من الإصلاح.
- ابدأ بملخص النتيجة. تأكد من أن وصف الفشل والاستجابة الموصى بها والخطورة والترتيب تتفق مع الجلسات التي توقعت أن يفحصها التدقيق.
+ ابدأ بملخص النتيجة. تأكد من أن وصف الفشل والاستجابة الموصى بها والخطورة والترتيب تتطابق مع الجلسات التي توقعت أن يفحصها التدقيق.
- 
+ 
- بعد ذلك، افتح جلسة متأثرة بدلاً من الاعتماد على الملخص وحده. يجب أن يظهر التتبع المرتبط الحدث الدقيق والحمل الذي يدعمان النتيجة.
+ بعد ذلك، افتح جلسة متأثرة بدلاً من القرار من الملخص وحده. يجب أن يُظهر التتبع المرتبط الحدث الدقيق والحمل الفعلي الذي يدعم النتيجة.
- 
+ 
- بعد التحقق من الأدلة، استخدم المشاكل لإعطاء الاستجابة مالكاً وتتبعها بشكل مستقل عن جولات التدقيق المستقبلية.
+ بعد التحقق من الأدلة، استخدم المشاكل لإعطاء الاستجابة مالكاً وتتبعها بشكل مستقل عن عمليات التدقيق المستقبلية.
- 
+ 
- افتح المشكلة لتسجيل ملاحظات التحقيق وإخطار المشتركين والحفاظ على سجل الاستجابة. حلّها فقط بعد نشر المعالجة والتحقق منها.
+ افتح المشكلة لتسجيل ملاحظات التحقيق وإخطار المشتركين والحفاظ على سجل الاستجابة. حلها فقط بعد نشر التصحيح والتحقق منه.
- 
+ 
-
+
```bash
fp audits findings --audit checkout-reliability --status open
fp audits finding
fp audits ack --reason "owner assigned"
fp audits assign --to engineer@example.com
+ fp audits mute --reason "expected in staging" --yes
+ fp audits dismiss --reason "false positive" --yes
+ fp audits resolve --yes
+ fp audits reopen
- fp issues list
+ fp issues list --state firing
fp issues show
+ fp issues ack
fp issues assign --assignee engineer@example.com
fp issues comment-add --body "policy is in observe mode"
fp issues resolve --yes
```
- استخدم `fp issues subscribe ` و `fp issues unsubscribe ` و `fp issues subscribers ` لإدارة المراقبين.
+ `mute` و `dismiss` و `resolve` تخفي أو تغلق نتيجة، لذا يتم تأكيد كل منها أولاً — مرر `--yes` في البرامج النصية. `ack` و `reopen` و `assign` قيود حجزي قابلة للعكس وتعمل فوراً. `ack` و `mute` و `dismiss` تأخذ `--reason`، وتستحق التمرير: يتم الاحتفاظ بها كملاحظات دائمة على النتيجة، وليس مكتوبة في سجل ومنسية. `resolve` و `reopen` و `assign` لا تأخذ سبباً.
+
+ الإسناد يعمل بشكل مختلف على كل كائن. `fp audits assign` يتطلب `--to ` ويعيّن مالكاً واحداً؛ إعادة تشغيله تعيد الإسناد. `fp issues assign` يأخذ `--assignee` قابل للتكرار و**يستبدل** القائمة بأكملها، لذا حذفها يمسح كل مسؤول.
+
+ استخدم `fp issues comment-list ` و `fp issues count --state firing` و `fp issues subscribe`/`unsubscribe`/`subscribers ` لبقية سطح المشكلة.
- انظر [مرجع Cloud CLI للتدقيق والمشاكل](/ar/reference/cloud-cli#audits) لنتائج التدقيق و [`fp issues`](/ar/reference/cloud-cli#issues) لإدارة المشاكل.
+ اطّلع على [مرجع Cloud CLI للتدقيق والمشاكل](/ar/reference/cloud-cli#audits) لنتائج التدقيق و [`fp issues`](/ar/reference/cloud-cli#issues) لإدارة المشاكل.
## مراجعة نتيجة
-تأكد من أنها تحتوي على:
+يقرر حقلان ما يجب فعله بها قبل أي شيء آخر.
+
+**`kind`** يفصل بين `failure` (حدث خطأ ما) و `policy` انتهاك (قاعدة تم كسرها) و `improvement` (يمكن أداء العمل بشكل أفضل). يتم عرضه كشارة على النتيجة. نتيجة `policy` هي التي يمكن لسياسة ما إغلاقها؛ الاثنان الآخران يحتاجان عادة إلى تغيير سير عمل أو تنبيه أو تدخل بشري.
+
+**`priority`** درجة من 0–1، تُحسب مرة أخرى لكل عملية، وهي الترتيب الذي يتم فيه فرز صف النتائج. تقسمها صفحة النتيجة تحت **لماذا تحتل هذا الترتيب**، كقيمة × وزن:
+
+| العامل | الوزن |
+| --- | --- |
+| التغطية | 0.30 |
+| الخطورة | 0.25 |
+| الحجم | 0.25 |
+| حداثة العهد | 0.20 |
+
+ثم تأكد من أن النتيجة تحتوي على:
-- وضع فشل مستقر، وليس فقط عنوان لمرة واحدة
+- نمط فشل ثابت، وليس فقط عنوان لحالة واحدة
- الخطورة والتأثير التشغيلي
-- معرّفات الجلسة المتأثرة أو الاستعلامات الداعمة
+- معرّفات الجلسات المتأثرة أو الاستعلامات الداعمة
- سياق كافٍ لإعادة إنتاج السلوك
- استجابة مقترحة تتطابق مع الأدلة
+لإعادة إنتاج نتيجة، اسحبها بالكامل: `fp --json audits finding ` يُرجع السجل الكامل مع `evidence` و `evidence_queries` و `scope` دون تعديل، وهذا هو التحليل الذي تم تشغيله فعلاً. `--json` خيار عام، لذا يأتي قبل الأمر.
+
## استخدم مشكلة لإدارة الاستجابة
-أنشئ أو ربط مشكلة عندما تحتاج النتيجة إلى إسناد أو نقاش أو تغييرات في الحالة أو تعليقات أو مشتركين. يمكن للمشاكل أن تمثل أيضاً حوادث التنبيهات والمشاكل المبلّغ عنها يدويّاً، وهذا هو السبب في أنها توجد تحت استجابة التدقيق وليس في الملاحة الأساسية.
+أنشئ أو ربط مشكلة عندما تحتاج النتيجة إلى إسناد أو نقاش أو تغييرات حالة أو تعليقات أو مشتركين. يسجل `source` المشكلة مصدرها — `audit` أو `alert` أو `manual` — وهذا السبب في أن لوحة التحكم تعطي المشاكل عرضها الخاص **Issues** بدلاً من دمجها تحت تدقيق.
+
+الاشتراك جزئياً تلقائي. يتم الاشتراك للأشخاص عندما يعترفون بمشكلة أو يعلقون عليها أو يتم إسنادهم إليها أو يفتحونها — `fp issues subscribers` يسرد المشتركين النشطين فقط، لذا فهو ليس مجرد قائمة الاشتراكات اليدوية. يُرسل تعليق بريداً إلكترونياً لكل مشترك نشط، والتعليق يحتاج فقط إلى `issues:read`، لذا لن يكون المراجع القراءة فقط ملاحظاً صامتاً.
-حل المشكلة عند نشر المعالجة والتحقق منها. حل النتيجة عندما يتم معالجة وضع الفشل لمجموعة التدقيق. قد تختلف هذه اللحظات.
+حل المشكلة عندما يتم نشر التصحيح والتحقق منه. حل النتيجة عندما تتم معالجة نمط الفشل لمجموعة التدقيق. قد تختلف هذه اللحظات.
## حوّل مشكلة إلى مسودة سياسة
-
- 1. افتح المشكلة وتحقق من نتيجتها والجلسات المُستشهد بها والسبب الجذري والتوصية.
- 2. حدد **إنشاء سياسة** وراجع نتيجة الأهلية والنية الفرض المقترحة. نتيجة **لا توجد سياسة** تعني أن السلوك قد يتطلب تنبيهاً أو تغييراً في سير العمل أو استجابة بشرية بدلاً من ذلك.
- 3. حدد **اكتب هذه السياسة**، ثم راجع واختبر المصدر المُنشأ في **الإدارة → محرر السياسة** قبل تحديد **نشر الإصدار**. استخدم **افتح المحرر على أي حال** عندما تختلف مع فحص الأهلية.
- 4. انتقل إلى **الإدارة → الفرض**، ونشّر الإصدار في وضع **مراقبة** والتحقق من قراراته تحت **مراقبة → السياسة** قبل فرضها.
+
+ 1. افتح المشكلة وتحقق من نتيجتها والجلسات المذكورة والسبب الجذري والتوصية.
+ 2. حدد **generate policy** واستعرض نتيجة التأهل والنية الإنفاذية المقترحة. تعني نتيجة **no policy** أن السلوك قد يتطلب تنبيهاً أو تغيير سير عمل أو استجابة بشرية بدلاً من ذلك.
+ 3. حدد **write this policy**، ثم استعرض واختبر المصدر المُنتج في **Admin → policy editor** قبل تحديد **publish version**. استخدم **open the editor anyway** عندما تختلف مع فحص التأهل.
+ 4. انتقل إلى **Admin → enforcement**، ونشّر الإصدار في نمط **observe**، والتحقق من قراراته تحت **Observe → policy** قبل إنفاذه.
- عنوان المشكلة ووصف النتيجة والسبب الجذري والتوصية ونية الأهلية تساعد في تكوين المسودة. لا شيء يتم نشره أو نشره تلقائيّاً.
+ يساعد عنوان المشكلة ووصف النتيجة والسبب الجذري والتوصية ونية التأهل في تأليف المسودة. لا يتم نشر أو نشر أي شيء تلقائياً.
-
- استخدم واجهة سطر الأوامر للتحقق من الأدلة قبل فتح المشكلة في لوحة المعلومات:
+
+ استخدم CLI للفحص من الأدلة قبل فتح المشكلة في لوحة التحكم:
```bash
fp issues show
- fp audits finding
+ fp --json audits finding
fp events --session-id --full --all
```
- أهلية السياسة ونشر Cloud ونشر الأسطول هي سير عمل لوحة المعلومات. استخدم `failproofai policies --install --custom ` عندما تريد التحقق من صحة مصدر السياسة المعادل محليّاً أولاً.
+ لوحة التحكم مسار واحد؛ CLI مسار آخر. `fp policies compose ""` تصيغ سياسة، `fp policies publish ./policy.mjs` تضرب إصدار (النشر لا ينشر أي شيء)، و `fp fleet deploy --add :observe` تضعها على جهاز في الظل. لاحقة `:observe` مطلوبة — `--add ` المجردة تنفذ فوراً. اقرأ ما كانت ستفعله مع `fp guardrails summary --since 24h`، ثم ارقَ مع `--add :enforce`.
+
+ لمحاولة مصدر سياسة معادل على جهازك الخاص أولاً، وجّه CLI المحلي للملف:
+
+ ```bash
+ failproofai policies -i -c ./checkout-policies.js
+ ```
+
+ ملف ينتهي اسمه بـ `policies.js` أو `policies.mjs` أو `policies.ts`، مُسقط في `.failproofai/policies/` في المشروع أو تحت `~/`، يتم تحميله عند كل حدث hook بدون أي أعلام على الإطلاق.
diff --git a/docs/ar/audits/local-audit.mdx b/docs/ar/audits/local-audit.mdx
index 882697fef..ac23fac8d 100644
--- a/docs/ar/audits/local-audit.mdx
+++ b/docs/ar/audits/local-audit.mdx
@@ -1,74 +1,57 @@
---
+---
title: "تدقيق سجل الوكيل المحلي"
-description: "امسح سجلات CLI للوكيل المدعومة دون الاتصال بالإنترنت وراجع السلوك المحفوف بالمخاطر أو الهدر محليًا."
+description: "مسح سجل الوكيل على هذا الجهاز بحثاً عن سلوك محفوف بالمخاطر أو مهدر."
icon: "laptop-minimal-check"
---
-استخدم التدقيق المحلي لمراجعة فورية وخاصة قبل توصيل جهاز بـ Failproof AI Cloud. يقوم بمسح سجلات الوكيل المخزنة بالفعل على جهازك، وتشغيل نشاط الأداة من خلال السياسات المدمجة، وفتح لوحة نتائج محلية.
-
-## تشغيل تدقيق تفاعلي
+يقرأ التدقيق المحلي سجل الوكيل الموجود بالفعل على هذا الجهاز ويفتح النتائج في `http://localhost:8020/audit`. لا يتطلب حساباً.
-
-
- يبدأ التدقيق المحلي من سطر الأوامر لأنه يجب أن يكتشف السجلات على الجهاز الحالي. قم بتشغيل `failproofai audit`؛ بعد المسح، يبدأ Failproof AI لوحة المعلومات المرفقة ويفتح **http://localhost:8020/audit**.
+```bash
+failproofai audit
+```
- في عرض التدقيق، راجع عدد الجلسات واستدعاءات الأداة والمشاريع والنتائج المتعلقة بالسياسة. ابدأ بالنتائج المتكررة، ثم افحص المشروع المتأثر وسجل الوكيل قبل تفعيل الإنفاذ.
+يغطي المسح السجل من جميع أجهزة التشغيل المدعومة التي يجدها. يعيد تشغيل كتالوج السياسات المدمج المكون من 39 سياسة في هذا الإصدار؛ لا يتم تضمين الحزم المثبتة والسياسات المخصصة.
- لوحة معلومات التدقيق المحلية منفصلة عن **Analyze → Audits** في Failproof AI Cloud. التدققيقات المحلية تبقى على الجهاز ولا تتطلب حسابًا أو اتصالاً بالشبكة.
-
-
- ```bash
- npm install -g failproofai
- failproofai audit
- ```
+## قراءة النتيجة
- الأمر يجري مسحًا كاملاً لكل سجل مدعوم يجده. الأمر الحالي لا يقبل عوامل تصفية مثل `--since` أو `--cli` أو `--project` أو `--port` أو `--no-open`.
+ابدأ بالنتائج الأكثر تكراراً، ثم افتح الجلسة المتأثرة قبل تفعيل الفرض.
- اترك العملية قيد التشغيل أثناء استخدام لوحة المعلومات المحلية. اضغط على Ctrl+C عند الانتهاء.
-
-
+ثلاثة حدود مهمة:
-محولات التدقيق الحالية يمكنها قراءة السجلات من Claude Code و Codex و GitHub Copilot CLI و Cursor و OpenCode و Pi و Hermes و OpenClaw و Factory و Devin و Antigravity و Goose. يتم مسح السجلات المتاحة محليًا فقط.
+- يعيد التدقيق بناء أحداث الأدوات، وليس `Stop`، لذلك سياسات `require-*-before-stop` لا تظهر.
+- ثمانية فحوصات "Audit-only" تحدد الأنماط المهدرة دون وجود سياسة مطابقة دقيقة.
+- يتم تخطي `warn-repeated-tool-calls` لأن إعادة تشغيله ستعدّل الحالة على جانب النسخ.
-## جدولة التدققيقات المحلية المتكررة
+للحصول على نتيجة قابلة للفرض، استخدم أمر السياسة الموضح في النتيجة. افحص [دعم فرض جهاز التشغيل](/ar/reference/harnesses#enforcement-capability) قبل الاعتماد عليه.
-
-
- افتح **Settings** في لوحة المعلومات المحلية، وفعّل التدققيقات المجدولة، واختر الفاصل الزمني، وعيّن عنوان البريد الإلكتروني الذي يجب أن يستقبل النتائج. تحدّث لوحة المعلومات وسطر الأوامر نفس إعدادات الجهاز.
-
-
- فعّل تدقيقًا أسبوعيًا وأرسل النتائج إلى العنوان المحدد:
+تعيش النتيجة المخزنة مؤقتاً في `~/.failproofai/audit/dashboard.json` وتنتهي صلاحيتها بعد سبعة أيام.
- ```bash
- failproofai audit --schedule 7 --email reliability@example.com
- failproofai audit --status
- ```
+## جدولة المسح
- يقبل الفاصل الزمني 1-90 يومًا ويعود إلى 7 عند إغفاله. يوقع عليك الإعداد الأول عند الحاجة؛ يوفر `--email` عنوان التقرير دون طلب.
+```bash
+failproofai audit --schedule 7
+failproofai audit --status
+failproofai audit --no-schedule
+```
- أوقف الجدول دون حذف سجل التدقيق المحلي:
+يقبل الفاصل الزمني 1–90 يوماً وافتراضياً 7. تتطلب الجدولة لأول مرة تسجيل دخول تفاعلي. يجب أن تكون خدمة الخلفية قيد التشغيل.
- ```bash
- failproofai audit --no-schedule
- ```
-
-
+### ما يترك الجهاز
-يشغّل الخادم عمليات المسح المجدولة في الخلفية، وينعش النتيجة المخزنة مؤقتًا المستخدمة من قبل لوحة المعلومات المحلية، ويرسل التقرير المُعد. استخدم `failproofai audit` عندما تريد تشغيل مسح تفاعلي فورًا.
+لا يرسل التدقيق التفاعلي أي نتائج. قياس المسافة البادئة المجهول لواجهة سطر الأوامر مفعّل بشكل افتراضي؛ عطّله باستخدام `FAILPROOFAI_TELEMETRY_DISABLED=1`.
-## الانتقال من الأدلة المحلية إلى عمليات Cloud
+بعد اختيارك للجدولة، يرسل كل مسح مجدول معرّف الجهاز والتسمية والنظام الأساسي ونافذة المسح. إذا تم العثور على أنماط ضارة، فإنه يرسل أيضاً ملخصاً محدوداً يتضمن العدد والطوابع الزمنية وحتى ثلاثة أمثلة معدلة. لا ترسل المسحات النظيفة أي نتائج وبلا بريد إلكتروني.
-التدقيق المحلي أساس سريع. وصّل الجهاز بـ Failproof AI Cloud عندما تحتاج إلى تتبعات مشتركة أو تدققيقات سكانية متكررة أو نتائج ومشاكل أو تنبيهات أو نشر السياسات على مستوى المنظمة أو صحة الأسطول.
+
+ نتائج التدقيق هي أدلة للمراجعة، وليست إثباتاً بأن كل إجراء مميز غير آمن. تحقق من الجلسة قبل تحويل النتيجة إلى فرض محظور.
+
-
- حدد هدفًا متكررًا وسكانًا ونافذة أدلة وقنوات الاستجابة.
+
+ قم بتشغيل التدقيقات المشتركة المتكررة عبر الوكلاء والأجهزة.
-
- تحقق محليًا وانشر بشكل مقصود وأطلق النشر على مجموعة جهاز ضيقة أولاً.
+
+ أضف السياسات المراجعة بعد تأكيد النتيجة.
-
-
-
- مخرجات التدقيق أدلة للمراجعة، وليست دليلاً على أن كل إجراء معلم غير آمن. أكد السياق قبل تحويل النتيجة إلى إنفاذ حجب.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/ar/audits/overview.mdx b/docs/ar/audits/overview.mdx
index 953324399..7dd9e5879 100644
--- a/docs/ar/audits/overview.mdx
+++ b/docs/ar/audits/overview.mdx
@@ -1,56 +1,64 @@
---
-title: "التدقيقات"
-description: "راجع مجموعة محددة من الجلسات للبحث عن الأخطاء التي لن تكشفها آثار البيانات وحدها."
+title: "التدقيق"
+description: "ابحث عن تشغيل الوكلاء للعثور على الإخفاقات المتكررة والسلوكيات المخاطرة والجهود المهدرة."
icon: "scan-search"
---
-يقوم التدقيق بالبحث في مجموعة مختارة من الجلسات عن هدف فشل محدد. يجمع بين أدلة التتبع ونتائج التقييم وضربات السياسة والسياق المرجعي لإنتاج نتائج يمكنك التصرف بناءً عليها.
+يقوم التدقيق بمراجعة عمليات تشغيل الوكيل العديدة مقابل هدف محدد ويعيد نتائج مدعومة بالأدلة.
-انظر كيف ينتقل التدقيق من تشغيل مجدول إلى أخطاء مدعومة بأدلة يمكنك إصلاحها.
+## محلي أو سحابي
-## فتح التدقيقات
+| | تدقيق محلي | تدقيق سحابي |
+| --- | --- | --- |
+| الأمر | `failproofai audit` | `fp audits` |
+| القراءة من | سجل الوكيل على هذا الجهاز | الجلسات في منظمتك السحابية |
+| ينتج | نتائج محلية على `localhost:8020/audit` | النتائج والمشاكل والتنبيهات المشتركة |
+| يتطلب | لا يوجد حساب | اتصال سحابي ومفتاح API |
-
-
- انتقل إلى **تحليل → التدقيقات**. تعرض الصفحة حالة الجدولة والنتائج المفتوحة والتشغيل الأخير والتشغيل التالي والتكرار وما إذا كان للتدقيق صفحات ملخص أو مرجعية. حدد بطاقة للإعدادات وسجل التشغيل؛ حدد **تدقيق جديد** لإنشاء واحد.
+استخدم التدقيق المحلي لمراجعة سريعة لجهاز واحد. استخدم السحابة عندما تحتاج فريق إلى تدقيق متكرر عبر الوكلاء والأجهزة.
- 
-
-
- ```bash
- fp audits list
- fp audits list --enabled-only --show-id
- fp audits show
- fp audits findings --status open --limit 20
- ```
-
-
+## الأسئلة التي يمكن للتدقيق الإجابة عليها
-استخدم التدقيق عندما تحتاج للإجابة على سؤال على مستوى المجموعة مثل:
+- أين يتوقف الوكلاء دون التصعيد؟
+- أي أعطال الأدوات تؤدي إلى إعادة محاولات غير فعالة؟
+- هل يقوم الوكلاء بالوصول إلى البيانات خارج سير العمل المقصود؟
+- ما الذي تغير بعد تحديث النموذج أو الموجه أو الأداة؟
-- أين يتخلى الوكلاء عن المهام دون تصعيد؟
-- أي أخطاء في الأدوات تؤدي إلى إعادة محاولات غير فعالة؟
-- هل يصل الوكلاء إلى البيانات خارج سير العمل المقصود؟
-- ما الذي تغير بعد إصدار نموذج أو موجه أو أداة؟
+## فتح تدقيقات السحابة
-## تدفق استجابة التدقيق
+انتقل إلى **Analyze → Audits**، أو استخدم:
+
+```bash
+fp audits list
+fp audits show
+fp audits findings --status open --limit 20
+```
+
+تستخدم أوامر التدقيق اسم التدقيق أو معرفه الكامل. تُستشهد بالنتائج من خلال معرفها الخاص.
+
+## من النتيجة إلى الوقاية
```text
Session → Audit → Finding → Issue → Policy
- ↘ Alert for recurrence
+ ↘ Alert
```
-يجب أن تسمي النتيجة نمط الفشل وتشير إلى الأدلة. تملك المشكلة الإصلاح. تمنع السياسة نمط إجراء معروف؛ تكتشف التنبيهات التكرار عندما لا يكون الحد من الأضرار ممكناً أو يحتاج إلى مراقبة.
+تشير النتيجة إلى الأدلة. تمتلك المشكلة الرد. تمنع السياسة نمط إجراء معروف؛ التنبيه يراقب تكرار الحدوث.
+
+لا يجب أن تصبح كل نتيجة سياسة. تصف نتيجة `policy` قاعدة قابلة للتطبيق. قد تحتاج `failure` أو `improvement` إلى سير عمل أو موجه أو نموذج أو تغيير أداة بدلاً من ذلك.
-
-
- حدد الهدف والمجموعة والسياق المرجعي قبل التشغيل الأول.
+
+
+ امسح السجل المحلي بدون حساب.
+
+
+ اختر الهدف والجلسات والجدول الزمني.
-
- اذكر ما يجب على كل وكيل إنتاجه وما يجب ألا يفعله أبداً.
+
+ فرز الأدلة وتعيين رد.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/ar/audits/recipes.mdx b/docs/ar/audits/recipes.mdx
index aba63e3e4..e7603ca06 100644
--- a/docs/ar/audits/recipes.mdx
+++ b/docs/ar/audits/recipes.mdx
@@ -1,54 +1,94 @@
---
+---
title: "وصفات التدقيق"
-description: "أهداف البداية للتحقيقات الشائعة لأعطال الوكيل."
+description: "أهداف ابتدائية للتحقيقات الشائعة لحالات فشل الوكيل."
icon: "book-open-check"
---
-استخدم هذه كأهداف بداية، ثم أضف وكيلك وبيئتك وسير العمل المتوقع.
+استخدم هذه كأهداف ابتدائية، ثم أضف وكيلك وبيئتك وسير العمل المتوقع.
- انتقل إلى **Analyze → Audits → New audit**، انسخ إحدى الوصفات في الوصف أو الملخص، ثم أضف البيئة والوكيل والفترة الزمنية ورابط المراجع ذات الصلة. أنشئ التدقيق وتفحص التشغيل الأول قبل جدولته.
+ انتقل إلى **Analyze → Audits → New audit**. سطر الوصفة من هذه الصفحة هو **الوصف** — ما تتوقع أن يكتشفه هذا التدقيق. قواعد سير العمل التي تجعل الهدف قابلاً للحكم عليه تذهب في **ملخصك**، في بطاقة **ما يعرفه**: خلفية يقرأها النموذج قبل أن ينظر إلى حدث واحد، محدود بـ 8,192 حرف، مضافة إلى ما يبحث عنه التدقيق بالفعل. الملخص ليس أبداً بديلاً للهدف وليس أبداً دليلاً على النتيجة.
- يحول نموذج التدقيق الجديد الوصفة إلى فحص فشل قابل للتنفيذ بإضافة النطاق والسياق والإيقاع والإخطارات.
+ بعد ذلك حدد النطاق في **ما يقرأه**، لأن نصف هذه الوصفات هي ضوضاء بدونه. البيئات والوكلاء يضيقان المجموعة؛ **الأخطاء المراد تجاهلها** تسرد أنواع الأخطاء التي تتوقعها وتتعامل معها بالتصميم، لذا تتوقف عن حساب الفشل. يأخذ أسماء أنواع الأخطاء فقط، وهو ما يمنع وصفة حلقة إعادة المحاولة من الفيضان.
- 
+ يحول نموذج التدقيق الجديد الوصفة إلى فحص فشل قابل للتنفيذ بإضافة النطاق والسياق والتكرار والإخطارات.
- بعد الإنشاء، تأكد من ظهور التدقيق في القائمة بالحالة والجدول الزمني المتوقع قبل الاعتماد على التشغيلات المتكررة.
+ 
- 
+ بعد الإنشاء، تأكد من ظهور التدقيق في القائمة بالحالة والجدول الزمني المتوقع قبل الاعتماد على الأشواط المتكررة.
- افتح التشغيل الأول وقم بتحسين الوصفة إذا كانت نتائجها أوسع أو أضيق من نمط الفشل المقصود.
+ افتح الشوط الأول وحسّن الوصفة إذا كانت نتائجها أوسع أو أضيق من وضع الفشل المقصود.
احفظ الوصفة كملف نصي وأرفقها أثناء الإنشاء:
```bash
fp audits create retry-loop-review \
+ --description "Find agents that repeat a failing tool call without changing anything" \
--scope '{"environments":["production"]}' \
+ --ignore-error-type RateLimitRetried \
--text-file ./retry-loop-audit.txt \
--schedule-interval-secs 86400
```
+
+ `--text` و`--text-file` هما طريقتان لإرسال نفس الملخص؛ مرّر واحد، وليس كليهما. أضف صفحات مرجعية باستخدام `--url`، حتى خمسة، `https://` عام فقط. أرسل كل شيء مع طلب الإنشاء: التدقيق الممكن الجديد يستحق فوراً، لذا قد يفتقد السياق المكتوب في استدعاء ثان الشوط الأول.
+## احكم على الوصفة، وليس فقط على الصيغة
+
+يحرك إعدادان النتيجة أكثر من الصيغة. **الحساسية** (`low`، `medium`، `high`، الافتراضي `medium`) تحدد مدى رغبة الشوط في تحديد نمط؛ **النتائج لكل شوط** (`--top-k`، الافتراضي 50) يحد من عدد ما يحتفظ به. ارفع الحساسية لسؤال حيث يكلف الخطأ أكثر من الإيجابية الخاطئة، واخفضها لنمط الحجم الذي سيملأ الطابور بطريقة أخرى. كل وصفة أدناه تسمي نقطة انطلاق — غيرها بعد قراءة الشوط الأول، وليس قبله.
+
+التخلي عن المهمة والتصعيد البشري المفقود هما أحكام ضد ما كان يجب أن يفعله الوكيل، وليس ضد خطأ أثاره. اكتب أولاً [سياق الوكيل](/ar/audits/agent-contracts) لهذا الوكيل، أو لن يكون للتحليل معيار للحكم بناءً عليه.
+
-
- ابحث عن الجلسات التي يكرر فيها الوكيل نفس استدعاء الأداة الفاشلة دون تغيير الإدخال أو اختيار أداة بديلة أو التصعيد إلى شخص ما.
+
+ ابحث عن جلسات حيث يكرر الوكيل استدعاء الأداة الفاشلة ذاتها بدون تغيير الإدخال، أو اختيار أداة بديلة، أو التصعيد إلى إنسان.
+
+ ابدأ بـ `medium`، وأدرج أنواع الأخطاء التي تعيد محاولتها بهدف تحت **الأخطاء المراد تجاهلها**.
-
- ابحث عن الجلسات التي لا تطابق فيها الأداة المختارة المهمة المذكورة، أو حيث يخالف إدخال الأداة الشروط المسبقة المطلوبة لسير العمل.
+
+ ابحث عن جلسات حيث الأداة المختارة لا تتطابق مع المهمة المذكورة، أو حيث إدخال الأداة ينتهك الشروط المسبقة المطلوبة لسير العمل.
+
+ ابدأ بـ `medium`. ضع الشروط المسبقة نفسها في الملخص؛ بدونها ليس للتحليل قاعدة للتحقق منها.
-
- ابحث عن الجلسات التي تقرأ أو تكتب أو تنقل بيانات حساسة خارج المسارات والخدمات المعتمدة لهذا الوكيل.
+
+ ابحث عن جلسات تقرأ أو تكتب أو تنقل بيانات حساسة خارج المسارات والخدمات المعتمدة لهذا الوكيل.
+
+ ابدأ بـ `high`. الخطأ المفقود يكلف أكثر من إيجابية خاطئة ترفضها مرة واحدة.
- ابحث عن الجلسات التي تنتهي بدون النتيجة المطلوبة أو خطأ واضح أو تسليم صريح لشخص ما.
+ ابحث عن جلسات تنتهي بدون النتيجة المطلوبة، أو خطأ واضح، أو تسليم صريح إلى إنسان.
+
+ ابدأ بـ `medium`، واكتب قسم **تمام عندما** للوكيل أولاً — هذه الوصفة هي حكم ضده.
-
- ابحث عن الجلسات التي تتجاوز فيها مدة النموذج أو الأداة أو الإجمالية الميزانية المتوقعة، وحدد نمط الحدث المسؤول.
+
+ ابحث عن جلسات يتجاوز فيها النموذج أو الأداة أو المدة الإجمالية الميزانية المتوقعة، وحدد نمط الحدث المسؤول.
+
+ ابدأ بـ `low` وارفعها إذا كان الشوط الأول رقيقاً. الميزانيات تنتمي للملخص، وأي نوع خطأ يثيره مسار بطيء بالتصميم ينتمي **للأخطاء المراد تجاهلها**.
-
- ابحث عن الجلسات التي تطلبت فيها الثقة أو الفشل المتكرر أو التوجيه السياساتي قرار بشري لكن الوكيل استمر بشكل مستقل.
+
+ ابحث عن جلسات حيث الثقة، أو الفشل المتكرر، أو إرشادات السياسة تتطلب قرار بشري لكن الوكيل استمر بشكل مستقل.
+
+ ابدأ بـ `high`، وحدد قاعدة التصعيد في قسم **يجب ألا** للوكيل لذا يصنف التحليل بناءً عليه.
-
\ No newline at end of file
+
+
+## احصل على إجابة أولى قبل إنشاء أي شيء
+
+عدة من هذه الأنماط لديها بالفعل كواشف دون اتصال في التدقيق المحلي، الذي يقرأ سجلات الوكيل على آلتك الخاصة ولا يحتاج إلى حساب:
+
+| الكاشف | النمط الذي يحسبه |
+| --- | --- |
+| `sleep-polling-loop` | `sleep` طويلة، أو حلقة استقصاء `while … sleep … done` |
+| `reread-after-edit` | قراءة ملف عدّله الوكيل للتو أو كتبه |
+| `find-from-root` | `find` ضد `/` أو دليل عالي المستوى آخر |
+| `redundant-cd-cwd` | `cd` في الدليل الذي يكون فيه الصدفة بالفعل |
+| `prefer-edit-over-read-cat` | `cat`، `head`، `tail`، `less`، أو `more` على ملف مصدر واحد |
+| `prefer-edit-over-sed-awk` | تحريرات موضعية عبر `sed -i` أو `awk … > file` |
+| `prefer-write-over-heredoc` | محتوى متعدد الأسطر مكتوب عبر heredoc أو `echo > file` |
+| `git-commit-no-verify` | `git commit --no-verify`، تخطي الخطاطيف |
+
+هذه الكواشف تحسب؛ لا تحجب، وليس أحدها يقيس التكلفة أو الكمون. شغّل `failproofai audit` لترى أي أنماط صدفة مسرفة وخطرة ينتجها وكلاؤك بالفعل قبل أن تدفع لتدقيق Cloud على نفس الأساس — انظر [التدقيق المحلي لسجل الوكيل](/ar/audits/local-audit).
\ No newline at end of file
diff --git a/docs/ar/audits/run.mdx b/docs/ar/audits/run.mdx
index bc0253a86..8e55c2f56 100644
--- a/docs/ar/audits/run.mdx
+++ b/docs/ar/audits/run.mdx
@@ -1,24 +1,23 @@
---
----
-title: "تشغيل المراجعة والتحقق منها"
-description: "قم بتشغيل المراجعة والتحقق من نطاقها وفحص النتائج الناتجة."
+title: "تشغيل ومراجعة التدقيق"
+description: "قم بتشغيل التدقيق والتحقق من نطاق تغطيته وفحص النتائج الناتجة."
icon: "play"
---
-قم بتشغيل المراجعة بعد أن تصبح أهدافها والمجموعة السكانية محددة بدرجة كافية بحيث يعرف مشغل آخر ما يبدو عليه الاكتشاف الصحيح.
+قم بتشغيل التدقيق بعد أن يصبح الهدف والمجموعة المستهدفة محددة بدرجة كافية بحيث يعرف أي مشغل آخر كيف تبدو النتيجة الصحيحة.
-## تشغيلها والتحقق منها
+## تشغيل وفحص التدقيق
-
- 1. انتقل إلى **تحليل → المراجعات**، افتح المراجعة، وحدد **تشغيل الآن**. ستعني الاستجابة المصفوفة أن بواسطة الموزع سيبدأها قريباً.
- 2. افتح التشغيل الجديد لمراجعة حالته والنافذة الزمنية والمدة وعدد النتائج والتقرير.
+
+ 1. انتقل إلى **Analyze → Audits** وافتح التدقيق ثم حدد **run now**. تعني الرسالة المصفوفة أن المُرسِل سيبدأ التشغيل قريباً.
+ 2. افتح التشغيل الجديد لمراجعة حالته والنافذة ومدته وعدد النتائج والتقرير.
3. حدد جلسة الأدلة لفتح التتبع الدقيق.
- 4. عد إلى صفحة المراجعة لتحرير الإعدادات أو تعطيل الجدول أو فحص التشغيلات القديمة.
+ 4. عُد إلى صفحة التدقيق لتعديل الإعدادات أو تعطيل الجدول أو فحص التشغيلات الأقدم.
- 
+ 
-
+
```bash
fp audits run checkout-reliability
fp audits runs checkout-reliability --limit 10
@@ -26,41 +25,82 @@ icon: "play"
fp audits findings --audit checkout-reliability
```
- انظر إلى [مرجع `fp audits`](/ar/reference/cloud-cli#audits) لسجل التشغيل والنتائج وأوامر التصنيف.
+ `fp audits run` يصف التدقيق في قائمة الانتظار؛ لا ينتظر اكتماله. تابعه بـ `fp audits runs ` واقرأ النتائج بعد انتهاء التشغيل. لا تعيد `--limit` أكثر من 50 تشغيل أخير مهما طلبت.
+
+ يعمل الفرز على معرّف النتيجة وليس على التدقيق:
+
+ ```bash
+ fp audits finding
+ fp audits ack --reason "owner assigned"
+ fp audits assign --to engineer@example.com
+ fp audits mute --reason "expected in staging" --yes
+ fp audits dismiss --reason "false positive" --yes
+ fp audits resolve --yes
+ fp audits reopen
+ ```
+
+ `mute` و `dismiss` و `resolve` تؤكد قبل التنفيذ، لذا مرّر `--yes` في السكريبتات. `ack` و `assign` و `reopen` تعمل فوراً.
+
+ راجع مرجع [`fp audits`](/ar/reference/cloud-cli#audits) لأوامر سجل التشغيل والنتائج والفرز.
+قد يتم رفض **run now**. التشغيل الذي يعمل بالفعل والتدقيق المعطّل كلاهما يرد `409`، مع السبب في حقل `error` في الاستجابة؛ التدقيق الذي لا يوجد أو التابع لمنظمة أخرى يرد `404`.
+
+| السبب | المعنى | الحل |
+| --- | --- | --- |
+| التدقيق غير معروف | التدقيق غير موجود أو يتبع منظمة أخرى. | أكد الاسم باستخدام `fp audits list`. |
+| التدقيق معطّل | للتدقيق المعطّل لا توجد صفوف في قائمة الانتظار. التدقيق المتوقف مؤقتاً يعرض تحكماً في **run now**. | استأنفه أولاً أو استخدم `fp audits edit --enabled --yes`. |
+| تشغيل قيد التنفيذ بالفعل | تشغيل واحد في كل مرة لكل تدقيق؛ يجب أن ينتهي التشغيل الحالي قبل وضع آخر في قائمة الانتظار. | تحقق منه باستخدام `fp audits runs `. |
+
## قبل التشغيل
- تأكد من وجود جلسات في نافذة الوقت المحددة.
- تحقق من مرشحات البيئة والوكيل.
-- تحقق من أن السياق المرجعي حالي.
-- تأكد من أن الهدف يصف نمط فشل وليس استنتاج مطلوب.
+- تحقق من تحديث سياق المرجع. كل تشغيل يعيد قراءة صفحات التدقيق ويعود إلى النسخة المخزنة عندما لا يتمكن من الوصول إلى إحداها، لذا تستمر الصفحة المنقولة أو المحذوفة في تقديم نص قديم حتى تصلح عنوان URL.
+- تأكد من أن الهدف يصف نمط فشل وليس استنتاجاً مرغوباً.
## مراجعة التشغيل
-ابدأ بحالة التشغيل وتغطية الجلسة وما إذا كان تحليل النموذج قد تم تشغيله. ثم افحص شدة كل نتيجة ووصفها وجلسات الأدلة والاستعلامات الداعمة والمسار الموصى به للوقاية.
+تفتح صفحة تفاصيل التدقيق بخمس بطاقات: **النتائج المفتوحة** في انتظار الفرز و **آخر تشغيل** و **التشغيل التالي** و **النافذة** (إلى متى يعود كل تشغيل) و **الحساسية** (مدى سرعة الفحص عن النمط: `low` أو `medium` أو `high`). حد النتائج على الأكثر N في التشغيل هو إعداد منفصل، نتائج لكل تشغيل (`--top-k`، الافتراضي 50). تجيب هذه الخمس على سؤال التغطية بسرعة أكبر من فتح التشغيل.
+
+ثم افحص شدة كل نتيجة ووصفها وجلسات الأدلة والاستعلامات الداعمة ومسار الوقاية المقترح. يتم ترتيب النتائج بنقاط **الأولوية** بين 0 و 1، ومصنفة لكل تشغيل، وكل نتيجة تعرض العوامل الأربعة الموزونة:
+
+| عامل التصنيف | الوزن |
+| --- | --- |
+| التغطية | 0.30 |
+| الحجم | 0.25 |
+| الشدة | 0.25 |
+| الحداثة | 0.20 |
-استخدم حالة النتيجة للإقرار أو الكتم أو الرفض أو الحل أو إعادة الفتح أو تعيين العمل. احفظ الأدلة حتى عند رفض النتيجة؛ فهي توضح سبب اتخاذ القرار.
+النتيجة في إحدى الحالات الخمس بالضبط: `open` أو `recurring` أو `resolved` أو `dismissed` أو `muted`. استعلام `findings` بدون تصفية الحالة يعيد المجموعة المباشرة — `open` بالإضافة إلى `recurring`. النتيجة التي تكتمها أو تغضّ الطرف عنها أو تحلّها تترك تلك المجموعة؛ `ack` و `assign` لا يغيران الحالة، لذا تبقى النتيجة في قائمة الانتظار — مخفضة الأولوية أو مملوكة وليست محذوفة. اطلب حالة صراحة لترى الحالات التي غادرت.
+
+استخدم حالة النتيجة للإقرار أو الكتم أو الغض أو الحل أو إعادة الفتح أو تعيين العمل. احتفظ بالأدلة حتى عندما يتم غض الطرف عن النتيجة؛ فهي تشرح السبب. يغطي [النتائج والمشاكل](/ar/audits/findings-and-issues) ما يفعله كل فعل بالتشغيلات المستقبلية.
## تفسير التشغيل الفارغ أو المتأخر
-| حالة التشغيل | ما تعنيه | ما يجب فعله |
+| حالة التشغيل | المعنى | الحل |
| --- | --- | --- |
-| تم تشغيل التحليل وأنتج صفر نتائج | الأدلة المختارة لم تدعم نتيجة في الحساسية المكونة. | تأكد من أن النطاق يحتوي على جلسات تمثيلية، ثم اعتبر النتيجة سليمة ما لم يكن الهدف أو السياق غير واضح جداً. |
-| تم تخطي تحليل النموذج أو فشل | يكتمل التشغيل بصفر نتائج، لكنه لم يقم بالتحقيق الوكيل. المسح الحتمي للبيانات الاعتماد والمعلومات الشخصية لا يزال يبلغ عن عدد التطابقات في إحصائيات التشغيل ولكنه لا ينشئ نتائج. | أصلح خدمة التحليل أو الإعدادات وأعد التشغيل. لا تفسر النتيجة الفارغة كدليل على أن المجموعة السكانية سليمة. |
-| تحليل النموذج معطل | يكتمل التشغيل بنجاح مع صفر نتائج. المسح الحتمي لا يحل محل تحليل النموذج ولا يفتح نتائج. | فعّل تحليل النموذج أو عطّل المراجعة بدلاً من الاعتماد على مراجعة لا يمكنها إنتاج نتائج. |
-| لا توجد سعة تحليل متاحة فوراً | تبقى المراجعة في طابور الانتظار وتعيد المحاولة بدلاً من تخطي المجموعة السكانية. | انتظر السعة أو وزع نقاط اثبات المراجعة. يجب على المشغلين ذاتي الاستضافة توسيع نطاق نسخ وكيل المراجعة والسعة المطابقة للموزع. |
-| السعة تبقى غير متاحة لنافذة إعادة المحاولة | يستسلم التشغيل مع صفر نتائج ويرسل إخطار فشل عند توفر تسليم البريد الإلكتروني. | تحقق مما إذا كانت أسطول المراجعة مشبعاً أو يعيد تشغيله بشكل متكرر. |
+| انتهى التحليل وأسفر عن صفر نتيجة | الأدلة المحددة لم تدعم النتيجة عند حساسية التكوين. | تأكد من أن النطاق يحتوي على جلسات تمثيلية، ثم اعتبر النتيجة صحيحة ما لم يكن الهدف أو السياق غامضاً جداً. |
+| تم تخطي تحليل النموذج أو فشل | التشغيل ينتهي بصفر نتيجة لكنه لم يجرِ التحقيق المستند إلى الوكيل. المسح الحتمي بدون بيانات اعتماد وPII لا يزال يبلغ عن تطابقات في إحصائيات التشغيل لكنه لا ينشئ نتائج. | أصلح خدمة التحليل أو التكوين وأعد التشغيل. لا تفسّر النتيجة الفارغة على أنها دليل على أن المجموعة صحيحة. |
+| تحليل النموذج معطّل | التشغيل ينجح بصفر نتيجة. المسح الحتمي لا يحل محل تحليل النموذج ولا ينفتح على نتائج. | فعّل تحليل النموذج أو عطّل التدقيق بدلاً من الاعتماد على تدقيق لا يستطيع إنتاج نتائج. |
+| لا توجد سعة تحليل متاحة فوراً | التدقيق يبقى في قائمة الانتظار ويعيد المحاولة بدلاً من تخطي المجموعة. | انتظر السعة أو انشر نقاط تثبيت التدقيق. يجب على مشغلي الخوادم المحلية توسيع نسخ الوكيل وسعة المُرسِل المطابقة. |
+| تبقى السعة غير متاحة لنافذة إعادة المحاولة | التشغيل يستسلم بصفر نتيجة ويرسل إشعار فشل عند توفر تسليم البريد الإلكتروني. | تحقق مما إذا كان أسطول التدقيق مشبعاً أو يعيد التشغيل بشكل متكرر. |
+
+الصفوف الثلاث الأخيرة تصف سلوك خادم Cloud API وموزّعه. على Cloud المُدار هذا من مسؤولية Failproof AI؛ على نشر محلي الخوادم فهو من مسؤوليتك.
+
+عندما لا يعمل التحليل، تحافظ عمليات التدقيق `since_last` على النافذة غير المحللة مفتوحة للتشغيل الناجح التالي. لا يتم سحب النتائج الموجودة لأن التحليل المتخطى ليس دليلاً على اختفاء الفشل.
+
+## فهم الإشعارات
-عندما لا يتم تشغيل التحليل، تحافظ مراجعات `since_last` على تلك النافذة غير المحللة مفتوحة للتشغيل الناجح التالي. لا يتم إزالة النتائج الموجودة لأن التحليل المتخطى ليس دليلاً على اختفاء الفشل.
+التشغيل الناجح يبلغ فقط عندما يجد شيئاً **جديداً**. الصمت من تدقيق صحي هو الحالة الطبيعية وليس علامة على أن لا شيء عمل — تحقق من **آخر تشغيل** على صفحة التدقيق أو استخدم `fp audits runs ` لترى أنه عمل. التدقيق الذي لا توجد قنوات مختارة له يحفظ النتائج ولا يبلغ أحداً.
-## فهم إخطارات الفشل
+التشغيل الفاشل أو خطوة تحليل النموذج الفاشلة تستخدم متلقي البريد الإلكتروني للتدقيق. إذا لم يكن للتدقيق قناة بريد إلكتروني، يعود Failproof AI إلى إعداد `alerts.email_default_recipients` للمنظمة لذا حتى التدقيق المعطّل بصمت له مسار تصعيد.
-يستخدم التشغيل الفاشل أو خطوة تحليل النموذج الفاشلة مستقبلي البريد الإلكتروني للمراجعة. إذا لم تكن للمراجعة قناة بريد إلكتروني، فإن Failproof AI ترجع إلى إعداد `alerts.email_default_recipients` للمنظمة بحيث تظل المراجعة المكسورة بصمت لديها مسار تصعيد. يجب تمكين البريد الإلكتروني للمنظمة وتكوين SMTP. وإلا فسيتم تسجيل الفشل ولكن لا يمكن إرسال بريد إلكتروني. فشل التشغيل لا يحرك نقطة الجدول الثابتة للمراجعة.
+يجب تفعيل البريد الإلكتروني للمنظمة وتكوين SMTP. وإلا فسيتم تسجيل الخطأ لكن لا يمكن تسليم أي بريد إلكتروني. فشل التشغيل لا يحرك رابط الجدول الثابت للتدقيق.
-كل تشغيل يخزن أيضاً السياق الدقيق [للوكيل](/ar/audits/agent-contracts) المستخدم لكل وكيل كلقطة عقد. لا تغير التعديلات اللاحقة معيار الأدلة المسجل مع تشغيل سابق.
+كل تشغيل أيضاً يحفظ [السياق الدقيق للوكيل](/ar/audits/agent-contracts) المستخدم لكل وكيل كلقطة عقد. التعديلات اللاحقة لا تغير معيار الأدلة المسجل مع التشغيل الأقدم.
- لا تقم بنشر سياسة حجب مباشرة من نتيجة غير مؤكدة. افتح الآثار المذكورة وتأكد من أن القاعدة تفصل السلوك غير الآمن عن العمل المشروع.
+ لا تنشر سياسة حجب مباشرة من نتيجة غير تم التحقق منها. افتح الآثار المذكورة وتأكد من أن القاعدة تفصل بين السلوك غير الآمن والعمل المشروع.
\ No newline at end of file
diff --git a/docs/ar/audits/setup.mdx b/docs/ar/audits/setup.mdx
index ef014effa..e274e1ffb 100644
--- a/docs/ar/audits/setup.mdx
+++ b/docs/ar/audits/setup.mdx
@@ -1,24 +1,26 @@
---
----
title: "إعداد تدقيق"
-description: "تحديد هدف التدقيق، وملء الجلسة، وسياق الأدلة."
+description: "تحديد هدف التدقيق وملء الجلسة وسياق الأدلة."
icon: "sliders-horizontal"
---
-تبدأ جودة التدقيق من نطاقه. الطلب الواسع مثل "ابحث عن المشاكل" ينتج نتائج أقل فائدة من سؤال فشل محدد.
+تبدأ جودة التدقيق من نطاقه. طلب عام مثل "ابحث عن المشاكل" ينتج نتائج أقل فائدة من سؤال فشل محدد وملموس.
## تكوين التدقيق
- 1. انتقل إلى **تحليل → التدقيقات → تدقيق جديد** وأدخل الاسم والوصف.
- 2. عيّن التكرار، نافذة الوقت، نطاق الوكيل/البيئة، الأخطاء المتجاهلة، الحساسية، والحد الأقصى للنتائج.
- 3. في **الوكلاء**، أضف أو راجع سياق الوكيل، ثم أضف إيجاز المشغل وأي عناوين URL مرجعية HTTPS عامة.
- 4. اختر قنوات الإشعارات وحدد **إنشاء تدقيق**. يتم إدراج التشغيل الأول على الفور.
+ 1. انتقل إلى **Analyze → Audits → New audit** وأدخل الاسم والوصف. الاسم فريد لكل منظمة؛ الوصف يسجل ما تتوقع أن يكتشفه هذا التدقيق.
+ 2. في **when it runs**، حدد التكرار والنافذة الزمنية. في **what it reads**، ضيّق السكان باستخدام البيئات والوكلاء وأنواع الأخطاء المراد تجاهلها — حقل فارغ يتضمن كل شيء. في **how it judges**، حدد الحساسية وعدد النتائج لكل تشغيل.
+ 3. في **what it knows**، اكتب موجز المشغل وأضف الصفحات التي يقرأها التدقيق. الموجز هو خلفية يقرأها النموذج قبل فحص أي حدث واحد: يُضاف إلى ما يبحث عنه هذا التدقيق بالفعل، وليس أبداً بديلاً، وليس أبداً دليلاً على نتيجة.
+ 4. افتح درج **agents** لإضافة أو مراجعة سياق كل وكيل. يحفظ بشكل مستقل عن التدقيق، والرأس الخاص به يحسب عدد وكلائك الذين لديهم واحد بالفعل. انظر [agent context](/ar/audits/agent-contracts).
+ 5. اختر قنوات الإشعارات واختر **create audit**. يبدأ التدقيق الجديد مفعّلاً، وتم جدولة التشغيل الأول له فوراً.
+
+ 
- 
+ **agents** في بطاقة **what it reads** هو مرشح نطاق — يحدد الجلسات التي يمسحها كل تشغيل. ما يقوم به الوكيل *من أجله* يعيش في درج الوكلاء المنفصل.
-
+
```bash
fp audits create checkout-reliability \
--description "Find checkout failures that agents do not recover from" \
@@ -30,16 +32,44 @@ icon: "sliders-horizontal"
--url https://runbooks.example.com/checkout
```
- يتم إدراج التشغيل الأول على الفور. أدرج الإيجاز وعناوين URL المرجعية أثناء الإنشاء بحيث يتلقاها التشغيل.
+ لكل حقل ما عدا الاسم قيمة افتراضية على الخادم، لذا `fp audits create nightly` البسيط هو بالفعل تدقيق يومي صحيح. يتم رفض الاسم المأخوذ مقدماً، قبل إنشاء أي شيء. تبدأ التدقيقات الجديدة مفعّلة إلا إذا مررت `--disabled`، ويتم جدولة التشغيل الأول للتدقيق المفعّل فوراً.
+
+ استند إلى تعريف مُحفوظ باستخدام JSON مع `--file audit.json` وطبّق الأعلام فوقه. هذا هو المسار القابل للتكرار عندما تتم مراجعة تعريفات التدقيق أو الاحتفاظ بها في التحكم في الإصدار.
انظر المرجع الكامل [`fp audits create`](/ar/reference/cloud-cli#audits).
+## النطاقات والقيم الافتراضية
+
+تتم التحقق من صحة الإعدادات الرقمية على كلا الجانبين، لذا تكون القيمة خارج النطاق خطأ استخدام وليس طلب مرفوض.
+
+| الإعداد | علم CLI | القيم المقبولة | القيمة الافتراضية |
+| --- | --- | --- | --- |
+| التكرار | `--schedule-interval-secs` | 3600–604800 (ساعة واحدة إلى 7 أيام) | 86400 (يومي) |
+| نقطة ربط الجدولة | `--schedule-anchor` | ISO 8601 UTC؛ يتم رفض نقطة ربط أبعد من 365 يوماً | الساعة 09:00 UTC التالية |
+| النافذة الزمنية | `--window-mode` | `fixed`, `since_last` | `since_last` |
+| النظر للخلف | `--lookback-window-secs` | 3600–7776000 (ساعة واحدة إلى 90 يوماً) | 604800 (7 أيام) |
+| الحساسية | `--sensitivity` | `low`, `medium`, `high` | `medium` |
+| النتائج لكل تشغيل | `--top-k` | 1 أو أكثر | 50 |
+
+تحدد نقطة الربط مرحلة الجدولة: تهبط التشغيلات على `anchor + N * interval`، لذا لا يمكن للتشغيل البطيء أو **run now** اليدوي أن يجرف التكرار. يتم جدولة التشغيل الأول فوراً عند الإنشاء بغض النظر عن نقطة الربط.
+
+## الموجز والصفحات المرجعية
+
+يُظهر النموذج كلا الحدين كعدادات، والـ CLI يفرض نفس الحدين:
+
+- الموجز محدود بـ 8192 حرفاً (`--text`، أو `--text-file` لقراءته من ملف — مرّر أحدهما أو الآخر، وليس كليهما).
+- يشير التدقيق إلى خمس صفحات على الأكثر، عام `https://` فقط (`--url`، مكرر).
+
+تتم التحقق من صحة عناوين URL المرجعية أثناء الحفظ. يتم رفض العناوين الخاصة والحلقية وعناوين بيانات السحابة، ويفشل عنوان URL المرفوض الإنشاء بالكامل — لم يتم ترك تدقيق نصف مصنوع. يتم جلب الصفحات المقبولة في الخلفية، لذا لن يوقف الموقع البطيء الحفظ. يعيد كل تشغيل قراءتها ويعود إلى اللقطة المخزنة عندما لا يمكن الوصول إلى واحدة، واللقطات تنعش بمفردها كل أسبوع. استخدم `fp audits context-refresh ` عندما تعرف أن صفحة تغيرت وتريد التقاطها قبل التشغيل التالي.
+
+أرسل الموجز والعناوين مع طلب الإنشاء بدلاً من مكالمة ثانية. يستحق التدقيق الجديد المفعّل في اللحظة التي يتعهد بها صفه، لذا يمكن للسياق المكتوب لاحقاً أن يتفوق عليه المرسل ويفوت التشغيل الأول — التشغيل الذي تراقبه. غيّره لاحقاً مع `fp audits context-set `، الذي يستبدل أيهما تسميه ويترك الآخر وحده.
+
- ابدأ بجلسة فاشلة معروفة وعدة جلسات عادية. وهذا يعطي التدقيق مثالاً إيجابياً ومجموعة مقارنة.
+ ابدأ بجلسة فاشلة معروفة وعدة جلسات عادية. هذا يعطي التدقيق مثالاً إيجابياً ومجموعة مقارنة.
- يتم تخزين سياق التدقيق كمورد منفصل بحيث لا يؤدي تحرير التدقيق إلى إزالة المادة المرجعية بشكل عرضي.
+ يتم تخزين سياق التدقيق كمورد خاص به. نقطة نهاية التعريف ترفض كتابته عند التحديث، لذا لن يؤدي تحرير عادي غير مرتبط للتدقيق إلى الكتابة فوق الموجز أو الصفحات المرجعية.
\ No newline at end of file
diff --git a/docs/ar/index.mdx b/docs/ar/index.mdx
index 0887d98c1..74af08b02 100644
--- a/docs/ar/index.mdx
+++ b/docs/ar/index.mdx
@@ -1,42 +1,58 @@
---
----
-title: "اجعل وكيلك آمنًا تماماً"
-description: "قابلية الملاحظة والتطبيق لكل بيئة تشغيل يعمل فيها وكيلك — واجهات سطر الأوامر للترميز، بوابات الدردشة، المساعدات المستضافة ذاتياً، والوكلاء المزودين بأدوات المراقبة الخاصة بك."
+title: "اجعل وكيلك failproof"
+description: "شاهد ما يفعله وكلاؤك، وجد الأخطاء، ووقفها من الحدوث مرة أخرى."
icon: "shield-check"
---
-Failproof AI يساعد الفرق على فهم ما فعله الوكلاء، والعثور على أماكن فشلهم، ونشر الحماية قبل حدوث نفس السلوك مرة أخرى.
+Failproof AI يساعد أي شخص يقوم بتشغيل الوكلاء على فهم ما حدث، والعثور على الأخطاء، ومنع تكرارها.
+
+يعمل مع 12 بيئة وكيل شائعة، بما في ذلك Claude Code و Codex و Hermes و OpenClaw و Goose. يمكن للوكلاء المبنيين باستخدام LangChain أو CrewAI أو LlamaIndex أو Pydantic AI أو وقتك الخاص الإبلاغ من خلال [Python SDK](/ar/reference/custom-agents).
+
+
+
+ ثبّت Failproof AI، وصل وكلاءك، واختر ما تريد فرضه.
+
+
+ ابحث عن الجلسات، وحقق في الأخطاء، وابنِ لوحات معلومات باللغة الطبيعية.
+
+
-**البيئة التشغيلية** هي أي شيء يعمل فيه وكيلك بالفعل. Failproof AI يربط 12 منها — واجهات سطر أوامر للترميز مثل Claude Code و Codex، وبوابات دردشة مثل Hermes، ومساعدات مستضافة ذاتياً مثل OpenClaw — وتنطبق نفس الأحداث والسياسات وسجل الجلسات على كل واحدة منها. الوكلاء الذين ليس لديهم بيئة تشغيلية يقدمون تقارير من خلال [Python SDK](/ar/reference/custom-agents)، الذي يتتبعهم ويقومون بتدقيقهم؛ تطبيق سياسة هناك يتطلب خطاف في وقت التشغيل الخاص بك.
+## ابدأ محليًا أو اتصل بـ Cloud
-
- استخدم المهارة لأتمتة مشروعك وتوصيله والتحقق من وصول سجلات الوكيل.
+
+ افتح لوحة المعلومات على `localhost:8020` وقم بتشغيل `failproofai audit`. يبقى سجل وكيلك على هذه الآلة.
-
- حلل واستعلم وقم ببناء لوحات معلومات وتشغيل عمليات التدقيق باللغة الطبيعية على سجلات وكيلك.
+
+ شاهد الجلسات عبر الآلات وأدر السياسات لفريقك.
+يختار الإعداد عن قصد عدم وجود حزمة سياسة. أضف حزمتنا بعد الإعداد:
+
+```bash
+failproofai policies add FailproofAI/policies
+```
+
+حتى ذلك الحين، فقط `block-failproofai-commands` يعمل. إنه يوقف الوكيل من تعطيل Failproof AI.
+
+## ما الذي يمكنك فعله
+
-
- تابع استدعاءات النموذج والأدوات والأخطاء والمدخلات البشرية والكمون وقرارات السياسة في جلسة واحدة.
+
+ تابع تشغيل الوكيل من خلال استدعاءات النموذج والأدوات والأخطاء وقرارات السياسة.
-
- قم بتدقيق مجموعة محددة من الجلسات وراجع النتائج المدعومة بالأدلة وتابع الإصلاح كمشاكل.
+
+ راجع الأدلة عبر تشغيل واحد أو أكثر.
- حول وضع فشل معروف إلى سياسة وراقب تأثيره ونشره عبر أسطولك.
+ لاحظ حماية على النشاط الفعلي، ثم فرضها عندما تكون جاهزًا.
-> **جلسة → تدقيق → نتيجة → مشكلة → سياسة**
-> تتبع ما حدث، أوجد الفشل، أدر الاستجابة، ثم منع نفس السلوك في التشغيلات المستقبلية.
-
-## ابدأ من هنا
-
-إذا كنت تنشر وكيلك المزود بأدوات المراقبة للمرة الأولى، فابدأ بـ [البدء السريع](/ar/start/quickstart). إذا كانت البيانات تصل بالفعل، فافتح [الجلسات](/ar/sessions/overview) وتفحص تشغيلاً حقيقياً قبل تكوين عمليات التدقيق أو السياسات.
+> **Session → Audit → Finding → Issue → Policy**
+> شاهد ما حدث، وجد الخطأ، وتحمل المسؤولية عن الرد، ثم منعه.
-
- أكمل سير العمل من الطرف إلى الطرف الآخر من المراقبة إلى سياسة آمنة ومنشورة.
-
\ No newline at end of file
+
+ الإعداد يدعم Linux و macOS. راجع [harnesses المدعومة](/ar/reference/harnesses) لمعرفة ما يمكن لكل بيئة وكيل مراقبته أو حظره.
+
\ No newline at end of file
diff --git a/docs/ar/policies/builtin-catalog.mdx b/docs/ar/policies/builtin-catalog.mdx
index afda0631f..9ca7c095e 100644
--- a/docs/ar/policies/builtin-catalog.mdx
+++ b/docs/ar/policies/builtin-catalog.mdx
@@ -1,106 +1,147 @@
---
+---
title: "كتالوج السياسات المدمجة"
-description: "اطّلع على كل سياسة مدمجة من سياسات Failproof AI، وحافزها، والحالة الموصى بها، والمعاملات القابلة للتكوين."
+description: "استعرض كل سياسة من سياسات Failproof AI المدمجة، مع محفزاتها وحالتها الافتراضية والمعاملات القابلة للتكوين."
icon: "list-checks"
---
-الحزمة المثبتة هي مصدر الحقيقة لتوفر السياسات. قم بتشغيل `failproofai policies` بعد كل تحديث لأن إدخالات الكتالوج والسلوك قد يتغيران مع إصدار الحزمة.
+يتم تسليم 38 من أصل 39 سياسة مدمجة كحزمة `FailproofAI/policies`؛ يتم شحن `block-failproofai-commands` مجمعة في الحزمة لأن الحزمة قد لا تعلن `alwaysOn`. الحزمة المثبتة هي مصدر الحقيقة لما يمكن لهذا الجهاز أن يفرضه:
+
+```bash
+failproofai policies show FailproofAI/policies # the catalog, as published
+failproofai policies # what is enabled here
+```
+
+يسرد `failproofai policies` الملفات المخصصة وملفات الاتفاقيات والحزم المثبتة والتعيينات السحابية. لا يحتوي على قسم مدمج، لذا لا يمكنه الإجابة على "أي من السياسات المدمجة موجود" — `policies show` و[Policy Hub](https://befailproof.ai/policy-hub/FailproofAI/policies/) هما المكانان اللذان يتم الإجابة عليهما هناك.
-## خط الأساس الموصى به
+## القيم الافتراضية وكيفية الاختيار
-يعمل الإعداد الموجه حالياً على تفعيل معقمات الأسرار، وحماية البيئة، الحماية الذاتية، حراس الأوامر الكارثية، وسلامة الفروع المحمية:
+يقوم `failproofai policies add FailproofAI/policies` بتفعيل القيم الافتراضية للحزمة — الصفوف الـ 10 المشار إليها بـ **on** أدناه. يتم تفعيل `block-failproofai-commands` بغض النظر وليست جزءًا من هذا التحديد. يأخذ `--all` كل شيء؛ `--category ` و`--policy ` يأخذان جزءًا. الاختصار بجانب كل عنوان هو ما يطابقه `--category`:
-```text
-sanitize-jwt sanitize-api-keys
-sanitize-connection-strings sanitize-private-key-content
-sanitize-bearer-tokens protect-env-vars
-block-env-files block-secrets-write
-block-failproofai-commands block-sudo
-block-curl-pipe-sh block-rm-rf
-block-push-master block-force-push
+```bash
+failproofai policies add FailproofAI/policies --category git,database
```
-`block-failproofai-commands` **مفعل دائماً**. تم إدراجه أعلاه لتوضيح المعلومات، لكنه يتسجل عند كل تقييم سواء ظهر في مجموعة السياسات المفعلة لديك أم لا، ولا يمكن تعطيله أو إيقافه مؤقتاً — فالحارس الذي يمكن للعامل إيقاف الإنفاذ عنه ليس حارساً.
+`block-failproofai-commands` **مفعل دائمًا**. يسجل نفسه في كل تقييم سواء ظهر في اختيارك أم لا، ولا يمكن تعطيله أو إيقافه مؤقتًا — الحماية ضد تعطيل الوكيل للفرض الذي يمكن للوكيل تعطيله ليست حماية. قد لا تعلن الحزمة عن `alwaysOn`، وهذا هو السبب في شحن هذه السياسة الواحدة مجمعة في الحزمة بدلاً من أن تكون في الحزمة.
-الموصى به مقصود أن يكون أضيق من **الكل**. سياسات البنية التحتية وسير العمل يمكن أن تقاطع العمل الصحيح وينبغي تفعيلها للمستودعات والأجهزة التي تحتاجها.
+## التعقيم — `sanitize`
-## الأسرار والبيئة
+تعمل هذه على `PostToolUse`، بعد تنفيذ الأداة بالفعل. **تكتشف وترفض نتيجة الأداة**؛ لا تحرر كلمة فرعية وتعيد الباقي.
-| السياسة | الحافز | النتيجة |
-| --- | --- | --- |
-| `sanitize-jwt` | `PostToolUse` | إخفاء JWTs من مخرجات الأدوات قبل أن يراها النموذج. |
-| `sanitize-api-keys` | `PostToolUse` | إخفاء مفاتيح OpenAI و Anthropic و GitHub و AWS و Stripe و Google الشائعة. |
-| `sanitize-connection-strings` | `PostToolUse` | إخفاء سلاسل اتصال قواعد البيانات التي تحتوي على بيانات اعتماد. |
-| `sanitize-private-key-content` | `PostToolUse` | إخفاء أجسام مفاتيح PEM الخاصة. |
-| `sanitize-bearer-tokens` | `PostToolUse` | إخفاء رموز الترخيص. |
-| `protect-env-vars` | `PreToolUse` على أدوات الغلاف | منع الأوامر التي تفرغ متغيرات البيئة. |
-| `block-env-files` | `PreToolUse` | منع قراءة وكتابة ملفات `.env`. |
-| `block-read-outside-cwd` | `PreToolUse` على أدوات القراءة أو glob أو grep أو shell | إبقاء القراءة داخل دليل العمل للجلسة. |
-| `block-secrets-write` | `PreToolUse` على أدوات الكتابة | منع الكتابة إلى أسماء ملفات المفاتيح السرية والبيانات الاعتمادية الشائعة. |
-
-## الأوامر الخطيرة والبنية التحتية
-
-| السياسة | الحافز | النتيجة |
-| --- | --- | --- |
-| `block-sudo` | `PreToolUse`, `PermissionRequest` | منع `sudo` إلا إذا تطابق نمط السماح. |
-| `block-curl-pipe-sh` | `PreToolUse` | منع النصوص البرمجية المحملة الموجهة مباشرة إلى الغلاف. |
-| `block-rm-rf` | `PreToolUse` | منع أنماط الحذف العودية الكارثية. |
-| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **مفعل دائماً، لا يمكن تعطيله.** منع كل استدعاء CLI من Failproof AI، والإيقاف الذاتي، وإلغاء تثبيت مدير الحزم. |
-| `block-kubectl` | `PreToolUse` | حماية أوامر Kubernetes. |
-| `block-terraform` | `PreToolUse` | حماية أوامر Terraform و OpenTofu. |
-| `block-aws-cli` | `PreToolUse` | حماية أوامر AWS CLI. |
-| `block-gcloud` | `PreToolUse` | حماية أوامر Google Cloud CLI. |
-| `block-az-cli` | `PreToolUse` | حماية أوامر Azure CLI. |
-| `block-helm` | `PreToolUse` | حماية أوامر Helm. |
-| `block-gh-pipeline` | `PreToolUse` | حماية عمليات GitHub CLI الطافرة لسير العمل والتشغيل والدمج والإصدار والذاكرة والعمليات السرية. |
-
-## سلامة Git وقاعدة البيانات
-
-| السياسة | الحافز | النتيجة |
-| --- | --- | --- |
-| `block-push-master` | `PreToolUse` | منع الدفع المباشر إلى الفروع المحمية المُعدَّلة. |
-| `block-force-push` | `PreToolUse` | منع الدفع القسري؛ يبقى `--force-with-lease` مسموحاً بالتطبيق الحالي. |
-| `block-work-on-main` | `PreToolUse` | منع الالتزامات والدمج على الفروع المحمية. |
-| `warn-git-amend` | `PreToolUse` | تحذير قبل إعادة كتابة التزام باستخدام `--amend`. |
-| `warn-git-stash-drop` | `PreToolUse` | تحذير قبل حذف أو مسح المخزن المؤقت نهائياً. |
-| `warn-all-files-staged` | `PreToolUse` | تحذير على `git add -A` أو `git add .` أو `git add --all` الواسع. |
-| `warn-destructive-sql` | `PreToolUse` | تحذير على `DROP` و `TRUNCATE` و `DELETE` بدون `WHERE` من خلال عملاء قواعد البيانات المعروفة. |
-| `warn-schema-alteration` | `PreToolUse` | تحذير على عمليات `ALTER TABLE` المعروفة لأعمدة وإعادة تسمية. |
-
-## الحزم وسلوك النظام وحلقات العامل
-
-| السياسة | الحافز | النتيجة |
-| --- | --- | --- |
-| `warn-package-publish` | `PreToolUse` | تحذير قبل النشر إلى السجلات. |
-| `warn-global-package-install` | `PreToolUse` | تحذير قبل التثبيت العام للحزمة. |
-| `prefer-package-manager` | `PreToolUse` | إرشاد العامل لاستخدام مدير حزم مسموح. |
-| `warn-large-file-write` | `PreToolUse` على أدوات الكتابة | تحذير فوق حد حجم الملف المُعدَّل. |
-| `warn-background-process` | `PreToolUse` | تحذير على أنماط العمليات الخلفية المنفصلة أو طويلة العمر. |
-| `warn-repeated-tool-calls` | `PreToolUse` | تحذير بعد ثلاث مكالمات أدوات متطابقة أو أكثر. |
+الرفض هنا يصل إلى النموذج فقط على الأطر التي تستهلك حكم `PostToolUse` — **codex** و **copilot**، حيث يحل السبب محل نتيجة الأداة بالكامل. على claude و cursor و opencode و pi و hermes و openclaw و factory و devin و antigravity و goose، يكون `PostToolUse` مراقبة فقط: يتم تسجيل الكشف ولا تزال الإخراج يصل إلى النموذج.
+
+| السياسة | المحفز | القيمة الافتراضية | النتيجة |
+| --- | --- | --- | --- |
+| `sanitize-jwt` | `PostToolUse` | on | ارفض نتيجة أداة تحتوي على JWT. |
+| `sanitize-api-keys` | `PostToolUse` | on | ارفض نتيجة أداة تحتوي على مفتاح OpenAI أو Anthropic أو GitHub أو AWS أو Stripe أو Google. |
+| `sanitize-connection-strings` | `PostToolUse` | on | ارفض نتيجة أداة تحتوي على سلسلة اتصال قاعدة بيانات بها بيانات اعتماد مضمنة. |
+| `sanitize-private-key-content` | `PostToolUse` | on | ارفض نتيجة أداة تحتوي على محتوى مفتاح خاص بصيغة PEM. |
+| `sanitize-bearer-tokens` | `PostToolUse` | on | ارفض نتيجة أداة تحتوي على رمز `Authorization: Bearer`. |
+
+## البيئة — `environment`
+
+| السياسة | المحفز | القيمة الافتراضية | النتيجة |
+| --- | --- | --- | --- |
+| `protect-env-vars` | `PreToolUse` على `Bash` | on | منع الأوامر التي تقرأ متغيرات البيئة. |
+| `block-env-files` | `PreToolUse` | on | منع القراءة والكتابة لملفات `.env`. |
+| `block-read-outside-cwd` | `PreToolUse` على `Read`، `Glob`، `Grep`، `Bash` | off | حافظ على قراءات الملفات داخل دليل العمل للجلسة. |
+
+## الأوامر الخطرة — `dangerous-commands`
+
+| السياسة | المحفز | القيمة الافتراضية | النتيجة |
+| --- | --- | --- | --- |
+| `block-sudo` | `PreToolUse`، `PermissionRequest` على `Bash` | on | منع `sudo` ما لم يطابق نمط السماح. |
+| `block-curl-pipe-sh` | `PreToolUse` على `Bash` | on | منع النصوص المحملة الموجهة مباشرة إلى shell. |
+| `block-failproofai-commands` | `PreToolUse`، `PermissionRequest` على `Bash`، `Write`، `Edit`، `NotebookEdit` | **always on** | منع كل استدعاء CLI من Failproof AI، الإيقاف الذاتي وإلغاء التثبيت. |
+| `block-rm-rf` | `PreToolUse` على `Bash` | off | منع أنماط الحذف العودي الكارثية. |
+| `block-secrets-write` | `PreToolUse` على `Write` | off | منع الكتابة لأسماء ملفات المفاتيح السرية والبيانات الاعتمادية الشائعة. |
+
+## أوامر البنية التحتية — `infra-commands`
+
+السبعة كلهم معطلة بشكل افتراضي: فهي تبوب الأدوات التي يستخدمها العمل الشرعي بشكل مستمر، لذا فهي تنتمي إلى المستودعات والآلات التي تحتاج إليها.
-## سير عمل نهاية المهمة
+| السياسة | المحفز | القيمة الافتراضية | النتيجة |
+| --- | --- | --- | --- |
+| `block-kubectl` | `PreToolUse` على `Bash` | off | ابوب طفرات `kubectl` في الكتلة. |
+| `block-terraform` | `PreToolUse` على `Bash` | off | ابوب أوامر `terraform` و`tofu`. |
+| `block-aws-cli` | `PreToolUse` على `Bash` | off | ابوب أوامر CLI `aws`. |
+| `block-gcloud` | `PreToolUse` على `Bash` | off | ابوب أوامر `gcloud`. |
+| `block-az-cli` | `PreToolUse` على `Bash` | off | ابوب أوامر `az`. |
+| `block-helm` | `PreToolUse` على `Bash` | off | ابوب أوامر `helm`. |
+| `block-gh-pipeline` | `PreToolUse` على `Bash` | off | ابوب عمليات `gh` التي تسبب طفرات: تشغيل workflow وإعادة تشغيل وإلغاء التشغيل وضم PR وإنشاء وحذف الإصدار وحذف الذاكرة وتعيين وحذف السر. الأوامر الفرعية للقراءة فقط مثل `gh pr view` غير مطابقة. |
-تتطلب هذه السياسات حزام يصدر حدث `Stop` متوافق.
+## Git — `git`
-| السياسة | النتيجة |
+| السياسة | المحفز | القيمة الافتراضية | النتيجة |
+| --- | --- | --- | --- |
+| `block-push-master` | `PreToolUse` على `Bash` | on | منع الدفع المباشر إلى الفروع المحمية المكونة. |
+| `block-force-push` | `PreToolUse` على `Bash` | off | منع الدفع القسري. يبقى `--force-with-lease` و`--force-if-includes` مسموحًا. |
+| `block-work-on-main` | `PreToolUse` على `Bash` | off | منع الالتزامات والدمج على الفروع المحمية. |
+| `warn-git-amend` | `PreToolUse` على `Bash` | off | تحذير قبل إعادة كتابة التزام باستخدام `--amend`. |
+| `warn-git-stash-drop` | `PreToolUse` على `Bash` | off | تحذير قبل حذف أو مسح stashes دائمًا. |
+| `warn-all-files-staged` | `PreToolUse` على `Bash` | off | تحذير على عمليات `git add -A` أو `git add .` أو `git add --all` الواسعة. |
+
+## قاعدة البيانات — `database`
+
+| السياسة | المحفز | القيمة الافتراضية | النتيجة |
+| --- | --- | --- | --- |
+| `warn-destructive-sql` | `PreToolUse` على `Bash` | off | تحذير على `DROP` و`TRUNCATE` و`DELETE` بدون `WHERE` عبر عملاء قواعد البيانات المعروفة. |
+| `warn-schema-alteration` | `PreToolUse` على `Bash` | off | تحذير على عمليات `ALTER TABLE` المعروفة للأعمدة وإعادة التسمية. |
+
+## الحزم والنظام — `packages-system`
+
+| السياسة | المحفز | القيمة الافتراضية | النتيجة |
+| --- | --- | --- | --- |
+| `warn-package-publish` | `PreToolUse` على `Bash` | off | تحذير قبل النشر إلى npm و PyPI و crates.io و RubyGems وسجلات مماثلة. |
+| `warn-global-package-install` | `PreToolUse` على `Bash` | off | تحذير قبل تثبيت الحزم بشكل عام. |
+| `prefer-package-manager` | `PreToolUse` على `Bash` | off | منع مدير حزم غير المفضل وتوجيه الوكيل لاستخدام الموجودة. |
+| `warn-large-file-write` | `PreToolUse` على `Write` | off | تحذير أعلى عتبة حجم الملف المكونة. |
+| `warn-background-process` | `PreToolUse` على `Bash` | off | تحذير على أنماط العمليات المنفصلة أو خلفية. |
+
+## سلوك الذكاء الاصطناعي — `ai-behavior`
+
+| السياسة | المحفز | القيمة الافتراضية | النتيجة |
+| --- | --- | --- | --- |
+| `warn-repeated-tool-calls` | `PreToolUse` | off | تحذير عند استدعاء الأداة نفسها ثلاث مرات أو أكثر بمعاملات متطابقة. |
+
+## سير العمل — `workflow`
+
+الخمسة كلهم يعملون على `Stop` ومعطلة بشكل افتراضي.
+
+| السياسة | القيمة الافتراضية | النتيجة |
+| --- | --- | --- |
+| `require-commit-before-stop` | off | ارفض الإكمال بينما تبقى أعمال مسارة غير مرتكبة. |
+| `require-push-before-stop` | off | ارفض الإكمال بينما تبقى الالتزامات محلية فقط. |
+| `require-pr-before-stop` | off | اطلب طلب سحب للفرع الحالي. |
+| `require-no-conflicts-before-stop` | off | اطلب دمج نظيف ضد الفرع الأساسي المكون. |
+| `require-ci-green-before-stop` | off | اطلب النجاح في فحوصات CI على التزام HEAD الحالي، مع تجاهل الأشغال القديمة على الالتزامات السابقة. |
+
+هذه تحتاج إلى إطار عمل يتم استهلاك حكم `Stop` الخاص به. ليس كل إطار عمل:
+
+| إطار العمل | `Stop` |
| --- | --- |
-| `require-commit-before-stop` | رفض الإنجاز بينما يبقى العمل المتتبع غير ملتزم. |
-| `require-push-before-stop` | رفض الإنجاز بينما تبقى الالتزامات محلية فقط. |
-| `require-pr-before-stop` | طلب طلب دمج للفرع الحالي. |
-| `require-no-conflicts-before-stop` | طلب دمج نظيف مقابل فرع القاعدة المُعدَّل. |
-| `require-ci-green-before-stop` | طلب اكتمال فحوصات CI في HEAD الحالي بنجاح. |
+| claude و codex و copilot و cursor و openclaw و factory و devin و antigravity | تم التحقق من الحجب: يفرض الرفض دورة أخرى |
+| pi | ملاحظة. يتم نقل السبب إلى الدورة التالية كتعليمات وليس كبوابة |
+| goose و hermes | لم يتم تثبيت أي hook `Stop`، لذا هذه الخمسة لا تعمل أبدًا |
+| opencode | لم يتم التحقق. `Stop` ليست من بين الأحداث التي يستهلك opencode حكمًا منها |
+
+تعمل عمليات Cursor Cloud Agent VM على لا أي stop hooks، لذا فإن جلسة Cursor هناك غير مغطاة على الرغم من أن Cursor المحلي ليس كذلك.
+
+
+تعود سياسات `warn-*` بـ `instruct`، وليس `deny`. (`prefer-package-manager` هي الاستثناء بين الأسماء غير `block-*`: تعود بـ `deny`، لذا تحجب على كل إطار عمل يستهلك حكم `PreToolUse` — وهي الاثني عشر جميعها.) على Hermes و Goose و على Pi و OpenClaw و Factory خارج قناة `Stop` وعلى Antigravity خارج `Stop` و`UserPromptSubmit`، `instruct` تنخفض إلى السماح بالإضافة إلى ملاحظة على stderr — لا يتم إخبار الوكيل. `UserPromptSubmit` الخاص بـ Antigravity هي قناة حقيقية ثانية: يتم حقن التعليمات كرسالة مؤقتة قبل تشغيل النموذج.
+
## مرجع المعاملات
-قم بتكوين المعاملات تحت كائن `policyParams` للنطاق المحدد. يتم التحقق من الأنواع من قبل كل سياسة.
+قم بتكوين المعاملات تحت كائن `policyParams` الخاص بالنطاق المختار. يتم التحقق من الأنواع بواسطة كل سياسة.
-| السياسة | المعامل | النوع والافتراضي |
+| السياسة | المعامل | النوع والقيمة الافتراضية |
| --- | --- | --- |
-| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`؛ الإدخالات تحتوي على `regex` و `label` |
+| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`؛ تحتوي الإدخالات على `regex` و`label` |
| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` |
| `block-sudo` | `allowPatterns` | `string[]`, `[]` |
| `block-rm-rf` | `allowPaths` | `string[]`, `[]` |
-| حاجبات البنية التحتية | `allowPatterns` | `string[]`, `[]` |
+| Infrastructure blockers | `allowPatterns` | `string[]`, `[]` |
| `block-secrets-write` | `additionalPatterns` | `string[]`, `[]` |
| `block-push-master` | `protectedBranches` | `string[]`, `["main", "master"]` |
| `block-work-on-main` | `protectedBranches` | `string[]`, `["main", "master"]` |
@@ -112,7 +153,6 @@ block-push-master block-force-push
```json
{
- "enabledPolicies": ["block-sudo", "block-push-master"],
"policyParams": {
"block-sudo": {
"allowPatterns": ["sudo systemctl status"]
@@ -124,6 +164,10 @@ block-push-master block-force-push
}
```
+
+اسم السياسة المكشوف كمفتاح `policyParams` يتم احترامه لـ `FailproofAI/policies` فقط. بالنسبة لأي حزمة أخرى فإن المفتاح هو `pack///` — حزمة غريب تعلن اسم السياسة نفسه تحصل على افتراضات المخطط، وليس معاملات لك.
+
+
- نمط السماح يوسّع ما قد يفعله العامل. اختبر الرمزنة الدقيقة وأنماط الأوامر على الحزام المستهدف قبل نشره عبر الأسطول.
+نمط السماح يوسع ما قد يفعله الوكيل. اختبر الترميز والمتغيرات الدقيقة للأمر على إطار العمل الهدف قبل نشره عبر الأسطول.
\ No newline at end of file
diff --git a/docs/ar/policies/builtin.mdx b/docs/ar/policies/builtin.mdx
index d6f1ecc55..cd530086f 100644
--- a/docs/ar/policies/builtin.mdx
+++ b/docs/ar/policies/builtin.mdx
@@ -1,58 +1,100 @@
---
----
title: "السياسات المدمجة"
-description: "تفعيل الحماية المحتفظ بها للأخطاء الشائعة في وكلاء الذكاء الاصطناعي."
+description: "استخدم الحماية الموثوقة للحالات الشائعة لفشل الوكلاء، وفعّل ما تريده منها."
icon: "library"
---
-تغطي السياسات المدمجة معالجة الأسرار والملفات البيئية وأوامر shell التدميرية والفروع المحمية وأدوات السحابة والبنية التحتية ونشر الحزم والاستدعاءات المتكررة وفحوصات سير عمل نهاية المهمة.
+المدمجات هي 39 سياسة موثوقة تغطي تسع فئات من حالات فشل الوكلاء. جميعها ما عدا واحدة **تُسلّم كحزمة**، `FailproofAI/policies`، بنفس الطريقة التي يتم بها تسليم سياسات أي شخص آخر. الحزمة لا تشحن حزمتها الخاصة، لذا التثبيت الجديد لا ينفذ شيئاً إلى أن تختاره:
-## تفعيل والتحقق من سياسة مدمجة
+```bash
+failproofai policies add FailproofAI/policies
+```
-
-
- 1. قم بتثبيت السياسة على جهاز متصل باستخدام واجهة سطر الأوامر المحلية.
- 2. قم بتشغيل إجراء اختبار آمن في الوكيل المقيس.
- 3. انتقل إلى **Observe → policy** وقم بالتصفية حسب اسم السياسة أو بيئة الجهاز أو القرار.
- 4. افتح الجلسة المرتبطة لتأكيد إدخال الأداة المطابق والسبب المُرجع.
+يفعّل هذا الإعدادات الافتراضية للحزمة — 10 من 38 سياسة التي تحملها الحزمة. الـ 39 سياسة هي `block-failproofai-commands`، وهي مفعّلة بغض النظر: يتم شحنها مجمّعة في الحزمة، وتسجيل في كل تقييم، ولا يمكن تعطيلها أو إيقافها. لا يمكن لحزمة أن تعلن `alwaysOn`، ولهذا السبب هذا الحماية لا تسير في مسار الحزمة.
-
+## ما تغطيه الفئات التسع
+
+| الفئة | `--category` slug | السياسات |
+| --- | --- | --- |
+| تنقية البيانات | `sanitize` | 5 |
+| البيئة | `environment` | 3 |
+| الأوامر الخطرة | `dangerous-commands` | 5 |
+| أوامر الهياكل الأساسية | `infra-commands` | 7 |
+| Git | `git` | 6 |
+| قاعدة البيانات | `database` | 2 |
+| الحزم والنظام | `packages-system` | 5 |
+| سلوك الذكاء الاصطناعي | `ai-behavior` | 1 |
+| سير العمل | `workflow` | 5 |
+
+هذه هي أعداد الفهرس المجمّع، وتصل إلى 39. الحزمة تحمل 38 منها، لأن `block-failproofai-commands` هي `alwaysOn` ولا تسير في مسار الحزمة — لذا `--category dangerous-commands` تختار الأربع الأخرى.
+
+خذ جزء بدلاً من الإعدادات الافتراضية:
+
+```bash
+failproofai policies add FailproofAI/policies --category git,database
+failproofai policies add FailproofAI/policies --policy block-rm-rf
+failproofai policies add FailproofAI/policies --all
+```
+
+## اقرأ الفهرس قبل أن تختاره
+
+
```bash
+ failproofai policies show FailproofAI/policies
failproofai policies
- failproofai policy add block-rm-rf --cli claude --scope project
- failproofai config --status
```
- أزلها باستخدام `failproofai policy remove block-rm-rf --cli claude --scope project`.
+ `policies show` يقرأ البيان المنشور — كل سياسة، مجمّعة حسب الفئة، موضحة كافتراضية أو اختيارية — دون تنزيل أو استيراد كود الحزمة. `failproofai policies` يسرد ما هو مفعّل على هذه الآلة: الملفات المخصصة، ملفات الاتفاقية، الحزم المثبتة والتعيينات السحابية. لا يحتوي على قسم مدمج، لذا يجيب على "ما هو مفعّل هنا"، وليس أبداً "ما هو موجود".
+
+
+ تصفح نفس الفهرس في متصفح، بدون CLI، في [befailproof.ai/policy-hub](https://befailproof.ai/policy-hub/). كل حزمة لها صفحة في `/policy-hub///` وكل سياسة لها صفحة في `/policy-hub////`.
+
+
+ 1. ثبّت السياسة على آلة متصلة باستخدام CLI المحلي.
+ 2. شغّل إجراء اختبار آمن في الوكيل المجهز بأداة.
+ 3. اذهب إلى **Observe → policy** وصفّ حسب اسم السياسة أو بيئة الآلة أو القرار.
+ 4. افتح الجلسة المرتبطة للتأكد من مطابقة إدخال الأداة والسبب المُرجع.
-اعرض قائمة بالسياسات المتاحة في النسخة المثبتة لديك:
-
-```bash
-failproofai policies
-```
-
-قم بتفعيل سياسة واحدة لمشروع:
+## فعّل واحدة أو أطفئها
```bash
-failproofai policy add block-rm-rf --scope project
+failproofai policies add block-rm-rf --cli claude --scope project
+failproofai policies remove block-rm-rf --cli claude --scope project
```
-قم بتفعيل عدة سياسات لأجهزة اختبار معينة:
+`policies add` و `policies remove` تأخذ بالضبط **واحدة** اسم سياسة. قم بتشغيلها بدون اسم على الإطلاق وستحصل على منتقي، مع ما هو مفعّل بالفعل محدد. للعديد من الأسماء في نفس الوقت، استخدم نموذج التثبيت:
```bash
failproofai policies --install block-sudo block-force-push \
--cli claude codex --scope project
```
-بعض السياسات تقبل معاملات أو تحمل علامة beta. راجع الوصف ونطاق المطابقة والسلوك الافتراضي قبل الطرح. قد تحمي سياسة ما سير عمل واحد وتحظر العمليات الصحيحة في آخر.
+
+ على آلة بدون حزمة مثبتة، `failproofai policies add ` يجلب `FailproofAI/policies` من إصدارها على GitHub لتلبية الاسم — لذا هذا الأمر الأول يحتاج الشبكة.
+
+
+## ليس كل سياسة تفرض على كل جهاز
+
+السياسة تغيير السلوك فقط حيث يستهلك الجهاز الحكم للحدث الخاص به. حالتان تستحقان التحقق قبل أن تعتمد على مدمج:
+
+| الحدث | حيث يتم التحقق من أن الرفض يغيير السلوك |
+| --- | --- |
+| `PreToolUse` | جميع 12 أجهزة |
+| `Stop` | claude, codex, copilot, cursor, openclaw, factory, devin, antigravity. لا يتم تثبيت `Stop` hook على goose أو hermes، pi ينقل السبب إلى الدور التالي بدلاً من ذلك، و opencode لم يتم التحقق منه |
+
+لذا السياسات الخمس `require-*-before-stop` في فئة سير العمل يمكن تفعيلها على آلة وتظل لا تُطلق أبداً، اعتماداً على الوكيل الذي يعمل هناك. VMs Cursor Cloud Agent لا تشغل أي stop hooks على الإطلاق.
+
+سياسات `warn-*` و `prefer-*` تُرجع `instruct` بدلاً من `deny`. على Hermes و Goose، وخارج قناة `Stop` على Pi و OpenClaw و Factory و Antigravity، يتدهور `instruct` إلى allow بالإضافة إلى ملاحظة على stderr: المشغل يراها في السجلات، الوكيل لا.
+
+بعض السياسات تقبل معاملات. راجع الوصف، طابق النطاق والافتراضي قبل النشر — سياسة تحمي سير عمل واحد قد تحجب عمليات صحيحة في آخر.
-
- راجع جميع السياسات الحالية البالغ عددها 40، ومحفزاتها والأساس الموصى به والمعاملات.
+
+ جميع 39 سياسة مدمجة، حسب الفئة، مع مشغلاتها والإعدادات الافتراضية والمعاملات.
- يُفضل نطاق المشروع للتوقعات المحددة للمستودع ونطاق المستخدم لمتطلبات الأمان على مستوى الجهاز.
+ `failproofai config` يسلك كل وكيل مدعوم في نطاق المستخدم ولا يختار أي سياسات — لا يحتوي على علم `--scope`. مرر `--scope project` إلى `failproofai policies add` أو `failproofai policies --install` فقط عندما تنتمي التوقعات حقاً إلى مستودع واحد.
\ No newline at end of file
diff --git a/docs/ar/policies/custom.mdx b/docs/ar/policies/custom.mdx
index 7a6d93fd0..32e3ca8d3 100644
--- a/docs/ar/policies/custom.mdx
+++ b/docs/ar/policies/custom.mdx
@@ -1,73 +1,52 @@
---
---
title: "السياسات المخصصة"
-description: "اكتب سياسة لنمط فشل فريد لسير عمل وكيلك."
-icon: "shield-plus"
+description: "اكتب قاعدة للسلوك المحدد لوكيلك أو سير عملك."
+icon: "code-2"
---
-أنشئ ملف ينتهي بـ `policies.js` أو `policies.mjs` أو `policies.ts` ضمن `.failproofai/policies/`. تُحمّل ملفات الاتفاقية تلقائياً على نطاق المشروع والمستخدم.
+تحقق من [الكتالوج المدمج](/ar/policies/builtin-catalog) قبل كتابة سياسة. القاعدة المراجعة عادة ما تكون أأمن من واحدة جديدة.
-## اختبر السياسة قبل النشر على السحابة
+## ابدأ من سياسة تعمل
-
-
- 1. ثبّت السياسة المخصصة على آلة اختبار واحدة وأطلق إجراءً متطابقاً وعدم تطابق شرعياً.
- 2. انتقل إلى **Observe → policy** وقارن بين القرارين.
- 3. افتح كل جلسة مرتبطة وتحقق من أن حمل الحدث يحتوي على أدلة كافية للقاعدة.
- 4. عندما يكون السلوك صحيحاً، انقل المصدر المراجع إلى **Admin → policy editor** وأصدر نسخة.
-
-
-
- ```bash
- failproofai policies --install --custom ./security.policies.ts \
- --cli claude --scope project
- failproofai policies
- ```
+```bash
+failproofai publish --init guards.mjs
+failproofai policies -i -c ./guards.mjs
+```
- ملفات الاتفاقية ضمن `.failproofai/policies/` تُحمّل بدون `--custom`. احفظ أمر التثبيت الصريح في CI عندما يجب أن يفشل التحقق على وحدة معطوبة.
-
-
+الكتل الأساسية تحجب `git push --force`. عدّلها، اطلب من وكيلك أن يحاول الإجراء المحجوب، وافحص **Policies → Activity**.
-```ts
+```js
import { customPolicies, allow, deny } from "failproofai";
customPolicies.add({
- name: "protect-production-paths",
- description: "Block writes to production configuration",
- match: { events: ["PreToolUse"] },
- fn: async (ctx) => {
- if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
- const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/");
- if (path.split("/").includes("production")) {
- return deny("Writes to production configuration require approval.");
- }
- return allow();
- },
+ name: "protect-production",
+ description: "Production changes need a human",
+ match: { events: ["PreToolUse"], toolNames: ["Bash"] },
+ fn: async (ctx) =>
+ String(ctx.toolInput?.command ?? "").includes("production")
+ ? deny("Ask a human before changing production.")
+ : allow(),
});
```
-يتطابق هذا مع `production/config.yml` و `/srv/production/config.yml` و `/srv/production` و `C:\\production\\config.yml` لكل من `Write` و `Edit`. لا يتطابق مع أسماء مثل `production-backup` لأن `production` يجب أن تكون قطعة مسار كاملة.
+تعيد السياسة `allow()` أو `deny(message)` أو `instruct(message)`. استخدم `deny` عندما يجب إيقاف الإجراء؛ لا يمكن لكل نطاق توصيل تعليمات مرة أخرى للوكيل.
-تحقق وثبّت ملفاً صريحاً:
+## تحميل تلقائي
-```bash
-failproofai policies --install --custom ./security.policies.ts
-```
+ضع الملفات المسماة `*policies.js` أو `*policies.mjs` أو `*policies.ts` تحت:
-سياق السياسة يتضمن نوع الحدث والحمل المُعايير واسم الأداة والإدخال ومعادات الجلسة والمعاملات ومصدر CLI عند توفره.
+- `.failproofai/policies/` لمشروع واحد.
+- `~/.failproofai/policies/` لمستخدمك.
## اختبر مسارات الفشل
-قم بالتحقق بعد تغيير ملف الدخول أو أي وحدة محلية يستوردها:
+اختبر كلاً من الإجراء غير الآمن والعمل المشروع الذي يبدو مشابهاً. تأكد من أن القرار جاء من سياستك وليس من قاعدة أخرى.
+
+أزل ملفات الاختبار الصريحة باستخدام:
```bash
-failproofai policies --install --custom ./security.policies.ts --scope project
+failproofai policies -u -c
```
-مسار CLI الصارم يفشل للملفات المفقودة وأخطاء بناء الجملة والواردات غير المحللة والاستثناءات على مستوى أعلى والمهلات الزمنية لتحميل الوحدة. في وقت الإنفاذ، يتم تسجيل ملف مخصص معطوب وتخطيه حتى تتمكن السياسات المدمجة من المتابعة. تعامل مع أي تحذير تحميل كفقدان للإنفاذ المتوقع والتنبيه عليه في سجلات الإنتاج.
-
-استخدم أسماءً فريدة عالمياً عبر السياسات الصريحة والاتفاقية والمُدارة من السحابة. اجعل دوال السياسة حتمية، وقيّد الاستدعاءات الخارجية بمهل زمنية قصيرة، وأرجع `allow` أو `instruct` أو `deny` مقصود على كل مسار.
-
-
- السياسة المخصصة هي كود إنفاذ. اختبر الحقول المفقودة وأسماء الأدوات البديلة والمدخلات المشوهة—ليس فقط المطابقة المتوقعة.
-
\ No newline at end of file
+عندما تكون السياسة جاهزة، [انشر حزمة](/ar/policies/publish-a-pack) أو [نشرها عبر Cloud](/ar/policies/deploy).
\ No newline at end of file
diff --git a/docs/ar/policies/deploy.mdx b/docs/ar/policies/deploy.mdx
index 8cc7efbea..3c74d1a67 100644
--- a/docs/ar/policies/deploy.mdx
+++ b/docs/ar/policies/deploy.mdx
@@ -1,52 +1,55 @@
---
---
title: "نشر السياسات"
-description: "إطلاق نسخة سياسة تم مراجعتها إلى الأجهزة المقصودة."
+description: "راقب سياسة على نشاط الوكيل الفعلي، ثم طبّقها أو تراجع عنها."
icon: "cloud-upload"
---
-يربط النشر نسخة واحدة أو أكثر من السياسات بمجموعة مستهدفة من الأجهزة المسجلة.
+نشّر سياسة تمت مراجعتها على جهاز واحد في كل مرة. ابدأ في وضع المراقبة.
-## تطبيق نشر
+## الطرح من سطر الأوامر
-
-
- 1. انتقل إلى **Admin → enforcement**، ابحث عن الجهاز، وقم بتوسيع صفه.
- 2. اختر **edit**، أضف نسخة السياسة المراجعة، واختر **observe** أو تأثيرها الإجباري.
- 3. طبّق التغيير، ثم انتظر فحص الجهاز التالي وتأكد من حالة نشره وتغطيته.
- 4. انتقل إلى **Observe → policy** للفحص القرارات المباشرة.
+```bash
+fp policies test ./rule.mjs --tool Bash --command "git push --force" --expect deny
+fp policies publish no-force-push ./rule.mjs
+fp fleet deploy --add no-force-push:observe
+fp guardrails summary --since 24h --machine
+fp fleet deploy --add no-force-push:enforce
+```
- 
-
-
- قم بالنشر من واجهة سطر الأوامر باستخدام `fp fleet`. راجع مجموعة النتائج قبل تطبيقها — يطبع `deploy` الخطة الكاملة ويسأل **فقط على محطة تفاعلية بدون `--json`**. تحت `--json`، مع `--yes`، أو مع إعادة توجيه stdin (خطوة CI، سكريبت، وكيل يشغل shell) يتم التطبيق فوراً بدون خطة وبدون مطالبة — لذا قم بتشغيل `fp fleet show ` أولاً إذا كنت تريد المراجعة:
+يقيّم وضع المراقبة السياسة الفعلية ويسجل القرارات غير المسموحة، لكنه لا يحجب الوكيل.
- ```bash
- fp fleet list
- fp fleet show
- fp fleet deploy --add no-force-push
- ```
+
+ إن استخدام `--add no-force-push` بدون إضافة يطبق السياسة فوراً. أضف `:observe` لطرح خادع.
+
- يعرض `fp fleet diff ` النية مقابل التسليم (يُقرأ الجهاز كـ `behind` حتى يقوم بالاستطلاع التالي)، `fp fleet history ` يسرد الأجيال، و `fp fleet rollback ` يستعيد واحداً — يرفض إذا كان هذا الجيل يسمي سياسة تم تعطيلها أو حذفها.
+إذا تسبب التطبيق في مشاكل:
- تحقق من الجهاز نفسه باستخدام `failproofai config --status`، واستخدم `fp sessions --env production --since 24h` و `fp events --event-type hook_completed` بعد النشر للتحقق من وصول النشاط إلى Cloud.
-
-
+```bash
+fp fleet history
+fp fleet rollback
+```
-
-
- قم بنشر نسخة تم مراجعتها، وليس مسودة قابلة للتغيير، بدءاً بجهاز غير إنتاجي أو مجموعة صغيرة يمكنك فحص جلساتها.
-
-
- راجع التطابقات والأسباب والأدوات المتأثرة والإيجابيات الكاذبة بدون حجب العمل.
-
-
- قم بالترقية بعد المطابقات المرصودة التي تفصل الإجراءات غير الآمنة عن الإجراءات الصحيحة، ثم تأكد من أن كل جهاز مقصود قد سحب النشر ويقدم التقارير عن القرارات.
-
-
+## النشر من لوحة التحكم
-تحتاج الأجهزة إلى القدرة على `policies:pull`. يتم التحكم في الإبلاغ عن الأحداث بشكل منفصل بواسطة `events:add`؛ تحقق من كليهما عندما تتوقع تحليل Cloud والفرض.
+1. انتقل إلى **Admin → enforcement**.
+2. افتح الجهاز المستهدف.
+3. أضف إصدار السياسة مع التأثير **observe**.
+4. طبّق النشر.
+5. راجع النتائج تحت **Observe → policy**.
+6. رقّ نفس الإصدار إلى **enforce** عندما تكون المطابقات صحيحة.
-
- إدارة الفرض هي سير عمل إداري في Cloud. لا تعامل مسارات الفرض للمسؤول الجذر فقط كنقاط نهاية API عادية للعملاء `/v1`.
-
\ No newline at end of file
+
+
+## استبدال أو مرحلة مسبقة من مجموعة
+
+- `--remove ` يزيل سياسة واحدة.
+- `--set ...` يستبدل مجموعة السياسات الكاملة.
+- `--create` يحضّر نشراً قبل أن يتحقق الجهاز للمرة الأولى.
+- `fp fleet diff ` يقارن الحالة المقصودة والمطبقة.
+
+
+ بدون Cloud، انشر حزمة باستخدام `failproofai publish --effect observe` وفتّش القرارات في لوحة التحكم المحلية.
+
+
+تحتاج الأجهزة إلى `policies:pull` لاستقبال النشرات و `events:add` للإبلاغ عن القرارات.
\ No newline at end of file
diff --git a/docs/ar/policies/failure-behavior.mdx b/docs/ar/policies/failure-behavior.mdx
index a75a67cbc..dd8797e3f 100644
--- a/docs/ar/policies/failure-behavior.mdx
+++ b/docs/ar/policies/failure-behavior.mdx
@@ -1,68 +1,49 @@
---
---
-title: "سلوك الفشل"
-description: "افهم ما يحدث عند عدم توفر تقييم السياسة أو daemon المحلي."
+title: "سلوك فشل السياسة"
+description: "افهم لماذا يرفض Failproof AI عندما لا يتمكن التقييم من الرد."
icon: "shield-alert"
---
-تم تصميم Failproof AI بحيث يكون فشل الإنفاذ مرئياً بدلاً من السماح الصامت بعمل محفوف بالمخاطر.
+بعد الإعداد، خدمة `failproofaid` المحلية هي المُقيِّم الوحيد. إذا لم تتمكن من الرد، يتم رفض الإجراءات المحمية بدلاً من السماح بها بصمت.
-## تشخيص كتلة مغلقة الفشل
+## تشخيص حظر على مستوى الجهاز
-
-
- 1. انتقل إلى **Admin → enforcement** وافتح الآلة.
- 2. تحقق من آخر تسجيل دخول، والنشر المعين، والنشر المبلغ عنه.
- 3. انتقل إلى **Observe → policy** وافتح جلسة القرار المرفوض.
- 4. تأكد مما إذا كان السبب يشير إلى إمكانية الوصول إلى daemon أم عدم التطابق في الإصدار أم السياسة نفسها.
-
-
-
- ```bash
- failproofai config --status
- npm install -g failproofai@latest
- failproofai config
- ```
-
- إعادة تشغيل `failproofai config` يحدّث ويعيد تشغيل daemon بعد ترقية الحزمة.
-
-
-
-على آلة تم تكوينها لاستخدام `failproofaid`، يكون daemon هو المقيّم الوحيد. إذا كان غير قابل للوصول أو كان إصدار البروتوكول الخاص به لا يطابق CLI، يفشل تقييم hook بشكل مغلق. يتم رفض الإجراء مع سبب يوجه المشغل إلى التحقق من daemon أو تحديثه.
-
-قبل تكوين daemon، تقيّم hooks السياسات أثناء المعالجة. بمجرد تسجيل تكوين daemon، لا يعود Failproof AI إلى تقييم ثاني بصمت عند فشل daemon.
+```bash
+failproofai config --status
+systemctl status failproofaid@$USER # Linux
+sudo launchctl print system/ai.failproof.failproofaid.$USER # macOS
+```
-## الاستجابة لقرار مغلق الفشل
+قم بتشغيل `failproofai config` لإصلاح الخدمة أو تثبيت الإصدار المطابق.
-1. قم بتشغيل `failproofai config --status`.
-2. إذا اختلفت الإصدارات، أعد تشغيل `failproofai config` بعد تحديث الحزمة.
-3. إذا كان daemon غير قابل للوصول، افحص حالة الخدمة وسجلات الملف الشخصي المحلي.
-4. استأنف عمل agent فقط بعد التأكد من أن مسار تقييم السياسة المعروف سليم.
+يمكن أن يبدو الفشلان متشابهين:
-
- لا تحاول تكرار الإجراء المحظور بشكل متكرر. استجابة مغلقة الفشل تعني أن النظام لم يتمكن من إثبات أن الإجراء كان آمناً.
-
+| الفشل | المعنى |
+| --- | --- |
+| الخدمة غير متاحة | المقبس ليس لديه مُقيِّم عامل خلفه |
+| عدم تطابق الإصدار | واجهة سطر الأوامر والخدمة لا تتفقان على البروتوكول |
-## لن يتم تحميل الحزمة
+كلاهما يرفض، لكن تقارير الحالة تفصل بينهما.
-آلة تم إخبارها بفرض حزمة، ولا يمكنها تشغيلها، ترفض بدلاً من المتابعة بصمت. المحفز هو **توقع مسجل**، وليس توقع فارغ: آلة بدون حزم مثبتة تكون صامتة، بينما حزمة تم إعلانها ولن تُحل — أو تسجل أقل من ما يعلنه البيان الخاص بها — ترفض.
+## لن يتم تحميل حزمة
-الرفض **ضيق**، على عكس daemon غير قابل للوصول. daemon الذي لا يمكن الوصول إليه يعني أنه لم يحدث أي تقييم على الإطلاق، لذلك لا يمكن معرفة شيء آمن. حزمة لن تتحمل لديها مجموعة قابلة للعد من الحراس المفقودين، لأن كل سياسة معلنة تحمل `match` خاصة بها — لذلك ترفض فقط الأحداث والأدوات التي غطتها تلك السياسات، وكل شيء آخر يمضي قدماً.
+تحديد حزمة مفقودة أو مُعدَّلة أو غير صالحة يرفض الأحداث المغطاة بسياساتها المحددة. وهذا يمنع اختفاء حزمة مكسورة بينما يبدو الجهاز محمياً.
-لا تنطلق بسبب:
+`failproofai policies` يسمي الحزمة وخطأ التحميل.
-- حزمة `observe`، التي تقيّم وتتجاهل بالبناء
-- سياسات لم تأخذها، أو أوقفتها بشكل صريح
-- حزمة لم يتلقاها المحمّل، حيث لا يمكن التمييز بين «لا تسجيلات» و تخطي متعمد
-- توقف جلسة نشطة
-- مهلة زمنية للتحميل، وهي عابرة — لحظة قرص واحدة بطيئة يجب ألا ترفض حتى يتدخل إنسان
+```bash
+failproofai policies
+failproofai policies remove owner/repo
+failproofai policies add owner/repo@
+```
-`UserPromptSubmit` **توجه** بدلاً من الرفض، مهما أعلنت السياسة المفقودة. رفض شامل سيأخذ معه ويغلقك خارج agent الذي يمكنه إصلاح المشكلة.
+البيانات الوصفية غير القابلة للقراءة توسع الرفض الآمن بدلاً من تضييقه بناءً على البيانات التي لا يمكن الوثوق بها.
-### ماذا تفعل
+## ما يبقى متاحاً
-```bash
-failproofai pack list
-```
+لوحة المعلومات المحلية وأوامر الحالة لا تزال تعمل بينما يفشل تقييم السياسة. استخدمها لتحديد الخدمة أو الحزمة أو الإصدار الذي يحتاج إلى إصلاح.
-يسمي أي حزمة مثبتة لن يتم تحميلها، ويقول السبب، ويخرج برمز غير صفر. ثم إما أعد تثبيتها (`failproofai pack add `) أو أزلها (`failproofai pack remove `) — إزالتها تسحب التوقع، والرفض يتوقف معها.
\ No newline at end of file
+
+ لا تتجاوز قرار الإغلاق عند الفشل بحذف خدمة أو ملفات الحزمة. أصلح الخدمة أو أعد تثبيت الحزمة أو أزل التعيين من خلال واجهة سطر الأوامر بحيث يعود الجهاز إلى حالة معروفة.
+
\ No newline at end of file
diff --git a/docs/ar/policies/fleet.mdx b/docs/ar/policies/fleet.mdx
index 5f2b83cb8..94e203edf 100644
--- a/docs/ar/policies/fleet.mdx
+++ b/docs/ar/policies/fleet.mdx
@@ -1,53 +1,62 @@
---
---
-title: "نشر السياسات على الأجهزة"
-description: "تعرّف على الأجهزة المسجلة والمحدثة والتي تفرض إصدارات السياسة المقصودة."
+title: "تغطية الأسطول"
+description: "اطّلع على الأجهزة التي استقبلت وطبّقت السياسات المقصودة."
icon: "network"
---
-يجيب تغطية الأسطول على السؤال حول ما إذا كانت السياسة موجودة حيث توجد المخاطر. تتبع الأجهزة من خلال معرّف مستقر وتسمية يمكن قراءتها من قبل الإنسان، ثم قارن بين حالة النشر المخصصة والمُبلغ عنها.
+تقارن تغطية الأسطول ما خصصته السحابة مع ما طبّقه كل جهاز آخر مرة.
-## التحقق من التغطية
+## التحقق من جهاز
-
-
- 1. انتقل إلى **Admin → enforcement** واستعرض إجمالي الأجهزة التي تفرض وتراقب.
- 2. ابحث عن جهاز حسب المعرّف أو التسمية، أو قم بالتصفية للأجهزة التي تفتقد سياسة.
- 3. وسّع الصف لمقارنة السياسات المعينة والنشر المُبلغ عنه ووقت آخر تسجيل دخول والسجل.
- 4. أعِد التحديث بعد فترة استطلاع الجهاز عندما يبقى النشر المطبق قيد الانتظار.
+```bash
+failproofai config --status
+failproofai flush --wait --timeout 120
+```
- 
-
-
- ```bash
- failproofai config --status
- failproofai config --machine-label checkout-runner-03
- failproofai flush --wait
- ```
+من السحابة:
+
+```bash
+fp fleet list
+fp fleet diff
+fp fleet show
+```
- استخدم `fp events --agent-id --since 24h` للتأكد من وصول نشاط وكيل الجهاز إلى السحابة.
-
-
+يتطلب `fp fleet` جلسة تسجيل دخول، وليس مفتاح API.
-استخدم عروض التغطية للبحث عن:
+| الأمر | ما يفعله |
+| --- | --- |
+| `fp fleet list` | اسرد الأجهزة وحالة النشر |
+| `fp fleet show ` | اعرض مجموعة السياسات لجهاز واحد |
+| `fp fleet deploy --add ` | أضف أو حدّث سياسة واحدة |
+| `fp fleet deploy --remove ` | أزل سياسة واحدة |
+| `fp fleet deploy --set ...` | استبدل المجموعة بأكملها |
+| `fp fleet diff [machine]` | قارن الإصدارات المقصودة والمطبّقة |
+| `fp fleet history ` | اسرد أجيال النشر |
+| `fp fleet rollback ` | استعد جيلاً |
+| `fp fleet rename "
+
+بشكل افتراضي، يتم إرسال كل قرار `deny` و`instruct` بالكامل. يتم تجميع الأوامر المكررة لتقليل الضوضاء. عيّن `collector.hooks_verbosity` في `~/.failproofai/config.json` إلى `all` أو `decisions` أو `off`.
+
+
+ نشاط Hook يثبت أن التقييم تم تشغيله، وليس أن الحزام كان يمكنه حظر هذا الحدث. انظر إلى [القدرة على الفرض](/ar/reference/harnesses#enforcement-capability). زوج harness-event غير مدرج لم يتم التحقق منه.
+
+
+
+ اقرأ نفس النشاط حسب النتيجة والسياسة.
+
\ No newline at end of file
diff --git a/docs/ar/sessions/live-events.mdx b/docs/ar/sessions/live-events.mdx
index 28e467d9a..3a036d803 100644
--- a/docs/ar/sessions/live-events.mdx
+++ b/docs/ar/sessions/live-events.mdx
@@ -1,46 +1,41 @@
---
----
title: "الأحداث المباشرة"
-description: "راقب نشاط الوكيل وهو يصل أثناء تشغيل الجلسة."
+description: "راقب نشاط الوكلاء في Failproof AI Cloud."
icon: "radio"
---
-تساعدك الأحداث المباشرة على تأكيد التنسيق ومراقبة التشغيل المحفوف بالمخاطر دون انتظار انتهاء الجلسة.
+تعرض الأحداث المباشرة النشاط أثناء تشغيل الوكلاء: استدعاءات النموذج والأدوات والأخطاء والإدخال البشري والخطافات وقرارات السياسة.
## مراقبة النشاط
-
-
- 1. انتقل إلى **Observe → Events**.
- 2. ابدأ بنطاق الوقت الحالي وبدون مرشحات لتأكيد وصول البيانات.
- 3. قم بتصفية حسب البيئة أو نوع الحدث أو الوكيل أو الجلسة. استخدم البحث لنصوص الحمول.
- 4. حدد حدثاً لفحص ملخصه والتفاصيل. اتبع رابط الجلسة للحصول على التتبع الكامل.
+انتقل إلى **Observe → Live events**، أو قم بتشغيل:
- 
-
-
- ```bash
- fp events --env production --event-type tool_use,error --limit 100
- fp events --session-id --order asc --all
- fp --json events --full --session-id --all
- ```
+```bash
+fp events --since 1h
+fp events --event-type tool_use,tool_result --since 1h
+fp --json events --full --session-id --all --limit 2000
+```
- يتجاهل الخلاصة الافتراضية الحمول الخام. استخدم `--full` فقط للتحقيق في جلسة محدودة.
-
-
+استخدم `--full` عندما تحتاج إلى محتويات الحمل البياني. الخلاصة الخفيفة أسرع وكافية لمعظم عمليات التصفية.
-استخدم دفق الأحداث للإجابة على ثلاثة أسئلة فورية:
+تتضمن أنواع الأحداث الشائعة:
-- هل يقدم الوكيل المتوقع التقارير إلى البيئة الصحيحة؟
-- هل وصلت استدعاءات النموذج واستدعاءات الأداة وقرارات السياسة بالترتيب؟
-- هل توقفت الجلسة عن إحراز تقدم أم بدأت تكرار إجراء؟
+- `session_start` و `session_end`
+- `model_request` و `model_response`
+- `tool_use` و `tool_result`
+- `hook_triggered` و `hook_completed`
+- `error`
+- `human_wait` و `human_input`
+- `agent_pause` و `agent_resume`
-تشمل أنواع الأحداث أحداث دورة حياة الوكيل وطلبات واستجابات النموذج واستخدام الأداة والنتائج وتنفيذ الخطاف والانتظار البشري والمقاطعات والأخطاء الصريحة. تربط معرفات الارتباط الأحداث المقترنة مثل استدعاء الأداة ونتيجتها.
+## إذا لم تظهر الأحداث
-
- حافظ على العرض المباشر واسعاً أثناء التحقق من تكامل جديد. أضف المرشحات فقط بعد رؤية الحدث الأول؛ يمكن أن يبدو المرشح غير الصحيح وكأنه فشل في البث.
-
+```bash
+failproofai flush --wait
+failproofai config --status
+failproofai backfill --since 30d --dry-run
+```
-إذا لم تظهر أي أحداث، قم بتشغيل `failproofai config --status`، ثم [استكشف أخطاء البث](/ar/reference/troubleshooting).
+البيئة الافتراضية هي `local`. يؤدي التصفية من أجل `production` إلى عدم إرجاع أي نتائج حتى تقوم بتغيير تسمية البيئة.
-الوكلاء الذين لا يعملون في أحد [الأطر](/ar/reference/harnesses) الـ 12 المدعومة يقدمون نفس أنواع الأحداث من خلال [Python SDK](/ar/reference/custom-agents)، بما في ذلك أحداث التفاعل البشري (`human_wait`، `human_input`، `human_interrupt`) التي تعتمد عليها الوكلاء الموجودون في البوابة والإنتاج.
\ No newline at end of file
+بالنسبة لوكيل خارج حزام مدعوم، استخدم [Python SDK](/ar/reference/custom-agents).
\ No newline at end of file
diff --git a/docs/ar/sessions/models.mdx b/docs/ar/sessions/models.mdx
index f2be4af81..8b841e368 100644
--- a/docs/ar/sessions/models.mdx
+++ b/docs/ar/sessions/models.mdx
@@ -1,27 +1,55 @@
---
+---
title: "النماذج"
-description: "قارن زمن الاستجابة والرموز والسياق المستخدم وتوزيع حركة المرور."
+description: "قارن بين زمن الاستجابة والرموز والاستخدام السياقي وتوزيع حركة المرور للنماذج."
icon: "cpu"
---
استخدم النماذج لمعرفة ما إذا تغيرت الموثوقية أو التكلفة مع نموذج أو وكيل أو بيئة أو نطاق زمني.
-
+
1. انتقل إلى **Observe → Models**.
- 2. عيّن النطاق الزمني، ثم صفّ حسب البيئة أو النموذج أو الوكيل أو معرّف الجلسة.
- 3. راجع زمن الاستجابة واستهلاك الرموز واستخدام نافذة السياق وتوزيع النموذج.
- 4. حدّد نقطة على الرسم البياني أو جزء توزيع لفتح الأحداث المطابقة.
+ 2. عيّن النطاق الزمني، ثم صفّي حسب البيئة أو النموذج أو الوكيل أو معرّف الجلسة.
+ 3. راجع زمن الاستجابة واستهلاك الرموز واستخدام النافذة السياقية وتوزيع النموذج.
+ 4. حدّد نقطة على الرسم البياني أو قطعة توزيع لفتح الأحداث المطابقة.
- 
+ 
-
+
```bash
fp list models
- fp events --event-type model_request,model_response --env production --since 24h
- fp --json events --fields ts,agent_id,session_id,event_type,output_tokens,context_fill
+ fp events --event-type model_request,model_response --since 24h
+ fp --json events --event-type model_response --since 24h --all --limit 500 --fields ts,agent_id,session_id,output_tokens,context_window,context_fill
```
- استخدم استعلام محفوظ للحصول على مجاميع على مستوى النموذج غير المعروضة كأمر واجهة سطر أوامر مخصصة.
+ جميعها تحتاج إلى `events:read`.
+
+ `--fields` تعرض الأعمدة؛ وهي لا تصفّي الصفوف. اجمعها مع `--event-type` ونطاق زمني، وإلا ستحصل على أحدث 50 حدثًا من كل نوع مع قيم null لـ `output_tokens` و`context_fill` على جميع الأحداث غير المتعلقة بالنموذج. `--all` يتوقف عند `--limit`، والذي يأخذ القيمة الافتراضية 50.
+
+ اقرأ `context_fill` بجانب `context_window`: رقم الملء لا معنى له بدون النافذة التي يُقاس عليها.
+
+ يختم الخيط الشبح كل حدث ببيئة `local` إلا إذا غيّرتها، لذلك `--env production` لا يطابق أي شيء على تثبيت قياسي. انظر [تغيير تسمية البيئة](/ar/reference/events-and-configuration#change-an-environment-label).
-
\ No newline at end of file
+
+
+## ما يمكن وما لا يمكن لـ CLI أن يظهره
+
+تغذية الأحداث الافتراضية خالية من الحمولة. وهي تحمل `output_tokens` و`context_window` و`context_fill` كأعمدة مرفوعة، وليس شيء آخر عن استدعاء نموذج:
+
+| القيمة | حيث يقع |
+| --- | --- |
+| رموز الإخراج والنافذة السياقية وملء السياق | أعمدة التغذية الخفيفة — متاحة مباشرة من `fp events`. |
+| اسم النموذج | الحمولة — استخدم `fp events --full`، مقيد بجلسة واحدة. |
+| رموز الإدخال | الحمولة — يسجل SDK كلا النصفين، فقط النصف الثاني مرفوع. |
+| زمن الاستجابة لكل استدعاء | لا يوجد عمود `duration_ms` في التغذية الخفيفة، وـ `model_response` في SDK لا يحمله أيضًا. احسبه بمطابقة الطلب مع استجابته. |
+
+`model_request` و`model_response` متطابقان على `request_id`. هذا الحقل موجود بالضبط حتى يمكن مطابقة طلب مع إجابته، وهو الطريقة الوحيدة لحساب زمن الاستجابة لكل استدعاء من الأحداث الخام:
+
+```bash
+fp --json events --full --event-type model_request,model_response --session-id --all --limit 500
+```
+
+أسماء النماذج تصل حرفيًا من نسخة كل جهاز. لا يوجد شيء في مسار الالتقاط يوحّدها، لذلك يمكن أن يظهر نموذج أساسي واحد تحت عدة معرّفات خاصة بموفر في مخطط التوزيع. شغّل `fp list models` لترى الأسماء التي يملكها النشر بالفعل.
+
+استخدم استعلام محفوظ للتجميعات على مستوى النموذج التي لم يتم كشفها كأمر CLI مخصص.
\ No newline at end of file
diff --git a/docs/ar/sessions/overview.mdx b/docs/ar/sessions/overview.mdx
index e0c0aa9b6..d8fc169d2 100644
--- a/docs/ar/sessions/overview.mdx
+++ b/docs/ar/sessions/overview.mdx
@@ -1,58 +1,67 @@
---
---
title: "الجلسات"
-description: "ابدأ بالسجل الكامل لتشغيل وكيل واحد."
-icon: "workflow"
+description: "تابع تشغيل وكيل واحد من هدفه عبر الأدوات والقرارات والنتيجة."
+icon: "route"
---
-الجلسة هي أفضل نقطة انطلاق عندما يتصرف وكيل بشكل غير متوقع. فهي تجمع بين طلبات النموذج والاستجابات واستدعاءات الأدوات والتفاعلات البشرية والأخطاء والتقييمات وقرارات السياسة التي تنتمي إلى تشغيل واحد.
+الجلسة هي تشغيل وكيل واحد. وهي تربط بين الطلب ونداءات النموذج والأدوات والأخطاء والإدخال البشري وقرارات السياسة والنتيجة النهائية.
-تبدو الجلسات متطابقة بغض النظر عن الأداة التي أنتجتها. سواء كان تشغيل Claude Code يعيد كتابة مستودع، أو وكيل Hermes يجيب على عميل في Slack، أو خدمة Python مزودة بـ Agents SDK، فإنها جميعاً تصل إلى نفس صيغة التتبع، لذا عرض واحد يغطي أسطول كامل.
-
-
-
-
-
-اتبع تشغيل وكيل واحد من هدفه عبر استدعاءات النموذج والأدوات والاستجابة النهائية.
-
-## البحث عن جلسة
+## أين تعيش الجلسات
-
- 1. في الشريط الجانبي للسحابة، انتقل إلى **Observe → Sessions**.
- 2. عيّن نافذة زمنية، ثم صفّي حسب البيئة والحالة والوكيل أو معرّف الجلسة.
- 3. أضف نطاقات الدرجات أو المقاييس عندما تحتاج إلى شرائح الجودة أو التكلفة أو الرموز أو الكمون.
- 4. حدد صفاً لفتح تتبعه. استخدم عنصر النسخ بجانب معرّف الجلسة عند مشاركتها.
-
- 
+
+ شغّل `failproofai` لفتح لوحة التحكم على `http://localhost:8020`. يبقى سجل الجلسات على هذا الجهاز.
-
+
+ اربط الجهاز، ثم افتح **Observe → Sessions**:
+
```bash
- fp sessions --env production --since 24h
- fp sessions --status error,timeout --agent-id checkout-agent
- fp --json sessions --session-id
+ export FAILPROOFAI_CLOUD_TOKEN=""
+ failproofai config
```
- أضف `--agents` لتوسيع تشغيلات متعددة الوكلاء، أو `--all` للترقيم، أو `--fields` لاختيار أعمدة الإخراج.
+ تستقبل السحابة النصوص الكاملة بشكل افتراضي. لإرسال قرارات السياسة فقط، اربط أولاً، ثم اضبط `collector.sessions` على `false` في `~/.failproofai/config.json`. لا ينطبق إعداد العلم الحالي `--no-transcripts` على هذا الإعداد.
-## ما يمكنك القيام به
+تصل الجلسات من [12 بيئة وكيل مدعومة](/ar/reference/harnesses) ومن الوكلاء المجهزين باستخدام [Python SDK](/ar/reference/custom-agents).
+
+## البحث عن جلسة
+
+في السحابة، قم بالتصفية حسب الوقت أو البيئة أو الحالة أو الوكيل أو معرّف الجلسة. من سطر الأوامر:
+
+```bash
+fp sessions --since 24h
+fp sessions --status error,timeout --agent-id checkout-agent
+fp --json sessions --session-id
+```
+
+استخدم `fp errors --since 24h` للفشل الذي لم يتم تقييمه مطلقاً. يستخدم `fp sessions --status` أحدث نتيجة تقييم، لذا فإن الجلسة غير المقيّمة ليس لها حالة.
+
+## قراءة التشغيل
+
+1. أكّد هدف الوكيل والبيئة.
+2. ابحث عن الخطأ الأول أو القرار غير المتوقع.
+3. افحص سياق النموذج ومدخلات الأداة مباشرة قبله.
+4. تحقق من إعادة المحاولات والكمون والمقاطعات البشرية.
+5. راجع التقييمات وقرارات السياسة.
-- ابحث عن تشغيل حسب الوكيل والبيئة والوقت والنموذج ونوع الحدث أو حالة الخطأ.
-- اتبع التسلسل الدقيق الذي أنتج النتيجة.
-- قارن بين التشغيلات الناجحة والفاشلة.
-- افتح الأدلة المستخدمة من قبل نتيجة التدقيق أو حادثة تنبيه.
-- صدّر جلسة عندما تحتاج إلى سجل دون اتصال.
+## إذا كانت الجلسة مفقودة
-## ترتيب التحقيق الموثوق
+```bash
+failproofai flush --wait
+failproofai config --status
+failproofai backfill --since 30d --dry-run
+```
-1. أكد هدف الجلسة والبيئة.
-2. ابحث عن أول خطأ أو قرار غير متوقع—ليس الفشل النهائي فقط.
-3. افحص سياق النموذج ومدخل الأداة قبل ذلك مباشرة.
-4. تحقق من المحاولات الجديدة والكمون والمقاطعات البشرية.
-5. راجع درجات التقييم وقرارات السياسة.
+استخدم `failproofai harness add-path [=]` عندما تعيش الجلسات خارج الموقع المعتاد للبيئة، مثل ملف تعريف آخر أو منزل حاوية أو دليل فريق مرفوع.
-
- تعرف على كيفية الانتقال من ملخص الجلسة إلى الحدث الذي تسبب في النتيجة.
-
\ No newline at end of file
+
+
+ ابحث عن الحدث الذي أدى إلى النتيجة.
+
+
+ انظر ما سمحت به الإنفاذ أو وجهه أو حجبه.
+
+
\ No newline at end of file
diff --git a/docs/ar/sessions/policy-decisions.mdx b/docs/ar/sessions/policy-decisions.mdx
index 37a9b3572..913b8de76 100644
--- a/docs/ar/sessions/policy-decisions.mdx
+++ b/docs/ar/sessions/policy-decisions.mdx
@@ -1,28 +1,63 @@
---
---
title: "قرارات السياسة"
-description: "اطّلع على السياسات التي تم تقييمها أو حظرها أو توجيهها أو السماح بها."
+description: "اطّلع على السياسات التي تم تقييمها أو توجيهها أو حظرها أو مراقبتها."
icon: "shield-check"
---
-يشرح قرارات السياسة ما قامت به الإنفاذ. استخدمه للتحقق من النشر، وقياس معدل الحظر، والعثور على الأنشطة غير المحمية.
+تعرض قرارات السياسة ما قامت به Failproof AI أثناء تشغيل الوكيل.
- 1. انتقل إلى **Observe → policy** واختر نطاق الوقت وبشكل اختياري جهاز واحد.
- 2. راجع الإجراءات المقيّمة والحظر ومعدل الحظر وقرارات Cloud والإجراءات غير المحمية والنشاط أثناء الإيقاف المؤقت.
- 3. قم بتصفية جدول تعيين السياسة وفحص التعيينات المنشورة.
- 4. حدد نقطة على الرسم البياني لفتح القرارات وجلساتها.
+ انتقل إلى **Observe → policy** لمراجعة القرارات ومعدل الحظر والأجهزة والتعيينات المنشرة.
- 
+ 
```bash
- fp events --event-type hook_completed --env production --since 24h
- fp events --search "deny" --since 24h
+ fp guardrails summary --since 24h
+ fp guardrails timeline --since 24h
+ failproofai policies
failproofai config --status
```
- استخدم `failproofai` لحالة الإنفاذ المحلي للجهاز و`fp` لتحقيق أحداث Cloud.
+ يقبل `--since` القيم `1h` أو `6h` أو `24h` أو `7d`. أضف `--machine ` للتركيز على جهاز واحد.
-
\ No newline at end of file
+
+
+## قراءة نشر المراقبة
+
+يقوم وضع المراقبة بتشغيل السياسة الفعلية وتسجيل أي قرار `deny` أو `instruct`. لا يزال بإمكان الوكيل المتابعة.
+
+```bash
+fp fleet deploy --add :observe
+fp guardrails summary --since 24h --machine
+fp fleet deploy --add :enforce
+```
+
+
+ إن `--add ` البسيط يفرض على الفور عندما لا تحتوي السياسة على نشر موجود. أضف `:observe` لنشر ظل.
+
+
+يتم تسجيل قرارات المراقبة غير المسموح بها فقط. يتم تسجيل انتهاء المهلة الزمنية كـ allow، لأن هذا هو ما يحدث أيضًا في وضع الإنفاذ.
+
+القرار deny المسجل ليس إثباتًا على أن أداة الاختبار أوقفت الإجراء. يتم التحقق من رفع أدوات الاتصال عبر جميع أدوات الاختبار المدعومة الـ 12؛ تختلف الأحداث الأخرى. راجع [قدرة الإنفاذ](/ar/reference/harnesses#enforcement-capability).
+
+## التحقيق في النتيجة غير المتوقعة
+
+| ما تراه | تحقق من |
+| --- | --- |
+| لا توجد قرارات | `failproofai config --status` وما إذا كانت الجلسة متوقفة |
+| العديد من الرفوض بدون اسم سياسة | [سلوك فشل السياسة](/ar/policies/failure-behavior) |
+| يتم حظر كل إجراء محمي | ما إذا كانت خدمة `failproofaid` سليمة |
+| قرار حظر لا يمكنك تعطيله | `block-failproofai-commands` مفعّل دائمًا |
+| لا توجد بيانات لـ `--env production` | تستخدم الأجهزة الجديدة البيئة `local` |
+
+
+
+ قارن السياسات المقصودة والمطبقة.
+
+
+ فهم قرارات الإغلاق الفاشل.
+
+
\ No newline at end of file
diff --git a/docs/ar/sessions/queries.mdx b/docs/ar/sessions/queries.mdx
index 2c8e73c86..bbf1224f5 100644
--- a/docs/ar/sessions/queries.mdx
+++ b/docs/ar/sessions/queries.mdx
@@ -1,10 +1,10 @@
---
title: "الاستعلامات"
-description: "استكشف بيانات الجلسات والأحداث والتقييمات باستخدام SQL قابل لإعادة الاستخدام."
+description: "استكشف بيانات الجلسة والحدث والتقييم باستخدام SQL قابل لإعادة الاستخدام."
icon: "database"
---
-الاستعلامات هي الطبقة المرنة التي تقع تحت لوحات التحكم والتدقيقات والتحقيقات. استخدم SQL الفوري لاختبار فكرة، ثم احفظ الاستعلام عندما يصبح جزءًا من سير عمل متكرر.
+الاستعلامات هي الطبقة المرنة الموجودة تحت لوحات التحكم والتدقيقات والتحقيقات. استخدم SQL مرتجلاً لاختبار فكرة، ثم احفظ الاستعلام عندما يصبح جزءاً من سير عمل متكرر.
## إنشاء وتشغيل استعلام
@@ -12,42 +12,92 @@ icon: "database"
1. انتقل إلى **Analyze → Queries** وحدد **new query**.
2. افتح متصفح المخطط واختر الحقول من بيانات الحدث أو الجلسة أو التقييم.
- 3. اكتب SQL، أضف معاملات عند الحاجة، وشغّل الاستعلام.
+ 3. اكتب SQL وأضف معاملات عند الحاجة، ثم شغّل الاستعلام.
4. احفظه باسم ووصف واضحين، ثم استخدم **add to dashboard** عندما يجب مراقبة النتيجة.
- يجمع محرر الاستعلامات بين مخطط الحدث و SQL والمعاملات ومعاينة النتيجة حتى تتمكن من التحقق من السؤال قبل حفظه.
+ يجمع محرر الاستعلام بين مخطط الحدث و SQL والمعاملات ومعاينة النتيجة حتى تتمكن من التحقق من السؤال قبل حفظه.
- 
+ 
- تظهر الاستعلامات المحفوظة بعد ذلك في المكتبة المشتركة، حيث يمكن لزملائك إعادة تشغيلها أو إضافة نتائجها إلى لوحات التحكم.
+ تظهر الاستعلامات المحفوظة بعد ذلك في المكتبة المشتركة، حيث يمكن لزملائك إعادة تشغيلها أو إضافة نتائجهم إلى لوحات التحكم.
- 
+ 
- استخدم اسمًا ووصفًا واضحين حتى تبقى النتيجة مفهومة بدون إعادة فتح SQL الخاص بها.
+ استخدم اسماً ووصفاً واضحاً حتى تبقى النتيجة مفهومة دون إعادة فتح SQL الخاص بها.
+ اعمل بالترتيب الذي تتبعه SQL نفسه: انظر إلى المخطط، شغّل الكود مرتجلاً، ثم احفظه بمجرد حصوله على اسم.
+
```bash
fp query schema
- fp query create "retry loops" --sql "SELECT ..."
- fp query run
- fp query show
- fp query update --sql "SELECT ..."
+ fp query schema events
+
+ fp query run --sql "SELECT agent_id, count() FROM analytics.events GROUP BY agent_id"
+ fp query run --sql @retry-loops.sql
+
+ fp query create "retry loops" --sql @retry-loops.sql --description "repeated tool calls per session"
+ ```
+
+ كل شيء بعد ذلك يأخذ **اسم** الاستعلام وليس معرّفاً:
+
+ ```bash
+ fp query list
+ fp query run "retry loops"
+ fp query show "retry loops"
+ fp query update "retry loops" --sql @retry-loops-v2.sql --yes
+ fp query delete "retry loops" --yes
+ ```
+
+ الأسماء فريدة لكل منظمة، وهذا ما يجعلها مقبضاً آمناً. يتم قبول معرّف بشكل UUID في أي مكان يُقبل فيه الاسم، لكن `fp query list` لا يطبعه — أعمدته هي `name` و `description` و `created by` و `created` (عندما تم إنشاء الاستعلام، وليس عندما تم تحريره آخر مرة). أضف `--show-id` للحصول على عمود معرّف قصير، أو اقرأ `--json`، الذي يحمل دائماً المعرّف الكامل.
+
+ ربط معاملات موضعية لاستعلام محفوظ باستخدام `--arg` (اختصار `--param`)، مكرر مرة واحدة لكل `$1..$N` بالترتيب:
+
+ ```bash
+ fp query run --arg agent-codegen --arg 0.5
```
- استخدم `fp query list` للعثور على معرفات و `fp query delete ` لحذف استعلام محفوظ.
+ | الأمر الفرعي | الصلاحية | ملاحظات |
+ | --- | --- | --- |
+ | `fp query schema [TABLE]` | `queries:read` | مرر اسم جدول للتصفية إلى أعمدته. |
+ | `fp query list` | `queries:read` | `--show-id` يكشف عن المعرّفات؛ `--fields` يوقع الحقول الخام. |
+ | `fp query show ` | `queries:read` | بطاقة البيانات الوصفية بالإضافة إلى SQL الكامل. |
+ | `fp query create --sql ...` | `queries:write` | يتم رفض تصادم الاسم مقدماً. |
+ | `fp query update ` | `queries:write` | مرر واحداً على الأقل من `--name` أو `--sql` أو `--description`. يؤكد أولاً؛ عدم التشغيل ينتهي بدون حفظ. |
+ | `fp query delete ` | `queries:delete` | يؤكد أولاً مع معاينة لما سيتم حذفه. |
+ | `fp query run ` أو `--sql ...` | `queries:run` | واحد بالضبط من الاثنين. يعدل `--limit` و `--all` معاينة الجدول. |
+
+ `update` و `delete` يطلبان تأكيداً فقط على محطة تفاعلية. تحت `--json`، أو مع إعادة توجيه stdin، يسيران بدون سؤال — لذا `--yes` هو للحالة الطرفية وليس للنصوص البرمجية.
+
+ تعمل الاستعلامات ضد مجموعة تحليلات للقراءة فقط. `--sql @file.sql` يقرأ الكود من ملف، وهي الشكل الذي يستحق الاحتفاظ به في التحكم بالإصدار.
+## كتابة استعلام برمجياً
+
+`fp --json query run` ترجع كل صف بغض النظر عن حد معاينة الجدول، بالشكل `{columns: [{name, type}], rows: [[...]], truncated, elapsed_ms}`:
+
+```bash
+fp --json query run "retry loops" | jq '.rows | length'
+```
+
+`fp --json query schema` ترجع `{schema, columns: [{table, column, type, nullable}]}`، وهي الشكل القابل للقراءة بواسطة الجهاز لمتصفح المخطط.
+
+يستحق الفشلان معالجتهما برمز الخروج بدلاً من تحليل النص: اسم لا يطابق شيء يُظهر `✗ no query named "…"` وينهي 6، وخطأ SQL أو تنفيذ يُظهر `✗ query failed — …` مع تفصيل الخادم الخاص به مطوياً.
+
## الاستخدامات الشائعة
-- ابحث عن الجلسات التي تحتوي على استدعاءات متكررة لنفس الأداة.
+- ابحث عن جلسات تتضمن استدعاءات متكررة لنفس الأداة.
- قارن درجات التقييم عبر النماذج أو البيئات.
- قس الوقت بين انتظار الإنسان والاستئناف.
-- حدد الرفض بناءً على السياسة متبوعًا ببديل ناجح.
-- بناء مجموعة سكانية لتدقيق.
+- حدد رفض السياسة متبوعاً ببديل ناجح.
+- بناء مجموعة للتدقيق.
-افتح **Queries → Schema** قبل الكتابة ضد الحقول غير المألوفة. فضّل عوامل التصفية الصريحة للوقت والبيئة، واحتفظ بحدود النتيجة أثناء الاستكشاف.
+افتح المخطط — **Analyze → Queries** في لوحة التحكم، أو `fp query schema` — قبل الكتابة مقابل الحقول غير المألوفة. افضل مرشحات الوقت والبيئة الصريحة، واحتفظ بحدود النتائج أثناء الاستكشاف.
- يمكن للاستعلام تحديد نمط مريب، لكنه لا ينشئ وضع الفشل بمفرده. افتح آثارًا تمثيلية أو قم بتشغيل تدقيق قبل تحويل النتيجة إلى سياسة.
-
\ No newline at end of file
+ يمكن لاستعلام أن يحدد نمطاً مريباً، لكنه لا يؤسس وضع الفشل بنفسه. افتح الآثار التمثيلية أو قم بتشغيل تدقيق قبل تحويل النتيجة إلى سياسة.
+
+
+
+ ضع استعلاماً محفوظاً على لوحة مشتركة بمجرد أن تستحق النتيجة المراقبة.
+
\ No newline at end of file
diff --git a/docs/ar/sessions/read-a-trace.mdx b/docs/ar/sessions/read-a-trace.mdx
index ff36faa32..9892a604b 100644
--- a/docs/ar/sessions/read-a-trace.mdx
+++ b/docs/ar/sessions/read-a-trace.mdx
@@ -1,48 +1,59 @@
---
+---
title: "قراءة التتبع"
-description: "ابحث عن الحدث الذي غيّر مسار جلسة الوكيل."
+description: "ابحث عن الحدث الذي غيّر مسار تشغيل الوكيل."
icon: "route"
---
-يحول التتبع تدفق الأحداث المسطح إلى القصة السببية للتشغيل. اقرأه من أول اختلاف، وليس للخلف من آخر خطأ.
-
-## فتح التتبع
+التتبع هو الخط الزمني لتشغيل وكيل واحد. ابدأ من أول حدث غير متوقع، وليس من الخطأ النهائي.
-
- 1. انتقل إلى **Observe → Sessions** وافتح جلسة.
- 2. استخدم ملخص الملف الشخصي للتحقق من النتيجة والتوقيت والأخطاء ودرجات التقييم.
- 3. افحص الخط الزمني والخريطة المصغرة. صفّ أنواع الأحداث أو الوقت عندما تكون الجلسة كبيرة.
- 4. حدد حدثاً لفحصه. استخدم **export** للحصول على JSON المقيِّم، أو انسخ عنوان URL للصفحة لمشاركة رابط عميق إلى الأدلة المحددة.
+
+ 1. افتح **Observe → Sessions**.
+ 2. اختر جلسة.
+ 3. ابحث عن أول خطأ أو استدعاء أداة غير معتاد أو انتظار طويل أو قرار سياسة.
+ 4. افتح الحدث وافحص الطلب والاستجابة والإدخال والإخراج.
- 
+ 
```bash
fp --json sessions --session-id
- fp events --session-id --order asc --all
- fp --json events --full --session-id --all
+ fp events --session-id --order asc --all --limit 5000
+ fp --json events --full --session-id --all --limit 2000
```
- استخدم تدفق الأحداث الخفيف أولاً. اطلب الحمولات الكاملة فقط عندما لا تحتوي ملخصات الأحداث على أدلة كافية.
+ استخدم `--full` فقط عندما يفتقر ملخص الحدث إلى أدلة كافية. قيمة `next_cursor` غير فارغة تعني أن الحد تم الوصول إليه قبل النهاية.
-
-
- تأكد من الوكيل والبيئة والتوقيت والنتيجة والمدة، ثم ابحث عن الأخطاء والفترات الطويلة والأدوات المتكررة والانتظار البشري والقرارات السياسية المرفوضة.
-
-
- افحص طلبه واستجابته ومدخل الأداة ومخرجاتها ومعرّف الارتباط. يكون المحتوى الحساس مرئياً فقط عند تفعيل التقاط النسخة والسماح بأذوناتك.
-
-
- غالباً ما تكون السبب في حدث واحد أبكر: استجابة نموذج غير صحيحة أو نتيجة أداة مفقودة أو افتراض قديم.
-
-
- أضف الجلسة إلى نطاق التدقيق أو اربطها بمشكلة أو استخدم وضع الفشل لإنشاء سياسة.
-
-
+## اتبع الأدلة
+
+1. تأكد من الوكيل والهدف والبيئة والنتيجة.
+2. ابحث عن أول خطأ أو قرار غير متوقع.
+3. افحص الحدث الذي يسبقه مباشرة.
+4. اتبع معرفات المطابقة عبر أزواج الطلب والاستجابة.
+5. حول الأدلة إلى تدقيق أو مشكلة أو سياسة.
+
+| الزوج | الحقل المطابق |
+| --- | --- |
+| طلب النموذج واستجابته | `request_id` |
+| استدعاء الأداة والنتيجة | `tool_call_id` |
+| بدء الخطاف واكتماله | `hook_id` |
+| إيقاف الوكيل واستئناافه | `pause_id` |
+| انتظار الإنسان والإدخال | `input_id` |
+
+يظهر القرار على `hook_completed`. يسمي الصف النتيجة ومصدر السياسة. يظهر القرار في وضع المراقبة كسماح مع النتيجة المحتملة في `failproofai_observed`.
- المدة الطويلة لا تعني دائماً زمن انتظار النموذج. افصل بين وقت النموذج والأداة والخطاف والانتظار البشري قبل تحديد ما يجب إصلاحه.
-
\ No newline at end of file
+ مدة الجلسة الطويلة ليست دائماً كمون النموذج. افصل بين وقت النموذج والأداة والخطاف والانتظار البشري قبل تقرير ما يجب إصلاحه.
+
+
+
+
+ انظر ما السمحت به السياسة أو وجهته أو حظرته.
+
+
+ افهم أنواع الأحداث والتسليم.
+
+
\ No newline at end of file
diff --git a/docs/ar/sessions/tools.mdx b/docs/ar/sessions/tools.mdx
index a5932a85b..4d8b25e94 100644
--- a/docs/ar/sessions/tools.mdx
+++ b/docs/ar/sessions/tools.mdx
@@ -1,26 +1,38 @@
---
----
title: "الأدوات"
-description: "ابحث عن الأدوات البطيئة أو الفاشلة أو المستخدمة بكثرة عبر جلسات الوكيل."
+description: "ابحث عن الأدوات البطيئة أو الفاشلة أو المستخدمة بكثرة عبر تشغيلات الوكلاء."
icon: "wrench"
---
-تجمع الأدوات استدعاءات الأدوات عبر الجلسات حتى تتمكن من مقارنة زمن الاستجابة توزيع الاستدعاءات.
+تعرض صفحة الأدوات ما يستدعيه الوكلاء، وعدد مرات فشل الاستدعاءات، والجلسات التي تتأثر بها.
+
+تأتي أسماء الأدوات من كل جهاز وكيل، لذلك قد تظهر نفس الإمكانية بأسماء مختلفة. على سبيل المثال، قد يظهر استدعاء shell كـ `Bash` أو `exec` أو `Shell` أو `terminal` أو `run_command`. شغّل `fp list tools` قبل بناء مرشح.
-
- 1. انتقل إلى **Observe → Tools**.
- 2. قم بالتصفية حسب البيئة أو اسم الأداة أو الوكيل أو معرّف الجلسة.
- 3. راجع زمن الاستجابة وتوزيع الأدوات.
- 4. حدد نقطة على الرسم البياني أو قطاع أداة لفتح الأحداث والجلسات المطابقة.
+
+ اذهب إلى **Observe → Tools**. قم بالتصفية حسب البيئة أو الأداة أو الوكيل أو الجلسة.

-
+
```bash
fp list tools
- fp events --event-type tool_use,tool_result --env production --since 24h
- fp --json events --full --session-id --all
+ fp events --event-type tool_use,tool_result --since 24h
+ fp errors --event-type tool_result --since 24h
+ fp --json events --full --event-type tool_use,tool_result --session-id --all --limit 2000
```
+
+ استخدم `--full` عندما تحتاج إلى حقول الحمولة مثل مدة كل استدعاء.
-
\ No newline at end of file
+
+
+استخدم هذه الصفحة للعثور على الأخطاء المتكررة، أو مقارنة التشغيلات الناجحة والفاشلة، أو التأكد من أن الأداة المستهدفة بسياسة ما تُستخدم فعلاً.
+
+
+
+ افتح الجلسات خلف أخطاء الأدوات.
+
+
+ اطّلع على أسماء الأدوات الأساسية وقرارات السياسة.
+
+
\ No newline at end of file
diff --git a/docs/ar/start/concepts.mdx b/docs/ar/start/concepts.mdx
index b97fc383f..6c561c0a1 100644
--- a/docs/ar/start/concepts.mdx
+++ b/docs/ar/start/concepts.mdx
@@ -1,27 +1,52 @@
---
---
title: "المفاهيم الأساسية"
-description: "المجموعة الصغيرة من المفاهيم المستخدمة في جميع أنحاء Failproof AI."
+description: "المصطلحات المستخدمة لمراقبة ومراجعة وحماية الوكلاء."
icon: "boxes"
---
-| المفهوم | ما معناه | ما يمكنك تحقيقه |
-| --- | --- | --- |
-| Session | مهمة وكيل واحدة أو تشغيل واحد | إعادة بناء نتيجة فردية |
-| Event | إجراء واحد مسجل في جلسة | فحص استدعاء نموذج أو استخدام أداة أو خطأ أو إجراء بشري أو قرار سياسة |
-| Trace | عرض الجلسة المرتب والمتداخل | فهم السببية بدلاً من قراءة السجلات المنفصلة |
-| Evaluation | درجة أو حكم على جلسة | تتبع الجودة أو الامتثال أو التكلفة أو الكمون بشكل مستمر |
-| Audit | مراجعة لمجموعة جلسات مختارة | البحث عن أنماط الفشل برهدف محدد وتكرار |
-| Finding | فشل مدعوم بالأدلة تم اكتشافه من خلال تدقيق | رؤية نمط الفشل والشدة والجلسات المتأثرة |
-| Issue | سجل استجابة دائم | إسناد ومناقشة وحل اكتشاف أو حادثة تنبيه |
-| Alert | قاعدة تكتشف التكرار | إخطار المستجيبين عندما تعود حالة معروفة |
-| Policy | قاعدة يتم تقييمها أثناء نشاط الوكيل | مراقبة السلوك الخطر أو حظره أو إعادة توجيهه |
-| Deployment | طرح سياسة مرقمة على الآلات | التحكم في مكان تشغيل السياسة وإرجاعها بأمان |
+يسجل Failproof AI ما يفعله الوكلاء ويقرر ما قد يفعلونه.
-## حلقة الموثوقية
+## المراقبة
-ابدأ من الأدلة. تُظهر الجلسة ما حدث. يحدد التدقيق ما إذا كان خطأ معزول أم نمط. يحدد الاكتشاف نمط الفشل؛ تملك المشكلة الاستجابة. تمنع السياسة نفس السلوك، بينما تخبرك التنبيهات إذا عادت الحالة.
+| المصطلح | المعنى |
+| --- | --- |
+| Session | تشغيل واحد للوكيل |
+| Event | إجراء واحد داخل جلسة |
+| Trace | العرض المرتب لجلسة |
+| Evaluation | درجة أو حكم |
+| Audit | مراجعة العديد من الجلسات |
+| Finding | دليل على نمط فشل |
+| Issue | الاستجابة التي يملكها شخص ما |
+| Alert | قاعدة تكتشف التكرار |
+
+## الإنفاذ
+
+| المصطلح | المعنى |
+| --- | --- |
+| Harness | البيئة التي يعمل فيها الوكيل |
+| Hook | نقطة يطلب فيها Harness اتخاذ قرار |
+| Policy | قاعدة تسمح أو توجه أو تحظر |
+| Policy pack | مجموعة سياسات مصنفة يمكن لأي شخص تثبيتها |
+| Daemon | الخدمة المحلية التي تقيّم السياسات |
+| Deployment | السياسات المعينة لجهاز |
+
+## سير العمل
+
+```text
+Session → Audit → Finding → Issue → Policy
+```
+
+ابدأ بالأدلة. جد الفشل المتكرر، وحدد الاستجابة، ثم منعه.
+
+تُرجع السياسة `allow` أو `instruct` أو `deny`. يعتمد التوجيه عبر `instruct` على Harness؛ استخدم `deny` عندما يجب إيقاف الإجراء.
+
+وضع المراقبة منفصل عن القرار. ينفذ السياسة الفعلية ويسجل ما ستفعله مع السماح للوكيل بالمتابعة.
- يقوم failproofai audit محلي بمسح سجل الوكيل المحلي. يقوم تدقيق Cloud المتكرر بمراجعة الجلسات المخزنة في Failproof AI Cloud. وهي سير عمل منفصلة بنطاق وجدولة مختلفة.
-
\ No newline at end of file
+ `fp fleet deploy --add ` بدون تعديل ينفذ فوراً. أضف `:observe` لنشر ظلي.
+
+
+الإعداد لا يختار أي حزمة سياسات. قبل إضافة واحدة، فقط `block-failproofai-commands` يعمل. يحتوي الكتالوج المترجم على 39 سياسة في 9 فئات.
+
+اطّلع على [harnesses المدعومة](/ar/reference/harnesses#enforcement-capability) قبل افتراض أن الحدث يمكن أن يحجب في كل بيئة وكيل.
\ No newline at end of file
diff --git a/docs/ar/start/first-audit.mdx b/docs/ar/start/first-audit.mdx
index 6324283d0..2ac7aa3b7 100644
--- a/docs/ar/start/first-audit.mdx
+++ b/docs/ar/start/first-audit.mdx
@@ -1,30 +1,65 @@
---
+---
title: "تشغيل أول فحص فشل لديك"
-description: "أنشئ تدقيقاً من لوحة معلومات Cloud أو باستخدام fp CLI واستعرض نتائجه الأولى."
+description: "امسح سجل الوكيل على هذه الآلة باستخدام failproofai audit، أو أنشئ فحصًا متكررًا للجلسات المخزنة في Failproof AI Cloud."
icon: "scan-search"
---
-يحول التدقيق مجموعة من الجلسات إلى نتائج فشل مصنفة ومدعومة بالأدلة. ابدأ بسؤال فشل واحد محدد.
+يحول التدقيق مجموعة من الجلسات إلى نتائج فشل مصنفة ومدعومة بالأدلة. ابدأ بسؤال فشل ضيق واحد.
+
+هناك نوعان من التدقيق. يقرآن بيانات مختلفة ويجيبان على أدوات مختلفة:
+
+| التدقيق | يقرأ | يحتاج إلى حساب | تظهر النتائج في |
+| --- | --- | --- | --- |
+| محلي — `failproofai audit` | سجل الوكيل الموجود بالفعل على هذه الآلة | لا | `http://localhost:8020/audit` |
+| سحابي — **Analyze → Audits**، أو CLI `fp` | الجلسات المخزنة في Failproof AI Cloud | نعم | لوحة تحكم السحابة |
+
+شغّل النسخة المحلية أولاً. لا تحتاج إلى شيء سوى CLI. تبقى النتائج محلية، بينما يتم إرسال بيانات telemetry مجهولة الهوية بشكل افتراضي ما لم تعيّن `FAILPROOFAI_TELEMETRY_DISABLED=1`.
-
+
+ ```bash
+ failproofai audit
+ ```
+
+ يمسح كل سجل وكيل مدعوم يجده على هذه الآلة، ويعيد تشغيل نشاط الأداة من خلال كتالوج السياسات المدمج، ثم يفتح **http://localhost:8020/audit**. اترك العملية تعمل أثناء قراءة النتائج؛ اضغط على Ctrl+C عندما تنتهي.
+
+ يبقى التحليل والنتائج على هذه الآلة. يتم إرسال بيانات telemetry مجهولة الهوية بشكل افتراضي ما لم تكن معطّلة. بعد أن توافق على الجدولة، تُرسل كل عملية مسح أيضًا بيانات وصفية للآلة وقد ترسل ملخص نتائج محدود.
+
+ | العلم | ما يفعله |
+ | --- | --- |
+ | `--schedule [days]` | امسح بمؤقت وأرسل النتائج بالبريد الإلكتروني. الافتراضي 7 أيام، النطاق 1–90. يوقّعك في المرة الأولى. |
+ | `--email ` | مع `--schedule`، يوفر عنوان التقرير بدلاً من الطلب. |
+ | `--no-schedule` | أوقف المؤقت. يتركك موقّعًا. |
+ | `--status` | ما إذا كانت الجدولة قيد التشغيل، حيث تذهب التقارير، حالة daemon، والموعد المقرر للمسح التالي. |
+
+ ```bash
+ failproofai audit --schedule 7 --email reliability@example.com
+ failproofai audit --status
+ ```
+
+ انظر [Audit local agent history](/ar/audits/local-audit) لمعرفة السجلات التي تقرأها كل محول وكيف يعمل المسح المجدول.
+
+
-
- في الشريط الجانبي للـ Cloud، انتقل إلى **Analyze → Audits**. حدد **new audit**.
+
+ في شريط جانب السحابة، اذهب إلى **Analyze → Audits**. اختر **new audit**.
-
- أدخل الاسم والهدف فشل مباشر، مثل "البحث عن جلسات الإنتاج التي تعيد محاولة استدعاء الدفع الفاشل نفسه دون تغيير المدخلات أو التصعيد." حدد الوكيل والبيئة ونطاق الوقت والجدول الزمني. أضف ملخصاً قصيراً وعناوين URL مرجعية عندما يحتاج المدقق إلى قواعد سير العمل لديك.
+
+ أدخل اسمًا وهدف فشل مباشر، مثل "البحث عن جلسات الإنتاج التي تعيد محاولة استدعاء دفع فاشل بدون تغيير الإدخال أو التصعيد." حدد الوكيل والبيئة والنافذة الزمنية والجدول. أضف ملخص قصير وعناوين URL مرجعية عندما يحتاج المدقق إلى قواعد سير عملك.
-
- حدد **create audit**. يتم وضع التشغيل الأول في قائمة الانتظار على الفور. افتح بطاقة التدقيق لمراقبتها وهي تنتقل من قائمة الانتظار إلى التشغيل إلى اكتمل.
+
+ اختر **create audit**. يتم وضع التشغيل الأول في قائمة الانتظار على الفور. افتح بطاقة التدقيق لمراقبة انتقالها من قائمة الانتظار إلى التشغيل إلى الانتهاء.
- بعد اكتمال التشغيل، افتح نتيجة واستعرض دليل الجلسة الخاص بها. يمكنك بعد ذلك الإقرار أو التعيين أو الرفض أو كتم الصوت أو حل النتيجة.
+ بعد اكتمال التشغيل، افتح نتيجة واستعرض دليل الجلسة الخاص بها. يمكنك بعد ذلك الإقرار بها أو تعيينها أو رفضها أو كتمها أو حلها.
- 
+ 
-
+
+ `fp` هي Failproof AI Cloud CLI. تقرأ ما خزنته السحابة؛ وهي برنامج مختلف عن `failproofai`، الذي ينفذ على هذه الآلة.
+
```bash
fp audits create payment-retry-failures \
--description "Find production sessions that retry a failed payment call without changing input or escalating" \
@@ -37,7 +72,7 @@ icon: "scan-search"
fp audits finding
```
- أضف السياق المرجعي، ثم حدثه عند تغيير المصدر:
+ أضف سياق مرجعي، ثم حدّثه عندما يتغير المصدر:
```bash
fp audits context-set payment-retry-failures --url https://example.com/payment-runbook
@@ -45,8 +80,8 @@ icon: "scan-search"
fp audits run payment-retry-failures
```
- استخدم `fp audits ack `، `fp audits assign --to `، `fp audits dismiss `، `fp audits mute `، `fp audits resolve `، أو `fp audits reopen ` لنقل النتيجة عبر الفحص.
+ استخدم `fp audits ack `، أو `fp audits assign --to `، أو `fp audits dismiss `، أو `fp audits mute `، أو `fp audits resolve `، أو `fp audits reopen ` لنقل نتيجة خلال الفحص.
-بعد ذلك، [منع أول فشل لديك باستخدام سياسة](/ar/start/first-policy) لإجراء مؤكد قابل للتكرار.
\ No newline at end of file
+بعد ذلك، [منع أول فشل لديك باستخدام سياسة](/ar/start/first-policy) لإجراء قابل للتكرار مؤكد.
\ No newline at end of file
diff --git a/docs/ar/start/first-policy.mdx b/docs/ar/start/first-policy.mdx
index b3eb9bca4..2c8f56748 100644
--- a/docs/ar/start/first-policy.mdx
+++ b/docs/ar/start/first-policy.mdx
@@ -1,48 +1,70 @@
---
---
-title: "منع فشلك الأول باستخدام سياسة"
-description: "قم بتأليف نسخة من السياسة، ونشرها في وضع المراقبة، ثم فرضها."
+title: "منع فشلك الأول"
+description: "فعّل سياسة تمت مراجعتها أو اختبر سياسة خاصة بك."
icon: "shield-check"
---
-استخدم السياسة فقط بعد أن تتمكن من وصف الإجراء غير الآمن والإجراءات المشروعة التي يجب أن تبقى مسموحة.
+ابدأ بسلوك تريد إيقافه وإجراء شرعي يجب أن يستمر في العمل.
-
-
-
-
- انتقل إلى **Admin → policy editor**. ابدأ بسياسة العرض التوضيحي، وراجع أو عدّل المصدر الخاص بها، ثم حدد **publish version**. ينشئ النشر النسخة غير القابلة للتغيير التي يمكنك نشرها على الأجهزة.
+## جرب سياسة معروضة أولاً
- 
-
-
- انتقل إلى **Admin → enforcement**، وقم بتوسيع الجهاز المستهدف، وحدد **edit this machine**. أضف سياسة العرض التوضيحي المنشورة، وثبّت نسختها، واختر **observe**، ثم طبّق النشر.
+```bash
+failproofai policies
+failproofai policies add block-rm-rf
+```
- 
-
-
- قم بتشغيل جلسة وكيل جديدة على هذا الجهاز، ثم افتح **Observe → policy**. حدد الجهاز وتأكد من ظهور سياسة العرض التوضيحي في تعيين السياسة وجدول أحداث القرار. يسجل وضع المراقبة ما ستفعله السياسة دون حجب الإجراء.
+يتضمن Failproof AI 39 سياسة معروضة. تحقق من [الكتالوج](/ar/policies/builtin-catalog) قبل كتابة سياسة جديدة.
- 
-
-
-
-
- تأليف سياسات السحابة ونشر الأسطول هي سير عمل إدارية. استخدم واجهة سطر الأوامر المحلية للتحقق من نفس السياسة قبل نشرها:
+## اكتب واختبر سياستك الخاصة
+
+
```bash
- failproofai policies --install --custom ./payment-retry.policies.ts \
- --cli claude --scope project
- failproofai config --status
+ failproofai publish --init guards.mjs
```
- استخدم `fp` للتحقق من قرارات السياسة المرئية من السحابة:
+ هذا ينشئ سياسة تحظر `git push --force`. عدّلها لقاعدتك.
+
+
+ ```bash
+ failproofai policies -i -c ./guards.mjs
+ ```
+
+ اطلب من الوكيل تنفيذ الإجراء المحظور، ثم تحقق من **Policies → Activity** في لوحة المعلومات المحلية.
+
+
+ ضع ملف `*policies.mjs` ضمن `.failproofai/policies/` لتحميله تلقائياً.
+
+ أزل الملفات المخصصة الصريحة باستخدام:
```bash
- fp events --event-type hook_completed --env production --since 24h
- fp sessions --env production --since 24h
+ failproofai policies -u -c
```
+
+
+
+## شاركها
+
+انشر حزمة عامة:
+
+```bash
+failproofai publish
+```
+
+يمكن لأي شخص تثبيتها باستخدام `failproofai policies add /`. أضف موضوع GitHub `failproofai-policies` بنفسك حتى يتمكن [Policy Hub](https://befailproof.ai/policy-hub/) من فهرستها.
+
+للنشر على Cloud:
+
+```bash
+fp policies publish checkout-guard ./guards.mjs
+fp fleet deploy --add checkout-guard:observe
+fp guardrails summary --since 24h --machine
+fp fleet deploy --add checkout-guard:enforce
+```
+
+
+ أمر `--add checkout-guard` بدون بادئة يفرض فوراً. أضف `:observe` لتسجيل ما ستفعله السياسة دون حظر الوكيل.
+
- كلتا الخطوتين متاحتان أيضًا من واجهة سطر الأوامر: `fp policies publish ` تنشئ نسخة و `fp fleet deploy --add ` توضعها على جهاز. المعادلات على لوحة التحكم هي **Admin → policy editor** و **Admin → enforcement**.
-
-
\ No newline at end of file
+انظر إلى [نشر حزمة](/ar/policies/publish-a-pack) أو [نشر السياسات](/ar/policies/deploy) للعملية الكاملة.
\ No newline at end of file
diff --git a/docs/ar/start/integrations.mdx b/docs/ar/start/integrations.mdx
index b789e01c5..b29a4d8c3 100644
--- a/docs/ar/start/integrations.mdx
+++ b/docs/ar/start/integrations.mdx
@@ -1,31 +1,45 @@
---
-title: "الاستخدام الكامل لعاملك"
-sidebarTitle: "الأطر"
-description: "قم بتوصيل أي إطار عمل مدعوم للعامل مع Failproof AI باستدعاء واحد."
+---
+title: "قم بتجهيز وكيلك"
+sidebarTitle: "الأطر العملية"
+description: "قم بربط أي إطار عمل وكيل مدعوم بـ Failproof AI من خلال استدعاء واحد."
icon: "plug"
---
-عاملك ينتج بالفعل كل ما يستحق التسجيل — استدعاءات النموذج، استدعاءات الأدوات، حدود العقد، انتظارات العاملين، الأخطاء. الإطار يتخلص منها. SDK يحتفظ بها.
+وكيلك ينتج بالفعل كل شيء يستحق التسجيل — استدعاءات النموذج، استدعاءات الأداة، حدود العقد، انتظار الإنسان، الأعطال. الإطار العملي يتخلص منها. SDK تحتفظ بها.
-
- عامل كتبته بنفسك، أو واحد غير مدرج هنا.
+
+ وكيل كتبته بنفسك، أو واحد غير مدرج هنا.
- الرسوم البيانية، العقد، الأدوات، أدوات المسترجعات، النماذج.
+ الرسوم البيانية، العقد، الأدوات، المسترجعات، النماذج.
- الطواقم، التدفقات، العوامل حسب الدور، الأدوات.
+ الطواقم، التدفقات، الوكلاء حسب الدور، الأدوات.
- سير العمل، الخطوات، عوامل الدوال، أدوات المسترجعات.
+ سير العمل، الخطوات، وكلاء الدوال، المسترجعات.
- عوامل مكتوبة، القدرات، الأدوات، المحاولات الجديدة.
+ الوكلاء المكتوبة، الإمكانيات، الأدوات، إعادة المحاولة.
-## ثلاثة أسطر، أي إطار عمل كان
+## قبل أن تبدأ
+
+شيئان يفترض هذا المسار وجودهما، لا أحدهما يفعله الكود أدناه من أجلك:
+
+| المتطلب | السبب |
+| --- | --- |
+| Python 3.10 أو أحدث | الحد الأدنى الذي تعلنه SDK. |
+| آلة تم إعدادها باستخدام `failproofai config` | هذا الأمر يثبت daemon failproofaid، و daemon هو الشيء الوحيد الذي ينقل ما تكتبه SDK. بدونها، تتراكم الدفعات في دليل spool ولا تغادر أبداً. |
+
+
+ **هذا المسار يسجل؛ إنه لا ينفذ.** SDK تلتقط ما فعله وكيلك. تعمل السياسات من خطاف داخل CLI وكيل، لذا فرض السياسة على وكيل إطار العمل يعني وضع خطاف في وقت التشغيل الخاص بك — انظر [السياسات](/ar/policies/overview).
+
+
+## ثلاثة أسطر، أي إطار عمل
```bash LangGraph
@@ -53,13 +67,13 @@ pip install failproofai-sdk
import failproofai_sdk
failproofai_sdk.configure(environment="production")
-failproofai_sdk.instrument() # detects the frameworks you imported
+failproofai_sdk.instrument() # يكتشف الأطر التي استوردتها
with failproofai_sdk.session():
- ... # your existing agent call, unchanged
+ ... # استدعاء وكيلك الموجود، دون تغيير
```
-لا توجد مزخرفات على وظائفك، لا رد نداء يتم تمريره لاستدعاءاتك، لا معرفات يتم خيطها عبر الكود. فقط الاستدعاء داخل الجلسة يختلف:
+لا ديكوريترز على دوالك، لا callback تُمرر إلى استدعاءاتك، لا ids مرسلة عبر الكود. فقط الاستدعاء داخل الجلسة يختلف:
@@ -74,7 +88,7 @@ with failproofai_sdk.session():
```python
- await agent.run("...") # under `async with failproofai_sdk.session():`
+ await agent.run("...") # تحت `async with failproofai_sdk.session():`
```
@@ -91,30 +105,44 @@ with failproofai_sdk.session():
-التثبيت الإضافي يثبت **الإطار**. كل محول يأتي في عجلة النقل الأساسية، لذلك المشروع الذي يمتلك بالفعل إطار العمل لا يحتاج إلى أي شيء إضافي على الإطلاق.
+التثبيت الإضافي يثبت **الإطار العملي**. كل محول يأتي في wheel الأساسي، لذا المشروع الذي يحتوي بالفعل على إطاره لا يحتاج إلى أي إضافي على الإطلاق.
## تحقق من وصوله
-قم بتشغيل جلسة واحدة مزودة بالأدوات، ثم افتح **Observe → Sessions** وحدد بيئتك. يظهر التشغيل كتتبع معاد الإنشاء.
+شغّل جلسة واحدة مُجهزة، ثم افتح **Observe → Sessions** واختر بيئتك. يظهر التشغيل كتتبع مُعاد بناؤه.
-إذا لم يصل شيء، تأكد من اتصال الجهاز باستخدام `failproofai config --status`. انظر [إعداد المراقبة](/ar/start/setup).
+إذا لم يصل شيء، تأكد من إعداد الآلة والاتصال بها باستخدام `failproofai config --status`. إذا لم تكن كذلك، شغّل `failproofai config`. انظر [اختر إعدادك](/ar/start/setup).
- لا تتحقق من دليل الاسطوانة لتأكيد التسليم. يجمع مجند Failproof كل دفعة ويحذفها في غضون ميلي ثانية، لذا يسبق القارئ الجامع ويظهر أحداثًا أقل بكثير من تلك المنبعثة.
+ لا تتحقق من دليل spool لتأكيد التسليم. يجمع daemon Failproof كل دفعة ويحذفها في ميلي ثانية، لذا قراءتها تتسابق مع المجمّع وتُظهر أحداث أقل بكثير مما تم إصدارها.
+لإثبات أن SDK تكتب على الإطلاق، قم بإيقاف daemon أولاً، ثم شغّل جلستك وابحث في `~/.failproofai/custom-agents/events/`. مع تشغيل daemon، دليل فارغ هو الحالة الصحية.
+
+
+```bash Linux
+sudo systemctl stop failproofaid@$USER
+```
+
+```bash macOS
+sudo launchctl bootout system/ai.failproof.failproofaid.$USER
+```
+
+
+شغّل `failproofai config` بعدها لإعادتها. أثناء توقف daemon، أحداث الخطاف على هذه الآلة ليس لديها محقق ويتم رفضها، لذا قم بإيقافها فقط لمدة ما تستغرقه الفحص.
+
## التالي
-كل سريع بدء أعلاه يرتبط بدليله الكامل — ما يتم تسجيله، والخيارات، والبث، وتسمية النطاق، والمشاكل التي يواجهها الناس بالفعل. يعيشون تحت **Trace Agents → Plug in your agent**.
+كل quickstart أعلاه يرتبط بدليله الكامل — ما يتم تسجيله، الخيارات، البث، تسمية الـ span، والمشاكل التي يواجهها الناس فعلاً. تعيش تحت **Trace Agents → Plug in your agent**.
- نموذج البيانات، المعرفات، أنواع الأحداث، وكيف تصل الأحداث إلى السحابة.
+ نموذج البيانات، الـ ids، أنواع الأحداث، وكيفية وصول الأحداث إلى Cloud.
-
+
اتبع السببية عبر جلسة بدلاً من السجلات المنفصلة.
- قم بمراجعة الجلسات التي التقطتها للتو.
+ دقق في الجلسات التي التقطتها للتو.
\ No newline at end of file
diff --git a/docs/ar/start/quickstart.mdx b/docs/ar/start/quickstart.mdx
index cedf76086..e3feda9b6 100644
--- a/docs/ar/start/quickstart.mdx
+++ b/docs/ar/start/quickstart.mdx
@@ -1,84 +1,103 @@
---
title: "البدء السريع"
-description: "التقط جلسة وكيل، ابحث عن عطل، وابدأ في منعه."
+description: "قم بإعداد جهاز واحد واختر السياسات وانظر إلى ما يفعله وكلاؤك."
icon: "zap"
---
-يوضح هذا البدء السريع كيفية جعل جهاز واحد يرسل الجلسات، وتشغيل تدقيق، ونشر سياسة. استخدم المهارة لإعداد Failproof AI، أو اتبع الخطوات اليدوية.
+قم بإعداد Failproof AI على جهاز واحد، ثم ابقَ محليًا أو تواصل مع Cloud.
-**أي مسار هو مسارك؟** إذا كان وكيلك يعمل في أحد [الأطر](/ar/reference/harnesses) الـ 12 المدعومة — واجهة سطر أوامر لكتابة الأكواد، أو بوابة مثل Hermes أو OpenClaw — اتبع الخطوات أدناه؛ تحتاج Node.js 20.9 أو إصدار أحدث. إذا كان وكيلك لا يحتوي على إطار، فقم بتجهيزه باستخدام [Python SDK](/ar/reference/custom-agents) للتتبع والتدقيقات، ثم عد إلى [تشغيل فحص الفشل الأول الخاص بك](/ar/start/first-audit)؛ الإنفاذ في هذا المسار يتطلب خطاف في وقت التشغيل الخاص بك.
+إذا كان وكيلك يعمل في [harness مدعوم](/ar/reference/harnesses)، اتبع هذه الخطوات. بالنسبة للوكلاء المبنيين باستخدام LangChain أو CrewAI أو LlamaIndex أو Pydantic AI أو بيئة التشغيل الخاصة بك، ابدأ بـ [instrument your agent](/ar/start/integrations).
-
-
-
-
- ```bash
- npx skills add FailproofAI/skills
- ```
-
-
- ```text
- Set up Failproof AI for this project, connect this machine, install the right hooks and policies, and verify that a session arrives.
- ```
-
- يقوم وكيلك بفحص المشروع، واختيار التكامل ذي الصلة، وتنفيذ الإعداد، والتحقق منه. راجع [مستودع مهارات FailproofAI](https://github.com/FailproofAI/skills) للحصول على المهارات الفردية وخيارات التثبيت المتقدمة.
-
-
-
-
- ## قبل أن تبدأ
+## دع وكيلك يوجه الإعداد
-1. افتح [لوحة تحكم Failproof AI](https://app.befailproof.ai) وأنشئ حسابًا أو سجل الدخول باستخدام بريدك الإلكتروني للعمل.
-2. انتقل إلى **Administration → Keys** وأنشئ مفتاحًا باستخدام `events:add` و `policies:pull`.
-3. انسخ السر لمرة واحدة وخزنه على الجهاز الهدف:
+قم بتثبيت مهارة Failproof AI الشاملة في وكيل متوافق:
```bash
-export FAILPROOFAI_KEY=""
+npx skills add FailproofAI/skills
```
- ## التثبيت
+يقوم هذا بتثبيت المهارة الشاملة ومهارات الأخصائيين الخاصة بها. استخدم `--skill failproofai` إذا كنت تريد المهارة الشاملة فقط. إنها تفهم الإعداد المحلي و Cloud وصحة daemon والجلسات والتدقيق والسياسات وحل المشاكل. فهي توجه العمل وتوجه المهام المتخصصة إلى مهارة Failproof AI الصحيحة؛ وهي لا تحل محل تثبيت CLI أدناه.
+
+## إعداد الجهاز
-
+
```bash
npm install -g failproofai
- failproofai config --connect https://app.befailproof.ai --token "$FAILPROOFAI_KEY"
+ failproofai config
```
- يتم إرسال نسخ جلسات العمل بشكل افتراضي. أضف `--no-transcripts` للإبلاغ عن نشاط الخطاف وقرارات السياسة دون محتوى النسخة.
+ يقوم الإعداد بتثبيت خدمة الخلفية وربط كل وكيل مدعوم يجده. قد يطلب وصول المسؤول مرة واحدة. يدعم Linux و macOS.
+
- إذا كان لديك هذا الجهاز بالفعل سجل وكيل، فقم بمعاينة واستيراد آخر سبعة أيام، ثم انتظر انتهاء التسليم. تخطَّ هذه الخطوة على جهاز جديد.
+
+ الإعداد لا يختار أي مجموعة سياسات. أضف مجموعة Failproof AI:
```bash
- failproofai backfill --since 7d --dry-run
- failproofai backfill --since 7d
- failproofai flush --wait
+ failproofai policies add FailproofAI/policies
+ failproofai policies
```
- افتح **Sessions** في Failproof AI واختر جلسة تم استيرادها.
+ الأمر الثاني يعرض كل سياسة على هذا الجهاز وما إذا كانت مفعلة. حتى تضيف مجموعة، فقط `block-failproofai-commands` يعمل.
-
- يرفق هذا Failproof AI بإطارك ويثبت السياسات المدمجة الـ 39. استخدمها لمشاهدة قرارات السياسة المحلية وتجربة الإنفاذ قبل أن يدقق Failproof AI جلساتك وينشئ سياسات لوكلائك.
-
- دع المثبت يكتشف إطارك، أو سمِّ واحدًا بشكل صريح. كل واحد من الـ 12 هو قيمة `--cli` صحيحة — `claude`، `codex`، `copilot`، `cursor`، `opencode`، `pi`، `hermes`، `openclaw`، `factory`، `devin`، `antigravity`، `goose`.
+
```bash
- failproofai policies --install --cli claude --scope user # a coding CLI
- failproofai policies --install --cli hermes --scope user # a Slack/Telegram gateway
+ failproofai config --status
```
- يتم التحقق من حجب استدعاء أداة قبل تشغيله على الـ 12 جميعًا. يتم التحقق من بوابات نهاية الدور على 8 — راجع [إمكانية الإنفاذ](/ar/reference/harnesses#enforcement-capability) للحصول على مصفوفة كل إطار.
-
-
- اتبع [تشغيل فحص الفشل الأول الخاص بك](/ar/start/first-audit). استخدم هدفًا محددًا مثل البحث عن الجلسات التي أعاد فيها الوكيل محاولة أداة فاشلة دون تغيير نهجه.
-
-
- اتبع [منع الفشل الأول الخاص بك باستخدام سياسة](/ar/start/first-policy). ابدأ في وضع المراقبة، افحص المطابقات، ثم أنفذ النسخة المراجعة.
+ يقدم هذا تقريرًا عن الخدمة واتصال Cloud وحالة الإيقاف المؤقت.
-
- شغّل `failproofai config --status`. يرسل الإعداد السليم الاتصال بالسحابة وحالة المراقب وما إذا كان الإنفاذ موقوفًا.
-
+## اختر محلي أو Cloud
+
+
+
+ لا يلزم حساب.
+
+ ```bash
+ failproofai
+ failproofai audit
+ ```
+
+ يفتح الأمر الأول لوحة التحكم المحلية في `http://localhost:8020`. يقوم الأمر الثاني بفحص سجل الوكيل الموجود بالفعل على هذا الجهاز.
-
\ No newline at end of file
+
+
+ أنشئ مفتاح جهاز في Failproof AI Cloud، ثم قم بتشغيل:
+
+ ```bash
+ failproofai config --token
+ failproofai config --status
+ ```
+
+ يتلقى Cloud قرارات السياسة وكتابات جلسات العمل. لإرسال القرارات فقط، قم بالاتصال أولاً، ثم اضبط `collector.sessions` على `false` في `~/.failproofai/config.json`؛ علم الإعداد الحالي `--no-transcripts` لا ينطبق على هذا الإعداد. بالنسبة للأوامر المشتركة و CI، استخدم `FAILPROOFAI_CLOUD_TOKEN` بدلاً من وضع المفتاح في سجل الأوامر.
+
+
+
+## تحقق منه
+
+قم بتشغيل أحد وكلائك واطلب منه تنفيذ مهمة عادية. ثم:
+
+يتم التحقق من رفض استدعاء الأداة على جميع harnesses المدعومة الـ 12. يتم التحقق من إنفاذ نهاية الدور على 8؛ قد تكون أزواج أحداث harness الأخرى قابلة للملاحظة فقط أو غير مؤكدة.
+
+- افتح **Policies → Activity** في لوحة التحكم المحلية لرؤية قرارات السياسة.
+- افتح **Observe → Sessions** في Cloud لرؤية التشغيل الكامل.
+- قم بتشغيل `failproofai audit` للبحث عن أنماط محفوفة بالمخاطر أو مهدرة.
+
+
+ بعد الإعداد، تكون خدمة `failproofaid` هي المقيّم. إذا لم تتمكن من الإجابة، يتم رفض الإجراءات المحمية. قم بتشغيل `failproofai config --status` عندما يتوقف الوكيل بشكل غير متوقع.
+
+
+
+
+ تعلم سير العمل من الجلسة إلى السياسة.
+
+
+ ابحث عن فشل واحد يستحق الإصلاح.
+
+
+ لاحظ الحماية قبل فرضها.
+
+
\ No newline at end of file
diff --git a/docs/ar/start/setup.mdx b/docs/ar/start/setup.mdx
index f4988ad03..92631f352 100644
--- a/docs/ar/start/setup.mdx
+++ b/docs/ar/start/setup.mdx
@@ -1,69 +1,68 @@
---
----
title: "اختر إعدادك"
-description: "اختر بين الفرض المحلي أو Failproof AI Cloud أو نشر المؤسسة."
-icon: "waypoints"
+description: "قم بتشغيل Failproof AI محليًا أو قم بتوصيل الجهاز بـ Failproof AI Cloud."
+icon: "settings"
---
-
-
- ثبّت الخطافات والسياسات على جهاز. استخدم هذا عندما تحتاج إلى حماية فورية دون إرسال بيانات الجلسة إلى Cloud.
-
-
- أضف جلسات مركزية وتدقيقات وتقييمات عبر الإنترنت ولوحات معلومات وتنبيهات ونشر سياسة الأسطول.
-
-
- استخدم عناصر تحكم المؤسسة والمفاتيح المحدودة والبنية التحتية الخاصة ومتطلبات الأمان الخاصة بالنشر.
-
-
+يمكن لـ Failproof AI أن يعمل بالكامل على جهاز واحد أو الاتصال بـ Cloud للجلسات المشتركة وإدارة السياسات.
+
+## محلي، بدون حساب
-## مسار الإنتاج الموصى به
+```bash
+npm install -g failproofai
+failproofai config
+failproofai policies add FailproofAI/policies
+failproofai
+```
-1. قم بتوصيل جهاز غير متعلق بالإنتاج مع تفعيل التقاط النص.
-2. تحقق من الجلسات والتقييمات في Cloud.
-3. أنشئ تدقيقًا لحالة فشل معروفة.
-4. نشّر السياسة الأولى في وضع المراقبة.
-5. توسّع إلى الإنتاج بعد مراجعة المطابقات والإيجابيات الكاذبة.
+يقوم هذا بتثبيت الخدمة، وتوصيل الوكلاء المدعومين، وإضافة مجموعة سياسات، وفتح لوحة التحكم على `http://localhost:8020`.
-## قم بتوصيل جهاز بـ Cloud
+قم بتشغيل `failproofai audit` لمسح سجل الوكيل الموجود بالفعل على الجهاز.
-
-
- 1. انتقل إلى **Administration → Keys** وأنشئ مفتاحًا باستخدام `events:add` و `policies:pull`.
- 2. انسخ السر لمرة واحدة إلى الجهاز الهدف.
- 3. بعد تشغيل أمر اتصال CLI، انتقل إلى **Admin → enforcement** وتأكد من ظهور الجهاز.
- 4. انتقل إلى **Observe → Events** وتأكد من وصول حدثه الأول.
+## توصيل Failproof AI Cloud
- درج المفتاح يعرض المنحتين المطلوبين للجهاز المتصل: تناول الأحداث وتسليم السياسة.
+أنشئ مفتاح جهاز في Cloud، ثم قم بتشغيل:
- 
+```bash
+failproofai config --token
+failproofai config --machine-label checkout-runner-01
+failproofai policies add FailproofAI/policies
+failproofai config --status
+```
- بعد الاتصال، يجب أن يظهر الجهاز في الفرض مع حالة السياسة المطلوبة والمبلغ عنها.
+أو قم بتصدير `FAILPROOFAI_CLOUD_TOKEN=` وقم بتشغيل `failproofai config` العادي. فضّل متغير البيئة على الأجهزة المشتركة وفي CI بحيث لا تصل المفتاح إلى سجل shell أو قوائم العمليات.
- 
+يستخدم Cloud اتصالاً واحدًا لوظيفتين منفصلتين:
- يؤكد الحدث الأول الذي يصل أن المراقب يمكنه تسليم البيانات إلى Cloud، بشكل مستقل عن نشر السياسة.
+- سحب السياسات المعينة لهذا الجهاز.
+- إرسال قرارات السياسة ونصوص الجلسات.
- 
+لإرسال القرارات فقط، قم بالاتصال أولاً، ثم عيّن `collector.sessions` إلى `false` في `~/.failproofai/config.json`. لا تعتمد على `--no-transcripts`: مسار الإعداد الحالي يحلل العلم لكنه لا يطبقه. انظر [الأحداث والإعدادات](/ar/reference/events-and-configuration#machine-configuration).
- تابع فقط بعد رؤية الجهاز وحدثه الأول.
-
-
- ```bash
- failproofai config --connect https://app.befailproof.ai \
- --token "$FAILPROOFAI_KEY" \
- --machine-label checkout-runner-01
+
+ `--machine-label` يعيد تسمية جهاز متصل بالفعل. قم بتشغيله بعد أمر الإعداد، وليس كجزء من الاتصال الأول.
+
- failproofai policies --install --cli claude --scope user
- failproofai config --status
- ```
+## إعداد غير مراقب
- أضف `--no-transcripts` عندما يجب أن يبقى محتوى النص محليًا.
-
-
+`failproofai config` لا يتطلب علم خاص غير تفاعلي. في CI أو حاوية، فإنه يطبق الإعداد المطلوب دون طلب تأكيد.
-يتحقق الاتصال بـ Cloud من تناول الأحداث وتسليم السياسة بشكل مستقل. قد يكون المفتاح صحيحًا إذن لكن يفتقد إلى إحدى الأذونات المطلوبة. استخدم `failproofai config --status` لرؤية الإمكانية المُعدة.
+```bash
+export FAILPROOFAI_CLOUD_TOKEN=""
+failproofai config
+```
-
- يكتب إعداد Cloud بيانات الاعتماد المحلية فقط بعد نجاح الإمكانية ذات الصلة. التحقق الفاشل لا يترك الجهاز يبدو متصلًا عندما لا يكون كذلك.
-
\ No newline at end of file
+هناك حاجة لصلاحية المسؤول مرة واحدة لتثبيت خدمة الخلفية. لا يفتح الإعداد أبدًا موجه كلمة مرور تفاعلي `sudo`: فإما ينجح بدونها أو يطبع الأوامر التي يجب على المسؤول تشغيلها.
+
+## دعم المنصات
+
+يدعم الإعداد Linux و macOS. على منصة أخرى يخرج بدون كتابة hooks أو حالة إعداد جزئية.
+
+
+
+ تشخيص جلسة مفقودة أو تعيين سياسة.
+
+
+ انظر الأنطقة ودعم الإنفاذ لكل harness.
+
+
\ No newline at end of file
diff --git a/docs/de/admin/keys-and-permissions.mdx b/docs/de/admin/keys-and-permissions.mdx
index 878de0caf..5d40c1d86 100644
--- a/docs/de/admin/keys-and-permissions.mdx
+++ b/docs/de/admin/keys-and-permissions.mdx
@@ -1,74 +1,54 @@
---
title: "Schlüssel und Berechtigungen"
-description: "Erstellen Sie bereichsbegrenzte API-Schlüssel für Maschinen, Automatisierung und Operatoren."
+description: "Zugangsdaten für Personen, Automatisierungen und Maschinen erstellen."
icon: "key-round"
---
-API-Schlüssel gehören einer Organisation und tragen explizite Berechtigungen. Verwenden Sie separate Schlüssel für die Agent-Erfassung, Richtlinienübermittlung, Evaluatoren, CI-Automatisierung und administrative Skripte.
+Verwenden Sie für jede Person, Maschine oder Automatisierungsaufgabe einen separaten Schlüssel. Vergeben Sie nur die Berechtigungen, die tatsächlich benötigt werden.
## Schlüssel erstellen und rotieren
-
-
- 1. Gehen Sie zu **Verwaltung → Schlüssel**, wählen Sie **Neuer Schlüssel** und geben Sie einen Workload-Namen ein.
- 2. Wählen Sie einen Berechtigungssatz und passen Sie einzelne Berechtigungen nur an, wenn das Voreinstellung nicht ausreicht.
- 3. Erstellen Sie den Schlüssel und kopieren Sie sein einmalig angezeigtes Geheimnis sofort.
- 4. Öffnen Sie den Schlüssel später, um Berechtigungen zu aktualisieren, ihn zu deaktivieren oder das Geheimnis neu zu generieren.
+Verwenden Sie **Admin → Keys** oder die Cloud-CLI:
- Im Erstellungsdialog wählen Sie die minimalen Berechtigungen, die der Workload benötigt.
+```bash
+fp keys list
+fp keys create "audit automation" --add audits:read
+fp keys disable "audit automation"
+```
- 
+Speichern Sie das Secret bei der Erstellung – es wird nicht erneut angezeigt. Zur Rotation erstellen Sie einen Ersatzschlüssel, aktualisieren den Verbraucher und deaktivieren anschließend den alten Schlüssel.
- Nach der Erstellung zeigt die Schlüsselseite die dauerhaften Metadaten und Verwaltungsaktionen. Das einmalige Geheimnis wird nicht erneut angezeigt.
+## Maschinenschlüssel
- 
+Ein Maschinenschlüssel verbindet den lokalen Dienst mit Cloud:
- Nutzen Sie diese Liste, um Berechtigungen regelmäßig zu überprüfen und Schlüssel zu deaktivieren, die keinem aktiven Workload mehr zugeordnet sind.
-
-
- ```bash
- fp keys create production-agents \
- --add events:add \
- --add policies:pull
- fp keys show production-agents
- fp keys update production-agents --add events:read
- fp keys regenerate production-agents --yes
- fp keys disable production-agents
- ```
+```bash
+export FAILPROOFAI_CLOUD_TOKEN=""
+failproofai config
+```
- Leiten Sie die Ausgabe von create/regenerate sicher um oder erfassen Sie sie; das Geheimnis wird nur einmal zurückgegeben.
-
-
+Eine verbundene Maschine benötigt möglicherweise zwei Fähigkeiten:
-Die beiden Berechtigungen, die eine verbundene Failproof AI-Maschine benötigt, sind unabhängig voneinander:
+- `policies:pull`, um Cloud-verwaltete Richtlinien zu empfangen.
+- `events:add`, um Entscheidungen und Sitzungen zu übermitteln.
-- `events:add` sendet Ereignisse und Sitzungsdaten.
-- `policies:pull` ruft zugewiesene Richtlinien-Deployments ab.
+Der Status zeigt diese getrennt an, da eine funktionieren kann, während die andere es nicht tut.
-Schlüsselgeheimnisse werden bei der Erstellung oder Neu-Generierung angezeigt. Speichern Sie sie in einem Secret-Manager und rotieren Sie sie, ohne die interaktiven Anmeldedaten eines Operators wiederzuverwenden.
+## Häufige Berechtigungen
-## Berechtigungskatalog
-
-| Bereich | Berechtigungen |
+| Berechtigung | Erlaubt |
| --- | --- |
-| Ereignisse | `events:add`, `events:read` |
-| Schlüssel | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`; `keys:update` ist nur für menschliche Sitzungen |
-| Benutzer | `users:create`, `users:read`, `users:update`, `users:delete` |
-| Evaluierungen | `evaluations:read`, `evaluations:trigger` |
-| Dashboards | `dashboards:read`, `dashboards:write`, `dashboards:delete` |
-| Abfragen | `queries:read`, `queries:write`, `queries:delete`, `queries:run` |
-| Assistent | `agent:use` |
-| Einstellungen | `settings:read`, `settings:write` |
-| Benachrichtigungen | `alerts:read`, `alerts:write` |
-| Probleme | `issues:read`, `issues:create`, `issues:close` |
-| Audits | `audits:read`, `audits:write` |
-| Richtlinien | `policies:read`, `policies:write`, `policies:pull` |
-| Nutzung | `usage:read` |
-
-`orgs:admin` ist dem Instanz-Operator vorbehalten und kann weder einem Organisations-Schlüssel noch einem gewöhnlichen Mitglied gewährt werden. Veraltete `incidents:*`- und `alerts:ack`-Token werden aus Kompatibilitätsgründen akzeptiert und auf aktuelle `issues:*`-Berechtigungen normalisiert.
+| `events:add` | Events senden |
+| `events:read` | Events und Fehler lesen |
+| `evaluations:read` | Sitzungen und Auswertungen lesen |
+| `audits:read` / `audits:write` | Audits einsehen oder verwalten |
+| `policies:read` / `policies:write` | Richtlinien einsehen oder bereitstellen |
+| `policies:pull` | Maschinenrichtlinienzuweisungen abrufen |
+| `keys:create` / `keys:disable` | Schlüssel erstellen oder deaktivieren |
+| `orgs:admin` | Organisationsverwaltung auf Instanzebene; nicht an einen Organisationsschlüssel zuweisbar |
-Eingebaute Berechtigungssätze sind `read-only`, `standard` und `admin`. `standard` ergänzt die Leseberechtigungen um das Auslösen von Evaluierungen, die Ausführung von Abfragen, das Bearbeiten von Problemen und die Nutzung des Assistenten. Bei der Schlüsselerstellung werden ausschließlich für Menschen gültige Berechtigungen entfernt, auch wenn ein Berechtigungssatz diese enthält.
+Einige administrative `fp fleet`- und `fp guardrails`-Befehle erfordern eine angemeldete Benutzersitzung statt eines API-Schlüssels. Der Hilfetext der jeweiligen Befehle weist darauf hin, bevor eine Anfrage gestellt wird.
- Instanz-bezogene Schlüssel können eine Organisation über den `X-AgentEye-Org`-Header auswählen. Setzen Sie diesen bei Multi-Organisations-Deployments explizit; wird er weggelassen, kann die Standardorganisation ausgewählt werden.
+ Verwenden Sie niemals Ingest-Zugangsdaten wie `AGENTEYE_KEY` oder `AGENTEYE_API_KEY` als `FP_API_KEY`. Sie dienen unterschiedlichen Systemen und haben unterschiedliche Berechtigungen.
\ No newline at end of file
diff --git a/docs/de/admin/overview.mdx b/docs/de/admin/overview.mdx
index 63b8e0e90..06ac8a9e1 100644
--- a/docs/de/admin/overview.mdx
+++ b/docs/de/admin/overview.mdx
@@ -1,22 +1,30 @@
---
title: "Administration"
-description: "Zugriff, Nutzung, Organisationen und Sicherheit verwalten – ohne den Zuverlässigkeits-Workflow zu beeinträchtigen."
+description: "Cloud-Zugang, Mitgliedschaft, Einstellungen und Verbrauch verwalten, ohne diese in den Zuverlässigkeits-Workflow einzumischen."
icon: "settings-2"
---
-Die Administration enthält alle Steuerelemente, die für den Betrieb von Failproof AI im Team erforderlich sind. Die meisten Benutzer arbeiten in Sessions, Audits und Policies; Administratoren nutzen diesen Bereich, um Zugriff und Betriebsgrenzen zu verwalten.
+Administration ist die Cloud-Seite von Failproof AI. Organisationen, Mitglieder, API-Schlüssel, Organisationseinstellungen und verbrauchsbasierte Abrechnung erfordern alle eine Cloud-Verbindung.
+
+
+ Failproof AI läuft auch ganz ohne Account. Eine lokale Maschine erzwingt Richtlinien, speichert den Sitzungsverlauf auf der Festplatte, stellt das [lokale Dashboard](/de/reference/local-dashboard) unter `localhost:8020` bereit und führt `failproofai audit` aus, ohne etwas zu übertragen. Unter [Maschinenkonfiguration](/de/reference/events-and-configuration#machine-configuration) findest du die lokalen `collector`-Schlüssel. Überspringe den Rest dieses Abschnitts, wenn du Cloud nicht nutzt.
+
+
+## Wo die Steuerelemente zu finden sind
- Verwenden Sie den Bereich **Admin** in der Cloud-Seitenleiste für den **Policy-Editor**, **Durchsetzung**, **Nutzung**, **Schlüssel**, **Benutzer** und **Einstellungen**. Ein gesperrtes Element zeigt an, dass Ihrem Konto die erforderliche Leseberechtigung fehlt.
+ Die **Admin**-Gruppe in der Cloud-Seitenleiste enthält **Policy-Editor**, **Durchsetzung**, **Nutzung**, **Schlüssel**, **Benutzer** und **Einstellungen**.
- 
+ 
+ Installiere die Cloud CLI als eigenständiges Tool und melde dich an:
+
```bash
+ uv tool install fp-cloud-cli
+ fp login
fp whoami
- fp orgs current
- fp orgs perms
fp usage
```
@@ -24,17 +32,43 @@ Die Administration enthält alle Steuerelemente, die für den Betrieb von Failpr
+## Angemeldeter Benutzer oder API-Schlüssel
+
+`fp` läuft in einem von zwei Authentifizierungsmodi, und die Unterscheidung bestimmt, welche Befehle verfügbar sind. Ein Befehl, den ein API-Schlüssel nicht ausführen kann, lehnt die Ausführung ab, bevor eine Verbindung geöffnet wird, und gibt den Grund an – anstatt einen 401- oder 403-Fehler sprechen zu lassen.
+
+| Befehl | API-Schlüssel | Berechtigung |
+| --- | --- | --- |
+| `fp whoami` | Ja | keine |
+| `fp usage` | Ja | `usage:read` |
+| `fp keys list` / `show` | Ja | `keys:read` |
+| `fp keys create` | Ja | `keys:create` |
+| `fp keys disable` | Ja | `keys:disable` |
+| `fp keys regenerate` | Ja | `keys:regenerate` |
+| `fp keys update` | Nein | `keys:update`, das kein Schlüssel besitzen kann |
+| `fp users list` / `show` | Ja | `users:read` |
+| `fp users create` | Ja | `users:create` |
+| `fp users update` | Ja | `users:update` |
+| `fp users disable` / `enable` | Ja | `users:delete` |
+| `fp settings list` / `schema` | Ja | `settings:read` |
+| `fp settings set` | Ja | `settings:write` |
+| `fp orgs list` / `switch` / `current` / `perms` | Nein | nur angemeldete Sitzung |
+
+`fp usage` ist der Befehl für Reporting-Skripte: Er läuft unbeaufsichtigt unter einem Schlüssel und benötigt nur `usage:read`.
+
-
- Abrechnungszeiträume und den Verbrauch der Organisation einsehen.
-
- Maschinen und Automatisierungen nur die notwendigen Berechtigungen erteilen.
+ Erstelle die Maschinenzugangsdaten und weise jeder Arbeitslast nur die benötigten Rechte zu.
- Mitgliedschaften, Standardwerte und Organisationsgrenzen verwalten.
+ Verwalte die Mitgliedschaft und stelle sicher, dass Daten und Aktionen jeder Organisation abgegrenzt bleiben.
- Betriebseinstellungen, Datenverarbeitung und Bereitstellungssicherheit konfigurieren.
+ Lege Anmelde- und Benachrichtigungswerte fest und bestimme, welche Agentendaten eine Maschine verlassen.
+
+
+ Lies aus, was die Organisation im laufenden 30-Tage-Fenster verbraucht hat.
+
+
+ Sieh, welche Maschinen eingebunden sind, wie sie identifiziert werden und was sie durchsetzen.
\ No newline at end of file
diff --git a/docs/de/admin/settings-and-security.mdx b/docs/de/admin/settings-and-security.mdx
index 178762a28..65ff19921 100644
--- a/docs/de/admin/settings-and-security.mdx
+++ b/docs/de/admin/settings-and-security.mdx
@@ -1,68 +1,37 @@
---
title: "Einstellungen und Sicherheit"
-description: "Konfigurieren Sie betriebliche Einstellungen und treffen Sie bewusste Entscheidungen über Agent-Daten."
-icon: "lock-keyhole"
+description: "Organisationsstandards, Datenverarbeitung und Maschinenzugangsdaten verwalten."
+icon: "shield"
---
-Nutzen Sie die Einstellungen für deployment-spezifische Betriebswerte und Überschreibungen des Modell-Kontextfensters. Prüfen Sie das Einstellungsschema, bevor Sie einen Wert über die API oder CLI ändern.
+Organisationseinstellungen gelten für alle Mitglieder der Cloud-Organisation. Änderungen können über **Admin → settings** oder mit `fp settings` vorgenommen werden.
-## Organisationseinstellung ändern
+```bash
+fp settings list
+fp settings set
+```
-
-
- 1. Gehen Sie zu **Administration → Einstellungen**, suchen Sie die Einstellungsgruppe und lesen Sie deren Beschreibung und aktuelle Quelle.
- 2. Ändern Sie den Wert und speichern Sie ihn.
- 3. Fügen Sie bei Modell-Kontextfenstern die Modellüberschreibung hinzu oder aktualisieren Sie sie und bestätigen Sie das effektive Limit.
- 4. Überprüfen Sie Sitzungen und Metriken, die vom geänderten Wert abhängen.
+## Datenverarbeitung
- 
-
-
- ```bash
- fp settings list
- fp settings schema
- fp settings set --value
- fp settings set alerts.email_default_recipients \
- --json-value '["oncall@example.com"]'
- ```
+Eine verbundene Maschine sendet standardmäßig Policy-Entscheidungen und vollständige Sitzungstranskripte. Um nur Entscheidungen zu senden, setze `collector.sessions` in der Datei `~/.failproofai/config.json` der Maschine nach dem Verbinden auf `false`. Das aktuell verfügbare Setup-Flag `--no-transcripts` wendet diese Einstellung nicht an.
- Führen Sie `fp settings set --help` aus, um den Werttyp und die Bestätigungs-Flags der installierten CLI zu erhalten.
-
-
+Zugangsdaten werden auf der Maschine vor dem Hochladen bereinigt. Die Schwärzung ist jedoch nur eine Sicherheitsgrundlage und kein Ersatz für eine echte Zugriffskontrolle.
-## Datenverarbeitungsentscheidungen
+Bei rein lokalem Betrieb ist kein Konto erforderlich. Sitzungsverlauf und Audits verbleiben auf der Maschine – mit einer Ausnahme: Geplante lokale Audits senden nach der Einwilligung die Maschinenidentität und einen eingeschränkten Digest. Anonyme CLI-Telemetrie kann mit `FAILPROOFAI_TELEMETRY_DISABLED=1` deaktiviert werden.
-Die Verbindung der Failproof AI CLI sendet standardmäßig Transkripte, da Traces und Audits auf deren Inhalt angewiesen sind. Verwenden Sie `--no-transcripts`, wenn Eingabeaufforderungen, Dateiinhalte oder Terminalvorgaben lokal verbleiben müssen; Hook-Aktivität und Policy-Entscheidungen können weiterhin gemeldet werden.
+## Zugangsdaten
-Lokale Ingest-Anmeldedaten werden getrennt von nicht-geheimen Daemon-Einstellungen gespeichert und mit restriktiven Berechtigungen geschrieben. API-Schlüssel sollten dennoch als Produktionsgeheimnisse verwaltet werden.
+Maschinen-Tokens werden unter `~/.failproofai/` mit ausschließlich für den Eigentümer zugänglichen Berechtigungen gespeichert. Sie werden nicht in die Service-Definition geschrieben.
-## Referenz der Organisationseinstellungen
+Verwende separate Schlüssel für Personen, Automatisierungen und Maschinen. Weise jedem nur die benötigten Berechtigungen zu, rotiere den Schlüssel bei einem Eigentümerwechsel und widerrufe ihn, wenn die Maschine oder der Workflow außer Betrieb genommen wird.
-Alle über das Dashboard bearbeitbaren Einstellungen sind auf die Organisation beschränkt. Das deployment-weite Verhalten bleibt Server-Umgebungskonfiguration.
+## Checkliste
-| Schlüssel | Standard | Zweck |
-| --- | --- | --- |
-| `allowed_sign_ins` | `[]` | Beschränkt bestehende Mitglieder auf exakte E-Mail-Adressen oder `*@domain`; eine leere Liste bedeutet keine zusätzliche Einschränkung. |
-| `session_ttl_secs` | `86400` | Lebensdauer der Dashboard-Sitzung; akzeptierter Bereich ist 60 Sekunden bis 30 Tage. |
-| `otp_ttl_secs` | `600` | Lebensdauer von OTP und Magic-Link; akzeptierter Bereich ist 60–1800 Sekunden. |
-| `alerts.email_default_recipients` | `[]` | Standard-Empfänger, wenn ein Alert-E-Mail-Kanal diese nicht überschreibt. |
-| `alerts.slack_default_webhook` | leer | Standard-Slack-Incoming-Webhook-URL. |
-| `alerts.webhook_default_url` | leer | Standard-generische JSON-Webhook-URL. |
-| `alerts.webhook_signing_secret` | leer | HMAC-SHA256-Schlüssel für den `X-AgentEye-Signature`-Header; Lesezugriffe werden maskiert. |
-| `alerts.enabled_channels` | E-Mail, Slack, Webhook | Organisationsweite Kanaltypen, die Alert-Regeln verwenden dürfen. |
-| `default_user_permissions` | `standard` | Benanntes Berechtigungsset, das für neue Einladungen vorausgewählt wird. |
+- Nur die minimal notwendigen Berechtigungen vergeben.
+- `collector.sessions` auf `false` setzen, wenn vollständige Inhalte nicht benötigt werden.
+- Prüfen, wer durchsetzende Policies deployen darf.
+- Policies vor der Durchsetzung im Beobachtungsmodus testen.
+- Maschinenbeschriftungen klar und Maschinen-IDs stabil halten.
+- `failproofai config --status` nach dem Ändern von Verbindungseinstellungen ausführen.
-`allowed_sign_ins` ist ein Filter, keine Berechtigung: Eine Person muss bereits Mitglied der Organisation sein. Verwenden Sie eine leere Liste, um allen Mitgliedern Zugang zu gewähren; der bloße Wert `*` wird abgelehnt. Alert-URLs müssen HTTPS verwenden, außer für Loopback-Entwicklungsadressen.
-
-## Sicherheits-Checkliste
-
-- Verwenden Sie HTTPS für Cloud-Verbindungen.
-- Beschränken Sie Schlüssel auf den kleinstmöglichen Berechtigungsumfang.
-- Trennen Sie Produktions- und Nicht-Produktionsumgebungen.
-- Überprüfen Sie Transkript- und Redaktionseinstellungen vor dem Rollout.
-- Prüfen Sie Änderungen an Benutzern, Schlüsseln und Organisationen regelmäßig.
-- Testen Sie Backup-, Aufbewahrungs- und Incident-Response-Anforderungen für Ihr Deployment.
-
-
- Das Deaktivieren der Transkripterfassung ändert, was Audits und Untersuchungen nachweisen können. Dokumentieren Sie die Entscheidung und ihre erwarteten Einschränkungen.
-
\ No newline at end of file
+Siehe [Schlüssel und Berechtigungen](/de/admin/keys-and-permissions) für den Berechtigungskatalog.
\ No newline at end of file
diff --git a/docs/de/admin/usage.mdx b/docs/de/admin/usage.mdx
index bc0b37969..0d600c57c 100644
--- a/docs/de/admin/usage.mdx
+++ b/docs/de/admin/usage.mdx
@@ -1,21 +1,24 @@
---
title: "Nutzung"
-description: "Organisationsverbrauch und das aktive Abrechnungsfenster einsehen."
+description: "Organisationsverbrauch für das aktuelle 30-tägige Messfenster einsehen."
icon: "chart-no-axes-combined"
---
-Unter „Nutzung" wird der Verbrauch der aktuellen Organisation sowie die zugehörigen Abrechnungsfenster angezeigt. Nutzen Sie diese Ansicht, um zu verstehen, wie produktiver Rollout, Transkriptvolumen, Evaluierungen und Audit-Kadenz Ihren Plan beeinflussen.
+Die Nutzungsansicht zeigt, was die aktuelle Organisation während ihres aktuellen 30-tägigen Fensters gemessen hat. Das Fenster ist fest und pro Organisation verankert; die Nutzung ist schreibgeschützt: Es werden keine Limits, Kontingente oder Planschwellenwerte angewendet oder angezeigt. Beide Oberflächen weisen darauf hin — das CLI-Panel gibt „read-only usage, no limits applied" aus.
-## Nutzung überprüfen
+## Nutzung prüfen
- 1. Gehen Sie zu **Administration → Nutzung**.
- 2. Bestätigen Sie die Organisation und das Messfenster.
- 3. Überprüfen Sie Erfassung, Sitzungen, Evaluierungen, Metriken, Audits, Befunde, Warnmeldungen, Benutzer und Schlüssel.
- 4. Vergleichen Sie gestartete und abgeschlossene Audit-Arbeiten, wenn die Audit-Nutzung unerwartet erscheint.
+ 1. Gehe zu **Admin → Nutzung**.
+ 2. Bestätige die Organisation und das Messfenster — die Kopfzeile zeigt Start und Ende des Fensters, den aktuellen Tag darin und den bisherigen Verlauf.
+ 3. Lies den Hero-Block: erfasste Events, Sessions, Agents und Environments.
+ 4. Lies die beiden Pipelines: Auswertungen (mit Scores und Metriken) und Audits (mit Issues und Alerts), jeweils mit abgeschlossenen Läufen im Verhältnis zu gestarteten Läufen.
+ 5. Lies die Workspace- und Zugriffsblöcke: gespeicherte Abfragen, Dashboards, Alerts, eindeutige Issues, Mitglieder und API-Schlüssel.
- 
+ Die Werte sind zwischengespeichert, nicht live. Verwende die Aktualisierungsschaltfläche oben rechts, nachdem eine Änderung sichtbar sein sollte.
+
+ 
```bash
@@ -23,15 +26,52 @@ Unter „Nutzung" wird der Verbrauch der aktuellen Organisation sowie die zugeh
fp --json usage
fp --org reliability-team --json usage
```
+
+ `fp usage` benötigt `usage:read` und läuft unter einem API-Schlüssel — damit ist es der richtige Befehl für einen Reporting-Cronjob.
+
+ Mit `--json` gibt er die Dashboard-Antwort unverändert zurück: `org_id`, `billing_anchor`, `window`, `usage`, `calculated_at` und `stale_after`. Anhand von `calculated_at` und `stale_after` lässt sich erkennen, wie alt ein Wert ist.
+
+ `fp usage` hat keine eigenen Flags — nur die globalen `--json` und `--org`. Er meldet ausschließlich das aktuelle Fenster, nicht frühere. Führe daher eigene Historien, indem du den Befehl regelmäßig ausführst und die `--json`-Ausgabe speicherst, anstatt zu erwarten, später ein früheres Fenster abfragen zu können.
+
+ ```bash
+ fp --json usage | jq '.usage.events_ingested'
+ ```
+### Metrik-Schlüssel
+
+Alles unter `usage` im JSON-Payload, damit ein Skript ein Feld direkt benennen kann, anstatt ein Panel zu parsen.
+
+| Gruppe | Schlüssel |
+| --- | --- |
+| Telemetrie | `events_ingested`, `sessions`, `agents`, `environments` |
+| Auswertungen | `evaluation_runs`, `evaluation_finishes`, `evaluations`, `metrics` |
+| Audits | `audit_runs`, `audit_finishes`, `issues_created`, `alerts_created` |
+| Workspace | `queries_created`, `dashboards_created` |
+| Zugriff | `users_active`, `users_created`, `keys_active`, `keys_created` |
+
+Jede Pipeline meldet gestartete und abgeschlossene Läufe separat. Eine Lücke zwischen `audit_runs` und `audit_finishes` bedeutet, dass Arbeit begonnen wurde, die nicht abgeschlossen wurde — das sollte geprüft werden, bevor die darunter liegenden Issue-Zahlen interpretiert werden.
+
## Eine Änderung untersuchen
-1. Bestätigen Sie die aktive Organisation und das aktive Fenster.
-2. Vergleichen Sie den Anstieg mit dem Sitzungsvolumen nach Umgebung.
-3. Prüfen Sie, ob eine neue Integration begonnen hat, Transkripte zu senden.
-4. Überprüfen Sie Änderungen an der Evaluierungs- und Audit-Kadenz.
-5. Vergleichen Sie die Werte mit den Limits des aktuellen Preisplans.
+Das Ingest-Volumen wird pro Maschine entschieden, nicht zentral. Beginne bei der Organisation und dem Fenster, und gehe dann durch, was sich auf den Maschinen geändert hat, die Daten dorthin senden.
+
+| Ursache | Wo prüfen | Was ändern |
+| --- | --- | --- |
+| Eine Maschine sendet Session-Transkripte | `collector.sessions` in der `~/.failproofai/config.json` dieser Maschine | Auf `false` setzen, um nur Entscheidungen zu senden |
+| Hook-Aktivität wird vollständig gesendet | `collector.hooks_verbosity` in derselben Datei | `decisions` aggregiert Freigaben pro Minute; `off` stoppt Hook-Events vollständig |
+| Ein neuer Erfassungsort wurde hinzugefügt | `failproofai harness list` | Mit `failproofai harness remove-path ` entfernen |
+| Verlauf wurde erneut gesendet | Die `failproofai backfill`-Läufe der Maschine | Erneut gesendete Daten werden anhand eines Content-Hashes dedupliziert und in bereits vorhandene Zeilen zusammengeführt, sodass keine Doppelzählung entsteht |
+| Eine neue Integration hat begonnen zu melden | Die `agents`- und `environments`-Zähler sowie die Session-Liste | Collector-Einstellungen der neuen Maschine anpassen, bevor sie ausgerollt wird |
+
+Die Nutzungsansicht vergleicht nichts mit einem Plan. Das muss außerhalb des Produkts erfolgen.
-Die CLI gibt dieselbe Zusammenfassung für Skripte zurück.
\ No newline at end of file
+
+
+ Die maschinenspezifischen Datenverarbeitungseinstellungen hinter diesen Zahlen.
+
+
+ Die vollständige `fp`-Oberfläche, einschließlich Installation und Anmeldung.
+
+
\ No newline at end of file
diff --git a/docs/de/admin/users-and-organizations.mdx b/docs/de/admin/users-and-organizations.mdx
index 73504ccae..2b5038ef9 100644
--- a/docs/de/admin/users-and-organizations.mdx
+++ b/docs/de/admin/users-and-organizations.mdx
@@ -1,21 +1,16 @@
---
title: "Benutzer und Organisationen"
-description: "Mitgliedschaften verwalten und Daten sowie Aktionen jeder Organisation isoliert halten."
+description: "Mitgliedschaften verwalten und Daten sowie Aktionen jeder Organisation voneinander abgrenzen."
icon: "users"
---
-Organisationen isolieren Sitzungen, Auswertungen, Audits, Issues, Warnmeldungen, Abfragen, Dashboards, Benutzer und Schlüssel. Bestätigen Sie die aktive Organisation, bevor Sie administrative Ressourcen ändern.
+Organisationen isolieren Sitzungen, Evaluierungen, Audits, Issues, Alerts, Abfragen, Dashboards, Benutzer und Schlüssel. Bestätigen Sie die aktive Organisation, bevor Sie administrative Ressourcen ändern.
-## Mitglieder und Organisationen verwalten
+## Organisation auswählen
- 1. Verwenden Sie den Organisationsumschalter oben in der Cloud-Seitenleiste, um die Organisation zu wechseln.
- 2. Gehen Sie zu **Administration → Benutzer**, um Mitglieder zu suchen oder nach Status und Rolle zu filtern.
- 3. Wählen Sie **Neuer Benutzer**, geben Sie die E-Mail-Adresse ein, wählen Sie ein Berechtigungsset aus und passen Sie bei Bedarf Überschreibungen an.
- 4. Öffnen Sie einen Benutzer später, um Berechtigungen zu aktualisieren, die Anmeldung zu deaktivieren oder das Konto wieder zu aktivieren.
-
- 
+ Verwenden Sie den Organisations-Umschalter oben in der Cloud-Seitenleiste. Alles darunter – einschließlich jeder Seite unter **admin** – liest und schreibt dann in dieser Organisation.
```bash
@@ -23,22 +18,62 @@ Organisationen isolieren Sitzungen, Auswertungen, Audits, Issues, Warnmeldungen,
fp orgs switch reliability-team
fp orgs current
fp orgs perms
+ ```
+
+ `fp orgs switch` ohne Slug öffnet eine Pfeilnavigation, die bei Ihrer aktuellen Organisation beginnt; bei nicht-interaktiver Ausführung wird auf eine nummerierte Eingabeaufforderung zurückgegriffen, und unter `--json` ist ein Slug erforderlich. Die Auswahl wird in `~/.failproofai/fpcli/cli-auth.json` gespeichert, sodass spätere Befehle sie als aktiven Mandanten übermitteln. Überschreiben Sie die Auswahl für einen einzelnen Befehl mit `--org ` oder `FP_ORG`.
+
+
+
+
+ Jeder `fp orgs`-Befehl erfordert einen angemeldeten Benutzer und wird unter einem API-Schlüssel abgelehnt, da die Organisations-Mitgliedschaft einer Person gehört und ein Schlüssel bereits für eine Organisation agiert. Die `fp users`-Befehle unten funktionieren in beiden Fällen.
+
+
+## Mitglieder verwalten
+
+
+
+ 1. Gehen Sie zu **admin → users** und suchen Sie Mitglieder per E-Mail, oder schränken Sie die Liste mit den Filter-Chips `protected`, `admin`, `standard` und `read-only` ein.
+ 2. Wählen Sie **new user**, geben Sie die E-Mail-Adresse ein, wählen Sie einen Berechtigungssatz und passen Sie bei Bedarf mitgliedsspezifische Überschreibungen an.
+ 3. Öffnen Sie ein Mitglied später, um Berechtigungen zu ändern, die Anmeldung zu deaktivieren oder das Konto wieder zu aktivieren.
+ 
+
+ Die Berechtigungs-Chips in diesem Frame stammen noch aus der Zeit vor der Umbenennung von `incidents:*` zu `issues:*`; die Liste der [allgemeinen Berechtigungen](/de/admin/keys-and-permissions#common-permissions) ist aktuell.
+
+
+ ```bash
+ fp users list
+ fp users list --active-only
fp users create engineer@example.com --permission-set standard
fp users show engineer@example.com
fp users update engineer@example.com --add audits:write
fp users disable engineer@example.com
fp users enable engineer@example.com
```
+
+ Mitglieder werden per E-Mail-Adresse angesprochen und ohne Berücksichtigung der Groß-/Kleinschreibung aufgelöst. `fp users show Alice.Chen@Example.com` und `fp users create alice.chen@example.com` beziehen sich daher auf dieselbe Person.
-Administratoren können Benutzer erstellen, aktualisieren, deaktivieren und wieder aktivieren sowie das für ihre Rolle passende Berechtigungsset zuweisen. Die API verwendet für die Deaktivierung einen Löschvorgang, entfernt jedoch weder das Konto noch den Mitgliedschaftsdatensatz.
+### Berechtigungen und was jede Aktion erfordert
+
+Mitgliederberechtigungen verwenden dieselbe Arithmetik wie Schlüssel: Effektive Berechtigungen sind `(set ∪ added) − removed`, und `--add` / `--remove` akzeptieren kompakte `slug:action.action`-Token, bei denen durch Punkte getrennte Aktionen expandiert werden. Siehe [Schlüssel und Berechtigungen](/de/admin/keys-and-permissions).
+
+| Aktion | Berechtigung | Hinweise |
+| --- | --- | --- |
+| `fp users list` / `show` | `users:read` | `--active-only` blendet deaktivierte Mitglieder aus. |
+| `fp users create` | `users:create` | `--permission-set` legt die Rolle fest; `--add` / `--remove` fügen Überschreibungen hinzu. |
+| `fp users update` | `users:update` | `--permission-set` **ersetzt** die mitgliedsspezifischen Überschreibungen; `--add` / `--remove` allein sind inkrementell gegenüber den aktuellen Berechtigungen. |
+| `fp users disable` / `enable` | `users:delete` | Beide, einschließlich enable – diese Berechtigung bewusst vergeben. |
+
+Das Deaktivieren wird in zwei Fällen direkt abgelehnt – als Forbidden-Fehler, nicht als Validierungsmeldung: Ein **protected**-Mitglied kann nicht deaktiviert werden, und Sie können Ihr eigenes Konto nicht deaktivieren. Das erneute Deaktivieren eines bereits deaktivierten Mitglieds oder das Aktivieren eines bereits aktiven Mitglieds ist ein stilles No-op. Die API verwendet für das Deaktivieren einen Delete-Vorgang, entfernt jedoch weder das Konto noch seinen Mitgliedschaftsdatensatz.
+
+Zwei Organisationseinstellungen steuern die Mitgliedschaft: `default_user_permissions` wählt den Berechtigungssatz für eine neue Einladung vor, und `allowed_sign_ins` legt fest, welche Adressen überhaupt einen Anmeldecode erhalten können. Verwalten Sie diese Einstellungen auf der [Einstellungsseite](/de/admin/settings-and-security).
- Das Deaktivieren eines Benutzers blockiert diese Identität in allen Organisationen – nicht nur in der aktuell ausgewählten. Die erneute Aktivierung stellt die globale Anmeldemöglichkeit sowie die Mitgliedsberechtigungen in dieser Organisation wieder her.
+ Das Deaktivieren eines Benutzers sperrt diese Identität für die Anmeldung in jeder Organisation, nicht nur in der aktuell ausgewählten. Die Reaktivierung stellt die globale Anmeldung sowie die Berechtigungen des Mitglieds in dieser Organisation wieder her.
- Geben Sie Dienstkonten aussagekräftige Namen, die mit einem Workload und einem Verantwortlichen verknüpft sind. Vermeiden Sie die gemeinsame Nutzung von Schlüsseln zwischen Organisationen oder zwischen Personen und Maschinen.
+ Geben Sie Dienstkonten beschreibende Namen, die an eine Workload und einen Verantwortlichen geknüpft sind. Teilen Sie einen Schlüssel nicht zwischen Organisationen oder zwischen einer Person und einer Maschine.
\ No newline at end of file
diff --git a/docs/de/audits/alerts.mdx b/docs/de/audits/alerts.mdx
index 32ecc6977..cd2661887 100644
--- a/docs/de/audits/alerts.mdx
+++ b/docs/de/audits/alerts.mdx
@@ -1,62 +1,103 @@
---
-title: "Benachrichtigungen"
-description: "Wiederkehrende Vorfälle erkennen und an die richtigen Verantwortlichen weiterleiten."
+title: "Alerts"
+description: "Wiederkehrendes Auftreten erkennen und ein Problem an die richtigen Verantwortlichen weiterleiten."
icon: "bell-ring"
---
-Benachrichtigungen überwachen eine messbare Bedingung und erstellen einen Vorfall, wenn diese ausgelöst wird. Verwenden Sie sie, wenn ein Fehler eine zeitnahe Reaktion erfordert – unabhängig davon, ob eine Richtlinie ihn blockieren kann.
+Ein Alert überwacht eine messbare Bedingung und öffnet ein Issue, wenn er ausgelöst wird. Verwende ihn, wenn ein Fehler eine zeitnahe Reaktion erfordert – unabhängig davon, ob eine Policy ihn blockieren kann.
-## Benachrichtigung erstellen und testen
+## Alert erstellen und testen
- 1. Navigieren Sie zu **Analysieren → Benachrichtigungen** und wählen Sie **Neue Benachrichtigung**. Sie können auch über die Glocke bei einem repräsentativen Fehler beginnen.
- 2. Geben Sie Name, Schweregrad, Auslösertyp, Bedingung, Auswertungsintervall, Überschreitungsanzahl, Zeitfenster und Kanäle ein.
- 3. Speichern Sie die Benachrichtigung, öffnen Sie die Detailseite und führen Sie **Test** aus.
- 4. Navigieren Sie zu **Analysieren → Vorfälle**, um durch die Benachrichtigung erstellte Vorfälle zu bestätigen, zuzuweisen, zu kommentieren, zu abonnieren und zu lösen.
+ 1. Gehe zu **Analyze → Alerts** und wähle **new alert**. Du kannst auch über die Glocke bei einem repräsentativen Fehler beginnen.
+ 2. Gib Name, Schweregrad, Trigger-Typ, Bedingung, Auswertungsintervall, Breach-Anzahl, Fenster und Kanäle ein.
+ 3. Speichere den Alert, öffne seine Detailseite und führe **test** aus.
+ 4. Gehe zu **Analyze → Issues**, um die vom Alert geöffneten Issues zu bestätigen, zuzuweisen, zu diskutieren, zu abonnieren und zu schließen.
- Der erste Teil des Formulars identifiziert die Benachrichtigung und das Signal, das sie auslösen soll.
+ Der erste Teil des Formulars identifiziert den Alert und das Signal, das ihn auslösen soll.
- 
+ 
- Der zweite Teil steuert, wie lange die Bedingung anhalten muss, wie oft sie ausgewertet wird und wohin Benachrichtigungen gesendet werden.
+ Der zweite Teil steuert, wie lange die Bedingung andauern muss, wie häufig sie ausgewertet wird und wohin Benachrichtigungen gesendet werden.
- 
+ 
- Überprüfen Sie nach dem Speichern in der Benachrichtigungsliste, ob die Regel aktiviert ist und ob Auslöser, Zeitfenster, Schweregrad und Kanäle Ihren Vorgaben entsprechen.
+ Überprüfe nach dem Speichern in der Alerts-Liste, ob die Regel aktiviert ist und ob Trigger, Fenster, Schweregrad und Kanäle deinen Erwartungen entsprechen. Eine Karte mit offenen Issues zeigt deren Anzahl an; eine Karte ohne offene Issues lässt diese Zeile vollständig weg – ihr Fehlen sagt also nichts aus. Um den Wert für jede Regel einschließlich der Nullen zu lesen, verwende `fp alerts show `, das ihn immer ausgibt.
- 
-
- Testen Sie die Benachrichtigung, bevor Sie sich im Produktivbetrieb auf sie verlassen.
+ 
```bash
fp alerts create high-errors \
--trigger-kind metric_threshold \
--severity warning \
- --trigger-spec '{"metric":"error_count","op":">","value":50,"window_secs":900}'
+ --trigger-spec '{"metric":"error_count","op":">","value":50,"window_secs":900}' \
+ --eval-interval-secs 300 \
+ --min-breaches 2 \
+ --eval-window 3
fp alerts show high-errors
fp alerts test high-errors
fp alerts update high-errors --severity critical --yes
```
- Verwenden Sie `fp alerts list`, um Regeln zu überprüfen, und `fp alerts delete `, um eine zu entfernen.
+ Neue Alerts starten **aktiviert**, und ein Namenskonflikt wird abgelehnt, bevor etwas erstellt wird.
+
+ `fp alerts update` ersetzt die gesamte Definition serverseitig, daher liest die CLI den Alert neu ein und legt deine Flags darüber – ein reines Flag-Update benötigt `alerts:read` **sowie** `alerts:write` und fordert zur Bestätigung auf, es sei denn, du übergibst `--yes`.
+
+ Verwende `fp alerts list`, um Regeln zu überprüfen, und `fp alerts delete `, um eine zu entfernen. Delete zeigt eine Vorschau der Regel – einschließlich der Anzahl offener Issues – und bestätigt vor der Ausführung, da die Aktion nicht rückgängig gemacht werden kann.
+
+ Delete ist nicht der richtige Weg, um eine störende Regel zu deaktivieren. `DELETE /alerts/{id}` führt eine kaskadierte Löschung durch: Alle Issues, die der Alert je geöffnet hat, werden damit entfernt – zusammen mit Kommentaren, Abonnenten und dem Aktivitätsverlauf. Die Bestätigungsbox der CLI beschreibt dies als das „Verwaisen" der offenen Issues; der API-Vertrag ist eine kaskadierte Löschung, behandle den Verlauf also als unwiderruflich gelöscht. Um das Auslösen einer Regel zu stoppen und die aufgezeichneten Daten zu behalten, deaktiviere die Regel stattdessen – das Alert-Formular im Dashboard hat den Aktivierungsschalter. Da weder `fp alerts create` noch `fp alerts update` ein `--enabled`-Flag bieten, ist der CLI-Weg `fp alerts update --file` mit einer vollständigen Definition, die `enabled: false` enthält.
- Die vollständige Liste der Befehle finden Sie in der [`fp alerts`-Referenz](/de/reference/cloud-cli#alerts).
+ Den vollständigen Befehlssatz findest du in der [`fp alerts`-Referenz](/de/reference/cloud-cli#alerts).
-Benachrichtigungsbedingungen können auf Fehlern, Auswertungsbewertungen, Auswertungskombinationen oder benutzerdefiniertem SQL basieren. Fügen Sie Empfänger hinzu, testen Sie die Regel und öffnen Sie den resultierenden Vorfall, um ihn zu bestätigen, zuzuweisen, zu kommentieren, zu abonnieren und zu lösen.
+
+ **test** sendet echte Benachrichtigungen. Es sendet an die tatsächlichen E-Mail-, Slack- und Webhook-Kanäle des Alerts und öffnet ein synthetisches Issue – es kann also die Person anpingen, die gerade Bereitschaft hat. Auf einem interaktiven Terminal erfolgt zuerst eine Bestätigung; `--yes`, `--json` und ein umgeleitetes stdin überspringen diese Aufforderung. Der Server meldet außerdem Erfolg, sobald er die Nachricht absendet – ein grüner Test beweist, dass die Nachricht abgeschickt wurde, nicht dass sie angekommen ist.
+
+
+## Trigger definieren
+
+Es gibt fünf Trigger-Typen:
+
+| `--trigger-kind` | Löst aus, wenn |
+| --- | --- |
+| `metric_threshold` | Eine Metrik einen Schwellenwert überschreitet – Fehler, Latenz, Kosten oder alles andere Messbare. |
+| `per_event` | Ein einzelnes passendes Ereignis eintrifft. |
+| `evaluation_score` | Der Score eines Evaluators einen Schwellenwert überschreitet. |
+| `eval_compound` | Mehrere Score-Bedingungen kombiniert werden, z. B. wenn zwei von drei Scores fehlschlagen. |
+| `custom_sql` | Eine selbst geschriebene Abfrage einen Breach zurückgibt. |
-## Gutes Benachrichtigungsdesign
+Die Bedingung selbst wird in `--trigger-spec` angegeben, passend zum gewählten Typ.
-- Benennen Sie die Bedingung und den betroffenen Workflow.
-- Legen Sie die Umgebung explizit fest.
-- Setzen Sie ein Zeitfenster und einen Schwellenwert, um nicht auf einzelne harmlose Ereignisse zu reagieren.
-- Fügen Sie einen Link oder eine Abfrage ein, die Verantwortliche zu den betreffenden Sitzungen führt.
-- Weisen Sie einen Eigentümer zu, bevor Sie die Regel aktivieren.
+## Auswertungswerte festlegen
+
+Das Dashboard-Formular und die CLI fragen nach denselben vier Werten.
+
+| Einstellung | Flag | Zulässige Werte |
+| --- | --- | --- |
+| Schweregrad | `--severity` | `info`, `warning`, `critical` |
+| Auswertungsintervall | `--eval-interval-secs` | 30–86.400 Sekunden |
+| Breach-Anzahl | `--min-breaches` | Mindestens 1 und nie mehr als das Fenster |
+| Auswertungsfenster | `--eval-window` | Mindestens 1, gezählt in **Intervallen**, nicht in Sekunden |
+
+`--eval-interval-secs 300 --min-breaches 2 --eval-window 3` bedeutet also: „alle fünf Minuten auswerten und auslösen, wenn zwei der letzten drei Auswertungen einen Breach hatten".
+
+## Gutes Alert-Design
+
+- Benenne die Bedingung und den betroffenen Workflow.
+- Schränke die Umgebung explizit ein.
+- Lege ein Fenster und einen Schwellenwert fest, die eine Reaktion auf ein einzelnes harmloses Ereignis vermeiden.
+- Füge einen Link oder eine Abfrage ein, die Verantwortliche zu den Sessions führt.
+- Weise einen Eigentümer zu, bevor du die Regel aktivierst.
+- Prüfe mit `fp alerts show ` die Anzahl offener Issues, bevor du eine weitere Regel für dasselbe Symptom hinzufügst. Die Dashboard-Karte zeigt diese Zeile nur an, wenn die Anzahl ungleich null ist.
- Fügen Sie nach der Behebung eines Audit-Befundes eine Benachrichtigung hinzu, wenn derselbe Fehler außerhalb des Abdeckungsbereichs der Richtlinie erneut auftreten könnte.
-
\ No newline at end of file
+ Füge nach der Behebung eines Audit-Befunds einen Alert hinzu, wenn derselbe Fehler außerhalb des Geltungsbereichs der Policy erneut auftreten könnte.
+
+
+
+ Bestätigen, zuweisen, kommentieren, abonnieren und schließen – der Workflow, in den jeder ausgelöste Alert mündet.
+
\ No newline at end of file
diff --git a/docs/de/audits/cadence.mdx b/docs/de/audits/cadence.mdx
index 2c8ec8f6a..77e6b0cdb 100644
--- a/docs/de/audits/cadence.mdx
+++ b/docs/de/audits/cadence.mdx
@@ -1,27 +1,29 @@
---
-title: "Audit-Rhythmus"
-description: "Legen Sie fest, wann wiederkehrende Audits ausgeführt werden und wie viele Daten dabei geprüft werden."
+title: "Audit-Takt"
+description: "Legen Sie fest, wann wiederkehrende Audits ausgeführt werden und wie viele Daten sie analysieren."
icon: "calendar-clock"
---
-Verwenden Sie wiederkehrende Audits für Fehlermuster, die bei Änderungen an Agents, Prompts, Tools und Modellen erneut auftreten können.
+Verwenden Sie wiederkehrende Audits für Fehlerbilder, die erneut auftreten können, wenn sich Agents, Prompts, Tools und Modelle ändern.
-## Zeitplan anpassen
+## Zeitplan ändern
- 1. Wechseln Sie zu **Analyze → Audits** und öffnen Sie das Audit.
- 2. Öffnen Sie die Einstellungen und ändern Sie den Aktivierungsstatus, das Intervall, den UTC-Ankerzeitpunkt, den Fenstermodus oder den Rückblickzeitraum.
- 3. Speichern Sie das Audit und überprüfen Sie den nächsten Ausführungszeitpunkt auf der Audit-Karte.
- 4. Verwenden Sie **Jetzt ausführen** einmalig nach einer wesentlichen Änderung des Umfangs oder Kontexts.
+ 1. Gehen Sie zu **Analyze → Audits** und öffnen Sie das Audit.
+ 2. Wählen Sie **edit settings** und ändern Sie Takt, Fenster, Sensitivität oder Befunde pro Durchlauf.
+ 3. Speichern Sie das Audit und bestätigen Sie den nächsten Ausführungszeitpunkt im Audit-Header.
+ 4. Halten Sie den Zeitplan über denselben Header an und setzen Sie ihn fort – neben **run now**.
+ 5. Verwenden Sie **run now** einmalig nach einer wesentlichen Änderung des Umfangs oder Kontexts.
- 
+ 
```bash
fp audits edit checkout-reliability \
--schedule-interval-secs 86400 \
--schedule-anchor 2026-08-15T09:00:00Z \
+ --window-mode since_last \
--lookback-window-secs 86400 \
--yes
@@ -29,21 +31,50 @@ Verwenden Sie wiederkehrende Audits für Fehlermuster, die bei Änderungen an Ag
fp audits edit checkout-reliability --enabled --yes
```
- Weitere Informationen zu Zeitplangrenzen, Fensterverhalten und allen Audit-Befehlen finden Sie in der [`fp audits`-Referenz](/de/reference/cloud-cli#audits).
+ `fp audits edit` fordert vor jeder Änderung eine Bestätigung an – daher übergibt jedes Beispiel hier `--yes`. Der Server ersetzt bei jedem Bearbeitungsvorgang die gesamte Definition, weshalb die CLI das aktuelle Audit mit Ihren Änderungen erneut sendet. Eine ausschließlich flag-basierte Bearbeitung erfordert `audits:read` **sowie** `audits:write`. Konfigurieren Sie einen CI-Schlüssel für beide Berechtigungen.
+
+ Informationen zu Zeitplangrenzen, Fensterverhalten und allen Audit-Befehlen finden Sie in der [`fp audits`-Referenz](/de/reference/cloud-cli#audits).
-Wählen Sie den Rhythmus basierend auf der Geschwindigkeit und den Kosten des Risikos:
+## Die zwei Zeitplangrenzen
+
+Jede der nachfolgenden Empfehlungen muss innerhalb dieser Grenzen liegen. Die Bereiche sind serverseitig festgelegt, und `fp` spiegelt sie clientseitig wider – ein Wert außerhalb eines Bereichs führt lokal zu einem Exit-Code 2, anstatt einen 422-Roundtrip zu verursachen.
+
+| Feld | Flag | Bereich | Standard |
+| --- | --- | --- | --- |
+| Zeitplanintervall | `--schedule-interval-secs` | 3.600–604.800 Sekunden (1 Stunde bis 7 Tage) | 86.400 (täglich) |
+| Lookback-Fenster | `--lookback-window-secs` | 3.600–7.776.000 Sekunden (1 Stunde bis 90 Tage) | 604.800 (7 Tage) |
+
+Sieben Tage ist die Obergrenze für den Takt. Es gibt kein monatliches Cloud-Audit.
-| Risikomuster | Empfohlener Einstiegsrhythmus |
+## Takt wählen
+
+Wählen Sie entsprechend der Geschwindigkeit und dem Kostenaufwand des Risikos:
+
+| Risikomuster | Empfohlener Starttakt |
| --- | --- |
-| Produktionsaktionen mit hohem Einflusspotenzial | Täglich |
+| Produktionsaktionen mit hohem Einfluss | Täglich oder stündlich, während eine riskante Änderung eingespielt wird |
| Workflow- oder Modell-Regression | Wöchentlich |
-| Governance- oder Zugriffsüberprüfung | Monatlich |
-| Einmalige Release-Untersuchung | Einmalig ausführen |
+| Governance- oder Zugriffsüberprüfung | Wöchentlich – das längste verfügbare Intervall |
+
+Stimmen Sie das Lookback-Fenster auf den Takt ab, damit Durchläufe weder Lücken hinterlassen noch wiederholt eine unnötig große Datenmenge analysieren.
+
+Es gibt kein einmaliges Audit – jedes Audit besitzt ein Zeitplanintervall. Für eine Release-Untersuchung erstellen Sie es im aktivierten Zustand, lassen den ersten Durchlauf starten – der erste Durchlauf wird unabhängig vom Anker sofort nach der Erstellung in die Warteschlange eingereiht – und deaktivieren es anschließend mit `fp audits edit --disabled --yes`. Aktivieren Sie es erneut, bevor Sie **run now** verwenden: Ein deaktiviertes Audit hat keinen Warteschlangeneintrag, und ein manueller Durchlauf gegen ein deaktiviertes Audit wird mit einem 409 abgelehnt.
+
+## Fenstermodus und Anker
+
+`--window-mode` legt fest, welches Fenster jeder Durchlauf erfasst:
+
+| Modus | Verhalten |
+| --- | --- |
+| `since_last` | Setzt am Ende des zuletzt vollständig analysierten Fensters fort, sodass ein ausgelassener Durchlauf keine Lücke hinterlässt. |
+| `fixed` | Analysiert bei jedem Durchlauf ein rollendes Fenster von `lookback_window_secs`, unabhängig davon, was der letzte Durchlauf abgedeckt hat. |
+
+`--schedule-anchor` legt die Phase fest, nicht die Häufigkeit: Durchläufe erfolgen zu `anchor + N × interval`. Wird er weggelassen, wird der Anker standardmäßig auf das nächste 09:00 UTC gesetzt; ein Anker, der mehr als 365 Tage in der Zukunft liegt, wird abgelehnt. Eine Änderung des Intervalls oder Ankers wird erst beim nächsten Neueinplanen wirksam, nicht für den bereits in der Warteschlange befindlichen Durchlauf. Ein fehlgeschlagener Durchlauf verschiebt den Anker nicht.
-Stimmen Sie den Rückblickzeitraum auf den Rhythmus ab, sodass Ausführungen weder Lücken hinterlassen noch unnötig große Datemengen wiederholt prüfen. Nachdem Sie das Ziel oder den Kontext eines Audits geändert haben, führen Sie es einmal manuell aus, bevor Sie sich auf das nächste geplante Ergebnis verlassen.
+Führen Sie das Audit nach einer Änderung seines Ziels oder Kontexts einmalig manuell aus, bevor Sie sich auf das nächste geplante Ergebnis verlassen.
- Lokal geplante Audits werden auf dem jeweiligen Gerät konfiguriert und scannen den lokalen Agent-Verlauf. Cloud-Audit-Zeitpläne arbeiten mit Cloud-Sitzungen. Behandeln Sie deren Ergebnisse und Zuständigkeiten getrennt voneinander.
+ Diese Seite behandelt Cloud-Audit-Zeitpläne, die auf Cloud-Sitzungen basieren. Das lokale Audit hat seinen eigenen Timer: `failproofai audit --schedule [days]` akzeptiert 1–90 Tage (Standard: 7), scannt den Agent-Verlauf auf genau diesem einen Rechner und ist die einzige Oberfläche mit einer monatlichen Option. Ergebnisse und Eigentümerschaft sind vollständig unabhängig von den hier beschriebenen Inhalten – siehe [Lokalen Agent-Verlauf auditieren](/de/audits/local-audit).
\ No newline at end of file
diff --git a/docs/de/audits/findings-and-issues.mdx b/docs/de/audits/findings-and-issues.mdx
index f31a9d349..62c10e47b 100644
--- a/docs/de/audits/findings-and-issues.mdx
+++ b/docs/de/audits/findings-and-issues.mdx
@@ -1,33 +1,42 @@
---
-title: "Findings und Issues"
-description: "Verwandle Audit-Belege in zugewiesene, nachverfolgbare Behebungsaufgaben."
+title: "Befunde und Issues"
+description: "Audit-Belege in zugeordnete, nachverfolgbare Behebungsaufgaben umwandeln."
icon: "clipboard-check"
---
-Ein Finding ist die beleggestützte Aussage des Audits über einen Fehler. Ein Issue ist der dauerhaft bestehende Workflow, um darauf zu reagieren.
+Ein Befund ist die beleggestützte Aussage des Audits über einen Fehler. Ein Issue ist der dauerhafter Workflow zur Reaktion darauf.
-## Arbeit triagieren und zuweisen
+Die beiden Objekte verwenden unterschiedliche Begriffe und liegen nebeneinander – es lohnt sich daher, sie zunächst klar voneinander abzugrenzen:
+
+| | Befund | Issue |
+| --- | --- | --- |
+| Zustände | `open`, `recurring`, `resolved`, `dismissed`, `muted` | `firing`, `acknowledged`, `resolved` |
+| Filter-Flag | `--status` | `--state` |
+| Bezeichner | Finding-ID | Issue-ID |
+| Standardansicht | Aktive Menge: offen und wiederkehrend | Neueste zuerst |
+
+## Triage und Zuweisung der Arbeit
- 1. Öffne **Analyze → Audits**, wähle einen abgeschlossenen Lauf und selektiere ein Finding, um dessen Analyse, Empfehlung, Sessions und Evidenzabfragen einzusehen.
- 2. Bestätige, weise zu, verwerfe, stumme, löse auf oder öffne das Finding erneut, nachdem du seine Belege geprüft hast.
- 3. Gehe zu **Analyze → Issues** und filtere den dauerhaften Eingang nach Status, Schweregrad oder Verantwortlichem.
- 4. Öffne das Issue, um es zuzuweisen, Kommentare oder Abonnenten hinzuzufügen und es nach verifizierter Behebung aufzulösen.
+ 1. Öffnen Sie **Analyze → Audits**, wählen Sie einen abgeschlossenen Lauf und klicken Sie auf einen Befund, um seine Analyse, Empfehlung, Sitzungen und Beleganfragen einzusehen.
+ 2. Bestätigen, zuweisen, verwerfen, stummschalten, auflösen oder wieder öffnen Sie den Befund nach Prüfung der Belege.
+ 3. Wechseln Sie zu **Analyze → Issues** und filtern Sie den dauerhaften Posteingang nach Zustand, Schweregrad oder Verantwortlichem.
+ 4. Öffnen Sie das Issue, um es zuzuweisen, Kommentare oder Abonnenten hinzuzufügen und es nach der Verifikation der Behebung aufzulösen.
- Beginne mit der Finding-Zusammenfassung. Überprüfe, ob die Fehlerbeschreibung, die empfohlene Reaktion, der Schweregrad und die Einordnung mit den Sessions übereinstimmen, die du vom Audit erwartet hast.
+ Beginnen Sie mit der Befundübersicht. Prüfen Sie, ob die Fehlerbeschreibung, die empfohlene Maßnahme, der Schweregrad und das Ranking mit den Sitzungen übereinstimmen, die das Audit untersuchen sollte.
- 
+ 
- Öffne anschließend eine betroffene Session, anstatt allein auf Basis der Zusammenfassung zu entscheiden. Der verknüpfte Trace sollte das genaue Ereignis und den Payload zeigen, die das Finding unterstützen.
+ Öffnen Sie anschließend eine betroffene Sitzung, anstatt allein auf Basis der Übersicht zu entscheiden. Der verknüpfte Trace sollte das genaue Ereignis und die Nutzlast zeigen, die den Befund belegen.
- 
+ 
- Verwende nach der Überprüfung der Belege Issues, um der Reaktion einen Eigentümer zu geben und sie unabhängig von künftigen Audit-Läufen zu verfolgen.
+ Nutzen Sie nach der Belegprüfung Issues, um der Reaktion einen Verantwortlichen zu geben und sie unabhängig von zukünftigen Audit-Läufen nachzuverfolgen.
- 
+ 
- Öffne das Issue, um Untersuchungsnotizen zu erfassen, Abonnenten zu benachrichtigen und den Reaktionsverlauf festzuhalten. Löse es erst auf, nachdem die Behebung deployed und verifiziert wurde.
+ Öffnen Sie das Issue, um Untersuchungsnotizen festzuhalten, Abonnenten zu benachrichtigen und die Reaktionshistorie zu bewahren. Lösen Sie es erst auf, nachdem die Behebung ausgerollt und verifiziert wurde.

@@ -37,60 +46,94 @@ Ein Finding ist die beleggestützte Aussage des Audits über einen Fehler. Ein I
fp audits finding
fp audits ack --reason "owner assigned"
fp audits assign --to engineer@example.com
+ fp audits mute --reason "expected in staging" --yes
+ fp audits dismiss --reason "false positive" --yes
+ fp audits resolve --yes
+ fp audits reopen
- fp issues list
+ fp issues list --state firing
fp issues show
+ fp issues ack
fp issues assign --assignee engineer@example.com
fp issues comment-add --body "policy is in observe mode"
fp issues resolve --yes
```
- Verwende `fp issues subscribe `, `fp issues unsubscribe ` und `fp issues subscribers `, um Beobachter zu verwalten.
+ `mute`, `dismiss` und `resolve` unterdrücken oder schließen einen Befund, daher wird jeweils eine Bestätigung angefordert – übergeben Sie `--yes` in Skripten. `ack`, `reopen` und `assign` sind umkehrbare Verwaltungsaktionen und wirken sofort. `ack`, `mute` und `dismiss` akzeptieren `--reason`, und es lohnt sich, diesen anzugeben: Er wird als dauerhaftes Feedback zum Befund gespeichert und nicht bloß in ein Log geschrieben und vergessen. `resolve`, `reopen` und `assign` akzeptieren keinen Grund.
+
+ Die Zuweisung funktioniert bei beiden Objekten unterschiedlich. `fp audits assign` erfordert `--to ` und setzt einen Verantwortlichen; erneutes Ausführen ersetzt die Zuweisung. `fp issues assign` nimmt ein wiederholbares `--assignee` und **ersetzt** die gesamte Liste – das Weglassen löscht also alle Verantwortlichen.
+
+ Verwenden Sie `fp issues comment-list `, `fp issues count --state firing` sowie `fp issues subscribe`/`unsubscribe`/`subscribers ` für den restlichen Issue-Funktionsumfang.
- Siehe die [Cloud-CLI-Audit- und Issue-Referenz](/de/reference/cloud-cli#audits) für Audit-Findings und [`fp issues`](/de/reference/cloud-cli#issues) für die Issue-Verwaltung.
+ Siehe die [Cloud-CLI-Referenz für Audits und Issues](/de/reference/cloud-cli#audits) für Audit-Befunde und [`fp issues`](/de/reference/cloud-cli#issues) für das Issue-Management.
-## Ein Finding überprüfen
+## Einen Befund prüfen
+
+Zwei Felder bestimmen den weiteren Umgang, bevor alles andere greift.
+
+**`kind`** unterscheidet einen `failure` (etwas ist schiefgelaufen) von einem `policy`-Verstoß (eine Regel wurde verletzt) und einer `improvement` (die Arbeit könnte besser erledigt werden). Es wird als Badge am Befund angezeigt. Ein `policy`-Befund ist der einzige, den eine Policy schließen kann; die anderen beiden erfordern in der Regel eine Workflow-Änderung, einen Alert oder einen menschlichen Eingriff.
+
+**`priority`** ist ein Wert zwischen 0 und 1, der pro Lauf neu berechnet wird, und bestimmt die Sortierreihenfolge der Befundwarteschlange. Die Befundseite schlüsselt ihn unter **why it ranks here** als Wert × Gewichtung auf:
+
+| Faktor | Gewichtung |
+| --- | --- |
+| Coverage | 0,30 |
+| Severity | 0,25 |
+| Magnitude | 0,25 |
+| Recency | 0,20 |
-Stelle sicher, dass es folgendes enthält:
+Prüfen Sie anschließend, ob der Befund enthält:
-- Ein stabiles Fehlermuster, nicht nur einen einmaligen Titel
-- Schweregrad und betriebliche Auswirkung
-- Betroffene Session-IDs oder unterstützende Abfragen
+- Eine stabile Fehlerform, nicht nur einen einmaligen Titel
+- Schweregrad und operativen Auswirkungen
+- Betroffene Sitzungs-IDs oder unterstützende Abfragen
- Ausreichend Kontext, um das Verhalten zu reproduzieren
- Eine vorgeschlagene Reaktion, die mit den Belegen übereinstimmt
-## Ein Issue zur Verwaltung der Reaktion verwenden
+Um einen Befund zu reproduzieren, rufen Sie ihn vollständig ab: `fp --json audits finding ` gibt den vollständigen Datensatz mit unveränderten `evidence`-, `evidence_queries`- und `scope`-Feldern zurück – genau das, womit die Analyse tatsächlich gearbeitet hat. `--json` ist eine globale Option und muss daher vor dem Befehl stehen.
-Erstelle oder verknüpfe ein Issue, wenn das Finding Zuweisung, Diskussion, Statusänderungen, Kommentare oder Abonnenten benötigt. Issues können auch Alert-Incidents und manuell gemeldete Probleme repräsentieren – deshalb sind sie unter „Audit-Reaktion" und nicht in der primären Navigation angesiedelt.
+## Ein Issue zur Steuerung der Reaktion nutzen
-Löse das Issue auf, wenn die Behebung deployed und verifiziert ist. Löse das Finding auf, wenn das Fehlermuster für die Audit-Population adressiert wurde. Diese Zeitpunkte können sich unterscheiden.
+Erstellen oder verknüpfen Sie ein Issue, wenn der Befund Zuweisung, Diskussion, Statusänderungen, Kommentare oder Abonnenten erfordert. Das Feld `source` eines Issues protokolliert seine Herkunft – `audit`, `alert` oder `manual` –, weshalb das Dashboard Issues eine eigene **Issues**-Ansicht gibt, anstatt sie unter einem Audit zu verschachteln.
+
+Das Abonnieren erfolgt teilweise automatisch. Personen werden abonniert, wenn sie ein Issue bestätigen, kommentieren, ihm zugewiesen werden oder es öffnen – `fp issues subscribers` listet nur aktive Abonnenten auf und entspricht damit nicht bloß der Liste manueller Abonnements. Ein Kommentar sendet eine E-Mail an alle aktiven Abonnenten, und zum Kommentieren wird nur `issues:read` benötigt – ein Prüfer mit Lesezugriff ist also niemals ein stiller Beobachter.
+
+Lösen Sie das Issue auf, wenn die Behebung ausgerollt und verifiziert wurde. Lösen Sie den Befund auf, wenn die Fehlerform für die Audit-Population behoben wurde. Diese Momente können auseinanderliegen.
## Ein Issue in einen Policy-Entwurf umwandeln
- 1. Öffne das Issue und überprüfe sein Finding, die zitierten Sessions, die Ursache und die Empfehlung.
- 2. Wähle **generate policy** und überprüfe das Eignungsergebnis sowie den vorgeschlagenen Durchsetzungsintent. Ein **no policy**-Ergebnis bedeutet, dass das Verhalten stattdessen einen Alert, eine Workflow-Änderung oder eine menschliche Reaktion erfordern könnte.
- 3. Wähle **write this policy**, überprüfe und teste den generierten Quellcode dann im **Admin → policy editor**, bevor du **publish version** auswählst. Verwende **open the editor anyway**, wenn du dem Eignungscheck nicht zustimmst.
- 4. Gehe zu **Admin → enforcement**, deploye die Version im **observe**-Modus und überprüfe ihre Entscheidungen unter **Observe → policy**, bevor du sie durchsetzt.
+ 1. Öffnen Sie das Issue und verifizieren Sie seinen Befund, die zitierten Sitzungen, die Ursache und die Empfehlung.
+ 2. Wählen Sie **generate policy** und prüfen Sie das Eignungsergebnis sowie die vorgeschlagene Durchsetzungsabsicht. Ein Ergebnis **no policy** bedeutet, dass das Verhalten stattdessen einen Alert, eine Workflow-Änderung oder einen menschlichen Eingriff erfordert.
+ 3. Wählen Sie **write this policy**, prüfen und testen Sie dann den generierten Quellcode im **Admin → policy editor**, bevor Sie **publish version** auswählen. Verwenden Sie **open the editor anyway**, wenn Sie mit dem Eignungscheck nicht einverstanden sind.
+ 4. Wechseln Sie zu **Admin → enforcement**, stellen Sie die Version im **observe**-Modus bereit und überprüfen Sie ihre Entscheidungen unter **Observe → policy**, bevor Sie sie durchsetzen.
- Der Issue-Titel, die Finding-Beschreibung, die Ursache, die Empfehlung und der Eignungsintent helfen beim Verfassen des Entwurfs. Es wird nichts automatisch veröffentlicht oder deployed.
+ Titel des Issues, Befundbeschreibung, Ursache, Empfehlung und Eignungsabsicht helfen beim Verfassen des Entwurfs. Es wird nichts automatisch veröffentlicht oder bereitgestellt.
- Verwende die CLI, um die Belege zu prüfen, bevor du das Issue im Dashboard öffnest:
+ Verwenden Sie die CLI, um die Belege zu prüfen, bevor Sie das Issue im Dashboard öffnen:
```bash
fp issues show
- fp audits finding
+ fp --json audits finding
fp events --session-id --full --all
```
- Policy-Eignung, Cloud-Veröffentlichung und Fleet-Deployment sind Dashboard-Workflows. Verwende `failproofai policies --install --custom `, wenn du den entsprechenden Policy-Quellcode zuerst lokal validieren möchtest.
+ Das Dashboard ist ein Weg; die CLI ist der andere. `fp policies compose ""` erstellt einen Policy-Entwurf, `fp policies publish ./policy.mjs` erzeugt eine Version (Veröffentlichen stellt nichts bereit), und `fp fleet deploy --add :observe` bringt sie im Schattenmodus auf eine Maschine. Das Suffix `:observe` ist erforderlich – ein bloßes `--add ` setzt sofort durch. Lesen Sie mit `fp guardrails summary --since 24h`, was sie getan hätte, und befördern Sie dann mit `--add :enforce`.
+
+ Um äquivalenten Policy-Quellcode zunächst auf Ihrer eigenen Maschine auszuprobieren, verweisen Sie die lokale CLI auf die Datei:
+
+ ```bash
+ failproofai policies -i -c ./checkout-policies.js
+ ```
+
+ Eine Datei, deren Name auf `policies.js`, `policies.mjs` oder `policies.ts` endet und in `.failproofai/policies/` im Projekt oder unter `~/` abgelegt wird, wird bei jedem Hook-Ereignis ohne weitere Flags geladen.
-
- Wandle ein bestätigtes, wiederholbares Aktionsmuster in eine Policy-Version um.
+
+ Ein bestätigtes, wiederholbares Aktionsmuster in eine Policy-Version umwandeln.
\ No newline at end of file
diff --git a/docs/de/audits/local-audit.mdx b/docs/de/audits/local-audit.mdx
index ea61388b1..fb33f1f02 100644
--- a/docs/de/audits/local-audit.mdx
+++ b/docs/de/audits/local-audit.mdx
@@ -1,74 +1,56 @@
---
-title: "Lokalen Agentenverlauf prüfen"
-description: "Unterstützte Agent-CLI-Verläufe offline scannen und riskantes oder verschwenderisches Verhalten lokal überprüfen."
+title: "Lokalen Agenten-Verlauf prüfen"
+description: "Agenten-Verlauf auf diesem Gerät auf riskantes oder ineffizientes Verhalten scannen."
icon: "laptop-minimal-check"
---
-Verwende ein lokales Audit für eine sofortige, private Überprüfung, bevor du einen Rechner mit Failproof AI Cloud verbindest. Es scannt die bereits auf deinem Rechner gespeicherten Agentenverläufe, repliziert die Tool-Aktivität durch integrierte Richtlinien und öffnet ein lokales Ergebnis-Dashboard.
+Ein lokales Audit liest den Agenten-Verlauf auf diesem Gerät und öffnet die Ergebnisse unter `http://localhost:8020/audit`. Es ist kein Konto erforderlich.
-## Interaktives Audit ausführen
+```bash
+failproofai audit
+```
-
-
- Das lokale Audit startet über die CLI, da es Verläufe auf dem aktuellen Rechner auffinden muss. Führe `failproofai audit` aus; nach dem Scan startet Failproof AI das mitgelieferte Dashboard und öffnet **http://localhost:8020/audit**.
+Der Scan erfasst den Verlauf aller unterstützten Harnesses, die gefunden werden. Er wendet den in dieser Version integrierten Katalog mit 39 Richtlinien an; installierte Packs und benutzerdefinierte Richtlinien sind nicht enthalten.
- Überprüfe in der Audit-Ansicht die Anzahl der Sitzungen, Tool-Aufrufe, Projekte und Richtlinientreffer. Beginne mit häufigen Befunden, und untersuche dann das betroffene Projekt und den Agentenverlauf, bevor du die Durchsetzung aktivierst.
+## Ergebnisse lesen
- Das lokale Audit-Dashboard ist von **Analyze → Audits** in Failproof AI Cloud getrennt. Lokale Audits verbleiben auf dem Rechner und erfordern kein Konto oder keine Netzwerkverbindung.
-
-
- ```bash
- npm install -g failproofai
- failproofai audit
- ```
+Beginne mit den häufigsten Befunden und öffne dann die betroffene Sitzung, bevor du die Durchsetzung aktivierst.
- Der Befehl führt einen vollständigen Scan aller gefundenen unterstützten Verläufe durch. Der aktuelle Befehl akzeptiert keine Filter wie `--since`, `--cli`, `--project`, `--port` oder `--no-open`.
+Drei Einschränkungen sind zu beachten:
- Halte den Prozess am Laufen, während du das lokale Dashboard verwendest. Drücke Ctrl+C, wenn du fertig bist.
-
-
+- Das Audit rekonstruiert Tool-Ereignisse, nicht `Stop`, daher erscheinen `require-*-before-stop`-Richtlinien nicht.
+- Acht „Nur-Audit"-Prüfungen identifizieren ineffiziente Muster ohne eine exakt passende Richtlinie.
+- `warn-repeated-tool-calls` wird übersprungen, da eine Wiederholung den transskriptseitigen Zustand verändern würde.
-Die aktuellen Audit-Adapter können Verläufe von Claude Code, Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi, Hermes, OpenClaw, Factory, Devin, Antigravity und Goose lesen. Es werden nur lokal verfügbare Verläufe gescannt.
+Für einen durchsetzbaren Befund verwende den im Ergebnis angezeigten Richtlinienbefehl. Überprüfe die [Harness-Durchsetzungsunterstützung](/de/reference/harnesses#enforcement-capability), bevor du dich darauf verlässt.
-## Regelmäßige lokale Audits planen
+Das gecachte Ergebnis liegt unter `~/.failproofai/audit/dashboard.json` und verfällt nach sieben Tagen.
-
-
- Öffne **Einstellungen** im lokalen Dashboard, aktiviere geplante Audits, wähle das Intervall und gib die E-Mail-Adresse an, die Befunde erhalten soll. Dashboard und CLI aktualisieren dieselbe Rechnerkonfiguration.
-
-
- Ein wöchentliches Audit aktivieren und Befunde an die angegebene Adresse senden:
+## Scans planen
- ```bash
- failproofai audit --schedule 7 --email reliability@example.com
- failproofai audit --status
- ```
+```bash
+failproofai audit --schedule 7
+failproofai audit --status
+failproofai audit --no-schedule
+```
- Das Intervall akzeptiert 1–90 Tage und ist standardmäßig 7, wenn es weggelassen wird. Bei der ersten Einrichtung wirst du bei Bedarf angemeldet; `--email` gibt die Berichtsadresse an, ohne eine Eingabeaufforderung zu zeigen.
+Das Intervall akzeptiert 1–90 Tage und ist standardmäßig auf 7 gesetzt. Bei der erstmaligen Planung ist eine interaktive Anmeldung erforderlich. Der Hintergrunddienst muss laufen.
- Den Zeitplan deaktivieren, ohne den lokalen Audit-Verlauf zu löschen:
+### Was das Gerät verlässt
- ```bash
- failproofai audit --no-schedule
- ```
-
-
+Ein interaktives Audit sendet keine Befunde. Anonyme CLI-Telemetrie ist standardmäßig aktiviert; deaktiviere sie mit `FAILPROOFAI_TELEMETRY_DISABLED=1`.
-Der Daemon führt geplante Scans im Hintergrund aus, aktualisiert das zwischengespeicherte Ergebnis für das lokale Dashboard und sendet den konfigurierten Bericht per E-Mail. Verwende `failproofai audit`, wenn du sofort einen interaktiven Scan ausführen möchtest.
+Nachdem du dich für die Planung entschieden hast, sendet jeder geplante Scan die Geräte-ID, den Label, die Plattform und das Scan-Fenster. Werden schädliche Muster gefunden, wird außerdem ein eingeschränkter Digest mit Zählungen, Zeitstempeln und bis zu drei redigierten Beispielen übermittelt. Saubere Scans senden keine Befunde und keine E-Mail.
-## Von lokalen Erkenntnissen zu Cloud-Betrieb wechseln
-
-Ein lokales Audit ist eine schnelle Ausgangsbasis. Verbinde den Rechner mit Failproof AI Cloud, wenn du gemeinsame Traces, wiederkehrende Populations-Audits, Befunde und Probleme, Warnmeldungen, organisationsweite Richtlinienbereitstellung oder Fleet-Übersicht benötigst.
+
+ Audit-Ergebnisse sind Hinweise zur Überprüfung, kein Beweis dafür, dass jede markierte Aktion unsicher ist. Prüfe die Sitzung, bevor du einen Befund in eine blockierende Durchsetzung umwandelst.
+
-
- Definiere ein wiederkehrendes Ziel, eine Population, ein Nachweisfenster und Reaktionskanäle.
+
+ Gemeinsame, wiederkehrende Audits über Agenten und Geräte hinweg ausführen.
-
- Lokal validieren, gezielt veröffentlichen und zunächst für eine kleine Rechnergruppe bereitstellen.
+
+ Geprüfte Richtlinien nach Bestätigung eines Befunds hinzufügen.
-
-
-
- Audit-Ausgabe ist ein Überprüfungsnachweis, kein Beweis dafür, dass jede markierte Aktion unsicher ist. Überprüfe den Kontext, bevor du einen Befund in eine blockierende Durchsetzungsmaßnahme umwandelst.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/de/audits/overview.mdx b/docs/de/audits/overview.mdx
index 609aa3f14..25d1fd8c8 100644
--- a/docs/de/audits/overview.mdx
+++ b/docs/de/audits/overview.mdx
@@ -1,56 +1,64 @@
---
title: "Audits"
-description: "Überprüfe eine definierte Menge von Sessions auf Fehler, die Traces allein nicht aufdecken würden."
+description: "Durchsuche Agent-Läufe nach wiederkehrenden Fehlern, riskantem Verhalten und unnötigem Aufwand."
icon: "scan-search"
---
-Ein Audit durchsucht eine ausgewählte Menge von Sessions nach einem definierten Fehlerziel. Dabei werden Trace-Daten, Evaluierungsergebnisse, Policy-Treffer und Referenzkontext kombiniert, um verwertbare Erkenntnisse zu liefern.
+Ein Audit überprüft viele Agent-Läufe anhand eines Ziels und liefert belegbasierte Erkenntnisse.
-Sieh, wie ein Audit vom geplanten Durchlauf zu belegten Fehlern führt, die du beheben kannst.
+## Lokal oder Cloud
-## Audits öffnen
+| | Lokaler Audit | Cloud-Audit |
+| --- | --- | --- |
+| Befehl | `failproofai audit` | `fp audits` |
+| Liest | Agent-Verlauf auf diesem Gerät | Sessions in deiner Cloud-Organisation |
+| Ergebnis | Lokale Resultate unter `localhost:8020/audit` | Gemeinsame Erkenntnisse, Issues und Alerts |
+| Voraussetzung | Kein Konto erforderlich | Cloud-Verbindung und API-Schlüssel |
-
-
- Gehe zu **Analyze → Audits**. Die Seite zeigt den Planungsstatus, offene Findings, letzten Durchlauf, nächsten Durchlauf, den Rhythmus sowie ob der Audit einen Brief oder Referenzseiten hat. Wähle eine Karte für Einstellungen und den Verlauf der Durchläufe aus; wähle **New Audit**, um einen neuen zu erstellen.
+Verwende einen lokalen Audit für eine schnelle Überprüfung eines einzelnen Geräts. Nutze die Cloud, wenn ein Team einen wiederkehrenden Audit über mehrere Agents und Maschinen hinweg benötigt.
- 
-
-
- ```bash
- fp audits list
- fp audits list --enabled-only --show-id
- fp audits show
- fp audits findings --status open --limit 20
- ```
-
-
+## Fragen, die ein Audit beantworten kann
-Nutze einen Audit, wenn du eine Frage auf Populations-Ebene beantworten möchtest, zum Beispiel:
-
-- Wo brechen Agents Aufgaben ab, ohne sie eskaliert zu haben?
-- Welche Tool-Fehler führen zu wirkungslosen Wiederholungsversuchen?
+- Wo brechen Agents ab, ohne zu eskalieren?
+- Welche Tool-Fehler führen zu ineffektiven Wiederholungsversuchen?
- Greifen Agents auf Daten außerhalb des vorgesehenen Workflows zu?
-- Was hat sich nach einem Modell-, Prompt- oder Tool-Release geändert?
+- Was hat sich nach einer Modell-, Prompt- oder Tool-Aktualisierung verändert?
+
+## Cloud-Audits öffnen
+
+Gehe zu **Analyze → Audits** oder verwende:
+
+```bash
+fp audits list
+fp audits show
+fp audits findings --status open --limit 20
+```
+
+Audit-Befehle verwenden den Audit-Namen oder die vollständige ID. Erkenntnisse werden über ihre eigene ID referenziert.
-## Ablauf der Audit-Reaktion
+## Von der Erkenntnis zur Prävention
```text
Session → Audit → Finding → Issue → Policy
- ↘ Alert for recurrence
+ ↘ Alert
```
-Ein Finding sollte den Fehlermodus benennen und auf Belege verweisen. Ein Issue übernimmt die Behebung. Eine Policy verhindert bekannte Aktionsmuster; ein Alert erkennt das erneute Auftreten, wenn eine Prävention nicht möglich ist oder überwacht werden muss.
+Eine Erkenntnis verweist auf Belege. Ein Issue übernimmt die Reaktion darauf. Eine Policy verhindert ein bekanntes Aktionsmuster; ein Alert überwacht auf erneutes Auftreten.
-
-
- Definiere Ziel, Population und Referenzkontext vor dem ersten Durchlauf.
+Nicht jede Erkenntnis sollte zu einer Policy werden. Eine `policy`-Erkenntnis beschreibt eine durchsetzbare Regel. Eine `failure`- oder `improvement`-Erkenntnis erfordert möglicherweise stattdessen eine Änderung am Workflow, Prompt, Modell oder Tool.
+
+
+
+ Lokalen Verlauf ohne Konto scannen.
+
+
+ Ziel, Sessions und Zeitplan festlegen.
-
- Lege fest, was jeder Agent produzieren muss und was er niemals tun darf.
+
+ Belege sichten und eine Reaktion zuweisen.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/de/audits/recipes.mdx b/docs/de/audits/recipes.mdx
index 14c21c5a5..b34cd421c 100644
--- a/docs/de/audits/recipes.mdx
+++ b/docs/de/audits/recipes.mdx
@@ -4,51 +4,90 @@ description: "Ausgangsziele für häufige Untersuchungen von Agent-Fehlern."
icon: "book-open-check"
---
-Verwende diese als Ausgangsziele und ergänze dann deinen Agenten, die Umgebung und den erwarteten Arbeitsablauf.
+Verwende diese als Ausgangsziele und ergänze deinen Agenten, die Umgebung und den erwarteten Arbeitsablauf.
- Gehe zu **Analysieren → Audits → Neues Audit**, kopiere ein Rezept in die Beschreibung oder den Auftrag und füge anschließend die relevante Umgebung, den Agenten, den Betrachtungszeitraum und Referenz-URLs hinzu. Erstelle das Audit und prüfe den ersten Durchlauf, bevor du es planmäßig einrichtest.
+ Gehe zu **Analysieren → Audits → Neues Audit**. Eine Rezeptzeile von dieser Seite ist die **Beschreibung** — was dieses Audit erkennen soll. Die Workflow-Regeln, die das Ziel bewertbar machen, gehören in **dein Briefing**, in die **Was es weiß**-Karte: Hintergrundinformationen, die das Modell liest, bevor es ein einzelnes Ereignis betrachtet, auf 8.192 Zeichen begrenzt, ergänzend zu dem, wonach das Audit ohnehin sucht. Ein Briefing ersetzt niemals das Ziel und ist niemals ein Beweis für einen Befund.
- Das Formular für ein neues Audit verwandelt ein Rezept in eine ausführbare Fehlerprüfung, indem es Umfang, Kontext, Zeitplan und Benachrichtigungen hinzufügt.
+ Lege dann den Umfang unter **Was es liest** fest, denn ohne das sind die Hälfte dieser Rezepte nur Rauschen. Umgebungen und Agenten grenzen die Population ein; **zu ignorierende Fehler** listet die Fehlertypen auf, die du erwartest und planmäßig behandelst, sodass sie nicht mehr als Fehler gezählt werden. Es werden nur Fehlertyp-Namen akzeptiert — das ist es, was verhindert, dass das Rezept für Wiederholungsschleifen überflutet wird.
- 
+ Das neue Audit-Formular verwandelt ein Rezept in eine ausführbare Fehlerprüfung, indem Umfang, Kontext, Rhythmus und Benachrichtigungen hinzugefügt werden.
- Stelle nach der Erstellung sicher, dass das Audit in der Liste mit dem erwarteten Status und Zeitplan erscheint, bevor du dich auf wiederkehrende Durchläufe verlässt.
+ 
- 
+ Bestätige nach der Erstellung, dass das Audit mit dem erwarteten Status und Zeitplan in der Liste erscheint, bevor du dich auf wiederkehrende Ausführungen verlässt.
- Öffne den ersten Durchlauf und verfeinere das Rezept, wenn seine Ergebnisse breiter oder enger als der beabsichtigte Fehlermodus sind.
+ Öffne die erste Ausführung und verfeinere das Rezept, wenn die Befunde breiter oder enger sind als der beabsichtigte Fehlermodus.
Speichere ein Rezept als Textdatei und füge es bei der Erstellung hinzu:
```bash
fp audits create retry-loop-review \
+ --description "Find agents that repeat a failing tool call without changing anything" \
--scope '{"environments":["production"]}' \
+ --ignore-error-type RateLimitRetried \
--text-file ./retry-loop-audit.txt \
--schedule-interval-secs 86400
```
+
+ `--text` und `--text-file` sind zwei Möglichkeiten, dasselbe Briefing zu übermitteln; übergib nur eine Option, nicht beide. Füge Referenzseiten mit `--url` hinzu, bis zu fünf, nur öffentliche `https://`-URLs. Sende alles mit der Erstellungsanfrage: Ein neu aktiviertes Audit ist sofort fällig, sodass Kontext, der in einem zweiten Aufruf geschrieben wird, die erste Ausführung verpassen kann.
+## Das Rezept bewerten, nicht nur die Formulierung
+
+Zwei Einstellungen beeinflussen das Ergebnis stärker als die Formulierung. **Empfindlichkeit** (`low`, `medium`, `high`, Standard `medium`) bestimmt, wie bereitwillig eine Ausführung ein Muster markiert; **Befunde pro Ausführung** (`--top-k`, Standard 50) begrenzt die Anzahl der gespeicherten Befunde. Erhöhe die Empfindlichkeit bei einer Frage, bei der ein übersehener Befund teurer ist als ein falsch positiver, und senke sie bei einem Volumenmuster, das sonst die Warteschlange füllen würde. Jedes der nachfolgenden Rezepte nennt einen Ausgangspunkt — ändere ihn nach dem Lesen der ersten Ausführung, nicht vorher.
+
+Aufgabenabbruch und verpasste Eskalation an Menschen sind Bewertungen daran, was ein Agent hätte tun sollen, nicht an einem Fehler, den er ausgelöst hat. Schreibe zuerst den [Agenten-Kontext](/de/audits/agent-contracts) dieses Agenten, sonst hat die Analyse keinen Standard, an dem sie messen kann.
+
- Finde Sitzungen, in denen der Agent denselben fehlschlagenden Tool-Aufruf wiederholt, ohne die Eingabe zu ändern, ein alternatives Tool auszuwählen oder an einen Menschen eskaliert zu werden.
+ Finde Sitzungen, in denen der Agent denselben fehlgeschlagenen Tool-Aufruf wiederholt, ohne die Eingabe zu ändern, ein alternatives Tool zu wählen oder an einen Menschen zu eskalieren.
+
+ Beginne mit `medium` und liste die Fehlertypen, bei denen du absichtlich wiederholst, unter **zu ignorierende Fehler** auf.
-
- Finde Sitzungen, in denen das gewählte Tool nicht zur angegebenen Aufgabe passt oder die Tool-Eingabe gegen die erforderlichen Vorbedingungen des Arbeitsablaufs verstößt.
+
+ Finde Sitzungen, in denen das gewählte Tool nicht zur angegebenen Aufgabe passt oder die Tool-Eingabe gegen die erforderlichen Vorbedingungen des Workflows verstößt.
+
+ Beginne mit `medium`. Füge die Vorbedingungen selbst ins Briefing ein; ohne sie hat die Analyse keine Regel zum Prüfen.
Finde Sitzungen, die sensible Daten außerhalb der genehmigten Pfade und Dienste für diesen Agenten lesen, schreiben oder übertragen.
+
+ Beginne mit `high`. Eine übersehene Datenpanne kostet mehr als ein falsch positiver Befund, den du einmal verwirfst.
- Finde Sitzungen, die ohne das angeforderte Ergebnis, einen klaren Fehler oder eine ausdrückliche Übergabe an einen Menschen enden.
+ Finde Sitzungen, die ohne das gewünschte Ergebnis, einen klaren Fehler oder eine explizite Übergabe an einen Menschen enden.
+
+ Beginne mit `medium` und schreibe zuerst den Abschnitt **Abgeschlossen wenn** des Agenten — dieses Rezept ist eine Bewertung daran.
Finde Sitzungen, deren Modell-, Tool- oder Gesamtdauer das erwartete Budget überschreitet, und identifiziere das verantwortliche Ereignismuster.
+
+ Beginne mit `low` und erhöhe den Wert, wenn die erste Ausführung wenig ergibt. Budgets gehören ins Briefing, und jeder Fehlertyp, den ein langsamer Pfad planmäßig auslöst, gehört unter **zu ignorierende Fehler**.
-
- Finde Sitzungen, in denen Unsicherheit, wiederholte Fehler oder Richtlinienvorgaben eine menschliche Entscheidung erforderten, der Agent jedoch autonom weitergemacht hat.
+
+ Finde Sitzungen, in denen Konfidenz, wiederholte Fehler oder Richtlinienvorgaben eine menschliche Entscheidung erforderten, der Agent jedoch autonom weiterarbeitete.
+
+ Beginne mit `high` und lege die Eskalationsregel im Abschnitt **Darf nicht** des Agenten fest, damit die Analyse sie als Maßstab verwendet.
-
\ No newline at end of file
+
+
+## Eine erste Antwort erhalten, bevor du etwas erstellst
+
+Mehrere dieser Muster haben bereits Offline-Detektoren im lokalen Audit, das die Agenten-Historien auf deinem eigenen Rechner liest und kein Konto benötigt:
+
+| Detektor | Muster, das er zählt |
+| --- | --- |
+| `sleep-polling-loop` | Ein langes `sleep` oder eine `while … sleep … done` Polling-Schleife |
+| `reread-after-edit` | Lesen einer Datei, die der Agent gerade bearbeitet oder geschrieben hat |
+| `find-from-root` | `find` gegen `/` oder ein anderes übergeordnetes Verzeichnis |
+| `redundant-cd-cwd` | `cd` in das Verzeichnis, in dem sich die Shell bereits befindet |
+| `prefer-edit-over-read-cat` | `cat`, `head`, `tail`, `less` oder `more` auf einer einzelnen Quelldatei |
+| `prefer-edit-over-sed-awk` | In-place-Bearbeitungen durch `sed -i` oder `awk … > file` |
+| `prefer-write-over-heredoc` | Mehrzeiliger Inhalt, der über ein Heredoc oder `echo > file` geschrieben wird |
+| `git-commit-no-verify` | `git commit --no-verify`, wodurch Hooks übersprungen werden |
+
+Diese Detektoren zählen; sie blockieren nicht, und keiner von ihnen misst Kosten oder Latenz. Führe `failproofai audit` aus, um zu sehen, welche verschwenderischen und riskanten Shell-Muster deine Agenten bereits erzeugen, bevor du für ein Cloud-Audit desselben Bereichs bezahlst — siehe [Lokale Agenten-Historie prüfen](/de/audits/local-audit).
\ No newline at end of file
diff --git a/docs/de/audits/run.mdx b/docs/de/audits/run.mdx
index 0cdb149f8..4a0ce5770 100644
--- a/docs/de/audits/run.mdx
+++ b/docs/de/audits/run.mdx
@@ -1,21 +1,21 @@
---
-title: "Audit ausführen und überprüfen"
-description: "Einen Audit ausführen, seine Abdeckung verifizieren und die resultierenden Findings inspizieren."
+title: "Audit ausführen und prüfen"
+description: "Einen Audit ausführen, die Abdeckung überprüfen und die resultierenden Ergebnisse untersuchen."
icon: "play"
---
-Führen Sie einen Audit aus, sobald Ziel und Population so konkret formuliert sind, dass ein anderer Operator weiß, wie ein valides Finding aussieht.
+Führen Sie einen Audit aus, sobald Ziel und Untersuchungsbereich so klar definiert sind, dass ein anderer Operator weiß, wie ein gültiger Befund aussieht.
-## Ausführen und inspizieren
+## Ausführen und untersuchen
- 1. Navigieren Sie zu **Analyze → Audits**, öffnen Sie den Audit und wählen Sie **run now**. Eine Meldung über die Einreihung in die Warteschlange bedeutet, dass der Dispatcher ihn in Kürze startet.
- 2. Öffnen Sie den neuen Run, um Status, Zeitfenster, Dauer, Anzahl der Findings und Bericht einzusehen.
- 3. Wählen Sie eine Evidence-Session aus, um den genauen Trace zu öffnen.
- 4. Kehren Sie zur Audit-Seite zurück, um Einstellungen zu bearbeiten, den Zeitplan zu deaktivieren oder ältere Runs zu inspizieren.
+ 1. Gehen Sie zu **Analyze → Audits**, öffnen Sie den Audit und wählen Sie **run now**. Eine Warteschlangen-Antwort bedeutet, dass der Dispatcher ihn in Kürze startet.
+ 2. Öffnen Sie den neuen Lauf, um Status, Zeitfenster, Dauer, Anzahl der Befunde und Bericht zu überprüfen.
+ 3. Wählen Sie eine Evidence-Session aus, um die genaue Ablaufverfolgung zu öffnen.
+ 4. Kehren Sie zur Audit-Seite zurück, um Einstellungen zu bearbeiten, den Zeitplan zu deaktivieren oder ältere Läufe zu untersuchen.
- 
+ 
```bash
@@ -25,43 +25,82 @@ Führen Sie einen Audit aus, sobald Ziel und Population so konkret formuliert si
fp audits findings --audit checkout-reliability
```
- Siehe die [`fp audits`-Referenz](/de/reference/cloud-cli#audits) für Run-Verlauf, Findings und Triage-Befehle.
+ `fp audits run` stellt den Audit in die Warteschlange und wartet nicht auf ihn. Folgen Sie diesem Befehl mit `fp audits runs ` und lesen Sie die Befunde, sobald ein Lauf abgeschlossen ist. `--limit` gibt nie mehr als die 50 neuesten Läufe zurück, unabhängig davon, was Sie angeben.
+
+ Die Triage arbeitet mit einer Befund-ID, nicht mit dem Audit:
+
+ ```bash
+ fp audits finding
+ fp audits ack --reason "owner assigned"
+ fp audits assign --to engineer@example.com
+ fp audits mute --reason "expected in staging" --yes
+ fp audits dismiss --reason "false positive" --yes
+ fp audits resolve --yes
+ fp audits reopen
+ ```
+
+ `mute`, `dismiss` und `resolve` fordern vor der Ausführung eine Bestätigung an — übergeben Sie daher `--yes` in Skripten. `ack`, `assign` und `reopen` wirken sofort.
+
+ Siehe die [`fp audits`-Referenz](/de/reference/cloud-cli#audits) für Laufhistorie, Befunde und Triage-Befehle.
-## Vor der Ausführung
+**run now** kann abgelehnt werden. Ein bereits laufender Audit und ein deaktivierter Audit antworten beide mit `409`, wobei der Grund im `error`-Feld der Antwort steht; ein nicht vorhandener Audit oder einer, der einer anderen Organisation gehört, antwortet mit `404`.
+
+| Ablehnung | Bedeutung | Vorgehensweise |
+| --- | --- | --- |
+| Unbekannter Audit | Der Audit existiert nicht oder gehört einer anderen Organisation. | Bestätigen Sie den Namen mit `fp audits list`. |
+| Der Audit ist deaktiviert | Ein deaktivierter Audit hat keinen Warteschlangeneintrag, sodass es nichts zu fälligem gibt. Ein pausierter Audit zeigt weiterhin eine **run now**-Steuerung an. | Reaktivieren Sie ihn zuerst oder verwenden Sie `fp audits edit --enabled --yes`. |
+| Ein Lauf ist bereits im Gange | Pro Audit ist jeweils nur ein Lauf möglich; der aktuelle muss abgeschlossen sein, bevor ein weiterer in die Warteschlange gestellt wird. | Prüfen Sie den Status mit `fp audits runs `. |
+
+## Vor dem Ausführen
-- Bestätigen Sie, dass im ausgewählten Zeitfenster Sessions vorhanden sind.
+- Vergewissern Sie sich, dass im ausgewählten Zeitfenster Sessions vorhanden sind.
- Überprüfen Sie die Umgebungs- und Agent-Filter.
-- Stellen Sie sicher, dass der Referenzkontext aktuell ist.
-- Vergewissern Sie sich, dass das Ziel einen Fehlermodus beschreibt und keine gewünschte Schlussfolgerung vorwegnimmt.
+- Stellen Sie sicher, dass der Referenzkontext aktuell ist. Jeder Lauf liest die Seiten des Audits erneut ein und greift auf die gespeicherte Kopie zurück, wenn eine Seite nicht erreichbar ist. Eine verschobene oder offline genommene Seite liefert daher veralteten Text, bis Sie die URL korrigieren.
+- Stellen Sie sicher, dass das Ziel einen Fehlerfall beschreibt, keine erwünschte Schlussfolgerung.
+
+## Den Lauf überprüfen
+
+Die Audit-Detailseite öffnet sich mit fünf Kacheln: **open findings** (ausstehende Triage), **last run**, **next run**, **window** (wie weit jeder Lauf zurückliest) und **sensitivity** (wie eifrig ein Lauf ein Muster markiert: `low`, `medium`, `high`). Das „höchstens N Befunde pro Lauf"-Limit ist eine separate Einstellung, Befunde pro Lauf (`--top-k`, Standard 50). Diese fünf Kacheln beantworten die Abdeckungsfrage schneller als das Öffnen eines Laufs.
-## Den Run überprüfen
+Untersuchen Sie dann den Schweregrad, die Beschreibung, die Evidence-Sessions, die unterstützenden Abfragen und den vorgeschlagenen Präventionspfad jedes Befunds. Befunde sind nach einem **priority**-Score zwischen 0 und 1 geordnet, pro Lauf gereiht, und jeder Befund zeigt die vier gewichteten Faktoren dahinter:
-Beginnen Sie mit Run-Status, Session-Abdeckung und ob die Modellanalyse ausgeführt wurde. Inspizieren Sie anschließend bei jedem Finding den Schweregrad, die Beschreibung, die Evidence-Sessions, die unterstützenden Abfragen und den vorgeschlagenen Präventionspfad.
+| Rankingfaktor | Gewichtung |
+| --- | --- |
+| Coverage | 0,30 |
+| Magnitude | 0,25 |
+| Severity | 0,25 |
+| Recency | 0,20 |
-Verwenden Sie den Finding-Status, um Arbeit zu bestätigen, stummzuschalten, abzulehnen, aufzulösen, wieder zu öffnen oder zuzuweisen. Bewahren Sie die Evidence auch dann auf, wenn das Finding abgelehnt wird – sie erklärt, warum die Entscheidung getroffen wurde.
+Ein Befund befindet sich in genau einem von fünf Status: `open`, `recurring`, `resolved`, `dismissed` oder `muted`. Eine `findings`-Abfrage ohne Statusfilter gibt den aktiven Satz zurück — `open` plus `recurring`. Ein Befund, den Sie stumm schalten, verwerfen oder als gelöst markieren, verlässt diesen Satz; `ack` und `assign` lassen den Status unverändert, sodass der Befund in der Warteschlange verbleibt — mit niedrigerer Priorität oder zugewiesen, aber nicht entfernt. Geben Sie einen Status explizit an, um Befunde zu sehen, die diesen Satz verlassen haben.
-## Einen leeren oder verzögerten Run interpretieren
+Verwenden Sie den Befundstatus, um Arbeit zu bestätigen, stummzuschalten, zu verwerfen, zu lösen, wiederzueröffnen oder zuzuweisen. Bewahren Sie die Nachweise auch dann auf, wenn der Befund verworfen wird; sie erklären, warum die Entscheidung getroffen wurde. [Findings and issues](/de/audits/findings-and-issues) beschreibt, was jedes Verb mit zukünftigen Läufen macht.
-| Run-Zustand | Bedeutung | Maßnahme |
+## Einen leeren oder verzögerten Lauf interpretieren
+
+| Laufzustand | Bedeutung | Vorgehensweise |
| --- | --- | --- |
-| Analyse wurde ausgeführt und ergab null Findings | Die ausgewählten Beweise unterstützten bei der konfigurierten Empfindlichkeit kein Finding. | Bestätigen Sie, dass der Scope repräsentative Sessions enthält, und behandeln Sie das Ergebnis als unbedenklich – es sei denn, Ziel oder Kontext waren zu vage. |
-| Modellanalyse wurde übersprungen oder ist fehlgeschlagen | Der Run wird mit null Findings abgeschlossen, hat aber keine agentische Untersuchung durchgeführt. Der deterministische Credential- und PII-Scan meldet weiterhin Trefferanzahlen in den Run-Statistiken, erstellt jedoch keine Findings. | Beheben Sie den Analysedienst oder die Konfiguration und führen Sie den Run erneut aus. Interpretieren Sie das leere Ergebnis nicht als Beleg dafür, dass die Population unbedenklich ist. |
-| Modellanalyse ist deaktiviert | Der Run wird mit null Findings erfolgreich abgeschlossen. Der deterministische Scan ersetzt weder die Modellanalyse noch öffnet er Findings. | Aktivieren Sie die Modellanalyse oder deaktivieren Sie den Audit, anstatt sich auf einen Audit zu verlassen, der keine Findings produzieren kann. |
-| Keine Analysekapazität ist unmittelbar verfügbar | Der Audit bleibt in der Warteschlange und wiederholt den Versuch, anstatt die Population zu überspringen. | Warten Sie auf verfügbare Kapazität oder verteilen Sie die Audit-Anker. Betreiber mit Self-Hosting sollten die Audit-Agent-Replikas und die dazu passende Dispatcher-Kapazität skalieren. |
-| Kapazität bleibt während des Retry-Fensters nicht verfügbar | Der Run bricht mit null Findings ab und sendet eine Fehlerbenachrichtigung, sofern E-Mail-Zustellung verfügbar ist. | Prüfen Sie, ob die Audit-Flotte ausgelastet ist oder wiederholt neu startet. |
+| Analyse lief durch, ergab null Befunde | Die ausgewählten Nachweise unterstützten bei der konfigurierten Sensitivität keinen Befund. | Bestätigen Sie, dass der Bereich repräsentative Sessions enthält, und behandeln Sie das Ergebnis dann als einwandfrei — sofern das Ziel oder der Kontext nicht zu vage war. |
+| Modellanalyse wurde übersprungen oder ist fehlgeschlagen | Der Lauf schließt mit null Befunden ab, ohne die agentische Untersuchung durchgeführt zu haben. Der deterministische Credential- und PII-Scan meldet weiterhin Trefferanzahlen in den Laufstatistiken, erstellt aber keine Befunde. | Beheben Sie den Analysedienst oder die Konfiguration und führen Sie den Lauf erneut durch. Interpretieren Sie das leere Ergebnis nicht als Beweis, dass die Population einwandfrei ist. |
+| Modellanalyse ist deaktiviert | Der Lauf endet erfolgreich mit null Befunden. Der deterministische Scan ersetzt die Modellanalyse nicht und öffnet keine Befunde. | Aktivieren Sie die Modellanalyse oder deaktivieren Sie den Audit, anstatt sich auf einen Audit zu verlassen, der keine Befunde produzieren kann. |
+| Keine Analysekapazität ist sofort verfügbar | Der Audit bleibt in der Warteschlange und wiederholt den Versuch, anstatt die Population zu überspringen. | Warten Sie auf Kapazität oder verteilen Sie die Audit-Anker. Operatoren mit Self-Hosted-Bereitstellung sollten die Audit-Agent-Replikate und die entsprechende Dispatcher-Kapazität skalieren. |
+| Kapazität bleibt während des Wiederholungsfensters nicht verfügbar | Der Lauf bricht mit null Befunden ab und sendet eine Fehlerbenachrichtigung, wenn E-Mail-Zustellung verfügbar ist. | Überprüfen Sie, ob der Audit-Fleet ausgelastet ist oder wiederholt neu startet. |
+
+Die letzten drei Zeilen beschreiben das Verhalten des Cloud-API-Servers und seines Dispatchers. Bei Managed Cloud liegt deren Behebung bei Failproof AI; bei einer Self-Hosted-Bereitstellung liegt sie bei Ihnen.
+
+Wenn die Analyse nicht durchgeführt wird, halten `since_last`-Audits dieses nicht analysierte Fenster für den nächsten erfolgreichen Lauf offen. Bestehende Befunde werden nicht ausgemustert, da eine übersprungene Analyse kein Beweis dafür ist, dass der Fehler verschwunden ist.
-Wenn die Analyse nicht ausgeführt wird, halten `since_last`-Audits dieses unanalysierte Fenster für den nächsten erfolgreichen Run offen. Bestehende Findings werden nicht zurückgezogen, da eine übersprungene Analyse kein Beleg dafür ist, dass das Problem verschwunden ist.
+## Benachrichtigungen verstehen
-## Fehlerbenachrichtigungen verstehen
+Ein erfolgreicher Lauf benachrichtigt nur dann, wenn er etwas **Neues** findet. Stille von einem einwandfreien Audit ist der Normalfall und kein Zeichen dafür, dass nichts gelaufen ist — prüfen Sie **last run** auf der Audit-Seite oder `fp audits runs `, um zu sehen, dass er gelaufen ist. Ein Audit ohne ausgewählte Kanäle speichert seine Befunde und benachrichtigt niemanden.
-Bei einem fehlgeschlagenen Run oder einem fehlgeschlagenen Modellanalyse-Schritt werden die E-Mail-Empfänger des Audits verwendet. Hat der Audit keinen E-Mail-Kanal, greift Failproof AI auf die Einstellung `alerts.email_default_recipients` der Organisation zurück, damit ein still gebrochener Audit noch einen Eskalationspfad hat.
+Ein fehlgeschlagener Lauf oder ein fehlgeschlagener Modellanalyse-Schritt verwendet die E-Mail-Empfänger des Audits. Wenn der Audit keinen E-Mail-Kanal hat, greift Failproof AI auf die Einstellung `alerts.email_default_recipients` der Organisation zurück, sodass ein still fehlerhafter Audit weiterhin einen Eskalationspfad hat.
-E-Mail muss für die Organisation aktiviert und SMTP muss konfiguriert sein. Andernfalls wird der Fehler protokolliert, aber keine E-Mail kann zugestellt werden. Run-Fehler verschieben den festen Zeitplananker des Audits nicht.
+E-Mail muss für die Organisation aktiviert sein und SMTP muss konfiguriert sein. Andernfalls wird der Fehler protokolliert, aber es kann keine E-Mail zugestellt werden. Laufausfälle verschieben den festen Zeitplananker des Audits nicht.
-Jeder Run speichert außerdem den exakten [Agent-Kontext](/de/audits/agent-contracts), der für jeden Agent verwendet wurde, als Contract-Snapshot. Spätere Bearbeitungen ändern den mit einem früheren Run aufgezeichneten Evidence-Standard nicht.
+Jeder Lauf speichert außerdem den genauen [Agent-Kontext](/de/audits/agent-contracts), der für jeden Agent als Contract-Snapshot verwendet wurde. Spätere Bearbeitungen ändern den mit einem früheren Lauf aufgezeichneten Nachweisstandard nicht.
- Setzen Sie keine blockierende Richtlinie direkt auf Basis eines unverifizierten Findings ein. Öffnen Sie die zitierten Traces und bestätigen Sie, dass die Regel unsicheres Verhalten von legitimer Arbeit trennt.
+ Stellen Sie keine blockierende Richtlinie direkt aus einem unverifizierten Befund bereit. Öffnen Sie die zitierten Traces und überprüfen Sie, ob die Regel unsicheres Verhalten von legitimer Arbeit trennt.
\ No newline at end of file
diff --git a/docs/de/audits/setup.mdx b/docs/de/audits/setup.mdx
index 2a6e799a8..25833ca49 100644
--- a/docs/de/audits/setup.mdx
+++ b/docs/de/audits/setup.mdx
@@ -4,18 +4,21 @@ description: "Auditzielsetzung, Sitzungspopulation und Evidenzkontext definieren
icon: "sliders-horizontal"
---
-Die Qualität eines Audits hängt von seinem Umfang ab. Eine allgemeine Anfrage wie „Probleme finden" liefert weniger nützliche Ergebnisse als eine konkrete Fehlerfrage.
+Die Qualität eines Audits hängt von seinem Umfang ab. Eine allgemeine Anfrage wie „Finde Probleme" liefert weniger nützliche Ergebnisse als eine konkrete Fehlerfrage.
-## Das Audit konfigurieren
+## Audit konfigurieren
- 1. Gehe zu **Analyze → Audits → New audit** und gib Name und Beschreibung ein.
- 2. Lege Takt, Zeitfenster, Agent-/Umgebungsbereich, ignorierte Fehler, Sensitivität und maximale Befunde fest.
- 3. Füge unter **agents** Agentenkontext hinzu oder überprüfe ihn, und ergänze den Operator-Brief sowie öffentliche HTTPS-Referenz-URLs.
- 4. Wähle Benachrichtigungskanäle aus und klicke auf **create audit**. Der erste Durchlauf wird sofort in die Warteschlange gestellt.
+ 1. Gehen Sie zu **Analyze → Audits → New audit** und geben Sie Name und Beschreibung ein. Der Name ist pro Organisation eindeutig; die Beschreibung hält fest, was dieses Audit erfassen soll.
+ 2. Legen Sie unter **when it runs** den Zeitplan und das Fenster fest. Unter **what it reads** grenzen Sie die Population mit Umgebungen, Agents und zu ignorierenden Fehlertypen ein — ein leeres Feld schließt alles ein. Unter **how it judges** stellen Sie die Sensitivität und die Befunde pro Durchlauf ein.
+ 3. Verfassen Sie unter **what it knows** das Operator-Briefing und fügen Sie die Seiten hinzu, die das Audit liest. Das Briefing ist Hintergrundinformation, die das Modell liest, bevor es ein einziges Ereignis betrachtet: Es ergänzt das, wonach dieses Audit bereits sucht, ersetzt es nie und dient nie als Beleg für einen Befund.
+ 4. Öffnen Sie die **agents**-Seitenleiste, um den Kontext der einzelnen Agents hinzuzufügen oder zu überprüfen. Er wird unabhängig vom Audit gespeichert, und die Kopfzeile zeigt, wie viele Ihrer Agents bereits einen Kontext haben. Siehe [Agent-Kontext](/de/audits/agent-contracts).
+ 5. Wählen Sie Benachrichtigungskanäle und klicken Sie auf **create audit**. Ein neues Audit startet aktiviert, und sein erster Durchlauf wird sofort in die Warteschlange gestellt.
- 
+ 
+
+ **agents** in der **what it reads**-Karte ist ein Scope-Filter — er legt fest, welche Sitzungen jeder Durchlauf erfasst. Was ein Agent *leisten soll*, befindet sich in der separaten Agents-Seitenleiste.
```bash
@@ -29,16 +32,44 @@ Die Qualität eines Audits hängt von seinem Umfang ab. Eine allgemeine Anfrage
--url https://runbooks.example.com/checkout
```
- Der erste Durchlauf wird sofort in die Warteschlange gestellt. Füge den Brief und die Referenz-URLs bereits bei der Erstellung hinzu, damit dieser Durchlauf sie erhält.
+ Jedes Feld außer dem Namen hat einen Serverstandardwert, sodass ein bloßes `fp audits create nightly` bereits ein gültiges tägliches Audit ergibt. Ein bereits vergebener Name wird sofort abgelehnt, bevor etwas erstellt wird. Neue Audits starten aktiviert, es sei denn, Sie übergeben `--disabled`, und der erste Durchlauf eines aktivierten Audits wird sofort in die Warteschlange gestellt.
+
+ Basieren Sie eine Definition auf gespeichertem JSON mit `--file audit.json` und ergänzen Sie sie durch Flags. Das ist der reproduzierbare Weg, wenn Audit-Definitionen überprüft oder in der Versionsverwaltung abgelegt werden.
Siehe die vollständige [`fp audits create`-Referenz](/de/reference/cloud-cli#audits).
+## Wertebereiche und Standardwerte
+
+Die numerischen Einstellungen werden auf beiden Seiten validiert, sodass ein Wert außerhalb des zulässigen Bereichs ein Verwendungsfehler ist und keine abgelehnte Anfrage.
+
+| Einstellung | CLI-Flag | Akzeptierte Werte | Standard |
+| --- | --- | --- | --- |
+| Zeitplan | `--schedule-interval-secs` | 3600–604800 (1 Stunde bis 7 Tage) | 86400 (täglich) |
+| Zeitplan-Anker | `--schedule-anchor` | ISO 8601 UTC; ein Anker mehr als 365 Tage in der Zukunft wird abgelehnt | Das nächste 09:00 UTC |
+| Fenster | `--window-mode` | `fixed`, `since_last` | `since_last` |
+| Rückblickzeitraum | `--lookback-window-secs` | 3600–7776000 (1 Stunde bis 90 Tage) | 604800 (7 Tage) |
+| Sensitivität | `--sensitivity` | `low`, `medium`, `high` | `medium` |
+| Befunde pro Durchlauf | `--top-k` | 1 oder mehr | 50 |
+
+Der Anker legt die Phase des Zeitplans fest: Durchläufe finden zu `anchor + N * interval` statt, sodass ein langsamer Durchlauf oder ein manuelles **run now** den Zeitplan nicht verschieben kann. Der erste Durchlauf wird beim Erstellen unabhängig vom Anker sofort in die Warteschlange gestellt.
+
+## Briefing und Referenzseiten
+
+Das Formular zeigt beide Limits als Zähler an, und die CLI setzt dieselben zwei durch:
+
+- Das Briefing ist auf 8.192 Zeichen begrenzt (`--text` oder `--text-file` zum Einlesen aus einer Datei — geben Sie eines der beiden an, nicht beide).
+- Ein Audit referenziert höchstens fünf Seiten, ausschließlich öffentliche `https://`-Adressen (`--url`, wiederholt).
+
+Referenz-URLs werden beim Speichern validiert. Private, Loopback- und Cloud-Metadata-Adressen werden abgelehnt, und eine abgelehnte URL lässt den gesamten Erstellungsvorgang fehlschlagen — es bleibt kein halbfertiges Audit zurück. Akzeptierte Seiten werden im Hintergrund abgerufen, sodass eine langsame Website das Speichern nie blockiert. Jeder Durchlauf liest sie erneut und greift auf den gespeicherten Snapshot zurück, wenn eine Seite nicht erreichbar ist. Snapshots werden wöchentlich automatisch aktualisiert. Verwenden Sie `fp audits context-refresh `, wenn Sie wissen, dass sich eine Seite geändert hat und diese vor dem nächsten Durchlauf aktualisiert werden soll.
+
+Senden Sie das Briefing und die URLs mit der Erstellungsanfrage und nicht in einem zweiten Aufruf. Ein neues aktiviertes Audit ist fällig, sobald seine Zeile gespeichert wird, sodass nachträglich geschriebener Kontext vom Dispatcher überholt werden und den ersten Durchlauf verpassen kann — genau den Durchlauf, den Sie beobachten. Ändern Sie es später mit `fp audits context-set `, was nur den angegebenen Teil ersetzt und den anderen unberührt lässt.
+
- Beginne mit einer bekannten fehlgeschlagenen Sitzung und mehreren normalen Sitzungen. So erhält das Audit sowohl ein positives Beispiel als auch einen Vergleichssatz.
+ Beginnen Sie mit einer bekannten fehlgeschlagenen Sitzung und mehreren normalen Sitzungen. So erhält das Audit sowohl ein positives Beispiel als auch eine Vergleichsmenge.
- Auditkontext wird als eigenständige Ressource gespeichert, sodass das Bearbeiten eines Audits das Referenzmaterial nicht versehentlich entfernt.
+ Audit-Kontext wird als eigenständige Ressource gespeichert. Der Definitions-Endpunkt verweigert das Schreiben beim Aktualisieren, sodass eine gewöhnliche, unzusammenhängende Bearbeitung des Audits das Briefing oder die Referenzseiten nie überschreiben kann.
\ No newline at end of file
diff --git a/docs/de/index.mdx b/docs/de/index.mdx
index 341f2856d..ca1550631 100644
--- a/docs/de/index.mdx
+++ b/docs/de/index.mdx
@@ -1,41 +1,58 @@
---
-title: "Machen Sie Ihren Agenten fehlersicher"
-description: "Observability und Durchsetzung für jede Harness, in der Ihre Agenten laufen — Coding-CLIs, Chat-Gateways, selbst gehostete Assistenten und Ihre eigenen instrumentierten Agenten."
+title: "Mach deinen Agenten ausfallsicher"
+description: "Sieh, was deine Agenten tun, finde Fehler, und verhindere, dass sie erneut auftreten."
icon: "shield-check"
---
-Failproof AI hilft Teams dabei zu verstehen, was Agenten getan haben, wo sie gescheitert sind, und Sicherheitsmechanismen zu implementieren, bevor dasselbe Verhalten erneut auftritt.
+Failproof AI hilft jedem, der Agenten betreibt, zu verstehen, was passiert ist, Fehler zu finden und zu verhindern, dass sie sich wiederholen.
-Eine **Harness** ist das, in dem Ihr Agent tatsächlich ausgeführt wird. Failproof AI bindet 12 davon ein — Coding-CLIs wie Claude Code und Codex, Chat-Gateways wie Hermes, selbst gehostete Assistenten wie OpenClaw — und dieselben Events, dieselben Policies und dieselbe Session-Historie gelten für alle. Agenten ohne Harness berichten über das [Python SDK](/de/reference/custom-agents), das sie trackt und auditiert; um dort eine Policy durchzusetzen, wird ein Hook in Ihrer eigenen Runtime benötigt.
+Es funktioniert mit 12 gängigen Agentenumgebungen, darunter Claude Code, Codex, Hermes, OpenClaw und Goose. Agenten, die mit LangChain, CrewAI, LlamaIndex, Pydantic AI oder deiner eigenen Laufzeitumgebung erstellt wurden, können über das [Python SDK](/de/reference/custom-agents) berichten.
-
- Nutzen Sie die Skill, um Ihr Projekt zu instrumentieren, es zu verbinden und zu überprüfen, ob Agent-Logs ankommen.
+
+ Installiere Failproof AI, verbinde deine Agenten, und lege fest, was durchgesetzt werden soll.
-
- Analysieren, abfragen, Dashboards erstellen und Audits in natürlicher Sprache auf Ihren Agent-Logs durchführen.
+
+ Frage Sessions ab, untersuche Fehler, und erstelle Dashboards in natürlicher Sprache.
+## Lokal starten oder Cloud verbinden
+
+
+
+ Öffne das Dashboard unter `localhost:8020` und führe `failproofai audit` aus. Dein Agentenverlauf bleibt auf diesem Rechner.
+
+
+ Sieh Sessions über mehrere Maschinen hinweg und verwalte Richtlinien für dein Team.
+
+
+
+Das Setup wählt absichtlich kein Richtlinienpaket aus. Füge unseres nach der Einrichtung hinzu:
+
+```bash
+failproofai policies add FailproofAI/policies
+```
+
+Bis dahin läuft nur `block-failproofai-commands`. Es verhindert, dass ein Agent Failproof AI deaktiviert.
+
+## Was du tun kannst
+
-
- Modellaufrufe, Tools, Fehler, Benutzereingaben, Latenz und Policy-Entscheidungen in einer einzigen Session nachverfolgen.
+
+ Verfolge einen Agentenlauf durch Modellaufrufe, Tools, Fehler und Richtlinienentscheidungen.
-
- Eine definierte Menge von Sessions auditieren, beleggestützte Findings prüfen und die Behebung als Issues verfolgen.
+
+ Überprüfe Beweise über einen einzelnen oder mehrere Läufe.
- Einen bekannten Fehlerfall in eine Policy umwandeln, deren Auswirkung beobachten und sie in Ihrer gesamten Fleet deployen.
+ Beobachte eine Schutzmaßnahme bei echter Aktivität, und setze sie durch, wenn du bereit bist.
-> **Session → Audit → Finding → Issue → Policy**
-> Nachvollziehen, was passiert ist, den Fehler finden, die Reaktion steuern und dasselbe Verhalten in zukünftigen Läufen verhindern.
-
-## Hier beginnen
-
-Wenn Sie Ihren ersten instrumentierten Agenten deployen, starten Sie mit dem [Quickstart](/de/start/quickstart). Wenn bereits Daten eintreffen, öffnen Sie [Sessions](/de/sessions/overview) und untersuchen Sie einen echten Lauf, bevor Sie Audits oder Policies konfigurieren.
+> **Session → Audit → Finding → Issue → Policy**
+> Sieh, was passiert ist, finde den Fehler, übernimm die Verantwortung für die Reaktion, und verhindere ihn dann.
-
- Den End-to-End-Workflow von der Erfassung bis zu einer sicher deployten Policy durchführen.
-
\ No newline at end of file
+
+ Das Setup unterstützt Linux und macOS. Siehe [unterstützte Harnesses](/de/reference/harnesses) für das, was jede Agentenumgebung beobachten oder blockieren kann.
+
\ No newline at end of file
diff --git a/docs/de/policies/builtin-catalog.mdx b/docs/de/policies/builtin-catalog.mdx
index f2cea5ed8..df53e9317 100644
--- a/docs/de/policies/builtin-catalog.mdx
+++ b/docs/de/policies/builtin-catalog.mdx
@@ -1,100 +1,140 @@
---
-title: "Integrierter Richtlinienkatalog"
-description: "Übersicht aller integrierten Failproof AI-Richtlinien mit Auslöser, empfohlenem Status und konfigurierbaren Parametern."
+title: "Integrierter Policy-Katalog"
+description: "Übersicht aller integrierten Failproof AI-Policies mit Auslösern, Standardzustand und konfigurierbaren Parametern."
icon: "list-checks"
---
-Das installierte Paket ist die maßgebliche Quelle für die Verfügbarkeit von Richtlinien. Führen Sie `failproofai policies` nach jedem Upgrade aus, da sich Katalogeinträge und Verhalten mit der Paketversion ändern können.
+38 der 39 integrierten Policies werden als Pack `FailproofAI/policies` ausgeliefert; `block-failproofai-commands` ist direkt in das Paket einkompiliert, da ein Pack `alwaysOn` nicht deklarieren darf. Das installierte Pack ist die maßgebliche Quelle dafür, was auf diesem Rechner durchgesetzt werden kann:
-## Empfohlene Grundkonfiguration
+```bash
+failproofai policies show FailproofAI/policies # der Katalog, wie veröffentlicht
+failproofai policies # was hier aktiviert ist
+```
+
+`failproofai policies` listet benutzerdefinierte Dateien, Konventionsdateien, installierte Packs und Cloud-Zuweisungen auf. Es gibt keinen Abschnitt für integrierte Policies – daher kann dieser Befehl nicht beantworten, „welche Builtins existieren". Dafür sind `policies show` und der [Policy Hub](https://befailproof.ai/policy-hub/FailproofAI/policies/) zuständig.
-Die empfohlene Auswahl des geführten Setups aktiviert derzeit Secret-Sanitizer, Umgebungsschutzmaßnahmen, Selbstschutz, Absicherungen gegen katastrophale Befehle sowie Schutz für geschützte Branches:
+## Standardwerte und Auswahl
-```text
-sanitize-jwt sanitize-api-keys
-sanitize-connection-strings sanitize-private-key-content
-sanitize-bearer-tokens protect-env-vars
-block-env-files block-secrets-write
-block-failproofai-commands block-sudo
-block-curl-pipe-sh block-rm-rf
-block-push-master block-force-push
+Ein einfaches `failproofai policies add FailproofAI/policies` aktiviert die eigenen Standardwerte des Packs – die 10 unten als **on** markierten Einträge. `block-failproofai-commands` ist unabhängig davon immer aktiv und gehört nicht zu dieser Auswahl. `--all` übernimmt alles; `--category ` und `--policy ` wählen einen Teilbereich aus. Der Slug neben jeder Überschrift ist das, was `--category` abgleicht:
+
+```bash
+failproofai policies add FailproofAI/policies --category git,database
```
-`block-failproofai-commands` ist **immer aktiv**. Es wird oben der Vollständigkeit halber aufgeführt, registriert sich jedoch bei jeder Auswertung unabhängig davon, ob es in Ihrem aktivierten Set erscheint – und es kann weder deaktiviert noch pausiert werden. Eine Absicherung gegen das Abschalten der Durchsetzung durch den Agenten ist keine Absicherung, wenn der Agent sie selbst abschalten kann.
+`block-failproofai-commands` ist **immer aktiv**. Es wird bei jeder Auswertung registriert, unabhängig davon, ob es in der Auswahl enthalten ist, und kann weder deaktiviert noch pausiert werden – ein Schutz, den der Agent selbst abschalten kann, ist kein Schutz. Da ein Pack `alwaysOn` nicht deklarieren darf, wird diese eine Policy direkt in das Paket einkompiliert statt im Pack zu liegen.
-„Empfohlen" ist bewusst enger gefasst als **Alles**. Infrastruktur- und Workflow-Richtlinien können gültige Arbeitsabläufe unterbrechen und sollten nur für die Repositories und Systeme aktiviert werden, die sie benötigen.
+## Bereinigung — `sanitize`
-## Secrets und Umgebung
+Diese Policies laufen auf `PostToolUse`, nachdem das Tool bereits ausgeführt wurde. Sie **erkennen das Tool-Ergebnis und verweigern es**; sie schwärzen keinen Teilstring und geben den Rest zurück.
-| Richtlinie | Auslöser | Ergebnis |
-| --- | --- | --- |
-| `sanitize-jwt` | `PostToolUse` | JWTs aus der Tool-Ausgabe entfernen, bevor das Modell sie sieht. |
-| `sanitize-api-keys` | `PostToolUse` | Gängige OpenAI-, Anthropic-, GitHub-, AWS-, Stripe- und Google-Schlüssel entfernen. |
-| `sanitize-connection-strings` | `PostToolUse` | Datenbankverbindungszeichenfolgen mit Anmeldedaten entfernen. |
-| `sanitize-private-key-content` | `PostToolUse` | PEM-Private-Key-Inhalte entfernen. |
-| `sanitize-bearer-tokens` | `PostToolUse` | Authorization-Bearer-Tokens entfernen. |
-| `protect-env-vars` | `PreToolUse` bei Shell-Tools | Befehle blockieren, die Umgebungsvariablen ausgeben. |
-| `block-env-files` | `PreToolUse` | Lese- und Schreibzugriffe auf `.env`-Dateien blockieren. |
-| `block-read-outside-cwd` | `PreToolUse` bei Lese-, Glob-, Grep- oder Shell-Tools | Lesezugriffe auf das Arbeitsverzeichnis der Sitzung beschränken. |
-| `block-secrets-write` | `PreToolUse` bei Schreib-Tools | Schreibzugriffe auf bekannte Secret-Key- und Credential-Dateinamen blockieren. |
-
-## Gefährliche Befehle und Infrastruktur
-
-| Richtlinie | Auslöser | Ergebnis |
-| --- | --- | --- |
-| `block-sudo` | `PreToolUse`, `PermissionRequest` | `sudo` blockieren, sofern kein Allow-Muster übereinstimmt. |
-| `block-curl-pipe-sh` | `PreToolUse` | Heruntergeladene Skripte, die direkt an eine Shell geleitet werden, blockieren. |
-| `block-rm-rf` | `PreToolUse` | Katastrophale rekursive Löschmuster blockieren. |
-| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Immer aktiv, kann nicht deaktiviert werden.** Jeden Failproof AI CLI-Aufruf, Self-Pause und Paketmanager-Deinstallation blockieren. |
-| `block-kubectl` | `PreToolUse` | Kubernetes-Befehle absichern. |
-| `block-terraform` | `PreToolUse` | Terraform- und OpenTofu-Befehle absichern. |
-| `block-aws-cli` | `PreToolUse` | AWS CLI-Befehle absichern. |
-| `block-gcloud` | `PreToolUse` | Google Cloud CLI-Befehle absichern. |
-| `block-az-cli` | `PreToolUse` | Azure CLI-Befehle absichern. |
-| `block-helm` | `PreToolUse` | Helm-Befehle absichern. |
-| `block-gh-pipeline` | `PreToolUse` | Verändernde GitHub CLI-Operationen für Workflows, Runs, Merges, Releases, Caches und Secrets absichern. |
-
-## Git- und Datenbanksicherheit
-
-| Richtlinie | Auslöser | Ergebnis |
-| --- | --- | --- |
-| `block-push-master` | `PreToolUse` | Direkte Pushes auf konfigurierte geschützte Branches blockieren. |
-| `block-force-push` | `PreToolUse` | Force-Pushes blockieren; `--force-with-lease` bleibt in der aktuellen Implementierung erlaubt. |
-| `block-work-on-main` | `PreToolUse` | Commits und Merges auf geschützten Branches blockieren. |
-| `warn-git-amend` | `PreToolUse` | Warnen, bevor ein Commit mit `--amend` überschrieben wird. |
-| `warn-git-stash-drop` | `PreToolUse` | Warnen, bevor Stashes dauerhaft gelöscht oder geleert werden. |
-| `warn-all-files-staged` | `PreToolUse` | Bei umfangreichen `git add -A`-, `git add .`- oder `git add --all`-Befehlen warnen. |
-| `warn-destructive-sql` | `PreToolUse` | Bei `DROP`, `TRUNCATE` und `DELETE` ohne `WHERE` über bekannte Datenbankclients warnen. |
-| `warn-schema-alteration` | `PreToolUse` | Bei erkannten `ALTER TABLE`-Spalten- und Umbenennungsoperationen warnen. |
-
-## Pakete, Systemverhalten und Agentenschleifen
-
-| Richtlinie | Auslöser | Ergebnis |
-| --- | --- | --- |
-| `warn-package-publish` | `PreToolUse` | Warnen, bevor in Paketregistries veröffentlicht wird. |
-| `warn-global-package-install` | `PreToolUse` | Warnen, bevor Pakete global installiert werden. |
-| `prefer-package-manager` | `PreToolUse` | Den Agenten anweisen, einen erlaubten Paketmanager zu verwenden. |
-| `warn-large-file-write` | `PreToolUse` bei Schreib-Tools | Bei Überschreitung des konfigurierten Dateigrößenschwellenwerts warnen. |
-| `warn-background-process` | `PreToolUse` | Bei abgetrennten oder langlebigen Hintergrundprozessmustern warnen. |
-| `warn-repeated-tool-calls` | `PreToolUse` | Nach drei oder mehr identischen Tool-Aufrufen warnen. |
+Eine Verweigerung hier erreicht das Modell nur auf den Harnesses, die ein `PostToolUse`-Urteil auswerten – **codex** und **copilot**, wo der Grund das gesamte Tool-Ergebnis ersetzt. Auf claude, cursor, opencode, pi, hermes, openclaw, factory, devin, antigravity und goose ist `PostToolUse` rein beobachtend: Die Erkennung wird aufgezeichnet, und die Ausgabe gelangt trotzdem zum Modell.
+
+| Policy | Auslöser | Standard | Ergebnis |
+| --- | --- | --- | --- |
+| `sanitize-jwt` | `PostToolUse` | on | Verweigert ein Tool-Ergebnis, das ein JWT enthält. |
+| `sanitize-api-keys` | `PostToolUse` | on | Verweigert ein Tool-Ergebnis mit einem OpenAI-, Anthropic-, GitHub-, AWS-, Stripe- oder Google-Schlüssel. |
+| `sanitize-connection-strings` | `PostToolUse` | on | Verweigert ein Tool-Ergebnis mit einem Datenbank-Connection-String mit eingebetteten Zugangsdaten. |
+| `sanitize-private-key-content` | `PostToolUse` | on | Verweigert ein Tool-Ergebnis, das PEM-Private-Key-Inhalt enthält. |
+| `sanitize-bearer-tokens` | `PostToolUse` | on | Verweigert ein Tool-Ergebnis mit einem `Authorization: Bearer`-Token. |
+
+## Umgebung — `environment`
+
+| Policy | Auslöser | Standard | Ergebnis |
+| --- | --- | --- | --- |
+| `protect-env-vars` | `PreToolUse` auf `Bash` | on | Blockiert Befehle, die Umgebungsvariablen auslesen. |
+| `block-env-files` | `PreToolUse` | on | Blockiert Lese- und Schreibzugriffe auf `.env`-Dateien. |
+| `block-read-outside-cwd` | `PreToolUse` auf `Read`, `Glob`, `Grep`, `Bash` | off | Beschränkt Lesezugriffe auf das Arbeitsverzeichnis der Sitzung. |
+
+## Gefährliche Befehle — `dangerous-commands`
+
+| Policy | Auslöser | Standard | Ergebnis |
+| --- | --- | --- | --- |
+| `block-sudo` | `PreToolUse`, `PermissionRequest` auf `Bash` | on | Blockiert `sudo`, sofern kein Allow-Muster greift. |
+| `block-curl-pipe-sh` | `PreToolUse` auf `Bash` | on | Blockiert heruntergeladene Skripte, die direkt an eine Shell weitergeleitet werden. |
+| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` auf `Bash`, `Write`, `Edit`, `NotebookEdit` | **immer aktiv** | Blockiert jeden Failproof AI CLI-Aufruf, Selbst-Pause und Deinstallation. |
+| `block-rm-rf` | `PreToolUse` auf `Bash` | off | Blockiert katastrophale rekursive Löschmuster. |
+| `block-secrets-write` | `PreToolUse` auf `Write` | off | Blockiert Schreibzugriffe auf gängige Dateinamen für geheime Schlüssel und Zugangsdaten. |
+
+## Infra-Befehle — `infra-commands`
+
+Alle sieben sind standardmäßig deaktiviert: Sie sperren Tools, die legitime Arbeit ständig nutzt – daher gehören sie zu den Repositories und Rechnern, die sie benötigen.
+
+| Policy | Auslöser | Standard | Ergebnis |
+| --- | --- | --- | --- |
+| `block-kubectl` | `PreToolUse` auf `Bash` | off | Sperrt `kubectl`-Cluster-Mutationen. |
+| `block-terraform` | `PreToolUse` auf `Bash` | off | Sperrt `terraform`- und `tofu`-Befehle. |
+| `block-aws-cli` | `PreToolUse` auf `Bash` | off | Sperrt `aws`-CLI-Befehle. |
+| `block-gcloud` | `PreToolUse` auf `Bash` | off | Sperrt `gcloud`-Befehle. |
+| `block-az-cli` | `PreToolUse` auf `Bash` | off | Sperrt `az`-Befehle. |
+| `block-helm` | `PreToolUse` auf `Bash` | off | Sperrt `helm`-Befehle. |
+| `block-gh-pipeline` | `PreToolUse` auf `Bash` | off | Sperrt mutierende `gh`-Operationen: workflow run, run rerun und cancel, pr merge, release create und delete, cache delete, secret set und delete. Lesende Unterbefehle wie `gh pr view` werden nicht erfasst. |
-## Aufgabenabschluss-Workflow
+## Git — `git`
-Diese Richtlinien erfordern ein Harness, das ein kompatibles `Stop`-Event ausgibt.
+| Policy | Auslöser | Standard | Ergebnis |
+| --- | --- | --- | --- |
+| `block-push-master` | `PreToolUse` auf `Bash` | on | Blockiert direkte Pushes auf konfigurierte geschützte Branches. |
+| `block-force-push` | `PreToolUse` auf `Bash` | off | Blockiert Force-Pushes. `--force-with-lease` und `--force-if-includes` bleiben erlaubt. |
+| `block-work-on-main` | `PreToolUse` auf `Bash` | off | Blockiert Commits und Merges auf geschützten Branches. |
+| `warn-git-amend` | `PreToolUse` auf `Bash` | off | Warnt vor dem Überschreiben eines Commits mit `--amend`. |
+| `warn-git-stash-drop` | `PreToolUse` auf `Bash` | off | Warnt vor dem dauerhaften Löschen oder Leeren von Stashes. |
+| `warn-all-files-staged` | `PreToolUse` auf `Bash` | off | Warnt bei umfassendem `git add -A`, `git add .` oder `git add --all`. |
-| Richtlinie | Ergebnis |
+## Datenbank — `database`
+
+| Policy | Auslöser | Standard | Ergebnis |
+| --- | --- | --- | --- |
+| `warn-destructive-sql` | `PreToolUse` auf `Bash` | off | Warnt bei `DROP`, `TRUNCATE` und `DELETE` ohne `WHERE` über bekannte Datenbank-Clients. |
+| `warn-schema-alteration` | `PreToolUse` auf `Bash` | off | Warnt bei erkannten `ALTER TABLE`-Spalten- und Umbenennungsoperationen. |
+
+## Pakete und System — `packages-system`
+
+| Policy | Auslöser | Standard | Ergebnis |
+| --- | --- | --- | --- |
+| `warn-package-publish` | `PreToolUse` auf `Bash` | off | Warnt vor dem Veröffentlichen auf npm, PyPI, crates.io, RubyGems und ähnlichen Registries. |
+| `warn-global-package-install` | `PreToolUse` auf `Bash` | off | Warnt vor der globalen Paketinstallation. |
+| `prefer-package-manager` | `PreToolUse` auf `Bash` | off | Blockiert einen nicht bevorzugten Paketmanager und weist den Agenten an, einen erlaubten zu verwenden. |
+| `warn-large-file-write` | `PreToolUse` auf `Write` | off | Warnt, wenn der konfigurierte Dateigrößen-Schwellenwert überschritten wird. |
+| `warn-background-process` | `PreToolUse` auf `Bash` | off | Warnt bei abgekoppelten Prozessen oder Hintergrundprozessmustern. |
+
+## KI-Verhalten — `ai-behavior`
+
+| Policy | Auslöser | Standard | Ergebnis |
+| --- | --- | --- | --- |
+| `warn-repeated-tool-calls` | `PreToolUse` | off | Warnt, wenn dasselbe Tool drei oder mehr Mal mit identischen Parametern aufgerufen wird. |
+
+## Workflow — `workflow`
+
+Alle fünf laufen auf `Stop` und sind standardmäßig deaktiviert.
+
+| Policy | Standard | Ergebnis |
+| --- | --- | --- |
+| `require-commit-before-stop` | off | Verweigert den Abschluss, solange getrackte Änderungen uncommittet sind. |
+| `require-push-before-stop` | off | Verweigert den Abschluss, solange Commits nur lokal vorhanden sind. |
+| `require-pr-before-stop` | off | Fordert einen Pull Request für den aktuellen Branch. |
+| `require-no-conflicts-before-stop` | off | Fordert einen konfliktfreien Merge gegen den konfigurierten Basis-Branch. |
+| `require-ci-green-before-stop` | off | Fordert, dass CI-Checks am aktuellen HEAD-Commit bestanden wurden – veraltete Läufe auf früheren Commits werden ignoriert. |
+
+Diese Policies benötigen einen Harness, dessen `Stop`-Urteil ausgewertet wird. Das gilt nicht für jeden Harness:
+
+| Harness | `Stop` |
| --- | --- |
-| `require-commit-before-stop` | Abschluss verweigern, solange verfolgte Änderungen nicht committet sind. |
-| `require-push-before-stop` | Abschluss verweigern, solange Commits nur lokal vorhanden sind. |
-| `require-pr-before-stop` | Einen Pull Request für den aktuellen Branch erfordern. |
-| `require-no-conflicts-before-stop` | Einen konfliktfreien Merge gegen den konfigurierten Basis-Branch erfordern. |
-| `require-ci-green-before-stop` | Erfordern, dass die CI-Prüfungen für den aktuellen HEAD erfolgreich abgeschlossen werden. |
+| claude, codex, copilot, cursor, openclaw, factory, devin, antigravity | Verifiziert blockierend: Die Verweigerung erzwingt einen weiteren Turn |
+| pi | Beobachtend. Der Grund wird als Anweisung in den nächsten Turn übernommen, nicht als Sperre |
+| goose, hermes | Es ist kein `Stop`-Hook installiert, daher werden diese fünf Policies nie ausgelöst |
+| opencode | Nicht verifiziert. `Stop` gehört nicht zu den Events, von denen opencode ein Urteil konsumiert |
+
+Cursor Cloud Agent VMs führen keinerlei Stop-Hooks aus – eine Cursor-Sitzung dort ist daher nicht abgedeckt, auch wenn lokales Cursor es ist.
+
+
+ Die `warn-*`-Policies geben `instruct` zurück, nicht `deny`. (`prefer-package-manager` ist die Ausnahme unter den Nicht-`block-*`-Namen: Es gibt `deny` zurück und blockiert daher auf jedem Harness, der ein `PreToolUse`-Urteil auswertet – das sind alle zwölf.) Auf Hermes und Goose, auf Pi, OpenClaw und Factory außerhalb des `Stop`-Kanals sowie auf Antigravity außerhalb von `Stop` und `UserPromptSubmit` degradiert `instruct` zu allow plus einem Hinweis auf stderr – der Agent wird nicht informiert. Antigravitys `UserPromptSubmit` ist ein echter zweiter Kanal: Die Anweisung wird als transiente Nachricht injiziert, bevor das Modell läuft.
+
## Parameterreferenz
-Parameter werden unter dem `policyParams`-Objekt des ausgewählten Scopes konfiguriert. Typen werden von jeder Richtlinie validiert.
+Parameter werden unter dem `policyParams`-Objekt des ausgewählten Scope konfiguriert. Typen werden von jeder Policy validiert.
-| Richtlinie | Parameter | Typ und Standard |
+| Policy | Parameter | Typ und Standard |
| --- | --- | --- |
| `sanitize-api-keys` | `additionalPatterns` | `pattern[]`, `[]`; Einträge enthalten `regex` und `label` |
| `block-read-outside-cwd` | `allowPaths` | `string[]`, `[]` |
@@ -112,7 +152,6 @@ Parameter werden unter dem `policyParams`-Objekt des ausgewählten Scopes konfig
```json
{
- "enabledPolicies": ["block-sudo", "block-push-master"],
"policyParams": {
"block-sudo": {
"allowPatterns": ["sudo systemctl status"]
@@ -124,6 +163,10 @@ Parameter werden unter dem `policyParams`-Objekt des ausgewählten Scopes konfig
}
```
+
+ Ein einfacher Policy-Name als `policyParams`-Schlüssel wird nur für `FailproofAI/policies` berücksichtigt. Für jedes andere Pack lautet der Schlüssel `pack///` – ein fremdes Pack, das denselben Policy-Namen deklariert, erhält die Schema-Standardwerte, nicht Ihre Parameter.
+
+
- Ein Allow-Muster erweitert den Handlungsspielraum eines Agenten. Testen Sie die genaue Tokenisierung und Befehlsvarianten auf dem Ziel-Harness, bevor Sie es flächendeckend einsetzen.
+ Ein Allow-Muster erweitert, was ein Agent tun darf. Testen Sie die genaue Tokenisierung und Befehlsvarianten auf dem Ziel-Harness, bevor Sie es flächendeckend einsetzen.
\ No newline at end of file
diff --git a/docs/de/policies/builtin.mdx b/docs/de/policies/builtin.mdx
index 80db8960a..688c2d4e8 100644
--- a/docs/de/policies/builtin.mdx
+++ b/docs/de/policies/builtin.mdx
@@ -1,57 +1,100 @@
---
title: "Integrierte Richtlinien"
-description: "Aktiviere gepflegte Schutzmaßnahmen für häufige Fehlerarten von Agenten."
+description: "Nutze die gepflegten Schutzmaßnahmen für häufige Fehlerszenarien von Agenten und aktiviere die gewünschten."
icon: "library"
---
-Integrierte Richtlinien decken die Behandlung von Geheimnissen, Umgebungsdateien, destruktive Shell-Befehle, geschützte Branches, Cloud- und Infrastrukturwerkzeuge, die Veröffentlichung von Paketen, wiederholte Aufrufe sowie Workflow-Prüfungen am Ende von Aufgaben ab.
+Die integrierten Richtlinien umfassen 39 gepflegte Policies in neun Kategorien von Agenten-Fehlverhalten. Alle bis auf eine werden **als Paket geliefert**, `FailproofAI/policies`, auf die gleiche Weise wie alle anderen Policies. Das Paket enthält kein eigenes Pack, sodass eine Neuinstallation nichts erzwingt, bis du es einbindest:
-## Eine integrierte Richtlinie aktivieren und überprüfen
+```bash
+failproofai policies add FailproofAI/policies
+```
-
-
- 1. Installiere die Richtlinie auf einem verbundenen Rechner mit der lokalen CLI.
- 2. Führe eine sichere Testaktion im instrumentierten Agenten aus.
- 3. Gehe zu **Observe → policy** und filtere nach dem Richtliniennamen, der Maschinenumgebung oder der Entscheidung.
- 4. Öffne die verknüpfte Sitzung, um die übereinstimmende Tool-Eingabe und den zurückgegebenen Grund zu bestätigen.
+Damit werden die eigenen Standardwerte des Packs aktiviert – 10 der 38 Policies, die das Pack enthält. Die 39. ist `block-failproofai-commands`, die unabhängig davon immer aktiv ist: Sie ist fest ins Paket kompiliert, wird bei jeder Auswertung registriert und kann weder deaktiviert noch pausiert werden. Ein Pack darf `alwaysOn` nicht deklarieren, weshalb diese eine Schutzmaßnahme nicht über den Pack-Kanal läuft.
-
+## Was die neun Kategorien abdecken
+
+| Kategorie | `--category`-Slug | Policies |
+| --- | --- | --- |
+| Sanitize | `sanitize` | 5 |
+| Environment | `environment` | 3 |
+| Dangerous Commands | `dangerous-commands` | 5 |
+| Infra Commands | `infra-commands` | 7 |
+| Git | `git` | 6 |
+| Database | `database` | 2 |
+| Packages & System | `packages-system` | 5 |
+| AI Behavior | `ai-behavior` | 1 |
+| Workflow | `workflow` | 5 |
+
+Das sind die Zählungen des kompilierten Katalogs, die zusammen 39 ergeben. Das Pack enthält 38 davon, da `block-failproofai-commands` `alwaysOn` ist und nie über den Pack-Kanal läuft – daher wählt `--category dangerous-commands` die anderen vier aus.
+
+Nimm statt der Standardwerte eine Teilauswahl:
+
+```bash
+failproofai policies add FailproofAI/policies --category git,database
+failproofai policies add FailproofAI/policies --policy block-rm-rf
+failproofai policies add FailproofAI/policies --all
+```
+
+## Lies den Katalog, bevor du ihn einbindest
+
+
```bash
+ failproofai policies show FailproofAI/policies
failproofai policies
- failproofai policy add block-rm-rf --cli claude --scope project
- failproofai config --status
```
- Entferne sie mit `failproofai policy remove block-rm-rf --cli claude --scope project`.
+ `policies show` liest das veröffentlichte Manifest – alle Policies, nach Kategorie gruppiert, als Standard oder Opt-in markiert – ohne den Code des Packs herunterzuladen oder zu importieren. `failproofai policies` listet auf, was auf diesem Rechner aktiviert ist: benutzerdefinierte Dateien, Konventiondateien, installierte Packs und Cloud-Zuweisungen. Es gibt keinen Bereich für integrierte Richtlinien, daher beantwortet es die Frage „Was ist hier aktiv?", nie „Was existiert?".
+
+
+ Durchsuche denselben Katalog im Browser, ohne die CLI, unter [befailproof.ai/policy-hub](https://befailproof.ai/policy-hub/). Jedes Pack hat eine Seite unter `/policy-hub///` und jede Policy eine Seite unter `/policy-hub////`.
+
+
+ 1. Installiere die Policy mit der lokalen CLI auf einem verbundenen Rechner.
+ 2. Führe eine sichere Testaktion im instrumentierten Agenten aus.
+ 3. Gehe zu **Observe → policy** und filtere nach Richtlinienname, Maschinenumgebung oder Entscheidung.
+ 4. Öffne die verknüpfte Sitzung, um den übereinstimmenden Tool-Input und den zurückgegebenen Grund zu bestätigen.
-Liste die in deiner installierten Version verfügbaren Richtlinien auf:
-
-```bash
-failproofai policies
-```
-
-Aktiviere eine Richtlinie für ein Projekt:
+## Eine Richtlinie aktivieren oder deaktivieren
```bash
-failproofai policy add block-rm-rf --scope project
+failproofai policies add block-rm-rf --cli claude --scope project
+failproofai policies remove block-rm-rf --cli claude --scope project
```
-Aktiviere mehrere Richtlinien für ausgewählte Harnesses:
+`policies add` und `policies remove` akzeptieren genau **einen** Richtliniennamen. Wird kein Name angegeben, erscheint eine Auswahlansicht, in der bereits aktive Richtlinien markiert sind. Um mehrere Namen auf einmal zu verarbeiten, verwende die Installationsform:
```bash
failproofai policies --install block-sudo block-force-push \
--cli claude codex --scope project
```
-Einige Richtlinien akzeptieren Parameter oder sind als Beta gekennzeichnet. Überprüfe Beschreibung, Geltungsbereich und Standardverhalten vor dem Rollout. Eine Richtlinie, die einen Workflow schützt, kann in einem anderen gültige Vorgänge blockieren.
+
+ Auf einem Rechner ohne installiertes Pack lädt `failproofai policies add ` das Paket `FailproofAI/policies` von seinem GitHub-Release, um den Namen aufzulösen – dieser erste Befehl benötigt daher eine Netzwerkverbindung.
+
+
+## Nicht jede Richtlinie greift bei jedem Harness
+
+Eine Policy ändert das Verhalten nur dort, wo der Harness das Ergebnis für sein Ereignis verarbeitet. Zwei Fälle sind es wert, vor dem Verlassen auf eine integrierte Richtlinie zu prüfen:
+
+| Ereignis | Wo ein deny das Verhalten nachweislich ändert |
+| --- | --- |
+| `PreToolUse` | Alle 12 Harnesses |
+| `Stop` | claude, codex, copilot, cursor, openclaw, factory, devin, antigravity. Für goose oder hermes ist kein `Stop`-Hook installiert, pi überträgt den Grund in den nächsten Turn, und opencode ist nicht verifiziert |
+
+Die fünf `require-*-before-stop`-Policies in der Workflow-Kategorie können also auf einem Rechner aktiviert sein und trotzdem nie ausgelöst werden, je nachdem welcher Agent dort läuft. Cursor Cloud Agent VMs führen überhaupt keine Stop-Hooks aus.
+
+Die `warn-*`- und `prefer-*`-Policies geben `instruct` statt `deny` zurück. Bei Hermes und Goose sowie außerhalb des `Stop`-Kanals bei Pi, OpenClaw, Factory und Antigravity wird `instruct` zu allow plus einer Meldung auf stderr herabgestuft: Der Operator sieht dies in den Logs, der Agent nicht.
+
+Einige Policies akzeptieren Parameter. Überprüfe die Beschreibung, den Geltungsbereich und den Standardwert vor dem Rollout – eine Policy, die einen Workflow schützt, kann in einem anderen gültige Operationen blockieren.
- Alle 40 aktuellen Richtlinien, ihre Auslöser, die empfohlene Baseline und Parameter einsehen.
+ Alle 39 integrierten Policies, nach Kategorie, mit ihren Auslösern, Standardwerten und Parametern.
- Bevorzuge den Projektbereich für repository-spezifische Anforderungen und den Benutzerbereich für maschinenweite Sicherheitsanforderungen.
+ `failproofai config` verbindet jeden unterstützten Agenten auf Benutzerebene und wählt keine Policies aus – es hat kein `--scope`-Flag. Übergib `--scope project` an `failproofai policies add` oder `failproofai policies --install` nur dann, wenn die Erwartung tatsächlich zu einem einzelnen Repository gehört.
\ No newline at end of file
diff --git a/docs/de/policies/custom.mdx b/docs/de/policies/custom.mdx
index 6695d18f6..09bc6314d 100644
--- a/docs/de/policies/custom.mdx
+++ b/docs/de/policies/custom.mdx
@@ -1,72 +1,51 @@
---
title: "Benutzerdefinierte Richtlinien"
-description: "Schreibe eine Richtlinie für einen Fehlerfall, der spezifisch für deinen Agent-Workflow ist."
-icon: "shield-plus"
+description: "Schreibe eine Regel für das spezifische Verhalten deines Agenten oder Workflows."
+icon: "code-2"
---
-Erstelle eine Datei mit der Endung `policies.js`, `policies.mjs` oder `policies.ts` unter `.failproofai/policies/`. Konventionsdateien werden automatisch auf Projekt- und Benutzerebene geladen.
+Prüfe den [integrierten Katalog](/de/policies/builtin-catalog), bevor du eine Richtlinie schreibst. Eine überprüfte Regel ist in der Regel sicherer als eine neue.
-## Richtlinie vor der Cloud-Veröffentlichung testen
+## Mit einer funktionierenden Richtlinie beginnen
-
-
- 1. Installiere die benutzerdefinierte Richtlinie auf einer Testmaschine und löse sowohl eine passende Aktion als auch eine legitime Nicht-Übereinstimmung aus.
- 2. Gehe zu **Observe → policy** und vergleiche die beiden Entscheidungen.
- 3. Öffne jede verlinkte Sitzung und überprüfe, ob das Ereignis-Payload ausreichend Belege für die Regel enthält.
- 4. Wenn das Verhalten korrekt ist, verschiebe den geprüften Quellcode in **Admin → policy editor** und veröffentliche eine Version.
-
-
-
- ```bash
- failproofai policies --install --custom ./security.policies.ts \
- --cli claude --scope project
- failproofai policies
- ```
+```bash
+failproofai publish --init guards.mjs
+failproofai policies -i -c ./guards.mjs
+```
- Konventionsdateien unter `.failproofai/policies/` werden ohne `--custom` geladen. Behalte einen expliziten Installationsbefehl in CI, wenn die Validierung bei einem fehlerhaften Modul scheitern soll.
-
-
+Das Starter-Template blockiert `git push --force`. Bearbeite es, bitte deinen Agenten, die blockierte Aktion auszuführen, und überprüfe **Policies → Activity**.
-```ts
+```js
import { customPolicies, allow, deny } from "failproofai";
customPolicies.add({
- name: "protect-production-paths",
- description: "Block writes to production configuration",
- match: { events: ["PreToolUse"] },
- fn: async (ctx) => {
- if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
- const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/");
- if (path.split("/").includes("production")) {
- return deny("Writes to production configuration require approval.");
- }
- return allow();
- },
+ name: "protect-production",
+ description: "Production changes need a human",
+ match: { events: ["PreToolUse"], toolNames: ["Bash"] },
+ fn: async (ctx) =>
+ String(ctx.toolInput?.command ?? "").includes("production")
+ ? deny("Ask a human before changing production.")
+ : allow(),
});
```
-Dies trifft auf `production/config.yml`, `/srv/production/config.yml`, `/srv/production` und `C:\\production\\config.yml` sowohl für `Write` als auch für `Edit` zu. Namen wie `production-backup` werden nicht erfasst, da `production` ein vollständiges Pfadsegment sein muss.
+Eine Richtlinie gibt `allow()`, `deny(message)` oder `instruct(message)` zurück. Verwende `deny`, wenn die Aktion gestoppt werden muss – nicht jede Ausführungsumgebung kann eine Anweisung zurück an den Agenten übermitteln.
-Explizite Datei validieren und installieren:
+## Automatisch laden
-```bash
-failproofai policies --install --custom ./security.policies.ts
-```
+Platziere Dateien mit den Namen `*policies.js`, `*policies.mjs` oder `*policies.ts` unter:
-Der Richtlinienkontext umfasst den Ereignistyp, den normalisierten Payload, den Tool-Namen und -Input, Sitzungsmetadaten, Parameter sowie die Quell-CLI, sofern verfügbar.
+- `.failproofai/policies/` für ein einzelnes Projekt.
+- `~/.failproofai/policies/` für deinen Benutzer.
## Fehlerpfade testen
-Führe die Validierung nach dem Ändern der Einstiegsdatei oder eines lokalen Moduls durch, das sie importiert:
+Teste sowohl die unsichere Aktion als auch legitime Aufgaben, die ähnlich aussehen. Stelle sicher, dass die Entscheidung von deiner Richtlinie und nicht von einer anderen Regel stammt.
+
+Entferne explizite Testdateien mit:
```bash
-failproofai policies --install --custom ./security.policies.ts --scope project
+failproofai policies -u -c
```
-Der strikte CLI-Pfad schlägt bei fehlenden Dateien, Syntaxfehlern, unaufgelösten Importen, Ausnahmen auf oberster Ebene und Modul-Lade-Timeouts fehl. Zum Zeitpunkt der Durchsetzung wird eine fehlerhafte benutzerdefinierte Datei protokolliert und übersprungen, sodass die eingebauten Richtlinien weiter ausgeführt werden können. Behandle jede Ladewarnung als Verlust der erwarteten Durchsetzung und erstelle dafür Alarme in den Produktionsprotokollen.
-
-Verwende global eindeutige Namen für explizite, konventionsbasierte und Cloud-verwaltete Richtlinien. Halte Richtlinienfunktionen deterministisch, begrenze externe Aufrufe mit kurzen Timeouts, und gib auf jedem Pfad ein beabsichtigtes `allow`, `instruct` oder `deny` zurück.
-
-
- Eine benutzerdefinierte Richtlinie ist Durchsetzungscode. Teste fehlende Felder, alternative Tool-Namen und fehlerhafte Eingaben – nicht nur die erwartete Übereinstimmung.
-
\ No newline at end of file
+Sobald die Richtlinie fertig ist, [veröffentliche ein Paket](/de/policies/publish-a-pack) oder [deploye es über Cloud](/de/policies/deploy).
\ No newline at end of file
diff --git a/docs/de/policies/deploy.mdx b/docs/de/policies/deploy.mdx
index cde4384ab..0aaff1a15 100644
--- a/docs/de/policies/deploy.mdx
+++ b/docs/de/policies/deploy.mdx
@@ -1,51 +1,54 @@
---
-title: "Richtlinien bereitstellen"
-description: "Eine geprüfte Richtlinienversion auf den vorgesehenen Maschinen ausrollen."
+title: "Policies deployen"
+description: "Eine Policy auf echte Agent-Aktivität beobachten, dann durchsetzen oder zurückrollen."
icon: "cloud-upload"
---
-Eine Bereitstellung verbindet eine oder mehrere Richtlinienversionen mit einer Zielgruppe eingetragener Maschinen.
+Deploye eine geprüfte Policy schrittweise auf eine Maschine nach der anderen. Beginne im Beobachtungsmodus.
-## Eine Bereitstellung anwenden
+## Rollout über die CLI
-
-
- 1. Gehe zu **Admin → Durchsetzung**, finde die Maschine und klappe ihre Zeile aus.
- 2. Wähle **Bearbeiten**, füge die geprüfte Richtlinienversion hinzu und wähle **Beobachten** oder den durchsetzenden Effekt.
- 3. Wende die Änderung an, warte dann auf den nächsten Check-in der Maschine und bestätige ihren Bereitstellungs- und Abdeckungsstatus.
- 4. Gehe zu **Beobachten → Richtlinie**, um Live-Entscheidungen zu prüfen.
+```bash
+fp policies test ./rule.mjs --tool Bash --command "git push --force" --expect deny
+fp policies publish no-force-push ./rule.mjs
+fp fleet deploy --add no-force-push:observe
+fp guardrails summary --since 24h --machine
+fp fleet deploy --add no-force-push:enforce
+```
- 
-
-
- Bereitstellen über die CLI mit `fp fleet`. Überprüfe die resultierende Konfiguration, bevor du sie anwendest – `deploy` gibt den vollständigen Plan aus und fragt **nur in einem interaktiven Terminal ohne `--json`** nach. Mit `--json`, mit `--yes` oder bei umgeleitetem stdin (ein CI-Schritt, ein Skript, ein Agent) wird die Konfiguration sofort ohne Plan und ohne Bestätigung angewendet – führe daher zuerst `fp fleet show ` aus, wenn du prüfen möchtest:
+Der Beobachtungsmodus wertet die echte Policy aus und protokolliert Nicht-Allow-Entscheidungen, blockiert den Agenten jedoch nicht.
- ```bash
- fp fleet list
- fp fleet show
- fp fleet deploy --add no-force-push
- ```
+
+ Ein einfaches `--add no-force-push` setzt die Policy sofort durch. Füge `:observe` für einen Shadow-Rollout hinzu.
+
- `fp fleet diff ` zeigt Soll-/Ist-Zustand (eine Maschine gilt als `behind`, bis sie das nächste Mal abfragt), `fp fleet history ` listet die Generationen auf, und `fp fleet rollback ` stellt eine davon wieder her – dies schlägt fehl, wenn die betreffende Generation eine inzwischen deaktivierte oder gelöschte Richtlinie referenziert.
+Falls die Durchsetzung Probleme verursacht:
- Überprüfe die Maschine selbst mit `failproofai config --status` und nutze nach der Bereitstellung `fp sessions --env production --since 24h` sowie `fp events --event-type hook_completed`, um sicherzustellen, dass Aktivitäten die Cloud erreichen.
-
-
+```bash
+fp fleet history
+fp fleet rollback
+```
-
-
- Stelle eine geprüfte Version bereit, keinen veränderlichen Entwurf. Beginne mit einer Maschine außerhalb der Produktion oder einer kleinen Gruppe, deren Sitzungen du einsehen kannst.
-
-
- Prüfe Treffer, Begründungen, betroffene Tools und Fehlerkennungen, ohne die Arbeit zu blockieren.
-
-
- Stufe die Richtlinie hoch, nachdem beobachtete Treffer unsichere Aktionen von gültigen getrennt haben. Bestätige dann, dass jede vorgesehene Maschine die Bereitstellung abgerufen hat und Entscheidungen meldet.
-
-
+## Deployment über das Dashboard
-Maschinen benötigen die Berechtigung `policies:pull`. Die Ereignisberichterstattung wird separat durch `events:add` gesteuert; überprüfe beides, wenn du Cloud-Analyse und -Durchsetzung erwartest.
+1. Gehe zu **Admin → Enforcement**.
+2. Öffne die Zielmaschine.
+3. Füge die Policy-Version mit dem Effekt **observe** hinzu.
+4. Wende das Deployment an.
+5. Überprüfe die Ergebnisse unter **Observe → Policy**.
+6. Hebe dieselbe Version auf **enforce** an, wenn die Treffer korrekt sind.
-
- Das Enforcement-Management ist ein administrativer Cloud-Workflow. Behandle rein administrative Durchsetzungsrouten nicht wie gewöhnliche Kunden-Endpunkte unter `/v1`.
-
\ No newline at end of file
+
+
+## Ein Set ersetzen oder vorab einrichten
+
+- `--remove ` entfernt eine einzelne Policy.
+- `--set ...` ersetzt das komplette Policy-Set.
+- `--create` bereitet ein Deployment vor, bevor eine Maschine sich erstmals einbucht.
+- `fp fleet diff ` vergleicht den beabsichtigten und den angewendeten Zustand.
+
+
+ Ohne Cloud veröffentlichst du ein Pack mit `failproofai publish --effect observe` und prüfst Entscheidungen im lokalen Dashboard.
+
+
+Maschinen benötigen `policies:pull`, um Deployments zu empfangen, und `events:add`, um Entscheidungen zu melden.
\ No newline at end of file
diff --git a/docs/de/policies/failure-behavior.mdx b/docs/de/policies/failure-behavior.mdx
index 57067efa1..b26509b93 100644
--- a/docs/de/policies/failure-behavior.mdx
+++ b/docs/de/policies/failure-behavior.mdx
@@ -1,67 +1,48 @@
---
-title: "Fehlerverhalten"
-description: "Verstehen, was passiert, wenn die Richtlinienauswertung oder der lokale Daemon nicht verfügbar ist."
+title: "Verhalten bei Policy-Fehlern"
+description: "Verstehen Sie, warum Failproof AI Anfragen ablehnt, wenn die Auswertung nicht ausgeführt werden kann."
icon: "shield-alert"
---
-Failproof AI ist so konzipiert, dass ein Durchsetzungsfehler sichtbar wird, anstatt riskante Aktionen stillschweigend zu erlauben.
+Nach der Einrichtung ist der lokale `failproofaid`-Dienst der einzige Evaluator. Wenn er nicht antworten kann, werden geschützte Aktionen abgelehnt, anstatt stillschweigend erlaubt zu werden.
-## Einen „failure-closed"-Block diagnostizieren
+## Einen maschinenweiten Block diagnostizieren
-
-
- 1. Gehen Sie zu **Admin → Durchsetzung** und öffnen Sie den Computer.
- 2. Prüfen Sie seinen letzten Check-in, das zugewiesene Deployment und das gemeldete Deployment.
- 3. Gehen Sie zu **Observe → Richtlinie** und öffnen Sie die Sitzung der abgelehnten Entscheidung.
- 4. Stellen Sie fest, ob der Grund auf Daemon-Erreichbarkeit, Versionsunterschiede oder die Richtlinie selbst hinweist.
-
-
-
- ```bash
- failproofai config --status
- npm install -g failproofai@latest
- failproofai config
- ```
-
- Das erneute Ausführen von `failproofai config` aktualisiert und startet den Daemon nach einem Paket-Upgrade neu.
-
-
-
-Auf einem Computer, der zur Verwendung von `failproofaid` konfiguriert ist, ist der Daemon der einzige Auswertungsinstanz. Ist er nicht erreichbar oder stimmt seine Protokollversion nicht mit der CLI überein, schlägt die Hook-Auswertung geschlossen fehl. Die Aktion wird mit einer Begründung abgelehnt, die den Betreiber anweist, den Daemon zu prüfen oder zu aktualisieren.
+```bash
+failproofai config --status
+systemctl status failproofaid@$USER # Linux
+sudo launchctl print system/ai.failproof.failproofaid.$USER # macOS
+```
-Vor der Daemon-Konfiguration werten Hooks Richtlinien im Prozess aus. Sobald die Daemon-Konfiguration gespeichert ist, fällt Failproof AI bei einem Daemon-Fehler nicht stillschweigend auf eine zweite Auswertungsinstanz zurück.
+Führen Sie `failproofai config` aus, um den Dienst zu reparieren oder die passende Version zu installieren.
-## Auf eine „failure-closed"-Entscheidung reagieren
+Zwei Arten von Fehlern können ähnlich aussehen:
-1. Führen Sie `failproofai config --status` aus.
-2. Wenn sich die Versionen unterscheiden, führen Sie `failproofai config` nach dem Aktualisieren des Pakets erneut aus.
-3. Ist der Daemon nicht erreichbar, prüfen Sie seinen Servicestatus und die lokalen Logs.
-4. Nehmen Sie die Agenten-Arbeit erst wieder auf, wenn ein bekannter Richtlinienauswertungspfad funktionsfähig ist.
+| Fehler | Bedeutung |
+| --- | --- |
+| Dienst nicht erreichbar | Der Socket hat keinen funktionierenden Evaluator dahinter |
+| Versionskonflikt | CLI und Dienst sind sich über das Protokoll uneinig |
-
- Versuchen Sie nicht wiederholt, die blockierte Aktion zu wiederholen. Eine „failure-closed"-Antwort bedeutet, dass das System nicht feststellen konnte, dass die Aktion sicher war.
-
+Beide führen zu einer Ablehnung, werden im Status jedoch separat ausgewiesen.
## Ein Pack lässt sich nicht laden
-Ein Computer, der angewiesen wurde, ein Pack durchzusetzen, und es nicht ausführen kann, lehnt ab, anstatt stillschweigend fortzufahren. Auslöser ist eine **aufgezeichnete Erwartung**, niemals eine leere: Ein Computer ohne installierte Packs ist still, während ein Pack, das deklariert ist und sich nicht auflösen lässt – oder das weniger registriert als sein Manifest angibt – ablehnt.
+Ein ausgewähltes Pack, das fehlt, verändert wurde oder ungültig ist, lehnt die Ereignisse ab, die durch seine ausgewählten Policies abgedeckt sind. Dadurch wird verhindert, dass ein defektes Pack verschwindet, während der Rechner als geschützt erscheint.
-Die Ablehnung ist **eng gefasst**, anders als bei einem nicht erreichbaren Daemon. Ein Daemon, der nicht erreichbar ist, bedeutet, dass überhaupt keine Auswertung stattgefunden hat, sodass nichts als sicher bekannt sein kann. Ein Pack, das sich nicht lädt, hat eine aufzählbare Menge fehlender Wächter, da jede deklarierte Richtlinie ihr eigenes `match` mitbringt – daher lehnt es nur die Ereignisse und Tools ab, die von diesen Richtlinien abgedeckt werden, und alles andere läuft weiter.
+`failproofai policies` zeigt den Namen des Packs sowie den Ladefehler an.
-Es greift nicht bei:
-
-- einem `observe`-Pack, das konstruktionsbedingt auswertet und verwirft
-- Richtlinien, die Sie nie übernommen oder explizit deaktiviert haben
-- einem Pack, das der Loader nie empfangen hat, wo sich „keine Registrierungen" nicht von einem bewussten Überspringen unterscheiden lässt
-- einer aktiven Sitzungspause
-- einem Lade-Timeout, das vorübergehend ist – ein einzelner langsamer Festplattenmoment darf nicht ablehnen, bis ein Mensch eingreift
+```bash
+failproofai policies
+failproofai policies remove owner/repo
+failproofai policies add owner/repo@
+```
-`UserPromptSubmit` **instruiert** anstatt abzulehnen, unabhängig davon, was die fehlende Richtlinie deklariert hat. Eine pauschale Ablehnung würde es ebenfalls erfassen und Sie aus dem Agenten aussperren, der das Problem beheben könnte.
+Unleserliche Metadaten weiten die sichere Ablehnung aus, anstatt sie auf Basis von nicht vertrauenswürdigen Daten einzuschränken.
-### Vorgehensweise
+## Was weiterhin verfügbar ist
-```bash
-failproofai pack list
-```
+Das lokale Dashboard und die Statusbefehle funktionieren weiterhin, während die Policy-Auswertung fehlschlägt. Verwenden Sie sie, um den Dienst, das Pack oder die Version zu identifizieren, die repariert werden müssen.
-Dieser Befehl nennt alle installierten Packs, die sich nicht laden lassen, gibt den Grund an und beendet sich mit einem Fehlercode. Installieren Sie das Pack anschließend neu (`failproofai pack add `) oder entfernen Sie es (`failproofai pack remove `) – durch das Entfernen wird die Erwartung zurückgezogen, und die Ablehnung hört damit auf.
\ No newline at end of file
+
+ Umgehen Sie keine Fail-Closed-Entscheidung, indem Sie Dienst- oder Pack-Dateien löschen. Reparieren Sie den Dienst, installieren Sie das Pack neu oder entfernen Sie die Zuweisung über die CLI, damit der Rechner in einen bekannten Zustand zurückkehrt.
+
\ No newline at end of file
diff --git a/docs/de/policies/fleet.mdx b/docs/de/policies/fleet.mdx
index 125195405..f23c4206d 100644
--- a/docs/de/policies/fleet.mdx
+++ b/docs/de/policies/fleet.mdx
@@ -1,52 +1,61 @@
---
-title: "Richtlinien auf Maschinen bereitstellen"
-description: "Behalten Sie den Überblick, welche Maschinen eingebunden sind, aktuell sind und die vorgesehenen Richtlinienversionen durchsetzen."
+title: "Flottenabdeckung"
+description: "Sehen Sie, welche Maschinen die vorgesehenen Policies erhalten und angewendet haben."
icon: "network"
---
-Die Fleet-Abdeckung beantwortet die Frage, ob eine Richtlinie dort vorhanden ist, wo das Risiko besteht. Verfolgen Sie Maschinen anhand einer stabilen ID und einem lesbaren Label, und vergleichen Sie dann den zugewiesenen und gemeldeten Bereitstellungsstatus.
+Die Flottenabdeckung vergleicht, was Cloud zugewiesen hat, mit dem, was jede Maschine zuletzt angewendet hat.
-## Abdeckung prüfen
+## Eine Maschine prüfen
-
-
- 1. Gehen Sie zu **Admin → Durchsetzung** und überprüfen Sie die Gesamtzahlen für „Durchsetzend" und „Beobachtend".
- 2. Suchen Sie nach einer Maschine anhand von ID oder Label, oder filtern Sie nach Maschinen, denen eine Richtlinie fehlt.
- 3. Klappen Sie eine Zeile auf, um zugewiesene Richtlinien, gemeldete Bereitstellung, letzten Check-in und den Verlauf zu vergleichen.
- 4. Aktualisieren Sie die Ansicht nach dem Abfrageintervall der Maschine, wenn eine angewendete Bereitstellung noch aussteht.
+```bash
+failproofai config --status
+failproofai flush --wait --timeout 120
+```
- 
-
-
- ```bash
- failproofai config --status
- failproofai config --machine-label checkout-runner-03
- failproofai flush --wait
- ```
+Über Cloud:
+
+```bash
+fp fleet list
+fp fleet diff
+fp fleet show
+```
- Verwenden Sie `fp events --agent-id --since 24h`, um zu bestätigen, dass die Agentenaktivität der Maschine die Cloud erreicht.
-
-
+`fp fleet` erfordert eine angemeldete Sitzung, keinen API-Schlüssel.
-Nutzen Sie die Abdeckungsansichten, um Folgendes zu finden:
+| Befehl | Funktion |
+| --- | --- |
+| `fp fleet list` | Maschinen und Deployment-Status auflisten |
+| `fp fleet show ` | Policy-Set einer Maschine anzeigen |
+| `fp fleet deploy --add ` | Eine Policy hinzufügen oder aktualisieren |
+| `fp fleet deploy --remove ` | Eine Policy entfernen |
+| `fp fleet deploy --set ...` | Das gesamte Set ersetzen |
+| `fp fleet diff [machine]` | Vorgesehene und angewendete Versionen vergleichen |
+| `fp fleet history ` | Deployment-Generationen auflisten |
+| `fp fleet rollback ` | Eine Generation wiederherstellen |
+| `fp fleet rename ""` | Das Cloud-Label ändern |
-- Maschinen, die die neueste Bereitstellung nie abgerufen haben
-- Eingebundene Maschinen, die keine Aktivität mehr melden
-- Eine Richtlinie, die der falschen Umgebung oder Gruppe zugewiesen wurde
-- Versionsabweichungen nach einem unterbrochenen Update
+
+ `--set` ersetzt das vollständige Policy-Set. Ein einfaches `--add ` setzt eine neue Policy sofort durch. Verwenden Sie `--add :observe` für ein schrittweises Rollout im Beobachtungsmodus.
+
-Umbenennen einer Maschine ohne erneute Verbindung:
+## Beobachten, dann durchsetzen
```bash
-failproofai config --machine-label checkout-runner-03
+fp fleet deploy ci-runner-01 --add prod-guard:observe
+fp guardrails summary --since 24h --machine ci-runner-01
+fp fleet deploy ci-runner-01 --add prod-guard:enforce
```
-Lokalen Status prüfen:
+Der Beobachtungsmodus wertet die tatsächliche Policy aus und zeichnet Nicht-allow-Entscheidungen auf, ohne den Agenten zu blockieren.
+
+## Maschinenidentität
+
+Die Maschinen-ID ist unveränderlich und identifiziert die Maschine eindeutig. Das Label dient nur der Anzeige und kann geändert werden:
```bash
-failproofai config --status
+failproofai config --machine-label checkout-runner-03
+fp fleet rename "Checkout runner 03"
```
-
- Verwenden Sie Labels, die Workload und Umgebung identifizieren. Hostnamen allein sind nach automatischer Skalierung oder Maschinenaustausch oft nicht ausreichend.
-
\ No newline at end of file
+Das Ändern des Labels stellt keine neue Verbindung her und erneuert keinen Schlüssel für die Maschine.
\ No newline at end of file
diff --git a/docs/de/policies/local-configuration.mdx b/docs/de/policies/local-configuration.mdx
index 37aefcd51..05db04a8e 100644
--- a/docs/de/policies/local-configuration.mdx
+++ b/docs/de/policies/local-configuration.mdx
@@ -1,84 +1,50 @@
---
-title: "Lokale Konfiguration"
-description: "Steuerung von Policy-Scope, Parametern, benutzerdefinierten Dateien und maschinenbezogenen Failproof AI-Einstellungen."
-icon: "file-cog"
+title: "Lokale Richtlinienkonfiguration"
+description: "Legen Sie fest, wo Richtlinien gelten und konfigurieren Sie deren Parameter."
+icon: "sliders-horizontal"
---
-Failproof AI trennt die Policy-Auswahl von Maschinen- und Daemon-Einstellungen. So bleiben Repository-Policy-Entscheidungen überprüfbar, während Anmeldedaten und Daemon-Zustand außerhalb des Repositorys gespeichert werden.
+Verwenden Sie den Scope, um festzulegen, wer eine lokale Richtlinie erhält:
-## Einen Policy-Scope wählen
-
-
-
- Führen Sie `failproofai` ohne Argumente aus, um das lokale Policy-Dashboard zu öffnen. Wählen Sie den User-, Project- oder Local-Scope, bevor Sie eine Policy aktivieren, damit die Änderung in die richtige Konfigurationsdatei geschrieben wird.
-
- - **User** gilt projektübergreifend auf dieser Maschine.
- - **Project** gehört zum Repository und kann committet werden.
- - **Local** überschreibt ein Projekt für einen einzelnen Benutzer und sollte gitignored bleiben.
-
-
-
- ```bash
- failproofai policy add block-rm-rf --scope user
- failproofai policy add block-force-push --scope project
- failproofai policy add warn-large-file-write --scope local
- failproofai policies
- ```
+| Scope | Gilt für |
+| --- | --- |
+| `user` | Ihre unterstützten Agents auf diesem Rechner |
+| `project` | Agents, die in diesem Projekt ausgeführt werden |
+| `local` | Claude nur in den lokalen Projekteinstellungen |
+| `all` | Nur zum Deinstallieren |
- Nicht jedes Harness unterstützt den Local-Scope. Die CLI lehnt einen Scope ab, den das gewählte Harness nicht abbilden kann.
-
-
+```bash
+failproofai policies add block-sudo --scope user
+failproofai policies add block-rm-rf --scope project
+```
-| Scope | Policy-Konfigurationsdatei |
-| --- | --- |
-| Project | `/.failproofai/policies-config.json` |
-| Local | `/.failproofai/policies-config.local.json` |
-| User | `~/.failproofai/policies-config.json` |
+Hermes und OpenClaw unterstützen ausschließlich den User-Scope. Die meisten anderen Harnesses unterstützen User- und Project-Scope. Claude unterstützt zusätzlich den Local-Scope. Siehe [Harnesses](/de/reference/harnesses).
-Aktivierte Policies werden als Vereinigungsmenge zusammengeführt. Policy-Parameter verwenden den ersten Scope, der Parameter für die jeweilige Policy definiert, in der Reihenfolge Project → Local → User. Explizite benutzerdefinierte Policy-Pfade verwenden den ersten Scope, der sie definiert.
+## Richtlinienparameter
-## Policy-Parameter konfigurieren
+Richtlinieneinstellungen werden in `policies-config.json` im entsprechenden Scope gespeichert. Verwenden Sie nach Möglichkeit die Ansicht **Richtlinien → Konfigurieren** im lokalen Dashboard.
-
-
- Öffnen Sie die Policy im lokalen Dashboard, bearbeiten Sie die unterstützten Parameter und speichern Sie im gewählten Scope. Führen Sie eine passende und eine nicht passende Agent-Aktion aus und überprüfen Sie die Entscheidung unter **Observe → policy**.
+Ein Parameter gehört zu einer einzelnen Richtlinie und beeinflusst deren Entscheidungsverhalten. Beispielsweise kann eine Allow-Liste dazu führen, dass eine blockierende Richtlinie bekannte sichere Befehle oder Pfade akzeptiert.
-
-
- Bearbeiten Sie die `policies-config.json` des gewählten Scopes und führen Sie anschließend `failproofai policies` aus, um unbekannte Policy-Namen oder Parameter-Keys zu erkennen.
+Benutzerdefinierte Richtliniendateien können automatisch aus `.failproofai/policies/` geladen oder explizit angegeben werden:
- ```json
- {
- "enabledPolicies": ["block-rm-rf", "block-force-push"],
- "policyParams": {
- "block-rm-rf": {
- "allowPaths": ["/tmp/build-output"]
- }
- }
- }
- ```
+```bash
+failproofai policies -i -c ./guards.mjs --scope project
+```
- ```bash
- failproofai policies
- ```
-
-
+Explizite Pfade werden entfernt mit:
-## Die Maschinendateien verstehen
+```bash
+failproofai policies -u -c
+```
-`~/.failproofai` enthält separate Dateien für separate Vertrauensgrenzen:
+## Dateien
-| Pfad | Zweck |
+| Datei | Zweck |
| --- | --- |
-| `config.json` | Nicht-geheime Daemon-, Audit- und Telemetrie-Einstellungen |
-| `credentials.json` | Cloud-Anmeldedaten; mit Nur-Eigentümer-Berechtigungen gespeichert |
-| `policies-config.json` | User-Scope-Builtin-Auswahl, Parameter und explizite benutzerdefinierte Pfade |
-| `policies/` | Benutzerkonvention-Policies und Cloud-verwaltete Policy-Artefakte |
-| `hook-activity/` | Lokales Policy-Entscheidungsprotokoll |
-| `state/` | Daemon-Spool, Health-, Pause- und Laufzeitzustand |
-
-Verwenden Sie `FAILPROOFAI_HOME`, um das gesamte Maschinen-Layout für einen Container oder isolierten Test zu verschieben. Verschieben Sie einzelne Zustandsverzeichnisse nicht unabhängig voneinander.
+| `~/.failproofai/config.json` | Rechner- und Collector-Einstellungen |
+| `policies-config.json` | Aktivierte Richtlinien und Parameter für einen Scope |
+| `.failproofai/policies/*policies.mjs` | Konventionsbasiert geladene Richtlinien |
+| `~/.failproofai/policies/packs/installed.json` | Installierte Packs und deren Auswahl |
-
- Committen Sie niemals `credentials.json`. Committen Sie Project-Policy-Konfigurationen und Projektkonvention-Policies nur, nachdem Sie diese als Durchsetzungscode überprüft haben.
-
\ No newline at end of file
+Bearbeiten Sie installierte Pack-Artefakte nicht direkt. Installieren Sie das Pack neu oder veröffentlichen Sie eine korrigierte Version.
\ No newline at end of file
diff --git a/docs/de/policies/overview.mdx b/docs/de/policies/overview.mdx
index a3b0f3dfa..3967652e0 100644
--- a/docs/de/policies/overview.mdx
+++ b/docs/de/policies/overview.mdx
@@ -1,63 +1,76 @@
---
title: "Policies"
-description: "Beobachten, steuern oder blockieren Sie Agentenaktionen, bevor ein bekannter Fehler sich wiederholt."
+description: "Einen Agenten anleiten oder blockieren, bevor ein bekannter Fehler erneut auftritt."
icon: "shield-check"
---
-Eine Policy wertet ein Agenten-Hook-Ereignis aus und gibt eine von drei Entscheidungen zurück:
+Eine Policy beobachtet eine Agentenaktion und gibt eine von drei Entscheidungen zurück:
-- `allow` lässt die Aktion fortsetzen.
-- `instruct` gibt dem Agenten korrigierende Hinweise.
-- `deny` blockiert die Aktion mit einer Begründung.
+- `allow` lässt die Aktion fortlaufen.
+- `instruct` gibt dem Agenten eine Anweisung, sofern sein Harness dies unterstützt.
+- `deny` blockiert die Aktion.
-## Die drei Policy-Oberflächen nutzen
+Verwende Policies für bekanntes, wiederkehrendes Verhalten: das Löschen geschützter Dateien, das Preisgeben von Secrets, das Pushen in den falschen Branch oder Änderungen an der Produktionsinfrastruktur.
-
-
- 1. Gehen Sie zu **Observe → policy**, um Policy-Entscheidungen aus Sitzungen zu filtern und zu überprüfen.
- 2. Gehen Sie zu **Admin → policy editor**, um Policies zu erstellen, zu validieren, zu veröffentlichen, zu deaktivieren oder unveränderliche Versionen einzusehen.
- 3. Gehen Sie zu **Admin → enforcement**, um Versionen und Effekte Maschinen zuzuweisen.
+## Policies zu diesem Rechner hinzufügen
- Nutzen Sie die Policy-Seite, um zu verstehen, was bereits zutrifft, bevor Sie Enforcement erstellen oder ändern.
+Beim Setup wird kein Policy-Pack ausgewählt. Füge das Failproof AI Pack nach dem Setup hinzu:
- 
+```bash
+failproofai config
+failproofai policies add FailproofAI/policies
+failproofai policies
+```
- Der Editor ist der Ort, an dem Sie eine Fehlerbedingung in Quellcode umwandeln, validieren und eine unveränderliche Version veröffentlichen.
+Das Paket enthält kein privilegiertes eingebautes Pack. Unseres wird auf dieselbe Weise installiert wie jedes andere.
- 
+Policies können auch aus einer lokalen Datei, einem veröffentlichten Pack oder einer Cloud-Zuweisung stammen:
- Enforcement weist dann diese veröffentlichte Version und ihren Observe- oder Enforce-Effekt den Maschinen zu.
+| Quelle | Hinzufügen |
+| --- | --- |
+| Lokale Datei | `*policies.{js,mjs,ts}` unter `.failproofai/policies/` ablegen |
+| Beliebiger Dateipfad | `failproofai policies -i -c ` |
+| Veröffentlichtes Pack | `failproofai policies add /` |
+| Cloud | Im Dashboard oder mit `fp fleet deploy` zuweisen |
- 
+`block-failproofai-commands` wird immer ausgeführt und kann nicht deaktiviert werden. Es verhindert, dass ein Agent seine eigene Durchsetzung deaktiviert.
- Überprüfen Sie die Entscheidungen nach der Bereitstellung erneut auf der Policy-Seite, damit die Authoring- und Flottenansichten mit der tatsächlichen Agentenaktivität verknüpft sind.
-
-
- Verwenden Sie `failproofai` für die lokale Policy-Installation und -Validierung:
+## Beobachten vor der Durchsetzung
- ```bash
- failproofai policies
- failproofai policy add block-rm-rf --scope project
- failproofai config --status
- ```
+Der Observe-Modus führt die eigentliche Policy aus und zeichnet auf, was sie getan hätte, blockiert den Agenten jedoch nicht.
- Verwenden Sie `fp`, um Cloud-Sitzungen und -Ereignisse zu finden, die Policy-Entscheidungen enthalten. Das Cloud-Authoring und die Flottenbereitstellung bleiben Dashboard-Workflows.
-
-
+```bash
+fp policies test ./checkout.policy.mjs --tool Bash --command "git push --force" --expect deny
+fp fleet deploy ci-runner-01 --add checkout-guard:observe
+fp guardrails summary --since 24h --machine ci-runner-01
+fp fleet deploy ci-runner-01 --add checkout-guard:enforce
+```
-Policies haben drei eigenständige Oberflächen in Failproof AI:
+
+ Ein einfaches `fp fleet deploy --add ` setzt sofort durch. Füge `:observe` für einen Shadow-Rollout hinzu.
+
-1. **Entscheidungen analysieren** in Sitzungen, Dashboards und Audits.
-2. **Versionen erstellen** mit integrierten Regeln, Code oder dem Policy-Editor.
-3. **Versionen bereitstellen und durchsetzen** auf ausgewählten Maschinen.
+Eine Policy, die im Observe-Modus einen Timeout hat, zeichnet ein allow auf, da dies auch bei der Durchsetzung passieren würde. Es werden nur Nicht-allow-Entscheidungen aufgezeichnet.
-Beginnen Sie mit einem bestätigten Fehlermodus. Definieren Sie das kleinstmögliche Ereignis und Tool-Match, das ihn identifiziert, testen Sie legitime und unsichere Beispiele, und beobachten Sie, bevor Sie durchsetzen.
+Für ein Pack, das ohne Cloud verwendet wird, veröffentliche es mit `failproofai publish --effect observe`.
-
-
- Aktivieren Sie eine geprüfte Regel für häufige Risiken bei Secrets, Shell, Git, Cloud und Workflows.
+## Den richtigen Weg wählen
+
+
+
+ Wähle aus 39 Policies für Secrets, Dateien, Git, Infrastruktur und Workflows.
+
+
+ Füge ein veröffentlichtes Policy-Set von GitHub oder dem Policy Hub hinzu.
-
- Formulieren Sie eine workflow-spezifische Entscheidung in JavaScript oder TypeScript.
+
+ Definiere eine Regel für deinen eigenen Agenten oder Workflow.
-
\ No newline at end of file
+
+ Eine Cloud-Policy beobachten, promoten und zurückrollen.
+
+
+
+
+ Die Unterstützung der Durchsetzung variiert je nach Harness. Ein Tool-Call-deny wird auf allen 12 unterstützten Harnesses verifiziert; andere Ereignisse variieren. Siehe [unterstützte Harnesses](/de/reference/harnesses#enforcement-capability).
+
\ No newline at end of file
diff --git a/docs/de/policies/packs.mdx b/docs/de/policies/packs.mdx
index 03252fdb8..061d0c3d0 100644
--- a/docs/de/policies/packs.mdx
+++ b/docs/de/policies/packs.mdx
@@ -1,110 +1,62 @@
---
title: "Policy Packs"
-description: "Installiere einen Satz von Policies, der als GitHub-Release veröffentlicht wurde, und verwalte, was er durchsetzt."
+description: "Versionierte Richtliniensets, die über GitHub veröffentlicht werden, inspizieren und installieren."
icon: "package"
---
-Ein Pack ist ein Satz von Policies, der als GitHub-Release veröffentlicht wurde. Ein einziger Befehl installiert ihn, die eigenen Prüfsummen des Releases werden vor der Ausführung verifiziert, und der Digest wird gespeichert, damit sich der Pack auf deinem Rechner anschließend nicht mehr verändern kann.
-
-## Die Failproof AI Policies installieren
+Ein Policy Pack ist ein versioniertes Richtlinienset, das als öffentliches GitHub-Release veröffentlicht wird. Das Paket enthält kein eigenes Pack; installiere unseres wie jedes andere:
```bash
-failproofai pack add core
+failproofai policies show FailproofAI/policies
+failproofai policies add FailproofAI/policies
```
-Damit wird der von uns veröffentlichte Satz aus der im Paket enthaltenen Kopie installiert — es ist also keine Netzwerkverbindung erforderlich, und hinter einem Proxy kann es nicht fehlschlagen. Nur einen Teil davon übernehmen:
-
-```bash
-failproofai pack add core --policy block-rm-rf # eine oder mehrere kommagetrennte Policies
-failproofai pack add core --category dangerous-commands # eine gesamte Kategorie
-failproofai pack add core --all # alles darin
-```
+`show` liest das Manifest, ohne den Code des Packs auszuführen.
-`failproofai pack list` listet alle Kategorien auf, die der Pack enthält.
-
-## Den Inhalt eines Packs vor der Installation prüfen
+## Auswahl der zu installierenden Inhalte
```bash
-failproofai pack list acme/support-agent
+failproofai policies add owner/repo --policy block-refunds
+failproofai policies add owner/repo --category billing,git
+failproofai policies add owner/repo --all
```
-Listet alle Policies des Packs gruppiert nach Kategorie auf und zeigt an, welche der Autor standardmäßig aktiviert hat und welche optional sind. Es wird **ausschließlich das Manifest** gelesen — das eigentliche Artefakt wird weder heruntergeladen noch importiert. Das Anzeigen eines fremden Packs führt also keinen fremden Code aus. Das Manifest wird dennoch gegen die `SHA256SUMS` des Releases geprüft, sodass das, was du siehst, auch das ist, was installiert würde.
-
-`failproofai pack list` ohne Angabe einer Quelle listet die bereits hier installierten Packs auf.
-
-## Einen fremden Pack installieren
+Ohne eine Auswahl verwendet das Pack die Standardeinstellungen des Herausgebers. Wenn du ein neueres Release erneut hinzufügst, bleibt deine bestehende Auswahl erhalten.
-```bash
-failproofai pack add acme/support-agent
-```
+Alles mit einem Schrägstrich ist eine Pack-Quelle. Alles ohne Schrägstrich ist ein Richtlinienname.
-Alle folgenden Formate funktionieren — füge einfach das ein, was du hast:
+## Ein Release pinnen
| Quelle | Ergebnis |
| --- | --- |
-| `acme/support-agent` | Neuestes Release, **fixiert** auf den exakt aufgelösten Tag |
-| `acme/support-agent@v2.1.0` | Dieses Release |
-| `github:acme/support-agent@v2.1.0` | Dasselbe, explizit geschrieben |
-| `https://github.com/acme/support-agent/releases/tag/v2.1.0` | Dasselbe, aus dem Browser kopiert |
+| `owner/repo` | Neuestes Release, nach der Auflösung gepinnt |
+| `owner/repo@a1b2c3d4e5f6` | Exaktes commit-basiertes Release |
+| `owner/repo@v2.1.0` | Exaktes benanntes Release |
+| GitHub-Release-URL | Das Release in dieser URL |
-Wird kein Tag angegeben, wird das neueste Release installiert **und fixiert**, und anschließend wird angezeigt, welcher Tag gewählt wurde. Was gespeichert wird, benennt immer genau ein Release, sodass eine Neuinstallation nicht abweichen kann.
+Ein Pack verwendet normalerweise den 12-stelligen Commit-SHA, aus dem es gebaut wurde. Verwende `failproofai policies show owner/repo --releases`, um die Release-Reihenfolge einzusehen.
-## Nur einen Teil eines Packs verwenden
-
-Standardmäßig erhältst du die **eigenen** Standardwerte des Packs — die Policies, die der Autor als sicher für die unbeaufsichtigte Aktivierung markiert hat — nicht alles, was er enthält.
+## Installierte Packs verwalten
```bash
-failproofai pack add acme/support-agent --category billing,git
-failproofai pack add acme/support-agent --policy block-refunds
-failproofai pack add acme/support-agent --all
+failproofai policies
+failproofai policies remove block-refunds
+failproofai policies add block-refunds
+failproofai policies remove owner/repo
```
-`--category` und `--policy` werden als Vereinigung kombiniert (`--only` wird als Synonym für `--policy` akzeptiert). Wird ein Pack in einer neueren Version erneut hinzugefügt, bleiben die gewählten Einstellungen erhalten, anstatt alles andere wieder einzuschalten.
-
-## Verwaltung der aktiven Policies
-
-```bash
-failproofai policies # alle Quellen in einer Liste, einschließlich Packs
-failproofai pack list # nur Packs, gruppiert nach Kategorie
-failproofai policies --uninstall block-refunds # eine Pack-Policy deaktivieren
-failproofai policies --install block-refunds # und wieder aktivieren
-failproofai pack remove acme/support-agent
-```
-
-Ein einfacher Name bezieht sich auf die **eingebaute** Policy, sofern eine mit diesem Namen existiert. Den Namen einer Pack-Kopie explizit angeben, wenn nötig:
-
-```bash
-failproofai policies --uninstall acme/support-agent:block-refunds
-```
-
-
-Wenn ein Pack eine Policy mitbringt, deren Name auch ein **aktiviertes Builtin** ist, wird das Builtin ausgeführt und die Pack-Kopie übersprungen — andernfalls würde dieselbe Prüfung zweimal ausgewertet. Das Builtin deaktivieren, um stattdessen die Pack-Kopie zu verwenden.
-
-
-## Woher die Failproof AI Policies stammen
-
-`core` liest die im npm-Paket mitgelieferte Kopie. Derselbe Satz wird auch als GitHub-Release veröffentlicht, was du installierst, wenn du eine bestimmte Version möchtest:
-
-```bash
-failproofai pack add core # aus diesem Paket, ohne Netzwerkverbindung
-failproofai pack add FailproofAI/policies # derselbe Satz, aus dem GitHub-Release
-```
-
-## Was Integritätsprüfung leistet und was nicht
-
-`SHA256SUMS` wird im selben Release wie das Artefakt ausgeliefert und ist daher **keine** Signatur und beweist nichts darüber, wer es veröffentlicht hat. Was sie beweist, ist, dass die Bytes genau die des veröffentlichten Releases sind — und da der Digest beim Hinzufügen des Packs gespeichert und vor jedem Import erneut geprüft wird, kann sich ein Pack auf deinem Rechner anschließend nicht mehr verändern. Ein Repository, das einen Asset-Tag neu setzt oder ersetzt, wird nicht mehr geladen, anstatt still etwas anderes auszuführen.
-
-Bei der Installation wird der Pack auch **einmalig importiert** und gegen sein eigenes Manifest geprüft. Ein Pack, dessen Artefakt nicht geparst werden kann oder der etwas anderes als deklariert registriert, wird abgelehnt, bevor etwas aktiviert wird — anstatt sauber zu installieren und beim nächsten Tool-Aufruf zu versagen.
+Wenn zwei installierte Packs denselben Richtliniennamen enthalten, lehnt die CLI den mehrdeutigen einfachen Namen ab. Wähle die Richtlinie über ein bestimmtes Pack aus oder deinstalliere das andere Pack.
-## Wenn ein Pack nicht geladen werden kann
+## Sicherheit und Verfügbarkeit
-Ein Pack, der auf diesem Rechner durchgesetzt werden soll, aber nicht ausgeführt werden kann, **verweigert** die Ereignisse, die von den fehlenden Policies abgedeckt wurden, anstatt sie stillschweigend zuzulassen. Siehe [Fehlerverhalten](/de/policies/failure-behavior). `failproofai pack list` benennt jeden Pack in diesem Zustand und beendet sich mit einem Fehlercode ungleich null.
+Jedes Release enthält ein Manifest, gebündelten Richtliniencode und Prüfsummen. Failproof AI verifiziert den gespeicherten Digest, bevor es geladen wird. Prüfsummen belegen, dass die Bytes mit dem Release übereinstimmen; sie beweisen jedoch nicht, wer es veröffentlicht hat.
-## Offline-Betrieb und Mirrors
+Ein ausgewähltes Pack, das nicht geladen werden kann, schlägt für die deklarierten Ereignisse geschlossen fehl. Siehe [Verhalten bei Richtlinienfehlern](/de/policies/failure-behavior).
| Variable | Auswirkung |
| --- | --- |
-| `FAILPROOFAI_NO_DOWNLOAD=1` | Verhindert jeden Abruf; bereits installierte Packs erzwingen weiterhin ihre Policies |
-| `FAILPROOFAI_PACK_BASE_URL` | Leitet den Pack-Abruf an einen Mirror statt an `github.com` weiter |
+| `FAILPROOFAI_NO_DOWNLOAD=1` | Neue Downloads ablehnen; installierte Packs laufen weiter |
+| `FAILPROOFAI_PACK_BASE_URL` | Einen Mirror verwenden |
+| `FAILPROOFAI_PACK_DIR` | Den Pack-Speicherort verschieben |
-Eigene Packs veröffentlichen: siehe [Pack veröffentlichen](/de/policies/publish-a-pack).
\ No newline at end of file
+Stöbere in Packs im [Policy Hub](https://befailproof.ai/policy-hub/) oder [veröffentliche dein eigenes](/de/policies/publish-a-pack).
\ No newline at end of file
diff --git a/docs/de/policies/publish-a-pack.mdx b/docs/de/policies/publish-a-pack.mdx
index e49635295..0b04819f7 100644
--- a/docs/de/policies/publish-a-pack.mdx
+++ b/docs/de/policies/publish-a-pack.mdx
@@ -1,91 +1,89 @@
---
-title: "Ein Pack veröffentlichen"
-description: "Eigene Policies als GitHub-Release bereitstellen, das jeder installieren kann."
+title: "Richtlinien veröffentlichen"
+description: "Veröffentliche deine Richtlinien als öffentliches GitHub-Release, das jeder installieren kann."
icon: "upload"
---
-Ein Pack besteht aus drei Dateien, die einem GitHub-Release beigefügt werden. `failproofai pack build` erzeugt alle drei aus einer Policy-Datei, die bereits vorhanden ist.
+Erstelle eine funktionierende Richtlinie, teste sie lokal und veröffentliche sie dann als Pack.
-## 1. Die Policies schreiben
+## Erstellen und testen
-Eine einzelne Datei, die dieselbe API wie jede benutzerdefinierte Policy verwendet. Zwei zusätzliche Felder sind für ein Pack relevant:
+```bash
+failproofai publish --init guards.mjs
+failproofai policies -i -c ./guards.mjs
+```
+
+`--init` erstellt eine Richtlinie, die `git push --force` bereits blockiert. Bearbeite sie, weise deinen Agenten an, die blockierte Aktion auszuführen, und überprüfe **Policies → Activity** im lokalen Dashboard.
+
+Eine Pack-Richtlinie kann Folgendes enthalten:
```js
-import { customPolicies, deny, allow } from "failproofai";
+import { customPolicies, allow, deny } from "failproofai";
customPolicies.add({
name: "block-refunds",
- description: "Refunds above the approved limit need a human",
- category: "Billing", // groups it, and is what --category selects on
- defaultEnabled: true, // switched on by a plain `pack add`
- match: { events: ["PreToolUse"], tools: ["Bash"] },
- fn: async (ctx) =>
- String(ctx.toolInput?.command ?? "").includes("refund")
- ? deny("Refunds need a human. Ask before running this.")
- : allow(),
+ description: "Refunds above the limit need a human",
+ category: "Billing",
+ defaultEnabled: true,
+ match: { events: ["PreToolUse"], toolNames: ["Bash"] },
+ fn: async (ctx) => {
+ // return allow(), instruct(), or deny()
+ },
});
```
-`defaultEnabled` ist standardmäßig **false**, wenn es weggelassen wird. Ein einfaches `failproofai pack add` aktiviert nur das, was explizit markiert wurde — ob alle Policies eines Fremden unbeaufsichtigt installiert werden, sollte nicht stillschweigend für den Nutzer entschieden werden.
+`defaultEnabled` hat standardmäßig den Wert `false`.
-
-Der Eintrag muss eine **in sich geschlossene Datei** sein. Nur der Eintrag wird mit einem Digest verknüpft. Ein Pack, das lokale Dateien importiert, kann nicht ernsthaft behaupten, der Digest decke ab, was tatsächlich ausgeführt wird. Daher zunächst bündeln (`esbuild`, `bun build`, `rollup`) und das Pack aus dem Bundle erstellen — `pack build` lehnt einen lokalen Import ab, anstatt ein Versprechen zu machen, das es nicht halten kann.
-
+## Veröffentlichen
-## 2. Die Release-Assets erstellen
+Committe deine Dateien und führe dann aus:
```bash
-failproofai pack build ./policies.mjs \
- --id acme/support-agent \
- --version 1.0.0 \
- --out ./dist-pack
+failproofai publish
```
-Es werden drei Dateien geschrieben, und jede Policy wird zuerst mit den **eigenen Regeln des Loaders** validiert — so schlägt ein Pack, das niemals installiert werden könnte, bereits hier fehl, wo es noch behoben werden kann:
-
-| Datei | Beschreibung |
-| --- | --- |
-| `failproofai-pack.json` | Das Manifest: ID, Version, Effekt und ein Eintrag pro Policy |
-| `failproofai-pack.mjs` | Der Eintrag, unverändert |
-| `SHA256SUMS` | `` für die anderen beiden Dateien |
+Publish findet die Richtliniendatei, validiert sie mit demselben Loader, der bei der Installation verwendet wird, und lädt die Pack-Assets in ein GitHub-Release hoch. Es verwendet `GITHUB_TOKEN`, `GH_TOKEN` oder `gh auth login`.
-Zur Build-Zeit abgelehnt werden: eine ID, die nicht dem Format `publisher/name` entspricht; ein Policy-Name, der `/` enthält; eine Policy, die `alwaysOn` deklariert; eine fehlende `description`, `category` oder `match`; ein Eintrag, der nichts registriert; sowie ein Eintrag, der lokale Dateien importiert.
+Das Repository muss öffentlich sein, da die Installation anonymes HTTPS verwendet.
-## 3. Dem Release beifügen
+Die Standardversion ist der 12-stellige SHA des aktuellen Commits. Publish lehnt einen unsauberen Tree oder ein Verzeichnis außerhalb von Git ab, es sei denn, du gibst `--version` an. Ein Tag auf `HEAD` hat Vorrang vor dem SHA.
-Das Release mit derselben Version taggen, die beim Build angegeben wurde, und alle drei Dateien als Release-Assets anhängen:
+Benutzer installieren es mit:
```bash
-gh release create 1.0.0 \
- ./dist-pack/failproofai-pack.json \
- ./dist-pack/failproofai-pack.mjs \
- ./dist-pack/SHA256SUMS
+failproofai policies add owner/repo
```
-Nun kann es jeder installieren:
+## Im Observe-Modus veröffentlichen
```bash
-failproofai pack add acme/support-agent
+failproofai publish --effect observe
```
-Die Asset-Namen sind festgelegt — sie sind das, woraus die CLI des Consumers ihre URLs konstruiert, ohne API-Aufruf und ohne Erkennung.
+Der Observe-Modus wertet die echte Richtlinie aus und zeichnet Entscheidungen auf, die kein allow sind, lässt den Agenten jedoch weitermachen. Ein Timeout wird als allow gewertet.
-## Eine neue Version veröffentlichen
+Veröffentliche erneut mit `--effect enforce`, wenn die beobachteten Treffer korrekt sind.
-Mit dem neuen `--version` bauen, ein neues Release taggen und die drei Assets erneut anhängen. Consumer führen dasselbe `pack add` aus und behalten die Teilmenge, die sie ausgewählt hatten; eine deaktivierte Policy bleibt auch nach dem Upgrade deaktiviert.
+## Nützliche Optionen
-Das **Umbenennen** einer Policy ist eine breaking change: Ein System, das sie deaktiviert hatte, deaktiviert jetzt einen Namen, der nicht mehr existiert, und der neue Name wird mit dem Standardwert von `defaultEnabled` aktiviert.
-
-## Was Nutzer vertrauen
-
-`SHA256SUMS` liegt im selben Release wie das Artefakt und beweist daher, dass die Bytes mit dem übereinstimmen, was veröffentlicht wurde — nicht jedoch, wer der Urheber ist. Wer Schreibzugriff auf das Repository hat, kann beide Dateien schreiben. Der Schutz für die Nutzer besteht darin, dass der Digest bei der Installation eingefroren wird — was veröffentlicht wurde, kann nachträglich nicht mehr verändert werden.
-
-Aus einem Repository veröffentlichen, dessen Schreibzugriff kontrolliert wird, und ein Pack-Release wie die Veröffentlichung eines Packages behandeln.
+| Flag | Wirkung |
+| --- | --- |
+| `--init [file]` | Erstellt eine Einstiegsrichtlinie |
+| `--repo /` | Repository auswählen oder erstellen |
+| `--version ` | Die commit-basierte Version überschreiben |
+| `--effect enforce|observe` | Festlegen, ob das Pack blockiert |
+| `--dry-run` | Erstellen und validieren ohne zu veröffentlichen |
+| `--allow-private` | Privat veröffentlichen, in dem Wissen, dass `policies add` es nicht installieren kann |
-## Beobachten vor dem Durchsetzen
+```bash
+failproofai publish --dry-run
+failproofai publish ./guards.mjs --repo me/guards --version 2.0.0
+```
-Ein Manifest kann `"effect": "observe"` deklarieren. Diese Policies werden ausgeführt und ihre Urteile werden **aufgezeichnet und verworfen** — nichts wird blockiert. So lässt sich eine neue Regel gegen echten Traffic messen, bevor sie die Arbeit von jemandem unterbrechen kann.
+
+ Füge das GitHub-Topic `failproofai-policies` nach der Veröffentlichung hinzu, damit der [Policy Hub](https://befailproof.ai/policy-hub/) das Pack indizieren kann. Die CLI setzt es nicht automatisch für dich.
+
-```json
-{ "id": "acme/support-agent", "version": "1.1.0", "effect": "observe", "policies": [ ... ] }
-```
\ No newline at end of file
+
+ Das Umbenennen einer Richtlinie ist eine Breaking Change für bestehende Auswahlen. Halte Namen über Releases hinweg stabil.
+
\ No newline at end of file
diff --git a/docs/de/policies/rollback.mdx b/docs/de/policies/rollback.mdx
index aec3bc803..f751d033f 100644
--- a/docs/de/policies/rollback.mdx
+++ b/docs/de/policies/rollback.mdx
@@ -1,41 +1,68 @@
---
title: "Rollback"
-description: "Stellen Sie eine bekannte Richtlinienversion wieder her, wenn ein Rollout gültige Agent-Aufgaben beeinträchtigt."
+description: "Einen bekannten Policy-Deploymentstand wiederherstellen, wenn ein Rollout valide Agenten-Arbeit unterbricht."
icon: "rotate-ccw"
---
-Rollback ändert die eingesetzte Version oder entfernt eine Richtlinienzuweisung; die Entscheidungshistorie, die den Vorfall erklärt, wird dabei nicht gelöscht.
+Ein Rollback ändert die deployte Version oder entfernt eine Policy-Zuweisung; er löscht nicht den Entscheidungsverlauf, der den Vorfall erklärt.
-## Rollback einer Maschine
+## Eine Maschine zurücksetzen
- 1. Gehen Sie zu **Admin → enforcement**, erweitern Sie die betroffene Maschine und identifizieren Sie deren zuletzt bekannte funktionierende Richtliniensammlung.
- 2. Wählen Sie **edit**, stellen Sie die betreffenden Versionen und Effekte wieder her, und wenden Sie das neue Deployment an.
- 3. Warten Sie auf den Check-in der Maschine und überprüfen Sie anschließend das gemeldete Deployment.
- 4. Öffnen Sie **Observe → policy** sowie die betroffenen Sitzungen, um zu bestätigen, dass gültige Aufgaben nicht länger blockiert werden.
+ 1. Gehe zu **Admin → enforcement**, klappe die betroffene Maschine auf und identifiziere ihr zuletzt bekanntes funktionsfähiges Policy-Set.
+ 2. Wähle **edit**, stelle diese Versionen und Effekte wieder her und wende das neue Deployment an.
+ 3. Warte auf den nächsten Check-in der Maschine und verifiziere dann das gemeldete Deployment.
+ 4. Öffne **Observe → policy** sowie die betroffenen Sessions, um zu bestätigen, dass valide Arbeit nicht länger blockiert wird.
- Ein Cloud-Deployment-Rollback ist ein Dashboard-Workflow. Verwenden Sie den lokalen Status, um zu bestätigen, dass das korrigierte Deployment die Maschine erreicht hat:
+ Finde die Generation, zu der zurückgekehrt werden soll, stelle sie wieder her und bestätige, dass sie angekommen ist:
```bash
+ fp fleet history ci-runner-01
+ fp fleet rollback ci-runner-01 3
+ fp fleet diff ci-runner-01
failproofai config --status
```
- `failproofai config --pause` pausiert integrierte, benutzerdefinierte und konventionsbasierte Richtlinien für eine lokale Sitzung. Cloud-verwaltete Richtlinien werden dabei nicht pausiert – dieser Befehl ist daher kein Workaround für ein fehlerhaftes Cloud-Deployment.
+ `fp fleet rollback` erstellt eine **neue** Generation mit dem alten Set, anstatt den Zähler zurückzudrehen – der Verlauf bleibt damit append-only. Der Befehl verweigert die Ausführung, wenn die angegebene Generation eine Policy referenziert, die inzwischen deaktiviert oder gelöscht wurde — der Server meldet dies, anstatt ein Set wiederherzustellen, das nicht ausgeliefert werden kann.
+
+ `fp fleet diff` zeigt Soll- versus Ist-Zustand. Eine Maschine gilt als gedriftet, bis sie das nächste Mal pollt — prüfe daher den Diff, bevor du davon ausgehst, dass der Rollback nicht gegriffen hat. `failproofai config --status` bestätigt den Zustand direkt auf der Maschine.
-## Wann ein Rollback durchgeführt werden sollte
+## Pause ist kein Rollback
+
+Eine Pause setzt alle lokal installierten Policies für **eine Session** außer Kraft und läuft immer automatisch ab — Packs, benutzerdefinierte Dateien, Konventionsdateien und Builtins gleichermaßen. Nur Cloud-verwaltete Policies und der dauerhaft aktive `block-failproofai-commands`-Schutz bleiben in Kraft. Eine Pause ist daher kein Workaround für ein fehlerhaftes Cloud-Deployment, und ihr Wirkungsbereich ist wesentlich größer als es zunächst scheint: Ein Pack enthält im Wesentlichen die gesamte lokale Durchsetzung, und der Pack-Fail-Closed-Schutz wird für die Dauer ebenfalls übergangen.
+
+| Befehl | Wirkung |
+|---|---|
+| `failproofai config --pause` | Die neueste Agenten-Session in diesem Verzeichnis, für 30 Minuten |
+| `failproofai config --pause 10m` | Eine bestimmte Zeitspanne. Maximum 8h; Suffixe `s`/`m`/`h`, eine nackte Zahl bedeutet Minuten |
+| `failproofai config --pause --session ` | Eine bestimmte Session als Ziel |
+| `failproofai config --resume` | Die Pause vorzeitig beenden |
+| `failproofai config --resume --all` | Alle aktiven Pausen beenden |
+| `failproofai config --status` | Was pausiert ist und wann es aufgehoben wird |
+
+## Wann ein Rollback sinnvoll ist
+
+- Eine Policy blockiert eine erwartete Produktionsaktion.
+- Das Match-Volumen ist deutlich höher als das beobachtete Rollout vorhergesagt hatte.
+- Eine Policy hängt von Feldern ab, die eine Integration nicht bereitstellt.
+- Eine neue Version ändert das Verhalten außerhalb des beabsichtigten Fehlerfalles.
+
+Nach dem Rollback öffne die betroffenen Sessions und identifiziere die Bedingung, die das False Positive ausgelöst hat. Erstelle eine neue Version, teste sowohl den unsicheren als auch den legitimen Fall lokal und durchlaufe dann erneut Observe, bevor du wieder enforced:
-- Eine Richtlinie blockiert eine erwartete Produktionsoperation.
-- Das Match-Volumen ist deutlich höher als beim beobachteten Rollout vorhergesagt.
-- Eine Richtlinie hängt von Feldern ab, die eine Integration nicht bereitstellt.
-- Eine neue Version ändert das Verhalten außerhalb des beabsichtigten Fehlerbereichs.
+```bash
+fp policies test ./policy.mjs --tool Bash --command '' --expect allow
+fp policies publish my-policy ./policy.mjs
+fp fleet deploy ci-runner-01 --add my-policy:observe
+fp guardrails summary --since 24h --machine ci-runner-01
+```
-Öffnen Sie nach dem Rollback die betroffenen Sitzungen und identifizieren Sie die Bedingung, die den False Positive verursacht hat. Erstellen Sie eine neue Version, testen Sie sowohl den unsicheren als auch den legitimen Fall, und wiederholen Sie anschließend die Observe-Phase.
+`:observe` macht daraus ein Shadow-Rollout. Ein nacktes `fp fleet deploy ... --add my-policy` **setzt sofort durch** — ein ausgelassener Effekt wird zum bereits deployten Effekt aufgelöst und dann zu `enforce` — was bei einer Policy, die du gerade zurückgesetzt hast, bedeutet, dass der Vorfall wieder eingesetzt wird. Der Observe-Modus wertet die Policy trotzdem in Echtzeit aus und zeichnet alle Nicht-allow-Urteile auf; nur die Durchsetzung wird zurückgehalten. `fp guardrails summary` misst die neue Version daher am selben Traffic, an dem die alte gescheitert ist. Promote mit `--add my-policy:enforce`, wenn die Zahlen es rechtfertigen.
- Das Pausieren der Durchsetzung kann während eines Vorfalls angemessen sein, vergrößert jedoch die Angriffsfläche für jede aktive Richtlinie in diesem Scope. Bevorzugen Sie nach Möglichkeit den Rollback der spezifischen Richtlinienversion.
+ Das Pausieren der Durchsetzung kann während eines Vorfalls angemessen sein, erweitert aber die Angriffsfläche für alle aktiven Policies in diesem Scope. Bevorzuge nach Möglichkeit das Zurücksetzen der spezifischen Policy-Version.
\ No newline at end of file
diff --git a/docs/de/reference/cloud-cli.mdx b/docs/de/reference/cloud-cli.mdx
index a8ad37f39..191e6ff86 100644
--- a/docs/de/reference/cloud-cli.mdx
+++ b/docs/de/reference/cloud-cli.mdx
@@ -4,17 +4,21 @@ description: "Vollständige Referenz zur Abfrage und Verwaltung von Failproof AI
icon: "cloud-cog"
---
-Verwende `fp`, um Cloud-Telemetrie einzusehen, cloudseitig verwaltete Durchsetzung (Richtlinien, Fleet-Deployments, Guardrail-Entscheidungen) zu verwalten sowie Audits, Befunde, Issues, Alerts, Schlüssel, Benutzer, Abfragen und Einstellungen zu administrieren. Nutze [`failproofai`](/de/reference/failproof-cli) für lokale Hooks, Richtlinien, Aufzeichnung und Machine-Enrollment.
+Verwende `fp`, um Cloud-Telemetrie einzusehen, cloud-verwaltete Durchsetzung (Richtlinien, Fleet-Deployments, Guardrail-Entscheidungen) zu verwalten sowie Audits, Findings, Issues, Alerts, Keys, Benutzer, Abfragen und Einstellungen zu administrieren. Nutze [`failproofai`](/de/reference/failproof-cli) für lokale Hooks, Richtlinien, Capture und die Maschinenregistrierung.
-Installiere das veröffentlichte Cloud CLI als isoliertes Tool:
+Installiere die veröffentlichte Cloud CLI als isoliertes Tool. Python 3.10 oder neuer ist erforderlich.
```bash
uv tool install fp-cloud-cli
fp version
```
+Das Paket heißt `fp-cloud-cli`, der installierte Befehl lautet `fp` – sie unterscheiden sich, weil `fp` auf PyPI bereits vergeben war.
+
## Anmelden
+`fp login` sendet dir einen sechsstelligen Code per E-Mail und speichert die Sitzung. Bei einem Dashboard mit selbstsigniertem Zertifikat füge `--insecure` beim Login hinzu.
+
```bash
fp login
fp whoami
@@ -26,13 +30,13 @@ fp whoami
fp [GLOBAL_OPTIONS] COMMAND [SUBCOMMAND] [ARGUMENTS] [OPTIONS]
```
-Globale Optionen müssen vor dem Befehl angegeben werden:
+Globale Optionen müssen vor dem Befehl stehen:
```bash
fp --json sessions --since 24h
```
-Führe `fp COMMAND --help` oder `fp COMMAND SUBCOMMAND --help` aus, um die Terminalhilfe anzuzeigen.
+Führe `fp COMMAND --help` oder `fp COMMAND SUBCOMMAND --help` aus, um Terminal-Hilfe zu erhalten.
## CLI-Befehle
@@ -40,11 +44,11 @@ Führe `fp COMMAND --help` oder `fp COMMAND SUBCOMMAND --help` aus, um die Termi
| Befehl | Zweck | Optionen |
| --- | --- | --- |
-| `fp login` | Anmelden mit einem per E-Mail zugesandten Einmalcode und Auswahl einer Organisation. | `--email`, `-e`; `--org`; `--force` |
+| `fp login` | Anmeldung mit einem per E-Mail zugesandten Einmalcode und Auswahl einer Organisation. | `--email`, `-e`; `--org`; `--force` |
| `fp logout` | Gespeicherte Benutzersitzung widerrufen und entfernen. | — |
| `fp whoami` | Aktuelle Identität, Authentifizierungsmodus, Organisation und Berechtigungen anzeigen. | — |
| `fp version` | Installierte CLI-Version anzeigen. | — |
-| `fp help` | Hilfe zu Befehlen auf oberster Ebene anzeigen. | — |
+| `fp help` | Oberste Befehlshilfe anzeigen. | — |
```bash
fp login --email you@example.com --org reliability-team
@@ -57,24 +61,24 @@ fp whoami
fp events [OPTIONS]
```
-Listet einzelne Agent-Ereignisse auf. Der standardmäßige einfache Feed schließt Raw-Payloads aus; verwende `--full` nur für eine begrenzte Untersuchung.
+Listet einzelne Agent-Ereignisse auf. Der standardmäßige Light-Feed schließt rohe Payloads aus; verwende `--full` nur für eine begrenzte Untersuchung.
| Option | Beschreibung |
| --- | --- |
| `--limit`, `-n ` | Maximale Gesamtzahl der Zeilen. Standard: `50`. |
| `--since ` | `all`, `15m`, `1h`, `6h`, `24h` oder `7d`. |
-| `--from ` / `--to ` | ISO 8601 UTC-Bereich; überschreibt `--since`. |
-| `--env ` | Umgebungsfilter; wiederholbar oder kommagetrennte Werte. |
-| `--event-type ` | Ereignistypfilter; wiederholbar oder kommagetrennte Werte. |
-| `--agent-id ` | Agent-Filter; wiederholbar oder kommagetrennte Werte. |
-| `--session-id ` | Sitzungsfilter; wiederholbar oder kommagetrennte Werte. |
-| `--search ` | Volltextsuche im Payload; wiederholbar, ein beliebiger Begriff reicht. |
-| `--order asc\|desc` | Zeitreihenfolge. Standard: neueste zuerst. |
-| `--all` | Automatische Paginierung bis zu `--limit`. |
-| `--cursor ` | Fortsetzen ab einem undurchsichtigen Cursor. |
-| `--page-size ` | Zeilen pro Anfrage bei `--all`; maximal `200`. |
-| `--full` | Raw-Payloads über den umfangreicheren Ereignis-Endpunkt einschließen. |
-| `--fields ` | Nur ausgewählte Felder zurückgeben; durch Angabe von `payload` wird der Full-Modus aktiviert. |
+| `--from ` / `--to ` | ISO-8601-UTC-Bereich; überschreibt `--since`. |
+| `--env ` | Umgebungsfilter; Werte wiederholen oder kommagetrennt angeben. |
+| `--event-type ` | Ereignistyp-Filter; Werte wiederholen oder kommagetrennt angeben. |
+| `--agent-id ` | Agent-Filter; Werte wiederholen oder kommagetrennt angeben. |
+| `--session-id ` | Sitzungsfilter; Werte wiederholen oder kommagetrennt angeben. |
+| `--search ` | Payload-Textsuche; wiederholbar, wobei jeder Begriff passt. |
+| `--order asc\|desc` | Zeitliche Reihenfolge. Standard: neueste zuerst. |
+| `--all` | Automatisch paginieren bis `--limit`. |
+| `--cursor ` | Fortsetzung ab einem undurchsichtigen Cursor. |
+| `--page-size ` | Zeilen pro Anfrage mit `--all`; Maximum `200`. |
+| `--full` | Rohe Payloads über den schwereren Ereignis-Endpunkt einschließen. |
+| `--fields ` | Nur ausgewählte Felder zurückgeben; Angabe von `payload` aktiviert den Full-Modus. |
```bash
fp events --session-id --order asc --all --limit 10000
@@ -82,7 +86,7 @@ fp --json events --full --session-id --all --limit 10000
```
- `--all` paginiert **bis zu `--limit`**, was standardmäßig **50** ist — daher stoppt `--all` allein bei 50 Zeilen. Wenn es vorzeitig stoppt, enthält die Antwort einen `next_cursor` zum Fortsetzen; `"next_cursor": null` bedeutet, dass der Feed tatsächlich erschöpft ist.
+ `--all` paginiert **bis zu `--limit`**, das standardmäßig **50** beträgt — `--all` allein stoppt also bei 50 Zeilen. Wenn es vorzeitig stoppt, enthält die Antwort einen `next_cursor` zum Fortsetzen; `"next_cursor": null` bedeutet, dass der Feed wirklich erschöpft ist.
### Sitzungen
@@ -95,17 +99,17 @@ fp sessions [OPTIONS]
| --- | --- |
| `--limit`, `-n ` | Maximale Gesamtzahl der Zeilen. Standard: `50`. |
| `--since ` | `all`, `15m`, `1h`, `6h`, `24h` oder `7d`. |
-| `--from ` / `--to ` | ISO 8601 UTC-Bereich; überschreibt `--since`. |
-| `--env ` | Umgebungsfilter; wiederholbar oder kommagetrennte Werte. |
-| `--status ` | `done`, `error` oder `timeout`; wiederholbar oder kommagetrennte Werte. |
-| `--agent-id ` | Sitzungen einschließen, an denen ein ausgewählter Agent beteiligt ist. |
-| `--session-id ` | Sitzungsfilter; wiederholbar oder kommagetrennte Werte. |
-| `--all` | Automatische Paginierung bis zu `--limit`. |
-| `--cursor ` | Fortsetzen ab einem undurchsichtigen Cursor. |
-| `--page-size ` | Zeilen pro Anfrage bei `--all`; maximal `200`. |
+| `--from ` / `--to ` | ISO-8601-UTC-Bereich; überschreibt `--since`. |
+| `--env ` | Umgebungsfilter; Werte wiederholen oder kommagetrennt angeben. |
+| `--status ` | `done`, `error` oder `timeout`; Werte wiederholen oder kommagetrennt angeben. |
+| `--agent-id ` | Sitzungen mit einem der ausgewählten Agenten abgleichen. |
+| `--session-id ` | Sitzungsfilter; Werte wiederholen oder kommagetrennt angeben. |
+| `--all` | Automatisch paginieren bis `--limit`. |
+| `--cursor ` | Fortsetzung ab einem undurchsichtigen Cursor. |
+| `--page-size ` | Zeilen pro Anfrage mit `--all`; Maximum `200`. |
| `--fields ` | Nur ausgewählte Felder zurückgeben. |
| `--full-ids` | Sitzungs-IDs in der Terminalausgabe nicht kürzen. |
-| `--agents` | Die Agent-Liste für Multi-Agent-Sitzungen aufklappen. |
+| `--agents` | Agentenliste für Multi-Agenten-Sitzungen aufklappen. |
### Auswertungen
@@ -115,10 +119,10 @@ fp evals [OPTIONS]
| Option | Beschreibung |
| --- | --- |
-| `--aggregate` | Gesamtwerte und Statistiken pro Score anstelle einzelner Auswertungen anzeigen. |
+| `--aggregate` | Gesamtwerte und Statistiken pro Score statt einzelner Auswertungen anzeigen. |
| `--limit`, `-n ` | Maximale Listenzeilen. Standard: `50`. |
| `--since`, `--from`, `--to` | Zeitbereich auswählen. |
-| `--env`, `--status`, `--agent-id`, `--session-id` | Auf einen exakten Wert pro Filter einschränken. |
+| `--env`, `--status`, `--agent-id`, `--session-id` | Auf einen genauen Wert pro Filter einschränken. |
| `--score KEY:MIN..MAX` | Score-Bereich; wiederholbar, alle Bereiche müssen übereinstimmen. |
| `--all`, `--cursor`, `--page-size` | Listenpaginierung steuern. |
| `--fields ` | Nur ausgewählte Felder zurückgeben. |
@@ -133,12 +137,12 @@ fp errors [OPTIONS]
| Option | Beschreibung |
| --- | --- |
-| `--aggregate` | Übereinstimmende Fehler zusammenfassen anstatt Zeilen aufzulisten. |
+| `--aggregate` | Übereinstimmende Fehler zusammenfassen statt Zeilen aufzulisten. |
| `--limit`, `-n ` | Maximale Listenzeilen. Standard: `50`. |
| `--since`, `--from`, `--to` | Zeitbereich auswählen. |
-| `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id` | Fehlerpopulation einschränken. |
+| `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id` | Fehlermenge einschränken. |
| `--search ` | Payload-Text durchsuchen; wiederholbar. |
-| `--order asc\|desc` | Zeitreihenfolge. |
+| `--order asc\|desc` | Zeitliche Reihenfolge. |
| `--all`, `--cursor`, `--page-size` | Listenpaginierung steuern. |
| `--fields ` | Nur ausgewählte Felder zurückgeben. |
| `--full-ids` | Vollständige Sitzungs-IDs anzeigen. |
@@ -147,11 +151,11 @@ fp errors [OPTIONS]
| Befehl | Zweck |
| --- | --- |
-| `fp usage` | Nutzung für das aktuelle Abrechnungsfenster anzeigen. |
-| `fp list envs` | Erkannte Umgebungen auflisten. |
-| `fp list agents` | Erkannte Agent-IDs auflisten. |
+| `fp usage` | Nutzung für das aktuelle Messfenster anzeigen. |
+| `fp list envs` | Beobachtete Umgebungen auflisten. |
+| `fp list agents` | Beobachtete Agent-IDs auflisten. |
| `fp list event_types` | Ereignistypen auflisten. |
-| `fp list score_filters` | Score-Schlüssel für Auswertungen auflisten. |
+| `fp list score_filters` | Score-Keys für Auswertungen auflisten. |
| `fp list models` | Modellnamen auflisten. |
| `fp list hooks` | Hook-Namen auflisten. |
| `fp list tools` | Tool-Namen auflisten. |
@@ -162,22 +166,22 @@ fp errors [OPTIONS]
| Befehl | Zweck |
| --- | --- |
| `fp orgs list` | Zugängliche Organisationen auflisten. |
-| `fp orgs switch [SLUG]` | Eine aktive Organisation speichern; bei Auslassung wird nachgefragt. |
+| `fp orgs switch [SLUG]` | Aktive Organisation speichern; bei Auslassung wird nachgefragt. |
| `fp orgs current` | Aktive Organisation anzeigen. |
| `fp orgs perms` | Eigene Berechtigungen in der aktiven Organisation anzeigen. |
-### API-Schlüssel
+### API-Keys
| Befehl | Zweck | Optionen |
| --- | --- | --- |
-| `fp keys list` | Organisationsschlüssel auflisten. | `--show-id`; `--fields ` |
-| `fp keys show NAME` | Einen Schlüssel und seine Berechtigungen anzeigen. | — |
-| `fp keys create NAME` | Einen Schlüssel erstellen und sein Geheimnis einmalig anzeigen. | `--permission-set`; `--add`; `--remove` |
-| `fp keys update NAME` | Den Berechtigungssatz ersetzen oder Berechtigungen anpassen. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
-| `fp keys regenerate NAME` | Das Geheimnis rotieren und den Ersatz einmalig anzeigen. | `--yes`, `-y` |
-| `fp keys disable NAME` | Einen Schlüssel dauerhaft widerrufen. | `--yes`, `-y` |
+| `fp keys list` | Organisationskeys auflisten. | `--show-id`; `--fields ` |
+| `fp keys show NAME` | Einen Key und seine Berechtigungen anzeigen. | — |
+| `fp keys create NAME` | Einen Key erstellen und sein Secret einmalig anzeigen. | `--permission-set`; `--add`; `--remove` |
+| `fp keys update NAME` | Das Permission-Set ersetzen oder Berechtigungen anpassen. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
+| `fp keys regenerate NAME` | Das Secret rotieren und den Ersatz einmalig anzeigen. | `--yes`, `-y` |
+| `fp keys disable NAME` | Einen Key dauerhaft widerrufen. | `--yes`, `-y` |
-Berechtigungs-Tokens verwenden das Format `resource:action`, z. B. `events:add`. `--add` kann wiederholt, Tokens kommagetrennt oder mit gepunkteten Aktionen wie `events:read.add` angegeben werden.
+Berechtigungs-Tokens verwenden `resource:action`, z. B. `events:add`. `--add` wiederholen, Tokens kommagetrennt angeben oder gepunktete Aktionen wie `events:read.add` verwenden.
### Abfragen
@@ -188,8 +192,8 @@ Berechtigungs-Tokens verwenden das Format `resource:action`, z. B. `events:add`.
| `fp query create NAME` | Eine Abfrage speichern. | `--sql `; `--description` |
| `fp query update NAME` | Eine Abfrage aktualisieren oder umbenennen. | `--name`; `--sql`; `--description`; `--yes`, `-y` |
| `fp query delete NAME` | Eine gespeicherte Abfrage löschen. | `--yes`, `-y` |
-| `fp query run [NAME]` | Eine gespeicherte Abfrage oder Ad-hoc-SQL ausführen. | `--sql`; `--limit`; `--all`; `--arg`, `--param` |
-| `fp query schema [TABLE]` | Abfragbare Tabellen auflisten oder eine Tabelle inspizieren. | — |
+| `fp query run [NAME]` | Eine gespeicherte Abfrage oder Ad-hoc-SQL ausführen. `--limit` begrenzt **ausschließlich** die Tabellenansicht, standardmäßig auf 50; `--json` gibt immer alle Zeilen zurück. | `--sql`; `--limit`; `--all`; `--arg`, `--param` |
+| `fp query schema [TABLE]` | Abfragbare Tabellen auflisten oder eine Tabelle untersuchen. | — |
### Benutzer
@@ -208,7 +212,7 @@ Berechtigungs-Tokens verwenden das Format `resource:action`, z. B. `events:add`.
| --- | --- | --- |
| `fp settings list` | Organisationseinstellungen und aktuelle Werte auflisten. | — |
| `fp settings schema` | Zulässige Werte und Beschreibungen anzeigen. | — |
-| `fp settings set KEY` | Eine bestehende Einstellung ändern. | genau eines von `--value`, `--json-value`, `--file`; optional `--yes`, `-y` |
+| `fp settings set KEY` | Eine bestehende Einstellung ändern. | genau eine von `--value`, `--json-value`, `--file`; optional `--yes`, `-y` |
### Alerts
@@ -217,7 +221,7 @@ Berechtigungs-Tokens verwenden das Format `resource:action`, z. B. `events:add`.
| `fp alerts list` | Alert-Regeln auflisten. | `--show-id` |
| `fp alerts show NAME` | Einen Alert anzeigen. | — |
| `fp alerts create NAME` | Einen Alert erstellen. | `--file`; `--description`; `--severity`; `--trigger-kind`; `--trigger-spec`; `--channels`; `--eval-interval-secs`; `--min-breaches`; `--eval-window` |
-| `fp alerts update NAME` | Einen Alert aktualisieren oder umbenennen. | Create-Optionen plus `--name`; `--yes`, `-y` |
+| `fp alerts update NAME` | Einen Alert aktualisieren oder umbenennen. | Erstelloptionen plus `--name`; `--yes`, `-y` |
| `fp alerts delete NAME` | Einen Alert löschen. | `--yes`, `-y` |
| `fp alerts test NAME` | Eine Testbenachrichtigung senden. | `--channels`; `--yes`, `-y` |
@@ -229,24 +233,24 @@ Alert-Schweregrade sind `info`, `warning` und `critical`. Trigger-Arten sind `me
| --- | --- | --- |
| `fp audits list` | Audits auflisten. | `--enabled-only`; `--show-id` |
| `fp audits show NAME` | Eine Audit-Definition und ihren Zustand anzeigen. | — |
-| `fp audits create NAME` | Ein Audit erstellen und sofort den ersten Durchlauf in die Warteschlange stellen. | Siehe [Create-Optionen](#audit-create-options). |
-| `fp audits edit NAME` | Audit-Einstellungen ersetzen, ohne nicht angegebene Werte zu verändern. | Definitions-Optionen für Create; `--name`; `--yes`, `-y` |
-| `fp audits delete NAME` | Ein Audit, seine Befunde und den Ausführungsverlauf löschen. | `--yes`, `-y` |
-| `fp audits run NAME` | Einen manuellen Durchlauf in die Warteschlange stellen. | — |
-| `fp audits runs NAME` | Ausführungsverlauf auflisten. | `--limit`, `-n`; `--show-id` |
-| `fp audits context-show NAME` | Das Briefing und den Abrufstatus der Referenz-URLs anzeigen. | — |
-| `fp audits context-set NAME` | Das Briefing oder Referenz-URLs ändern. | `--text`; `--text-file`; `--url`; `--clear-urls` |
+| `fp audits create NAME` | Ein Audit erstellen und sofort den ersten Lauf in die Warteschlange stellen. | Siehe [Erstelloptionen](#audit-create-options). |
+| `fp audits edit NAME` | Audit-Einstellungen ersetzen und nicht angegebene Werte beibehalten. | Definitionsoptionen zum Erstellen; `--name`; `--yes`, `-y` |
+| `fp audits delete NAME` | Ein Audit, seine Findings und den Laufverlauf löschen. | `--yes`, `-y` |
+| `fp audits run NAME` | Einen manuellen Lauf in die Warteschlange stellen. | — |
+| `fp audits runs NAME` | Laufverlauf auflisten. | `--limit`, `-n`; `--show-id` |
+| `fp audits context-show NAME` | Brief und Abrufstatus der Referenz-URLs anzeigen. | — |
+| `fp audits context-set NAME` | Brief oder Referenz-URLs ändern. | `--text`; `--text-file`; `--url`; `--clear-urls` |
| `fp audits context-refresh NAME` | Referenz-URLs erneut abrufen. | — |
-| `fp audits findings` | Befunde auflisten. | `--audit`; `--run-id`; `--status`; `--limit`, `-n`; `--offset`; `--show-id` |
-| `fp audits finding FINDING_ID` | Einen Befund und seine Beweise anzeigen. | — |
-| `fp audits ack FINDING_ID` | Einen Befund bestätigen. | `--reason` |
+| `fp audits findings` | Findings auflisten. `--limit` ist hier standardmäßig 100 statt der sonst üblichen 50; der Server begrenzt auf 500. | `--audit`; `--run-id`; `--status`; `--limit`, `-n`; `--offset`; `--show-id` |
+| `fp audits finding FINDING_ID` | Ein Finding und seine Belege anzeigen. | — |
+| `fp audits ack FINDING_ID` | Ein Finding bestätigen. | `--reason` |
| `fp audits mute FINDING_ID` | Ein wiederkehrendes Muster unterdrücken. | `--reason`; `--yes`, `-y` |
| `fp audits dismiss FINDING_ID` | Ein Muster als nicht handlungsrelevant markieren und unterdrücken. | `--reason`; `--yes`, `-y` |
-| `fp audits resolve FINDING_ID` | Einen Befund als behoben markieren, ohne zukünftige Unterdrückung. | `--yes`, `-y` |
-| `fp audits reopen FINDING_ID` | Einen Befund in die aktive Warteschlange zurückführen und Unterdrückung aufheben. | — |
-| `fp audits assign FINDING_ID` | Den Verantwortlichen für einen Befund festlegen. | Pflichtangabe `--to ` |
+| `fp audits resolve FINDING_ID` | Ein Finding als behoben markieren ohne zukünftige Unterdrückung. | `--yes`, `-y` |
+| `fp audits reopen FINDING_ID` | Ein Finding wieder in die aktive Warteschlange aufnehmen und Unterdrückung aufheben. | — |
+| `fp audits assign FINDING_ID` | Den Eigentümer eines Findings festlegen. | erforderlich `--to ` |
-#### Audit-Create-Optionen
+#### Audit-Erstelloptionen
```bash
fp audits create checkout-reliability \
@@ -261,27 +265,27 @@ fp audits create checkout-reliability \
| Option | Beschreibung |
| --- | --- |
-| `--file ` | Definition auf JSON basieren, oder `-` für stdin verwenden. Explizite Flags überschreiben Dateiwerte. |
+| `--file ` | Definition auf JSON basieren oder `-` für stdin verwenden. Explizite Flags überschreiben Dateiwerte. |
| `--description ` | Die Fehlerfrage oder den Zweck beschreiben. |
-| `--enabled` / `--disabled` | Zeitplanung aktivieren oder deaktivieren. Standard: aktiviert. |
+| `--enabled` / `--disabled` | Planung aktiviert oder deaktiviert starten. Standard: aktiviert. |
| `--schedule-interval-secs ` | `3600`–`604800`. Standard: `86400`. |
-| `--schedule-anchor ` | Feste UTC-Phase im ISO 8601-Format. Standard: nächste 09:00 UTC. |
+| `--schedule-anchor ` | Feste UTC-Phase im ISO-8601-Format. Standard: nächstes 09:00 UTC. |
| `--window-mode since_last\|fixed` | Nach dem letzten vollständig analysierten Fenster fortfahren oder ein rollendes Fenster wiederholt untersuchen. Standard: `since_last`. |
| `--lookback-window-secs ` | `3600`–`7776000`. Standard: `604800`. |
| `--scope ''` | Nach `environments`, `agent_ids` oder anderen unterstützten Scope-Feldern filtern. |
-| `--ignore-error-type ` | Fehlertypen ausschließen; wiederholbar oder kommagetrennt. |
+| `--ignore-error-type ` | Fehlertypen ausschließen; wiederholen oder kommagetrennt angeben. |
| `--llm` / `--no-llm` | Agentische Analyse aktivieren oder deaktivieren. Standard: aktiviert. |
-| `--top-k ` | `1`–`500` Befunde behalten. Standard: `50`. |
-| `--sensitivity low\|medium\|high` | Berichtssensitivität festlegen. Standard: `medium`. |
+| `--top-k ` | `1`–`500` Findings behalten. Standard: `50`. |
+| `--sensitivity low\|medium\|high` | Meldeempfindlichkeit festlegen. Standard: `medium`. |
| `--channels ''` | Array der Benachrichtigungskanäle. |
-| `--text ` | Inlines Briefing, maximal 8.192 Zeichen. |
-| `--text-file ` | Briefing aus einer Datei lesen; schließt sich gegenseitig mit `--text` aus. |
-| `--url ` | Eine öffentliche HTTPS-Referenz hinzufügen; bis zu fünfmal wiederholbar. |
+| `--text ` | Inline-Brief, maximal 8.192 Zeichen. |
+| `--text-file ` | Brief aus einer Datei lesen; schließt `--text` aus. |
+| `--url ` | Eine öffentliche HTTPS-Referenz hinzufügen; bis zu fünfmal wiederholen. |
-Füge Kontext während der Erstellung hinzu, wenn der erste Durchlauf ihn benötigt. Die Erstellung schreibt die Definition und den Kontext gemeinsam fest, bevor der eingereihte Durchlauf beginnt.
+Kontext bei der Erstellung angeben, wenn der erste Lauf ihn benötigt. Die Erstellung übermittelt Definition und Kontext gemeinsam, bevor der eingereihte Lauf beginnt.
- `fp audits run` ist asynchron. Warte mit `fp audits runs NAME`, bis der letzte Durchlauf erfolgreich abgeschlossen ist oder fehlschlägt, bevor du die Befunde liest.
+ `fp audits run` ist asynchron. Warte mit `fp audits runs NAME`, bis der letzte Lauf erfolgreich abgeschlossen oder fehlgeschlagen ist, bevor du seine Findings liest.
### Issues
@@ -290,19 +294,19 @@ Füge Kontext während der Erstellung hinzu, wenn der erste Durchlauf ihn benöt
| --- | --- | --- |
| `fp issues list` | Issues auflisten. | `--state`; `--alert-id`; `--limit`, `-n`; `--show-id` |
| `fp issues count` | Offene oder ausgewählte Issue-Zustände zählen. | `--state` |
-| `fp issues show INCIDENT_ID` | Issue-Details, Kommentare, Abonnenten und Aktivitäten anzeigen. | — |
-| `fp issues open` | Ein manuelles oder alert-verknüpftes Issue öffnen. | Pflichtangabe `--summary`; optional `--title`, `--alert-id`, `--severity` |
+| `fp issues show INCIDENT_ID` | Issue-Details, Kommentare, Abonnenten und Aktivität anzeigen. | — |
+| `fp issues open` | Ein manuelles oder alert-verknüpftes Issue öffnen. | erforderlich `--summary`; optional `--title`, `--alert-id`, `--severity` |
| `fp issues ack INCIDENT_ID` | Ein Issue bestätigen. | — |
-| `fp issues assign INCIDENT_ID` | Zugewiesene Personen ersetzen; Option weglassen, um sie zu entfernen. | wiederholbares `--assignee` |
+| `fp issues assign INCIDENT_ID` | Zugewiesene Personen ersetzen; Option weglassen, um sie zu entfernen. | wiederholbar `--assignee` |
| `fp issues resolve INCIDENT_ID` | Ein Issue auflösen. | `--yes`, `-y` |
| `fp issues comment-list INCIDENT_ID` | Kommentare auflisten. | — |
-| `fp issues comment-add INCIDENT_ID` | Einen Kommentar hinzufügen. | genau eines von `--body`, `--file` |
+| `fp issues comment-add INCIDENT_ID` | Einen Kommentar hinzufügen. | genau eine von `--body`, `--file` |
| `fp issues comment-delete INCIDENT_ID COMMENT_ID` | Einen Kommentar löschen. | `--yes`, `-y` |
| `fp issues subscribers INCIDENT_ID` | Abonnenten auflisten. | — |
-| `fp issues subscribe INCIDENT_ID` | Dich selbst oder einen anderen Operator abonnieren. | `--email` |
+| `fp issues subscribe INCIDENT_ID` | Sich selbst oder einen anderen Operator abonnieren. | `--email` |
| `fp issues unsubscribe INCIDENT_ID` | Ein Abonnement entfernen. | `--email` |
-Gültige Issue-Zustände sind `firing`, `acknowledged` und `resolved`. Schweregrade für eigenständige Issues sind `info`, `warning` und `critical`.
+Gültige Issue-Zustände sind `firing`, `acknowledged` und `resolved`. Eigenständige Issue-Schweregrade sind `info`, `warning` und `critical`.
### Cloud-Assistent
@@ -311,48 +315,118 @@ Gültige Issue-Zustände sind `firing`, `acknowledged` und `resolved`. Schweregr
| `fp agent health` | Verfügbarkeit und Konfiguration des Assistenten prüfen. | — |
| `fp agent models` | Verfügbare Assistentenmodelle auflisten. | — |
| `fp agent chats` | Gespeicherte Chats auflisten. | — |
-| `fp agent ask [MESSAGE]` | Einen Chat starten oder fortsetzen; liest stdin, wenn die Nachricht weggelassen wird. | `--chat`; `--model`; `--page-context` |
-| `fp agent show CHAT_ID` | Ein gespeichertes Gespräch anzeigen. | — |
-| `fp agent rename CHAT_ID` | Ein Gespräch umbenennen. | Pflichtangabe `--title` |
-| `fp agent delete CHAT_ID` | Ein Gespräch löschen. | `--yes`, `-y` |
+| `fp agent ask [MESSAGE]` | Einen Chat starten oder fortsetzen; liest stdin, wenn die Nachricht fehlt. | `--chat`; `--model`; `--page-context` |
+| `fp agent show CHAT_ID` | Eine gespeicherte Unterhaltung anzeigen. | — |
+| `fp agent rename CHAT_ID` | Eine Unterhaltung umbenennen. | erforderlich `--title` |
+| `fp agent delete CHAT_ID` | Eine Unterhaltung löschen. | `--yes`, `-y` |
-### Policies
+### Richtlinien
-Cloudseitig verwaltete Richtlinienversionen. **Nur für Sitzungen** — jeder Befehl hier beendet sich mit `2` unter einem API-Schlüssel, noch vor jeder Anfrage, da es sich um reine Root-Schreibrouten handelt, die absichtlich nicht in `/v1` vorhanden sind.
+Cloud-verwaltete Richtlinienversionen. **Nur mit Sitzung** — jeder Befehl hier außer `fp policies test` beendet sich mit `2` unter einem API-Key, noch vor einer Anfrage, da es sich um Schreibrouten handelt, die ausschließlich Root-Zugriff erfordern und absichtlich nicht unter `/v1` verfügbar sind. `fp policies test` ist die bewusste Ausnahme: Es läuft vollständig lokal gegen `node` und kommuniziert mit keinem Server, benötigt daher weder eine Authentifizierung noch verweigert es den Betrieb unter einem API-Key — es funktioniert auch ohne Anmeldung und mit einem API-Key.
| Befehl | Zweck | Optionen |
| --- | --- | --- |
-| `fp policies list` | Richtlinienversionen auflisten. | `--json` |
+| `fp policies list` | Richtlinienversionen auflisten, neueste jeder Richtlinie zuerst. | — |
| `fp policies show POLICY_ID` | Eine Richtlinie mit ihrem Quellcode anzeigen. | — |
-| `fp policies publish NAME PATH` | Eine Version aus einer lokalen `.mjs`-Datei erstellen. | `--description`; `--no-verify` |
-| `fp policies enable POLICY_ID` | Sie jedem Deployment hinzufügen, aus dem sie entfernt wurde, und dabei in jedem eine neue Generation prägen. | `--yes`, `-y` |
-| `fp policies disable POLICY_ID` | Sie aus jedem Deployment entfernen, das sie enthält, und dabei in jedem eine neue Generation prägen. | `--yes`, `-y` |
+| `fp policies publish POLICY_ID [SOURCE]` | Eine neue Version erstellen; bestehende werden nie bearbeitet. `SOURCE` ist ein Pfad, `@path` oder `-` für stdin — weglassen zum Einfügen. | `--description`; `--no-verify` |
+| `fp policies enable POLICY_ID` | Zu jedem Deployment zurückhinzufügen, aus dem sie entfernt wurde, wobei für jedes eine neue Generation erstellt wird. | `--yes`, `-y` |
+| `fp policies disable POLICY_ID` | Aus jedem Deployment entfernen, das sie enthält, wobei für jedes eine neue Generation erstellt wird. | `--yes`, `-y` |
| `fp policies delete POLICY_ID` | Eine Richtlinienversion löschen. | `--yes`, `-y` |
-| `fp policies test PATH` | Eine Richtlinie lokal gegen einen synthetischen Kontext testen. Wendet den `match`-Filter jeder Richtlinie an; eine Richtlinie, die das gegebene Ereignis/Tool nicht abdeckt, wird als `skipped` gemeldet statt ausgeführt. | `--event`; `--tool`; `--command`; `--file-path`; `--expect` |
-| `fp policies compose PROMPT` | Eine Richtlinie mit dem Assistenten entwerfen. Benötigt `policies:write`. | — |
+| `fp policies test [SOURCE]` | Eine Richtlinie lokal gegen einen synthetischen Kontext testen. Wendet den `match`-Filter jeder Richtlinie an, sodass eine Richtlinie, die das gegebene Ereignis/Tool nicht abdeckt, als `skipped` gemeldet wird statt ausgeführt zu werden. Benötigt `node` im PATH. | `--event`; `--tool`; `--command`; `--file`; `--expect` |
+| `fp policies compose PROMPT` | Eine Richtlinie mit dem Assistenten entwerfen. Gibt den Entwurf aus und tut standardmäßig nichts weiter. Benötigt `policies:write`. | `--out `; `--publish ` |
### Fleet
-Welche Machines welche Richtlinien ausführen. **Nur für Sitzungen**, aus demselben Grund wie oben.
+Welche Maschinen welche Richtlinien ausführen. **Nur mit Sitzung** — jeder Befehl hier, ohne Ausnahme, beendet sich mit `2` unter einem API-Key.
| Befehl | Zweck | Optionen |
| --- | --- | --- |
-| `fp fleet list` | Eingeschriebene Machines und ihre Deployment-Generation auflisten. | — |
-| `fp fleet show MACHINE_ID` | Den aktuell von einer Machine ausgeführten Richtliniensatz anzeigen. | — |
-| `fp fleet deploy MACHINE_ID` | **Ersetzt den gesamten Richtliniensatz der Machine.** Gibt den Plan aus und fragt nur auf einem interaktiven Terminal ohne `--json` nach. | `--add`; `--remove`; `--set`; `--create`; `--yes`, `-y` |
-| `fp fleet diff MACHINE_ID` | Eine Machine mit einem anderen Deployment vergleichen. | — |
-| `fp fleet history MACHINE_ID` | Vergangene Deployments für eine Machine anzeigen. | — |
-| `fp fleet rollback MACHINE_ID` | Ein vorheriges Deployment wiederherstellen. | `--yes`, `-y` |
-| `fp fleet rename MACHINE_ID` | Einer Machine einen lesbaren Namen geben. | Pflichtangabe `--name` |
+| `fp fleet list` | Registrierte Maschinen und ihre Deployment-Generation auflisten. | — |
+| `fp fleet show MACHINE_ID` | Den aktuell laufenden Richtliniensatz einer Maschine anzeigen. | — |
+| `fp fleet deploy MACHINE_ID` | Ändern, was eine Maschine durchsetzt. Zeigt zuerst den vollständigen resultierenden Satz und fragt nur auf einem interaktiven Terminal ohne `--json`. | `--add`; `--remove`; `--set`; `--create`; `--yes`, `-y` |
+| `fp fleet diff [MACHINE_ID]` | Absicht vs. Auslieferung — was einer Maschine mitgeteilt wird gegenüber dem, was sie zuletzt abgerufen hat. ID weglassen für die gesamte Fleet. | — |
+| `fp fleet history MACHINE_ID` | Alle Generationen einer Maschine, neueste zuerst. | — |
+| `fp fleet rollback MACHINE_ID GENERATION` | Den Richtliniensatz einer vergangenen Generation wiederherstellen. Die Generationsnummer stammt aus `fp fleet history MACHINE_ID`. | `--yes`, `-y` |
+| `fp fleet rename MACHINE_ID LABEL` | Einer Maschine ein lesbares Label geben. Die ID selbst ändert sich nie. | — |
+
+```bash
+fp fleet history ci-runner-01
+fp fleet rollback ci-runner-01 3
+fp fleet rename ci-runner-01 "CI runner (eu-west)"
+```
+
+#### Richtlinienreferenzen
+
+`--add` und `--set` erwarten eine Richtlinienreferenz, keine bloße ID:
+
+| Form | Bedeutung |
+| --- | --- |
+| `id` | Aktuelle Version, aktuelle Wirkung |
+| `id@3` | Version 3, aktuelle Wirkung |
+| `id:observe` | Aktuelle Version, aufgezeichnet aber nicht durchgesetzt |
+| `id@3:observe` | Version 3, aufgezeichnet aber nicht durchgesetzt |
+
+Die Wirkung ist `enforce` oder `observe`. Auflösung: eine explizite Wirkung hat Vorrang; andernfalls die bereits für diese Richtlinie deployete Wirkung; andernfalls `enforce`.
+
+
+ Ein bloßes `--add` **setzt sofort durch**. `fp fleet deploy ci-runner-01 --add checkout-guard` beginnt auf dieser Maschine zu blockieren, sobald sie das nächste Mal abruft. `:observe` macht daraus einen Shadow-Rollout:
+
+ ```bash
+ fp fleet deploy ci-runner-01 --add checkout-guard:observe # records only
+ fp fleet deploy ci-runner-01 --add checkout-guard # enforces now
+ ```
+
+ Observe ist nicht deaktiviert. Die Richtlinie wird real ausgewertet, mit demselben 10-Sekunden-Timeout und derselben Fehlerbehandlung wie eine durchsetzende Richtlinie, und jedes Nicht-allow-Urteil wird aufgezeichnet — nur die Durchsetzung wird zurückgehalten. Das ist es, was die Messung aussagekräftig macht.
+
+
+#### Deltas, Ersatz und Race Conditions
+
+`--add` und `--remove` lesen den aktuellen Satz der Maschine und wenden ein Delta an, sodass nichts, was du nicht benannt hast, verändert wird. Ein bloßes `--add` für eine Richtlinie, die die Maschine bereits ausführt, behält ihre angeheftete Version bei statt sie stillschweigend zu aktualisieren; übergib `id@version`, um sie zu verschieben.
+
+`--set` ersetzt alles und ist der einzige Weg, Richtlinien zu entfernen, die du nicht benennst. Es kann nicht mit `--add` oder `--remove` kombiniert werden. Keines der drei anzugeben ist ein Verwendungsfehler, kein No-Op.
+
+```bash
+fp fleet deploy ci-runner-01 --add prod-guard@1:observe --remove old-rule
+fp fleet deploy ci-runner-01 --set no-force-push --set no-secret-echo
+```
+
+Der Schreibvorgang selbst ist ein vollständiger Ersatz auf jedem Pfad, da der Endpunkt den gesamten Richtliniensatz entgegennimmt. Es gibt keine serverseitige Sperre, daher zeichnet die CLI die gelesene Generation auf und verweigert, wenn das Ergebnis nicht genau eine höher ist — das bedeutet, jemand anderes hat in der Zwischenzeit deployет, und ein Ersatz führt kein Merge durch. Mit `fp fleet show` erneut lesen, dann erneut deployen.
+
+`--create` deployет auf eine Maschinen-ID, die sich noch nicht gemeldet hat, zur Vorab-Bereitstellung. Ohne dies wird eine dem Server unbekannte ID abgelehnt, da ein Tippfehler sonst eine Maschine erstellen würde, die niemand besitzt und von der niemand Richtlinien abruft.
### Guardrails
-Was die Durchsetzung tatsächlich getan hat. **Nur für Sitzungen**, aus demselben Grund wie oben.
+Was die Durchsetzung tatsächlich getan hat. **Nur mit Sitzung**, aus demselben Grund wie oben.
| Befehl | Zweck | Optionen |
| --- | --- | --- |
-| `fp guardrails summary` | Abdeckung, blockierte/ausgewertete Gesamtwerte, eine Deny-Sparkline und die Tabelle pro Richtlinie. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
-| `fp guardrails timeline` | Entscheidungen im Zeitfenster zusammengefasst, summiert über alle Richtlinienquellen. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
+| `fp guardrails summary` | Abdeckung, blockierte/ausgewertete Gesamtzahlen, eine Deny-Sparkline und die Tabelle pro Richtlinie. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
+| `fp guardrails timeline` | Über das Fenster verteilte Entscheidungen, summiert über alle Richtlinienquellen. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
+
+Eine `(no policy)`-Zeile in der Zusammenfassung ist normal und keine Lücke: Die meisten Auswertungen sind Allows, gegen die niemand Einwände hatte, und die Zeile hält den Nenner auf dem Bildschirm.
+
+### Eine Richtlinie einführen ohne etwas zu beschädigen
+
+Die drei obigen Gruppen bilden eine Sequenz. Lokal entscheiden, veröffentlichen, Shadow-Betrieb, messen, dann durchsetzen.
+
+```bash
+fp policies test ./checkout.policy.mjs --tool Bash --command "git push --force" --expect deny
+fp policies publish checkout-guard ./checkout.policy.mjs --description "Block force-push"
+fp fleet deploy ci-runner-01 --add checkout-guard:observe
+fp guardrails summary --since 24h --machine ci-runner-01
+fp fleet deploy ci-runner-01 --add checkout-guard:enforce
+```
+
+| Schritt | Warum er da ist |
+| --- | --- |
+| `fp policies test` | Kein Server und keine Authentifizierung. Führt die echte Datei gegen einen selbst beschriebenen Kontext aus und gibt allow, deny oder instruct pro registrierter Richtlinie aus. `--expect` macht daraus eine CI-Assertion. |
+| `fp policies publish` | Erstellt eine neue unveränderliche Version; bestehende werden nie bearbeitet. |
+| `fp fleet deploy --add :observe` | Der Shadow-Rollout. **`:observe` ist hier nicht optional** — ein bloßes `--add` setzt durch, sobald die Maschine abruft. |
+| `fp guardrails summary` | Trennt die unsicheren Treffer von der legitimen Arbeit, die die Richtlinie ebenfalls blockiert hätte. |
+| `fp fleet deploy --add :enforce` | Promotion, sobald die aufgezeichneten Urteile das Erwartete bestätigen. |
+| `fp fleet rollback ` | Der Rückweg, wenn die Durchsetzung schiefläuft. |
+
+Das Einzelmaschinen-Äquivalent ohne Cloud ist das Veröffentlichen des Pakets mit `failproofai publish --effect observe` und das Ablesen der aufgezeichneten Urteile im [lokalen Dashboard](/de/reference/local-dashboard).
## Globale Flags
@@ -361,20 +435,20 @@ Was die Durchsetzung tatsächlich getan hat. **Nur für Sitzungen**, aus demselb
| `--json` | Maschinenlesbares JSON ausgeben. |
| `--base-url ` | Ein selbst gehostetes oder Entwicklungs-Dashboard verwenden. |
| `--org ` | Eine Organisation für diesen Aufruf auswählen. |
-| `--token ` | Das gespeicherte Benutzersitzungstoken überschreiben. |
-| `--api-key ` | Automatisierung mit einem API-Schlüssel authentifizieren; wird nie gespeichert. |
+| `--token ` | Das gespeicherte Benutzersitzungs-Token überschreiben. |
+| `--api-key ` | Automation mit einem API-Key authentifizieren; wird nie gespeichert. |
| `--timeout ` | HTTP-Timeout; muss positiv sein. Standard: `30`. |
| `--quiet`, `-q` | Statusausgabe auf stderr unterdrücken. |
| `--no-color` | Farbige Ausgabe deaktivieren. |
| `--insecure` / `--secure` | TLS-Zertifikatsprüfung deaktivieren oder wiederherstellen. |
-| `--version` | Die Version ausgeben und beenden. |
+| `--version` | Die installierte Version ausgeben und beenden. |
| `--help`, `-h` | Hilfe anzeigen. |
-`--api-key` ist für die Automatisierung vorgesehen. Anmeldung, Organisationswechsel und Assistentenbefehle erfordern eine Benutzersitzung.
+`--api-key` ist für Automation vorgesehen. Login, Organisationswechsel und Assistentenbefehle erfordern eine Benutzersitzung.
## Umgebungsvariablen
-| Variable | Entsprechung oder Zweck |
+| Variable | Äquivalent oder Zweck |
| --- | --- |
| `FP_DASHBOARD_URL` | `--base-url` |
| `FP_ORG` | `--org` |
@@ -382,16 +456,18 @@ Was die Durchsetzung tatsächlich getan hat. **Nur für Sitzungen**, aus demselb
| `FP_API_KEY` | `--api-key` |
| `FP_JSON` | `--json` |
| `FP_INSECURE` | `--insecure` |
-| `FP_HOME` | Konfigurationsverzeichnis des CLI verschieben (Standard: `~/.failproofai/fpcli`). |
-| `FP_ANALYTICS_DISABLED` oder `DO_NOT_TRACK` | Anonyme CLI-Analysen deaktivieren. |
+| `FP_HOME` | Das CLI-Konfigurationsverzeichnis verschieben (Standard: `~/.failproofai/fpcli`). |
+| `FP_ANALYTICS_DISABLED` oder `DO_NOT_TRACK` | Anonyme CLI-Analytik deaktivieren. |
| `NO_COLOR` | Farbige Ausgabe deaktivieren. |
-Explizite Flags überschreiben Umgebungsvariablen, die wiederum die gespeicherte Konfiguration überschreiben. Im API-Schlüssel-Modus den Mandanten explizit mit `--org` oder `FP_ORG` auswählen.
+Explizite Flags überschreiben Umgebungsvariablen, die wiederum die gespeicherte Konfiguration überschreiben.
+
+Im API-Key-Modus wird die von einem menschlichen `fp login` gespeicherte Organisation **ignoriert**, nicht nur überschrieben — nur ein explizites `--org` oder `FP_ORG` wird gesendet. Es wird nichts von einem gespeicherten Login geerbt, daher `--org` immer angeben, wenn der Key für mehr als eine Organisation handeln kann. Das Weglassen schlägt nicht laut fehl: Ein instanzbezogener Key ohne `--org` wird serverseitig auf die **Standard**organisation aufgelöst und antwortet mit den Daten dieser Organisation, ohne dass irgendwo ein Fehler auftritt. Führe zuerst `fp whoami` aus, um zu bestätigen, mit welchem Mandanten ein Key tatsächlich kommuniziert.
- Die `AGENTEYE_*`-Schreibweisen dieser Variablen werden von `fp` **nicht gelesen** und wurden es nie — das CLI deklariert `FP_*` (`fp_cli/app.py`), und eine unbekannte Variable ist kein Fehler. Das Setzen von `AGENTEYE_DASHBOARD_URL` richtet das CLI nicht neu aus; es wird ignoriert und der Befehl läuft stillschweigend gegen das gespeicherte Dashboard.
+ Die `AGENTEYE_*`-Schreibweisen dieser Variablen werden von `fp` **nicht gelesen** und wurden es nie — die CLI deklariert `FP_*` (`fp_cli/app.py`), und eine unbekannte Variable ist kein Fehler. Das Setzen von `AGENTEYE_DASHBOARD_URL` ändert das Ziel der CLI nicht; es wird ignoriert und der Befehl läuft stillschweigend gegen das gespeicherte Dashboard.
- `AGENTEYE_HOME` und `AGENTEYE_ENVIRONMENT` existieren weiterhin, gehören aber zum **Collector und dem Telemetrie-SDK**, nicht zu diesem CLI.
+ `AGENTEYE_HOME` und `AGENTEYE_ENVIRONMENT` existieren noch, gehören aber zum **Collector und dem Telemetrie-SDK**, nicht zu dieser CLI.
diff --git a/docs/de/reference/custom-agents.mdx b/docs/de/reference/custom-agents.mdx
index 88bb99902..68d6999ef 100644
--- a/docs/de/reference/custom-agents.mdx
+++ b/docs/de/reference/custom-agents.mdx
@@ -1,13 +1,13 @@
---
-title: "Eigene Agenten"
+title: "Benutzerdefinierte Agents"
description: "Konfiguration, der Event-Katalog, Korrelationsregeln und Zustellung für failproofai-sdk."
icon: "python"
---
-Was jede Einstellung, Methode und jedes Feld bewirkt. Wenn Sie zum ersten Mal instrumentieren, beginnen Sie mit der Anleitung — diese Seite dient zum Nachschlagen.
+Was jede Einstellung, Methode und jedes Feld bewirkt. Wenn Sie zum ersten Mal instrumentieren, beginnen Sie mit dem Leitfaden – diese Seite dient zum Nachschlagen.
-
+
Installation, Instrumentierung, die Event-Methoden, ein ausgearbeitetes Beispiel und häufige Probleme.
@@ -15,7 +15,7 @@ Was jede Einstellung, Methode und jedes Feld bewirkt. Wenn Sie zum ersten Mal in
-Python 3.10 oder neuer. Keine Laufzeit-Abhängigkeiten.
+Python 3.10 oder neuer, und **null Laufzeit-Abhängigkeiten** – eine bewusste Entscheidung, kein Zufall. Das SDK wird in fremde Agent-Prozesse installiert, sodass alles, was es deklariert, von diesen geerbt würde. Ein Test durchsucht die Kernmodule und startet einen frischen Interpreter, um zu beweisen, dass kein Framework in `sys.modules` landet.
## Installation
@@ -29,20 +29,21 @@ Das Paket wird als `failproofai-sdk` installiert und in Python als `failproofai_
- 1. Gehen Sie zu **Admin → Keys** und erstellen Sie einen Schlüssel mit `events:add`.
- 2. [Verbinden Sie den Failproof-Daemon mit Cloud](/de/start/setup#connect-a-machine-to-cloud) auf dem Agenten-Rechner.
- 3. Führen Sie eine instrumentierte Sitzung aus und suchen Sie deren genaue ID unter **Observe → Events**.
- 4. Gehen Sie zu **Observe → Sessions**, wählen Sie dieselbe Umgebung und öffnen Sie den rekonstruierten Trace.
+ 1. Gehen Sie zu **Verwaltung → Schlüssel** und erstellen Sie einen Schlüssel mit `events:add`.
+ 2. [Failproof-Daemon mit Cloud verbinden](/de/start/setup#connect-failproof-ai-cloud) auf dem Agent-Rechner.
+ 3. Führen Sie eine instrumentierte Sitzung aus und suchen Sie deren genaue ID unter **Beobachten → Events**.
+ 4. Gehen Sie zu **Beobachten → Sitzungen**, wählen Sie dieselbe Umgebung und öffnen Sie den rekonstruierten Trace.
- 
+ 
```bash
- failproofai config \
- --connect https://app.befailproof.ai \
- --token
+ export FAILPROOFAI_CLOUD_TOKEN=
+ failproofai config
failproofai config --status
```
+
+ Bevorzugen Sie die Umgebungsvariable gegenüber `--token`: Ein Kommandozeilenargument ist über `ps` für jeden Benutzer auf dem Rechner lesbar und landet in der Shell-History sowie in CI-Logs.
@@ -60,30 +61,65 @@ failproofai_sdk.configure(
| Argument | Bedeutung |
| --- | --- |
-| `environment` | Die Bezeichnung auf jedem Event — `production`, `staging`, `prod-eu`. Standard: `dev`. |
-| `flush_interval` | Wie oft der Hintergrund-Thread auf die Festplatte schreibt, in Sekunden. Standard: `0.5`. |
-| `base_dir` | Schreibziel. Standard ist der Spool des Daemons, was in der Regel das Richtige ist. |
+| `environment` | Die Bezeichnung für jedes Event – `production`, `staging`, `prod-eu`. Standard ist `dev`. |
+| `flush_interval` | Wie oft der Hintergrund-Thread auf die Festplatte schreibt, in Sekunden. Standard ist `0.5`. |
+| `base_dir` | Schreibziel. Standard ist `$FAILPROOFAI_HOME/custom-agents`, sonst `~/.failproofai/custom-agents` – der Spool, den der Daemon überwacht, was in aller Regel das Richtige ist. |
+
+`configure()` ist **nur mit Schlüsselwortargumenten** aufrufbar – `configure(None, 0.5, "prod")` ergibt einen `TypeError`. Außerdem werden alle Argumente vor der Anwendung validiert; wenn `flush_interval` keine endliche Zahl größer null ist, wird ein `ValueError` ausgelöst, sodass ein abgelehnter Aufruf das SDK genau so zurücklässt, wie es war.
Alternativ per Umgebungsvariable setzen:
| Variable | Bedeutung |
| --- | --- |
-| `AGENTEYE_ENVIRONMENT` | Setzt `environment` ohne Code-Änderung — für den Fall, dass die Bezeichnung zur Deployment-Umgebung und nicht zur App gehört. Ein `configure()`-Argument hat Vorrang. |
+| `AGENTEYE_ENVIRONMENT` | Setzt `environment` ohne Codeänderung, wenn die Bezeichnung zur Deployment-Umgebung statt zur App gehört. Ein `configure()`-Argument hat Vorrang. |
| `FAILPROOFAI_HOME` | Verschiebt das Failproof AI-Stammverzeichnis, das den Spool enthält. |
-| `FAILPROOFAI_SDK_STRICT` | `1` lässt Instrumentierungsfehler als Ausnahme auslösen statt sie nur zu protokollieren. |
-| `FAILPROOFAI_SDK_STRICT_INTEGRATIONS` | `1` lässt ein Framework-Kompatibilitätsproblem als Ausnahme auslösen statt nur eine Warnung auszugeben. |
+| `FAILPROOFAI_SDK_STRICT` | `1` lässt Instrumentierungsfehler als Exception auslösen statt sie zu protokollieren. |
+| `FAILPROOFAI_SDK_STRICT_INTEGRATIONS` | `1` lässt Framework-Kompatibilitätsprobleme als Exception auslösen statt nur zu warnen und weiterzumachen. |
- **Kein Komma in `environment`.** Die Ingest-Komponente teilt dieses Feld an Kommas auf, um Filter zu erstellen, und überspringt jeden Event, dessen Bezeichnung ein Komma enthält — ein ganzer Lauf verschwindet dann lautlos. Schreiben Sie `prod-eu`, nicht `prod,eu`.
+ **Kein Komma in `environment`.** Der Ingest teilt dieses Feld an Kommas auf, um Filter zu erstellen, und überspringt jeden Event, dessen Bezeichnung ein Komma enthält – ein ganzer Durchlauf verschwindet damit lautlos. Schreiben Sie `prod-eu`, nicht `prod,eu`.
- `configure(environment="prod,eu")` löst sofort eine Ausnahme aus. `AGENTEYE_ENVIRONMENT` kann das nicht — niemand ruft Sie zurück — daher wird einmalig eine Warnung ausgegeben und auf `dev` zurückgefallen.
+ `configure(environment="prod,eu")` löst einen Fehler aus, damit Sie es sofort bemerken. `AGENTEYE_ENVIRONMENT` kann keinen Fehler auslösen – niemand ruft Sie zurück – daher wird einmalig gewarnt und auf `dev` zurückgefallen.
-Events werden im Speicher gepuffert und alle `flush_interval` Sekunden im Hintergrund geschrieben, mit einem abschließenden Flush beim Beenden des Interpreters. Ein abrupt beendeter Prozess verliert alles, was noch nicht geschrieben wurde.
+Events werden im Arbeitsspeicher gesammelt und alle `flush_interval` Sekunden im Hintergrund geschrieben, mit einem abschließenden Flush beim Beenden des Interpreters. Ein sofort abgewürgter Prozess verliert alles, was noch nicht geschrieben wurde.
+
+## Scopes
+
+Drei Context-Manager, jeweils mit `with` und `async with` verwendbar:
+
+| Scope | Bindet | Emittiert |
+| --- | --- | --- |
+| `session()` | Eine Sitzungs-ID. Gibt sie zurück | Nichts – nur Identität |
+| `agent(name)` | Eine Agent-ID und eine `parent_id`, abgeleitet vom umgebenden Agent | `agent_start` beim Eintritt, `agent_end` beim Austritt |
+| `tool_call(name)` | Nichts Neues – erbt die umgebende Identität | `tool_use` beim Eintritt, `tool_result` beim Austritt |
+
+```python
+with failproofai_sdk.session():
+ with failproofai_sdk.agent("planner"):
+ with failproofai_sdk.tool_call("web_search", input={"q": q}) as t:
+ t.output = search(q)
+```
+
+`tool_call()` setzt `tool_call_id` standardmäßig auf ein neues `uuid4().hex` und löst die Identität einmalig beim Eintritt auf, sodass ein Tool, das seinen eigenen Scope darin aufspannt, nicht dazu führen kann, dass das abschließende `tool_result` bei einem anderen Agent landet. Bei einem Fehler wird `tool_result(error="TypeName: msg")` emittiert und **kein `error`-Event** – ein Tool-Fehler, den die Schleife abfängt, ist kein Fehler auf Durchlaufsebene; einer, der sich weiterpropagiert, wird genau einmal gemeldet, vom umgebenden `agent()`. Ein Abbruch schließt das Blatt ohne Fehlerstring.
+
+## Adapter
+
+`instrument()` verbindet ein unterstütztes Framework mit den oben genannten Scopes. Ohne Argument werden alle bereits in diesem Prozess importierten Frameworks automatisch erkannt; mit einem Namen wird genau eines installiert.
+
+```python
+failproofai_sdk.instrument() # alles bereits Importierte
+failproofai_sdk.instrument("crewai") # genau eines
+failproofai_sdk.uninstrument("crewai") # originale Attribute wiederherstellen
+```
+
+Die vier Namen sind `"langchain"` (das auch LangGraph abdeckt, da LangGraph den Callback-Manager von langchain-core verwendet), `"crewai"`, `"llama_index"` und `"pydantic_ai"`. Der Framework-Import erfolgt innerhalb des Aufrufs, was `import failproofai_sdk` abhängigkeitsfrei hält.
+
+Jedes Framework hat eine eigene Seite: [LangChain](/de/start/integrations/langchain), [CrewAI](/de/start/integrations/crewai), [LlamaIndex](/de/start/integrations/llamaindex), [Pydantic AI](/de/start/integrations/pydantic-ai).
## Identität
-Jeder Event gehört zu einer Sitzung und einem Agenten. **Die Scopes füllen beides aus**, daher müssen sie selten übergeben werden:
+Jeder Event gehört zu einer Sitzung und einem Agent. **Die Scopes füllen beides aus**, sodass Sie sie selten selbst übergeben müssen:
```python
with failproofai_sdk.session():
@@ -91,32 +127,43 @@ with failproofai_sdk.session():
failproofai_sdk.event.tool_use(tool_name="search", tool_call_id="c1")
```
-`session_id` oder `agent_id` explizit zu übergeben funktioniert nach wie vor und hat Vorrang. Wenn weder ein Scope gebunden noch ein Wert übergeben wurde, löst der Aufruf einen `TypeError` aus, anstatt einen Event zu emittieren, den Cloud stillschweigend verwerfen würde.
+`session_id` oder `agent_id` explizit zu übergeben funktioniert weiterhin und hat Vorrang.
+
+Die beiden verhalten sich **nicht** symmetrisch, wenn nichts gebunden ist:
+
+| Weggelassen | Wenn nichts gebunden ist |
+| --- | --- |
+| `session_id` | Löst `TypeError` aus, statt einen Event zu emittieren, den Cloud stillschweigend verwerfen würde |
+| `agent_id` | Fällt auf `main` zurück, sodass Events, die innerhalb von `session()` ohne umgebendes `agent()` emittiert werden, alle unter einem einzelnen Agent namens `main` landen |
+
+Eine Sitzungs-ID zu erfinden würde einen Durchlauf über so viele Sitzungen verteilen, wie er Emit-Stellen hat – deshalb löst nur das einen Fehler aus.
+
+`session_id` und `agent_id` sind auch die einzigen zwei Namen, die auf Leere geprüft werden: Ein Nicht-String löst `TypeError` aus, und eine leere oder nur aus Leerzeichen bestehende ID löst `ValueError` aus. Der Server *akzeptiert* eine leere ID; ohne diese Prüfung würde jeder damit gesendete Event unter einer einzigen leeren ID gruppiert und scheinbar vorhanden, aber stillschweigend zusammengeführt.
- Die Identität wird über Kontextvariablen übertragen. Sie folgt `asyncio`-Tasks automatisch, aber **nicht** neuen Threads — umhüllen Sie einen Worker mit `failproofai_sdk.propagate()`, sonst landen seine Events ohne Zuordnung.
+ Identität wird über Context-Variablen übertragen. Sie folgt `asyncio`-Tasks automatisch, aber **nicht** neuen Threads – umschließen Sie einen Worker mit `failproofai_sdk.propagate()`, sonst landen seine Events ohne Zuordnung.
## Event-Katalog
-Fünfzehn Methoden. Die meisten kommen in **Paaren** — Sie rufen den Öffner auf, dann den Schließer, und das SDK misst die Zeitspanne dazwischen.
+Fünfzehn Methoden. Die meisten kommen in **Paaren** – ein Öffner und ein Schließer.
-| | Öffnet | Schließt |
-| --- | --- | --- |
-| **Agenten** | `agent_start` | `agent_end` |
-| | `agent_pause` | `agent_resume` |
-| **Modelle** | `model_request` | `model_response` |
-| **Tools** | `tool_use` | `tool_result` |
-| **Hooks** | `hook_triggered` | `hook_completed` |
-| **Menschen** | `human_wait` | `human_input` |
+| | Öffnet | Schließt | Vom SDK gemessen |
+| --- | --- | --- | --- |
+| **Agents** | `agent_start` | `agent_end` | Nein |
+| | `agent_pause` | `agent_resume` | Ja |
+| **Modelle** | `model_request` | `model_response` | Nein – in Cloud korreliert |
+| **Tools** | `tool_use` | `tool_result` | Ja |
+| **Hooks** | `hook_triggered` | `hook_completed` | Ja |
+| **Menschen** | `human_wait` | `human_input` | Ja |
-Drei stehen für sich allein: `error`, `human_pause`, `human_interrupt`.
+Drei stehen allein: `error`, `human_pause`, `human_interrupt`.
-
+
-Jede Methode akzeptiert außerdem `session_id` und `agent_id`, die die Scopes automatisch ausfüllen. Alles, was als `None` übergeben wird, wird weggelassen statt als JSON `null` gesendet, und jede Methode gibt `None` zurück.
+Jede Methode akzeptiert auch `session_id` und `agent_id`, die die Scopes für Sie ausfüllen. Was als `None` belassen wird, wird weggelassen statt als JSON `null` gesendet, und jede Methode gibt `None` zurück.
-| Methode | Pflichtfelder | Optionale Felder |
+| Methode | Erforderlich | Optional |
| --- | --- | --- |
| `agent_start` | — | `goal`, `parent_id` |
| `agent_end` | — | `outcome`, `summary` |
@@ -137,61 +184,85 @@ Jede Methode akzeptiert außerdem `session_id` und `agent_id`, die die Scopes au
- Um einen Lauf als fehlgeschlagen zu markieren, muss `outcome` einen der folgenden Werte haben: `failed`, `error`, `timeout` oder `rejected`. Alles andere — einschließlich des nahezu übereinstimmenden `"failure"` — wird als Erfolg gewertet.
+ Um einen Durchlauf als fehlgeschlagen zu markieren, muss `outcome` eines von `failed`, `error`, `timeout` oder `rejected` sein. Alles andere – einschließlich des nahezu richtigen `"failure"` – gilt als Erfolg.
-## Paarbildung und Dauer
+## Paarung und Dauer
-**Eine Regel: Geben Sie dem schließenden Event dieselbe ID wie dem öffnenden.** Das ist es, was sie verknüpft, und was dem SDK ermöglicht, die Zeitspanne zu messen.
+**Eine Regel: Geben Sie dem abschließenden Event dieselbe ID wie seinem Öffner.** Das ist es, was sie zu einem Paar macht und dem SDK ermöglicht, die Zeitspanne zu messen.
-| Paar | Verknüpft über |
-| --- | --- |
-| `tool_use` → `tool_result` | `tool_call_id` |
-| `hook_triggered` → `hook_completed` | `hook_id` |
-| `agent_pause` → `agent_resume` | `pause_id` |
-| `human_wait` → `human_input` | `input_id` |
-| `model_request` → `model_response` | `request_id` |
+| Paar | Abgeglichen auf | Tracking-Schlüssel |
+| --- | --- | --- |
+| `tool_use` → `tool_result` | `tool_call_id` | `tool:{session_id}:{tool_call_id}` |
+| `hook_triggered` → `hook_completed` | `hook_id` | `hook:{session_id}:{hook_id}` |
+| `agent_pause` → `agent_resume` | `pause_id` | `pause:{session_id}:{pause_id}` |
+| `human_wait` → `human_input` | `input_id` | `human:{session_id}:{input_id}` |
-**Übergeben Sie `duration_ms` nicht selbst.** Das SDK misst es, und eine Übergabe löst einen `ValueError` aus.
+Der Schlüssel ist nach Sitzung namespaced, was die beiden folgenden Randfälle ermöglicht.
-Die einzige Ausnahme ist `model_response`, wo nur Sie die tatsächliche Provider-Latenz kennen. Übergeben Sie eine ganze Anzahl Millisekunden — ein Float löst eine Ausnahme aus, da die Spalte ein 32-Bit-Integer ist und sonst leer bliebe.
+**Übergeben Sie `duration_ms` nicht selbst** für diese vier Schließer. Das SDK misst es, und eine Übergabe löst `ValueError` aus.
-
+
+ `model_request` und `model_response` sind ein Paar, das Cloud über `request_id` korreliert. Das SDK verfolgt sie nicht und misst lokal nichts, weshalb `model_response` der einzige Event ist, der `duration_ms` von Ihnen entgegennimmt. Übergeben Sie eine ganze Anzahl von Millisekunden – ein Float löst einen Fehler aus, da die Spalte ein 32-Bit-Integer ist und andernfalls leer bliebe.
+
-- **IDs müssen nur pro Typ und pro Sitzung eindeutig sein.** Ein Tool-Aufruf und ein Hook können dieselbe ID teilen; zwei gleichzeitig laufende Sitzungen können dieselben IDs wiederverwenden, ohne zu kollidieren.
-- **Sie sind nicht auf einen Agenten beschränkt.** Ein Paar, das unter einem Agenten geöffnet und unter einem anderen geschlossen wurde, wird trotzdem verknüpft — was bei Multi-Agenten-Code der Normalfall ist.
-- **`request_id` ist optional, aber empfohlen.** Ohne sie werden Modell-Events in der Reihenfolge ihres Eingangs gepaart, sodass zwei gleichzeitige Aufrufe im selben Agenten falsch zugeordnet werden können.
-- **Ein Paar, das über Prozesse aufgeteilt ist**, wird in Cloud trotzdem verknüpft, aber das SDK kann es nicht zeitlich messen — kein Prozess hat beide Hälften gesehen.
-- **Maximal 10.000 Öffner warten gleichzeitig auf einen Schließer.** Darüber hinaus wird der älteste verworfen, sodass ein Leak nicht unbegrenzt wachsen kann.
+
+
+- **IDs müssen nur pro Art und pro Sitzung eindeutig sein.** Ein Tool-Aufruf und ein Hook können sich eine teilen; zwei gleichzeitig laufende Sitzungen können dieselben IDs verwenden, ohne zu kollidieren.
+- **Sie sind nicht auf einen Agent beschränkt.** Ein Paar, das unter einem Agent geöffnet und unter einem anderen geschlossen wird, wird trotzdem zusammengeführt – was im Multi-Agent-Code der Normalfall ist.
+- **`request_id` ist optional, aber empfohlen.** Ohne sie werden Model-Events in der Reihenfolge ihres Eintreffens gepaart, sodass zwei gleichzeitige Aufrufe im selben Agent falsch gepaart werden können.
+- **Ein über Prozesse verteiltes Paar** wird in Cloud trotzdem zusammengeführt, aber das SDK kann es nicht messen – kein Prozess hat beide Hälften gesehen.
+- **Höchstens 10.000 Öffner warten gleichzeitig auf einen Schließer.** Darüber hinaus wird der älteste verworfen, sodass ein Leak nicht unbegrenzt wachsen kann.
## Eigene Felder
-Jedes zusätzliche Schlüsselwortargument wird mit dem Event gespeichert:
+Jedes zusätzliche Schlüsselwort, das Sie übergeben, wird mit dem Event gespeichert:
```python
failproofai_sdk.event.tool_use(
tool_name="search", tool_call_id="c1",
- fw_tenant="acme", fw_region="eu-west-1", # eigene Felder
+ fw_tenant="acme", fw_region="eu-west-1", # Ihre eigenen
)
```
-Bevorzugen Sie JSON-Typen, wenn Sie die Werte später abfragen möchten. Alles andere — eine UUID, ein Datetime, ein `Decimal`, ein Set, Bytes, ein Modell-Objekt — wird als Zeichenkette gespeichert.
+Bevorzugen Sie JSON-Typen, wenn Sie sie später abfragen möchten. Alles andere – eine UUID, ein Datetime, ein `Decimal`, ein Set, Bytes, ein Modellobjekt – wird als String gespeichert.
- **Versehen Sie Ihre Feldnamen mit einem Präfix.** Extras werden zuletzt angewendet, sodass ein Feld namens `model`, `tool_name` oder `outcome` das echte Feld stillschweigend überschreibt. Die Framework-Adapter verwenden `fw_`; tun Sie dasselbe und es kann keine Kollision auftreten.
+ **Elf Namen sind die Ausnahme und lösen einen Fehler aus statt zu stringifizieren.** Der Ingest hebt jeden in eine typisierte Spalte und speichert `NULL` für alles andere, bei `200 OK`, unsichtbar – daher verweigert das SDK sie direkt an der Aufrufstelle.
+
+ | Namen | Müssen sein |
+ | --- | --- |
+ | `duration_ms`, `input_tokens`, `output_tokens` | Ein `int` im vorzeichenlosen 32-Bit-Bereich |
+ | `tool_name`, `tool_call_id`, `hook_name`, `hook_id`, `input_id`, `pause_id`, `error_type`, `model` | Ein String – `None` löst `ValueError` aus, jeder Nicht-String löst `TypeError` aus |
- Das ist auch der Grund, warum ein falsch geschriebenes optionales Feld keinen Fehler erzeugt — es wird einfach zu einem neuen benutzerdefinierten Feld. Wenn ein Standardfeld in Cloud fehlt, prüfen Sie zuerst die Schreibweise.
+ Dies gilt unabhängig davon, ob der Wert als benannter Parameter oder als eines Ihrer eigenen Extras ankommt. `model_response` validiert `input_tokens` und `output_tokens` aus demselben Grund beim Eingang – sie werden am häufigsten direkt aus dem Usage-Objekt eines Anbieters befüllt.
-Diese fünf Namen sind reserviert und werden grundsätzlich abgelehnt: `timestamp`, `session_id`, `agent_id`, `type`, `environment`.
+
+ **Präfixieren Sie Ihre Feldnamen.** Extras werden zuletzt angewendet, sodass ein Feld namens `model`, `tool_name` oder `outcome` das eigentliche stillschweigend überschreibt. Die Framework-Adapter verwenden `fw_`; tun Sie dasselbe, und nichts kann kollidieren.
+
+ Das ist auch der Grund, warum ein falsch geschriebenes optionales Feld keinen Fehler auslöst – es wird einfach zu einem neuen benutzerdefinierten Feld. Wenn ein Standardfeld in Cloud fehlt, prüfen Sie zuerst die Schreibweise.
+
+
+Diese fünf Namen sind reserviert und werden direkt abgelehnt: `timestamp`, `session_id`, `agent_id`, `type`, `environment`.
+
+## Weitere Exporte
+
+| Export | Bedeutung |
+| --- | --- |
+| `current()` | Die aktuell gebundene Identität als `Identity`. `current().session_id is None` bedeutet, dass nichts gebunden ist |
+| `Identity` | `session_id`, `agent_id`, `parent_id`, `depth`. Selbst nie `None` – prüfen Sie die Felder |
+| `propagate(fn)` | Umschließt `fn`, sodass es mit der zum Zeitpunkt des Umschließens gebundenen Identität ausgeführt wird. Erforderlich für `Thread`, `pool.submit`, `pool.map`, `run_in_executor` |
+| `_writer.flush_now()` | Gepufferte Einträge sofort leeren und schreiben, für einen Test oder einen erzwungenen Flush vor dem Beenden |
+| `__version__` | Die installierte SDK-Version |
-## Zustellung und Überprüfung
+## Zustellen und überprüfen
- Überprüfen Sie unter **Observe → Events**, ob `agent_start` als erstes und `agent_end` als letztes vorhanden ist. Öffnen Sie dann **Observe → Sessions** und bestätigen Sie, dass Modell-, Tool-, Human-, Hook- und Error-Events in der vorgesehenen Reihenfolge erscheinen. Verwenden Sie die Sitzungs-ID als primären Schlüssel zur Fehlersuche.
+ Prüfen Sie unter **Beobachten → Events**, dass `agent_start` zuerst und `agent_end` zuletzt vorhanden ist. Öffnen Sie dann **Beobachten → Sitzungen** und bestätigen Sie, dass Model-, Tool-, Human-, Hook- und Error-Events in der vorgesehenen Reihenfolge erscheinen. Verwenden Sie die Sitzungs-ID als primären Troubleshooting-Schlüssel.
```bash
@@ -203,14 +274,14 @@ Diese fünf Namen sind reserviert und werden grundsätzlich abgelehnt: `timestam
-Wenn Cloud leer ist, prüfen Sie `$FAILPROOFAI_HOME/custom-agents/events`, andernfalls `~/.failproofai/custom-agents/events`. JSONL-Dateien belegen die Emission durch das SDK; ein wachsender Spool deutet auf ein Problem mit der Daemon-Konfiguration oder Zustellung hin, während ein leerer Spool auf die Instrumentierung oder die Prozesslebensdauer hindeutet.
+Wenn Cloud leer ist, prüfen Sie `$FAILPROOFAI_HOME/custom-agents/events`, andernfalls `~/.failproofai/custom-agents/events`. JSONL-Dateien belegen die SDK-Emission; ein wachsender Spool deutet auf ein Daemon-Konfigurations- oder Zustellungsproblem hin, während ein leerer Spool auf ein Instrumentierungs- oder Prozesslebenszeitproblem hindeutet.
- Untersuchen Sie den Spool nur, wenn der Daemon gestoppt ist. Während er läuft, sammelt und löscht er jeden Batch innerhalb von Millisekunden, sodass eine Verzeichnisauflistung mit dem Collector in einem Race Condition steht und weit weniger Events zeigt als tatsächlich emittiert wurden.
+ Prüfen Sie den Spool nur, wenn der Daemon gestoppt ist. Während er läuft, sammelt und löscht er jeden Batch innerhalb von Millisekunden, sodass eine Verzeichnisauflistung mit dem Collector in Konflikt gerät und weit weniger Events zeigt, als emittiert wurden.
-## Fehler in einer eigenen Laufzeitumgebung verhindern
+## Fehler in einer benutzerdefinierten Laufzeit verhindern
-Nutzen Sie Audit-Befunde und verknüpfte Traces, um die unsichere Aktion, den erforderlichen Nachweis und die beabsichtigte Reaktion zu definieren. Eine benutzerdefinierte Enforcement-Integration muss die Aktion vor der Ausführung offenlegen, ihre strukturierte Eingabe an die Policy-Engine übergeben und die daraus resultierende allow-, instruct- oder deny-Entscheidung anwenden.
+Nutzen Sie Audit-Findings und verknüpfte Traces, um die unsichere Aktion, den erforderlichen Nachweis und die beabsichtigte Reaktion zu definieren. Eine benutzerdefinierte Enforcement-Integration muss die Aktion vor der Ausführung offenlegen, ihre strukturierten Eingaben an die Policy-Engine übergeben und die resultierende allow-, instruct- oder deny-Entscheidung anwenden.
-[Kontaktieren Sie Failproof AI](mailto:support@befailproof.ai) und wir helfen Ihnen dabei, die Modell-, Tool- und Lebenszyklus-Grenzen Ihrer Laufzeitumgebung auf Policy-Hooks abzubilden und die Integration anschließend gemeinsam mit Ihnen zu validieren.
\ No newline at end of file
+[Kontaktieren Sie Failproof AI](mailto:support@befailproof.ai) und wir helfen Ihnen dabei, die Modell-, Tool- und Lifecycle-Grenzen Ihrer Laufzeit auf Policy-Hooks abzubilden und die Integration gemeinsam mit Ihnen zu validieren.
\ No newline at end of file
diff --git a/docs/de/reference/evaluator-sdk.mdx b/docs/de/reference/evaluator-sdk.mdx
index 1f57eb167..bdc5cd69e 100644
--- a/docs/de/reference/evaluator-sdk.mdx
+++ b/docs/de/reference/evaluator-sdk.mdx
@@ -1,19 +1,43 @@
---
title: "Evaluator SDK"
-description: "Erstellen Sie einen Service, der Failproof AI-Sitzungen synchron oder asynchron bewertet."
+description: "Einen Service aufbauen, der Failproof AI-Sitzungen synchron oder asynchron bewertet."
icon: "gauge"
---
-Ein Evaluator empfängt eine abgeschlossene Agentensitzung und gibt die gewünschten Qualitätssignale zurück: numerische Bewertungen, eine Erklärung für jede Bewertung und eine optionale Zusammenfassung. Failproof AI speichert diese Ergebnisse neben dem Trace und visualisiert sie über Agenten und Umgebungen hinweg.
+Ein Evaluator erhält eine abgeschlossene Agent-Sitzung und gibt die gewünschten Qualitätssignale zurück: numerische Scores, eine Erklärung für jeden Score und eine optionale Zusammenfassung. Failproof AI speichert diese Ergebnisse neben dem Trace und stellt sie über Agents und Umgebungen hinweg grafisch dar.
-## Evaluator einrichten
+Das Paket heißt `agenteye-evaluator` und wird als `agenteye_evaluator` importiert. Es erfordert Python 3.10 oder neuer und hängt von `fastapi`, `pydantic>=2` sowie `structlog` ab.
+
+
+ **`pip install agenteye-evaluator` aus dem öffentlichen PyPI ist nicht der richtige Installationsweg.** Das Paket wird ausschließlich als privates Release-Artefakt veröffentlicht, und der Name ist auf dem öffentlichen PyPI nicht reserviert — ein unkontrollierter Install-Befehl könnte ein fremdes Paket in den Service laden, der Ihre Produktions-Transcripts liest. Verwenden Sie die Leiter weiter unten.
+
+
+## Einen Evaluator einrichten
-
- Installieren Sie das SDK und den Server zum Ausführen.
+
+ Gehen Sie diese Leiter von oben nach unten durch und hören Sie bei der ersten zutreffenden Stufe auf.
+
+ Innerhalb des Monorepos, in dem ein Verzeichnis `evaluator-sdk/` existiert:
+
+ ```bash
+ pip install ./evaluator-sdk
+ ```
+
+ Andernfalls über das private Release. Wheels sind an GitHub Releases unter `agenteye-enterprise/releases` angehängt, mit dem Tag `evaluator-sdk/v`, und Sie benötigen `gh auth login` sowie Zugriff auf dieses Repository:
```bash
- pip install failproofai-sdk uvicorn
+ gh release download evaluator-sdk/v \
+ --repo agenteye-enterprise/releases --pattern '*.whl'
+ pip install ./agenteye_evaluator-*.whl
+ ```
+
+ Wenn beides nicht funktioniert, wenden Sie sich an Ihren Failproof AI-Kontakt, um das Wheel zu erhalten, anstatt eine eigene Installation zu improvisieren.
+
+ `uvicorn` ist absichtlich keine Abhängigkeit. Installieren Sie den Server daher separat:
+
+ ```bash
+ pip install 'uvicorn[standard]'
```
@@ -22,7 +46,7 @@ Ein Evaluator empfängt eine abgeschlossene Agentensitzung und gibt die gewünsc
```python
import os
- from failproofai.evaluator import Evaluator, EvalResponse
+ from agenteye_evaluator import Evaluator, EvalResponse
app = Evaluator(token=os.environ.get("EVALUATOR_TOKEN"))
@@ -41,10 +65,16 @@ Ein Evaluator empfängt eine abgeschlossene Agentensitzung und gibt die gewünsc
reasoning={"tool_reliability": f"{tool_errors} tool errors"},
)
```
+
+ Der vollständige Konstruktor lautet `Evaluator(token: str | None = None, *, title: str = "AgentEye Evaluator")`. Das Token wird mit `hmac.compare_digest` verglichen; `title` ist der FastAPI-App-Titel und rein kosmetischer Natur.
+
+
+ `token=None` deaktiviert die Authentifizierung vollständig. Auf einem lokalen Rechner ist das in Ordnung, in der Produktion ist es eine Sicherheitslücke — der Endpunkt empfängt vollständige Sitzungs-Transcripts.
+
- Setzen Sie ein gemeinsames Token, starten Sie den Evaluator und prüfen Sie, ob der Health-Endpunkt antwortet.
+ Setzen Sie ein gemeinsames Token, starten Sie den Evaluator und überprüfen Sie, ob sein Health-Endpunkt antwortet.
```bash
export EVALUATOR_TOKEN=
@@ -56,30 +86,32 @@ Ein Evaluator empfängt eine abgeschlossene Agentensitzung und gibt die gewünsc
```bash
curl http://127.0.0.1:8080/health
```
+
+ Jeder Decorator gibt die Funktion unverändert zurück, sodass `evaluate(req)` direkt aufrufbar bleibt. Das macht Unit-Tests kostengünstig — erstellen Sie einen `EvalRequest` und rufen Sie den Handler auf, ganz ohne HTTP.
-## Evaluator mit Failproof AI verbinden
+## Den Evaluator mit Failproof AI verbinden
1. Deployen Sie den Evaluator unter einer HTTPS-URL, die von Failproof AI Cloud erreichbar ist.
-2. Konfigurieren Sie `EVALUATOR_ENDPOINT` mit dieser URL und setzen Sie `EVALUATOR_TOKEN` auf dasselbe Token, das der Evaluator verwendet. Für die verwaltete Cloud wenden Sie sich an [support@befailproof.ai](mailto:support@befailproof.ai), um die Verbindung einzurichten.
-3. Führen Sie eine Evaluierung durch und prüfen Sie, ob die Bewertungen in Failproof AI erscheinen.
+2. Konfigurieren Sie `EVALUATOR_ENDPOINT` mit dieser URL und setzen Sie `EVALUATOR_TOKEN` auf dasselbe Token, das der Evaluator verwendet. Für verwaltetes Cloud-Hosting wenden Sie sich an [support@befailproof.ai](mailto:support@befailproof.ai), um die Verbindung zu konfigurieren.
+3. Führen Sie eine Evaluierung durch und bestätigen Sie, dass die Scores in Failproof AI erscheinen.
- Öffnen Sie eine abgeschlossene Sitzung unter **Observe → Sessions** und wählen Sie **Run evaluation**, falls sie nicht automatisch evaluiert wurde. Überprüfen Sie Status, Bewertungen, Begründungen und Zusammenfassung im **Evaluation**-Panel der Sitzung.
+ Öffnen Sie eine abgeschlossene Sitzung unter **Observe → Sessions** und wählen Sie **Run evaluation**, falls sie nicht automatisch ausgewertet wurde. Überprüfen Sie Status, Scores, Reasoning und Summary im **Evaluation**-Panel der Sitzung.
- Verwenden Sie **Observe → Evaluations**, um Bewertungen über Agenten oder Umgebungen hinweg zu vergleichen. Nutzen Sie **Observe → Metrics** für Latenz-, Kosten-, Token- und andere numerische Messungen.
+ Verwenden Sie **Observe → Evaluations**, um Scores über Agents oder Umgebungen hinweg zu vergleichen. Nutzen Sie **Observe → Metrics** für Latenz-, Kosten-, Token- und andere numerische Messungen.
- Beginnen Sie mit einer einzelnen Sitzung, um sicherzustellen, dass der Evaluator die erwarteten Score-Keys und sinnvolle Begründungen für diesen konkreten Durchlauf zurückgegeben hat.
+ Beginnen Sie mit einer einzelnen Sitzung, um zu bestätigen, dass der Evaluator die erwarteten Score-Schlüssel und sinnvolles Reasoning für diesen spezifischen Durchlauf zurückgegeben hat.
- 
+ 
- Sobald die Einzelergebnisse korrekt aussehen, können Sie im Evaluierungs-Dashboard diese Bewertungen über die Zeit und über Agenten oder Umgebungen hinweg vergleichen.
+ Sobald die Einzelergebnisse korrekt aussehen, nutzen Sie das Evaluierungs-Dashboard, um diese Scores über Zeit und über Agents oder Umgebungen hinweg zu vergleichen.
- 
+ 
- Ein gesundes Diagramm sollte stabile Score-Namen verwenden – das Umbenennen eines Keys erstellt eine separate Datenreihe.
+ Ein gesundes Diagramm sollte stabile Score-Namen verwenden; das Umbenennen eines Schlüssels erzeugt eine separate Reihe.
```bash
@@ -89,11 +121,32 @@ Ein Evaluator empfängt eine abgeschlossene Agentensitzung und gibt die gewünsc
-Bei einer selbst gehosteten Cloud-Instanz ist die automatische Evaluierung deaktiviert, bis `EVALUATOR_ENDPOINT` am Serverprozess gesetzt ist. Starten Sie den Server nach Änderungen an Evaluator-Umgebungsvariablen neu.
+Bei einer selbst gehosteten Cloud-Instanz ist die automatische Evaluierung deaktiviert, bis `EVALUATOR_ENDPOINT` im Serverprozess gesetzt ist. Starten Sie den Server nach dem Ändern von Evaluator-Umgebungsvariablen neu.
+
+## Decorators und Routen
+
+| Decorator | Route | Erforderlich |
+| --- | --- | --- |
+| `@app.evaluator` | `POST /evaluate` | Ja. |
+| `@app.job_lookup` | `GET /evaluate/{job_id}` | Nur wenn Sie jemals `JobPending` zurückgeben. Ohne ihn liefern Polls einen 404. |
+| `@app.config` | `GET /config` | Nein, aber erforderlich für jede Sitzung, die nie `agent_end` sendet — siehe unten. |
+
+Jeder Decorator akzeptiert eine synchrone oder asynchrone Funktion, gibt sie unverändert zurück und wirft einen `ValueError`, wenn sie zweimal registriert wird.
+
+| Route | Auth |
+| --- | --- |
+| `GET /health` | Offen, auch wenn ein Token gesetzt ist. |
+| `POST /evaluate` | Bearer. |
+| `GET /evaluate/{job_id}` | Bearer. |
+| `GET /config` | Bearer. |
+
+Das Bearer-Schema wird ohne Berücksichtigung der Groß-/Kleinschreibung abgeglichen. `GET /config` ohne registrierten `@app.config` gibt dennoch `{"default_poll_interval_secs": 10}` zurück, sodass das SDK stets einen Takt bekannt gibt.
-Der Service stellt `GET /health`, `GET /config`, `POST /evaluate` und optional `GET /evaluate/{job_id}` bereit. Geben Sie `JobPending` für asynchrone Arbeit zurück und registrieren Sie `@app.job_lookup`, damit Failproof AI den Status abfragen kann.
+Das SDK begrenzt Evaluierungsanfrage-Bodies auf 25 MiB, geprüft anhand von `Content-Length` vor dem Lesen des Bodys. Überschreitungen werden mit 413 quittiert, was ein 4xx und damit terminal ist. Unbekannte Anforderungsfelder werden ignoriert, damit Services kompatibel bleiben, wenn der Event-Vertrag wächst.
-Wenn ein Token konfiguriert ist, erfordern alle Routen außer Health dasselbe Bearer-Token, das Failproof AI als `EVALUATOR_TOKEN` sendet.
+
+ Das Registrieren von `@app.config` mit `inactivity_timeout_secs` aktiviert den Fallback-Scanner. Ohne ihn wird eine Sitzung, die nie `agent_end` gesendet hat — alles, was abgebrochen wurde, abgestürzt ist oder noch im Leerlauf ist — überhaupt nicht zur Evaluierung eingeplant. Werte von null oder kleiner werden verworfen.
+
## SDK-Typen
@@ -105,22 +158,55 @@ Wenn ein Token konfiguriert ist, erfordern alle Routen außer Health dasselbe Be
| `JobPending` | `job_id`, `next_poll_secs` |
| `EvaluatorConfig` | `inactivity_timeout_secs`, `default_poll_interval_secs` |
-## Dekoratoren und Routen
+## Anfrage- und Antwortfelder
-| Dekorator | Route | Erforderlich |
+| Feld | Typ | Hinweise |
| --- | --- | --- |
-| `@app.evaluator` | `POST /evaluate` | Ja |
-| `@app.job_lookup` | `GET /evaluate/{job_id}` | Bei Rückgabe von `JobPending` |
-| `@app.config` | `GET /config` | Nein |
+| `EvalRequest.schema_version` | `str` | Aktuell `"1"`. |
+| `session_id`, `agent_id`, `environment` | `str` | Sitzungsidentität und Umgebung. |
+| `started_at` | `datetime` | Zeitstempel des ersten Events. |
+| `ended_at` | `datetime \| None` | Der Zeitstempel des `agent_end`-Events, nicht „wann die Sitzung aufgehört hat". Sitzungen, die vom Inactivity-Scanner eingereiht wurden, hatten nie ein `agent_end` und kommen als `None` an. |
+| `events` | `list[AgentEvent]` | Vollständiger geordneter Event-Stream. |
+| `AgentEvent.id` | `int` | Backend-Event-Zeilenkennung. |
+| `AgentEvent.ts` | `datetime` | Event-Zeitstempel. |
+| `AgentEvent.event_type` | `str` | Event-Familie wie z. B. `tool_use`. |
+| `AgentEvent.payload` | `dict[str, Any]` | Das gesamte Event-JSON flach ausgerollt, sodass eventspezifische Felder auf oberster Ebene liegen und `payload["type"]` `event_type` dupliziert. |
+| `EvalResponse.scores` | `dict[str, float] \| None` | Numerische Dimensionen, die in Evaluierungen dargestellt werden. |
+| `EvalResponse.reasoning` | `dict[str, str] \| None` | Score-spezifische Erklärungen; Schlüssel sollten `scores` spiegeln. |
+| `EvalResponse.summary` | `str \| None` | Gesamte Evaluierungserzählung. Serverseitig auf 8192 Bytes gekürzt; `last_error` auf 2048. |
+
+Die Serialisierung verwendet `exclude_none`, sodass nicht gesetzte Felder weggelassen statt als `null` gesendet werden.
+
+
+ Das Ableiten einer Dauer aus `ended_at` führt bei echten Daten zu Abstürzen. Jede Sitzung, die der Inactivity-Scanner einreiht, kommt mit `ended_at` gleich `None` an. Prüfen Sie den Wert vor der Subtraktion.
+
+
+## Rückgabeformen
+
+Ihr Handler darf genau eine von drei Möglichkeiten zurückgeben. Alles andere ist ein `TypeError`, der als 500 erscheint.
-Das SDK begrenzt Evaluierungsanfrage-Bodies auf 25 MiB. Unbekannte Anforderungsfelder werden ignoriert, sodass Services kompatibel bleiben, wenn der Event-Vertrag erweitert wird.
+| Rückgabe | Wire-`status` | Terminal |
+| --- | --- | --- |
+| `EvalResponse(...)` | `done` | Ja — Scores werden gespeichert. |
+| `JobPending(job_id=...)` | `pending` | Nein — der Server pollt. |
+| Ein rohes `dict` mit `status` aus `done`, `pending` oder `error` | Wie angegeben | `error` ist terminal. |
+
+Der `error`-Status hat kein typisiertes Modell. Um terminal zu scheitern, müssen Sie ein rohes Dict zurückgeben, und `error` muss ein nicht-leerer `str` sein:
+
+```python
+return {"status": "error", "error": "model service unavailable"}
+```
+
+
+ **Exceptions werfen ist kein Fehlerbericht.** Eine Exception wird zu einem generischen 500, dessen Body `"evaluator raised an internal error"` lautet — Ihr Exception-Text erreicht den Server nie, und der Server behandelt jeden 5xx als vorübergehend und wiederholt ihn. Geben Sie das `error`-Dict zurück, wenn Sie den Fehler aufzeichnen möchten.
+
## Asynchrone Arbeit zurückgeben
-Verwenden Sie `JobPending`, wenn die Evaluierung nicht innerhalb einer einzigen Anfrage abgeschlossen werden kann. Die Job-ID ist für Failproof AI opak und muss von Ihrem Service auflösbar bleiben, bis das Ergebnis abgerufen oder der Server-Timeout erreicht wurde.
+Verwenden Sie `JobPending`, wenn die Evaluierung nicht innerhalb einer einzigen Anfrage abgeschlossen werden kann. Die Job-ID ist für Failproof AI undurchsichtig und muss von Ihrem Service auflösbar bleiben, bis das Ergebnis abgeholt oder das Server-Timeout abgelaufen ist.
```python
-from failproofai.evaluator import EvalRequest, EvalResponse, Evaluator, JobPending
+from agenteye_evaluator import EvalRequest, EvalResponse, Evaluator, JobPending
app = Evaluator(token="shared-secret")
@@ -141,50 +227,38 @@ def lookup(job_id: str):
)
```
-Das Polling-Intervall wird in dieser Reihenfolge bestimmt: `JobPending.next_poll_secs`, `EvaluatorConfig.default_poll_interval_secs`, dann `EVALUATOR_POLLING_INTERVAL_SECS` des Servers. Werte werden auf einen Bereich zwischen 1 Sekunde und 1 Stunde begrenzt. Die standardmäßige Wanduhr-Polling-Obergrenze des Servers beträgt eine Stunde.
+Der Polling-Takt wird in dieser Reihenfolge gewählt: `JobPending.next_poll_secs`, `EvaluatorConfig.default_poll_interval_secs`, dann `EVALUATOR_POLLING_INTERVAL_SECS` des Servers. Werte werden zwischen 1 Sekunde und 1 Stunde eingegrenzt. Die Standard-Wanduhr-Polling-Obergrenze des Servers beträgt eine Stunde, danach wird das Ergebnis als `timeout` gespeichert.
-## Anfrage- und Antwortfelder
+## Einstellungen für Server-Operatoren
-| Feld | Typ | Hinweise |
-| --- | --- | --- |
-| `EvalRequest.schema_version` | `str` | Aktuell `"1"`. |
-| `session_id`, `agent_id`, `environment` | `str` | Sitzungsidentität und Umgebung. |
-| `started_at` | `datetime` | Zeitstempel des ersten Events. |
-| `ended_at` | `datetime \| None` | Vorhanden, wenn die Sitzung ein End-Event ausgelöst hat. |
-| `events` | `list[AgentEvent]` | Vollständiger geordneter Event-Stream. |
-| `AgentEvent.id` | `int` | Backend-Event-Zeilenkennung. |
-| `AgentEvent.ts` | `datetime` | Event-Zeitstempel. |
-| `AgentEvent.event_type` | `str` | Event-Familie, z. B. `tool_use`. |
-| `AgentEvent.payload` | `dict[str, Any]` | Vollständige Event-Nutzdaten. |
-| `EvalResponse.scores` | `dict[str, float] \| None` | Numerische Dimensionen, die in Evaluierungen dargestellt werden. |
-| `EvalResponse.reasoning` | `dict[str, str] \| None` | Erklärungen je Score; Keys sollten `scores` widerspiegeln. |
-| `EvalResponse.summary` | `str \| None` | Gesamtbeschreibung der Evaluierung. |
-
-## Server-Operator-Einstellungen
-
-Die automatische Evaluierung gilt für das gesamte Deployment und bleibt deaktiviert, wenn `EVALUATOR_ENDPOINT` nicht gesetzt ist.
+Die automatische Evaluierung gilt deployment-weit und bleibt deaktiviert, wenn `EVALUATOR_ENDPOINT` nicht gesetzt ist.
| Variable | Standard | Zweck |
| --- | --- | --- |
-| `EVALUATOR_ENDPOINT` | nicht gesetzt | Basis-URL des Evaluator-Services. |
-| `EVALUATOR_TOKEN` | nicht gesetzt | Bearer-Token, gemeinsam mit `Evaluator(token=...)`. |
+| `EVALUATOR_ENDPOINT` | nicht gesetzt | Basis-URL des Evaluator-Service. |
+| `EVALUATOR_TOKEN` | nicht gesetzt | Bearer-Token, das mit `Evaluator(token=...)` geteilt wird. |
| `EVALUATOR_WORKERS` | `2` | Gleichzeitige Dispatcher-Worker. |
-| `EVALUATOR_CLAIM_BATCH` | `4` | Sitzungen pro Dispatcher-Durchlauf. |
-| `EVALUATOR_POLLING_INTERVAL_SECS` | `10` | Fallback-Intervall für asynchrones Polling. |
-| `EVALUATOR_REQUEST_TIMEOUT_MS` | `30000` | Timeout pro Evaluator-Anfrage. |
-| `EVALUATOR_MAX_ATTEMPTS` | `5` | Zustellversuche vor terminalem Fehler. |
-| `EVALUATOR_CONFIG_REFRESH_SECS` | `300` | Aktualisierungsintervall für `/config`. |
+| `EVALUATOR_CLAIM_BATCH` | `4` | Sitzungen, die pro Dispatcher-Durchgang beansprucht werden. |
+| `EVALUATOR_POLLING_INTERVAL_SECS` | `10` | Fallback-Takt für asynchrones Polling. |
+| `EVALUATOR_REQUEST_TIMEOUT_MS` | `30000` | Evaluator-Timeout pro Anfrage, angewendet auf den POST und jeden Poll. |
+| `EVALUATOR_MAX_ATTEMPTS` | `5` | Zustellungsversuche vor terminalem Fehler. |
+| `EVALUATOR_CONFIG_REFRESH_SECS` | `300` | Aktualisierungstakt für `/config`. |
| `EVALUATOR_MAX_POLL_DURATION_SECS` | `3600` | Maximale Wanduhr-Zeit für asynchrones Polling. |
-Der Server kann auch einschränken, welche Organisationen den deployment-globalen Evaluator nutzen. Behandeln Sie Änderungen an Endpunkt, Token, Wiederholungslogik und Organisations-Beschränkungen als Operator-Konfiguration und starten Sie den Server danach neu oder führen Sie ein Rolling Restart durch.
+Zwei Konsequenzen aus dieser Tabelle sind es wert, explizit genannt zu werden:
+
+- **Worker mal Claim-Batch ergibt Ihre Nebenläufigkeit.** Mit den Standardwerten sind das 8 gleichzeitige Aufrufe gegen Ihren Endpunkt, deployment-weit. Dimensionieren Sie den Service für diese Zahl, nicht für einen.
+- **4xx ist terminal, 5xx, 429 oder ein Transport-Fehler wird mit Backoff bis zu `EVALUATOR_MAX_ATTEMPTS` wiederholt.** Ein Token-Mismatch ergibt einen 401 und schlägt daher sofort fehl statt wiederholt zu werden — das ist das Erste, was Sie prüfen sollten, wenn nichts ankommt.
+
+Der Server kann auch einschränken, welche Organisationen den deployment-globalen Evaluator nutzen. Behandeln Sie Änderungen an Endpunkt, Token, Wiederholungsverhalten und Organisations-Gate als Operator-Konfiguration und starten Sie den Server danach neu oder führen Sie ein Rolling-Update durch.
## Sicherheit und Betrieb
-- Stellen Sie den Evaluator hinter HTTPS, wenn der Datenverkehr eine vertrauenswürdige Netzwerkgrenze überquert.
-- Konfigurieren Sie ein nicht leeres Bearer-Token und halten Sie es auf beiden Services identisch.
-- Protokollieren Sie weder das Token noch vollständige sensible Prompts aus Anfrage-Nutzdaten.
-- Gestalten Sie synchrone Handler idempotent; Wiederholungen können eine Anfrage wiederholen.
+- Platzieren Sie den Evaluator hinter HTTPS, wenn Traffic eine vertrauenswürdige Netzwerkgrenze überschreitet.
+- Konfigurieren Sie ein nicht-leeres Bearer-Token und halten Sie es auf beiden Services identisch. `token=None` akzeptiert jeden Aufrufer.
+- Loggen Sie das Token oder vollständige sensible Prompts aus Request-Payloads nicht. Das SDK tut dies nicht: Validierungsfehler geben 422 zurück ohne das Payload zu spiegeln, 500er spiegeln niemals Exception-Text, und das Token erscheint in keinem Log-Feld.
+- Machen Sie synchrone Handler idempotent; Wiederholungen können eine Anfrage wiederholen.
- Persistieren Sie asynchronen Job-Status in der Produktion außerhalb des Prozessspeichers.
-- Verwenden Sie stabile Score-Keys. Das Umbenennen eines Keys erstellt eine neue Diagrammreihe, anstatt die alte zu ändern.
+- Verwenden Sie stabile Score-Schlüssel. Das Umbenennen eines Schlüssels erzeugt eine neue Diagramm-Reihe, anstatt die alte zu ändern.
-Das SDK gibt strukturierte Lifecycle-Logs aus, z. B. `eval received`, `eval responded`, `job lookup`, `config returned`, `auth rejected` und Handler-Ausnahmen. Es konfiguriert keine Logging-Handler; verwenden Sie die Logging-Konfiguration der Host-Anwendung.
\ No newline at end of file
+Das SDK gibt strukturierte Lifecycle-Logs aus, etwa `eval received`, `eval responded`, `job lookup`, `config returned`, `auth rejected` sowie Handler-Exceptions. `/config`-Antworten kennzeichnen `source="user"` gegenüber `source="default"`, sodass Sie erkennen können, ob Ihr `@app.config` erkannt wurde. Das SDK konfiguriert keine Logging-Handler; verwenden Sie die Logging-Konfiguration der Host-Anwendung.
\ No newline at end of file
diff --git a/docs/de/reference/events-and-configuration.mdx b/docs/de/reference/events-and-configuration.mdx
index 963d36253..60dce1cca 100644
--- a/docs/de/reference/events-and-configuration.mdx
+++ b/docs/de/reference/events-and-configuration.mdx
@@ -1,41 +1,52 @@
---
title: "Events und Konfiguration"
-description: "Referenz zum Event-Modell, Umgebungen, lokalem Speicher und Konfigurationsgrenzen."
+description: "Referenz für das Event-Modell, Umgebungen, lokalen Speicher und Konfigurationsgrenzen."
icon: "list-tree"
---
+## Zwei Event-Vokabulare
+
+Failproof AI verwendet zwei verschiedene Arten von Events, die keine gemeinsamen Namen teilen.
+
+| Vokabular | Erzeugt von | Namen sehen aus wie | Referenz |
+| --- | --- | --- | --- |
+| Telemetrie-Events | `failproofai-sdk`, aus Ihrem Agenten heraus | `tool_use`, `tool_result`, `hook_triggered`, `model_response` | [Python SDK](/de/reference/custom-agents) |
+| Hook-Events | Das Agenten-Harness, normalisiert von failproofai | `PreToolUse`, `PostToolUse`, `Stop`, `UserPromptSubmit` | [Custom policies](/de/reference/policy-sdk#choose-the-event) |
+
+Die Hook-Seite normalisiert die eigenen Event-Namen jedes Harness in 29 kanonische Typen. Die Telemetrie-Seite hat 15 Methoden und einen eigenen Feldvertrag. `hook_triggered` und `PreToolUse` sind nicht zwei Schreibweisen für ein und dasselbe.
+
## Event-Familien
-- Agent-Start, -Ende, -Pause und -Fortsetzung
+- Agenten-Start, -Ende, -Pause und -Wiederaufnahme
- Modellanfrage und -antwort
- Tool-Nutzung und -Ergebnis
- Hook ausgelöst und abgeschlossen
- Menschliches Warten, Eingabe, Pause und Unterbrechung
- Explizite Fehler
-Jedes Event enthält einen Zeitstempel, eine Session-ID, eine Agent-ID, einen Event-Typ und eine Umgebung. Event-spezifische Felder enthalten Modell-, Tool-, Korrelations-, Ergebnis-, Inhalts-, Dauer- oder Fehlerdaten.
+Jedes Event trägt einen Zeitstempel, eine Session-ID, eine Agenten-ID, einen Event-Typ und eine Umgebung. Event-spezifische Felder enthalten Modell-, Tool-, Korrelations-, Ergebnis-, Inhalts-, Dauer- oder Fehlerdaten.
## Einen Event-Vertrag inspizieren
- 1. Öffne **Observe → Events**.
- 2. Setze ein kurzes Zeitfenster und filtere nach Umgebung, Agent und Event-Typ.
- 3. Wähle ein Event aus, um seine normalisierten Felder und die Rohdaten zu prüfen, und öffne dann die zugehörige Session, um den Ausführungskontext zu sehen.
- 4. Wenn eine zugehörige Dauer fehlt, prüfe, ob Start- und Abschluss-Event dieselbe Korrelations-ID verwenden.
+ 1. Öffnen Sie **Observe → Events**.
+ 2. Legen Sie ein kurzes Zeitfenster fest und filtern Sie nach Umgebung, Agent und Event-Typ.
+ 3. Wählen Sie ein Event aus, um seine normalisierten Felder und den Roh-Payload zu inspizieren, und öffnen Sie dann die zugehörige Session, um den Ausführungskontext zu sehen.
+ 4. Wenn eine zugehörige Dauer fehlt, überprüfen Sie, ob Start- und Abschlussereignis dieselbe Korrelations-ID verwenden.
- Verwende den Events-Stream, um die Daten auf einen einzigen Agent-Lauf einzugrenzen und die normalisierten Event-Felder zu inspizieren.
+ Nutzen Sie den Events-Stream, um die Daten auf einen einzelnen Agentenlauf einzugrenzen und die normalisierten Event-Felder zu inspizieren.
- 
+ 
- Folge dem Event dann in seine Session. Der Trace zeigt, was unmittelbar davor und danach passiert ist – das ist notwendig, wenn das Payload allein mehrdeutig ist.
+ Folgen Sie dem Event dann in seine Session. Die Trace zeigt, was unmittelbar davor und danach geschehen ist – das ist notwendig, wenn der Payload allein mehrdeutig ist.
- 
+ 
- Vergleiche Korrelations-IDs und Zeitstempel in beiden Ansichten, wenn ein zugehöriges Event oder eine Dauer fehlt.
+ Vergleichen Sie Korrelations-IDs und Zeitstempel in beiden Ansichten, wenn ein zugehöriges Event oder eine Dauer fehlt.
- Gültige Filterwerte ermitteln, dann vollständige Event-Payloads für eine Session abrufen:
+ Ermitteln Sie gültige Filterwerte und rufen Sie dann vollständige Event-Payloads für eine Session ab:
```bash
fp list event_types
@@ -47,38 +58,109 @@ Jedes Event enthält einen Zeitstempel, eine Session-ID, eine Agent-ID, einen Ev
--full
```
- Verwende `fp --json events ... --fields ts,event_type,session_id,payload` für maschinenlesbare Inspektion.
+ Verwenden Sie `fp --json events ... --fields ts,event_type,session_id,payload` für maschinenlesbare Inspektion.
## Reservierte SDK-Felder
-Verwende `timestamp`, `session_id`, `agent_id`, `type` oder `environment` nicht als benutzerdefinierte Python-SDK-Felder. Gepaarte Event-Dauern wie die Dauer eines Tool-Ergebnisses werden vom SDK berechnet und können nicht manuell angegeben werden.
+Fünf Namen werden als benutzerdefinierte Felder grundsätzlich abgelehnt, da das SDK sie bei jedem Event setzt:
+
+`timestamp`, `session_id`, `agent_id`, `type`, `environment`.
+
+Elf weitere werden akzeptiert, aber typgeprüft, da der Ingest-Endpunkt sie aus dem Payload in typisierte Spalten hebt und für alles vom falschen Typ stillschweigend `NULL` speichert. Das SDK wirft stattdessen an der Aufrufstelle, wo Sie noch sehen können, was den Wert erzeugt hat.
+
+| Namen | Erforderlicher Typ |
+| --- | --- |
+| `duration_ms`, `input_tokens`, `output_tokens` | `int`, innerhalb des vorzeichenlosen 32-Bit-Bereichs. Ein Float oder Bool löst eine Ausnahme aus. |
+| `tool_name`, `tool_call_id`, `hook_name`, `hook_id`, `input_id`, `pause_id`, `error_type`, `model` | `str`. `None` löst eine Ausnahme aus, da die Zeile mit 200 OK ankäme und für jeden Filter auf dieses Feld unsichtbar wäre. |
+
+### Dauern
+
+Das SDK misst die Zeitspanne zwischen vier gepaarten Events und lehnt einen von Ihnen manuell übergebenen `duration_ms`-Wert ab: `tool_use` → `tool_result`, `hook_triggered` → `hook_completed`, `agent_pause` → `agent_resume` und `human_wait` → `human_input`.
+
+`model_response` ist die Ausnahme. Das SDK misst Modellaufrufe nie, daher übergeben Sie `duration_ms` selbst als ganzzahlige Millisekunden. Siehe [Korrelationsregeln](/de/reference/custom-agents) für die Paarungslogik.
## Lokale Grenzen
-- Der Failproof AI-Zustand liegt unter `~/.failproofai`, sofern nicht explizit anders konfiguriert.
-- `failproofai-sdk` speichert stets unter `~/.failproofai/custom-agents`. `FAILPROOFAI_HOME` verlagert dieses Verzeichnis; das Segment `custom-agents` wird immer angehängt, sodass der Spool-Bereich nicht außerhalb davon platziert werden kann. Nur das eigene `configure(base_dir=...)` des SDK schreibt an einen anderen Ort. `AGENTEYE_HOME` wird vom älteren `agenteye-collector` gelesen, um den Beobachtungsbereich festzulegen, und hat keinen Einfluss mehr darauf, wohin das SDK schreibt.
-- Umgebungs-Labels können über die SDK-Konfiguration oder `AGENTEYE_ENVIRONMENT` gesetzt werden.
-- Daemon-Zugangsdaten werden getrennt von nicht geheimen Einstellungen gespeichert.
+- Der Zustand von Failproof AI liegt unter `~/.failproofai`, sofern nicht explizit anders konfiguriert.
+- `failproofai-sdk` speichert immer unter `~/.failproofai/custom-agents`. `FAILPROOFAI_HOME` verlegt dieses Home-Verzeichnis; das Segment `custom-agents` wird immer angehängt, sodass der Spool nicht außerhalb davon abgelegt werden kann. Nur das eigene `configure(base_dir=...)` des SDK schreibt an einen anderen Ort. `AGENTEYE_HOME` wird vom älteren `agenteye-collector` gelesen, um festzustellen, was beobachtet werden soll, und beeinflusst nicht mehr, wohin das SDK schreibt.
+- Anmeldedaten liegen in `~/.failproofai/credentials.json`, mit Berechtigungen `0600`. Sie sind bewusst nicht in `config.json`, die mit einem einfachen Schreibvorgang geschrieben wird und die Umask erbt und somit für jeden lokalen Benutzer des Systems lesbar ist.
+
+Verwenden Sie stabile, niedrig-kardinalitäre Umgebungsnamen. Ein Komma wird von beiden Writern abgelehnt: Der Daemon weist eines in `collector.environment` zurück, und das SDK löst bei `configure(environment=...)` eine Ausnahme aus. Der Grund ist auf beiden Seiten derselbe – der Ingest-Endpunkt teilt dieses Feld an Kommas und überspringt die gesamte Zeile, antwortet mit `200 OK` und speichert nichts.
+
+## Maschinenkonfiguration
+
+Die nicht geheimen Einstellungen des Daemons befinden sich in `~/.failproofai/config.json`. `hooks_verbosity`, `redact` und `environment` haben kein CLI-Flag – bearbeiten Sie die Datei direkt. `sessions`, `hooks` und `machine_id` werden von `failproofai config` geschrieben, wenn diese Maschine mit der Cloud verbunden wird.
+
+| Schlüssel | Werte | Standard | Was er steuert |
+| --- | --- | --- | --- |
+| `collector.sessions` | `true` / `false` | `false`, und `true` sobald mit der Cloud verbunden | Agenten-Session-Transkripte übertragen. Ein Transkript enthält Prompts, Dateiinhalte und alles, was in ein Terminal eingefügt wurde. |
+| `collector.hooks` | `true` / `false` | `true` | Hook-Aktivität übertragen. Enthält Entscheidungen und Tool-Namen, niemals Dateiinhalte. |
+| `collector.hooks_verbosity` | `all` / `decisions` / `off` | `decisions` | `decisions` behält jede deny- und instruct-Entscheidung exakt und aggregiert die rund 99 %, die allow sind. |
+| `collector.redact` | `minimal` / `off` | `minimal` | Schwärzung, die angewendet wird, bevor irgendetwas die Maschine verlässt. |
+| `collector.environment` | beliebige Zeichenkette ohne Komma | `local` | Die Bezeichnung, die auf jedes von dieser Maschine gesendete Event gestempelt wird. |
+| `collector.machine_id` | beliebige Zeichenkette | eine bereits auf der Festplatte vorhandene ID, andernfalls eine neue zufällige UUID | Unter welcher Maschine das Dashboard diese Daten gruppiert. Wird von `--machine-id` geschrieben. Sie wird niemals vom Hostnamen abgeleitet. |
+
+
+ `failproofai backfill --help` nennt `~/.failproofai/config.toml`. Das ist ein veralteter Pfad aus einem früheren Home-Layout; kein aktueller Build schreibt ihn. Die Datei ist `config.json`.
+
+
+Die Verbindung mit der Cloud überträgt sowohl Policy-Entscheidungen als auch vollständige Session-Transkripte.
+
+
+ `--no-transcripts` deaktiviert Transkripte im Setup-Ablauf nicht. `failproofai config --token --no-transcripts` parst das Flag und liest es dann nie aus, und der Assistent verbindet die Maschine trotzdem mit aktivierten Sessions – Transkripte werden also weiter übertragen, während Sie glauben, abgemeldet zu haben.
-Verwende stabile Umgebungsnamen mit geringer Kardinalität. Kommas werden in Daemon-Umgebungs-Labels nicht unterstützt.
+ Um nur Entscheidungen zu senden, setzen Sie `collector.sessions` in `~/.failproofai/config.json` nach der Verbindung auf `false`:
-## Ein Umgebungs-Label ändern
+ ```json
+ {
+ "collector": {
+ "sessions": false
+ }
+ }
+ ```
+
+
+Ein Backfill folgt denselben Collector-Einstellungen und sendet daher nie etwas, das Ihre Konfiguration ausschließt. Erneutes Senden ist sicher: Die Schwärzung ist deterministisch, sodass ein erneut gesendetes Event identisch mit seinem ersten Sendevorgang gehasht wird und in der bereits vorhandenen Zeile aufgeht.
+
+## Eine Umgebungsbezeichnung ändern
+
+Das SDK und der Daemon stempeln jeweils ihre eigene Bezeichnung, und sie werden an verschiedenen Stellen gesetzt.
-
- Umgebungs-Labels werden vom sendenden SDK oder Failproof-Daemon vergeben. Öffne nach einer Änderung **Observe → Sessions** und verwende den Umgebungsfilter, um zu bestätigen, dass neue Sessions den neuen Wert tragen. Bestehende Sessions behalten ihre ursprüngliche Umgebung.
+
+ Setzen Sie sie im Code oder in der Umgebung des Prozesses, der die Events ausgibt. Der Standard ist `dev`.
-
-
- Konfiguriere bei `failproofai-sdk` die Umgebung im Code oder über die veraltete Umgebungsvariable. Führe die Daemon-Konfiguration erneut aus, wenn du Einstellungen auf Maschinenebene änderst.
+ ```python
+ import failproofai_sdk
+
+ failproofai_sdk.configure(environment="production-us-east")
+ ```
```bash
export AGENTEYE_ENVIRONMENT=production-us-east
- failproofai config
+ ```
+
+ `AGENTEYE_ENVIRONMENT` wird nur von `failproofai-sdk` gelesen. Weder die CLI noch der Daemon liest sie, sodass ein Export nichts an der Maschine ändert.
+
+
+ Bearbeiten Sie `collector.environment` in `~/.failproofai/config.json`. Der Standard ist `local`, und kein CLI-Flag setzt diesen Wert.
+
+ ```json
+ {
+ "collector": {
+ "environment": "production-us-east"
+ }
+ }
+ ```
+
+ ```bash
failproofai config --status
fp sessions --since 1h --env production-us-east
```
+
+ Umgebungsbezeichnungen werden vom ausgebenden SDK oder Failproof-Daemon vergeben, daher gibt es hier nichts zu ändern. Nachdem Sie eine an ihrer Quelle geändert haben, öffnen Sie **Observe → Sessions** und verwenden Sie den Umgebungsfilter, um zu bestätigen, dass neue Sessions den neuen Wert tragen. Bestehende Sessions behalten ihre ursprüngliche Umgebung.
+
\ No newline at end of file
diff --git a/docs/de/reference/failproof-cli.mdx b/docs/de/reference/failproof-cli.mdx
index 4802d1768..7db6ed618 100644
--- a/docs/de/reference/failproof-cli.mdx
+++ b/docs/de/reference/failproof-cli.mdx
@@ -1,149 +1,135 @@
---
title: "Failproof AI CLI"
-description: "Hooks installieren, lokale Richtlinien verwalten, Cloud verbinden und den lokalen Daemon betreiben."
+description: "Maschine einrichten, Richtlinien verwalten, lokale Aktivitäten einsehen und Cloud verbinden."
icon: "terminal"
---
-Installiere die lokale CLI mit `npm install -g failproofai`. Starte sie ohne Argumente, um das lokale Richtlinien-Dashboard zu öffnen.
+Installation mit `npm install -g failproofai`. Starte `failproofai` ohne Argumente, um das lokale Dashboard zu öffnen.
-Das Paket erfordert Node.js 20.9 oder neuer. Bun 1.3 oder neuer wird für Entwicklung und Quell-Installationen unterstützt. `failproofai configure` und `failproofai setup` sind Aliase für `failproofai config`; `failproofai p` ist ein Alias für `failproofai policies`.
+## Kernbefehle
-## Eine Maschine einrichten
+| Befehl | Funktion |
+| --- | --- |
+| `failproofai config` | Agents, den Hintergrunddienst und optionale Cloud-Verbindung einrichten |
+| `failproofai config --token ` | Einrichten und verbinden ohne Rückfragen |
+| `failproofai config --status` | Verbindung, Dienstversion und Pause-Status anzeigen |
+| `failproofai policies` | Richtlinien und deren Aktivierungsstatus auflisten |
+| `failproofai policies add ` | Eine Richtlinie aktivieren |
+| `failproofai policies add /` | Ein Richtlinienpaket installieren |
+| `failproofai policies remove ` | Eine Richtlinie deaktivieren oder ein Paket entfernen |
+| `failproofai policies show /` | Ein Paket vor der Installation prüfen |
+| `failproofai publish` | Eigene Richtlinien als Paket veröffentlichen |
+| `failproofai audit` | Lokale Agent-Verlaufsdaten scannen |
+| `failproofai harness` | Zusätzliche Sitzungsorte verwalten |
+| `failproofai flush` | Warteschlange mit Ereignissen sofort senden |
+| `failproofai backfill` | Ältere Agent-Verlaufsdaten erneut einlesen |
+| `failproofai update` | Ein npm-Upgrade abschließen und den Dienst aktualisieren |
+| `failproofai uninstall` | Hooks und den Dienst entfernen |
+
+`policy`, `pack` und `p` sind akzeptierte Aliasse für `policies`, jedoch verwendet die Dokumentation `policies`.
+
+## Maschine einrichten
```bash
npm install -g failproofai
-failproofai config \
- --connect https://app.befailproof.ai \
- --token \
- --machine-label checkout-prod-01
-failproofai policies --install
+failproofai config
+failproofai policies add FailproofAI/policies
failproofai config --status
```
-Starte `failproofai` ohne Argumente, um das lokale Richtlinien-Dashboard zu öffnen.
+Bei der Einrichtung wird kein Richtlinienpaket ausgewählt. Bevor du eines hinzufügst, wird nur `block-failproofai-commands` ausgeführt.
-| Befehl | Ergebnis |
-| --- | --- |
-| `failproofai config` | Interaktive Maschineneinrichtung starten |
-| `failproofai config --connect --token ` | Cloud-Ingest und Richtlinienbereitstellung verbinden |
-| `failproofai config --status` | Verbindungs-, Daemon-, Bereitstellungs- und Pausenstatus anzeigen |
-| `failproofai policies` | Eingebaute, benutzerdefinierte, konventionsbasierte, Pack- und Cloud-verwaltete Richtlinien auflisten |
-| `failproofai policies --install` | Hooks installieren und Richtlinien aktivieren |
-| `failproofai policy add ` | Eine Richtlinie aktivieren – eine eingebaute oder `:` aus einem installierten Pack |
-| `failproofai policy remove ` | Eine Richtlinie deaktivieren, gleiche Benennung |
-| `failproofai policies --uninstall` | Richtlinien deaktivieren oder Harness-Hooks entfernen |
-| `failproofai pack list` | Installierte Richtlinien-Packs und alle enthaltenen Richtlinien auflisten |
-| `failproofai pack add ` | Ein Richtlinien-Pack von einem GitHub-Release installieren; ohne Tag wird das neueste genommen und angeheftet |
-| `failproofai pack add --bundled` | Die eingebauten Richtlinien als Pack installieren, aus diesem Paket, ohne Netzwerkzugriff |
-| `failproofai pack build ` | Die drei Release-Assets für ein eigenes Pack erstellen |
-| `failproofai pack remove ` | Ein installiertes Pack deaktivieren |
-| `failproofai audit` | Lokale Agent-History durchsuchen und die lokale Audit-Ansicht öffnen |
-| `failproofai audit --schedule [days] --email ` | Wiederkehrende lokale Scans planen und Ergebnisse per E-Mail senden |
-| `failproofai audit --status` | Berichtsadresse, Intervall und nächsten geplanten Scan anzeigen |
-| `failproofai audit --no-schedule` | Wiederkehrende Scans stoppen, ohne die Audit-History zu löschen |
-| `failproofai harness list` | Zusätzliche Erfassungspfade auflisten |
-| `failproofai flush --wait` | Den aktuellen Ereignis-Spool übermitteln |
-| `failproofai backfill --since 30d` | Zuvor verarbeitete History erneut einlesen |
-| `failproofai config --pause [duration]` | Eine lokale Sitzung standardmäßig 30 Minuten pausieren, bis zu 8 Stunden |
-| `failproofai config --resume` | Eine pausierte lokale Sitzung fortsetzen; `--all` hinzufügen, um alle Pausen aufzuheben |
-| `failproofai update` | Paket-Migrationen abschließen und den Daemon aktualisieren |
-| `failproofai migrate --dry-run` | Ausstehende Home-Layout-Migrationen vorab anzeigen oder ausführen |
-| `failproofai uninstall` | Hooks und den Daemon entfernen, bevor das Paket deinstalliert wird |
-| `failproofai --version` | Die installierte Paketversion ausgeben |
-| `failproofai --help` | Befehle und allgemeine Nutzungshinweise anzeigen |
-
-## Konfigurationsflags
+Für die unbeaufsichtigte Cloud-Einrichtung:
-| Flag | Verwendung |
-| --- | --- |
-| `--connect --token ` | Nicht-interaktiv verbinden |
-| `--machine-id ` | Die stabile Maschinen-ID setzen |
-| `--machine-label ` | Das Dashboard-Label setzen oder ändern |
-| `--no-transcripts` | Entscheidungen ohne Transkriptinhalt senden |
-| `--disconnect` | Cloud-Richtlinienabfragen und Ereignisübermittlung stoppen |
-| `--status` | Aktuellen Maschinenstatus anzeigen |
-| `--pause [duration]` | Die neueste Sitzung im aktuellen Verzeichnis pausieren; akzeptiert Sekunden, Minuten oder Stunden, Standard ist 30 Minuten |
-| `--resume` | Eine passende Pause vorzeitig beenden |
-| `--session ` | Eine explizite Sitzung für Pause oder Fortsetzen auswählen |
-| `--all` | Mit `--resume` alle aktiven Pausen beenden |
+```bash
+export FAILPROOFAI_CLOUD_TOKEN=""
+failproofai config
+```
-Lokale Pausen setzen eingebaute, benutzerdefinierte, konventionsbasierte und Pack-Richtlinien für eine Sitzung aus. Sie laufen immer ab und deaktivieren keine Cloud-verwalteten Richtlinien. `block-failproofai-commands` – das immer aktiv ist und selbst weder deaktiviert noch pausiert werden kann – verhindert, dass ein instrumentierter Agent diesen Ausweg selbst nutzt.
+Um Entscheidungen ohne Transkripte zu senden, verbinde zunächst und setze `collector.sessions` in `~/.failproofai/config.json` auf `false`. Das aktuelle Setup-Flag `--no-transcripts` wird zwar geparst, wendet diese Einstellung jedoch nicht an.
-## Richtlinienflags
+Verwende `--machine-label ` nach der Verbindung der Maschine, um sie umzubenennen. `--connect ` ist der eingeschränktere Befehl zum reinen Anmelden einer bereits eingerichteten Maschine.
-| Flag | Verwendung |
-| --- | --- |
-| `--install`, `-i` | Richtlinien aktivieren und Harness-Hooks installieren |
-| `--uninstall`, `-u` | Richtlinien deaktivieren oder Hooks entfernen |
-| `--cli ` | Einen oder mehrere unterstützte Harnesses auswählen |
-| `--scope user\|project\|local\|all` | Den Konfigurationsbereich auswählen; `all` ist für die Deinstallation |
-| `--beta` | Beta-Richtlinien einschließen |
-| `--custom`, `-c ` | Eine benutzerdefinierte Richtliniendatei validieren und laden; wiederholbar |
+## Richtlinien und Pakete
+
+```bash
+failproofai policies
+failproofai policies add block-sudo
+failproofai policies show owner/repo
+failproofai policies add owner/repo --category git,database
+failproofai policies remove owner/repo
+```
+
+Alles mit einem Schrägstrich ist eine Paketquelle; alles ohne einen Schrägstrich ist ein Richtlinienname.
-## Übermittlungs- und Wartungsflags
+Nützliche Flags zur Paketauswahl:
-| Befehl | Flags |
+| Flag | Verwendung |
| --- | --- |
-| `backfill` | `--since <30d\|6m\|YYYY-MM-DD>`, `--dry-run` |
-| `flush` | `--wait`, `--timeout ` |
-| `update` | `--no-daemon` |
-| `migrate` | `--dry-run` |
-| `uninstall` | `--purge`, `--dry-run`, `--yes` |
+| `--policy a,b` | Benannte Richtlinien auswählen |
+| `--category x,y` | Kategorien auswählen |
+| `--all` | Alles auswählen |
+| `--cli ` | Auf benannte Harnesses beschränken |
-`failproofai update` sollte nach `npm install -g failproofai@latest` ausgeführt werden; es führt Home-Layout-Migrationen durch, installiert das passende Daemon-Binary und startet den Dienst neu. `--no-daemon` führt nur die Layout-Migration durch.
+Verwende `failproofai policies -i -c `, um eine benutzerdefinierte Richtlinie aus einem beliebigen Pfad zu laden. Konventionsdateien mit dem Namen `*policies.{js,mjs,ts}` unter `.failproofai/policies/` werden automatisch geladen.
-## Harness-Pfade
+## Durchsetzung pausieren
-```text
-failproofai harness list [harness]
-failproofai harness add-path [label=]
-failproofai harness remove-path
+```bash
+failproofai config --pause 10m
+failproofai config --status
+failproofai config --resume
```
-Unterstützte Harness-Namen sind `claude`, `codex`, `copilot`, `cursor`, `opencode`, `pi`, `hermes`, `openclaw`, `factory`, `devin`, `antigravity` und `goose`.
+Eine Pause gilt für eine lokale Sitzung und läuft stets ab. Sie pausiert keine Cloud-verwalteten Richtlinien und auch nicht `block-failproofai-commands`.
+
+## Audit und Zustellung
+
+```bash
+failproofai audit
+failproofai audit --schedule 7 --email team@example.com
+failproofai audit --status
+failproofai flush --wait
+failproofai backfill --since 30d --dry-run
+```
-Labels versehen abgeleitete Agent-IDs mit einem Namensraum, wenn zwei Stammverzeichnisse Kopien desselben Projekts enthalten. Überlappende Stammverzeichnisse und doppelte Labels werden abgelehnt, um doppelte Erfassung oder Cursor-Korruption zu verhindern. Die Konfiguration zusätzlicher Pfade wird ohne Daemon-Neustart neu geladen.
+`backfill` liest `~/.failproofai/config.json`. Lasse `--dry-run` weg, um den Verlauf erneut zu senden.
-Container-Umgebungen können dateibasierte Zusatzpfade durch eine kommagetrennte Variable namens `FAILPROOFAI__EXTRA_PATHS` ersetzen, zum Beispiel:
+## Zusätzliche Sitzungsorte
```bash
-export FAILPROOFAI_OPENCLAW_EXTRA_PATHS="user1=/srv/openclaw-a,user2=/srv/openclaw-b"
+failproofai harness list
+failproofai harness add-path claude work=/srv/team/.claude/projects
+failproofai harness remove-path claude work
```
-## Umgebungsvariablen
+Labels verhindern, dass Sitzungen aus zwei kopierten Home-Verzeichnissen unter derselben abgeleiteten Agent-ID zusammengeführt werden.
-Verwende Konfigurationsdateien für dauerhaftes Maschinenverhalten. Umgebungsvariablen sind am nützlichsten für Container, Tests und einzelne Prozesse.
+Unterstützte Harnesses sind `claude`, `codex`, `copilot`, `cursor`, `opencode`, `pi`, `hermes`, `openclaw`, `factory`, `devin`, `antigravity` und `goose`. Die Scope-Unterstützung unterscheidet sich; siehe [Harnesses](/de/reference/harnesses).
+
+## Nützliche Umgebungsvariablen
| Variable | Verwendung |
| --- | --- |
-| `FAILPROOFAI_HOME` | Das vollständige `~/.failproofai`-Layout verschieben |
-| `FAILPROOFAI_LOG_LEVEL` | Lokale Protokollierungsausführlichkeit einstellen |
-| `FAILPROOFAI_HOOK_LOG_FILE` | Hook-Diagnosedaten in eine ausgewählte Datei schreiben |
-| `FAILPROOFAI_TELEMETRY_DISABLED=1` | Anonyme Telemetrie für diesen Prozess deaktivieren |
-| `FAILPROOFAI_NO_FIRST_RUN=1` | Interaktive Ersteinrichtung überspringen |
-| `FAILPROOFAI_NO_AUTO_AUDIT=1` | Lokalen Audit nach der Einrichtung überspringen |
-| `FAILPROOFAI_LLM_BASE_URL` | Den von LLM-Richtlinien verwendeten OpenAI-kompatiblen Endpunkt überschreiben |
-| `FAILPROOFAI_LLM_API_KEY` | Den von LLM-Richtlinien verwendeten API-Schlüssel angeben |
-| `FAILPROOFAI_LLM_MODEL` | Das von LLM-Richtlinien verwendete Modell auswählen |
-| `FAILPROOFAI_POLICY_LOAD_TIMEOUT_MS` | Das Laden benutzerdefinierter Richtlinienmodule zeitlich begrenzen |
-| `FAILPROOFAI_NO_DOWNLOAD=1` | Das Abrufen von Packs und Daemon-Binaries ablehnen; bereits Installiertes wird weiter durchgesetzt |
-| `FAILPROOFAI_PACK_BASE_URL` | Packs von einem Spiegel statt von `github.com` abrufen |
-| `FAILPROOFAI__EXTRA_PATHS` | Konfigurierte zusätzliche Erfassungspfade für einen Harness ersetzen |
-| `NO_COLOR` | Farbige Terminalausgabe deaktivieren |
-
-Agenten-spezifische Home-Variablen wie `CLAUDE_PROJECTS_PATH`, `CURSOR_HOME`, `HERMES_HOME` und `OPENCLAW_HOME` überschreiben, wo Failproof AI lokale Sitzungen für diesen Harness erkennt.
-
-## Eine Maschine sicher pausieren oder entfernen
+| `FAILPROOFAI_CLOUD_TOKEN` | Cloud-Maschinenschlüssel |
+| `FAILPROOFAI_CLOUD_URL` | Die Cloud-URL überschreiben |
+| `FAILPROOFAI_HOME` | Das lokale Statusverzeichnis verschieben |
+| `FAILPROOFAI_NO_DOWNLOAD=1` | Paket- und Dienst-Downloads verweigern |
+| `FAILPROOFAI_DAEMON_BASE_URL` | Einen Dienst-Binär-Spiegel verwenden |
+| `FAILPROOFAI_PACK_BASE_URL` | Einen Paketspiegel verwenden |
+| `FAILPROOFAI_NO_FIRST_RUN=1` | Erststart-Aufforderungen deaktivieren |
+| `FAILPROOFAI_TELEMETRY_DISABLED=1` | Anonyme CLI-Telemetrie deaktivieren |
+| `FAILPROOFAI__EXTRA_PATHS` | Zusätzliche Pfade für einen Harness ersetzen |
+| `NO_COLOR` | Terminalfarbe deaktivieren |
+
+## Entfernen oder aktualisieren
```bash
-failproofai config --pause
-failproofai config --status
-failproofai config --resume
+npm install -g failproofai@latest
+failproofai update
```
-Eine lokale Sitzungspause deaktiviert keine Cloud-verwalteten Richtlinien. Stelle Cloud-Deployments über den Cloud-Enforcement-Workflow wieder her, wenn das Rollout selbst das Problem ist.
-
-Bevor das npm-Paket entfernt wird, installierte Hooks und den Daemon entfernen:
+Vor dem Entfernen des Pakets:
```bash
failproofai uninstall --dry-run
@@ -151,8 +137,8 @@ failproofai uninstall --yes
npm rm -g failproofai
```
-Führe `failproofai --help` aus, um versionsspezifische Details zu erhalten.
-
- Führe `failproofai uninstall` vor `npm rm -g failproofai` aus; npm entfernt weder installierte Agent-Hooks noch den Daemon-Dienst.
-
\ No newline at end of file
+ Führe `failproofai uninstall` aus, bevor du das npm-Paket entfernst. npm entfernt keine installierten Hooks und keinen Hintergrunddienst.
+
+
+Führe `failproofai help ` aus, um die vollständigen Optionen deiner installierten Version zu sehen.
\ No newline at end of file
diff --git a/docs/de/reference/harnesses.mdx b/docs/de/reference/harnesses.mdx
index 382903137..a99f448e9 100644
--- a/docs/de/reference/harnesses.mdx
+++ b/docs/de/reference/harnesses.mdx
@@ -1,17 +1,19 @@
---
title: "Agent-Harnesses"
-description: "Sitzungen erfassen und Richtlinien für alle 12 unterstützten Agent-Harnesses durchsetzen."
+description: "Sitzungen erfassen und Richtlinien in allen 12 unterstützten Agent-Harnesses durchsetzen."
icon: "plug-zap"
---
Ein Harness ist die Umgebung, in der Ihr Agent tatsächlich ausgeführt wird. Failproof AI unterstützt zwölf davon, in zwei Klassen:
-- **Coding CLIs** (10) — Claude Code, Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi, Factory Droid, Devin CLI, Antigravity CLI, Goose
-- **Chat- und Assistent-Gateways** (2) — Hermes (Slack, Telegram, Cron), OpenClaw (selbstgehosteter Assistent)
+- **Coding-CLIs** (10) — Claude Code, Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi, Factory Droid, Devin CLI, Antigravity CLI, Goose
+- **Chat- und Assistenz-Gateways** (2) — Hermes (Slack, Telegram, Cron), OpenClaw (selbst gehosteter Assistent)
-Dieselben Richtlinien und dieselbe Sitzungshistorie gelten unabhängig davon, in welchem Harness ein Agent läuft. Eine Adapter-Schicht überführt die nativen Ereignisnamen, Tool-Namen und Tool-Eingabefelder jedes Harness in 29 kanonische Ereignisse, bevor eine Richtlinie ausgeführt wird.
+Dieselben Richtlinien und dieselbe Sitzungshistorie gelten unabhängig davon, in welchem Harness ein Agent ausgeführt wird. Eine Adapterschicht übersetzt die nativen Ereignisnamen, Werkzeugnamen und Werkzeug-Eingabefelder jedes Harness in 29 kanonische Ereignisse, bevor eine Richtlinie ausgeführt wird.
-Ein Agent, der in **keinem** der zwölf Harnesses läuft, wird direkt über das [Python SDK](/de/reference/custom-agents) instrumentiert. Das ist ein anderer Vertrag, und er sollte klar benannt werden: Das SDK liefert Tracing, Sitzungen, Evaluierungen und Audits — **es setzt Richtlinien jedoch nicht eigenständig durch.** Das Blockieren einer unsicheren Aktion, bevor sie ausgeführt wird, erfordert einen Durchsetzungs-Hook an der Tool-Grenze Ihrer Laufzeitumgebung; [kontaktieren Sie uns](mailto:support@befailproof.ai) und wir werden es einrichten.
+Ein Agent, der in **keinem** der zwölf Harnesses läuft, wird direkt mit dem [Python SDK](/de/reference/custom-agents) instrumentiert. Das ist ein anderer Vertrag, und es lohnt sich, das klar zu benennen: Das SDK liefert Tracing, Sitzungen, Evaluierungen und Audits — **es setzt Richtlinien nicht selbständig durch.** Um eine unsichere Aktion zu blockieren, bevor sie ausgeführt wird, ist ein Enforcement-Hook an der Tool-Grenze Ihrer Laufzeitumgebung erforderlich; [kontaktieren Sie uns](mailto:support@befailproof.ai), und wir werden eine Zuordnung vornehmen.
+
+## Hook-Scopes
| Harness | Unterstützte Hook-Scopes |
| --- | --- |
@@ -20,61 +22,142 @@ Ein Agent, der in **keinem** der zwölf Harnesses läuft, wird direkt über das
| Factory Droid, Devin CLI, Antigravity CLI, Goose | User, project |
| Hermes, OpenClaw | User |
-Jede Integration normalisiert ihre nativen Hook-Ereignisnamen, Tool-Namen und Tool-Eingabefelder, bevor Richtlinien ausgeführt werden. Eine Richtlinie kann nur auf Ereignisse reagieren, die der Harness exponiert; testen Sie das End-of-Turn- und Instruction-Verhalten auf dem genauen Harness und der Version, die Sie deployen.
+Claude Code ist der einzige Harness mit einem **local**-Scope. Hermes und OpenClaw haben überhaupt keine Projektkonfiguration — sie sind nur im User-Scope verfügbar, und die CLI lehnt `--scope project` für sie ab.
-## Durchsetzungsfähigkeiten
+Jede Integration normalisiert ihre nativen Hook-Ereignisnamen, Werkzeugnamen und Werkzeug-Eingabefelder, bevor Richtlinien ausgeführt werden. Eine Richtlinie kann nur auf Ereignisse reagieren, die der Harness bereitstellt; testen Sie End-of-Turn- und Instruction-Verhalten auf dem genauen Harness und der Version, die Sie einsetzen.
-„Blockieren" bedeutet, dass das zurückgegebene Urteil des aktuellen Adapters vom angegebenen Harness verarbeitet wird. Post-Tool-Blocking kann das dem Modell angezeigte Ergebnis ersetzen, aber einen bereits eingetretenen Tool-Nebeneffekt nicht rückgängig machen.
+## Ablageorte der Hook-Konfiguration
-| Harness | Verifizierte Blockierungsereignisse | Nur-Beobachtungs- oder Nicht-Blockierungs-Hinweise |
+| Harness | User-Scope | Project-Scope |
+| --- | --- | --- |
+| Claude Code | `~/.claude/settings.json` | `.claude/settings.json` (local: `.claude/settings.local.json`) |
+| Codex | `~/.codex/hooks.json` | `.codex/hooks.json` |
+| GitHub Copilot CLI | `~/.copilot/hooks/failproofai.json` | `.github/hooks/failproofai.json` |
+| Cursor | `~/.cursor/hooks.json` | `.cursor/hooks.json` |
+| OpenCode | `~/.config/opencode/opencode.json` | `.opencode/opencode.json` |
+| Pi | `~/.pi/agent/settings.json` | `.pi/settings.json` |
+| Hermes | `~/.hermes/config.yaml` | — |
+| OpenClaw | `~/.openclaw/openclaw.json` | — |
+| Factory Droid | `~/.factory/hooks.json` | `.factory/hooks.json` |
+| Devin CLI | `~/.config/devin/config.json` | `.devin/config.json` |
+| Antigravity CLI | `~/.gemini/config/hooks.json` | `.agents/hooks.json` |
+| Goose | `~/.agents/plugins/failproofai/hooks/hooks.json` | `.agents/plugins/failproofai/hooks/hooks.json` |
+
+OpenCode, Pi und OpenClaw sind Plugin-Integrationen und keine Shell-Hook-Integrationen: Die oben genannte Datei registriert ein Plugin- oder Erweiterungspaket, das die failproofai-Binärdatei aufruft und ihr Ergebnis übersetzt.
+
+## Enforcement-Fähigkeiten
+
+„Blockieren" bedeutet, dass das zurückgegebene Ergebnis des aktuellen Adapters vom genannten Harness verarbeitet wird. Post-Tool-Blocking kann das dem Modell angezeigte Ergebnis ersetzen, aber einen bereits eingetretenen Tool-Seiteneffekt nicht rückgängig machen.
+
+| Harness | Verifizierte blockierende Ereignisse | Nur-Beobachtungs- oder nicht-blockierende Einschränkungen |
+| --- | --- | --- |
+| Claude Code | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PreCompact` und mehrere Aufgaben-/Konfigurationsereignisse | `PostToolUse`, Sitzungs-Lifecycle, Benachrichtigungen und Post-Failure-Ereignisse sind rein observational. |
+| Codex | `PreToolUse`, `PermissionRequest`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `PostToolUse` | Post-Tool-Blocking ersetzt das Ergebnis nach der Ausführung; Session-Start- und Compact-Ereignisse sind im aktuellen Adapter rein observational. |
+| GitHub Copilot CLI | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PostToolUse` | Post-Tool-Blocking ersetzt das Ergebnis nach der Ausführung; Sitzungs- und Benachrichtigungsereignisse sind observational. |
+| Cursor | `PreToolUse`, `UserPromptSubmit`, `Stop` | `PostToolUse` und Sitzungsereignisse sind observational. |
+| OpenCode | `PreToolUse` | Post-Tool- und Lifecycle-Ereignisse sind observational; die aktuelle Stop-Behandlung ist eine Anweisung für einen späteren Schritt und kein verifiziertes Gate. `PermissionRequest` wird überhaupt nicht ausgeführt. |
+| Pi | `PreToolUse`, `UserPromptSubmit` | Post-Tool- und Lifecycle-Ereignisse sind observational; Stop-Anweisungen gelten für einen späteren Schritt. |
+| Hermes | `PreToolUse` | Post-Tool-, Sitzungs- und Subagent-Stop-Ergebnisse sind keine Gates. Es ist kein `Stop`-Ereignis installiert. |
+| OpenClaw | `PreToolUse`, `UserPromptSubmit`, `Stop` | Post-Tool-, Sitzungs-, Subagent-Stop- und Compaction-Ereignisse sind observational. |
+| Factory Droid | `PreToolUse`, `UserPromptSubmit`, `Stop`, `PreCompact` | Post-Tool- und Subagent-Stop-Ergebnisse sind observational. |
+| Devin CLI | `PreToolUse`, `UserPromptSubmit`, `Stop`, bedingtes `PermissionRequest` | Permission-Hooks laufen nicht in jedem Permission-Modus; Post-Tool- und Sitzungsereignisse sind observational. |
+| Antigravity CLI | `PreToolUse`, `Stop` | User-Prompt- und Post-Tool-Ergebnisse sind observational; Prompt-Anweisungen können dennoch injiziert werden. |
+| Goose | `PreToolUse` | User-Prompt-, Post-Tool- und Sitzungsereignisse sind observational. Ein nativer blockierender Stop-Hook existiert vorgelagert, ist aber vom aktuellen Adapter nicht installiert. |
+
+Ein Ereignis, das in beiden Spalten fehlt, ist **nicht verifiziert** — behandeln Sie es als unbekannt, niemals als blockierend.
+
+### Bedingungen an einem aufgeführten Gate
+
+Mehrere der obigen Zeilen sind echte Gates, die dennoch begrenzt oder bedingt sind. Eine Richtlinie, die auf eines dieser Gates angewiesen ist, benötigt die Bedingung ebenso wie die Zeile selbst.
+
+| Harness | Ereignis | Bedingung |
| --- | --- | --- |
-| Claude Code | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PreCompact` sowie mehrere Task-/Konfigurationsereignisse | `PostToolUse`, Sitzungslebenszyklus, Benachrichtigungen und Post-Failure-Ereignisse sind nur beobachtend. |
-| Codex | `PreToolUse`, `PermissionRequest`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `PostToolUse` | Post-Tool-Blocking ersetzt das Ergebnis nach der Ausführung; Sitzungsstart- und Compact-Ereignisse sind im aktuellen Adapter nur beobachtend. |
-| GitHub Copilot CLI | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PostToolUse` | Post-Tool-Blocking ersetzt das Ergebnis nach der Ausführung; Sitzungs- und Benachrichtigungsereignisse sind nur beobachtend. |
-| Cursor | `PreToolUse`, `UserPromptSubmit`, `Stop` | `PostToolUse` und Sitzungsereignisse sind nur beobachtend. |
-| OpenCode | `PreToolUse` | Post-Tool- und Lifecycle-Ereignisse sind nur beobachtend; die aktuelle Stop-Behandlung ist eine Anleitung für einen späteren Turn, kein verifiziertes Gate. |
-| Pi | `PreToolUse`, `UserPromptSubmit` | Post-Tool- und Lifecycle-Ereignisse sind nur beobachtend; Stop-Anleitung gilt für einen späteren Turn. |
-| Hermes | `PreToolUse` | Post-Tool-, Sitzungs- und Subagent-Stop-Urteile sind keine Gates. |
-| OpenClaw | `PreToolUse`, `UserPromptSubmit`, `Stop` | Post-Tool-, Sitzungs-, Subagent-Stop- und Kompaktierungsereignisse sind nur beobachtend. |
-| Factory Droid | `PreToolUse`, `UserPromptSubmit`, `Stop`, `PreCompact` | Post-Tool- und Subagent-Stop-Urteile sind nur beobachtend. |
-| Devin CLI | `PreToolUse`, `UserPromptSubmit`, `Stop`, bedingtes `PermissionRequest` | Permission-Hooks laufen nicht in jedem Permission-Modus; Post-Tool- und Sitzungsereignisse sind nur beobachtend. |
-| Antigravity CLI | `PreToolUse`, `Stop` | User-Prompt- und Post-Tool-Urteile sind nur beobachtend; Prompt-Anweisungen können trotzdem injiziert werden. |
-| Goose | `PreToolUse` | User-Prompt-, Post-Tool- und Sitzungsereignisse sind nur beobachtend. Ein nativer blockierender Stop-Hook existiert vorgelagert, wird aber vom aktuellen Adapter nicht installiert. |
-
-Die Fähigkeiten sind versionsabhängig. Führen Sie nach einem Upgrade eines Agent-CLI erneute Tests durch, insbesondere wenn eine Richtlinie auf Prompt-, Stop-, Permission- oder Post-Tool-Verhalten anstatt auf das übliche Pre-Tool-Gate angewiesen ist.
+| Claude Code | `Stop`, `SubagentStop` | Begrenzt durch `CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`, Standard 8. Wird bei End-Turn-Pfaden verworfen |
+| Cursor | `Stop` | Begrenzt durch `loop_limit`, Standard 5, und nur verarbeitet, wenn der Schritt abgeschlossen ist — ein Benutzerabbruch oder ein Schritt-Fehler verwirft ihn |
+| Cursor | `Stop` | **Cursor Cloud Agent VMs führen überhaupt keine `stop`- oder `subagentStop`-Hooks aus.** Das Gate gilt nur für lokale Sitzungen |
+| Codex | `SubagentStop` | Nur ThreadSpawn-Subagenten lösen es aus; jede andere Subagent-Quelle führt den Hook nie aus |
+| GitHub Copilot CLI | `SubagentStop` | Wird für `isSidekick`-Subagenten vollständig übersprungen |
+| Devin CLI | `PermissionRequest` | Wird unter `--permission-mode dangerous` nie ausgelöst und nie für automatisch genehmigte schreibgeschützte Tools |
+| OpenCode | `PermissionRequest` | Ein toter Hook: `permission.ask` wird vorgelagert deklariert und dokumentiert, aber nie aufgerufen, sodass die Richtlinie nicht einmal ausgeführt wird |
+| Hermes | `Stop` | Kein `Stop`-Ereignis ist installiert, bewusst so gewählt. Die fünf eingebauten `require-*-before-stop`-Richtlinien sind auf Hermes nicht anwendbar |
+| Goose | `Stop` | Gleiches Ergebnis: kein `Stop` ist installiert, sodass die fünf eingebauten `require-*-before-stop`-Richtlinien nicht anwendbar sind |
+
+### Wo `instruct()` degradiert
+
+Ein `deny` ist nicht das einzige Ergebnis, das eine Richtlinie zurückgibt. `instruct()` übergibt dem Agenten eine Direktive und lässt die Aktion fortfahren — aber nicht jeder Harness hat einen Kanal, um eine solche zu übermitteln. Wo kein Kanal vorhanden ist, lässt failproofai die Aktion zu und schreibt die Anweisung für das Protokoll des Betreibers nach stderr; das Modell sieht sie nie.
+
+| Harness | Ereignisse, bei denen `instruct()` zu einem stderr-Hinweis degradiert |
+| --- | --- |
+| Hermes | Jedes Ereignis |
+| Goose | Jedes Ereignis |
+| Pi | Jedes Ereignis außer `Stop` |
+| OpenClaw | Jedes Ereignis außer `Stop` |
+| Factory Droid | Jedes Ereignis außer `Stop` |
+| Antigravity CLI | Jedes Ereignis außer `Stop` und `UserPromptSubmit` |
+
+Überall sonst wird die Anweisung über den eigenen Additional-Context-Kanal des Harness zurückgegeben.
+
+### Versionen, gegen die diese Angaben geprüft wurden
+
+Eine Version ist Teil der Aussage, keine Fußnote. Führen Sie nach einem Upgrade einer Agent-CLI erneut Tests durch, insbesondere wenn eine Richtlinie auf Prompt-, Stop-, Permission- oder Post-Tool-Verhalten statt auf das übliche Pre-Tool-Gate angewiesen ist.
+
+| Harness | Geprüfte Version |
+| --- | --- |
+| Claude Code | 2.1.220 |
+| Codex | `fe01054a`, mit `PostToolUse` live erneut geprüft bei 0.147.0 |
+| GitHub Copilot CLI | 1.0.71, einige Call-Sites erneut gelesen in 1.0.68 und 1.0.78 |
+| Cursor | cursor-agent 2026.07.16-899851b |
+| OpenCode | 1.18.9, erneut geprüft bei 1.14.33 |
+| Pi | 0.80.10 |
+| Hermes | hermes-agent `5771a6e` |
+| OpenClaw | v2026.7.2 |
+| Factory Droid | droid 0.175.1 |
+| Devin CLI | 3000.2.17 |
+| Antigravity CLI | agy 1.1.8 |
+| Goose | 1.43.0 |
+
+
+ Mehrere Codex-Zeilen verweisen auf Quellpfade, die nach `fe01054a` umstrukturiert wurden und bei 0.147.0 nicht mehr existieren. Sie sind nicht als falsch bekannt, aber gegen kein ausgeliefertes Codex verifiziert und stehen für eine erneute Prüfung an. Nur die Codex-`PostToolUse`-Zeile wurde live erneut geprüft.
+
+
+## VS Code-Agent-Modus
+
+Der integrierte Copilot-Chat-Agentenmodus von VS Code ist **keine dreizehnte Integration**. Er erkennt Hook-Konfigurationen aus `.github/hooks/*.json`, `~/.copilot/hooks/*.json` und `~/.claude/settings.json` — genau den Pfaden, in die die `copilot`- und `claude`-Installationen bereits schreiben — und verwendet denselben Claude-artigen Deny-Vertrag. Die Installation eines der beiden setzt Richtlinien bereits in VS-Code-Agentenmodus-Sitzungen durch.
+
+Die Funktion ist eine Vorschau und erfordert ein aktives GitHub-Copilot-Abonnement sowie den Agentenmodus.
## Capture- und Policy-Hooks installieren
1. Öffnen Sie **Administration → Keys** und erstellen Sie einen Schlüssel mit `events:add` und `policies:pull`, benannt nach der Maschine oder Umgebung.
- 2. Verbinden Sie auf der Zielmaschine die lokale CLI mit dem angezeigten Schlüssel und installieren Sie die Harness-Hooks.
- 3. Starten Sie eine neue Agent-Sitzung und bestätigen Sie dann deren Hook- und Sitzungsereignisse unter **Observe → Events**.
- 4. Öffnen Sie **Observe → policy** für dasselbe Zeitfenster und bestätigen Sie, dass eine Richtlinienentscheidung der Maschine zugeordnet ist.
+ 2. Verbinden Sie auf der Zielmaschine die lokale CLI mit dem angezeigten Schlüssel.
+ 3. Starten Sie eine neue Agentensitzung und bestätigen Sie deren Hook- und Sitzungsereignisse unter **Observe → Events**.
+ 4. Öffnen Sie **Observe → policy** für dasselbe Zeitfenster und bestätigen Sie, dass eine Richtlinienentscheidung der Maschine zugeordnet wird.
- Die Verbindung beginnt mit einem Maschinenschlüssel. Stellen Sie sicher, dass er sowohl Ingestion- als auch Policy-Delivery-Berechtigungen enthält, bevor Sie das Secret kopieren.
+ Die Verbindung beginnt mit einem Maschinenschlüssel. Vergewissern Sie sich, dass er sowohl Ingestion- als auch Policy-Delivery-Berechtigungen enthält, bevor Sie sein Geheimnis kopieren.
- 
+ 
- Nach der Installation der Hooks sollte der Ereignis-Stream neue Ereignisse von der verbundenen Maschine und Umgebung anzeigen.
+ Nach der Installation der Hooks sollte der Ereignisstrom neue Ereignisse von der verbundenen Maschine und Umgebung anzeigen.
- 
+ 
- Überprüfen Sie abschließend, ob Richtlinienentscheidungen derselben Maschine zugeordnet werden. Dies bestätigt, dass der Harness sowohl Richtlinienaktivitäten als auch Trace-Ereignisse meldet.
+ Vergewissern Sie sich abschließend, dass Richtlinienentscheidungen derselben Maschine zugeordnet werden. Dies bestätigt, dass der Harness sowohl Richtlinienaktivitäten als auch Trace-Ereignisse meldet.
- 
+ 
- Hooks für alle erkannten Harnesses installieren:
+ `failproofai config` verbindet Hooks mit jeder gefundenen unterstützten Agent-CLI, installiert den Daemon und verbindet die Cloud, wenn ein Schlüssel vorhanden ist:
```bash
- failproofai config \
- --connect https://app.befailproof.ai \
- --token
- failproofai policies --install
+ failproofai config --token
+ failproofai policies add FailproofAI/policies
```
- Oder gezielt benannte Harnesses und einen Konfigurationsscope ansprechen:
+ Das Setup wählt keine Richtlinien aus, weshalb der zweite Befehl erforderlich ist.
+
+ Um einen Harness manuell zu verbinden — ohne `--cli` erkennt `--install`, was installiert ist, und fragt nach:
```bash
failproofai policies --install \
@@ -82,9 +165,9 @@ Die Fähigkeiten sind versionsabhängig. Führen Sie nach einem Upgrade eines Ag
--scope user
```
- Der Project-Scope hält die Hook-Konfiguration bei einem Repository. Der User-Scope deckt die Arbeit über Repositories hinweg ab. Claude Code unterstützt außerdem den Local-Scope; die Unterstützung variiert je nach Harness, und die CLI lehnt nicht unterstützte Kombinationen ab.
+ Der Project-Scope hält die Hook-Konfiguration bei einem Repository. Der User-Scope deckt Arbeit über Repositories hinweg ab. Prüfen Sie die Scope-Tabelle oben, bevor Sie `--cli` und `--scope` kombinieren; die CLI lehnt ein nicht unterstütztes Paar ab.
- Die Maschine und ihre Ereignisse überprüfen:
+ Überprüfen Sie die Maschine und ihre Ereignisse:
```bash
failproofai config --status
@@ -94,16 +177,20 @@ Die Fähigkeiten sind versionsabhängig. Führen Sie nach einem Upgrade eines Ag
-## Einen nicht-standardmäßigen Sitzungspfad hinzufügen
+
+ Bei headlosen `copilot -p`-Ausführungen, die aus einem neuen Verzeichnis gestartet wurden, wurde das Project-Scope-`.github/hooks/failproofai.json` **nicht** geladen. Behandeln Sie den User-Scope als zuverlässigen Enforcement-Punkt für Copilot in CI, bis das gegenteilig verifiziert ist.
+
+
+## Einen nicht standardmäßigen Sitzungspfad hinzufügen
- Zusätzliche Pfade werden auf der Maschine registriert, nicht in der Cloud. Nach dem Hinzufügen öffnen Sie **Observe → Sessions**, filtern Sie nach der Umgebung der Maschine und bestätigen Sie, dass Sitzungen aus dem neuen Pfad erscheinen. Öffnen Sie eine Sitzung und überprüfen Sie Agent, Harness und Ereignis-Timestamps, bevor Sie sie in einem Audit verwenden.
+ Zusätzliche Pfade werden auf der Maschine registriert, nicht in der Cloud. Nachdem Sie einen hinzugefügt haben, öffnen Sie **Observe → Sessions**, filtern Sie nach der Umgebung der Maschine und bestätigen Sie, dass Sitzungen aus dem neuen Pfad erscheinen. Öffnen Sie eine Sitzung und prüfen Sie Agent, Harness und Ereignis-Zeitstempel, bevor Sie sie in einem Audit verwenden.
- 
+ 
- Einen Pfad mit optionalem Label hinzufügen und dann die konfigurierten Pfade prüfen:
+ Fügen Sie einen Pfad mit einem optionalen Label hinzu und überprüfen Sie dann die konfigurierten Pfade:
```bash
failproofai harness add-path claude checkout=/srv/checkout/.claude
@@ -112,10 +199,12 @@ Die Fähigkeiten sind versionsabhängig. Führen Sie nach einem Upgrade eines Ag
failproofai backfill --since 7d
```
- Einen Pfad entfernen mit `failproofai harness remove-path claude checkout`.
+ Entfernen Sie einen Pfad mit `failproofai harness remove-path claude checkout`.
+
+ Das Label gibt den abgeleiteten Agent-IDs einen Namensraum. Zwei Orte, die Kopien desselben Projekts enthalten, leiten aus dem Transkript dieselbe ID ab — ohne Label verschmelzen sie zu einem einzigen Agenten. Überlappende Roots und doppelte Labels werden abgelehnt — siehe [die CLI-Referenz](/de/reference/failproof-cli) für die Gründe jeder Ablehnung.
- Führen Sie nach der Installation eine neue Sitzung durch. Überprüfen Sie sowohl den Live-Ereignis-Stream als auch eine tatsächliche Richtlinienentscheidung, bevor Sie den Rollout ausweiten.
+ Führen Sie nach der Installation eine neue Sitzung durch. Überprüfen Sie sowohl den Live-Ereignisstrom als auch eine tatsächliche Richtlinienentscheidung, bevor Sie den Rollout ausweiten.
\ No newline at end of file
diff --git a/docs/de/reference/http-api.mdx b/docs/de/reference/http-api.mdx
index 403e0bd1b..ed9d0ba34 100644
--- a/docs/de/reference/http-api.mdx
+++ b/docs/de/reference/http-api.mdx
@@ -4,71 +4,121 @@ description: "Authentifizierung bei der öffentlichen Failproof AI Cloud `/v1` A
icon: "braces"
---
-Die öffentliche API wird unter `/v1` auf der Origin Ihres Failproof AI-Dashboards bereitgestellt.
+Die öffentliche API wird unter `/v1` auf dem Origin Ihres Failproof AI-Dashboards bereitgestellt. In der Failproof AI Cloud ist dieser Origin `https://app.befailproof.ai`, der Basispfad lautet also `https://app.befailproof.ai/v1`. Bei einem selbst gehosteten Deployment ist es Ihr eigener Dashboard-Host gefolgt von `/v1`; übergeben Sie diesen Host an `fp` mit `--base-url ` oder `FP_DASHBOARD_URL`.
-## Schlüssel erstellen und eine Anfrage stellen
+## Schlüssel erstellen und eine Anfrage senden
- 1. Öffnen Sie **Administration → Keys**, wählen Sie **Create key** und wählen Sie das engste Berechtigungs-Preset, das die Integration abdeckt.
- 2. Fügen Sie individuelle Berechtigungen nur bei Bedarf hinzu, erstellen Sie den Schlüssel und kopieren Sie das einmalig angezeigte Secret.
+ 1. Öffnen Sie **Administration → Keys**, wählen Sie **neuer Schlüssel** und wählen Sie das engste Berechtigungs-Preset, das die Integration abdeckt.
+ 2. Fügen Sie einzelne Berechtigungen nur bei Bedarf hinzu, erstellen Sie den Schlüssel und kopieren Sie das einmalige Geheimnis.
3. Senden Sie eine Testanfrage an `/v1/sessions` und bestätigen Sie, dass der Schlüssel auf der Keys-Seite aktiv bleibt.
- 4. Rotieren oder deaktivieren Sie den Schlüssel über sein Aktionsmenü, wenn sich der Eigentümer der Integration ändert.
+ 4. Rotieren oder deaktivieren Sie den Schlüssel über sein Aktionsmenü, wenn die Integration den Besitzer wechselt.
- 
+ 
- Der Erstellungs-Drawer ist oben abgebildet. Das einmalige Secret erscheint erst, nachdem Sie **create** ausgewählt haben – kopieren Sie es, bevor Sie die Bestätigung schließen.
+ Der Erstellungs-Drawer ist oben abgebildet. Das einmalige Geheimnis erscheint erst nach der Erstellung des Schlüssels; kopieren Sie es, bevor Sie die Bestätigung schließen.
- Erstellen Sie einen Read-Schlüssel und verwenden Sie ihn direkt mit `fp` oder `curl`:
+ Erstellen Sie einen Leseschlüssel und verwenden Sie ihn direkt mit `fp` oder `curl`. `fp` liest den Schlüssel aus `--api-key` oder aus `FP_API_KEY`:
```bash
fp keys create reliability-reader \
--permission-set read-only
- fp --api-key sessions --since 24h
+ export FP_API_KEY=""
+ fp --org reliability-team sessions --since 24h
```
```bash
curl "https://app.befailproof.ai/v1/sessions?limit=20" \
- -H "Authorization: Bearer $FAILPROOFAI_KEY"
+ -H "Authorization: Bearer $FP_API_KEY" \
+ -H "X-AgentEye-Org: reliability-team"
```
-Schlüssel sind auf eine Organisation und ein Berechtigungs-Set beschränkt. Eine Anfrage ohne die erforderliche Berechtigung des Endpunkts gibt `403` zurück und benennt die fehlende Berechtigung.
+Schlüssel sind auf eine Organisation und eine flache Liste von Berechtigungen beschränkt. Ein Berechtigungs-Preset befüllt diese Liste nur zum Zeitpunkt der Erstellung — der Schlüssel speichert die ausgeweiteten Grants, sodass eine spätere Änderung des Presets den Schlüssel nicht beeinflusst. Eine Anfrage ohne die erforderliche Berechtigung des Endpunkts gibt `403` zurück und benennt die fehlende Berechtigung.
## Organisationsauswahl
-Ein organisationsbezogener Schlüssel agiert automatisch im Kontext seiner Organisation. Ein instanzweit gültiger Schlüssel kann pro Anfrage eine Organisation auswählen:
+Ein Organisationsschlüssel agiert automatisch für seine Organisation. Ein instanzweiter Schlüssel wählt eine Organisation pro Anfrage, und ein Tenant mit mehr als einer Organisation muss im Schlüsselmodus immer eine angeben — `fp` sendet niemals eine gespeicherte Organisation, wenn es sich mit einem Schlüssel authentifiziert.
+
+| Aufrufer | So benennen Sie die Organisation |
+| --- | --- |
+| `fp`, pro Aufruf | `--org `, vor dem Unterbefehl |
+| `fp`, aus der Umgebung | `FP_ORG` |
+| Rohes HTTP | der `X-AgentEye-Org: ` Anfrage-Header |
+
+`X-AgentEye-Org` behält seine ursprüngliche Schreibweise auf dem Wire. Es ist der Header, den das Dashboard liest, um die aktive Organisation aufzulösen; eine Umbenennung in einem Client macht die Anfrage ungültig.
- Verwenden Sie den Organisations-Umschalter im Dashboard-Header, bevor Sie **Administration → Keys** öffnen. Dort erstellte Schlüssel gehören zur ausgewählten Organisation. Bestätigen Sie den Organisations-Slug in der URL und den Schlüsseldetails, bevor Sie die Anmeldeinformation in die Automatisierung übernehmen.
+ Verwenden Sie den Organisations-Umschalter im Dashboard-Header, bevor Sie **Administration → Keys** öffnen. Dort erstellte Schlüssel gehören zur ausgewählten Organisation. Überprüfen Sie den Organisations-Slug in der URL und den Schlüsseldetails, bevor Sie die Anmeldedaten in die Automatisierung kopieren.
- Verwenden Sie `--org` vor dem Befehl oder senden Sie den Organisations-Header für einen instanzweit gültigen API-Schlüssel.
+ Verwenden Sie `--org` vor dem Befehl oder senden Sie den Organisations-Header für einen instanzweiten API-Schlüssel. `fp orgs list` ermittelt den Slug hier nicht für Sie — es verweigert im Schlüsselmodus; lesen Sie den Slug stattdessen aus dem Organisations-Umschalter des Dashboards.
```bash
- fp orgs list
fp --org reliability-team sessions --since 24h
```
```bash
curl "https://app.befailproof.ai/v1/usage" \
- -H "Authorization: Bearer $FAILPROOFAI_KEY" \
+ -H "Authorization: Bearer $FP_API_KEY" \
-H "X-AgentEye-Org: reliability-team"
```
-Verwenden Sie die generierten Endpunkt-Seiten in diesem Abschnitt für aktuelle Pfade, Parameter, Berechtigungsanforderungen und Statuscodes. Die Spezifikation wird aus den Server-Route-Annotationen generiert und gegen den `/v1`-Router geprüft.
+## Paginierung
+
+List-Endpunkte verwenden Keyset-Paginierung, und dieselbe Vereinbarung gilt unabhängig davon, ob Sie sie über `fp` oder über `curl` aufrufen.
+
+| Element | Bedeutung |
+| --- | --- |
+| `limit` Query-Parameter | Zeilen, die in diesem Aufruf angefordert werden. `fp` begrenzt eine einzelne Anfrage auf 200 Zeilen bei jedem Endpunkt. Eine Rohanfrage wird stattdessen durch die eigene endpunktspezifische Obergrenze des Servers begrenzt. |
+| `cursor` Query-Parameter | Ein undurchsichtiges Token, das den Feed nach einer vorherigen Seite fortsetzt. |
+| `next_cursor` Antwortfeld | Das Token für die nächste Seite. `null` bedeutet, dass der Feed erschöpft ist. |
+
+Diese Obergrenzen unterscheiden sich je nach Endpunkt, und jede Endpunktseite benennt ihren eigenen Standard- und Maximalwert:
+
+| Endpunkt | Standard | Maximum |
+| --- | --- | --- |
+| `/events`, `/events/summary` | 50 | 1000 |
+| `/issues`, `/alerts/{id}/issues` | 200 | 1000 |
+| `/evaluation-jobs` | 100 | 500 |
+| `/audits/findings` | 100 | 500 |
+| `/sessions`, `/evaluations` | 50 | 200 |
+| `/audits/{id}/runs` | 50 | 200 |
+
+Lesen Sie einen vollständigen Feed, indem Sie dieselbe Anfrage erneut senden und `cursor` auf den `next_cursor` der vorherigen Antwort setzen, bis `next_cursor` als `null` zurückkommt. Die entsprechenden `fp`-Flags — `--all`, `--cursor` und `--page-size` — sind in der [Cloud CLI-Referenz](/de/reference/cloud-cli) dokumentiert.
+
+## Endpunkt-Referenz und Fehlerbehandlung
+
+Verwenden Sie die generierten Endpunktseiten in diesem Abschnitt für aktuelle Pfade, Parameter, Berechtigungsanforderungen und Statuscodes. Die Spezifikation wird aus den Server-Route-Annotationen generiert und gegen den `/v1`-Router geprüft.
+
+Die aktuelle Spezifikation deckt Route, Methode, Parameter, Berechtigung und Statuscodes vollständig ab. Request-Bodies sind typisiert; Response-Bodies sind es nicht — die Spezifikation enthält derzeit keine Response-Schemas, da der Server diese noch als dynamisches JSON aufbaut. Untersuchen Sie eine echte Antwort, bevor Sie einen stark typisierten Client generieren.
+
+Verwenden Sie `Content-Type: application/json` für JSON-Schreibvorgänge. Behandeln Sie `401` als fehlende oder ungültige Authentifizierung, `403` als gültige Identität ohne die erforderliche Berechtigung, `404` als fehlende oder für die Organisation nicht zugängliche Ressource, `409` als Zustandskonflikt, `400` als abgelehnten Parameter — ein unbekannter Filterwert, ein fehlerhafter Query-Parameter, eine Anweisung, die nicht ausgeführt werden würde — und `422` als ungültiges Feld oder ungültigen Berechtigungswert in einem Request-Body. Fehlerantworten enthalten eine für Menschen lesbare Meldung; Berechtigungsfehler benennen auch den erforderlichen Grant.
+
+## Bereiche, die `/v1` nicht abdeckt
+
+Cloud-verwaltete Richtlinien, die Fleet und der Guardrail-Entscheidungs-Feed sind Operator-Surfaces — sowohl Lese- als auch Schreibzugriffe. Sie sind auf dem Server nur für Root zugänglich und absichtlich nicht in `/v1` enthalten, da diese Schnittstelle internetbasiert ist. Das Veröffentlichen einer Richtlinienversion oder das Deployen auf eine Maschine beispielsweise ist nicht mit einem API-Schlüssel möglich, und das Auslesen der Fleet-Entscheidungen liegt auf derselben Surface.
+
+Ein API-Schlüssel erhält daher auf diesen Routen planmäßig eine Ablehnung, und `fp` verweigert noch vor dem Öffnen einer Verbindung, anstatt die Anfrage mit einem unerklärten 404 scheitern zu lassen:
-Die aktuelle Spezifikation bietet vollständige Abdeckung für Routen, Methoden, Parameter, Berechtigungen und Statuscodes. Einige Response-Bodies bleiben absichtlich untypisiert, da der Server sie noch als dynamisches JSON konstruiert. Untersuchen Sie eine echte Antwort, bevor Sie einen stark typisierten Client für einen Endpunkt ohne Response-Schema generieren.
+| Befehl | Verhalten mit einem API-Schlüssel |
+| --- | --- |
+| `fp policies` | Verweigert mit Exit `2` und bezeichnet cloud-verwaltete Richtlinien als Operator-Surface |
+| `fp fleet` | Verweigert mit Exit `2` und bezeichnet die Fleet als Operator-Surface |
+| `fp guardrails` | Verweigert mit Exit `2` und bezeichnet den Guardrail-Feed als Operator-Surface |
+| `fp agent` | Verweigert mit Exit `2`; der Assistent wird vom Dashboard implementiert, nicht von der API |
+| `fp orgs` | Verweigert mit Exit `2`; die Org-Mitgliedschaft gehört einem angemeldeten Benutzer, und ein Schlüssel agiert bereits für eine Org |
-Verwenden Sie `Content-Type: application/json` für JSON-Schreibvorgänge. Behandeln Sie `401` als fehlende oder ungültige Authentifizierung, `403` als gültige Identität ohne die erforderliche Berechtigung, `404` als fehlende oder für die Organisation nicht zugängliche Ressource, `409` als Zustandskonflikt und `422` als ungültiges Feld oder ungültigen Berechtigungswert. Fehlerantworten enthalten eine lesbare Meldung; bei Berechtigungsfehlern wird zudem der erforderliche Grant benannt.
+Führen Sie diese stattdessen unter einer angemeldeten Benutzersitzung aus (`fp login`), oder verwenden Sie das Dashboard. Die Lese- und Administrationsbereiche — Sessions, Events, Evaluations, Audits, Issues, Alerts, Keys, Berechtigungs-Presets, Benutzer, Einstellungen, Abfragen und Nutzung — haben jeweils eine `/v1`-Route und funktionieren mit einem Schlüssel. Die einzige Lücke ist `fp keys update`: Es benötigt `keys:update`, eine Berechtigung, die kein API-Schlüssel besitzen kann; ein Schlüssel kann also Schlüssel erstellen und deaktivieren, aber niemals die Berechtigungen eines Schlüssels bearbeiten. `fp login` und `fp logout` verweigern ebenfalls im Schlüsselmodus, aus einem anderen Grund: Ein Schlüssel ist bereits die Anmeldedaten und wird nie auf der Festplatte gespeichert.
- Die Bereitstellung der Richtlinien-Durchsetzung wird absichtlich außerhalb der gewöhnlichen öffentlichen `/v1`-Oberfläche verwaltet. Verwenden Sie den unterstützten Cloud-Deployment-Workflow.
+ Das Deployment der Richtliniendurchsetzung wird absichtlich außerhalb der gewöhnlichen öffentlichen `/v1`-Surface verwaltet. Verwenden Sie den unterstützten Cloud-Deployment-Workflow, der unter [Deploy policies](/de/policies/deploy) beschrieben ist.
\ No newline at end of file
diff --git a/docs/de/reference/local-dashboard.mdx b/docs/de/reference/local-dashboard.mdx
index cead1a9a6..0c45356d5 100644
--- a/docs/de/reference/local-dashboard.mdx
+++ b/docs/de/reference/local-dashboard.mdx
@@ -1,34 +1,36 @@
---
title: "Lokales Dashboard"
-description: "Lokale Projekte, Sitzungen, Policy-Aktivitäten, Konfiguration, Audits und geplante Scans einsehen."
+description: "Lokale Projekte, Sitzungen, Richtlinienaktivität, Konfiguration, Audits und geplante Scans einsehen."
icon: "monitor-cog"
---
-Führe `failproofai` ohne Argumente aus, um das mitgelieferte Dashboard unter `http://localhost:8020` zu starten. Es liest lokale Agent-Historien, Policy-Konfiguration, Audit-Ergebnisse und Hook-Aktivitäten direkt vom Rechner.
+Führen Sie `failproofai` ohne Argumente aus, um das integrierte Dashboard unter `http://localhost:8020` zu starten. Es liest lokale Agent-Historien, Richtlinienkonfiguration, Audit-Ergebnisse und Hook-Aktivität direkt vom System.
-Das lokale Dashboard ist von Failproof AI Cloud getrennt. Es funktioniert ohne Cloud-Konto und bestätigt nicht, dass Ereignisse an deine Organisation übermittelt wurden.
+Auf einem noch nicht eingerichteten System führt der bloße Befehl zunächst die Ersteinrichtung durch, bevor das Dashboard geöffnet wird. Das geschieht nur in einem interaktiven Terminal: Bei Pipe-Verwendung oder in CI gibt es einen einzeiligen Hinweis und öffnet das Dashboard, da ein Einrichtungsassistent, den niemand beantworten kann, den eingegebenen Befehl niemals blockieren darf. Setzen Sie `FAILPROOFAI_NO_FIRST_RUN=1`, um die Weiterleitung vollständig zu überspringen und direkt zum Dashboard zu gelangen.
+
+Das lokale Dashboard ist von Failproof AI Cloud getrennt. Es funktioniert ohne Cloud-Konto und belegt nicht, dass Ereignisse an Ihre Organisation übermittelt wurden. Auf einem eingerichteten System wurden die angezeigten Entscheidungen vom `failproofaid`-Daemon getroffen, der dort der einzige Evaluator ist; auf einem nicht eingerichteten System werden Hooks prozessintern ausgewertet.
## Dashboard-Bereiche
-| Bereich | Was du erledigen kannst |
+| Bereich | Mögliche Aktionen |
| --- | --- |
-| Policies → Activity | Lokale allow-, instruct- und deny-Entscheidungen einsehen; filtern nach Entscheidung, Ereignis, CLI, Tool, Quelle, Policy und Sitzung. |
-| Policies → Configure | Builtins aktivieren, unterstützte Parameter bearbeiten, erkannte benutzerdefinierte Policies umschalten und Ziel-Harnesses auswählen. |
-| Projects | Erkannte Projekte aus unterstützten Agent-Historien durchsuchen und deren aktuellste Sitzungen vergleichen. |
-| Project sessions | Ein lokales Transkript öffnen, rohe geordnete Einträge und Subagenten einsehen, herunterladen und Policy-Aktivitäten korrelieren. |
-| Audit | Den letzten Offline-Scan, riskante Muster, Stärken, betroffene Projekte und vorgeschlagene Builtin-Policies einsehen. |
-| Settings | Geplante lokale Scans und per E-Mail versendete Audit-Berichte konfigurieren, sofern der Daemon/die Plattform dies unterstützt. |
+| Policies → Activity | Lokale allow-, instruct- und deny-Entscheidungen einsehen; nach Entscheidung, Ereignis, CLI, Quelle, Richtlinie und Sitzung filtern. |
+| Policies → Configure | Richtlinien aus einem installierten Paket aktivieren, unterstützte Parameter bearbeiten, erkannte benutzerdefinierte Richtlinien und Konventionsrichtlinien umschalten sowie Ziel-Harnesses auswählen. |
+| Projects | Erkannte Projekte aus unterstützten Agent-Historien durchsuchen und deren neueste Sitzungen vergleichen. |
+| Projektsitzungen | Eine lokale Sitzungsaufzeichnung öffnen, geordnete Einträge und Subagenten im Rohformat einsehen, herunterladen und Richtlinienaktivität korrelieren. |
+| Audit | Den letzten Offline-Scan, riskante Muster, Stärken, betroffene Projekte und empfohlene integrierte Richtlinien einsehen. |
+| Settings | Geplante lokale Scans und per E-Mail zugestellte Audit-Berichte konfigurieren, sofern der Daemon/die Plattform dies unterstützt. |
-## Policy-Aktivitäten einsehen
+## Richtlinienaktivität einsehen
- 1. Öffne **Policies → Activity** und setze die Entscheidungs- und Quellfilter.
- 2. Schränke nach Ereignis, Harness, Tool oder Policy-Name ein.
- 3. Klappe eine Zeile auf, um Grund, übereinstimmende Policies, Quelle, Ausführungsmodus und Dauer einzusehen.
- 4. Folge dem Sitzungslink, um die Entscheidung im Transkript-Kontext einzuordnen.
+ 1. Öffnen Sie **Policies → Activity** und setzen Sie die Entscheidungs- und Quellfilter.
+ 2. Schränken Sie nach Ereignis, Harness, Richtlinienname oder Sitzung ein.
+ 3. Die Zeile enthält Entscheidung, Ereignis, Harness, Tool, Richtlinie, Berechtigungsmodus und Dauer. Klappen Sie sie auf, um den vollständigen Grund, alle übereinstimmenden Richtlinien, die entscheidende Quelle, das Cloud-Deployment sowie das Arbeitsverzeichnis und den Transkriptpfad der Sitzung einzusehen. Der Tool-Name wird in der Zeile angezeigt, ist aber kein Filter.
+ 4. Folgen Sie dem Sitzungslink, um die Entscheidung im Transkriptkontext zu verorten.
- Eine abgelehnt wirkende Zeile kann auf einem Harness/Ereignis-Paar, das keine blockierenden Verdicts verarbeitet, dennoch nur beobachtend sein. Die Detailansicht weist auf die verifizierte Durchsetzungsfähigkeit hin.
+ Eine abgelehnt wirkende Zeile kann auf einem Harness-/Ereignispaar, das keine blockierenden Urteile auswertet, dennoch rein beobachtend sein. Die Detailansicht weist auf die verifizierte Durchsetzungsfähigkeit hin.
```bash
@@ -37,41 +39,44 @@ Das lokale Dashboard ist von Failproof AI Cloud getrennt. Es funktioniert ohne C
failproofai
```
- Lokale Aktivitäten werden unter `~/.failproofai/hook-activity` gespeichert. Verwende das Dashboard anstatt diese Dateien direkt zu bearbeiten.
+ Lokale Aktivität wird unter `~/.failproofai/hook-activity` gespeichert. Verwenden Sie das Dashboard, anstatt diese Dateien direkt zu bearbeiten.
-## Policies lokal konfigurieren
+## Richtlinien lokal konfigurieren
- 1. Öffne **Policies → Configure** und wähle die Harnesses sowie den Konfigurationsbereich.
- 2. Aktiviere eine Builtin- oder eine erkannte benutzerdefinierte Policy.
- 3. Öffne für eine parametrisierte Builtin das zugehörige Konfigurationssteuerelement und speichere die unterstützten Werte.
- 4. Kehre zu Activity zurück und führe passende und nicht passende Aktionen aus.
+ 1. Öffnen Sie **Policies → Configure** und wählen Sie die Harnesses und den Konfigurationsbereich. Der Tab ist direkt unter `http://localhost:8020/policies?tab=policies` erreichbar.
+ 2. Aktivieren Sie eine Richtlinie aus einem installierten Paket oder eine erkannte benutzerdefinierte Richtlinie bzw. Konventionsrichtlinie.
+ 3. Öffnen Sie bei einer parametrisierten Richtlinie das Konfigurationssteuerelement und speichern Sie die unterstützten Werte.
+ 4. Kehren Sie zu Activity zurück und führen Sie passende und nicht passende Aktionen aus.
- Convention-Policies zeigen ihren Projekt- oder Benutzer-Ursprung. Explizite Änderungen an benutzerdefinierten Pfaden erfordern möglicherweise das erneute Ausführen der CLI-Konfiguration, damit der gewählte Pfad gespeichert wird.
+ Die Liste ist leer, bis ein Paket installiert ist — dieses Build kompiliert keine eigenen Richtlinien ein. Führen Sie daher zuerst `failproofai policies add FailproofAI/policies` aus. Konventionsrichtlinien zeigen ihre Projekt- oder Benutzerquelle an. Explizite Änderungen des benutzerdefinierten Pfads erfordern möglicherweise ein erneutes Ausführen der CLI-Konfiguration, damit der gewählte Pfad gespeichert wird.
```bash
- failproofai policy add block-sudo --scope project
+ failproofai policies show FailproofAI/policies
+ failproofai policies add block-sudo --scope project
failproofai policies --install --custom ./security.policies.ts --scope project
failproofai policies
```
+
+ `policies show /` liest den Inhalt eines Pakets, bevor Sie es installieren. `--scope` akzeptiert `user`, `project` oder `local`; nur Claude Code unterstützt `local`, und Hermes sowie OpenClaw akzeptieren ausschließlich `user`.
## Projekte und Sitzungen durchsuchen
-Die Seite Projects kombiniert unterstützte lokale Historienspeicher. Wähle ein Projekt aus, um seine Sitzungen aufzulisten, und öffne dann eine Sitzung für den Roh-Log-Viewer, Subagenten-Segmente, die Download-Aktion und sitzungsbezogene Policy-Aktivitäten.
+Die Seite Projects kombiniert unterstützte lokale Historienspeicher. Wählen Sie ein Projekt aus, um seine Sitzungen aufzulisten, und öffnen Sie dann eine Sitzung für den Rohlog-Viewer, Subagenten-Segmente, die Download-Funktion und sitzungsbezogene Richtlinienaktivität.
-Fehlt ein Projekt oder eine Sitzung, überprüfe, ob der Harness seinen Standard-Speicherort für die Historie verwendet, oder registriere einen zusätzlichen Stammordner mit `failproofai harness add-path`.
+Falls ein Projekt oder eine Sitzung fehlt, prüfen Sie, ob das Harness seinen Standard-Historienort verwendet, oder registrieren Sie einen zusätzlichen Stammpfad mit `failproofai harness add-path [=]`.
## Offline-Audits planen
- Öffne **Settings**, aktiviere den geplanten Scan, wähle das unterstützte Intervall und konfiguriere die Berichtszustellung, sofern verfügbar. Die Seite zeigt den nächsten Lauf, den letzten Lauf, den Exit-Code und ob der Hintergrunddaemon auf der Plattform unterstützt wird.
+ Öffnen Sie **Settings**, aktivieren Sie die geplante Überprüfung, wählen Sie das unterstützte Intervall und konfigurieren Sie die Berichtsübermittlung, sofern verfügbar. Die Seite zeigt den nächsten Ausführungszeitpunkt, den letzten Lauf, den Exit-Code und ob der Hintergrunddaemon auf der Plattform unterstützt wird.
```bash
@@ -79,10 +84,16 @@ Fehlt ein Projekt oder eine Sitzung, überprüfe, ob der Harness seinen Standard
failproofai audit --status
```
- Ändere die Anzahl der Tage, um ein anderes Intervall zwischen 1 und 90 Tagen festzulegen. Deaktiviere wiederkehrende Scans mit `failproofai audit --no-schedule`; führe `failproofai audit` für einen sofortigen interaktiven Scan aus.
+ Ändern Sie die Anzahl der Tage, um ein anderes Intervall zwischen 1 und 90 Tagen festzulegen. Deaktivieren Sie wiederkehrende Scans mit `failproofai audit --no-schedule`; dadurch wird der Timer gestoppt, ohne Sie abzumelden. Führen Sie `failproofai audit` für einen sofortigen interaktiven Scan aus.
+
+ Die Planung meldet Sie beim ersten Mal an, da die Ergebnisse per E-Mail zugestellt werden. `--email ` gibt die Adresse vorab an und überspringt die Anmeldeaufforderung.
+
+ Analyse und Ergebnisse verbleiben auf diesem System. Anonyme CLI-Telemetrie wird standardmäßig gesendet, sofern Sie nicht `FAILPROOFAI_TELEMETRY_DISABLED=1` setzen. Geplante Scans senden außerdem Systemmetadaten und können nach Ihrer Einwilligung eine begrenzte Ergebniszusammenfassung übermitteln.
+
+
- Das lokale Dashboard kann Eingabeaufforderungen, Tool-Eingaben, Dateiinhalte und Terminalausgaben aus lokalen Agent-Historien anzeigen. Binde es nur an vertrauenswürdige Interfaces und beende den Prozess, wenn die Überprüfung abgeschlossen ist.
+ Das lokale Dashboard kann Eingabeaufforderungen, Tool-Eingaben, Dateiinhalte und Terminalausgaben aus lokalen Agent-Historien anzeigen. Binden Sie es nur an vertrauenswürdige Schnittstellen und beenden Sie den Prozess, sobald die Überprüfung abgeschlossen ist.
\ No newline at end of file
diff --git a/docs/de/reference/overview.mdx b/docs/de/reference/overview.mdx
index a045ba491..04e779d8b 100644
--- a/docs/de/reference/overview.mdx
+++ b/docs/de/reference/overview.mdx
@@ -6,6 +6,8 @@ icon: "braces"
Wählen Sie die Integration, die am besten zu Ihrer bestehenden Agent-Umgebung passt.
+Dieser Abschnitt behandelt zwei Kommandozeilen-Tools mit unterschiedlichen Aufgaben. `failproofai` läuft auf dem Rechner, auf dem Ihr Agent läuft, und setzt Richtlinien innerhalb der Agent-Schleife durch; `fp` kommuniziert mit Failproof AI Cloud und liest zurück, was diese Schleife getan hat. Die Maschineneinrichtung wird nur unter Linux und macOS unterstützt — `failproofai config` verweigert die Ausführung auf anderen Systemen und schreibt nichts, anstatt eine halb konfigurierte Maschine zu hinterlassen.
+
Hooks für unterstützte Coding- und autonome Agent-CLIs installieren.
@@ -16,66 +18,81 @@ Wählen Sie die Integration, die am besten zu Ihrer bestehenden Agent-Umgebung p
Konfiguration, der Event-Katalog, Korrelationsregeln und Zustellung.
+
+ Die beiden Event-Vokabulare, reservierte Felder und die eigene Einstellungsdatei des Rechners.
+
- Lokale Projekte, Sitzungen, Policy-Aktivität und Offline-Audits einsehen.
+ Lokale Projekte, Sitzungen, Richtlinienaktivität und Offline-Audits einsehen.
- Lokale Erfassung, Hooks, Policies, Audits, Zustellung und Maschinenstatus konfigurieren.
+ Lokale Erfassung, Hooks, Richtlinien, Audits, Zustellung und Maschinenzustand konfigurieren.
- Cloud-Sitzungen, Audits, Issues, Alerts, Schlüssel, Benutzer und Einstellungen abfragen und verwalten.
+ Cloud-Sitzungen, Audits, Probleme, Warnungen, Schlüssel, Benutzer und Einstellungen abfragen und verwalten.
- Abgeschlossene oder inaktive Sitzungen mit einem FastAPI-Dienst bewerten.
+ Vollständige oder inaktive Sitzungen mit einem FastAPI-Dienst bewerten.
-
+
Workflow-spezifische allow-, instruct- und deny-Entscheidungen erstellen und testen.
+
+ Die generierte Referenz für die öffentliche `/v1`-Oberfläche.
+
+
+ Hooks diagnostizieren, die nicht auslösen, Events, die nicht ankommen, und unerwartete Ablehnungen.
+
Die Cloud-Steuerungsebene auf einem kundenverwalteten Kubernetes-Cluster bereitstellen.
-Die generierte [HTTP-API-Referenz](/de/reference/http-api) deckt die öffentliche `/v1`-Oberfläche ab. Manuell verfasste Seiten erläutern Workflows, die mehrere Endpunkte umfassen oder administrative Schnittstellen außerhalb dieser öffentlichen Oberfläche verwenden.
+Die generierten HTTP-API-Seiten decken die öffentliche `/v1`-Oberfläche ab. Manuell erstellte Seiten erläutern Workflows, die mehrere Endpunkte umfassen oder administrative Schnittstellen außerhalb dieser öffentlichen Oberfläche verwenden.
-## Einen Agenten verbinden und Daten überprüfen
+## Einen Agenten verbinden und Daten prüfen
1. Öffnen Sie **Administration → Keys**, erstellen Sie einen Schlüssel mit `events:add` und `policies:pull`, und kopieren Sie das Secret.
2. Konfigurieren Sie die Integration über die entsprechende Seite oben.
- 3. Öffnen Sie **Observe → Events**, um den Eingang von Events zu bestätigen, dann **Observe → Sessions**, um zu bestätigen, dass diese vollständige Ausführungen bilden.
- 4. Filtern Sie nach der Umgebung der Integration und prüfen Sie eine Sitzung auf die für Audits benötigten Felder: Modell, Tool, Fehler und Policy.
+ 3. Öffnen Sie **Observe → Events**, um zu bestätigen, dass Events ankommen, dann **Observe → Sessions**, um zu bestätigen, dass sie vollständige Läufe bilden.
+ 4. Filtern Sie nach der Umgebung der Integration und prüfen Sie eine Sitzung auf die Modell-, Tool-, Fehler- und Richtlinienfelder, die für Audits benötigt werden.
- Beginnen Sie mit dem Schlüssel-Drawer. Die ausgewählten Berechtigungen bestimmen, ob die Maschine Events senden und Cloud-verwaltete Policies empfangen kann.
+ Beginnen Sie mit der Key-Seitenleiste. Die ausgewählten Berechtigungen bestimmen, ob der Rechner Events senden und Cloud-verwaltete Richtlinien empfangen kann.
- 
+ 
- Verwenden Sie nach dem Verbinden der Integration die Sitzungsliste, um zu bestätigen, dass die Events in der erwarteten Umgebung zu vollständigen Ausführungen gruppiert werden.
+ Verwenden Sie nach dem Verbinden der Integration die Sessions-Liste, um zu bestätigen, dass deren Events in vollständige Läufe in der erwarteten Umgebung gruppiert werden.
- 
+ 
- Öffnen Sie eine dieser Sitzungen, bevor Sie die Integration als abgeschlossen betrachten. Der Trace sollte das Modell, Tool, den Fehler und die Policy-Nachweise enthalten, die Ihre Audits benötigen.
+ Öffnen Sie eine dieser Sitzungen, bevor Sie die Integration als abgeschlossen betrachten; der Trace sollte das Modell, das Tool, den Fehler und die Richtliniennachweise enthalten, die Ihre Audits benötigen.
- Erstellen Sie einen Maschinenschlüssel, verbinden Sie den Failproof-Daemon und überprüfen Sie die erste Sitzung.
+ Erstellen Sie einen Maschinenschlüssel, richten Sie diesen Rechner ein und verbinden Sie ihn, wählen Sie Richtlinien und überprüfen Sie dann die erste Sitzung.
```bash
fp keys create agent-production \
--add events:add \
--add policies:pull
- failproofai config \
- --connect https://app.befailproof.ai \
- --token
+ failproofai config --token
+
+ failproofai policies add FailproofAI/policies
failproofai flush --wait
- fp sessions --since 1h --env production
- fp events --since 1h --env production --limit 20
+ fp sessions --since 1h
+ fp events --since 1h --limit 20
```
- Verwenden Sie `fp --json sessions ...`, wenn das Ergebnis von einem anderen Tool verarbeitet werden soll. Globale Flags wie `--json`, `--org` und `--base-url` müssen vor dem Befehl angegeben werden.
+ Keiner der Überprüfungsbefehle filtert nach einer Umgebung, da ein frisch konfigurierter Rechner jedes Event mit `local` stempelt. Fügen Sie `--env production` erst hinzu, nachdem Sie `collector.environment` gesetzt haben — siehe [Umgebungsbezeichnung ändern](/de/reference/events-and-configuration#change-an-environment-label).
+
+ Die Übergabe eines Tokens ist die Verbindungsanforderung, daher erledigt `failproofai config --token ` dasselbe in einem Befehl. Bevorzugen Sie die Umgebungsvariable: Ein Argument ist über `ps` für jeden Benutzer auf dem Rechner lesbar und landet in der Shell-History und in CI-Logs.
+
+ Der Richtlinienschritt ist nicht optional. `failproofai config` installiert den Daemon und verdrahtet alle unterstützten Agent-CLIs, wählt aber bewusst keine Richtlinien aus — ein frisch konfigurierter Rechner setzt daher nichts durch, bis Sie ein Paket hinzufügen.
+
+ Verwenden Sie `fp --json sessions ...`, wenn ein anderes Tool das Ergebnis weiterverarbeiten soll. Globale Flags wie `--json`, `--org` und `--base-url` müssen vor dem Befehl stehen.
- Weitere Informationen finden Sie in der [Failproof AI CLI-Referenz](/de/reference/failproof-cli) für lokale Befehle und in der [Failproof Cloud CLI-Referenz](/de/reference/cloud-cli#cli-commands) für `fp`-Befehle.
+ Siehe die [Failproof AI CLI-Referenz](/de/reference/failproof-cli) für lokale Befehle und die [Failproof Cloud CLI-Referenz](/de/reference/cloud-cli#cli-commands) für `fp`-Befehle.
\ No newline at end of file
diff --git a/docs/de/reference/policy-sdk.mdx b/docs/de/reference/policy-sdk.mdx
index 709d5ad91..51444d674 100644
--- a/docs/de/reference/policy-sdk.mdx
+++ b/docs/de/reference/policy-sdk.mdx
@@ -1,29 +1,29 @@
---
title: "Benutzerdefinierte Richtlinien"
-description: "Erstellen, testen und deployen Sie JavaScript- oder TypeScript-Richtlinien für agentenspezifische Fehler."
+description: "JavaScript- oder TypeScript-Richtlinien für agentenspezifische Fehler erstellen, testen und bereitstellen."
icon: "shield-plus"
---
-Benutzerdefinierte Richtlinien verwandeln ein Fehlermuster aus Ihren Traces oder Audits in eine Entscheidung, die während der Arbeit eines Agenten ausgeführt wird. Eine Richtlinie kann eine Aktion erlauben, dem Agenten Hinweise geben oder die Aktion blockieren, bevor sie einen weiteren Vorfall verursacht.
+Benutzerdefinierte Richtlinien verwandeln ein Fehlermuster aus Ihren Traces oder Audits in eine Entscheidung, die während der Arbeit eines Agenten ausgeführt wird. Eine Richtlinie kann eine Aktion erlauben, dem Agenten Hinweise geben oder die Aktion blockieren, bevor ein weiterer Vorfall eintritt.
-Verwenden Sie eine benutzerdefinierte Richtlinie, wenn das Verhalten von Ihren Tools, Pfaden, Befehlen, Umgebungen oder Betriebsregeln abhängt. Prüfen Sie zuerst den [Katalog der integrierten Richtlinien](/de/policies/builtin-catalog), um keine bereits vorhandene Kontrolle neu zu erstellen.
+Verwenden Sie eine benutzerdefinierte Richtlinie, wenn das Verhalten von Ihren Tools, Pfaden, Befehlen, Umgebungen oder Betriebsregeln abhängt. Prüfen Sie zunächst den [Katalog der integrierten Richtlinien](/de/policies/builtin-catalog), um keine bereits vorhandene Kontrolle neu zu erstellen.
## Eine benutzerdefinierte Richtlinie erstellen
- 1. Gehen Sie zu **Admin → policy editor**, wählen Sie **New policy** aus und beschreiben Sie den Fehler, den Sie verhindern möchten.
- 2. Fügen Sie den Richtlinienquellcode hinzu und testen Sie erwartete Treffer sowie unbedenkliche Nicht-Treffer im Editor. Beheben Sie alle Validierungsfehler.
+ 1. Gehen Sie zu **Admin → policy editor**, wählen Sie **New policy** und beschreiben Sie den Fehler, den Sie verhindern möchten.
+ 2. Fügen Sie den Richtliniencode hinzu und testen Sie erwartete Treffer sowie unbedenkliche Nicht-Treffer im Editor. Beheben Sie jeden Validierungsfehler.
3. Speichern Sie den Entwurf und wählen Sie **Publish version**, um eine unveränderliche Version zu erstellen.
- 4. Gehen Sie zu **Admin → enforcement**, deployen Sie die Version auf einem Testrechner im **observe**-Modus und überprüfen Sie die Entscheidungen unter **Observe → policy**, bevor Sie die Richtlinie durchsetzen.
+ 4. Gehen Sie zu **Admin → enforcement**, stellen Sie die Version auf einem Testrechner im **observe**-Modus bereit und überprüfen Sie die Entscheidungen unter **Observe → policy**, bevor Sie sie durchsetzen.

- 1. Erstellen Sie `.failproofai/policies/checkout-policies.ts`. Der Dateiname muss auf `policies.js`, `policies.mjs` oder `policies.ts` enden.
+ 1. Erstellen Sie eine Ausgangsrichtlinie mit `failproofai publish --init`, oder legen Sie `.failproofai/policies/checkout-policies.ts` manuell an. Ein Dateiname nach Konvention muss auf `policies.js`, `policies.mjs` oder `policies.ts` enden.
2. Registrieren Sie eine oder mehrere Richtlinien mit `customPolicies.add()`.
- 3. Validieren und installieren Sie die Datei mit `failproofai policies --install --custom ./.failproofai/policies/checkout-policies.ts --scope project`.
- 4. Lösen Sie eine passende Aktion und eine unbedenkliche Aktion aus. Führen Sie `failproofai policies` aus und prüfen Sie dann die zugeordneten Entscheidungen unter **Observe → policy**.
+ 3. Setzen Sie die Datei sofort auf diesem Rechner durch: `failproofai policies -i -c ./.failproofai/policies/checkout-policies.ts`.
+ 4. Lösen Sie eine passende und eine unbedenkliche Aktion aus. Führen Sie `failproofai policies` aus und öffnen Sie dann **Policies → Activity** im [lokalen Dashboard](/de/reference/local-dashboard). Filtern Sie nach Quelle, um zu sehen, welche Richtlinie die Entscheidung getroffen hat.
@@ -55,23 +55,36 @@ customPolicies.add({
});
```
-Gute Richtlinien sind eng genug, um sie in einem Satz zu erklären. Treffen Sie auf die beobachtbare Aktion – nicht auf die vermutete Absicht des Agenten – und geben Sie `allow()` zurück, sobald die Regel nicht zutrifft.
+Gute Richtlinien sind eng genug, um sie in einem Satz zu erklären. Prüfen Sie die beobachtbare Aktion – nicht die Absicht, die Sie dem Agenten unterstellen – und geben Sie `allow()` zurück, sobald die Regel nicht zutrifft.
## Eine Entscheidung wählen
-| Hilfsfunktion | Ergebnis | Verwendung |
+| Hilfsfunktion | Ergebnis | Verwenden, wenn |
| --- | --- | --- |
-| `allow(reason?)` | Die Operation wird fortgesetzt. | Die Richtlinie gilt nicht oder die Aktion ist unbedenklich. |
-| `instruct(reason)` | Die Operation wird fortgesetzt, mit Hinweisen sofern der Harness dies unterstützt. | Sie möchten den Agenten zu einem besseren Ansatz leiten, ohne eine Invariante durchzusetzen. |
-| `deny(reason)` | Die Operation wird blockiert, wenn das Ereignis und der Harness das Blockieren unterstützen. | Die Aktion darf nicht fortgesetzt werden. |
+| `allow(reason?)` | Der Vorgang wird fortgesetzt. | Die Richtlinie gilt nicht oder die Aktion ist unbedenklich. |
+| `instruct(reason)` | Der Vorgang wird fortgesetzt, und der Grund wird dem Agenten auf den Harnesses übermittelt, die einen entsprechenden Kanal dafür haben. | Sie den Agenten zu einem besseren Vorgehen leiten möchten, ohne eine Invariante durchzusetzen. |
+| `deny(reason)` | Der Vorgang wird auf dem Harness und den Event-Paaren blockiert, die ein blockierendes Urteil verarbeiten. | Die Aktion darf nicht fortgesetzt werden. |
-Schreiben Sie den Grund für den Agenten, der sich erholen muss. Erläutern Sie, was erkannt wurde und was stattdessen getan werden soll.
+Formulieren Sie den Grund für den Agenten, der sich erholen muss. Erklären Sie, was erkannt wurde und was stattdessen zu tun ist.
+
+### Wo `instruct()` tatsächlich ankommt
+
+`instruct()` benötigt einen Kanal für zusätzlichen Kontext im Harness. Sechs Harnesses haben keinen solchen Kanal für einige oder alle Events; dort wird der Vorgang erlaubt und die Nachricht auf stderr geschrieben, wo der Agent sie nie liest.
+
+| Harness | Events, die die Anweisung übermitteln |
+| --- | --- |
+| Claude, Codex, Copilot, Cursor, Devin, OpenCode | `PreToolUse`, `PostToolUse`, `UserPromptSubmit` und `PermissionRequest` übermitteln sie als zusätzlichen Kontext. `Stop` und `SubagentStop` übermitteln sie stattdessen über den Wiederholungskanal. Alle anderen Events senden eine Nachricht, die der Harness ignoriert. |
+| Antigravity | Nur `UserPromptSubmit` und `Stop`. |
+| Factory, Pi, OpenClaw | Nur `Stop`. |
+| Hermes, Goose | Keiner. Immer allow plus ein stderr-Hinweis. |
+
+Kein Harness feuert alle 29 kanonischen Events, daher ist die erste Zeile durch den Umfang der installierten Events jedes Harness begrenzt – eine Anweisung kommt nur bei einem Event an, das der jeweilige Harness tatsächlich feuert. Prüfen Sie den installierten Event-Umfang pro Harness unter [Agent harnesses](/de/reference/harnesses), bevor Sie sich darauf verlassen.
- Verwenden Sie `instruct()` nicht für eine Sicherheitsgrenze. Die Übermittlung von Hinweisen variiert je nach Agent-Harness. Verwenden Sie `deny()`, wenn die Aktion verhindert werden muss.
+ Verwenden Sie `instruct()` nicht für eine Sicherheitsgrenze. Bei Hermes und Goose erreicht es den Agenten überhaupt nicht, und bei Antigravity, Factory, Pi und OpenClaw erreicht es ihn nicht bei Tool-Events. Verwenden Sie `deny()`, wenn die Aktion verhindert werden muss.
-## Das Policy-Objekt
+## Policy-Objekt
```ts
customPolicies.add({
@@ -85,11 +98,13 @@ customPolicies.add({
| Feld | Erforderlich | Beschreibung |
| --- | --- | --- |
| `name` | Ja | Stabiler Bezeichner für die Richtlinie. Namen müssen dateiübergreifend eindeutig sein. |
-| `description` | Nein | Lesbare Beschreibung des Zwecks, die in Richtlinienübersichten und Entscheidungen angezeigt wird. |
-| `match.events` | Nein | Ereignistypen, die die Richtlinie aufrufen. Wird `match` weggelassen, wird sie für jedes verfügbare Ereignis aufgerufen. |
+| `description` | Nein | Menschenlesbarer Zweck, der in Richtlinienübersichten und Entscheidungen angezeigt wird. |
+| `match.events` | Nein | Event-Typen, die die Richtlinie aufrufen. Wird `match` weggelassen, wird sie für jedes verfügbare Event aufgerufen. |
| `fn` | Ja | Synchrone oder asynchrone Funktion, die ein `allow`-, `instruct`- oder `deny`-Ergebnis zurückgibt. |
-Filtern Sie Tools innerhalb von `fn`. `match.toolNames` ist kein Teil des öffentlichen Typs für benutzerdefinierte Richtlinien.
+Filtern Sie Tools innerhalb von `fn`. `match.toolNames` ist nicht Teil des öffentlichen Typs für benutzerdefinierte Richtlinien.
+
+Eine in einem Pack veröffentlichte Richtlinie kann zwei weitere Felder tragen: `category` und `defaultEnabled`. Siehe [Von einer Datei zu einem Pack](#from-a-file-to-a-pack).
## Policy-Kontext
@@ -97,19 +112,19 @@ Jede Richtlinie erhält einen `PolicyContext`.
| Feld | Typ | Inhalt |
| --- | --- | --- |
-| `eventType` | `HookEventType` | Normalisiertes Ereignis, das aktuell ausgewertet wird. |
-| `toolName` | `string \| undefined` | Kanonischer Tool-Name, z. B. `Bash`, `Read`, `Write` oder `Edit`. |
+| `eventType` | `HookEventType` | Normalisiertes Event, das gerade ausgewertet wird. |
+| `toolName` | `string \| undefined` | Kanonischer Tool-Name wie `Bash`, `Read`, `Write` oder `Edit`. |
| `toolInput` | `Record \| undefined` | Kanonische Eingabe für den aktuellen Tool-Aufruf. |
-| `payload` | `Record` | Vollständiger normalisierter Ereignis-Payload. |
-| `session` | `SessionMetadata \| undefined` | Sitzungs-ID, Arbeitsverzeichnis, Transcript-Pfad, Berechtigungsmodus und Harness-Metadaten, sofern verfügbar. |
-| `cli` | `string \| undefined` | Quell-Agent-Harness, z. B. `claude`, `codex` oder `cursor`. |
-| `params` | `Record` | Parameter integrierter Richtlinien. Benutzerdefinierte Richtlinien erhalten derzeit ein leeres Objekt. |
+| `payload` | `Record` | Vollständiger normalisierter Event-Payload. |
+| `session` | `SessionMetadata \| undefined` | Session-ID, Arbeitsverzeichnis, Transcript-Pfad, Berechtigungsmodus und Harness-Metadaten, sofern verfügbar. |
+| `cli` | `string \| undefined` | Quell-Agenten-Harness, z. B. `claude`, `codex` oder `cursor`. |
+| `params` | `Record` | Parameter für diese Richtlinie. Eine integrierte oder Pack-Richtlinie deklariert ein Schema, und die vom Benutzer konfigurierten Werte werden über die Standardwerte gelegt. Eine Richtlinie in einer benutzerdefinierten Datei deklariert kein Schema und erhält daher, was auch immer der Benutzer unter ihrem Namen konfiguriert hat, und `{}`, wenn nichts konfiguriert ist. |
-Behandeln Sie jeden optionalen Wert als tatsächlich optional. Nicht alle Agent-Versionen und Ereignistypen stellen dieselben Felder bereit.
+Behandeln Sie jeden optionalen Wert als wirklich optional. Verschiedene Agentversionen und Event-Typen stellen nicht dieselben Felder bereit.
### Häufige Tool-Eingaben
-Failproof AI normalisiert gängige Tools über unterstützte Harnesses hinweg, sodass eine Richtlinie in der Regel eine einheitliche Eingabeform verwenden kann.
+Failproof AI normalisiert gängige Tools über unterstützte Harnesses hinweg, sodass eine Richtlinie in der Regel eine einheitliche Eingabestruktur verwenden kann.
| Tool | Häufige Felder |
| --- | --- |
@@ -126,27 +141,27 @@ const command = String(ctx.toolInput?.command ?? "");
const filePath = String(ctx.toolInput?.file_path ?? "");
```
-## Das Ereignis wählen
+## Das Event wählen
-| Ereignis | Ausführungszeitpunkt | Typische Verwendung |
+| Event | Zeitpunkt der Ausführung | Typische Verwendung |
| --- | --- | --- |
-| `PreToolUse` | Vor der Ausführung eines Tools. | Befehle, Schreibzugriffe, Lesezugriffe und externe Aktionen blockieren oder steuern. |
-| `PostToolUse` | Nachdem ein Tool zurückgekehrt ist. | Ergebnisse prüfen, bevor sie den Agenten erreichen. Ein deny blockiert das gesamte Ergebnis; einzelne Felder werden nicht herausgefiltert. |
+| `PreToolUse` | Bevor ein Tool ausgeführt wird. | Befehle, Schreibvorgänge, Lesevorgänge und externe Aktionen blockieren oder steuern. Dies ist der Wächter. |
+| `PostToolUse` | Nachdem das Tool bereits ausgeführt wurde. | Das Ergebnis, das das Modell liest, prüfen oder ersetzen. Der Nebeneffekt – der Schreibvorgang oder der Befehl – ist bereits eingetreten und kann nicht rückgängig gemacht werden. Bei zehn der zwölf Harnesses kann das Urteil nichts mehr stoppen. Nur Codex und Copilot verarbeiten es, und selbst dort ersetzt es lediglich das Ergebnis, das das Modell liest, anstatt den Aufruf zu verhindern. Niemals als Wächter verwenden. |
| `PermissionRequest` | Wenn der Agent eine Berechtigung anfordert. | Organisationsspezifische Berechtigungsregeln anwenden. |
-| `UserPromptSubmit` | Bevor ein eingereichter Prompt fortgesetzt wird. | Unzulässige Anweisungen ablehnen oder Workflow-Hinweise hinzufügen. |
-| `Stop` | Wenn der Agent versucht, die Arbeit abzuschließen. | Eine erreichbare Abschlussbedingung voraussetzen, z. B. einen lokalen Verifizierungsschritt. |
-| `SubagentStop` | Wenn ein Subagent versucht, die Arbeit abzuschließen. | Delegierte Arbeit prüfen, bevor sie zum übergeordneten Agenten zurückkehrt. |
-| `SessionStart` / `SessionEnd` | An Sitzungsgrenzen. | Zustand auf Sitzungsebene aufzeichnen oder prüfen. |
+| `UserPromptSubmit` | Bevor ein gesendeter Prompt fortgesetzt wird. | Verbotene Anweisungen ablehnen oder Workflow-Hinweise hinzufügen. |
+| `Stop` | Wenn der Agent versucht, die Arbeit abzuschließen. | Eine erreichbare Abschlussbedingung verlangen, z. B. einen lokalen Verifikationsschritt. |
+| `SubagentStop` | Wenn ein Subagent versucht, die Arbeit abzuschließen. | Delegierte Arbeit prüfen, bevor sie an den übergeordneten Agenten zurückgegeben wird. |
+| `SessionStart` / `SessionEnd` | An Session-Grenzen. | Session-übergreifenden Zustand aufzeichnen oder prüfen. |
-Die Verfügbarkeit von Ereignissen und das Blockierverhalten hängen vom Agent-Harness ab. Lesen Sie [Agent harnesses](/de/reference/harnesses), bevor Sie sich bei einem gemischten Fleet auf ein Ereignis verlassen.
+Die Verfügbarkeit von Events und das Blockierungsverhalten hängen vom Agenten-Harness ab, und die Unterschiede sind erheblich: Failproof AI installiert keinen `Stop`-Hook für Goose oder Hermes, sodass ein Stop-Gate auf beiden niemals ausgelöst wird. Prüfen Sie [Agent harnesses](/de/reference/harnesses), bevor Sie sich bei einem gemischten System auf ein Event verlassen.
-
- `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `PreToolUse`, `PermissionRequest`, `PermissionDenied`, `PostToolUse`, `PostToolUseFailure`, `Notification`, `SubagentStart`, `SubagentStop`, `TaskCreated`, `TaskCompleted`, `Stop`, `StopFailure`, `TeammateIdle`, `InstructionsLoaded`, `ConfigChange`, `CwdChanged`, `FileChanged`, `WorktreeCreate`, `WorktreeRemove`, `PreCompact`, `PostCompact`, `Elicitation`, `ElicitationResult`, `UserPromptExpansion`, `PostToolBatch` und `Setup`.
+
+ `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `PreToolUse`, `PermissionRequest`, `PermissionDenied`, `PostToolUse`, `PostToolUseFailure`, `Notification`, `SubagentStart`, `SubagentStop`, `TaskCreated`, `TaskCompleted`, `Stop`, `StopFailure`, `TeammateIdle`, `InstructionsLoaded`, `ConfigChange`, `CwdChanged`, `FileChanged`, `WorktreeCreate`, `WorktreeRemove`, `PreCompact`, `PostCompact`, `Elicitation`, `ElicitationResult`, `UserPromptExpansion`, `PostToolBatch` und `Setup`. Das ist der vollständige Satz von 29 kanonischen Event-Namen, in die das eigene Event-Vokabular jedes Harness normalisiert wird.
## Häufige Richtlinienmuster erstellen
-### Schreibzugriffe auf geschützte Pfade blockieren
+### Schreibvorgänge auf geschützte Pfade blockieren
```ts
import { customPolicies, allow, deny } from "failproofai";
@@ -166,7 +181,7 @@ customPolicies.add({
});
```
-### Nicht-blockierende Hinweise geben
+### Nicht blockierende Hinweise geben
```ts
import { customPolicies, allow, instruct } from "failproofai";
@@ -186,7 +201,7 @@ customPolicies.add({
});
```
-### Sitzungsabschluss absichern
+### Session-Abschluss absichern
```ts
import { execFileSync } from "node:child_process";
@@ -215,7 +230,7 @@ customPolicies.add({
```
- Ein abgelehntes `Stop`-Ereignis kann dazu führen, dass der Agent es erneut versucht. Sichern Sie nur Bedingungen ab, die der Agent in der aktuellen Umgebung erfüllen kann, und begrenzen Sie jeden Subprocess- oder Netzwerkaufruf.
+ Ein abgelehntes `Stop`-Event kann dazu führen, dass der Agent es erneut versucht. Sichern Sie nur gegen eine Bedingung ab, die der Agent in der aktuellen Umgebung erfüllen kann, und begrenzen Sie jeden Subprozess- oder Netzwerkaufruf.
## Richtliniendateien laden
@@ -236,9 +251,26 @@ Konventionsdateien werden automatisch geladen:
- Relative Importe aus lokalen Modulen werden unterstützt.
- Projektrichtlinien können eingecheckt werden, sodass dieselben Regeln dem Repository folgen.
+
+ Eine Datei im Verzeichnis, deren Name nicht auf `policies.{js,mjs,ts}` endet, wird übersprungen. Sie sieht installiert aus und erzwingt nichts. Der Loader listet jede übersprungene Datei mit dem Zielnamen auf, in den sie umbenannt werden sollte; lesen Sie diese Warnung, anstatt anzunehmen, dass eine Richtlinie aktiv ist. In diesem Repository wurde `block-version-bumps.mjs` auf diese Weise ausgeliefert, und der nach einem fehlerhaften Versions-Bump geschriebene Schutz hatte nie einmal ausgelöst.
+
+
+`~/.failproofai/policies/` enthält auch zwei Unterverzeichnisse, die Sie nicht selbst angelegt haben: `cloud-policies/` für flottenverwaltete Deployments und `packs/` für installierte Packs. Der Loader steigt in keines davon herab, sodass nichts darin als ungeprüfte Konventionsrichtlinie aufgenommen wird.
+
+### Eine gefundene Richtlinie deaktivieren
+
+Zwei Schlüssel in `policies-config.json` deaktivieren Konventionsrichtlinien, ohne die Datei zu löschen oder umzubenennen:
+
+| Schlüssel | Wirkung |
+| --- | --- |
+| `disabledCustomPolicies` | Ein Array von quellenqualifizierten Policy-IDs, die nicht registriert werden. |
+| `customPoliciesEnabled` | Auf `false` gesetzt, um das Laden von `.failproofai/policies/` vollständig zu unterbinden. Fehlt der Schlüssel, gilt er als aktiviert. |
+
+Die Registerkarte **Policies → Configure** im [lokalen Dashboard](/de/reference/local-dashboard) schreibt `disabledCustomPolicies` für Sie. `customPoliciesEnabled` wird von `failproofai config` oder manuell geschrieben.
+
### Explizite Dateien
-Verwenden Sie explizite Pfade, wenn die Validierung oder Konfiguration die Eingabedatei direkt benennen soll:
+Verwenden Sie explizite Pfade, wenn die Validierung oder Konfiguration die Einstiegsdatei direkt benennen soll:
```bash
failproofai policies --install \
@@ -251,39 +283,71 @@ Explizite Dateien werden zuerst geladen, gefolgt von Projekt-Konventionsdateien
## Validieren und testen
-Die Validierung führt das Modul über den Produktions-Loader aus und bestätigt, dass mindestens eine Richtlinie registriert wird.
+`-c` ist die Kurzform von `--custom` und `-i` von `--install`. Damit wird die Datei sofort durchgesetzt, unter beliebigem Pfad und beliebigem Dateinamen:
```bash
-failproofai policies --install \
- --custom ./.failproofai/policies/checkout-policies.ts \
- --scope project
+failproofai policies -i -c ./checkout-policies.ts
failproofai policies
```
-Die Validierung erkennt fehlende Dateien, Syntaxfehler, nicht aufgelöste Importe, Ausnahmen auf oberster Ebene und Modul-Lade-Timeouts. Sie beweist jedoch nicht, dass Ihre Match-Logik korrekt ist.
+Bitten Sie Ihren Agenten, das zu tun, was Sie blockiert haben, und beobachten Sie, wie es abgelehnt wird. Es wird nichts veröffentlicht und kein anderer Rechner ist betroffen.
+
+Die Validierung führt das Modul durch den Produktions-Loader aus und bestätigt, dass es mindestens eine Richtlinie registriert. Sie erkennt fehlende Dateien, Syntaxfehler, nicht aufgelöste Importe, Ausnahmen auf oberster Ebene und Modul-Lade-Timeouts. Sie beweist nicht, dass Ihre Match-Logik korrekt ist.
Testen Sie mindestens diese Fälle:
-- Eine Aktion, die treffen muss und den beabsichtigten Richtliniengrund erzeugen soll.
+- Eine Aktion, die treffen und den beabsichtigten Richtliniengrund produzieren muss.
- Eine ähnliche, aber unbedenkliche Aktion, die `allow()` zurückgeben muss.
- Fehlende oder fehlerhafte Tool-Felder.
-- Abweichende Befehlssyntax, Pfade, Anführungszeichen, Groß-/Kleinschreibung und Leerzeichen.
-- Ein nicht verfügbarer Subprocess oder eine nicht verfügbare Netzwerkabhängigkeit.
+- Alternative Befehlssyntax, Pfade, Anführungszeichen, Groß-/Kleinschreibung und Leerzeichen.
+- Ein nicht verfügbarer Subprozess oder eine nicht verfügbare Netzwerkabhängigkeit.
-Ordnen Sie das Ergebnis Ihrer benutzerdefinierten Richtlinie unter **Observe → policy** zu. Ein blockierter Test ist nicht ausreichend, wenn eine andere integrierte Richtlinie die Entscheidung getroffen hat.
+Ordnen Sie das Ergebnis unter **Policies → Activity** im lokalen Dashboard Ihrer benutzerdefinierten Richtlinie zu. Ein blockierter Test ist nicht ausreichend, wenn eine andere integrierte Richtlinie die Entscheidung getroffen hat.
## Laufzeitverhalten
- Integrierte Richtlinien werden vor benutzerdefinierten Richtlinien ausgewertet.
- Das erste `deny` stoppt die weitere Richtlinienauswertung.
-- Mehrere `instruct`-Ergebnisse können kombiniert werden, wenn keine Richtlinie das Ereignis ablehnt.
-- Eine Richtlinienfunktion hat eine Ausführungsfrist von 10 Sekunden.
+- Mehrere `instruct`-Ergebnisse können kombiniert werden, wenn keine Richtlinie das Event ablehnt.
+- Eine Richtlinienfunktion hat eine Ausführungsfrist von 10 Sekunden. Das Laden des Top-Level-Moduls unterliegt derselben Frist.
- Eine ausgelöste Ausnahme oder ein Timeout wird protokolliert und als `allow()` behandelt.
-- Eine Konventionsdatei, die nicht geladen werden kann, wird übersprungen; andere benutzerdefinierte Dateien und integrierte Richtlinien werden weiterhin ausgeführt.
-- Das Laden von Modulen auf oberster Ebene hat ebenfalls eine Frist von 10 Sekunden.
-- Im Cloud-Observe-Modus wird die Richtlinie ausgeführt, aber eine Nicht-allow-Entscheidung wird aufgezeichnet, ohne sie durchzusetzen.
+- Eine Konventionsdatei, die nicht geladen werden kann, wird übersprungen; andere benutzerdefinierte Dateien und integrierte Richtlinien werden weiter ausgeführt.
+- Der Observe-Modus führt die Richtlinie real aus und zeichnet jedes Nicht-allow-Urteil auf, ohne es durchzusetzen. Zwei Ebenen setzen ihn: `failproofai publish --effect observe` für ein von Ihnen veröffentlichtes Pack und `fp fleet deploy --add :observe` für ein Cloud-Deployment. In jedem Fall wird die Richtlinie unter derselben 10-Sekunden-Frist wie eine durchsetzende ausgewertet, sodass eine Richtlinie, die das Timeout überschreitet, als allow aufgezeichnet wird.
+
+### Wo der Loader stattdessen auf Fehler reagiert
+
+Die oben genannte Fail-Open-Regel gilt für eine Datei, die Sie selbst abgelegt haben. Zwei Pfade tun absichtlich das Gegenteil, weil beide bedeuten, dass diesem Rechner mitgeteilt wurde, er habe eine Durchsetzung, die er nicht hat.
+
+| Situation | Ergebnis |
+| --- | --- |
+| Ein ausgewähltes Pack kann nicht geladen werden oder sein gepinnter Digest stimmt nicht überein | Jedes Event im Scope, den das Pack deklariert hat, wird abgelehnt und `pack/failproofai-pack-unavailable` zugeordnet. `UserPromptSubmit` weist an, anstatt abzulehnen, sodass Sie nie vom Agenten ausgesperrt werden, den Sie zur Behebung benötigen. Unlesbares Pack-Metadaten erweitert den abgelehnten Scope, anstatt ihn zu verkleinern. |
+| Der `failproofaid`-Daemon kann auf einem Rechner, der das Setup abgeschlossen hat, nicht erreicht werden | Jedes Event wird abgelehnt. Es wird keine Konfiguration gelesen und keine benutzerdefinierte Richtlinie ausgeführt, da ein Daemon, der nicht erreicht werden konnte, diese auch nicht hätte ausführen können. Ein Protokollversionskonflikt lehnt ebenfalls ab, mit einer Nachricht, die `failproofai config` nennt. |
+
+Auf einem Rechner, der das Setup abgeschlossen hat, ist `failproofaid` der einzige Auswerter, sodass Ihre `fn` im Warm-Worker des Daemons und nicht im Hook-Prozess ausgeführt wird. Der Hook-Client erlaubt 150 ms zum Verbinden und 30 Sekunden für die Antwort, was deutlich über der festen 10-Sekunden-Frist liegt, die jede Richtlinienfunktion erhält.
+
+Halten Sie Policy-Module deterministisch und schnell. Vermeiden Sie Netzwerkaufrufe oder Serverstart auf oberster Ebene. Begrenzen Sie die Arbeit innerhalb von `fn`, behandeln Sie Abhängigkeitsfehler und entscheiden Sie bewusst, ob dieser Fehler die Operation erlauben oder ablehnen soll.
+
+## Von einer Datei zu einem Pack
+
+Ein Pack ist die Art und Weise, wie eine Richtliniendatei zu etwas wird, das andere Rechner installieren können. Zwei Befehle führen Sie von null bis zu einem veröffentlichten Pack:
+
+```bash
+failproofai publish --init
+failproofai publish
+```
+
+`--init` fragt, wie das Pack heißt, schreibt `.mjs` und hört auf. Die Datei ist keine Vorlage mit Lücken – es handelt sich um eine Richtlinie, die bereits `git push --force` blockiert, sodass das Erste, was Sie bearbeiten, bereits funktioniert. Testen Sie es lokal mit `failproofai policies -i -c ./.mjs`, und führen Sie dann `failproofai publish` aus dem Git-Repository heraus aus, das es enthält.
+
+Zwei Felder sind wichtig, sobald eine Richtlinie in einem Pack ausgeliefert wird:
+
+| Feld | Bedeutung |
+| --- | --- |
+| `category` | Was `failproofai policies add / --category git,database` auswählt. |
+| `defaultEnabled` | Ob ein reines `failproofai policies add /` diese Richtlinie aktiviert. Standard ist `false`. |
+
+`--effect` wird pro Pack und nicht pro Richtlinie gesetzt: `failproofai publish --effect observe` veröffentlicht ein Pack, das aufzeichnet, was seine Richtlinien entschieden hätten, und nichts blockiert. Der Standard ist `enforce`. Dies ist der Observe-Modus auf einem einzelnen Rechner ohne Cloud-Verbindung – lesen Sie die aufgezeichneten Urteile unter **Policies → Activity** im lokalen Dashboard zurück.
-Halten Sie Richtlinienmodule deterministisch und schnell. Vermeiden Sie Netzwerkaufrufe oder Server-Starts auf oberster Ebene. Begrenzen Sie die Arbeit innerhalb von `fn`, fangen Sie Abhängigkeitsfehler ab und entscheiden Sie bewusst, ob ein solcher Fehler die Operation erlauben oder ablehnen soll.
+Die Version des Packs ist der 12-stellige kurze Commit-SHA, aus dem es erstellt wurde, sodass `publish` außerhalb eines Git-Checkouts und auf einem schmutzigen Tree abgelehnt wird. Siehe [Publish a pack](/de/policies/publish-a-pack) für den vollständigen Ablauf und [Policy packs](/de/policies/packs) für die Versionsauflösung bei Installationen.
## API-Exporte
@@ -291,13 +355,18 @@ Halten Sie Richtlinienmodule deterministisch und schnell. Vermeiden Sie Netzwerk
| --- | --- |
| `customPolicies.add(policy)` | Eine benutzerdefinierte Richtlinie beim Laden des Moduls registrieren. |
| `allow(reason?)` | Die Operation erlauben. |
-| `instruct(reason)` | Die Operation erlauben und Hinweise bereitstellen, sofern unterstützt. |
-| `deny(reason)` | Die Operation blockieren, sofern unterstützt. |
-| `getCustomHooks()` | Die aktuell im Modul-Registry registrierten Richtlinien zurückgeben. |
-| `clearCustomHooks()` | Das Registry leeren, hauptsächlich für Tests und Loader. |
+| `instruct(reason)` | Die Operation erlauben und Hinweise geben, wo unterstützt. |
+| `deny(reason)` | Die Operation blockieren, wo unterstützt. |
+| `getCustomHooks()` | Die derzeit im Modulregister registrierten Richtlinien zurückgeben. |
+| `clearCustomHooks()` | Dieses Register leeren, primär für Tests und Loader. |
TypeScript exportiert `PolicyContext`, `PolicyResult`, `CustomHook`, `PolicyDecision` und `PolicyFunction`.
-
- Veröffentlichen Sie eine Version, deployen Sie sie im Observe-Modus, überprüfen Sie Entscheidungen und wechseln Sie zur Durchsetzung.
-
\ No newline at end of file
+
+
+ Veröffentlichen Sie Ihre Richtlinien als Pack, das jeder über ein öffentliches GitHub-Release installieren kann.
+
+
+ Eine Version veröffentlichen, im Observe-Modus bereitstellen, Entscheidungen prüfen und zur Durchsetzung übergehen.
+
+
\ No newline at end of file
diff --git a/docs/de/reference/troubleshooting.mdx b/docs/de/reference/troubleshooting.mdx
index f4eb3a0d0..9a48312a6 100644
--- a/docs/de/reference/troubleshooting.mdx
+++ b/docs/de/reference/troubleshooting.mdx
@@ -1,167 +1,100 @@
---
title: "Fehlerbehebung"
-description: "Diagnose von fehlenden Sitzungen, fehlenden Richtlinien, fehlgeschlagener Zustellung und blockierten Agent-Aktionen."
+description: "Diagnose von Setup-, Zustellungs-, Richtlinien- und Sitzungsproblemen."
icon: "wrench"
---
-
-
-
-
- Öffne **Administration → Schlüssel** und prüfe, ob der Maschinenschlüssel aktiv ist und `events:add` besitzt. Öffne dann **Beobachten → Ereignisse**, erweitere den Zeitraum und entferne Umgebungs- und Agent-Filter. Wenn Ereignisse vorhanden sind, suche nach der Sitzungs-ID und prüfe dann **Beobachten → Sitzungen** auf Gruppierungen. Wenn keine Ereignisse vorhanden sind, diagnostiziere den Failproof-Daemon über die CLI.
-
- 
-
-
- ```bash
- failproofai config --status
- failproofai flush --wait --timeout 60
- fp list envs
- fp events --since 24h --limit 20
- fp sessions --since 24h --limit 20
- ```
-
- Bestätige, dass die Erfassung aktiviert ist, der konfigurierte Schlüssel `events:add` besitzt und der Dashboard-Filter zur emittierten Umgebung passt.
-
-
-
-
-
-
- Entferne Filter unter **Beobachten → Ereignisse** und suche nach der exakten SDK-Sitzungs-ID. Wenn nichts erscheint, untersuche den SDK-Spool und den Failproof-Daemon auf dem Quellrechner.
-
-
- ```bash
- failproofai config --status
- failproofai flush --wait
- ```
-
- Bestätige, dass ein Daemon läuft und verbunden ist – das SDK spult unabhängig davon, ob einer vorhanden ist. Das Spool-Verzeichnis muss **nicht** vorab existieren (der Schreiber erstellt es), und keine Umgebungsvariable wählt es aus: `$FAILPROOFAI_HOME/custom-agents`, andernfalls `~/.failproofai/custom-agents`, ist der einzige Wurzelpfad, und `configure(base_dir=...)` ist die einzige Überschreibungsmöglichkeit. Wenn der Prozess per `SIGKILL` oder durch OOM beendet wurde, gehen noch in der Warteschlange befindliche Daten verloren – verarbeite `SIGTERM`, um das zu begrenzen.
-
-
-
-
-
-
- Öffne **Admin → Durchsetzung**, wähle den Rechner aus und vergleiche dessen zugewiesene, gemeldete und frühere Versionen. Prüfe, ob der Deployment-Scope den Rechner einschließt und sein Schlüssel `policies:pull` besitzt. Die Ereignisaufnahme kann funktionieren, auch wenn die Richtlinienlieferung nicht funktioniert.
-
-
-
- ```bash
- failproofai config --status
- failproofai update
- failproofai config --status
- ```
-
- Prüfe, ob Maschinen-ID und Bezeichnung mit dem Dashboard-Ziel übereinstimmen. Stelle bei Bedarf die Verbindung mit einem richtlinienfähigen Schlüssel her, wenn die vorhandenen Anmeldedaten nur die Ereignisaufnahme erlauben.
-
-
-
-
-
-
- Öffne **Admin → Durchsetzung** und überprüfe den Zeitpunkt der letzten Verbindung des Rechners sowie die gemeldete Version. Wenn der Rechner veraltet ist, handelt es sich um ein lokales Daemon-Problem. Schwäche die bereitgestellte Richtlinie nicht allein aus, um einen nicht verfügbaren Daemon zu umgehen.
-
-
-
- ```bash
- failproofai config --status
- failproofai update
- failproofai config
- failproofai config --status
- ```
-
- Starte `failproofaid` neu oder aktualisiere es; führe die Konfiguration erneut aus, wenn sich die Protokollversionen von CLI und Daemon unterscheiden. Der konfigurierte Daemon-Pfad schlägt by design auf Sperrung fehl.
-
-
-
-
-
-
- Öffne bei einer Cloud-erstellten Richtlinie den **Admin → Richtlinien-Editor**, wähle den Entwurf aus und überprüfe Validierungsfehler vor der Veröffentlichung. Validiere bei einer lokalen Richtlinie diese über die CLI und öffne dann nach einer Testüberprüfung **Beobachten → Richtlinien**, um zu bestätigen, dass Entscheidungen ankommen.
-
-
-
- Stelle sicher, dass der Dateiname auf `policies.js`, `policies.mjs` oder `policies.ts` endet, das Modul `customPolicies.add(...)` aufruft und Imports aus der Richtliniendatei auflösbar sind.
-
- ```bash
- failproofai policies --install --custom ./checkout.policies.ts
- failproofai policies
- ```
-
-
-
-
-
-
- Öffne **Analysieren → Audits**, wähle den Durchlauf aus und prüfe, ob die Modellanalyse ausgeführt wurde. Vergleiche dann Scope und Zeitfenster mit **Beobachten → Sitzungen** und öffne repräsentative Traces aus dieser Population.
-
- Ein Null-Ergebnis ist nur dann aussagekräftig, wenn die Analyse erfolgreich durchgeführt wurde. Wenn die Analyse übersprungen wurde oder fehlgeschlagen ist, produziert der Durchlauf keine Ergebnisse und hält das nicht analysierte Fenster für einen zukünftigen erfolgreichen Durchlauf offen. Wenn die Modellanalyse deaktiviert ist, produziert das Audit ebenfalls keine Ergebnisse, da der deterministische Credential- und PII-Scan nur Statistiken aufzeichnet, aber keine Befunde mehr meldet.
-
- 
-
-
- ```bash
- fp audits show
- fp audits runs
- fp sessions --since 24h --env production
- fp audits context-show
- fp audits run
- fp audits findings --audit
- ```
-
- Wenn der Durchlauf in der Warteschlange verblieben ist, warte auf Audit-Agent-Kapazität oder bitte den Deployment-Betreiber, die Audit-Flotte zu überprüfen. Ein Audit in der Warteschlange wird erneut versucht; es wird nicht sofort übersprungen.
-
-
-
-
-
-
- Öffne eine abgeschlossene Sitzung und prüfe, ob eine manuelle Auswertung erfolgreich ist. Hosted Cloud bietet derzeit keine Kontrolle über den Evaluator-Endpunkt im Dashboard; der Server-Betreiber muss dies konfigurieren.
-
-
- Überprüfe zunächst den Evaluator selbst und untersuche dann die aktuellen Auswertungszustände:
-
- ```bash
- curl https://evaluator.example.com/health
- fp evals --since 1h
- ```
-
- Stelle bei selbst gehostetem Cloud sicher, dass `EVALUATOR_ENDPOINT` auf dem Server vorhanden ist und `EVALUATOR_TOKEN` mit dem Evaluator übereinstimmt. Die automatische Auswertung ist deaktiviert, wenn der Endpunkt fehlt.
-
-
-
-
-
-
- Verwende den Organisationswechsler und bestätige den erwarteten Slug und die Berechtigungen, bevor du die Ergebnisse mit der CLI vergleichst.
-
-
- ```bash
- fp whoami
- fp orgs current
- fp orgs perms
- ```
-
- Gib im API-Schlüsselmodus `fp --org --api-key ...` an oder setze `AGENTEYE_ORG`. Der gespeicherte Organisationsstatus einer menschlichen Sitzung wird bei API-Schlüssel-Anfragen absichtlich ignoriert.
-
-
-
-
-
-
- Öffne **Beobachten → Richtlinien**, sichere die Entscheidung und die verknüpfte Sitzung und identifiziere die False-Positive-Bedingung. Öffne dann **Admin → Durchsetzung** und setze die betroffenen Rechner auf die vorherige Version zurück. Erstelle eine engere Version im **Richtlinien-Editor**, teste sie auf einem kleinen Scope und erweitere ihn erst, wenn legitime Arbeit erfolgreich ist.
-
-
-
- Das Zurücksetzen von Cloud-Deployments ist nur über das Dashboard möglich. Eine lokale Sitzungspause deaktiviert Cloud-verwaltete Richtlinien nicht. Wenn das Dashboard nicht verfügbar ist, erfasse den Rechner- und Deployment-Status und stelle den Dashboard-Zugang wieder her, anstatt die blockierte Aktion wiederholt zu versuchen.
-
- ```bash
- failproofai config --status
- ```
-
-
-
-
-
-Wenn du den Support kontaktierst, gib die CLI-Version, den Harness, die Umgebung, die relevante Sitzungs- oder Deployment-ID sowie die Ausgabe von `failproofai config --status` mit entfernten Geheimnissen an.
\ No newline at end of file
+Starten Sie mit:
+
+```bash
+failproofai config --status
+failproofai policies
+```
+
+## Ein Agent ist nicht verbunden
+
+Führen Sie das Setup erneut aus:
+
+```bash
+failproofai config
+```
+
+Das Setup unterstützt Linux und macOS. Für die Installation des Dienstes ist einmalig Administratorzugriff erforderlich, es wird jedoch nie nach einem sudo-Passwort gefragt.
+
+Überprüfen Sie Harness-Pfade und Scopes unter [Harnesses](/de/reference/harnesses).
+
+## Eine Sitzung fehlt
+
+```bash
+failproofai flush --wait
+failproofai backfill --since 30d --dry-run
+failproofai harness list
+```
+
+Lassen Sie `--dry-run` weg, um alte Verläufe erneut zu senden. Fügen Sie einen weiteren Transkriptpfad hinzu mit:
+
+```bash
+failproofai harness add-path [label=]
+```
+
+Verwenden Sie ein Label, wenn zwei Speicherorte Kopien desselben Projekts enthalten.
+
+## Jede geschützte Aktion wird abgelehnt
+
+Auf einer konfigurierten Maschine ist `failproofaid` der einzige Evaluator. Kann er nicht antworten, schlagen geschützte Aktionen geschlossen fehl.
+
+```bash
+failproofai config --status
+systemctl status failproofaid@$USER # Linux
+sudo launchctl print system/ai.failproof.failproofaid.$USER # macOS
+```
+
+Führen Sie `failproofai config` aus, um den Dienst zu reparieren oder neu zu installieren.
+
+## Ein Pack lehnt ab
+
+`failproofai policies` zeigt Packs an, die nicht geladen werden können. Ein ausgewählter Pack schlägt geschlossen fehl, anstatt zu verschwinden.
+
+Häufige Ursachen:
+
+- Das Artefakt wurde nach der Installation verändert.
+- Manifest und gebündelte Richtlinien stimmen nicht überein.
+- Die Datei fehlt oder kann nicht importiert werden.
+- Der Pack verwendet ein nicht unterstütztes Event, Tool oder eine nicht unterstützte Richtlinienstruktur.
+
+Entfernen Sie den Pack oder installieren Sie eine korrigierte Version:
+
+```bash
+failproofai policies remove owner/repo
+failproofai policies add owner/repo@
+```
+
+## Cloud ist getrennt
+
+Verwenden Sie bevorzugt eine Umgebungsvariable für den Schlüssel:
+
+```bash
+export FAILPROOFAI_CLOUD_TOKEN=""
+failproofai config
+failproofai config --status
+```
+
+Eine Maschine kann Richtlinien abrufen und Aktivitäten unabhängig voneinander senden. Der Status gibt beides an.
+
+## Eine Richtlinie hat nicht blockiert
+
+Überprüfen Sie drei Dinge:
+
+1. Die Richtlinie ist aktiv: `failproofai policies`.
+2. Ihr Event und Tool stimmen mit der Aktion überein.
+3. Dieses Harness kann das Event durchsetzen.
+
+Eine Tool-Call-Ablehnung wird auf allen 12 unterstützten Harnesses verifiziert. Andere Events variieren. Siehe [Durchsetzungsfähigkeit](/de/reference/harnesses#enforcement-capability).
+
+## Downloads werden blockiert
+
+- `FAILPROOFAI_NO_DOWNLOAD=1` verweigert Netzwerk-Downloads.
+- `FAILPROOFAI_DAEMON_BASE_URL` leitet Dienst-Downloads an einen Mirror weiter.
+- `FAILPROOFAI_PACK_BASE_URL` leitet Pack-Downloads an einen Mirror weiter.
+
+Installierte Packs setzen die Richtlinien auch bei deaktivierten Downloads weiter durch.
\ No newline at end of file
diff --git a/docs/de/sessions/assistant.mdx b/docs/de/sessions/assistant.mdx
index b0dacc4e6..1c017bc6f 100644
--- a/docs/de/sessions/assistant.mdx
+++ b/docs/de/sessions/assistant.mdx
@@ -1,10 +1,10 @@
---
-title: "Failproof Assistant"
-description: "Failproof AI in natürlicher Sprache analysieren und bedienen – von Fragen und Abfragen bis hin zu Dashboards und Audits."
+title: "Cloud-Assistent"
+description: "Failproof AI in natürlicher Sprache analysieren und steuern – von Fragen und Abfragen bis hin zu Dashboards und Audits."
icon: "message-square-text"
---
-Weisen Sie den Failproof Assistant an, beliebige Aufgaben in Failproof AI in natürlicher Sprache auszuführen. Er kann Sitzungen und Fehler analysieren, Abfragen ausführen, Dashboards erstellen, Evaluierungen und Alarme untersuchen sowie Audits erstellen und durchführen – ohne dass Sie die Aufgabe in Produktbildschirme oder CLI-Befehle übersetzen müssen.
+Der Failproof AI Cloud-Assistent beantwortet Fragen zu Ihrer Flotte in natürlicher Sprache. Er kann Sitzungen und Fehler analysieren, Abfragen ausführen, Dashboards erstellen, Auswertungen und Warnmeldungen untersuchen sowie Audits erstellen und durchführen – ohne dass Sie die Aufgabe in Produktmasken oder CLI-Befehle übersetzen müssen. Im Dashboard heißt die Schaltfläche **Open agent chat**; in der [`fp`-CLI](/de/reference/cloud-cli) ist es die Befehlsgruppe `fp agent`.
```text
Why did production checkout agents regress this week?
@@ -13,41 +13,77 @@ Create an audit that finds agents retrying the same failed action without changi
Show me the sessions behind the most common audit finding.
```
-Der Assistent arbeitet mit den Daten und Berechtigungen, die in der aktiven Organisation verfügbar sind. Prüfen Sie die Belege und vorgeschlagenen Änderungen, bevor Sie Aktionen anwenden, die andere Benutzer oder Agenten betreffen.
+Der Assistent arbeitet mit den Daten und Berechtigungen der aktiven Organisation. Prüfen Sie seine Belege und vorgeschlagenen Änderungen, bevor Sie Aktionen anwenden, die andere Benutzer oder Agenten betreffen.
-## Den Assistenten verwenden
+
+ Der Assistent läuft im Dashboard, und seine Chats gehören einer Person – es gibt daher keine API-Route, die ein Schlüssel aufrufen könnte. Jeder `fp agent`-Unterbefehl erfordert eine angemeldete Sitzung (`fp login`) und die Berechtigung `agent:use`; unter `--api-key` oder `FP_API_KEY` wird mit Exit-Code 2 beendet. Ein API-Schlüssel kann den Assistenten nie erreichen, weshalb ein geplanter Job ein angemeldetes Sitzungstoken über `--token` oder `FP_TOKEN` mitführen muss. Das funktioniert – `fp agent ask` liest die Frage von stdin, wenn kein TTY vorhanden ist –, aber ein Sitzungstoken läuft nach etwa 24 Stunden nach `fp login` ab, was den Assistenten für unbeaufsichtigte Automatisierung wenig geeignet macht, auch wenn er technisch läuft.
+
+
+## Den Assistenten befragen
- 1. Wählen Sie **Open agent chat** aus und beschreiben Sie, was Sie verstehen, erstellen oder bedienen möchten.
- 2. Beobachten Sie die Tool-Aufrufe, Tabellen und Abfrageergebnisse des Assistenten während der Bearbeitung.
- 3. Öffnen Sie die zitierte Sitzung, den Alarm oder die Abfrage, um das Ergebnis anhand der Quelldaten zu überprüfen.
- 4. Starten Sie einen neuen Chat für eine andere Untersuchung oder nutzen Sie den Chatverlauf, um dieselbe Analyse fortzuführen.
+ 1. Wählen Sie **Open agent chat** und beschreiben Sie, was Sie verstehen, erstellen oder steuern möchten.
+ 2. Verfolgen Sie die Tool-Aufrufe, Tabellen und Abfrageergebnisse des Assistenten während der Arbeit.
+ 3. Öffnen Sie die zitierte Sitzung, Warnmeldung oder Abfrage, um das Ergebnis anhand der Quelldaten zu verifizieren.
+ 4. Starten Sie einen neuen Chat für eine andere Untersuchung, oder nutzen Sie den Chatverlauf, um dieselbe Analyse fortzuführen.

+ Beginnen Sie mit `health`. Der Befehl meldet, ob der Assistent für dieses Deployment aktiviert ist und ob ein LLM dafür konfiguriert ist. Fehlt ein LLM, schlägt `ask` fehl und `models` meldet keines – `chats`, `show`, `rename` und `delete` konsultieren health überhaupt nicht und funktionieren weiterhin.
+
```bash
fp agent health
fp agent models
fp agent ask "Which production checkout agents had the most tool errors in the last 24 hours?"
+ ```
+
+ `fp agent models` listet die Modelle, die dieses Deployment zulässt, sowie das Standardmodell. Übergeben Sie eines davon mit `ask --model `. Verankern Sie eine Antwort in bereits vorhandenem Text mit `--page-context `, und pipen Sie die Frage über stdin, anstatt sie als Argument zu übergeben, wenn sie aus einer Datei oder einem vorherigen Befehl stammt:
+
+ ```bash
+ cat incident-notes.md | fp agent ask --model
+ ```
+
+ Jede Anfrage wird in einem Chat gespeichert. Ohne `--chat` wird ein neuer Chat gestartet und seine kurze ID ausgegeben; mit `--chat` wird dieser Thread fortgesetzt.
+
+ ```bash
fp agent chats
fp agent show
fp agent ask "Open representative sessions" --chat
+ fp agent rename --title "checkout regression"
+ fp agent delete --yes
```
- Verwenden Sie `fp agent rename --title `, um eine Untersuchung leicht wiederauffindbar zu halten, und `fp agent delete `, um sie zu entfernen.
+ `fp agent chats` listet Ihre Chats neueste zuerst im Format `chat-id · title · messages · updated`, wobei `updated` das Alter der letzten Aktivität im Chat angibt. Die angezeigte `chat-id` ist die Kurzform – die ersten 8 Zeichen –, und `show`, `rename`, `delete` sowie `ask --chat` lösen diesen Präfix auf. Eine ID, die nichts trifft, beendet mit Exit-Code 6 und einem `chat not found`-Hinweis; eine ID, die mehrere Treffer hat, fordert ein längeres Präfix an.
+
+ `fp agent delete` fragt zur Bestätigung nach. `--yes` überspringt die Aufforderung, ebenso jeder nicht-interaktive Aufruf: unter `--json` oder mit umgeleitetem stdin wird ohne Rückfrage fortgefahren.
## Effektiv mit dem Assistenten arbeiten
-- Geben Sie zuerst ein Ziel an; fügen Sie eine Umgebung, einen Workflow oder einen Zeitraum hinzu, wenn diese Grenzen relevant sind.
-- Betrachten Sie generierten SQL-Code und Zusammenfassungen als Hilfsmittel bei der Untersuchung, nicht als abschließenden Beweis.
-- Öffnen Sie repräsentative Sitzungen, bevor Sie ein Audit, ein Issue, einen Alarm oder eine Policy erstellen.
+- Nennen Sie zuerst ein Ziel; fügen Sie Umgebung, Workflow oder Zeitraum hinzu, wenn diese Grenzen relevant sind.
+- Behandeln Sie generiertes SQL und Zusammenfassungen als Ermittlungshilfe, nicht als abschließende Belege.
+- Öffnen Sie repräsentative Sitzungen, bevor Sie ein Audit, einen Issue, eine Warnmeldung oder eine Richtlinie erstellen.
- Halten Sie Filter für Organisation, Umgebung und Zeitraum explizit.
-- Speichern Sie nützlichen SQL-Code als Abfrage, damit andere Operatoren das Ergebnis reproduzieren können.
+- Speichern Sie nützliches SQL als Abfrage, damit ein anderer Operator das Ergebnis reproduzieren kann.
- Der Assistent kann nur das lesen, worauf Ihr aktueller Benutzer Zugriff hat. Erweitern Sie keine Berechtigungen, um eine Frage zu beantworten – bitten Sie stattdessen einen autorisierten Operator, die Untersuchung durchzuführen.
-
\ No newline at end of file
+ Es gelten zwei Berechtigungsebenen, und sie schlagen auf unterschiedliche Weise fehl. `agent:use` steuert die Funktion selbst: Ohne diese Berechtigung sind `fp agent` und der Dashboard-Chat nicht verfügbar. Die Antworten werden dann durch die Datenberechtigungen des angemeldeten Benutzers begrenzt – `events:read`, `evaluations:read`, `queries:run`, `policies:read` –, sodass ein Benutzer, der den Assistenten öffnen kann, für Daten, die er nicht lesen darf, dennoch eine leere Antwort erhält. Erweitern Sie keine Berechtigungen, um eine Frage zu beantworten; bitten Sie stattdessen einen autorisierten Operator, die Untersuchung durchzuführen. Siehe [Keys and permissions](/de/admin/keys-and-permissions).
+
+
+
+
+ Speichern Sie das vom Assistenten erstellte SQL, damit ein anderer Operator es erneut ausführen kann.
+
+
+ Wandeln Sie eine gespeicherte Abfrage in ein Diagramm um, das das Team im Blick behält.
+
+
+ Untersuchen Sie ein Fehlermuster über eine Population von Sitzungen hinweg.
+
+
+ Verhindern Sie eine wiederholbare Aktion, anstatt sie nächste Woche erneut zu finden.
+
+
\ No newline at end of file
diff --git a/docs/de/sessions/dashboards.mdx b/docs/de/sessions/dashboards.mdx
index 2c48a2616..aa06cdad9 100644
--- a/docs/de/sessions/dashboards.mdx
+++ b/docs/de/sessions/dashboards.mdx
@@ -4,40 +4,70 @@ description: "Verfolge die Zuverlässigkeitssignale, die für einen Agenten oder
icon: "layout-dashboard"
---
-Dashboards kombinieren gespeicherte Abfragen zu einer operativen Ansicht. Baue eines rund um eine Entscheidung auf, die jemand treffen soll – nicht rund um alle verfügbaren Metriken.
+Dashboards kombinieren gespeicherte Abfragen zu einer operativen Übersicht. Baue ein Dashboard um eine Entscheidung herum, die jemand treffen soll – nicht um jede verfügbare Metrik.
-## Dashboard erstellen
+Dashboards sind eine Cloud-Oberfläche. Das lokale Dashboard auf `localhost:8020` umfasst Policy-Aktivitäten, Projekte, Sessions und Audit-Ergebnisse, hat aber keine gespeicherten Abfragen und keine Kacheln – eine Maschine, die keine Verbindung hergestellt hat, hat daher hier nichts aufzubauen. Siehe [Lokales Dashboard](/de/reference/local-dashboard).
+
+## Ein Dashboard erstellen
- 1. Gehe zu **Analyze → Queries**, erstelle oder öffne eine gespeicherte Abfrage und validiere ihr Ergebnis.
- 2. Wähle **add to dashboard**, dann wähle ein bestehendes Dashboard oder erstelle eines unter **Analyze → Dashboards**.
- 3. Öffne das Dashboard, wechsle in den Bearbeitungsmodus, ordne die Kacheln an und speichere das Layout.
+ 1. Gehe zu **Analyze → Queries**, erstelle oder öffne eine gespeicherte Abfrage und überprüfe ihr Ergebnis.
+ 2. Wähle **add to dashboard**, dann wähle ein vorhandenes Dashboard aus oder erstelle eines unter **Analyze → Dashboards**.
+ 3. Öffne das Dashboard, wechsle in den Bearbeitungsmodus, ordne Kacheln an und speichere das Layout.
4. Kehre zur Abfrage zurück, wenn du die Daten oder Filter hinter einer Kachel ändern möchtest.
- 
+ 
- Dashboard-CRUD ist im aktuellen Cloud CLI nicht verfügbar. Verwende die CLI, um die gespeicherte Abfrage zu erstellen und zu überprüfen, und füge sie anschließend über die Benutzeroberfläche einem Dashboard hinzu.
+ Dashboard-CRUD ist im aktuellen Cloud-CLI nicht verfügbar. Nutze die CLI, um die gespeicherte Abfrage zu schreiben und zu überprüfen, und füge sie dann über die UI einem Dashboard hinzu.
```bash
fp query schema
- fp query create "production error rate" --sql "SELECT ..."
- fp query run
+ fp query run --sql "select count(*) from analytics.events"
+ fp query create "event volume" --sql "select count(*) from analytics.events"
+ fp query run "event volume"
```
+
+ Führe das SQL zuerst mit `--sql` aus: Es wird gegen denselben schreibgeschützten Analytics-Pool ausgeführt, ohne etwas zu speichern – so findest du einen falschen Spaltennamen, bevor eine Kachel es tut. `--sql @file.sql` liest die Anweisung stattdessen aus einer Datei. `fp query schema` listet die abfragbaren Tabellen und ihre Spalten auf; übergebe einen Tabellennamen, um die Ausgabe einzugrenzen.
+
+ Gespeicherte Abfragen werden nach **Name** adressiert, nicht nach ID – `fp query run "event volume"` – weil `fp query list` die rohe ID verbirgt, sofern du nicht `--show-id` übergibst. Eine UUID-förmige ID wird ebenfalls akzeptiert.
+
+ Für eine parametrisierte Kachel bindest du jedes positionelle `$1..$N` mit `--arg`, das wiederholbar ist und der Reihe nach bindet: `fp query run --arg checkout-agent`.
+
+ `--limit` und `--all` passen nur die Vorschaubegrenzung der Tabelle an; `--json` gibt immer jede Zeile zurück, als `{columns: [{name, type}], rows: [[...]], truncated, elapsed_ms}`.
+
+ | Unterbefehl | Berechtigung |
+ | --- | --- |
+ | `query list`, `query show`, `query schema` | `queries:read` |
+ | `query create`, `query update` | `queries:write` |
+ | `query run` | `queries:run` |
+ | `query delete` | `queries:delete` |
+
+ Jeder Unterbefehl, der einen Abfrage-**Namen** entgegennimmt, löst diesen auf, indem er zuerst die Abfragen der Organisation auflistet. Daher benötigen `query create`, `query update`, `query delete` und `query run ` zusätzlich zu der oben genannten Berechtigung auch `queries:read`. Nur `fp query run --sql` und `fp query schema` nicht.
+
+ Keiner der `fp query`-Befehle wird im API-Key-Modus blockiert, sodass die Abfragen eines Dashboards aus einer CI-Umgebung erstellt und überprüft werden können.
Nützliche Dashboard-Gruppen umfassen:
-- **Models:** Volumen, Latenz, Token-Nutzung, Fehlerrate und Evaluierungswerte.
-- **Evaluations:** Erfolgsrate und Score-Trends nach Agent oder Umgebung.
-- **Tools:** Aufrufvolumen, Fehlerrate, Dauer und wiederholte Aufrufe.
-- **Hooks and policies:** Entscheidungen, Ablehnungen und Policy-Trefferrate.
-- **Custom workflow metrics:** Ergebnisse aus eigenen Event-Feldern und SQL.
+- **Modelle:** Volumen, Latenz, Token-Nutzung, Fehlerrate und Evaluierungswerte.
+- **Evaluierungen:** Erfolgsrate und Score-Trends nach Agent oder Umgebung.
+- **Tools:** Aufrufvolumen, Fehlerrate, Dauer und Wiederholungsaufrufe.
+- **Hooks und Policies:** Entscheidungen, Ablehnungen und Policy-Trefferrate.
+- **Benutzerdefinierte Workflow-Metriken:** Ergebnisse aus eigenen Ereignisfeldern und SQL.
-Beginne mit einer gespeicherten Abfrage, validiere ihr Ergebnis und füge sie dann als Kachel hinzu. Halte Produktions- und Entwicklungsfilter explizit, damit Test-Traffic keine Regression verdeckt.
+Beginne mit einer gespeicherten Abfrage, überprüfe ihr Ergebnis und füge sie dann als Kachel hinzu. Halte Produktions- und Entwicklungsfilter explizit, damit Testdatenverkehr keine Regression verdeckt.
+
+
+ Eine Hook-Kachel, die Zeilen zählt, meldet den falschen Nenner. Bei der standardmäßigen Hook-Ausführlichkeit wird jedes deny und instruct als `hook_triggered`/`hook_completed`-Paar ausgegeben, ebenso wie jedes allow im Observe-Modus; einfache allows werden pro Session, Ereignis, Tool und Policy-Attribution pro Minute zu einem einzigen `hook_completed` zusammengefasst, das `failproofai_allow_count` enthält. Summiere dieses Feld statt Zeilen zu zählen, sonst sieht eine Flotte, die zehntausende von Aufrufen ausgewertet hat, so aus, als hätte sie nur ein paar Hundert ausgewertet. Siehe [Policy decisions](/de/sessions/policy-decisions) und [Hooks](/de/sessions/hooks).
+
- Weise jedem Dashboard einen Verantwortlichen und eine Leitfrage zu, z. B. „Ist die Zuverlässigkeit des checkout-agent schlechter als letzte Woche?"
-
\ No newline at end of file
+ Weise jedem Dashboard einen Verantwortlichen und eine Antwortfrage zu, beispielsweise: „Ist die Zuverlässigkeit von checkout-agent schlechter als letzte Woche?"
+
+
+
+ Schreibe, speichere und teile das SQL, das jede Kachel auf einem Dashboard liest.
+
\ No newline at end of file
diff --git a/docs/de/sessions/errors.mdx b/docs/de/sessions/errors.mdx
index b2a284b45..8eb56b211 100644
--- a/docs/de/sessions/errors.mdx
+++ b/docs/de/sessions/errors.mdx
@@ -1,43 +1,63 @@
---
title: "Fehler"
-description: "Wiederholte Fehler gruppieren und die dahinterliegenden Sitzungen öffnen."
+description: "Wiederholte Fehler filtern und die dahinterliegenden Sitzungen öffnen."
icon: "circle-alert"
---
-Fehler bietet dir eine fehlerorientierte Übersicht über alle Sitzungen. Gruppiere nach Fehlertyp, Agent, Umgebung, Modell, Tool oder Zeitfenster, um wiederkehrende Betriebsprobleme zu identifizieren.
+Errors bietet eine fehlerorientierte Ansicht über alle Sitzungen hinweg. Filtern Sie nach Umgebung, Ereignistyp, Fehlertyp, Agent oder Sitzung und schränken Sie das Zeitfenster ein, um wiederkehrende Betriebsprobleme zu finden.
## Fehler untersuchen
- 1. Gehe zu **Observe → Errors**.
- 2. Filtere nach Umgebung, Ereignistyp, Fehlertyp, Agent, Sitzungs-ID oder Suchtext.
- 3. Klappe einen gruppierten Fehler auf, um die einzelnen Vorkommen zu sehen. Wähle eine Zeile aus, um das genaue Ereignis in der zugehörigen Sitzung zu öffnen.
- 4. Wähle das Glockensymbol bei einem repräsentativen Fehler aus, um einen Alert für ähnliche Fehler einzurichten.
+ 1. Gehen Sie zu **Observe → Errors**.
+ 2. Filtern Sie nach Umgebung, Ereignistyp, Fehlertyp, Agent, Sitzungs-ID oder Suchtext.
+ 3. Wählen Sie eine Zeile aus, um das genaue Ereignis in seiner Sitzung zu öffnen.
+ 4. Wählen Sie **alert** in einer repräsentativen Zeile aus, um einen Alert für ähnliche Fehler zu erstellen.
- 
+ 
```bash
- fp errors --env production --since 24h
+ fp errors --since 24h
fp errors --error-type TimeoutError --agent-id checkout-agent
- fp errors --aggregate --env production --since 7d
+ fp errors --event-type tool_result --since 24h
+ fp errors --aggregate --env local --since 7d
```
- Verwende `fp events --full --session-id `, wenn du die rohen Nutzdaten hinter einer Fehlerzusammenfassung benötigst.
+ Ein Tool-Fehler wird als fehlerhaftes `tool_result`-Ereignis übermittelt, nicht als einfaches `error`-Ereignis. Daher ist `--event-type tool_result` der richtige Weg, um Tool-Fehler von Modell- und Laufzeitfehlern zu trennen. `is_error` und `error_type` sind serverseitig berechnete Spalten in jeder Zeile, sodass in keinem Modus Payloads geparst werden.
+
+ Entdecken Sie gültige Filterwerte, anstatt sie zu raten: `fp list error_types`, `fp list agents`, `fp list envs` und `fp list event_types`.
+
+ **Diese fünf `fp errors`-Filter akzeptieren jeweils genau einen Wert** — `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id`. (`--search` ist die Ausnahme und kann wiederholt werden.) Dieselben Flag-Namen bei `fp events` und `fp sessions` akzeptieren mehrfache oder kommagetrennte Werte, sodass `--env prod,staging` dort funktioniert, hier aber nur mit dem Literal-String `prod,staging` übereinstimmt. Das liefert ein leeres Ergebnis statt eines Fehlers, was als „keine Fehler" gelesen wird.
+
+ Der Daemon kennzeichnet Ereignisse mit `local`, bis Sie dies ändern — daher trifft `--env production` bei einer Standardinstallation auf nichts zu. Siehe [Umgebungsbezeichnung ändern](/de/reference/events-and-configuration#change-an-environment-label).
+
+ `--all` paginiert automatisch nur bis zu `--limit`, das standardmäßig auf 50 gesetzt ist — schreiben Sie `--all --limit 500`, wenn Sie mehr als das möchten. Weitere Flags im Listenmodus sind `--order asc|desc`, `--cursor`, `--page-size` (max. 200), `--fields` und `--full-ids`. `--search` ist wiederholbar und gilt für beide Modi — eine Zeile stimmt überein, wenn sie einen der Suchbegriffe enthält.
+
+ `fp errors` benötigt `events:read`. Unter `--json` gibt der Listenmodus `{"errors": [...], "next_cursor": ...}` zurück und `--aggregate` gibt `{total, sessions, agents, last_ts, bins}` zurück. Verwenden Sie `fp events --full --session-id `, wenn Sie den rohen Payload hinter einer Fehlerzusammenfassung benötigen.
-## Fehler verwenden, wenn du Folgendes benötigst
+## Wann Sie Errors verwenden sollten
-- Die häufigste Fehlerklasse in der Produktionsumgebung ermitteln.
-- Herausfinden, ob ein bestimmtes Tool oder Modell einen Anstieg verursacht.
+- Die häufigste Fehlerklasse in der Produktion finden.
+- Ermitteln, ob ein bestimmtes Tool oder Modell einen Anstieg verursacht.
- Von einer aggregierten Anzahl zu repräsentativen Sitzungen springen.
- Einen Alert für das Wiederauftreten erstellen.
- Die betroffene Population in ein Audit einbeziehen.
-Ein Fehler ist ein beobachtetes Ereignis. Eine fehlgeschlagene Evaluierung ist ein Qualitätsurteil, und ein Audit-Befund ist ein untersuchtes Fehlermuster. Behalte diese Unterscheidungen im Blick, wenn du entscheidest, welchen Reaktions-Workflow du verwenden möchtest.
+Ein Fehler ist ein beobachtetes Ereignis. Eine fehlgeschlagene Auswertung ist ein Qualitätsurteil, und ein Audit-Befund ist ein untersuchtes Fehlermuster. Behalten Sie diese Unterscheidungen im Blick, wenn Sie entscheiden, welchen Reaktions-Workflow Sie verwenden.
+
+## Ohne Cloud-Konto
+
+Errors ist eine Cloud-Oberfläche. Auf einem Rechner, der nicht verbunden ist, durchsucht `failproofai audit` den bereits auf dem Datenträger gespeicherten Sitzungsverlauf nach riskanten und verschwenderischen Mustern und öffnet `http://localhost:8020/audit`. Fügen Sie `--schedule [days]` hinzu, um den Scan nach einem Zeitplan zu wiederholen und die Ergebnisse per E-Mail zu senden (Standard 7 Tage, Bereich 1 bis 90), `--status` um zu prüfen, ob die Planung aktiv ist, und `--no-schedule` um sie zu stoppen. Alles läuft auf dem lokalen Rechner, mit zwei Ausnahmen. Ein geplanter Scan übermittelt bei jedem Durchlauf — einschließlich eines fehlerfreien — die ID, Bezeichnung, Plattform und den abgedeckten Zeitraum dieses Rechners. Was ein sauberer Scan zurückhält, ist der Digest, nicht die Anfrage. Außerdem wird bei jedem Audit anonyme CLI-Telemetrie gesendet, sofern Sie nicht `FAILPROOFAI_TELEMETRY_DISABLED=1` setzen.
-
- Benachrichtige Verantwortliche, wenn ein Fehler oder eine Qualitätsbedingung einen Schwellenwert überschreitet.
-
\ No newline at end of file
+
+
+ Benachrichtigen Sie Verantwortliche, wenn ein Fehler oder eine Qualitätsbedingung einen Schwellenwert überschreitet.
+
+
+ Einen wiederkehrenden Fehler in ein untersuchtes Muster mit einem Verantwortlichen umwandeln.
+
+
\ No newline at end of file
diff --git a/docs/de/sessions/evaluations.mdx b/docs/de/sessions/evaluations.mdx
index 83eddd049..1529e909e 100644
--- a/docs/de/sessions/evaluations.mdx
+++ b/docs/de/sessions/evaluations.mdx
@@ -1,52 +1,80 @@
---
-title: "Online-Auswertungen"
-description: "Bewerte aktive und abgeschlossene Sessions hinsichtlich Qualität, Compliance, Kosten und Latenz."
+title: "Evaluierungen"
+description: "Abgeschlossene Sitzungen nach Qualität, Compliance, Kosten und Latenz bewerten."
icon: "gauge"
---
-Online-Auswertungen wenden konsistente Beurteilungen auf Agent-Sessions an. Verwende sie für Signale, die kontinuierlich gemessen werden sollten – anstatt erst bei einem Audit untersucht zu werden.
+Evaluierungen wenden konsistente Bewertungen auf Agent-Sitzungen an. Verwende sie für Signale, die kontinuierlich gemessen werden sollten, anstatt nur bei einer Prüfung untersucht zu werden.
-## Auswertungsqualität prüfen
+Ein Evaluator erhält eine abgeschlossene Sitzung. Das bedeutet eines von zwei Dingen: Die Sitzung hat ein End-Event gesendet, oder sie hat aufgehört, länger als das `inactivity_timeout_secs` des Evaluators Ereignisse zu senden. Eine noch laufende Ausführung wird nicht bewertet.
+
+
+ Die automatische Evaluierung gilt für die gesamte Deployment und ist deaktiviert, bis ein Operator `EVALUATOR_ENDPOINT` setzt. Bis dahin ist diese Ansicht leer, `fp evals` gibt nichts zurück, und `fp sessions` zeigt für jede Zeile einen leeren Status an — was in der Regel bedeutet, dass kein Evaluator konfiguriert ist, nicht dass nichts schlecht bewertet wurde. Siehe [Evaluator SDK](/de/reference/evaluator-sdk).
+
+
+## Evaluierungsqualität prüfen
1. Gehe zu **Observe → Evaluations**.
- 2. Füge eine Reihe hinzu und wähle den Agent, die Umgebung, den Auswertungswert, die Statistik und die Kurve.
- 3. Füge weitere Reihen hinzu, um Umgebungen, Agents oder Score-Schlüssel zu vergleichen.
- 4. Wähle ein Ergebnis aus, um passende Sessions zu öffnen oder die gefilterte Ansicht zu teilen. Nutze **Observe → Metrics** für Latenz, Tokens, Kosten und andere Mengenwerte.
+ 2. Füge eine Datenreihe hinzu und wähle Agent, Umgebung, Evaluierungswert, Statistik und Kurve.
+ 3. Füge Datenreihen hinzu, um Umgebungen, Agents oder Score-Keys zu vergleichen.
+ 4. Wähle ein Ergebnis aus, um passende Sitzungen zu öffnen oder die gefilterte Ansicht zu teilen. Nutze **Observe → Metrics** für Latenz, Tokens, Kosten und andere Kennzahlen.
- 
+ 
- Öffne eine Session über die Drill-down-Ansicht, um die auswertungsspezifische Begründung zu prüfen:
+ Öffne eine Sitzung aus der Detailansicht, um die sitzungsspezifische Begründung zu prüfen:
- 
+ 
```bash
+ fp list score_filters
fp evals --agent-id checkout-agent --aggregate
- fp evals --aggregate --env production --status error
- fp evals --score helpfulness:0.8.. --since 7d
+ fp evals --aggregate --status error --since 7d
+ fp evals --score helpfulness:0.5..0.8 --score tool_efficiency:..0.3 --since 7d
+ fp evals --scores-full --since 24h
```
- Füge das globale Flag `--json` vor `evals` für die Automatisierung hinzu, z. B. `fp --json evals --aggregate --env production`.
+ Alle diese Befehle erfordern `evaluations:read` — einschließlich `fp sessions`, das dasselbe aktuelle Evaluierungsergebnis liest. Deshalb sieht ein auf `events:read` beschränkter Key zwar Traces, aber keine Scores.
+
+ Beginne mit `fp list score_filters`: Dies gibt die Score-Keys zurück, die dieses Deployment tatsächlich produziert, was einen `--score`-Filter überprüfbar macht, anstatt ihn zu erraten.
+
+ `--score KEY:MIN..MAX` hat optionale Grenzen und ist wiederholbar, wobei alle Bereiche gemeinsam gelten müssen: `helpfulness:0.5..0.8`, `tool_efficiency:..0.3`, `factuality:0.9..`. Ein fehlerhafter Wert wird abgelehnt, bevor die Anfrage gesendet wird, anstatt stillschweigend ignoriert zu werden. `--status` akzeptiert genau einen der Werte `done`, `error` oder `timeout`. `--scores-full` gibt alle Score-Paare aus, anstatt nur die ersten mit einem `+N`. `--all` stoppt bei `--limit`, das standardmäßig 50 beträgt.
+
+ Globale Optionen stehen vor dem Befehl, daher liest die Automatisierung `fp --json evals --aggregate`.
+
+ Der Daemon versieht jedes Event mit der Umgebung `local`, sofern du das nicht änderst. Daher trifft `--env production` bei einer Standardinstallation auf nichts zu. Siehe [Change an environment label](/de/reference/events-and-configuration#change-an-environment-label).
-Ein Evaluator erhält die Session-Identität, Umgebung, Zeitstempel und geordnete Ereignisse. Er kann numerische Score-Schlüssel mit optionaler Begründung und einer Zusammenfassung zurückgeben. Lang laufende Evaluatoren können einen ausstehenden Job zurückgeben und später abgefragt werden.
+## Was ein Evaluator austauscht
+
+| Nachricht | Felder |
+| --- | --- |
+| `EvalRequest` (eingehend) | `schema_version` (aktuell `"1"`), `session_id`, `agent_id`, `environment`, `started_at`, `ended_at` und `events` — der vollständige geordnete Stream, wobei jedes Event seine vollständige Nutzlast trägt. |
+| `EvalResponse` (ausgehend) | `scores` als numerische Keys, `reasoning` gespiegelt dazu, und eine `summary`. |
+| `JobPending` (ausgehend) | `job_id` und `next_poll_secs`, für Aufgaben, die nicht innerhalb einer einzigen Anfrage abgeschlossen werden können. |
+
+`ended_at` ist nur vorhanden, wenn die Sitzung ein End-Event gesendet hat — eine Sitzung, die aufgrund von Inaktivität weitergeleitet wird, hat daher keines. Das Polling-Intervall richtet sich nach `next_poll_secs`, dann nach `default_poll_interval_secs` des Evaluators, dann nach `EVALUATOR_POLLING_INTERVAL_SECS` des Servers, begrenzt auf einen Sekunden- bis Einstunden-Bereich mit einer maximalen Laufzeit von einer Stunde.
-## Geeignete Auswertungsziele
+Da die Anfrage vollständige Event-Nutzlasten enthält, sieht ein Evaluator den vollständigen Transkriptinhalt. Behandle die Übermittlung an den Evaluator wie die Übermittlung eines Transkripts, wenn du entscheidest, welche Daten das System senden darf.
+
+## Geeignete Evaluierungsziele
- Aufgabenerfüllung oder Korrektheit
-- Faktentreue und Halluzinationsrisiko
-- Tool-Auswahl und Tool-Effizienz
+- Fundiertheit und Halluzinationsrisiko
+- Werkzeugauswahl und Werkzeugeffizienz
- Richtlinien- oder Prozess-Compliance
- Kosten- und Latenzbudgets
-- Erforderliche Eskalation an Menschen
+- Erforderliche menschliche Eskalation
+
+Score-Keys sind stabile Bezeichner. Das Umbenennen eines Keys startet eine neue Diagrammreihe, anstatt die alte zu ändern, was einen Trend still unterbricht — wähle den Namen, bevor du ihn in einem Diagramm verwendest.
-## Von der Bewertung zur Reaktion
+## Vom Score zur Reaktion
-Zeige Werte in Dashboards an, um Trends zu verfolgen. Erstelle Alerts für Schwellenwerte oder zusammengesetzte Bedingungen. Wenn ein Score über eine Population hinweg sinkt, führe ein Audit durch, um die Ursache zu untersuchen; wenn die Ursache eine wiederholbare Aktion ist, setze eine Policy ein.
+Zeige Scores in Dashboards, um Trends zu verfolgen. Erstelle Alerts für Schwellenwerte oder zusammengesetzte Bedingungen. Wenn ein Score in einer Population sinkt, führe eine Prüfung durch, um die Ursache zu untersuchen. Wenn die Ursache eine wiederholbare Aktion ist, deploye eine Richtlinie.
- Implementiere synchrone oder asynchrone Auswertungen mit dem Python Evaluator SDK.
+ Implementiere synchrone oder asynchrone Evaluierung mit dem Python-Evaluator-SDK.
\ No newline at end of file
diff --git a/docs/de/sessions/hooks.mdx b/docs/de/sessions/hooks.mdx
index b043d6d92..18e573128 100644
--- a/docs/de/sessions/hooks.mdx
+++ b/docs/de/sessions/hooks.mdx
@@ -1,25 +1,34 @@
---
title: "Hooks"
-description: "Hook-Aktivitäten, Auslöser und Latenz getrennt von Policy-Ergebnissen messen."
+description: "Zeigt an, wann Failproof AI ein Agent-Event ausgewertet hat und welche Entscheidung getroffen wurde."
icon: "webhook"
---
-Hooks zeigt an, wann Agent-Lifecycle-Hooks ausgeführt werden und wie lange sie dauern. Policy-Entscheidungen sind in einer separaten Ansicht zu finden.
+Ein Hook ist ein Punkt, an dem ein Agent Failproof AI um eine Entscheidung bittet. Hook-Aktivitätsdatensätze erfassen das Event, die Richtlinie, das Ergebnis und die Auswertungszeit.
+
+## Hook-Aktivität untersuchen
- 1. Gehe zu **Observe → Hooks**.
- 2. Filtere nach Umgebung, Hook-Name, Auslöserereignis, Agent oder Session-ID.
- 3. Überprüfe Hook-Latenz und -Verteilung.
- 4. Wähle einen Chart-Punkt oder ein Hook-Segment aus, um die zugrundeliegenden Ereignisse zu öffnen.
+ Gehe zu **Observe → Hooks**. Filtere nach Umgebung, Event, Agent oder Session.
- 
+ 
```bash
+ fp guardrails summary --since 24h
+ fp --json events --full --event-type hook_completed --session-id --all --limit 500
fp list hooks
- fp events --event-type hook_triggered,hook_completed --env production --since 24h
- fp events --search "PreToolUse" --since 24h
```
-
\ No newline at end of file
+
+
+Standardmäßig wird jede `deny`- und `instruct`-Entscheidung vollständig übermittelt. Wiederholte allows werden gebündelt, um das Rauschen zu reduzieren. Setze `collector.hooks_verbosity` in `~/.failproofai/config.json` auf `all`, `decisions` oder `off`.
+
+
+ Hook-Aktivität belegt, dass eine Auswertung stattgefunden hat – nicht, dass das Harness das entsprechende Event hätte blockieren können. Siehe [Enforcement-Fähigkeit](/de/reference/harnesses#enforcement-capability). Ein nicht aufgeführtes Harness-Event-Paar gilt als nicht verifiziert.
+
+
+
+ Dieselbe Aktivität nach Ergebnis und Richtlinie einsehen.
+
\ No newline at end of file
diff --git a/docs/de/sessions/live-events.mdx b/docs/de/sessions/live-events.mdx
index 555191564..4d9cad4aa 100644
--- a/docs/de/sessions/live-events.mdx
+++ b/docs/de/sessions/live-events.mdx
@@ -1,45 +1,41 @@
---
-title: "Live-Events"
-description: "Beobachte Agenten-Aktivitäten in Echtzeit während einer laufenden Session."
+title: "Live-Ereignisse"
+description: "Beobachten Sie Agenten-Aktivitäten in Echtzeit in Failproof AI Cloud."
icon: "radio"
---
-Live-Events helfen dir, die Instrumentierung zu bestätigen und einen riskanten Durchlauf zu beobachten, ohne auf das Ende der Session warten zu müssen.
+Live-Ereignisse zeigen die Aktivität von Agenten in Echtzeit: Modellaufrufe, Tools, Fehler, menschliche Eingaben, Hooks und Richtlinienentscheidungen.
## Aktivität beobachten
-
-
- 1. Gehe zu **Observe → Events**.
- 2. Starte mit dem aktuellen Zeitfenster und ohne Filter, um zu bestätigen, dass Daten ankommen.
- 3. Filtere nach Umgebung, Event-Typ, Agent oder Session. Verwende die Suche für Payload-Text.
- 4. Wähle ein Event aus, um seine Zusammenfassung und Details einzusehen. Folge dem Session-Link für den vollständigen Trace.
+Gehen Sie zu **Observe → Live events** oder führen Sie folgendes aus:
- 
-
-
- ```bash
- fp events --env production --event-type tool_use,error --limit 100
- fp events --session-id --order asc --all
- fp --json events --full --session-id --all
- ```
+```bash
+fp events --since 1h
+fp events --event-type tool_use,tool_result --since 1h
+fp --json events --full --session-id --all --limit 2000
+```
- Der Standard-Feed lässt rohe Payloads weg. Verwende `--full` nur für eine eingegrenzte Session-Untersuchung.
-
-
+Verwenden Sie `--full`, wenn Sie die Inhalte der Nutzdaten benötigen. Der kompakte Feed ist schneller und für die meisten Filterzwecke ausreichend.
-Nutze den Event-Stream, um drei unmittelbare Fragen zu beantworten:
+Häufige Ereignistypen sind:
-- Meldet sich der erwartete Agent an die richtige Umgebung?
-- Kommen Modellaufrufe, Tool-Aufrufe und Policy-Entscheidungen in der richtigen Reihenfolge an?
-- Hat die Session aufgehört, Fortschritte zu machen, oder wiederholt sie eine Aktion?
+- `session_start` und `session_end`
+- `model_request` und `model_response`
+- `tool_use` und `tool_result`
+- `hook_triggered` und `hook_completed`
+- `error`
+- `human_wait` und `human_input`
+- `agent_pause` und `agent_resume`
-Event-Typen umfassen Agent-Lifecycle-Events, Modellanfragen und -antworten, Tool-Nutzung und -Ergebnisse, Hook-Ausführung, menschliche Wartezeiten und Unterbrechungen sowie explizite Fehler. Korrelations-IDs verbinden zusammengehörige Events, wie etwa einen Tool-Aufruf und sein Ergebnis.
+## Falls keine Ereignisse angezeigt werden
-
- Lass die Live-Ansicht zunächst breit, während du eine neue Integration verifizierst. Füge Filter erst hinzu, nachdem du das erste Event gesehen hast – ein falscher Filter kann wie eine fehlgeschlagene Ingestion aussehen.
-
+```bash
+failproofai flush --wait
+failproofai config --status
+failproofai backfill --since 30d --dry-run
+```
-Wenn keine Events erscheinen, führe `failproofai config --status` aus und [behebe Ingestion-Probleme](/de/reference/troubleshooting).
+Die Standardumgebung ist `local`. Ein Filter für `production` liefert keine Ergebnisse, bis Sie die Umgebungsbezeichnung entsprechend ändern.
-Agents, die nicht in einem der 12 unterstützten [Harnesses](/de/reference/harnesses) laufen, melden dieselben Event-Typen über das [Python SDK](/de/reference/custom-agents), einschließlich der Human-in-the-Loop-Events (`human_wait`, `human_input`, `human_interrupt`), auf die Gateway- und Produktions-Agents angewiesen sind.
\ No newline at end of file
+Für einen Agenten außerhalb eines unterstützten Frameworks verwenden Sie das [Python SDK](/de/reference/custom-agents).
\ No newline at end of file
diff --git a/docs/de/sessions/models.mdx b/docs/de/sessions/models.mdx
index 107948905..012fe91b3 100644
--- a/docs/de/sessions/models.mdx
+++ b/docs/de/sessions/models.mdx
@@ -1,27 +1,54 @@
---
title: "Modelle"
-description: "Vergleiche Modell-Latenz, Token, Kontextnutzung und Traffic-Verteilung."
+description: "Vergleich von Modell-Latenz, Tokens, Kontextnutzung und Traffic-Verteilung."
icon: "cpu"
---
-Verwende Modelle, um zu sehen, ob sich Zuverlässigkeit oder Kosten mit einem Modell, Agenten, einer Umgebung oder einem Zeitraum verändert haben.
+Verwende „Modelle", um zu sehen, ob sich Zuverlässigkeit oder Kosten mit einem Modell, Agenten, einer Umgebung oder einem Zeitraum verändert haben.
1. Gehe zu **Observe → Models**.
2. Lege den Zeitraum fest und filtere nach Umgebung, Modell, Agent oder Session-ID.
3. Überprüfe Latenz, Token-Verbrauch, Kontextfensternutzung und Modellverteilung.
- 4. Wähle einen Diagrammpunkt oder ein Verteilungssegment aus, um die passenden Ereignisse zu öffnen.
+ 4. Wähle einen Chartpunkt oder ein Verteilungssegment aus, um die zugehörigen Events zu öffnen.

```bash
fp list models
- fp events --event-type model_request,model_response --env production --since 24h
- fp --json events --fields ts,agent_id,session_id,event_type,output_tokens,context_fill
+ fp events --event-type model_request,model_response --since 24h
+ fp --json events --event-type model_response --since 24h --all --limit 500 --fields ts,agent_id,session_id,output_tokens,context_window,context_fill
```
- Verwende eine gespeicherte Abfrage für Aggregate auf Modellebene, die nicht als dedizierter CLI-Befehl verfügbar sind.
+ Alle drei benötigen `events:read`.
+
+ `--fields` projiziert Spalten; es filtert keine Zeilen. Kombiniere es mit `--event-type` und einem Zeitfenster, sonst erhältst du die neuesten 50 Events jedes Typs, bei denen `output_tokens` und `context_fill` bei allen Nicht-Modell-Events `null` sind. `--all` stoppt bei `--limit`, das standardmäßig 50 beträgt.
+
+ Lies `context_fill` zusammen mit `context_window`: Ein Füllwert bedeutet nichts ohne das Fenster, gegen das er gemessen wird.
+
+ Der Daemon versieht jedes Event mit der Umgebung `local`, sofern du das nicht änderst. Daher liefert `--env production` bei einer Standardinstallation keine Treffer. Siehe [Change an environment label](/de/reference/events-and-configuration#change-an-environment-label).
-
\ No newline at end of file
+
+
+## Was die CLI anzeigen kann und was nicht
+
+Der Standard-Event-Feed ist ohne Payload. Er enthält `output_tokens`, `context_window` und `context_fill` als hochgestufte Spalten – und sonst nichts über einen Modellaufruf:
+
+| Wert | Wo er gespeichert ist |
+| --- | --- |
+| Output-Tokens, Kontextfenster, Kontextfüllung | Light-Feed-Spalten – direkt über `fp events` verfügbar. |
+| Modellname | Payload – verwende `fp events --full`, begrenzt auf eine Session. |
+| Input-Tokens | Payload – das SDK erfasst beide Hälften, aber nur die Output-Hälfte wird hochgestuft. |
+| Latenz pro Aufruf | Keine `duration_ms`-Spalte im Light Feed, und `model_response` des SDK enthält ebenfalls keine. Berechne sie, indem du den Request mit der zugehörigen Response zusammenführst. |
+
+`model_request` und `model_response` werden über `request_id` verknüpft. Dieses Feld existiert genau dafür, damit ein Request seiner Antwort zugeordnet werden kann – und es ist der einzige Weg, die Latenz pro Aufruf aus Rohdaten zu berechnen:
+
+```bash
+fp --json events --full --event-type model_request,model_response --session-id --all --limit 500
+```
+
+Modellnamen werden unverändert aus dem Transkript des jeweiligen Harness übernommen. Nichts im Erfassungspfad normalisiert sie, sodass ein und dasselbe Modell im Verteilungsdiagramm unter mehreren anbieterspezifischen IDs erscheinen kann. Führe `fp list models` aus, um die tatsächlich verwendeten Schreibweisen eines Deployments zu sehen.
+
+Verwende eine gespeicherte Abfrage für Aggregate auf Modellebene, die nicht als dedizierter CLI-Befehl verfügbar sind.
\ No newline at end of file
diff --git a/docs/de/sessions/overview.mdx b/docs/de/sessions/overview.mdx
index 7e6407066..35d8e8a6a 100644
--- a/docs/de/sessions/overview.mdx
+++ b/docs/de/sessions/overview.mdx
@@ -1,57 +1,66 @@
---
title: "Sessions"
-description: "Beginnen Sie mit der vollständigen Aufzeichnung eines Agent-Runs."
-icon: "workflow"
+description: "Verfolge einen Agentenlauf von seinem Ziel über Tools und Entscheidungen bis zum Ergebnis."
+icon: "route"
---
-Eine Session ist der beste Ausgangspunkt, wenn ein Agent sich unerwartet verhält. Sie vereint die Modellanfragen, Antworten, Tool-Aufrufe, menschliche Interaktionen, Fehler, Auswertungen und Policy-Entscheidungen, die zu einem einzigen Run gehören.
+Eine Session ist ein einzelner Agentenlauf. Sie verbindet den Prompt, Modellaufrufe, Tools, Fehler, menschliche Eingaben, Policy-Entscheidungen und das abschließende Ergebnis.
-Sessions sehen gleich aus, egal welches Harness sie erzeugt hat. Ein Claude Code-Run, der ein Repository umschreibt, ein Hermes-Agent, der einem Kunden in Slack antwortet, und ein Python-Dienst, der mit dem SDK instrumentiert wurde – alle landen im gleichen Trace-Format, sodass eine einzige Ansicht die gesamte Flotte abdeckt.
-
-
-
-
-
-Verfolgen Sie einen Agent-Run von seinem Ziel über Modellaufrufe und Tools bis hin zur abschließenden Antwort.
-
-## Eine Session finden
+## Wo Sessions gespeichert werden
-
- 1. Navigieren Sie in der Cloud-Seitenleiste zu **Observe → Sessions**.
- 2. Legen Sie das Zeitfenster fest und filtern Sie nach Umgebung, Status, Agent oder Session-ID.
- 3. Fügen Sie Score- oder Metrikbereiche hinzu, wenn Sie einen Qualitäts-, Kosten-, Token- oder Latenz-Slice benötigen.
- 4. Wählen Sie eine Zeile aus, um den zugehörigen Trace zu öffnen. Verwenden Sie das Kopier-Steuerelement neben der Session-ID, wenn Sie sie teilen möchten.
-
- 
+
+ Starte `failproofai`, um das Dashboard unter `http://localhost:8020` zu öffnen. Der Sitzungsverlauf verbleibt auf diesem Rechner.
-
+
+ Verbinde den Rechner und öffne dann **Observe → Sessions**:
+
```bash
- fp sessions --env production --since 24h
- fp sessions --status error,timeout --agent-id checkout-agent
- fp --json sessions --session-id
+ export FAILPROOFAI_CLOUD_TOKEN=""
+ failproofai config
```
- Fügen Sie `--agents` hinzu, um Multi-Agent-Runs aufzuklappen, `--all` für die Paginierung oder `--fields`, um Ausgabespalten auszuwählen.
+ Cloud empfängt standardmäßig vollständige Transkripte. Um nur Policy-Entscheidungen zu übermitteln, verbinde dich zunächst und setze dann `collector.sessions` in `~/.failproofai/config.json` auf `false`. Das Setup-Flag `--no-transcripts` wendet diese Einstellung nicht an.
-## Was Sie tun können
+Sessions stammen von den 12 unterstützten [Agent-Harnesses](/de/reference/harnesses) sowie von Agenten, die mit dem [Python SDK](/de/reference/custom-agents) instrumentiert wurden.
-- Einen Run nach Agent, Umgebung, Zeit, Modell, Ereignistyp oder Fehlerstatus finden.
-- Die genaue Abfolge nachverfolgen, die zu einem Ergebnis geführt hat.
-- Erfolgreiche und fehlgeschlagene Runs vergleichen.
-- Die Belege öffnen, die einem Audit-Befund oder Alert-Vorfall zugrunde liegen.
-- Eine Session exportieren, wenn Sie eine Offline-Aufzeichnung benötigen.
+## Eine Session finden
-## Eine zuverlässige Untersuchungsreihenfolge
+In der Cloud kannst du nach Zeit, Umgebung, Status, Agent oder Session-ID filtern. Über die CLI:
-1. Ziel und Umgebung der Session bestätigen.
-2. Den ersten Fehler oder die erste unerwartete Entscheidung finden – nicht nur den abschließenden Fehler.
-3. Den Modellkontext und den Tool-Input unmittelbar davor prüfen.
+```bash
+fp sessions --since 24h
+fp sessions --status error,timeout --agent-id checkout-agent
+fp --json sessions --session-id
+```
+
+Verwende `fp errors --since 24h` für Fehler, die nie ausgewertet wurden. `fp sessions --status` nutzt das aktuellste Auswertungsergebnis – eine nicht ausgewertete Session hat daher keinen Status.
+
+## Einen Lauf lesen
+
+1. Ziel und Umgebung des Agenten bestätigen.
+2. Den ersten Fehler oder die erste unerwartete Entscheidung finden.
+3. Den Modellkontext und die Tool-Eingabe unmittelbar davor prüfen.
4. Wiederholungsversuche, Latenz und menschliche Unterbrechungen überprüfen.
-5. Bewertungsscores und Policy-Entscheidungen durchsehen.
+5. Auswertungen und Policy-Entscheidungen durchsehen.
+
+## Wenn eine Session fehlt
+
+```bash
+failproofai flush --wait
+failproofai config --status
+failproofai backfill --since 30d --dry-run
+```
+
+Verwende `failproofai harness add-path [=]`, wenn Sessions außerhalb des üblichen Speicherorts der Harness liegen – etwa in einem anderen Profil, einem Container-Home oder einem eingebundenen Team-Verzeichnis.
-
- Erfahren Sie, wie Sie von der Session-Zusammenfassung zum Ereignis gelangen, das das Ergebnis verursacht hat.
-
\ No newline at end of file
+
+
+ Finde das Ereignis, das zum Ergebnis geführt hat.
+
+
+ Sieh, was die Durchsetzung erlaubt, geleitet oder blockiert hat.
+
+
\ No newline at end of file
diff --git a/docs/de/sessions/policy-decisions.mdx b/docs/de/sessions/policy-decisions.mdx
index 3cbcaab49..31628cb19 100644
--- a/docs/de/sessions/policy-decisions.mdx
+++ b/docs/de/sessions/policy-decisions.mdx
@@ -1,27 +1,62 @@
---
-title: "Richtlinienentscheidungen"
-description: "Sehen Sie, welche Richtlinien ausgewertet, blockiert, angewiesen oder zugelassen wurden."
+title: "Policy-Entscheidungen"
+description: "Sehen Sie, welche Policies ausgewertet, gesteuert, blockiert oder beobachtet haben."
icon: "shield-check"
---
-Richtlinienentscheidungen erläutern, was die Durchsetzung bewirkt hat. Verwenden Sie diese Ansicht, um ein Rollout zu überprüfen, die Blockierrate zu messen und ungeschützte Aktivitäten zu finden.
+Policy-Entscheidungen zeigen, was Failproof AI während eines Agent-Durchlaufs getan hat.
- 1. Navigieren Sie zu **Observe → policy** und wählen Sie den Zeitraum sowie optional eine Maschine aus.
- 2. Überprüfen Sie ausgewertete Aktionen, Blockierungen, Blockierrate, Cloud-Entscheidungen, ungeschützte Aktionen und Aktivitäten während einer Pause.
- 3. Filtern Sie die Richtlinien-Mapping-Tabelle und prüfen Sie die bereitgestellten Zuweisungen.
- 4. Wählen Sie einen Diagrammpunkt aus, um die Entscheidungen und die zugehörigen Sitzungen zu öffnen.
+ Gehen Sie zu **Observe → policy**, um Entscheidungen, Blockierungsrate, Maschinen und bereitgestellte Zuweisungen zu überprüfen.
- 
+ 
```bash
- fp events --event-type hook_completed --env production --since 24h
- fp events --search "deny" --since 24h
+ fp guardrails summary --since 24h
+ fp guardrails timeline --since 24h
+ failproofai policies
failproofai config --status
```
- Verwenden Sie `failproofai` für den lokalen Durchsetzungsstatus der Maschine und `fp` für die Cloud-Ereignisuntersuchung.
+ `--since` akzeptiert `1h`, `6h`, `24h` oder `7d`. Fügen Sie `--machine ` hinzu, um sich auf eine Maschine zu konzentrieren.
-
\ No newline at end of file
+
+
+## Einen Observe-Rollout lesen
+
+Der Observe-Modus führt die echte Policy aus und zeichnet alle `deny`- oder `instruct`-Entscheidungen auf. Der Agent darf dabei weiter ausgeführt werden.
+
+```bash
+fp fleet deploy --add :observe
+fp guardrails summary --since 24h --machine
+fp fleet deploy --add :enforce
+```
+
+
+ Ein bloßes `--add ` erzwingt die Policy sofort, wenn sie noch nicht bereitgestellt ist. Fügen Sie `:observe` für einen Shadow-Rollout hinzu.
+
+
+Es werden nur Nicht-allow-Entscheidungen aufgezeichnet. Ein Timeout wird als allow erfasst, da dasselbe auch im Enforce-Modus geschieht.
+
+Ein aufgezeichnetes deny ist kein Beweis dafür, dass das Harness die Aktion gestoppt hat. Tool-Call-Denies werden über alle 12 unterstützten Harnesses hinweg verifiziert; andere Ereignisse variieren. Siehe [Durchsetzungsfähigkeit](/de/reference/harnesses#enforcement-capability).
+
+## Ein unerwartetes Ergebnis untersuchen
+
+| Was Sie sehen | Prüfen |
+| --- | --- |
+| Keine Entscheidungen | `failproofai config --status` und ob die Sitzung pausiert ist |
+| Viele Ablehnungen ohne Policy-Namen | [Policy-Fehlerverhalten](/de/policies/failure-behavior) |
+| Jede geschützte Aktion wird abgelehnt | Ob der `failproofaid`-Dienst fehlerfrei läuft |
+| Ein deny, das Sie nicht deaktivieren können | `block-failproofai-commands` ist immer aktiviert |
+| Keine Daten für `--env production` | Neue Maschinen verwenden die Umgebung `local` |
+
+
+
+ Beabsichtigte und angewendete Policies vergleichen.
+
+
+ Fail-Closed-Entscheidungen verstehen.
+
+
\ No newline at end of file
diff --git a/docs/de/sessions/queries.mdx b/docs/de/sessions/queries.mdx
index b98667c0f..9cc741558 100644
--- a/docs/de/sessions/queries.mdx
+++ b/docs/de/sessions/queries.mdx
@@ -4,50 +4,100 @@ description: "Erkunden Sie Sitzungs-, Ereignis- und Auswertungsdaten mit wiederv
icon: "database"
---
-Abfragen bilden die flexible Schicht unterhalb von Dashboards, Audits und Untersuchungen. Nutzen Sie Ad-hoc-SQL, um eine Idee zu testen, und speichern Sie die Abfrage, sobald sie Teil eines wiederkehrenden Workflows wird.
+Abfragen bilden die flexible Schicht unterhalb von Dashboards, Audits und Untersuchungen. Verwenden Sie Ad-hoc-SQL, um eine Idee zu testen, und speichern Sie die Abfrage, sobald sie Teil eines wiederkehrenden Workflows wird.
-## Eine Abfrage erstellen und ausführen
+## Abfrage erstellen und ausführen
- 1. Navigieren Sie zu **Analyze → Queries** und wählen Sie **new query**.
+ 1. Gehen Sie zu **Analysieren → Abfragen** und wählen Sie **Neue Abfrage**.
2. Öffnen Sie den Schema-Browser und wählen Sie Felder aus den Ereignis-, Sitzungs- oder Auswertungsdaten.
- 3. Schreiben Sie SQL, fügen Sie bei Bedarf Parameter hinzu und führen Sie die Abfrage aus.
- 4. Speichern Sie sie mit einem aussagekräftigen Namen und einer Beschreibung, und verwenden Sie **add to dashboard**, wenn das Ergebnis überwacht werden soll.
+ 3. Schreiben Sie SQL, fügen Sie bei Bedarf Parameter hinzu, und führen Sie die Abfrage aus.
+ 4. Speichern Sie sie mit einem aussagekräftigen Namen und einer Beschreibung, und verwenden Sie **Zum Dashboard hinzufügen**, wenn das Ergebnis überwacht werden soll.
- Der Abfrageeditor vereint das Ereignisschema, SQL, Parameter und eine Ergebnisvorschau, damit Sie die Fragestellung validieren können, bevor Sie sie speichern.
+ Der Abfrageeditor kombiniert das Ereignisschema, SQL, Parameter und eine Ergebnisvorschau, sodass Sie die Frage vor dem Speichern validieren können.
- 
+ 
Gespeicherte Abfragen erscheinen anschließend in der gemeinsamen Bibliothek, wo Teammitglieder sie erneut ausführen oder ihre Ergebnisse zu Dashboards hinzufügen können.

- Verwenden Sie einen klaren Namen und eine aussagekräftige Beschreibung, damit das Ergebnis auch ohne erneutes Öffnen des SQL verständlich bleibt.
+ Verwenden Sie einen aussagekräftigen Namen und eine Beschreibung, damit das Ergebnis auch ohne erneutes Öffnen des SQL verständlich bleibt.
+ Arbeiten Sie in der Reihenfolge, die das SQL selbst vorgibt: Betrachten Sie zunächst das Schema, führen Sie die Anweisung ad-hoc aus, und speichern Sie sie dann, sobald sie einen Namen verdient.
+
```bash
fp query schema
- fp query create "retry loops" --sql "SELECT ..."
- fp query run
- fp query show
- fp query update --sql "SELECT ..."
+ fp query schema events
+
+ fp query run --sql "SELECT agent_id, count() FROM analytics.events GROUP BY agent_id"
+ fp query run --sql @retry-loops.sql
+
+ fp query create "retry loops" --sql @retry-loops.sql --description "repeated tool calls per session"
+ ```
+
+ Alles danach verwendet den **Namen** der Abfrage, keine ID:
+
+ ```bash
+ fp query list
+ fp query run "retry loops"
+ fp query show "retry loops"
+ fp query update "retry loops" --sql @retry-loops-v2.sql --yes
+ fp query delete "retry loops" --yes
+ ```
+
+ Namen sind pro Organisation eindeutig, was sie zu einem sicheren Handle macht. Eine UUID-förmige ID wird überall akzeptiert, wo ein Name zulässig ist, aber `fp query list` gibt keine aus — die Spalten sind `name`, `description`, `created by` und `created` (Erstellungszeitpunkt der Abfrage, nicht der letzte Bearbeitungszeitpunkt). Fügen Sie `--show-id` für eine kurze ID-Spalte hinzu, oder lesen Sie `--json`, das immer die vollständige ID enthält.
+
+ Binden Sie positionale Parameter einer gespeicherten Abfrage mit `--arg` (Alias `--param`), einmal pro `$1..$N` in der richtigen Reihenfolge:
+
+ ```bash
+ fp query run --arg agent-codegen --arg 0.5
```
- Verwenden Sie `fp query list`, um IDs zu finden, und `fp query delete `, um eine gespeicherte Abfrage zu entfernen.
+ | Unterbefehl | Berechtigung | Hinweise |
+ | --- | --- | --- |
+ | `fp query schema [TABLE]` | `queries:read` | Einen Tabellennamen übergeben, um auf dessen Spalten zu filtern. |
+ | `fp query list` | `queries:read` | `--show-id` zeigt IDs an; `--fields` projiziert rohe Felder. |
+ | `fp query show ` | `queries:read` | Metadatenkarte plus das vollständige SQL. |
+ | `fp query create --sql ...` | `queries:write` | Eine Namenskollision wird im Vorfeld abgelehnt. |
+ | `fp query update ` | `queries:write` | Mindestens eines von `--name`, `--sql`, `--description` angeben. Bestätigt zuerst; ein No-op beendet sich ohne Speichern. |
+ | `fp query delete ` | `queries:delete` | Bestätigt zuerst, mit einer Vorschau des Gelöschten. |
+ | `fp query run ` oder `--sql ...` | `queries:run` | Genau eines von beiden. `--limit` und `--all` passen die Tabellenvorschau an. |
+
+ `update` und `delete` fragen nur in einem interaktiven Terminal nach. Unter `--json` oder bei umgeleitetem stdin werden sie ohne Rückfrage ausgeführt — `--yes` ist daher für den Terminalfall gedacht, nicht für Skripte.
+
+ Abfragen werden gegen einen schreibgeschützten Analytics-Pool ausgeführt. `--sql @file.sql` liest die Anweisung aus einer Datei, was die empfohlene Form für die Versionskontrolle ist.
+## Abfragen skripten
+
+`fp --json query run` gibt alle Zeilen zurück, unabhängig vom Limit der Tabellenvorschau, im Format `{columns: [{name, type}], rows: [[...]], truncated, elapsed_ms}`:
+
+```bash
+fp --json query run "retry loops" | jq '.rows | length'
+```
+
+`fp --json query schema` gibt `{schema, columns: [{table, column, type, nullable}]}` zurück, was der maschinenlesbare Form des Schema-Browsers entspricht.
+
+Zwei Fehlertypen lassen sich besser über den Exit-Code als durch Text-Parsing behandeln: Ein Name, dem nichts entspricht, gibt `✗ no query named "…"` aus und beendet sich mit Code 6; ein SQL- oder Ausführungsfehler gibt `✗ query failed — …` mit dem zugehörigen Serverdetail aus.
+
## Häufige Anwendungsfälle
- Sitzungen mit wiederholten Aufrufen desselben Tools finden.
-- Auswertungsergebnisse über verschiedene Modelle oder Umgebungen hinweg vergleichen.
-- Zeit zwischen einem menschlichen Wartezustand und der Wiederaufnahme messen.
-- Policy-Ablehnungen identifizieren, auf die eine erfolgreiche Alternative folgte.
+- Auswertungsergebnisse über Modelle oder Umgebungen hinweg vergleichen.
+- Zeit zwischen einem menschlichen Warte- und Wiederaufnahmeereignis messen.
+- Richtlinienverweigerungen identifizieren, denen eine erfolgreiche Alternative folgte.
- Eine Kohorte für ein Audit erstellen.
-Öffnen Sie **Queries → Schema**, bevor Sie gegen unbekannte Felder schreiben. Bevorzugen Sie explizite Zeit- und Umgebungsfilter, und beschränken Sie die Ergebnismenge während der Erkundungsphase.
+Öffnen Sie das Schema — **Analysieren → Abfragen** im Dashboard oder `fp query schema` — bevor Sie Abfragen gegen unbekannte Felder schreiben. Bevorzugen Sie explizite Zeit- und Umgebungsfilter, und begrenzen Sie die Ergebnisse während der Erkundungsphase.
- Eine Abfrage kann ein verdächtiges Muster identifizieren, begründet aber für sich allein keinen Fehlermodus. Öffnen Sie repräsentative Traces oder führen Sie ein Audit durch, bevor Sie das Ergebnis in eine Policy überführen.
-
\ No newline at end of file
+ Eine Abfrage kann ein verdächtiges Muster identifizieren, stellt jedoch den Fehlermodus nicht allein fest. Öffnen Sie repräsentative Traces oder führen Sie ein Audit durch, bevor Sie das Ergebnis in eine Richtlinie umwandeln.
+
+
+
+ Fügen Sie eine gespeicherte Abfrage einem gemeinsamen Board hinzu, sobald das Ergebnis es wert ist, überwacht zu werden.
+
\ No newline at end of file
diff --git a/docs/de/sessions/read-a-trace.mdx b/docs/de/sessions/read-a-trace.mdx
index d494cbaa6..e67290255 100644
--- a/docs/de/sessions/read-a-trace.mdx
+++ b/docs/de/sessions/read-a-trace.mdx
@@ -1,48 +1,58 @@
---
-title: "Einen Trace lesen"
-description: "Das Ereignis finden, das den Verlauf einer Agent-Sitzung verändert hat."
+title: "Eine Ablaufverfolgung lesen"
+description: "Das Ereignis finden, das den Verlauf eines Agentenlaufs verändert hat."
icon: "route"
---
-Ein Trace verwandelt einen flachen Ereignisstrom in die kausale Geschichte eines Durchlaufs. Lesen Sie ihn ab der ersten Abweichung – nicht rückwärts vom letzten Fehler.
-
-## Den Trace öffnen
+Eine Ablaufverfolgung ist die Zeitleiste eines einzelnen Agentenlaufs. Beginne beim ersten unerwarteten Ereignis, nicht beim letzten Fehler.
- 1. Gehen Sie zu **Observe → Sessions** und öffnen Sie eine Sitzung.
- 2. Nutzen Sie die Profilzusammenfassung, um Ergebnis, Timing, Fehler und Evaluierungswerte zu prüfen.
- 3. Scannen Sie die Timeline und die Minimap. Filtern Sie Ereignistypen oder den Zeitraum, wenn die Sitzung umfangreich ist.
- 4. Wählen Sie ein Ereignis aus, um es zu untersuchen. Verwenden Sie **Export** für Evaluator-JSON oder kopieren Sie die Seiten-URL, um einen Deep-Link zum ausgewählten Beweismittel zu teilen.
+ 1. Öffne **Observe → Sessions**.
+ 2. Wähle eine Session aus.
+ 3. Suche nach dem ersten Fehler, einem ungewöhnlichen Tool-Aufruf, einer langen Wartezeit oder einer Policy-Entscheidung.
+ 4. Öffne das Ereignis und prüfe Request, Response, Input und Output.
- 
+ 
```bash
fp --json sessions --session-id
- fp events --session-id --order asc --all
- fp --json events --full --session-id --all
+ fp events --session-id --order asc --all --limit 5000
+ fp --json events --full --session-id --all --limit 2000
```
- Verwenden Sie zuerst den kompakten Ereignis-Feed. Fordern Sie vollständige Payloads nur an, wenn die Ereigniszusammenfassungen nicht genügend Beweise enthalten.
+ Verwende `--full` nur, wenn die Ereigniszusammenfassung nicht genug Informationen liefert. Ein nicht-null `next_cursor` bedeutet, dass das Limit vor dem Ende erreicht wurde.
-
-
- Bestätigen Sie Agent, Umgebung, Timing, Ergebnis und Dauer, und suchen Sie dann nach Fehlern, langen Spans, wiederholten Tools, menschlichen Wartezeiten und abgelehnten Policy-Entscheidungen.
-
-
- Untersuchen Sie dessen Request, Response, Tool-Input, Output und Correlation-ID. Sensible Inhalte sind nur sichtbar, wenn die Transkripterfassung aktiviert ist und Ihre Berechtigungen dies erlauben.
-
-
- Die Ursache liegt oft ein Ereignis früher: eine fehlerhafte Modellantwort, ein fehlendes Tool-Ergebnis oder eine veraltete Annahme.
-
-
- Fügen Sie die Sitzung einem Audit-Scope hinzu, verknüpfen Sie sie mit einem Issue oder nutzen Sie den Fehlermodus, um eine Policy zu erstellen.
-
-
+## Den Spuren folgen
+
+1. Bestätige Agent, Ziel, Umgebung und Ergebnis.
+2. Finde den ersten Fehler oder die erste unerwartete Entscheidung.
+3. Prüfe das Ereignis unmittelbar davor.
+4. Verfolge übereinstimmende IDs über Request- und Response-Paare hinweg.
+5. Wandle die Erkenntnisse in ein Audit, ein Issue oder eine Policy um.
+
+| Paar | Übereinstimmendes Feld |
+| --- | --- |
+| Model-Request und -Response | `request_id` |
+| Tool-Aufruf und Ergebnis | `tool_call_id` |
+| Hook-Start und -Abschluss | `hook_id` |
+| Agent-Pause und -Fortsetzung | `pause_id` |
+| Menschliches Warten und Eingabe | `input_id` |
+
+Eine Entscheidung erscheint unter `hook_completed`. Die Zeile gibt das Ergebnis und die Policy-Quelle an. Eine Entscheidung im Beobachtungsmodus erscheint als allow mit dem hypothetischen Urteil in `failproofai_observed`.
- Lange Laufzeiten bedeuten nicht zwangsläufig Model-Latenz. Trennen Sie Model-, Tool-, Hook- und Human-Wait-Zeiten, bevor Sie entscheiden, was behoben werden soll.
-
\ No newline at end of file
+ Eine lange Session-Dauer ist nicht immer auf Model-Latenz zurückzuführen. Trenne Model-, Tool-, Hook- und Wartezeiten für menschliche Eingaben, bevor du entscheidest, was behoben werden soll.
+
+
+
+
+ Sieh, was die Durchsetzung erlaubt, geleitet oder blockiert hat.
+
+
+ Ereignistypen und -übermittlung verstehen.
+
+
\ No newline at end of file
diff --git a/docs/de/sessions/tools.mdx b/docs/de/sessions/tools.mdx
index cfb6ac1f7..48a122d70 100644
--- a/docs/de/sessions/tools.mdx
+++ b/docs/de/sessions/tools.mdx
@@ -1,25 +1,38 @@
---
title: "Tools"
-description: "Langsame, fehlerhafte oder übermäßig genutzte Tools über Agent-Sessions hinweg finden."
+description: "Langsame, fehlerhafte oder übermäßig genutzte Tools über Agent-Läufe hinweg finden."
icon: "wrench"
---
-Tools gruppiert Tool-Aufrufe über Sessions hinweg, damit Sie Latenz und Aufrufverteilung vergleichen können.
+Tools zeigt, was Agents aufrufen, wie oft Aufrufe fehlschlagen und welche Sessions betroffen sind.
+
+Tool-Namen stammen aus dem jeweiligen Agent-Harness, daher kann dieselbe Funktion unter verschiedenen Namen erscheinen. Ein Shell-Aufruf kann beispielsweise als `Bash`, `exec`, `Shell`, `terminal` oder `run_command` auftauchen. Führe `fp list tools` aus, bevor du einen Filter erstellst.
- 1. Gehen Sie zu **Observe → Tools**.
- 2. Filtern Sie nach Umgebung, Tool-Name, Agent oder Session-ID.
- 3. Überprüfen Sie Latenz und Tool-Verteilung.
- 4. Wählen Sie einen Diagrammpunkt oder ein Tool-Segment aus, um passende Events und Sessions zu öffnen.
+ Gehe zu **Observe → Tools**. Filtere nach Umgebung, Tool, Agent oder Session.
- 
+ 
```bash
fp list tools
- fp events --event-type tool_use,tool_result --env production --since 24h
- fp --json events --full --session-id --all
+ fp events --event-type tool_use,tool_result --since 24h
+ fp errors --event-type tool_result --since 24h
+ fp --json events --full --event-type tool_use,tool_result --session-id --all --limit 2000
```
+
+ Verwende `--full`, wenn du Payload-Felder wie die Dauer pro Aufruf benötigst.
-
\ No newline at end of file
+
+
+Nutze diese Seite, um wiederkehrende Fehler zu finden, funktionierende und fehlerhafte Läufe zu vergleichen oder zu bestätigen, dass ein durch eine Policy gezieltes Tool tatsächlich verwendet wird.
+
+
+
+ Öffne die Sessions hinter Tool-Fehlern.
+
+
+ Zeige kanonische Tool-Namen und Policy-Entscheidungen an.
+
+
\ No newline at end of file
diff --git a/docs/de/start/concepts.mdx b/docs/de/start/concepts.mdx
index 9c985309f..9b0eb8b91 100644
--- a/docs/de/start/concepts.mdx
+++ b/docs/de/start/concepts.mdx
@@ -1,26 +1,51 @@
---
-title: "Kernkonzepte"
-description: "Die wenigen Konzepte, die in Failproof AI durchgängig verwendet werden."
+title: "Grundlegende Konzepte"
+description: "Die Begriffe zum Beobachten, Überprüfen und Schützen von Agents."
icon: "boxes"
---
-| Konzept | Bedeutung | Was Sie erreichen können |
-| --- | --- | --- |
-| Session | Eine Agenten-Aufgabe oder -Ausführung | Einzelnes Ergebnis nachvollziehen |
-| Event | Eine aufgezeichnete Aktion in einer Session | Modellaufruf, Werkzeugnutzung, Fehler, menschliche Aktion oder Policy-Entscheidung untersuchen |
-| Trace | Die geordnete und verschachtelte Session-Ansicht | Kausalität verstehen statt unzusammenhängende Logs zu lesen |
-| Evaluation | Eine Bewertung oder ein Urteil über eine Session | Qualität, Compliance, Kosten oder Latenz kontinuierlich verfolgen |
-| Audit | Eine Überprüfung einer ausgewählten Session-Population | Mit definiertem Ziel und Rhythmus nach Fehlermustern suchen |
-| Finding | Ein durch ein Audit entdeckter, belegter Fehler | Fehlermodus, Schweregrad und betroffene Sessions einsehen |
-| Issue | Ein dauerhafter Antwortdatensatz | Ein Finding oder einen Alert-Vorfall zuweisen, diskutieren und lösen |
-| Alert | Eine Regel, die Wiederholungen erkennt | Zuständige benachrichtigen, wenn eine bekannte Bedingung erneut auftritt |
-| Policy | Eine Regel, die während der Agentenaktivität ausgewertet wird | Riskantes Verhalten beobachten, blockieren oder umleiten |
-| Deployment | Ein versionierter Policy-Rollout auf Maschinen | Steuern, wo eine Policy ausgeführt wird, und sie sicher zurückrollen |
+Failproof AI zeichnet auf, was Agents tun, und entscheidet, was sie tun dürfen.
-## Der Zuverlässigkeitskreislauf
+## Beobachten
-Starten Sie mit Belegen. Eine Session zeigt, was passiert ist. Ein Audit bestimmt, ob es sich um einen Einzelfehler oder ein Muster handelt. Ein Finding identifiziert den Fehlermodus; ein Issue übernimmt die Verantwortung für die Reaktion. Eine Policy verhindert dasselbe Verhalten, während Alerts Sie informieren, falls die Bedingung erneut auftritt.
+| Begriff | Bedeutung |
+| --- | --- |
+| Session | Ein einzelner Agent-Lauf |
+| Event | Eine einzelne Aktion innerhalb einer Session |
+| Trace | Die geordnete Ansicht einer Session |
+| Evaluation | Eine Bewertung oder Beurteilung |
+| Audit | Eine Überprüfung mehrerer Sessions |
+| Finding | Nachweis eines Fehlermusters |
+| Issue | Die Reaktion, für die jemand verantwortlich ist |
+| Alert | Eine Regel, die Wiederholungen erkennt |
+
+## Durchsetzen
+
+| Begriff | Bedeutung |
+| --- | --- |
+| Harness | Die Umgebung, in der ein Agent ausgeführt wird |
+| Hook | Ein Punkt, an dem der Harness eine Entscheidung anfordert |
+| Policy | Eine Regel, die erlaubt, anleitet oder blockiert |
+| Policy pack | Ein versioniertes Policy-Set, das jeder installieren kann |
+| Daemon | Der lokale Dienst, der Policies auswertet |
+| Deployment | Policies, die einem Rechner zugewiesen sind |
+
+## Der Arbeitsablauf
+
+```text
+Session → Audit → Finding → Issue → Policy
+```
+
+Beginne mit Belegen. Identifiziere den wiederkehrenden Fehler, weise die Verantwortung zu und verhindere ihn dann.
+
+Eine Policy gibt `allow`, `instruct` oder `deny` zurück. Anleitung über `instruct` hängt vom Harness ab; verwende `deny`, wenn die Aktion zwingend gestoppt werden muss.
+
+Der Beobachtungsmodus ist von der Entscheidung getrennt. Er führt die echte Policy aus und zeichnet auf, was sie tun würde, während der Agent weiterläuft.
- Ein lokales `failproofai audit` durchsucht den lokalen Agentenverlauf. Ein wiederkehrendes Cloud-Audit überprüft Sessions, die in Failproof AI Cloud gespeichert sind. Es handelt sich um separate Workflows mit unterschiedlichem Umfang und Zeitplanung.
-
\ No newline at end of file
+ Ein bloßes `fp fleet deploy --add ` setzt sofort durch. Füge `:observe` für einen Shadow-Rollout hinzu.
+
+
+Bei der Einrichtung wird kein Policy pack ausgewählt. Bevor du eines hinzufügst, läuft nur `block-failproofai-commands`. Der kompilierte Katalog enthält 39 Policies in 9 Kategorien.
+
+Lies [unterstützte Harnesses](/de/reference/harnesses#enforcement-capability), bevor du davon ausgehst, dass ein Event in jeder Agent-Umgebung blockieren kann.
\ No newline at end of file
diff --git a/docs/de/start/first-audit.mdx b/docs/de/start/first-audit.mdx
index 0a4ce282d..21a7c7067 100644
--- a/docs/de/start/first-audit.mdx
+++ b/docs/de/start/first-audit.mdx
@@ -1,30 +1,64 @@
---
title: "Erste Fehlerprüfung ausführen"
-description: "Erstelle ein Audit über das Cloud-Dashboard oder die fp CLI und überprüfe die ersten Ergebnisse."
+description: "Scanne den Agent-Verlauf dieser Maschine mit failproofai audit, oder erstelle ein regelmäßiges Audit über die in Failproof AI Cloud gespeicherten Sitzungen."
icon: "scan-search"
---
-Ein Audit wandelt eine Reihe von Sitzungen in priorisierte, belegbasierte Fehlerbefunde um. Beginne mit einer konkreten Fehlerfrage.
+Ein Audit wandelt eine Menge von Sitzungen in priorisierte, belegbasierte Fehlerbefunde um. Beginne mit einer eng gefassten Fehlerfrage.
+
+Es gibt zwei Audit-Varianten. Sie lesen unterschiedliche Daten und werden mit unterschiedlichen Tools aufgerufen:
+
+| Audit | Liest | Konto erforderlich | Befunde erscheinen in |
+| --- | --- | --- | --- |
+| Lokal — `failproofai audit` | Den auf dieser Maschine vorhandenen Agent-Verlauf | Nein | `http://localhost:8020/audit` |
+| Cloud — **Analyze → Audits**, oder die `fp` CLI | Die in Failproof AI Cloud gespeicherten Sitzungen | Ja | Das Cloud-Dashboard |
+
+Führe zuerst das lokale Audit aus. Es benötigt nichts außer der CLI. Befunde bleiben lokal, während anonyme CLI-Telemetrie standardmäßig gesendet wird, sofern du nicht `FAILPROOFAI_TELEMETRY_DISABLED=1` setzt.
-
+
+ ```bash
+ failproofai audit
+ ```
+
+ Es scannt jeden unterstützten Agent-Verlauf, den es auf dieser Maschine findet, repliziert die Tool-Aktivität durch den eingebauten Policy-Katalog und öffnet dann **http://localhost:8020/audit**. Lass den Prozess laufen, während du die Ergebnisse liest; drücke Ctrl+C, wenn du fertig bist.
+
+ Analyse und Befunde verbleiben auf dieser Maschine. Anonyme CLI-Telemetrie wird standardmäßig gesendet, sofern nicht deaktiviert. Nachdem du die Planung aktiviert hast, sendet jeder Scan auch Maschinenmetadaten und kann einen eingeschränkten Befund-Digest übertragen.
+
+ | Flag | Funktion |
+ | --- | --- |
+ | `--schedule [days]` | Scannt nach einem Timer und sendet die Befunde per E-Mail. Standard 7 Tage, Bereich 1–90. Meldet dich beim ersten Mal an. |
+ | `--email ` | Mit `--schedule`, gibt die Berichtsadresse an, anstatt danach zu fragen. |
+ | `--no-schedule` | Stoppt den Timer. Du bleibst angemeldet. |
+ | `--status` | Zeigt, ob die Planung aktiv ist, wohin Berichte gehen, den Status des Daemons und wann der nächste Scan fällig ist. |
+
+ ```bash
+ failproofai audit --schedule 7 --email reliability@example.com
+ failproofai audit --status
+ ```
+
+ Siehe [Lokalen Agent-Verlauf auditieren](/de/audits/local-audit) für Informationen darüber, welche Verläufe jeder Adapter liest und wie der geplante Scan abläuft.
+
+
Gehe in der Cloud-Seitenleiste zu **Analyze → Audits**. Wähle **new audit**.
- Gib einen Namen und ein konkretes Fehlerziel ein, z. B. „Produktionssitzungen finden, die denselben fehlgeschlagenen Zahlungsaufruf wiederholen, ohne die Eingabe zu ändern oder eskalieren." Wähle den Agent, die Umgebung, das Zeitfenster und den Zeitplan aus. Füge eine kurze Beschreibung und Referenz-URLs hinzu, wenn der Auditor deine Workflow-Regeln benötigt.
+ Gib einen Namen und ein konkretes Fehlerziel ein, z. B. „Produktionssitzungen finden, die denselben fehlgeschlagenen Zahlungsaufruf ohne Änderung der Eingabe oder Eskalation wiederholen." Wähle den Agent, die Umgebung, das Zeitfenster und den Zeitplan. Füge eine kurze Beschreibung und Referenz-URLs hinzu, wenn der Auditor deine Workflow-Regeln benötigt.
-
- Wähle **create audit**. Der erste Lauf wird sofort in die Warteschlange gestellt. Öffne die Audit-Karte, um den Fortschritt von „queued" über „running" bis „complete" zu verfolgen.
+
+ Wähle **create audit**. Der erste Durchlauf wird sofort in die Warteschlange gestellt. Öffne die Audit-Karte, um zu beobachten, wie er von „in der Warteschlange" zu „läuft" zu „abgeschlossen" wechselt.
- Nach Abschluss des Laufs öffne einen Befund und prüfe seine Sitzungsbelege. Anschließend kannst du ihn bestätigen, zuweisen, verwerfen, stummschalten oder auflösen.
+ Nachdem der Durchlauf abgeschlossen ist, öffne einen Befund und überprüfe seine Sitzungsbelege. Du kannst ihn anschließend bestätigen, zuweisen, verwerfen, stummschalten oder auflösen.
- 
+ 
-
+
+ `fp` ist die Failproof AI Cloud CLI. Sie liest zurück, was Cloud gespeichert hat; sie ist ein anderes Programm als `failproofai`, das auf dieser Maschine durchsetzt.
+
```bash
fp audits create payment-retry-failures \
--description "Find production sessions that retry a failed payment call without changing input or escalating" \
@@ -45,8 +79,8 @@ Ein Audit wandelt eine Reihe von Sitzungen in priorisierte, belegbasierte Fehler
fp audits run payment-retry-failures
```
- Verwende `fp audits ack `, `fp audits assign --to `, `fp audits dismiss `, `fp audits mute `, `fp audits resolve ` oder `fp audits reopen `, um einen Befund durch den Triage-Prozess zu führen.
+ Verwende `fp audits ack `, `fp audits assign --to `, `fp audits dismiss `, `fp audits mute `, `fp audits resolve ` oder `fp audits reopen `, um einen Befund durch die Triage zu führen.
-Als nächstes [verhindere deinen ersten Fehler mit einer Policy](/de/start/first-policy) für eine bestätigte, wiederholbare Aktion.
\ No newline at end of file
+Als Nächstes: [Ersten Fehler mit einer Policy verhindern](/de/start/first-policy) für eine bestätigte, wiederholbare Aktion.
\ No newline at end of file
diff --git a/docs/de/start/first-policy.mdx b/docs/de/start/first-policy.mdx
index 656025812..b84db6d1c 100644
--- a/docs/de/start/first-policy.mdx
+++ b/docs/de/start/first-policy.mdx
@@ -1,47 +1,69 @@
---
-title: "Verhindern Sie Ihren ersten Fehler mit einer Policy"
-description: "Erstellen Sie eine Policy-Version, stellen Sie sie im Beobachtungsmodus bereit und setzen Sie sie dann durch."
+title: "Verhindern Sie Ihren ersten Fehler"
+description: "Aktivieren Sie eine geprüfte Richtlinie oder testen Sie eine eigene."
icon: "shield-check"
---
-Verwenden Sie eine Policy erst, wenn Sie die unsichere Aktion und die legitimen Aktionen, die weiterhin erlaubt bleiben müssen, beschreiben können.
+Beginnen Sie mit einem Verhalten, das Sie unterbinden möchten, und einer legitimen Aktion, die weiterhin funktionieren muss.
-
-
-
-
- Gehen Sie zu **Admin → Policy-Editor**. Starten Sie mit der Demo-Policy, prüfen oder bearbeiten Sie den Quellcode und wählen Sie dann **Version veröffentlichen**. Das Veröffentlichen erstellt die unveränderliche Version, die Sie auf Maschinen bereitstellen können.
+## Zuerst eine geprüfte Richtlinie ausprobieren
- 
-
-
- Gehen Sie zu **Admin → Durchsetzung**, erweitern Sie die Zielmaschine und wählen Sie **diese Maschine bearbeiten**. Fügen Sie die veröffentlichte Demo-Policy hinzu, fixieren Sie deren Version, wählen Sie **Beobachten** und wenden Sie die Bereitstellung an.
+```bash
+failproofai policies
+failproofai policies add block-rm-rf
+```
- 
-
-
- Starten Sie eine neue Agent-Sitzung auf dieser Maschine und öffnen Sie dann **Beobachten → Policy**. Wählen Sie die Maschine aus und bestätigen Sie, dass die Demo-Policy in der Policy-Zuordnung und der Entscheidungszeitachse erscheint. Der Beobachtungsmodus zeichnet auf, was die Policy tun würde, ohne die Aktion zu blockieren.
+Failproof AI enthält 39 geprüfte Richtlinien. Schauen Sie in den [Katalog](/de/policies/builtin-catalog), bevor Sie eine neue schreiben.
- 
-
-
-
-
- Das Erstellen von Cloud-Policies und die Fleet-Bereitstellung sind administrative Workflows. Verwenden Sie die lokale CLI, um dieselbe Policy vor der Veröffentlichung zu validieren:
+## Eine eigene Richtlinie schreiben und testen
+
+
```bash
- failproofai policies --install --custom ./payment-retry.policies.ts \
- --cli claude --scope project
- failproofai config --status
+ failproofai publish --init guards.mjs
```
- Verwenden Sie `fp`, um in der Cloud sichtbare Policy-Entscheidungen zu prüfen:
+ Dies schreibt eine Richtlinie, die `git push --force` blockiert. Bearbeiten Sie sie für Ihre eigene Regel.
+
+
+ ```bash
+ failproofai policies -i -c ./guards.mjs
+ ```
+
+ Fordern Sie Ihren Agenten auf, die blockierte Aktion auszuführen, und überprüfen Sie dann **Policies → Activity** im lokalen Dashboard.
+
+
+ Legen Sie eine `*policies.mjs`-Datei unter `.failproofai/policies/` ab, um sie automatisch zu laden.
+
+ Explizite benutzerdefinierte Dateien entfernen Sie mit:
```bash
- fp events --event-type hook_completed --env production --since 24h
- fp sessions --env production --since 24h
+ failproofai policies -u -c
```
+
+
+
+## Teilen
+
+Ein öffentliches Paket veröffentlichen:
+
+```bash
+failproofai publish
+```
+
+Anschließend kann es jeder mit `failproofai policies add /` installieren. Fügen Sie das GitHub-Topic `failproofai-policies` selbst hinzu, damit der [Policy Hub](https://befailproof.ai/policy-hub/) es indizieren kann.
+
+Für ein Cloud-Rollout:
+
+```bash
+fp policies publish checkout-guard ./guards.mjs
+fp fleet deploy --add checkout-guard:observe
+fp guardrails summary --since 24h --machine
+fp fleet deploy --add checkout-guard:enforce
+```
+
+
+ Ein einfaches `--add checkout-guard` setzt sofort durch. Fügen Sie `:observe` hinzu, um aufzuzeichnen, was die Richtlinie tun würde, ohne den Agenten zu blockieren.
+
- Beide Schritte sind auch über die CLI verfügbar: `fp policies publish ` erstellt eine Version und `fp fleet deploy --add ` stellt sie auf einer Maschine bereit. Die entsprechenden Dashboard-Funktionen sind **Admin → Policy-Editor** und **Admin → Durchsetzung**.
-
-
\ No newline at end of file
+Weitere Informationen zum vollständigen Ablauf finden Sie unter [Paket veröffentlichen](/de/policies/publish-a-pack) oder [Richtlinien deployen](/de/policies/deploy).
\ No newline at end of file
diff --git a/docs/de/start/integrations.mdx b/docs/de/start/integrations.mdx
index ce249e457..6420fd0a1 100644
--- a/docs/de/start/integrations.mdx
+++ b/docs/de/start/integrations.mdx
@@ -1,31 +1,44 @@
---
-title: "Agent instrumentieren"
+title: "Deinen Agenten instrumentieren"
sidebarTitle: "Frameworks"
-description: "Jedes unterstützte Agent-Framework mit einem einzigen Aufruf mit Failproof AI verbinden."
+description: "Verbinde jedes unterstützte Agent-Framework mit einem einzigen Aufruf mit Failproof AI."
icon: "plug"
---
-Dein Agent erzeugt bereits alles, was es wert ist, aufgezeichnet zu werden — Modellaufrufe, Tool-Aufrufe, Node-Grenzen, menschliche Wartezeiten, Fehler. Das Framework wirft es weg. Das SDK behält es.
+Dein Agent erzeugt bereits alles, was es sich zu erfassen lohnt — Modellaufrufe, Tool-Aufrufe, Knotengrenzen, menschliche Wartepunkte, Fehler. Das Framework wirft es weg. Das SDK behält es.
Ein selbst geschriebener Agent oder einer, der hier nicht aufgelistet ist.
- Graphs, Nodes, Tools, Retriever, Modelle.
+ Graphen, Knoten, Tools, Retriever, Modelle.
- Crews, Flows, Agenten nach Rolle, Tools.
+ Crews, Flows, rollenbasierte Agenten, Tools.
- Workflows, Steps, Funktionsagenten, Retriever.
+ Workflows, Schritte, Funktionsagenten, Retriever.
Typisierte Agenten, Fähigkeiten, Tools, Wiederholungsversuche.
-## Drei Zeilen, egal welches Framework
+## Voraussetzungen
+
+Zwei Dinge setzt dieser Weg voraus, die der folgende Code nicht für dich erledigt:
+
+| Anforderung | Warum |
+| --- | --- |
+| Python 3.10 oder neuer | Die Mindestanforderung, die das SDK voraussetzt. |
+| Eine Maschine, die mit `failproofai config` eingerichtet wurde | Dieser Befehl installiert den failproofaid-Daemon, und der Daemon ist das Einzige, das die vom SDK geschriebenen Daten versendet. Ohne ihn sammeln sich die Batches im Spool-Verzeichnis an und verlassen es nie. |
+
+
+ **Dieser Weg zeichnet auf; er erzwingt nicht.** Das SDK erfasst, was dein Agent getan hat. Policies werden von einem Hook innerhalb eines Agent-CLI ausgelöst — wer also Policies für einen Framework-Agenten durchsetzen möchte, muss einen Hook in der eigenen Runtime einbinden. Siehe [Policies](/de/policies/overview).
+
+
+## Drei Zeilen, für jedes Framework
```bash LangGraph
@@ -56,10 +69,10 @@ failproofai_sdk.configure(environment="production")
failproofai_sdk.instrument() # erkennt die importierten Frameworks automatisch
with failproofai_sdk.session():
- ... # dein bestehender Agent-Aufruf, unverändert
+ ... # dein bestehender Agenten-Aufruf, unverändert
```
-Keine Dekoratoren auf deinen Funktionen, kein Callback-Parameter, keine IDs, die durch deinen Code gefädelt werden. Nur der Aufruf innerhalb der Session unterscheidet sich:
+Keine Dekoratoren auf deinen Funktionen, kein Callback-Parameter in deinen Aufrufen, keine IDs, die durch deinen Code gefädelt werden. Nur der Aufruf innerhalb der Session unterscheidet sich:
@@ -91,30 +104,44 @@ Keine Dekoratoren auf deinen Funktionen, kein Callback-Parameter, keine IDs, die
-Das Extra-Paket installiert das **Framework**. Jeder Adapter ist im Basis-Wheel enthalten, sodass ein Projekt, das sein Framework bereits hat, kein zusätzliches Paket benötigt.
+Das optionale Extra installiert die **Framework-Erweiterung**. Alle Adapter sind bereits im Basis-Wheel enthalten, sodass ein Projekt, das sein Framework bereits installiert hat, kein zusätzliches Extra benötigt.
-## Prüfen, ob Daten angekommen sind
+## Prüfen, ob die Daten angekommen sind
-Führe eine instrumentierte Session aus und öffne dann **Observe → Sessions**, um deine Umgebung auszuwählen. Der Lauf erscheint als rekonstruierter Trace.
+Starte eine instrumentierte Session und öffne anschließend **Observe → Sessions**, wo du deine Umgebung auswählst. Der Lauf erscheint als rekonstruierter Trace.
-Wenn nichts ankommt, prüfe die Verbindung des Rechners mit `failproofai config --status`. Siehe [Capture einrichten](/de/start/setup).
+Wenn nichts ankommt, prüfe mit `failproofai config --status`, ob die Maschine eingerichtet und verbunden ist. Falls nicht, führe `failproofai config` aus. Siehe [Setup wählen](/de/start/setup).
- Prüfe nicht das Spool-Verzeichnis, um die Zustellung zu bestätigen. Der Failproof-Daemon erfasst und löscht jeden Batch innerhalb von Millisekunden — beim Lesen konkurrierst du daher mit dem Collector und siehst weit weniger Events, als tatsächlich gesendet wurden.
+ Prüfe nicht das Spool-Verzeichnis, um die Zustellung zu bestätigen. Der Failproof-Daemon sammelt und löscht jeden Batch innerhalb von Millisekunden, sodass das Lesen mit dem Collector in eine Race Condition gerät und weit weniger Events anzeigt, als tatsächlich ausgesendet wurden.
+Um zu überprüfen, ob das SDK überhaupt schreibt, stoppe zuerst den Daemon, führe dann deine Session aus und schau in `~/.failproofai/custom-agents/events/`. Wenn der Daemon läuft, ist ein leeres Verzeichnis der erwartete Normalzustand.
+
+
+```bash Linux
+sudo systemctl stop failproofaid@$USER
+```
+
+```bash macOS
+sudo launchctl bootout system/ai.failproof.failproofaid.$USER
+```
+
+
+Führe danach `failproofai config` aus, um den Daemon wieder zu starten. Solange der Daemon gestoppt ist, haben Hook-Events auf dieser Maschine keinen Evaluator und werden abgelehnt — stoppe ihn also nur so lange, wie die Prüfung dauert.
+
## Nächste Schritte
-Jeder oben verlinkte Quickstart führt zum vollständigen Guide — was aufgezeichnet wird, Optionen, Streaming, Span-Benennung und typische Probleme, auf die man stößt. Diese Guides befinden sich unter **Trace Agents → Plug in your agent**.
+Jeder der oben genannten Quickstarts verlinkt auf seinen vollständigen Leitfaden — was aufgezeichnet wird, verfügbare Optionen, Streaming, Span-Benennung und häufig auftretende Probleme. Diese Guides befinden sich unter **Trace Agents → Plug in your agent**.
Das Datenmodell, die IDs, die Event-Typen und wie Events die Cloud erreichen.
- Kausalität durch eine Session verfolgen statt durch unzusammenhängende Logs.
+ Kausalität durch eine Session verfolgen, statt voneinander getrennte Logs zu analysieren.
-
- Die gerade erfassten Sessions auditieren.
+
+ Die soeben erfassten Sessions auditieren.
\ No newline at end of file
diff --git a/docs/de/start/quickstart.mdx b/docs/de/start/quickstart.mdx
index 37dacf988..7647c9f14 100644
--- a/docs/de/start/quickstart.mdx
+++ b/docs/de/start/quickstart.mdx
@@ -1,84 +1,108 @@
---
title: "Quickstart"
-description: "Zeichne eine Agentensitzung auf, finde einen Fehler und verhindere ihn künftig."
+description: "Richte eine Maschine ein, wähle Richtlinien und sieh, was deine Agenten tun."
icon: "zap"
---
-Dieser Quickstart richtet eine Maschine für das Melden von Sitzungen ein, führt ein Audit durch und stellt eine Policy bereit. Nutze den Skill, um Failproof einzurichten, oder folge den manuellen Schritten.
+Richte Failproof AI auf einer Maschine ein und bleibe lokal oder verbinde dich mit der Cloud.
-**Welcher Weg passt zu dir?** Wenn dein Agent in einem der 12 unterstützten [Harnesses](/de/reference/harnesses) läuft — einem Coding-CLI oder einem Gateway wie Hermes oder OpenClaw — folge den nachstehenden Schritten; du benötigst Node.js 20.9 oder neuer. Wenn dein Agent kein Harness hat, instrumentiere ihn mit dem [Python SDK](/de/reference/custom-agents) für Tracing und Audits und steige dann bei [Führe deine erste Fehlerprüfung durch](/de/start/first-audit) wieder ein; Enforcement auf diesem Weg erfordert einen Hook in deiner Runtime.
+Wenn dein Agent in einem [unterstützten Harness](/de/reference/harnesses) läuft, folge diesen Schritten. Für Agenten, die mit LangChain, CrewAI, LlamaIndex, Pydantic AI oder deiner eigenen Laufzeitumgebung entwickelt wurden, beginne mit [deinen Agenten instrumentieren](/de/start/integrations).
-
-
-
-
- ```bash
- npx skills add FailproofAI/skills
- ```
-
-
- ```text
- Set up Failproof AI for this project, connect this machine, install the right hooks and policies, and verify that a session arrives.
- ```
-
- Dein Agent analysiert das Projekt, wählt die passende Integration, führt die Einrichtung durch und überprüft sie. Einzelne Skills und erweiterte Installationsoptionen findest du im [FailproofAI Skills-Repository](https://github.com/FailproofAI/skills).
-
-
-
-
- ## Voraussetzungen
+## Lass deinen Agenten die Einrichtung führen
-1. Öffne das [Failproof AI Dashboard](https://app.befailproof.ai) und erstelle ein Konto oder melde dich mit deiner geschäftlichen E-Mail-Adresse an.
-2. Gehe zu **Administration → Keys** und erstelle einen Schlüssel mit `events:add` und `policies:pull`.
-3. Kopiere das einmalige Secret und speichere es auf der Zielmaschine:
+Installiere den Failproof AI Umbrella-Skill in einen kompatiblen Agenten:
```bash
-export FAILPROOFAI_KEY=""
+npx skills add FailproofAI/skills
```
- ## Installation
+Dies installiert den Umbrella-Skill und seine spezialisierten Geschwister-Skills. Verwende `--skill
+failproofai`, wenn du nur den Umbrella-Skill möchtest. Er versteht lokale und Cloud-Einrichtung,
+Daemon-Status, Sitzungen, Audits, Richtlinien und Fehlerbehebung. Er führt die Arbeit
+und leitet spezialisierte Aufgaben an den richtigen Failproof AI Skill weiter; er ersetzt
+nicht die CLI-Installation weiter unten.
+
+## Maschine einrichten
-
+
```bash
npm install -g failproofai
- failproofai config --connect https://app.befailproof.ai --token "$FAILPROOFAI_KEY"
+ failproofai config
```
- Sitzungstranskripte werden standardmäßig übertragen. Füge `--no-transcripts` hinzu, um Hook-Aktivitäten und Policy-Entscheidungen ohne Transkriptinhalt zu melden.
+ Die Einrichtung installiert den Hintergrunddienst und verbindet jeden unterstützten Agenten, den sie findet. Einmalig kann Administratorzugriff erforderlich sein. Linux und macOS werden unterstützt.
+
- Wenn auf dieser Maschine bereits Agentenhistorie vorhanden ist, kannst du die letzten sieben Tage vorab anzeigen und importieren — warte anschließend, bis die Übertragung abgeschlossen ist. Überspringe diesen Schritt auf einer neuen Maschine.
+
+ Die Einrichtung wählt kein Richtlinienpaket aus. Füge das Failproof AI Paket hinzu:
```bash
- failproofai backfill --since 7d --dry-run
- failproofai backfill --since 7d
- failproofai flush --wait
+ failproofai policies add FailproofAI/policies
+ failproofai policies
```
- Öffne **Sessions** in Failproof AI und wähle eine importierte Sitzung aus.
+ Der zweite Befehl zeigt alle Richtlinien auf dieser Maschine und ob sie aktiv sind. Bis du ein Paket hinzufügst, läuft nur `block-failproofai-commands`.
-
- Damit wird Failproof AI an dein Harness angebunden und die 39 integrierten Policies werden installiert. Nutze sie, um lokale Policy-Entscheidungen zu beobachten und Enforcement auszuprobieren, bevor Failproof AI deine Sitzungen prüft und Policies für deine Agenten erstellt.
-
- Lass den Installer dein Harness automatisch erkennen oder gib eines explizit an. Alle 12 sind gültige `--cli`-Werte — `claude`, `codex`, `copilot`, `cursor`, `opencode`, `pi`, `hermes`, `openclaw`, `factory`, `devin`, `antigravity`, `goose`.
+
```bash
- failproofai policies --install --cli claude --scope user # ein Coding-CLI
- failproofai policies --install --cli hermes --scope user # ein Slack/Telegram-Gateway
+ failproofai config --status
```
- Das Blockieren eines Tool-Calls vor seiner Ausführung ist für alle 12 verifiziert. Turn-End-Gates sind für 8 verifiziert — die harnessspezifische Matrix findest du unter [Enforcement-Fähigkeit](/de/reference/harnesses#enforcement-capability).
-
-
- Folge [Führe deine erste Fehlerprüfung durch](/de/start/first-audit). Verwende ein konkretes Ziel, z. B. „Sitzungen finden, in denen der Agent ein fehlgeschlagenes Tool ohne Änderung des Ansatzes erneut aufgerufen hat."
-
-
- Folge [Verhindere deinen ersten Fehler mit einer Policy](/de/start/first-policy). Beginne im Beobachtungsmodus, prüfe Treffer und setze die überarbeitete Version dann durch.
+ Dies meldet den Dienststatus, die Cloud-Verbindung und den Pause-Zustand.
-
- Führe `failproofai config --status` aus. Eine gesunde Einrichtung meldet die Cloud-Verbindung, den Daemon-Status und ob Enforcement pausiert ist.
-
+## Lokal bleiben oder Cloud verbinden
+
+
+
+ Kein Konto erforderlich.
+
+ ```bash
+ failproofai
+ failproofai audit
+ ```
+
+ Der erste Befehl öffnet das lokale Dashboard unter `http://localhost:8020`. Der zweite scannt den bereits auf dieser Maschine vorhandenen Agentenverlauf.
+
+
+
+ Erstelle einen Maschinenschlüssel in Failproof AI Cloud und führe dann aus:
+
+ ```bash
+ failproofai config --token
+ failproofai config --status
+ ```
+
+ Die Cloud empfängt Richtlinienentscheidungen und Sitzungsprotokolle. Um nur Entscheidungen zu senden, verbinde dich zunächst und setze dann `collector.sessions` in `~/.failproofai/config.json` auf `false`; das aktuelle Setup-Flag `--no-transcripts` wendet diese Einstellung nicht an. Verwende für gemeinsam genutzte Shells und CI `FAILPROOFAI_CLOUD_TOKEN` anstatt den Schlüssel in den Befehlsverlauf einzutragen.
-
\ No newline at end of file
+
+
+## Überprüfen
+
+Führe einen deiner Agenten aus und lass ihn eine normale Aufgabe ausführen. Dann:
+
+Eine Tool-Call-Ablehnung wird auf allen 12 unterstützten Harnesses verifiziert. Die Turn-End-Durchsetzung
+wird auf 8 verifiziert; andere Harness-Event-Paare sind möglicherweise nur zur Beobachtung oder nicht verifiziert.
+
+- Öffne **Policies → Activity** im lokalen Dashboard, um Richtlinienentscheidungen zu sehen.
+- Öffne **Observe → Sessions** in der Cloud, um den vollständigen Ablauf zu sehen.
+- Führe `failproofai audit` aus, um nach riskanten oder verschwenderischen Mustern zu suchen.
+
+
+ Nach der Einrichtung ist der `failproofaid`-Dienst der Auswerter. Kann er nicht antworten, werden geschützte Aktionen abgelehnt. Führe `failproofai config --status` aus, wenn ein Agent unerwartet stoppt.
+
+
+
+
+ Lerne den Workflow von Sitzungen zu Richtlinien kennen.
+
+
+ Finde einen Fehler, der es wert ist, behoben zu werden.
+
+
+ Beobachte eine Schutzmaßnahme, bevor du sie durchsetzt.
+
+
\ No newline at end of file
diff --git a/docs/de/start/setup.mdx b/docs/de/start/setup.mdx
index 4f14e6f46..4415c2540 100644
--- a/docs/de/start/setup.mdx
+++ b/docs/de/start/setup.mdx
@@ -1,68 +1,68 @@
---
-title: "Setup wählen"
-description: "Wählen Sie zwischen lokaler Durchsetzung, Failproof AI Cloud oder einem Enterprise-Deployment."
-icon: "waypoints"
+title: "Setup auswählen"
+description: "Failproof AI lokal ausführen oder die Maschine mit Failproof AI Cloud verbinden."
+icon: "settings"
---
-
-
- Hooks und Richtlinien auf einem Rechner installieren. Verwenden Sie diese Option, wenn Sie sofortige Schutzmaßnahmen benötigen, ohne Sitzungsdaten in die Cloud zu senden.
-
-
- Zentralisierte Sitzungen, Audits, Online-Auswertungen, Dashboards, Benachrichtigungen und Fleet-Richtlinien-Deployment hinzufügen.
-
-
- Unternehmensweite Steuerung, bereichsbeschränkte Schlüssel, private Infrastruktur und deployment-spezifische Sicherheitsanforderungen nutzen.
-
-
+Failproof AI kann vollständig auf einer Maschine laufen oder sich mit der Cloud für gemeinsame Sitzungen und Richtlinienverwaltung verbinden.
+
+## Lokal, ohne Konto
+
+```bash
+npm install -g failproofai
+failproofai config
+failproofai policies add FailproofAI/policies
+failproofai
+```
-## Empfohlener Weg zur Produktion
+Dies installiert den Dienst, verbindet unterstützte Agenten, fügt ein Richtlinienpaket hinzu und öffnet das Dashboard unter `http://localhost:8020`.
-1. Verbinden Sie eine Nicht-Produktionsmaschine mit aktivierter Transkripterfassung.
-2. Sitzungen und Auswertungen in der Cloud überprüfen.
-3. Ein Audit für einen bekannten Fehlerfall erstellen.
-4. Die erste Richtlinie im Beobachtungsmodus deployen.
-5. Nach Überprüfung von Treffern und False Positives auf die Produktion ausweiten.
+Führe `failproofai audit` aus, um die bereits auf der Maschine vorhandene Agentenhistorie zu scannen.
-## Maschine mit der Cloud verbinden
+## Failproof AI Cloud verbinden
-
-
- 1. Gehen Sie zu **Administration → Keys** und erstellen Sie einen Schlüssel mit `events:add` und `policies:pull`.
- 2. Kopieren Sie das Einmalgeheimnis auf die Zielmaschine.
- 3. Führen Sie den CLI-Verbindungsbefehl aus, gehen Sie dann zu **Admin → enforcement** und bestätigen Sie, dass die Maschine angezeigt wird.
- 4. Gehen Sie zu **Observe → Events** und bestätigen Sie, dass das erste Ereignis eingeht.
+Erstelle einen Machine-Key in der Cloud und führe dann folgendes aus:
- Die Schlüssel-Schublade zeigt die zwei Berechtigungen, die eine verbundene Maschine benötigt: Ereigniserfassung und Richtlinienverteilung.
+```bash
+failproofai config --token
+failproofai config --machine-label checkout-runner-01
+failproofai policies add FailproofAI/policies
+failproofai config --status
+```
- 
+Alternativ kannst du `FAILPROOFAI_CLOUD_TOKEN=` exportieren und einfach `failproofai config` ausführen. Auf gemeinsam genutzten Maschinen und in CI-Umgebungen empfiehlt sich die Umgebungsvariable, damit der Key nicht in der Shell-History oder den Prozesslisten auftaucht.
- Nach der Verbindung sollte die Maschine in der Durchsetzungsübersicht mit ihrem gewünschten und gemeldeten Richtlinienstatus erscheinen.
+Die Cloud-Verbindung erfüllt zwei separate Aufgaben:
- 
+- Richtlinien abrufen, die dieser Maschine zugewiesen sind.
+- Richtlinienentscheidungen und Sitzungsprotokolle senden.
- Das erste eingehende Ereignis bestätigt, dass der Daemon Daten unabhängig vom Richtlinien-Deployment an die Cloud übermitteln kann.
+Um nur Entscheidungen zu senden, verbinde dich zunächst und setze dann `collector.sessions` in `~/.failproofai/config.json` auf `false`. Verlasse dich nicht auf `--no-transcripts`: Der aktuelle Setup-Pfad parst das Flag, wendet es jedoch nicht an. Siehe [Ereignisse und Konfiguration](/de/reference/events-and-configuration#machine-configuration).
- 
+
+ `--machine-label` benennt eine bereits verbundene Maschine um. Führe es nach dem Setup-Befehl aus, nicht als Teil der ersten Verbindung.
+
- Fahren Sie erst fort, wenn sowohl die Maschine als auch ihr erstes Ereignis sichtbar sind.
-
-
- ```bash
- failproofai config --connect https://app.befailproof.ai \
- --token "$FAILPROOFAI_KEY" \
- --machine-label checkout-runner-01
+## Unbeaufsichtigtes Setup
- failproofai policies --install --cli claude --scope user
- failproofai config --status
- ```
+`failproofai config` benötigt kein spezielles Flag für den nicht-interaktiven Betrieb. In CI oder einem Container führt es das gewünschte Setup ohne Rückfragen durch.
- Fügen Sie `--no-transcripts` hinzu, wenn Transkriptinhalte lokal bleiben müssen.
-
-
+```bash
+export FAILPROOFAI_CLOUD_TOKEN=""
+failproofai config
+```
-Die Verbindung zur Cloud überprüft Ereigniserfassung und Richtlinienverteilung unabhängig voneinander. Ein Schlüssel kann daher gültig sein, aber eine erforderliche Berechtigung fehlen. Verwenden Sie `failproofai config --status`, um zu sehen, welche Funktion konfiguriert ist.
+Für die Installation des Hintergrunddienstes sind einmalig Administratorrechte erforderlich. Das Setup öffnet niemals eine interaktive `sudo`-Passwortabfrage: Es gelingt entweder ohne eine solche oder gibt die Befehle aus, die ein Administrator ausführen muss.
-
- Das Cloud-Setup schreibt lokale Anmeldedaten erst, nachdem die jeweilige Funktion erfolgreich war. Eine fehlgeschlagene Überprüfung hinterlässt keine Maschine, die als verbunden erscheint, obwohl sie es nicht ist.
-
\ No newline at end of file
+## Plattformunterstützung
+
+Das Setup unterstützt Linux und macOS. Auf anderen Plattformen beendet es sich, ohne Hooks oder einen unvollständigen Setup-Zustand zu schreiben.
+
+
+
+ Fehlende Sitzungen oder Richtlinienzuweisungen diagnostizieren.
+
+
+ Scopes und Durchsetzungsunterstützung für jedes Harness einsehen.
+
+
\ No newline at end of file
diff --git a/docs/es/admin/keys-and-permissions.mdx b/docs/es/admin/keys-and-permissions.mdx
index 845c3f5ab..205692d45 100644
--- a/docs/es/admin/keys-and-permissions.mdx
+++ b/docs/es/admin/keys-and-permissions.mdx
@@ -1,74 +1,54 @@
---
title: "Claves y permisos"
-description: "Crea claves de API con alcance específico para máquinas, automatización y operadores."
+description: "Crea credenciales para personas, automatizaciones y máquinas."
icon: "key-round"
---
-Las claves de API pertenecen a una organización y llevan permisos explícitos. Usa claves separadas para la ingesta de agentes, la entrega de políticas, los evaluadores, la automatización de CI y los scripts administrativos.
+Usa una clave distinta para cada persona, máquina o tarea de automatización. Otorga únicamente los permisos que necesite.
## Crear y rotar una clave
-
-
- 1. Ve a **Administración → Claves**, selecciona **nueva clave** e introduce un nombre para la carga de trabajo.
- 2. Elige un conjunto de permisos y ajusta los permisos individuales solo cuando el preset no sea suficiente.
- 3. Crea la clave y copia su secreto de un solo uso de inmediato.
- 4. Abre la clave más adelante para actualizar permisos, desactivarla o regenerar el secreto.
+Usa **Admin → Keys** o el Cloud CLI:
- El panel de creación es donde eliges los permisos mínimos necesarios para la carga de trabajo.
+```bash
+fp keys list
+fp keys create "audit automation" --add audits:read
+fp keys disable "audit automation"
+```
- 
+Guarda el secreto en el momento de creación; no se mostrará de nuevo. Para rotar, crea una clave de reemplazo, actualiza el consumidor y luego deshabilita la clave antigua.
- Tras la creación, la página de Claves muestra los metadatos persistentes y las acciones de gestión. El secreto de un solo uso no se vuelve a mostrar.
+## Claves de máquina
- 
+Una clave de máquina conecta el servicio local con Cloud:
- Usa esta lista para revisar los permisos regularmente y desactivar las claves que ya no correspondan a una carga de trabajo activa.
-
-
- ```bash
- fp keys create production-agents \
- --add events:add \
- --add policies:pull
- fp keys show production-agents
- fp keys update production-agents --add events:read
- fp keys regenerate production-agents --yes
- fp keys disable production-agents
- ```
+```bash
+export FAILPROOFAI_CLOUD_TOKEN=""
+failproofai config
+```
- Redirige o captura de forma segura la salida de create/regenerate; el secreto se devuelve una sola vez.
-
-
+Una máquina conectada puede necesitar dos capacidades:
-Los dos permisos que requiere una máquina de Failproof AI conectada son independientes:
+- `policies:pull` para recibir políticas gestionadas desde Cloud.
+- `events:add` para enviar decisiones y sesiones.
-- `events:add` envía eventos y datos de sesión.
-- `policies:pull` recupera los despliegues de políticas asignados.
+El estado las reporta por separado, ya que una puede funcionar mientras la otra no.
-Los secretos de las claves se muestran al crearlas o regenerarlas. Guárdalos en un gestor de secretos y rótalos sin reutilizar las credenciales interactivas de un operador.
+## Permisos comunes
-## Catálogo de permisos
-
-| Área | Permisos |
+| Permiso | Permite |
| --- | --- |
-| Eventos | `events:add`, `events:read` |
-| Claves | `keys:create`, `keys:read`, `keys:disable`, `keys:regenerate`; `keys:update` es exclusivo de sesión humana |
-| Usuarios | `users:create`, `users:read`, `users:update`, `users:delete` |
-| Evaluaciones | `evaluations:read`, `evaluations:trigger` |
-| Paneles | `dashboards:read`, `dashboards:write`, `dashboards:delete` |
-| Consultas | `queries:read`, `queries:write`, `queries:delete`, `queries:run` |
-| Asistente | `agent:use` |
-| Configuración | `settings:read`, `settings:write` |
-| Alertas | `alerts:read`, `alerts:write` |
-| Incidencias | `issues:read`, `issues:create`, `issues:close` |
-| Auditorías | `audits:read`, `audits:write` |
-| Políticas | `policies:read`, `policies:write`, `policies:pull` |
-| Uso | `usage:read` |
-
-`orgs:admin` está reservado para el operador de la instancia y no puede otorgarse a una clave de organización ni a un miembro ordinario. Los tokens retirados `incidents:*` y `alerts:ack` se aceptan por compatibilidad y se normalizan a los permisos actuales de `issues:*`.
+| `events:add` | Enviar eventos |
+| `events:read` | Leer eventos y errores |
+| `evaluations:read` | Leer sesiones y evaluaciones |
+| `audits:read` / `audits:write` | Revisar o gestionar auditorías |
+| `policies:read` / `policies:write` | Revisar o desplegar políticas |
+| `policies:pull` | Obtener asignaciones de políticas para la máquina |
+| `keys:create` / `keys:disable` | Crear o deshabilitar claves |
+| `orgs:admin` | Administración de la organización a nivel de instancia; no asignable a una clave de organización |
-Los conjuntos de permisos integrados son `read-only`, `standard` y `admin`. `standard` añade a los permisos de lectura la activación de evaluaciones, la ejecución de consultas, la gestión de incidencias y el uso del asistente. Al crear una clave, se eliminan los permisos exclusivos de sesión humana aunque el conjunto de permisos los incluya.
+Algunos comandos administrativos de `fp fleet` y `fp guardrails` requieren una sesión de usuario autenticada en lugar de una clave de API. El texto de ayuda de cada comando lo indica antes de realizar la solicitud.
- Las claves con ámbito de instancia pueden seleccionar una organización mediante la cabecera `X-AgentEye-Org`. Establécela de forma explícita en despliegues con múltiples organizaciones; omitirla puede hacer que se seleccione la organización predeterminada.
+ Nunca reutilices credenciales de ingesta como `AGENTEYE_KEY` o `AGENTEYE_API_KEY` como `FP_API_KEY`. Corresponden a sistemas y permisos distintos.
\ No newline at end of file
diff --git a/docs/es/admin/overview.mdx b/docs/es/admin/overview.mdx
index 352b43df7..dd0e1842d 100644
--- a/docs/es/admin/overview.mdx
+++ b/docs/es/admin/overview.mdx
@@ -1,22 +1,30 @@
---
title: "Administración"
-description: "Gestiona el acceso, el uso, las organizaciones y la seguridad sin mezclarlos con el flujo de trabajo de fiabilidad."
+description: "Gestiona el acceso a Cloud, membresías, configuraciones y consumo sin mezclarlos con el flujo de trabajo de fiabilidad."
icon: "settings-2"
---
-Administración contiene los controles necesarios para ejecutar Failproof AI en todo un equipo. La mayoría de los usuarios pueden quedarse en Sesiones, Auditorías y Políticas; los administradores utilizan esta sección para gestionar el acceso y los límites operativos.
+La administración es la mitad Cloud de Failproof AI. Las organizaciones, miembros, claves API, configuraciones de la organización y el consumo medido requieren una conexión a Cloud.
+
+
+ Failproof AI también funciona sin ninguna cuenta. Una máquina local aplica políticas, mantiene el historial de sesiones en disco, sirve el [panel local](/es/reference/local-dashboard) en `localhost:8020` y ejecuta `failproofai audit` sin enviar nada a ningún lugar. Consulta la [configuración de máquina](/es/reference/events-and-configuration#machine-configuration) para las claves locales de `collector`. Omite el resto de esta sección si no usas Cloud.
+
+
+## Dónde se encuentran los controles
-
- Usa la sección **Admin** de la barra lateral en la nube para acceder al **editor de políticas**, **aplicación**, **uso**, **claves**, **usuarios** y **configuración**. Un elemento bloqueado indica que a tu cuenta le falta el permiso de lectura correspondiente.
+
+ El grupo **admin** en la barra lateral de Cloud contiene el **editor de políticas**, **aplicación**, **uso**, **claves**, **usuarios** y **configuración**.
- 
+ 
+ Instala el CLI de Cloud como herramienta independiente y luego inicia sesión:
+
```bash
+ uv tool install fp-cloud-cli
+ fp login
fp whoami
- fp orgs current
- fp orgs perms
fp usage
```
@@ -24,17 +32,43 @@ Administración contiene los controles necesarios para ejecutar Failproof AI en
+## Usuario autenticado o clave API
+
+`fp` opera en uno de dos modos de autenticación, y esta distinción determina qué comandos funcionan. Un comando que una clave API no puede ejecutar rechaza la operación antes de abrir una conexión e indica el motivo, en lugar de dejar que un error 401 o 403 lo explique.
+
+| Comando | Clave API | Permiso |
+| --- | --- | --- |
+| `fp whoami` | Sí | ninguno |
+| `fp usage` | Sí | `usage:read` |
+| `fp keys list` / `show` | Sí | `keys:read` |
+| `fp keys create` | Sí | `keys:create` |
+| `fp keys disable` | Sí | `keys:disable` |
+| `fp keys regenerate` | Sí | `keys:regenerate` |
+| `fp keys update` | No | `keys:update`, que ninguna clave puede tener |
+| `fp users list` / `show` | Sí | `users:read` |
+| `fp users create` | Sí | `users:create` |
+| `fp users update` | Sí | `users:update` |
+| `fp users disable` / `enable` | Sí | `users:delete` |
+| `fp settings list` / `schema` | Sí | `settings:read` |
+| `fp settings set` | Sí | `settings:write` |
+| `fp orgs list` / `switch` / `current` / `perms` | No | solo sesión autenticada |
+
+`fp usage` es el comando indicado para scripts de informes: se ejecuta de forma desatendida con una clave y solo necesita `usage:read`.
+
-
- Inspecciona los períodos de facturación y el consumo de la organización.
-
- Otorga a las máquinas y la automatización únicamente los permisos que necesitan.
+ Genera las credenciales de máquina y asigna a cada carga de trabajo únicamente los permisos que necesita.
- Gestiona la membresía, los valores predeterminados y los límites de la organización.
+ Gestiona membresías y mantiene los datos y acciones de cada organización correctamente delimitados.
- Configura los ajustes operativos, el manejo de datos y la seguridad del despliegue.
+ Define los valores de inicio de sesión y alertas, y decide qué datos del agente salen de la máquina.
+
+
+ Consulta lo que la organización ha consumido durante su ventana actual de 30 días.
+
+
+ Consulta qué máquinas están registradas, cómo se identifican y qué políticas aplican.
\ No newline at end of file
diff --git a/docs/es/admin/settings-and-security.mdx b/docs/es/admin/settings-and-security.mdx
index cfb23e9ea..c1b0550ec 100644
--- a/docs/es/admin/settings-and-security.mdx
+++ b/docs/es/admin/settings-and-security.mdx
@@ -1,68 +1,37 @@
---
title: "Configuración y seguridad"
-description: "Configura los ajustes operativos y toma decisiones deliberadas sobre los datos del agente."
-icon: "lock-keyhole"
+description: "Controla los valores predeterminados de la organización, el manejo de datos y las credenciales de máquina."
+icon: "shield"
---
-Utiliza la configuración para valores operativos específicos del despliegue y anulaciones de la ventana de contexto del modelo. Inspecciona el esquema de configuración antes de cambiar un valor a través de la API o la CLI.
+La configuración de la organización afecta a todos los miembros de esa organización en la nube. Puedes modificarla desde **Admin → settings** o con `fp settings`.
-## Cambiar un ajuste de organización
+```bash
+fp settings list
+fp settings set
+```
-
-
- 1. Ve a **Administración → Configuración**, busca el grupo de ajustes y lee su descripción y fuente actual.
- 2. Cambia el valor y guárdalo.
- 3. Para las ventanas de contexto del modelo, añade o actualiza la anulación del modelo y confirma el límite efectivo.
- 4. Vuelve a revisar las sesiones y métricas que dependan del valor modificado.
+## Manejo de datos
- 
-
-
- ```bash
- fp settings list
- fp settings schema
- fp settings set --value
- fp settings set alerts.email_default_recipients \
- --json-value '["oncall@example.com"]'
- ```
+De forma predeterminada, una máquina conectada envía las decisiones de política y las transcripciones completas de sesión. Para enviar únicamente las decisiones, establece `collector.sessions` en `false` en el archivo `~/.failproofai/config.json` de la máquina después de conectarla. El indicador de configuración `--no-transcripts` no aplica ese ajuste actualmente.
- Ejecuta `fp settings set --help` para ver el tipo de valor y los indicadores de confirmación utilizados por la CLI instalada.
-
-
+Las credenciales se depuran en la máquina antes de la subida, pero la redacción es una protección mínima, no un sustituto del control de acceso.
-## Opciones de manejo de datos
+El uso solo local no requiere cuenta. El historial de sesiones y las auditorías permanecen en la máquina, excepto que las auditorías locales programadas envían la identidad de la máquina y un resumen limitado después de que el usuario opt-in. La telemetría anónima de la CLI puede deshabilitarse con `FAILPROOFAI_TELEMETRY_DISABLED=1`.
-Conectar la CLI de Failproof AI envía transcripciones de forma predeterminada porque los registros de seguimiento y las auditorías dependen de su contenido. Usa `--no-transcripts` cuando las instrucciones, el contenido de archivos o la entrada de terminal deban permanecer en local; la actividad de hooks y las decisiones de políticas aún pueden reportarse.
+## Credenciales
-Las credenciales de ingestión local se almacenan de forma independiente a los ajustes no confidenciales del daemon y se escriben con permisos restrictivos. Las claves API deben seguir gestionándose como secretos de producción.
+Los tokens de máquina se almacenan en `~/.failproofai/` con permisos exclusivos para el propietario. No se escriben en la definición del servicio.
-## Referencia de ajustes de organización
+Utiliza claves separadas para personas, automatización y máquinas. Otorga a cada una solo los permisos que necesita, rótalas cuando cambie la titularidad y revócalas cuando la máquina o el flujo de trabajo queden fuera de uso.
-Todos los ajustes editables desde el panel de control tienen alcance de organización. El comportamiento a nivel de despliegue permanece como configuración del entorno del servidor.
+## Lista de verificación
-| Clave | Valor predeterminado | Propósito |
-| --- | --- | --- |
-| `allowed_sign_ins` | `[]` | Restringe los miembros existentes a correos exactos o `*@dominio`; una lista vacía significa que no hay restricción adicional. |
-| `session_ttl_secs` | `86400` | Duración de la sesión en el panel de control; el rango aceptado es de 60 segundos a 30 días. |
-| `otp_ttl_secs` | `600` | Duración del OTP y el enlace mágico; el rango aceptado es de 60 a 1800 segundos. |
-| `alerts.email_default_recipients` | `[]` | Destinatarios predeterminados cuando un canal de alertas por correo no los sobreescribe. |
-| `alerts.slack_default_webhook` | vacío | URL predeterminada del webhook entrante de Slack. |
-| `alerts.webhook_default_url` | vacío | URL predeterminada del webhook JSON genérico. |
-| `alerts.webhook_signing_secret` | vacío | Clave HMAC-SHA256 usada en el encabezado `X-AgentEye-Signature`; las lecturas están enmascaradas. |
-| `alerts.enabled_channels` | email, Slack, webhook | Tipos de canales a nivel de organización que las reglas de alerta pueden utilizar. |
-| `default_user_permissions` | `standard` | Conjunto de permisos predefinido preseleccionado para nuevas invitaciones. |
+- Exige los permisos mínimos necesarios.
+- Establece `collector.sessions` en `false` donde el contenido completo no sea necesario.
+- Revisa quién puede desplegar políticas de aplicación.
+- Prueba las políticas en modo de observación antes de activar la aplicación.
+- Mantén las etiquetas de máquina claras y los IDs de máquina estables.
+- Ejecuta `failproofai config --status` después de cambiar la configuración de conexión.
-`allowed_sign_ins` es un filtro, no una concesión: la persona ya debe ser miembro de la organización. Usa una lista vacía para permitir el acceso a todos los miembros; el valor `*` a secas es rechazado. Las URLs de alertas deben usar HTTPS, excepto para direcciones de desarrollo en loopback.
-
-## Lista de verificación de seguridad
-
-- Usa HTTPS para las conexiones en la nube.
-- Limita las claves al conjunto de permisos mínimo necesario.
-- Separa los entornos de producción y los que no son de producción.
-- Revisa la configuración de transcripciones y redacción antes del despliegue.
-- Audita los cambios de usuarios, claves y organización.
-- Comprueba los requisitos de copia de seguridad, retención y respuesta a incidentes para tu despliegue.
-
-
- Desactivar la captura de transcripciones cambia lo que las auditorías e investigaciones pueden demostrar. Registra la decisión y sus limitaciones previstas.
-
\ No newline at end of file
+Consulta [claves y permisos](/es/admin/keys-and-permissions) para ver el catálogo de permisos.
\ No newline at end of file
diff --git a/docs/es/admin/usage.mdx b/docs/es/admin/usage.mdx
index 049454dd1..bdc1219c8 100644
--- a/docs/es/admin/usage.mdx
+++ b/docs/es/admin/usage.mdx
@@ -1,21 +1,24 @@
---
title: "Uso"
-description: "Inspecciona el consumo de la organización y la ventana de facturación activa."
+description: "Inspecciona el consumo de la organización en la ventana de medición actual de 30 días."
icon: "chart-no-axes-combined"
---
-Uso muestra el consumo de la organización actual y sus ventanas de facturación. Utilízalo para entender cómo el despliegue en producción, el volumen de transcripciones, las evaluaciones y la cadencia de auditorías afectan a tu plan.
+Uso muestra lo que la organización actual ha medido durante su ventana de 30 días en curso. La ventana es fija y está anclada por organización, y el uso es de solo lectura: no aplica ni muestra límites, cuotas ni umbrales de plan. Ambas interfaces lo indican — el panel de la CLI imprime "read-only usage, no limits applied".
## Revisar el uso
- 1. Ve a **Administración → Uso**.
- 2. Confirma la organización y la ventana de medición.
- 3. Revisa la ingesta, sesiones, evaluaciones, métricas, auditorías, hallazgos, alertas, usuarios y claves.
- 4. Compara el trabajo de auditoría iniciado y completado cuando el uso de auditorías sea inesperado.
+ 1. Ve a **admin → usage**.
+ 2. Confirma la organización y la ventana de medición — el encabezado muestra el inicio y fin de la ventana, el día dentro de ella y cuánto ha transcurrido.
+ 3. Lee el bloque principal: eventos ingeridos, sesiones, agentes y entornos.
+ 4. Lee las dos canalizaciones: evaluaciones (con puntuaciones y métricas) y auditorías (con incidencias y alertas), cada una mostrando ejecuciones completadas frente a ejecuciones iniciadas.
+ 5. Lee los bloques de espacio de trabajo y acceso: consultas guardadas, dashboards, alertas, incidencias únicas, miembros y claves de API.
- 
+ Las cifras están en caché, no son en tiempo real. Usa el control de actualización en la parte superior derecha después de un cambio que esperes ver reflejado.
+
+ 
```bash
@@ -23,15 +26,52 @@ Uso muestra el consumo de la organización actual y sus ventanas de facturación
fp --json usage
fp --org reliability-team --json usage
```
+
+ `fp usage` requiere `usage:read` y se ejecuta bajo una clave de API, lo que lo convierte en el comando adecuado para un cron de informes.
+
+ Con `--json` devuelve la respuesta del dashboard sin modificar: `org_id`, `billing_anchor`, `window`, `usage`, `calculated_at` y `stale_after`. `calculated_at` y `stale_after` permiten saber qué tan antigua es una cifra.
+
+ `fp usage` no acepta flags propios — solo los globales `--json` y `--org`. Informa sobre la ventana actual y nada anterior, así que mantén tu propio historial ejecutándolo de forma programada y almacenando el payload de `--json` en lugar de esperar poder consultar una ventana anterior más adelante.
+
+ ```bash
+ fp --json usage | jq '.usage.events_ingested'
+ ```
+### Claves de métricas
+
+Todo lo que está bajo `usage` en el payload JSON, para que un script pueda nombrar un campo en lugar de analizar un panel.
+
+| Grupo | Claves |
+| --- | --- |
+| Telemetría | `events_ingested`, `sessions`, `agents`, `environments` |
+| Evaluaciones | `evaluation_runs`, `evaluation_finishes`, `evaluations`, `metrics` |
+| Auditorías | `audit_runs`, `audit_finishes`, `issues_created`, `alerts_created` |
+| Espacio de trabajo | `queries_created`, `dashboards_created` |
+| Acceso | `users_active`, `users_created`, `keys_active`, `keys_created` |
+
+Cada canalización informa los conteos de inicio y finalización por separado, por lo que una diferencia entre `audit_runs` y `audit_finishes` indica trabajo que comenzó y no se completó — vale la pena verificarlo antes de interpretar los conteos de incidencias que aparecen debajo.
+
## Investigar un cambio
-1. Confirma la organización activa y la ventana.
-2. Compara el incremento con el volumen de sesiones por entorno.
-3. Verifica si una nueva integración comenzó a enviar transcripciones.
-4. Revisa los cambios en la cadencia de evaluadores y auditorías.
-5. Compara con los límites del plan de precios actual.
+El volumen de ingesta se decide por máquina, no de forma centralizada. Comienza desde la organización y la ventana, luego analiza qué cambió en las máquinas que reportan a ella.
+
+| Causa | Dónde verificar | Qué cambiar |
+| --- | --- | --- |
+| Una máquina está enviando transcripciones de sesión | `collector.sessions` en el `~/.failproofai/config.json` de esa máquina | Establécelo en `false` para enviar solo decisiones |
+| La actividad de hooks se está enviando completa | `collector.hooks_verbosity` en el mismo archivo | `decisions` agrega permisos por minuto; `off` detiene los eventos de hooks por completo |
+| Se agregó una nueva ubicación de captura | `failproofai harness list` | Elimínala con `failproofai harness remove-path ` |
+| Se reenvió el historial | Las ejecuciones de `failproofai backfill` en la máquina | Los reenvíos se deduplichan mediante un hash de contenido y se fusionan con las filas ya existentes, por lo que no duplican el conteo |
+| Una nueva integración comenzó a reportar | Los conteos de `agents` y `environments`, y la lista de sesiones | Configura los ajustes del recopilador de la nueva máquina antes de desplegarlo |
+
+El uso no compara nada contra un plan. Haz eso fuera del producto.
-La CLI devuelve el mismo resumen para scripts.
\ No newline at end of file
+
+
+ Los ajustes de manejo de datos por máquina detrás de estas cifras.
+
+
+ La superficie completa de `fp`, incluyendo instalación e inicio de sesión.
+
+
\ No newline at end of file
diff --git a/docs/es/admin/users-and-organizations.mdx b/docs/es/admin/users-and-organizations.mdx
index 4eb1140b5..c22695c61 100644
--- a/docs/es/admin/users-and-organizations.mdx
+++ b/docs/es/admin/users-and-organizations.mdx
@@ -1,21 +1,16 @@
---
title: "Usuarios y organizaciones"
-description: "Controla la membresía y mantén los datos y acciones de cada organización delimitados."
+description: "Controla la membresía y mantén los datos y acciones de cada organización dentro de su ámbito."
icon: "users"
---
-Las organizaciones aíslan sesiones, evaluaciones, auditorías, incidencias, alertas, consultas, paneles, usuarios y claves. Confirma la organización activa antes de modificar recursos administrativos.
+Las organizaciones aíslan sesiones, evaluaciones, auditorías, incidencias, alertas, consultas, paneles, usuarios y claves. Confirma la organización activa antes de modificar cualquier recurso administrativo.
-## Gestionar miembros y organizaciones
+## Seleccionar la organización
-
- 1. Usa el selector de organización en la parte superior de la barra lateral de Cloud para cambiar de organización.
- 2. Ve a **Administración → Usuarios** para buscar miembros o filtrar por estado activo y rol.
- 3. Selecciona **nuevo usuario**, introduce el correo electrónico, elige un conjunto de permisos y ajusta las excepciones si es necesario.
- 4. Abre un usuario posteriormente para actualizar permisos, deshabilitar el inicio de sesión o volver a habilitar la cuenta.
-
- 
+
+ Usa el selector de organización en la parte superior de la barra lateral de Cloud. Todo lo que aparece debajo —incluidas todas las páginas de **admin**— leerá y escribirá en esa organización.
```bash
@@ -23,22 +18,62 @@ Las organizaciones aíslan sesiones, evaluaciones, auditorías, incidencias, ale
fp orgs switch reliability-team
fp orgs current
fp orgs perms
+ ```
+
+ `fp orgs switch` sin un slug abre un selector con teclas de flecha que parte de tu organización actual; en una ejecución no interactiva se recurre a un selector numerado, y con `--json` se requiere un slug. La elección se guarda en `~/.failproofai/fpcli/cli-auth.json`, por lo que los comandos posteriores la envían como el tenant activo. Puedes sobreescribirla para un solo comando con `--org ` o `FP_ORG`.
+
+
+
+
+ Todos los comandos `fp orgs` requieren un usuario autenticado y se rechazan con una clave de API, porque la membresía de una organización pertenece a una persona, y una clave ya actúa para una organización concreta. Los comandos `fp users` que se describen a continuación funcionan de las dos formas.
+
+
+## Gestionar miembros
+
+
+
+ 1. Ve a **admin → users** y busca miembros por correo electrónico, o filtra la lista con las etiquetas `protected`, `admin`, `standard` y `read-only`.
+ 2. Selecciona **new user**, introduce el correo electrónico, elige un conjunto de permisos y ajusta las sobreescrituras por miembro si es necesario.
+ 3. Accede al perfil de un miembro más adelante para cambiar sus permisos, deshabilitar el inicio de sesión o volver a activar la cuenta.
+ 
+
+ Las etiquetas de permisos en esta vista son anteriores al cambio de nombre de `incidents:*` a `issues:*`; la lista de [permisos comunes](/es/admin/keys-and-permissions#common-permissions) está actualizada.
+
+
+ ```bash
+ fp users list
+ fp users list --active-only
fp users create engineer@example.com --permission-set standard
fp users show engineer@example.com
fp users update engineer@example.com --add audits:write
fp users disable engineer@example.com
fp users enable engineer@example.com
```
+
+ Los miembros se identifican por correo electrónico y se resuelven sin distinción entre mayúsculas y minúsculas, de modo que `fp users show Alice.Chen@Example.com` y `fp users create alice.chen@example.com` hacen referencia a la misma persona.
-Los administradores pueden crear, actualizar, deshabilitar y volver a habilitar usuarios, así como asignar el conjunto de permisos adecuado para su rol. La API utiliza una operación de eliminación para deshabilitar, pero no elimina la cuenta ni su registro de membresía.
+### Permisos y lo que necesita cada verbo
+
+Los permisos de los miembros usan la misma aritmética que las claves: los permisos efectivos son `(set ∪ added) − removed`, y `--add` / `--remove` aceptan tokens compactos `slug:acción.acción` donde las acciones con punto se expanden. Consulta [claves y permisos](/es/admin/keys-and-permissions).
+
+| Verbo | Permiso | Notas |
+| --- | --- | --- |
+| `fp users list` / `show` | `users:read` | `--active-only` oculta los miembros deshabilitados. |
+| `fp users create` | `users:create` | `--permission-set` define el rol inicial; `--add` / `--remove` aplican sobreescrituras adicionales. |
+| `fp users update` | `users:update` | `--permission-set` **reemplaza** las sobreescrituras por miembro; `--add` / `--remove` solos son incrementales sobre sus permisos actuales. |
+| `fp users disable` / `enable` | `users:delete` | Ambos, incluido enable — concédelo de forma deliberada. |
+
+Deshabilitar rechaza dos casos de forma explícita, como un error Forbidden en lugar de un mensaje de validación: un miembro **protegido** no puede deshabilitarse, y tampoco puedes deshabilitar tu propia cuenta. Deshabilitar un miembro ya deshabilitado, o habilitar uno ya activo, es una operación que no produce ningún cambio. La API usa una operación de eliminación para deshabilitar, pero no elimina ni la cuenta ni su registro de membresía.
+
+Dos ajustes de la organización controlan la membresía: `default_user_permissions` preselecciona el conjunto de permisos para una nueva invitación, y `allowed_sign_ins` determina qué direcciones pueden recibir un código de inicio de sesión. Puedes gestionarlos desde la [página de configuración](/es/admin/settings-and-security).
- Deshabilitar un usuario bloquea esa identidad para iniciar sesión en todas las organizaciones, no solo en la organización seleccionada actualmente. Volver a habilitarlo restaura el inicio de sesión global y los permisos del miembro en esta organización.
+ Deshabilitar un usuario impide que esa identidad inicie sesión en todas las organizaciones, no solo en la seleccionada en ese momento. Volver a habilitarlo restaura el inicio de sesión global y los permisos del miembro en esta organización.
- Asigna a las cuentas de servicio nombres descriptivos vinculados a una carga de trabajo y a un propietario. Evita compartir claves entre organizaciones o entre personas y máquinas.
+ Asigna a las cuentas de servicio nombres descriptivos vinculados a una carga de trabajo y a un responsable. No compartas una clave entre organizaciones ni entre una persona y una máquina.
\ No newline at end of file
diff --git a/docs/es/audits/alerts.mdx b/docs/es/audits/alerts.mdx
index 70d137e73..cfacfcc93 100644
--- a/docs/es/audits/alerts.mdx
+++ b/docs/es/audits/alerts.mdx
@@ -1,62 +1,103 @@
---
title: "Alertas"
-description: "Detecta recurrencias y dirige un incidente a los responsables adecuados."
+description: "Detecta recurrencias y dirige un problema a los responsables adecuados."
icon: "bell-ring"
---
-Las alertas supervisan una condición medible y crean un incidente cuando se activa. Úsalas cuando un fallo deba generar una respuesta oportuna, independientemente de si una política puede bloquearlo.
+Una alerta supervisa una condición medible y abre un problema cuando se activa. Úsala cuando un fallo deba generar una respuesta oportuna, independientemente de si una política puede bloquearlo.
## Crear y probar una alerta
-
- 1. Ve a **Analyze → Alerts** y selecciona **new alert**. También puedes comenzar desde el ícono de campana en un error representativo.
- 2. Introduce el nombre, la severidad, el tipo de disparador, la condición, el intervalo de evaluación, el conteo de infracciones, la ventana y los canales.
+
+ 1. Ve a **Analyze → Alerts** y selecciona **new alert**. También puedes empezar desde el icono de campana en un error representativo.
+ 2. Introduce el nombre, la gravedad, el tipo de disparador, la condición, el intervalo de evaluación, el número de infracciones, la ventana y los canales.
3. Guarda la alerta, abre su página de detalle y ejecuta **test**.
- 4. Ve a **Analyze → Issues** para reconocer, asignar, comentar, suscribirte y resolver los incidentes creados por la alerta.
+ 4. Ve a **Analyze → Issues** para confirmar, asignar, comentar, suscribirte y resolver los problemas que abre la alerta.
La primera parte del formulario identifica la alerta y la señal que debe activarla.
- 
+ 
- La segunda parte controla cuánto tiempo debe persistir la condición, con qué frecuencia se evalúa y dónde se envían las notificaciones.
+ La segunda parte controla cuánto tiempo debe persistir la condición, con qué frecuencia se evalúa y adónde se envían las notificaciones.
- 
+ 
- Después de guardar, usa la lista de Alerts para confirmar que la regla está habilitada y que su disparador, ventana, severidad y canales coinciden con lo que estableciste.
+ Tras guardar, usa la lista de Alertas para confirmar que la regla está habilitada y que su disparador, ventana, gravedad y canales coinciden con lo que pretendías. Una tarjeta con problemas abiertos muestra el recuento; una tarjeta sin ninguno omite la línea por completo, así que su ausencia no te dice nada. Para ver la cifra de cada regla, incluidos los ceros, usa `fp alerts show `, que siempre la imprime.
- 
-
- Prueba la alerta antes de depender de ella para la respuesta en producción.
+ 
```bash
fp alerts create high-errors \
--trigger-kind metric_threshold \
--severity warning \
- --trigger-spec '{"metric":"error_count","op":">","value":50,"window_secs":900}'
+ --trigger-spec '{"metric":"error_count","op":">","value":50,"window_secs":900}' \
+ --eval-interval-secs 300 \
+ --min-breaches 2 \
+ --eval-window 3
fp alerts show high-errors
fp alerts test high-errors
fp alerts update high-errors --severity critical --yes
```
- Usa `fp alerts list` para revisar las reglas y `fp alerts delete ` para eliminar una.
+ Las nuevas alertas comienzan **habilitadas**, y una colisión de nombres se rechaza antes de que se cree nada.
+
+ `fp alerts update` reemplaza toda la definición en el servidor, por lo que la CLI vuelve a leer la alerta y aplica tus indicadores por encima — una actualización solo con indicadores necesita `alerts:read` **además de** `alerts:write`, y solicita confirmación a menos que pases `--yes`.
+
+ Usa `fp alerts list` para revisar las reglas y `fp alerts delete ` para eliminar una. Delete muestra una vista previa de la regla — incluido el recuento de problemas abiertos — y confirma antes de actuar, porque no se puede deshacer.
+
+ Eliminar no es la forma de silenciar una regla ruidosa. `DELETE /alerts/{id}` aplica cascada: cada problema que la alerta haya abierto se elimina junto con ella, llevándose sus comentarios, suscriptores e historial de actividad. El cuadro de confirmación de la CLI describe los problemas abiertos como «huérfanos»; el contrato de la API es una eliminación en cascada, así que considera el historial como perdido. Para detener el disparo de una regla y conservar lo que registró, desactívala en su lugar — el formulario de alertas del panel de control tiene el interruptor de habilitado, y ni `fp alerts create` ni `fp alerts update` exponen un indicador `--enabled`, por lo que la ruta desde la CLI es `fp alerts update --file` con una definición completa que incluya `enabled: false`.
Consulta la [referencia de `fp alerts`](/es/reference/cloud-cli#alerts) para el conjunto completo de comandos de alerta.
-Las condiciones de alerta pueden basarse en errores, puntuaciones de evaluación, combinaciones de evaluación o SQL personalizado. Agrega destinatarios, prueba la regla y abre el incidente resultante para reconocerlo, asignarlo, comentar, suscribirte y resolverlo.
+
+ **test** envía notificaciones reales. Envía a los canales reales de correo electrónico, Slack y webhook de la alerta, y abre un problema sintético, por lo que puede alertar a quien esté de guardia. Solicita confirmación en una terminal interactiva; `--yes`, `--json` y un stdin redirigido omiten ese aviso. El servidor también informa el éxito en cuanto despacha el mensaje, así que una prueba exitosa confirma que el mensaje salió, no que llegó.
+
+
+## Definir el disparador
+
+Existen cinco tipos de disparadores:
+
+| `--trigger-kind` | Se activa cuando |
+| --- | --- |
+| `metric_threshold` | Una métrica supera un umbral — errores, latencia, coste o cualquier otra cosa que puedas medir. |
+| `per_event` | Llega un único evento coincidente. |
+| `evaluation_score` | La puntuación de un evaluador supera un umbral. |
+| `eval_compound` | Varias condiciones de puntuación se combinan, como que fallen dos de tres puntuaciones. |
+| `custom_sql` | Una consulta que escribes devuelve una infracción. |
-## Buenas prácticas para el diseño de alertas
+La condición en sí va en `--trigger-spec`, con el formato adecuado para el tipo elegido.
+
+## Configurar los números de evaluación
+
+El formulario del panel de control y la CLI solicitan los mismos cuatro valores.
+
+| Ajuste | Indicador | Valores aceptados |
+| --- | --- | --- |
+| Gravedad | `--severity` | `info`, `warning`, `critical` |
+| Intervalo de evaluación | `--eval-interval-secs` | 30–86 400 segundos |
+| Número de infracciones | `--min-breaches` | Al menos 1, y nunca más que la ventana |
+| Ventana de evaluación | `--eval-window` | Al menos 1, contado en **intervalos**, no en segundos |
+
+Así, `--eval-interval-secs 300 --min-breaches 2 --eval-window 3` significa «evaluar cada cinco minutos y disparar cuando dos de las últimas tres evaluaciones hayan infringido».
+
+## Buen diseño de alertas
- Nombra la condición y el flujo de trabajo afectado.
- Define el entorno de forma explícita.
-- Establece una ventana y un umbral que eviten reaccionar ante un único evento inofensivo.
-- Incluye un enlace o consulta que lleve a los responsables a las sesiones correspondientes.
+- Establece una ventana y un umbral que eviten reaccionar a un único evento inofensivo.
+- Incluye un enlace o consulta que lleve a los responsables a las sesiones.
- Asigna un propietario antes de habilitar la regla.
+- Comprueba `fp alerts show ` para ver el recuento de problemas abiertos antes de añadir otra regla para el mismo síntoma. La tarjeta del panel de control solo muestra esa línea cuando el recuento es distinto de cero.
- Después de resolver un hallazgo de auditoría, agrega una alerta para cuando el mismo fallo pueda repetirse fuera del alcance de la política.
-
\ No newline at end of file
+ Tras resolver un hallazgo de auditoría, añade una alerta para cuando el mismo fallo pueda repetirse fuera de la cobertura de la política.
+
+
+
+ Confirma, asigna, comenta, suscríbete y resuelve — el flujo de trabajo en el que aterriza cada disparo de alerta.
+
\ No newline at end of file
diff --git a/docs/es/audits/cadence.mdx b/docs/es/audits/cadence.mdx
index 7793ec965..edf85dba8 100644
--- a/docs/es/audits/cadence.mdx
+++ b/docs/es/audits/cadence.mdx
@@ -1,27 +1,29 @@
---
-title: "Cadencia de auditoría"
-description: "Elige cuándo se ejecutan las auditorías recurrentes y cuántos datos revisan."
+title: "Cadencia de auditorías"
+description: "Elige cuándo se ejecutan las auditorías periódicas y qué cantidad de datos revisan."
icon: "calendar-clock"
---
-Usa auditorías recurrentes para patrones de fallos que pueden reaparecer a medida que cambian los agentes, prompts, herramientas y modelos.
+Usa las auditorías periódicas para detectar modos de fallo que pueden reaparecer a medida que cambian los agentes, prompts, herramientas y modelos.
-## Cambiar el horario
+## Cambiar el calendario
1. Ve a **Analyze → Audits** y abre la auditoría.
- 2. Abre su configuración y cambia el estado de activación, el intervalo, el ancla UTC, el modo de ventana o el lookback.
- 3. Guarda la auditoría y confirma la próxima ejecución en la tarjeta de auditoría.
- 4. Usa **run now** una vez después de un cambio mayor en el alcance o el contexto.
+ 2. Selecciona **edit settings** y cambia la cadencia, la ventana, la sensibilidad o los hallazgos por ejecución.
+ 3. Guarda la auditoría y confirma la hora de la próxima ejecución en la cabecera de la auditoría.
+ 4. Pausa y reanuda el calendario desde esa misma cabecera, junto al botón **run now**.
+ 5. Usa **run now** una vez después de un cambio significativo de alcance o contexto.
- 
+ 
```bash
fp audits edit checkout-reliability \
--schedule-interval-secs 86400 \
--schedule-anchor 2026-08-15T09:00:00Z \
+ --window-mode since_last \
--lookback-window-secs 86400 \
--yes
@@ -29,21 +31,50 @@ Usa auditorías recurrentes para patrones de fallos que pueden reaparecer a medi
fp audits edit checkout-reliability --enabled --yes
```
- Consulta la [referencia de `fp audits`](/es/reference/cloud-cli#audits) para conocer los límites de horario, el comportamiento de las ventanas y todos los comandos de auditoría.
+ `fp audits edit` solicita confirmación antes de aplicar cualquier cambio, por eso todos los ejemplos aquí incluyen `--yes`. El servidor reemplaza la definición completa en cada edición, por lo que la CLI reenvía la auditoría actual con tus cambios aplicados — una edición solo con flags requiere `audits:read` **además de** `audits:write`. Configura una clave de CI con ambos permisos.
+
+ Consulta la [referencia de `fp audits`](/es/reference/cloud-cli#audits) para conocer los límites del calendario, el comportamiento de las ventanas y todos los comandos de auditoría.
-Elige la cadencia según la velocidad y el costo del riesgo:
+## Los dos límites del calendario
+
+Cada recomendación que aparece a continuación debe ajustarse a estos límites. Los rangos son los del servidor, y `fp` los refleja en el lado del cliente, de modo que un valor fuera de rango falla con código 2 localmente en lugar de consumir un viaje de ida y vuelta con un error 422.
+
+| Campo | Flag | Rango | Valor predeterminado |
+| --- | --- | --- | --- |
+| Intervalo del calendario | `--schedule-interval-secs` | 3.600–604.800 segundos (1 hora a 7 días) | 86.400 (diario) |
+| Ventana de retrospección | `--lookback-window-secs` | 3.600–7.776.000 segundos (1 hora a 90 días) | 604.800 (7 días) |
+
+Siete días es el límite máximo de cadencia. No existe una auditoría mensual en Cloud.
+
+## Elegir una cadencia
+
+Elige según la velocidad y el coste del riesgo:
| Patrón de riesgo | Cadencia inicial |
| --- | --- |
-| Acción de producción de alto impacto | Diaria |
-| Regresión de flujo de trabajo o modelo | Semanal |
-| Revisión de gobernanza o acceso | Mensual |
-| Investigación de lanzamiento único | Ejecutar una vez |
+| Acción de producción de alto impacto | Diaria, o por horas mientras se despliega un cambio arriesgado |
+| Regresión en flujos de trabajo o modelos | Semanal |
+| Revisión de gobernanza o acceso | Semanal — el intervalo más largo disponible |
+
+Alinea la ventana de retrospección con la cadencia para que las ejecuciones no dejen huecos ni examinen repetidamente una población innecesariamente grande.
+
+No existe una auditoría de ejecución única; toda auditoría lleva asociado un intervalo de calendario. Para una investigación de lanzamiento, créala habilitada, deja que se dispare la primera ejecución — la primera ejecución se encola inmediatamente al crearla, independientemente del ancla — y luego pausala con `fp audits edit --disabled --yes`. Vuelve a habilitarla antes de usar **run now**: una auditoría deshabilitada no tiene fila en la cola, y una ejecución manual contra ella se rechaza con un error 409.
+
+## Modo de ventana y ancla
+
+`--window-mode` determina qué ventana explora cada ejecución:
+
+| Modo | Comportamiento |
+| --- | --- |
+| `since_last` | Continúa desde el final de la última ventana completamente analizada, de modo que una ejecución omitida no deja huecos. |
+| `fixed` | Reinspecciona una ventana móvil de `lookback_window_secs` en cada ejecución, independientemente de lo que cubrió la última. |
+
+`--schedule-anchor` fija la fase en lugar de la frecuencia: las ejecuciones se producen en `anchor + N × interval`. Si se omite, el ancla toma por defecto el siguiente 09:00 UTC; un ancla con más de 365 días de antelación es rechazada. Cambiar el intervalo o el ancla surte efecto en el siguiente reprogramado, no en la ejecución ya encolada, y una ejecución fallida no mueve el ancla.
-Alinea la ventana de lookback con la cadencia para que las ejecuciones no dejen vacíos ni examinen repetidamente una población innecesariamente grande. Después de cambiar el objetivo o el contexto de una auditoría, ejecútala manualmente una vez antes de confiar en el próximo resultado programado.
+Después de cambiar el objetivo o el contexto de una auditoría, ejecútala manualmente una vez antes de confiar en el siguiente resultado programado.
- Las auditorías programadas locales se configuran en la máquina y analizan el historial de agentes local. Los horarios de auditorías en la nube operan sobre sesiones en la nube. Trata sus resultados y su propiedad por separado.
+ Esta página trata sobre los calendarios de auditoría de Cloud, que operan sobre sesiones de Cloud. La auditoría local tiene su propio temporizador: `failproofai audit --schedule [days]` acepta entre 1 y 90 días y tiene un valor predeterminado de 7, analiza el historial del agente en esa máquina concreta y es la única superficie con opción mensual. Sus resultados y titularidad son independientes de todo lo que se describe aquí — consulta [Auditar el historial local del agente](/es/audits/local-audit).
\ No newline at end of file
diff --git a/docs/es/audits/findings-and-issues.mdx b/docs/es/audits/findings-and-issues.mdx
index f3591e102..4b18f7b47 100644
--- a/docs/es/audits/findings-and-issues.mdx
+++ b/docs/es/audits/findings-and-issues.mdx
@@ -1,35 +1,44 @@
---
-title: "Hallazgos y problemas"
+title: "Hallazgos e incidencias"
description: "Convierte la evidencia de auditoría en trabajo de remediación con propietario y seguimiento."
icon: "clipboard-check"
---
-Un hallazgo es el enunciado respaldado por evidencia de la auditoría sobre un fallo. Un problema es el flujo de trabajo duradero para responder a él.
+Un hallazgo es la declaración respaldada por evidencia de la auditoría sobre un fallo. Una incidencia es el flujo de trabajo duradero para responder a él.
-## Clasificar y asignar el trabajo
+Los dos objetos utilizan vocabularios distintos y aparecen uno junto al otro, por lo que conviene tenerlos claros desde el principio:
+
+| | Hallazgo | Incidencia |
+| --- | --- | --- |
+| Estados | `open`, `recurring`, `resolved`, `dismissed`, `muted` | `firing`, `acknowledged`, `resolved` |
+| Indicador de filtro | `--status` | `--state` |
+| Identificador | ID de hallazgo | ID de incidencia |
+| Listado por defecto | El conjunto activo: abiertos y recurrentes | Los más recientes primero |
+
+## Triaje y asignación del trabajo
1. Abre **Analyze → Audits**, elige una ejecución completada y selecciona un hallazgo para inspeccionar su análisis, recomendación, sesiones y consultas de evidencia.
- 2. Reconoce, asigna, descarta, silencia, resuelve o reabre el hallazgo después de revisar su evidencia.
- 3. Ve a **Analyze → Issues** y filtra la bandeja duradera por estado, gravedad o responsable.
- 4. Abre el problema para asignarlo, añadir comentarios o suscriptores, y resuélvelo una vez verificada la corrección.
+ 2. Reconoce, asigna, descarta, silencia, resuelve o reabre el hallazgo tras revisar su evidencia.
+ 3. Ve a **Analyze → Issues** y filtra la bandeja de entrada duradera por estado, gravedad o responsable.
+ 4. Abre la incidencia para asignarla, añadir comentarios o suscriptores, y resuélvela una vez verificada la corrección.
- Comienza por el resumen del hallazgo. Confirma que la descripción del fallo, la respuesta recomendada, la gravedad y la clasificación coincidan con las sesiones que esperabas que examinara la auditoría.
+ Comienza con el resumen del hallazgo. Confirma que la descripción del fallo, la respuesta recomendada, la gravedad y la clasificación coinciden con las sesiones que esperabas que examinara la auditoría.

- A continuación, abre una sesión afectada en lugar de decidir únicamente a partir del resumen. El trazado vinculado debe mostrar el evento exacto y la carga útil que respaldan el hallazgo.
+ A continuación, abre una sesión afectada en lugar de decidir únicamente a partir del resumen. El rastro vinculado debe mostrar el evento exacto y el payload que respaldan el hallazgo.
- 
+ 
- Tras verificar la evidencia, usa Issues para asignar un responsable a la respuesta y hacer su seguimiento de forma independiente de futuras ejecuciones de auditoría.
+ Tras verificar la evidencia, utiliza Issues para asignar un responsable a la respuesta y hacer su seguimiento de forma independiente a las futuras ejecuciones de auditoría.
- 
+ 
- Abre el problema para registrar notas de investigación, notificar a los suscriptores y conservar el historial de respuestas. Resuélvelo solo después de que la remediación esté desplegada y verificada.
+ Abre la incidencia para registrar notas de investigación, notificar a los suscriptores y preservar el historial de respuesta. Resuélvela solo después de que la remediación esté desplegada y verificada.
- 
+ 
```bash
@@ -37,23 +46,45 @@ Un hallazgo es el enunciado respaldado por evidencia de la auditoría sobre un f
fp audits finding
fp audits ack --reason "owner assigned"
fp audits assign --to engineer@example.com
+ fp audits mute --reason "expected in staging" --yes
+ fp audits dismiss --reason "false positive" --yes
+ fp audits resolve --yes
+ fp audits reopen
- fp issues list
+ fp issues list --state firing
fp issues show
+ fp issues ack
fp issues assign --assignee engineer@example.com
fp issues comment-add --body "policy is in observe mode"
fp issues resolve --yes
```
- Usa `fp issues subscribe `, `fp issues unsubscribe ` y `fp issues subscribers ` para gestionar los observadores.
+ `mute`, `dismiss` y `resolve` suprimen o cierran un hallazgo, por lo que cada uno solicita confirmación antes de ejecutarse — pasa `--yes` en scripts. `ack`, `reopen` y `assign` son operaciones de seguimiento reversibles que actúan de inmediato. `ack`, `mute` y `dismiss` aceptan `--reason`, y vale la pena usarlo: se conserva como retroalimentación duradera sobre el hallazgo, no se escribe en un registro y se olvida. `resolve`, `reopen` y `assign` no admiten motivo.
+
+ La asignación funciona de forma diferente en cada objeto. `fp audits assign` requiere `--to ` y establece un único propietario; volver a ejecutarlo reasigna. `fp issues assign` acepta `--assignee` de forma repetible y **reemplaza** la lista completa, por lo que omitirlo elimina todos los responsables.
+
+ Usa `fp issues comment-list `, `fp issues count --state firing` y `fp issues subscribe`/`unsubscribe`/`subscribers ` para el resto de la gestión de incidencias.
- Consulta la [referencia CLI de auditorías y problemas en la nube](/es/reference/cloud-cli#audits) para hallazgos de auditoría y [`fp issues`](/es/reference/cloud-cli#issues) para la gestión de problemas.
+ Consulta la [referencia de auditorías e incidencias del CLI en la nube](/es/reference/cloud-cli#audits) para hallazgos de auditoría y [`fp issues`](/es/reference/cloud-cli#issues) para la gestión de incidencias.
## Revisar un hallazgo
-Confirma que contiene:
+Hay dos campos que determinan qué hacer con él antes que cualquier otra cosa.
+
+**`kind`** distingue un `failure` (algo salió mal) de una violación de `policy` (una regla que se infringió) y una `improvement` (el trabajo podría hacerse mejor). Se muestra como una etiqueta en el hallazgo. Un hallazgo de tipo `policy` es el que una política puede cerrar; los otros dos normalmente requieren un cambio en el flujo de trabajo, una alerta o intervención humana.
+
+**`priority`** es una puntuación de 0 a 1, recalculada en cada ejecución, y es el criterio de ordenación de la cola de hallazgos. La página del hallazgo lo desglosa en **por qué ocupa esta posición**, como valor × peso:
+
+| Factor | Peso |
+| --- | --- |
+| Cobertura | 0.30 |
+| Gravedad | 0.25 |
+| Magnitud | 0.25 |
+| Recencia | 0.20 |
+
+A continuación, confirma que el hallazgo contiene:
- Un modo de fallo estable, no solo un título puntual
- Gravedad e impacto operativo
@@ -61,33 +92,45 @@ Confirma que contiene:
- Suficiente contexto para reproducir el comportamiento
- Una respuesta propuesta que coincida con la evidencia
-## Usar un problema para gestionar la respuesta
+Para reproducir un hallazgo, extráelo completo: `fp --json audits finding ` devuelve el registro completo con su `evidence`, `evidence_queries` y `scope` intactos, que es sobre lo que el análisis realmente operó. `--json` es una opción global, así que va antes del comando.
-Crea o vincula un problema cuando el hallazgo requiera asignación, discusión, cambios de estado, comentarios o suscriptores. Los problemas también pueden representar incidentes de alerta y problemas reportados manualmente, razón por la cual se encuentran bajo la respuesta de auditoría y no en la navegación principal.
+## Usar una incidencia para gestionar la respuesta
-Resuelve el problema cuando la remediación esté desplegada y verificada. Resuelve el hallazgo cuando el modo de fallo haya sido abordado para la población de la auditoría. Esos momentos pueden diferir.
+Crea o vincula una incidencia cuando el hallazgo necesite asignación, discusión, cambios de estado, comentarios o suscriptores. El campo `source` de una incidencia registra su origen — `audit`, `alert` o `manual` — razón por la cual el panel de control ofrece a las incidencias su propia vista **Issues** en lugar de anidarlas bajo una auditoría.
-## Convertir un problema en un borrador de política
+La suscripción es en parte automática. Las personas se suscriben cuando reconocen una incidencia, comentan en ella, son asignadas a ella o la abren — `fp issues subscribers` lista solo los suscriptores activos, por lo que no es simplemente la lista de suscripciones manuales. Un comentario envía un correo a todos los suscriptores activos, y comentar solo requiere `issues:read`, de modo que un revisor de solo lectura nunca es un observador silencioso.
+
+Resuelve la incidencia cuando la remediación esté desplegada y verificada. Resuelve el hallazgo cuando el modo de fallo haya sido abordado para la población de la auditoría. Esos momentos pueden diferir.
+
+## Convertir una incidencia en un borrador de política
- 1. Abre el problema y verifica su hallazgo, sesiones citadas, causa raíz y recomendación.
- 2. Selecciona **generate policy** y revisa el resultado de candidatura y la intención de aplicación propuesta. Un resultado **no policy** significa que el comportamiento puede requerir una alerta, un cambio de flujo de trabajo o una respuesta humana en su lugar.
- 3. Selecciona **write this policy**, luego revisa y prueba el código fuente generado en **Admin → policy editor** antes de seleccionar **publish version**. Usa **open the editor anyway** cuando no estés de acuerdo con la verificación de candidatura.
+ 1. Abre la incidencia y verifica su hallazgo, sesiones citadas, causa raíz y recomendación.
+ 2. Selecciona **generate policy** y revisa el resultado de candidatura y la intención de aplicación propuesta. Un resultado **no policy** significa que el comportamiento puede requerir una alerta, un cambio en el flujo de trabajo o una respuesta humana.
+ 3. Selecciona **write this policy**, luego revisa y prueba el código generado en **Admin → policy editor** antes de seleccionar **publish version**. Usa **open the editor anyway** cuando no estés de acuerdo con la verificación de candidatura.
4. Ve a **Admin → enforcement**, despliega la versión en modo **observe** y verifica sus decisiones en **Observe → policy** antes de aplicarla.
- El título del problema, la descripción del hallazgo, la causa raíz, la recomendación y la intención de candidatura ayudan a componer el borrador. Nada se publica ni se despliega automáticamente.
+ El título de la incidencia, la descripción del hallazgo, la causa raíz, la recomendación y la intención de candidatura ayudan a componer el borrador. Nada se publica ni se despliega automáticamente.
- Usa la CLI para inspeccionar la evidencia antes de abrir el problema en el panel de control:
+ Usa el CLI para inspeccionar la evidencia antes de abrir la incidencia en el panel de control:
```bash
fp issues show
- fp audits finding
+ fp --json audits finding
fp events --session-id --full --all
```
- La candidatura de política, la publicación en la nube y el despliegue en flota son flujos de trabajo del panel de control. Usa `failproofai policies --install --custom ` cuando quieras validar primero el código fuente de una política equivalente de forma local.
+ El panel de control es un canal; el CLI es el otro. `fp policies compose ""` genera un borrador de política, `fp policies publish ./policy.mjs` acuña una versión (publicar no despliega nada) y `fp fleet deploy --add :observe` la coloca en una máquina en modo sombra. El sufijo `:observe` es obligatorio — un `--add ` sin él aplica la política de inmediato. Lee lo que habría hecho con `fp guardrails summary --since 24h`, luego promuévelo con `--add :enforce`.
+
+ Para probar primero el código de política equivalente en tu propia máquina, apunta el CLI local al archivo:
+
+ ```bash
+ failproofai policies -i -c ./checkout-policies.js
+ ```
+
+ Un archivo cuyo nombre termine en `policies.js`, `policies.mjs` o `policies.ts`, colocado en `.failproofai/policies/` del proyecto o en `~/`, se carga en cada evento de hook sin ningún indicador adicional.
diff --git a/docs/es/audits/local-audit.mdx b/docs/es/audits/local-audit.mdx
index 80037c89e..7e853b119 100644
--- a/docs/es/audits/local-audit.mdx
+++ b/docs/es/audits/local-audit.mdx
@@ -1,74 +1,56 @@
---
-title: "Auditar el historial local del agente"
-description: "Analiza los historiales de las CLI de agentes compatibles sin conexión y revisa comportamientos arriesgados o ineficientes de forma local."
+title: "Auditar el historial del agente local"
+description: "Analiza el historial del agente en esta máquina en busca de comportamientos riesgosos o ineficientes."
icon: "laptop-minimal-check"
---
-Usa una auditoría local para realizar una revisión inmediata y privada antes de conectar una máquina a Failproof AI Cloud. Analiza los historiales de agentes ya almacenados en tu máquina, reproduce la actividad de herramientas a través de las políticas integradas y abre un panel de resultados local.
+Una auditoría local lee el historial del agente que ya se encuentra en esta máquina y muestra los resultados en `http://localhost:8020/audit`. No requiere cuenta.
-## Ejecutar una auditoría interactiva
+```bash
+failproofai audit
+```
-
-
- La auditoría local se inicia desde la CLI porque debe descubrir los historiales en la máquina actual. Ejecuta `failproofai audit`; tras el análisis, Failproof AI inicia el panel incluido y abre **http://localhost:8020/audit**.
+El análisis cubre el historial de todos los entornos compatibles que encuentre. Reproduce el catálogo de 39 políticas integrado en esta versión; los paquetes instalados y las políticas personalizadas no se incluyen.
- En la vista de auditoría, revisa el número de sesiones, llamadas a herramientas, proyectos y coincidencias de políticas. Comienza por los hallazgos más frecuentes y luego inspecciona el proyecto afectado y el historial del agente antes de habilitar la aplicación de políticas.
+## Leer el resultado
- El panel de auditoría local es independiente de **Analizar → Auditorías** en Failproof AI Cloud. Las auditorías locales permanecen en la máquina y no requieren cuenta ni conexión a la red.
-
-
- ```bash
- npm install -g failproofai
- failproofai audit
- ```
+Comienza por los hallazgos más frecuentes y luego abre la sesión afectada antes de activar la aplicación.
- El comando realiza un análisis completo de todos los historiales compatibles que encuentra. El comando actual no acepta filtros como `--since`, `--cli`, `--project`, `--port` ni `--no-open`.
+Hay tres limitaciones importantes:
- Mantén el proceso en ejecución mientras usas el panel local. Pulsa Ctrl+C cuando hayas terminado.
-
-
+- La auditoría reconstruye eventos de herramientas, no eventos `Stop`, por lo que las políticas `require-*-before-stop` no aparecen.
+- Ocho comprobaciones de tipo "solo auditoría" identifican patrones ineficientes sin una política de coincidencia exacta.
+- `warn-repeated-tool-calls` se omite porque reproducirlo modificaría el estado del lado de la transcripción.
-Los adaptadores de auditoría actuales pueden leer historiales de Claude Code, Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi, Hermes, OpenClaw, Factory, Devin, Antigravity y Goose. Solo se analizan los historiales disponibles localmente.
+Para un hallazgo que se pueda aplicar, usa el comando de política que se muestra en el resultado. Consulta el [soporte de aplicación del entorno](/es/reference/harnesses#enforcement-capability) antes de confiar en él.
-## Programar auditorías locales periódicas
+El resultado en caché se encuentra en `~/.failproofai/audit/dashboard.json` y expira después de siete días.
-
-
- Abre **Configuración** en el panel local, habilita las auditorías programadas, elige el intervalo y establece la dirección de correo electrónico que debe recibir los hallazgos. El panel y la CLI actualizan la misma configuración de la máquina.
-
-
- Habilita una auditoría semanal y envía los hallazgos a la dirección indicada:
+## Programar análisis
- ```bash
- failproofai audit --schedule 7 --email reliability@example.com
- failproofai audit --status
- ```
+```bash
+failproofai audit --schedule 7
+failproofai audit --status
+failproofai audit --no-schedule
+```
- El intervalo acepta entre 1 y 90 días y tiene como valor predeterminado 7 cuando se omite. La primera configuración inicia sesión cuando es necesario; `--email` proporciona la dirección del informe sin solicitar confirmación.
+El intervalo acepta entre 1 y 90 días y tiene un valor predeterminado de 7. La programación por primera vez requiere un inicio de sesión interactivo. El servicio en segundo plano debe estar en ejecución.
- Detén la programación sin eliminar el historial de auditorías local:
+### Qué sale de la máquina
- ```bash
- failproofai audit --no-schedule
- ```
-
-
+Una auditoría interactiva no envía ningún hallazgo. La telemetría anónima de la CLI está habilitada de forma predeterminada; desactívala con `FAILPROOFAI_TELEMETRY_DISABLED=1`.
-El demonio ejecuta análisis programados en segundo plano, actualiza el resultado en caché utilizado por el panel local y envía el informe configurado por correo electrónico. Usa `failproofai audit` cuando quieras ejecutar un análisis interactivo de inmediato.
+Una vez que optas por la programación, cada análisis programado envía el ID de la máquina, la etiqueta, la plataforma y la ventana de análisis. Si se detectan patrones dañinos, también envía un resumen limitado con recuentos, marcas de tiempo y hasta tres ejemplos redactados. Los análisis sin hallazgos no envían ningún dato ni correo electrónico.
-## Pasar de la evidencia local a las operaciones en Cloud
-
-Una auditoría local es una base de referencia rápida. Conecta la máquina a Failproof AI Cloud cuando necesites trazas compartidas, auditorías de población periódicas, hallazgos e incidencias, alertas, implementación de políticas a nivel organizacional o supervisión del estado de la flota.
+
+ Los resultados de la auditoría son evidencia para revisión, no una prueba de que cada acción marcada sea insegura. Revisa la sesión antes de convertir un hallazgo en una aplicación de bloqueo.
+
-
- Define un objetivo recurrente, una población, una ventana de evidencia y canales de respuesta.
+
+ Ejecuta auditorías recurrentes y compartidas entre agentes y máquinas.
-
- Valida localmente, publica de forma deliberada e impleméntala primero en un grupo reducido de máquinas.
+
+ Agrega políticas revisadas después de confirmar un hallazgo.
-
-
-
- El resultado de la auditoría es evidencia para revisión, no una prueba de que cada acción marcada sea insegura. Confirma el contexto antes de convertir un hallazgo en una aplicación de políticas de bloqueo.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/es/audits/overview.mdx b/docs/es/audits/overview.mdx
index 5ffaec7ac..0c4efd463 100644
--- a/docs/es/audits/overview.mdx
+++ b/docs/es/audits/overview.mdx
@@ -1,56 +1,64 @@
---
title: "Auditorías"
-description: "Revisa una población definida de sesiones en busca de fallos que los trazos por sí solos no revelarán."
+description: "Busca en las ejecuciones de agentes fallos repetidos, comportamientos de riesgo y esfuerzo desperdiciado."
icon: "scan-search"
---
-Una auditoría busca en un conjunto seleccionado de sesiones un objetivo de fallo definido. Combina evidencia de trazos, resultados de evaluaciones, coincidencias de políticas y contexto de referencia para generar hallazgos sobre los que puedes actuar.
+Una auditoría revisa múltiples ejecuciones de agentes en función de un objetivo y devuelve hallazgos respaldados por evidencia.
-
+
-Descubre cómo una auditoría pasa de una ejecución programada a fallos respaldados por evidencia que puedes corregir.
+## Local o en la nube
-## Abrir auditorías
+| | Auditoría local | Auditoría en la nube |
+| --- | --- | --- |
+| Comando | `failproofai audit` | `fp audits` |
+| Lee | Historial de agentes en esta máquina | Sesiones en tu organización en la nube |
+| Produce | Resultados locales en `localhost:8020/audit` | Hallazgos, problemas y alertas compartidos |
+| Requiere | Sin cuenta | Conexión a la nube y clave API |
-
-
- Ve a **Analyze → Audits**. La página muestra el estado programado, los hallazgos abiertos, la última ejecución, la próxima ejecución, la cadencia y si la auditoría cuenta con un resumen o páginas de referencia. Selecciona una tarjeta para ver la configuración y el historial de ejecuciones; selecciona **new audit** para crear una.
+Usa una auditoría local para una revisión rápida de una sola máquina. Usa la nube cuando un equipo necesite una auditoría recurrente entre agentes y máquinas.
- 
-
-
- ```bash
- fp audits list
- fp audits list --enabled-only --show-id
- fp audits show
- fp audits findings --status open --limit 20
- ```
-
-
+## Preguntas que puede responder una auditoría
-Usa una auditoría cuando necesites responder una pregunta a nivel de población, como por ejemplo:
-
-- ¿Dónde abandonan los agentes las tareas sin escalar?
-- ¿Qué fallos de herramientas conducen a reintentos ineficaces?
+- ¿Dónde se detienen los agentes sin escalar?
+- ¿Qué fallos de herramientas llevan a reintentos ineficaces?
- ¿Están los agentes accediendo a datos fuera del flujo de trabajo previsto?
- ¿Qué cambió tras una actualización de modelo, prompt o herramienta?
-## Flujo de respuesta de auditoría
+## Abrir auditorías en la nube
+
+Ve a **Analizar → Auditorías**, o usa:
+
+```bash
+fp audits list
+fp audits show
+fp audits findings --status open --limit 20
+```
+
+Los comandos de auditoría utilizan el nombre de la auditoría o el ID completo. Los hallazgos se referencian por su propio ID.
+
+## Del hallazgo a la prevención
```text
Session → Audit → Finding → Issue → Policy
- ↘ Alert for recurrence
+ ↘ Alert
```
-Un hallazgo debe identificar el modo de fallo y apuntar a la evidencia. Un issue gestiona la remediación. Una política previene un patrón de acción conocido; una alerta detecta la recurrencia cuando la prevención no es posible o requiere monitoreo.
+Un hallazgo apunta a evidencia. Un problema gestiona la respuesta. Una política previene un patrón de acción conocido; una alerta vigila la recurrencia.
-
-
- Define el objetivo, la población y el contexto de referencia antes de la primera ejecución.
+No todos los hallazgos deben convertirse en una política. Un hallazgo de tipo `policy` describe una regla ejecutable. Un hallazgo de tipo `failure` o `improvement` puede requerir en cambio un cambio en el flujo de trabajo, el prompt, el modelo o la herramienta.
+
+
+
+ Escanea el historial local sin necesidad de cuenta.
+
+
+ Elige el objetivo, las sesiones y la programación.
-
- Especifica qué debe producir cada agente y qué nunca debe hacer.
+
+ Clasifica la evidencia y asigna una respuesta.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/es/audits/recipes.mdx b/docs/es/audits/recipes.mdx
index e9189945e..f4de12c70 100644
--- a/docs/es/audits/recipes.mdx
+++ b/docs/es/audits/recipes.mdx
@@ -1,54 +1,93 @@
---
title: "Recetas de auditoría"
-description: "Objetivos iniciales para investigaciones comunes de fallos en agentes."
+description: "Objetivos de partida para investigaciones comunes de fallos en agentes."
icon: "book-open-check"
---
-Úsalos como punto de partida y añade tu agente, entorno y flujo de trabajo esperado.
+Úsalas como puntos de partida y añade tu agente, entorno y flujo de trabajo esperado.
-
- Ve a **Analizar → Auditorías → Nueva auditoría**, copia una receta en la descripción o resumen, y añade el entorno relevante, el agente, el periodo de análisis y las URLs de referencia. Crea la auditoría e inspecciona la primera ejecución antes de programarla.
+
+ Ve a **Analizar → Auditorías → Nueva auditoría**. Una línea de receta de esta página es la **descripción** — lo que esperas que detecte esta auditoría. Las reglas de flujo de trabajo que hacen que el objetivo sea evaluable van en **tu brief**, en la tarjeta **lo que sabe**: contexto que el modelo lee antes de examinar un solo evento, con un límite de 8.192 caracteres, añadido a lo que la auditoría ya busca. Un brief nunca reemplaza al objetivo y nunca es evidencia para un hallazgo.
- El formulario de nueva auditoría convierte una receta en una verificación de fallos ejecutable añadiendo alcance, contexto, cadencia y notificaciones.
+ Luego define el alcance en **lo que lee**, porque la mitad de estas recetas generan ruido sin él. Los entornos y agentes acotan la población; **errores a ignorar** lista los tipos de error que esperas y gestionas por diseño, para que dejen de contar como fallos. Solo acepta nombres de tipos de error, y es lo que evita que la receta de bucle de reintentos genere demasiadas alertas.
- 
+ El formulario de nueva auditoría convierte una receta en una verificación de fallos ejecutable añadiendo alcance, contexto, cadencia y notificaciones.
- Tras la creación, confirma que la auditoría aparece en la lista con el estado y la programación esperados antes de depender de las ejecuciones recurrentes.
+ 
- 
+ Tras la creación, confirma que la auditoría aparece en la lista con el estado y la programación esperados antes de confiar en ejecuciones recurrentes.
- Abre la primera ejecución y ajusta la receta si sus hallazgos son más amplios o más acotados que el modo de fallo previsto.
+ Abre la primera ejecución y refina la receta si sus hallazgos son más amplios o más estrechos que el modo de fallo previsto.
Guarda una receta como archivo de texto y adjúntala durante la creación:
```bash
fp audits create retry-loop-review \
+ --description "Find agents that repeat a failing tool call without changing anything" \
--scope '{"environments":["production"]}' \
+ --ignore-error-type RateLimitRetried \
--text-file ./retry-loop-audit.txt \
--schedule-interval-secs 86400
```
+
+ `--text` y `--text-file` son dos formas de enviar el mismo brief; usa una, no ambas. Añade páginas de referencia con `--url`, hasta cinco, solo `https://` públicas. Envía todo junto con la solicitud de creación: una nueva auditoría habilitada vence inmediatamente, por lo que el contexto escrito en una segunda llamada puede perderse la primera ejecución.
+## Evalúa la receta, no solo la redacción
+
+Dos ajustes influyen más en el resultado que la redacción. **Sensibilidad** (`low`, `medium`, `high`, valor predeterminado `medium`) determina con qué facilidad una ejecución marca un patrón; **hallazgos por ejecución** (`--top-k`, valor predeterminado 50) limita cuántos conserva. Aumenta la sensibilidad para una pregunta donde un fallo de detección cuesta más que un falso positivo, y redúcela para un patrón de volumen que de otro modo llenaría la cola. Cada receta a continuación indica un punto de partida — cámbialo después de leer la primera ejecución, no antes.
+
+El abandono de tareas y las escalaciones humanas perdidas son juicios sobre lo que se suponía que debía hacer un agente, no sobre un error que generó. Escribe primero el [contexto del agente](/es/audits/agent-contracts), o el análisis no tendrá un estándar con el que evaluarlo.
+
-
- Encuentra sesiones donde el agente repite la misma llamada a herramienta fallida sin cambiar la entrada, seleccionar una herramienta alternativa ni escalar a un humano.
+
+ Encuentra sesiones donde el agente repite la misma llamada de herramienta fallida sin cambiar la entrada, seleccionar una herramienta alternativa ni escalar a un humano.
+
+ Comienza en `medium` y lista los tipos de error sobre los que reintientas a propósito en **errores a ignorar**.
- Encuentra sesiones donde la herramienta elegida no se corresponde con la tarea indicada, o donde la entrada de la herramienta viola las precondiciones requeridas por el flujo de trabajo.
+ Encuentra sesiones donde la herramienta elegida no coincide con la tarea indicada, o donde la entrada de la herramienta viola las precondiciones requeridas por el flujo de trabajo.
+
+ Comienza en `medium`. Incluye las precondiciones en el brief; sin ellas el análisis no tiene ninguna regla que verificar.
Encuentra sesiones que leen, escriben o transmiten datos sensibles fuera de las rutas y servicios aprobados para este agente.
+
+ Comienza en `high`. Una exposición no detectada cuesta más que un falso positivo que descartas una vez.
- Encuentra sesiones que finalizan sin el resultado solicitado, un error claro o una transferencia explícita a un humano.
+ Encuentra sesiones que terminan sin el resultado solicitado, un error claro o una transferencia explícita a un humano.
+
+ Comienza en `medium` y escribe primero la sección **Completado cuando** del agente — esta receta es un juicio contra ella.
- Encuentra sesiones cuya duración de modelo, herramienta o total supera el presupuesto esperado, e identifica el patrón de eventos responsable.
+ Encuentra sesiones cuyo modelo, herramienta o duración total supera el presupuesto esperado, e identifica el patrón de eventos responsable.
+
+ Comienza en `low` y auméntalo si la primera ejecución arroja pocos resultados. Los presupuestos pertenecen al brief, y cualquier tipo de error que una ruta lenta genere por diseño pertenece a **errores a ignorar**.
-
+
Encuentra sesiones donde la confianza, el fallo repetido o las directrices de política requerían una decisión humana pero el agente continuó de forma autónoma.
+
+ Comienza en `high` e indica la regla de escalación en la sección **No debe** del agente para que el análisis la evalúe.
-
\ No newline at end of file
+
+
+## Obtén una primera respuesta antes de crear nada
+
+Varios de estos patrones ya tienen detectores sin conexión en la auditoría local, que lee los historiales del agente en tu propia máquina y no necesita cuenta:
+
+| Detector | Patrón que contabiliza |
+| --- | --- |
+| `sleep-polling-loop` | Un `sleep` largo, o un bucle de sondeo `while … sleep … done` |
+| `reread-after-edit` | Una lectura de un archivo que el agente acaba de editar o escribir |
+| `find-from-root` | `find` contra `/` u otro directorio de alto nivel |
+| `redundant-cd-cwd` | `cd` al directorio en el que ya se encuentra el shell |
+| `prefer-edit-over-read-cat` | `cat`, `head`, `tail`, `less` o `more` sobre un único archivo fuente |
+| `prefer-edit-over-sed-awk` | Ediciones en sitio mediante `sed -i` o `awk … > file` |
+| `prefer-write-over-heredoc` | Contenido multilínea escrito mediante un heredoc o `echo > file` |
+| `git-commit-no-verify` | `git commit --no-verify`, omitiendo los hooks |
+
+Estos detectores cuentan; no bloquean, y ninguno mide coste ni latencia. Ejecuta `failproofai audit` para ver qué patrones de shell peligrosos e ineficientes generan ya tus agentes antes de pagar por una auditoría en la nube del mismo terreno — consulta [Auditar historial local del agente](/es/audits/local-audit).
\ No newline at end of file
diff --git a/docs/es/audits/run.mdx b/docs/es/audits/run.mdx
index f011a1e38..d1e2048c2 100644
--- a/docs/es/audits/run.mdx
+++ b/docs/es/audits/run.mdx
@@ -9,13 +9,13 @@ Ejecuta una auditoría cuando su objetivo y población sean lo suficientemente e
## Ejecutar e inspeccionar
-
+
1. Ve a **Analyze → Audits**, abre la auditoría y selecciona **run now**. Una respuesta en cola significa que el despachador la iniciará en breve.
- 2. Abre la nueva ejecución para revisar su estado, ventana de tiempo, duración, conteo de hallazgos e informe.
- 3. Selecciona una sesión de evidencia para abrir el rastro exacto.
- 4. Vuelve a la página de la auditoría para editar la configuración, deshabilitar el programa o inspeccionar ejecuciones anteriores.
+ 2. Abre la nueva ejecución para revisar su estado, ventana, duración, recuentos de hallazgos e informe.
+ 3. Selecciona una sesión de evidencia para abrir la traza exacta.
+ 4. Regresa a la página de auditoría para editar la configuración, deshabilitar el calendario o inspeccionar ejecuciones anteriores.
- 
+ 
```bash
@@ -25,43 +25,82 @@ Ejecuta una auditoría cuando su objetivo y población sean lo suficientemente e
fp audits findings --audit checkout-reliability
```
- Consulta la [referencia de `fp audits`](/es/reference/cloud-cli#audits) para ver el historial de ejecuciones, hallazgos y comandos de clasificación.
+ `fp audits run` pone la auditoría en cola; no espera a que finalice. Síguela con `fp audits runs ` y lee los hallazgos una vez que la ejecución haya terminado. `--limit` nunca devuelve más de las 50 ejecuciones más recientes, independientemente de lo que solicites.
+
+ El triaje actúa sobre el id de un hallazgo, no sobre la auditoría:
+
+ ```bash
+ fp audits finding
+ fp audits ack --reason "owner assigned"
+ fp audits assign --to engineer@example.com
+ fp audits mute --reason "expected in staging" --yes
+ fp audits dismiss --reason "false positive" --yes
+ fp audits resolve --yes
+ fp audits reopen
+ ```
+
+ `mute`, `dismiss` y `resolve` solicitan confirmación antes de actuar, por lo que debes pasar `--yes` en scripts. `ack`, `assign` y `reopen` actúan de inmediato.
+
+ Consulta la [referencia de `fp audits`](/es/reference/cloud-cli#audits) para ver el historial de ejecuciones, hallazgos y comandos de triaje.
+**run now** puede ser rechazado. Una ejecución ya en curso y una auditoría deshabilitada responden ambas con `409`, con el motivo en el campo `error` de la respuesta; una auditoría que no existe, o que pertenece a otra organización, responde con `404`.
+
+| Rechazo | Qué significa | Qué hacer |
+| --- | --- | --- |
+| Auditoría desconocida | La auditoría no existe o pertenece a otra organización. | Confirma el nombre con `fp audits list`. |
+| La auditoría está deshabilitada | Una auditoría deshabilitada no tiene fila en la cola, por lo que no hay nada que programar. Una auditoría pausada sigue mostrando el control **run now**. | Reanúdala primero, o usa `fp audits edit --enabled --yes`. |
+| Ya hay una ejecución en curso | Solo se permite una ejecución por auditoría a la vez; la actual debe finalizar antes de que se ponga otra en cola. | Compruébalo con `fp audits runs `. |
+
## Antes de ejecutar
- Confirma que existen sesiones en la ventana de tiempo seleccionada.
- Verifica los filtros de entorno y agente.
-- Comprueba que el contexto de referencia esté actualizado.
+- Comprueba que el contexto de referencia esté actualizado. Cada ejecución vuelve a leer las páginas de la auditoría y recurre a la copia almacenada cuando no puede acceder a alguna, por lo que una página que se haya movido o eliminado seguirá sirviendo texto obsoleto hasta que corrijas la URL.
- Asegúrate de que el objetivo describe un modo de fallo, no una conclusión deseada.
## Revisar la ejecución
-Comienza con el estado de la ejecución, la cobertura de sesiones y si se ejecutó el análisis del modelo. Luego inspecciona la severidad de cada hallazgo, su descripción, las sesiones de evidencia, las consultas de soporte y la ruta de prevención sugerida.
+La página de detalle de la auditoría se abre con cinco bloques: **open findings** (hallazgos pendientes de triaje), **last run**, **next run**, **window** (cuánto tiempo hacia atrás lee cada ejecución) y **sensitivity** (con qué agresividad marca una ejecución un patrón: `low`, `medium`, `high`). El límite máximo de hallazgos por ejecución es una configuración separada, hallazgos por ejecución (`--top-k`, predeterminado 50). Esos cinco bloques responden la pregunta de cobertura más rápido que abrir una ejecución.
+
+Luego inspecciona la severidad, descripción, sesiones de evidencia, consultas de respaldo y la ruta de prevención sugerida de cada hallazgo. Los hallazgos están ordenados por una puntuación de **priority** entre 0 y 1, clasificada por ejecución, y cada hallazgo muestra los cuatro factores ponderados que la determinan:
+
+| Factor de clasificación | Peso |
+| --- | --- |
+| Coverage | 0.30 |
+| Magnitude | 0.25 |
+| Severity | 0.25 |
+| Recency | 0.20 |
-Usa el estado del hallazgo para reconocer, silenciar, descartar, resolver, reabrir o asignar trabajo. Preserva la evidencia incluso cuando el hallazgo sea descartado; explica por qué se tomó la decisión.
+Un hallazgo se encuentra en exactamente uno de cinco estados: `open`, `recurring`, `resolved`, `dismissed` o `muted`. Una consulta de `findings` sin filtro de estado devuelve el conjunto activo — `open` más `recurring`. Un hallazgo que silencias, descartas o resuelves sale de ese conjunto; `ack` y `assign` no modifican el estado, por lo que el hallazgo permanece en la cola — sin prioridad o asignado, pero no eliminado. Especifica un estado explícitamente para ver los que ya salieron.
+
+Usa el estado del hallazgo para reconocerlo, silenciarlo, descartarlo, resolverlo, reabrirlo o asignar trabajo. Conserva la evidencia incluso cuando el hallazgo se descarte; explica por qué se tomó la decisión. [Findings and issues](/es/audits/findings-and-issues) describe qué hace cada verbo en ejecuciones futuras.
## Interpretar una ejecución vacía o retrasada
-| Condición de ejecución | Qué significa | Qué hacer |
+| Condición de la ejecución | Qué significa | Qué hacer |
| --- | --- | --- |
-| El análisis se ejecutó y produjo cero hallazgos | La evidencia seleccionada no fue suficiente para generar un hallazgo con la sensibilidad configurada. | Confirma que el alcance contiene sesiones representativas y trata el resultado como saludable, a menos que el objetivo o el contexto hayan sido demasiado vagos. |
-| El análisis del modelo fue omitido o falló | La ejecución se completa con cero hallazgos, pero no realizó la investigación agéntica. El análisis determinístico de credenciales y PII sigue reportando conteos de coincidencias en las estadísticas de ejecución, pero no crea hallazgos. | Corrige el servicio de análisis o la configuración y vuelve a ejecutar. No interpretes el resultado vacío como evidencia de que la población está saludable. |
-| El análisis del modelo está deshabilitado | La ejecución se completa con cero hallazgos. El análisis determinístico no reemplaza al análisis del modelo ni abre hallazgos. | Habilita el análisis del modelo o deshabilita la auditoría en lugar de depender de una que no puede producir hallazgos. |
-| No hay capacidad de análisis disponible de inmediato | La auditoría permanece en cola y reintenta en lugar de omitir la población. | Espera a que haya capacidad o distribuye los anclajes de auditoría. Los operadores autoalojados deben escalar las réplicas del agente de auditoría y la capacidad del despachador correspondiente. |
-| La capacidad sigue no disponible durante la ventana de reintentos | La ejecución abandona con cero hallazgos y envía una notificación de fallo cuando la entrega por correo electrónico está disponible. | Verifica si la flota de auditorías está saturada o reiniciándose repetidamente. |
+| El análisis se ejecutó y produjo cero hallazgos | La evidencia seleccionada no respaldó ningún hallazgo con la sensibilidad configurada. | Confirma que el alcance contiene sesiones representativas, luego trata el resultado como saludable a menos que el objetivo o el contexto hayan sido demasiado vagos. |
+| El análisis del modelo fue omitido o falló | La ejecución finaliza con cero hallazgos, pero no realizó la investigación agéntica. El análisis determinístico de credenciales y PII sigue reportando recuentos de coincidencias en las estadísticas de la ejecución, pero no crea hallazgos. | Corrige el servicio de análisis o la configuración y vuelve a ejecutar. No interpretes el resultado vacío como evidencia de que la población está saludable. |
+| El análisis del modelo está deshabilitado | La ejecución finaliza con éxito y cero hallazgos. El análisis determinístico no reemplaza al análisis del modelo ni abre hallazgos. | Habilita el análisis del modelo o deshabilita la auditoría en lugar de depender de una que no puede producir hallazgos. |
+| No hay capacidad de análisis disponible de inmediato | La auditoría permanece en cola y reintenta en lugar de omitir la población. | Espera a que haya capacidad o distribuye los anclajes de auditoría. Los operadores autohospedados deben escalar las réplicas del agente de auditoría y la capacidad del despachador correspondiente. |
+| La capacidad sigue no disponible durante la ventana de reintento | La ejecución se abandona con cero hallazgos y envía una notificación de fallo cuando la entrega por correo electrónico está disponible. | Comprueba si la flota de auditorías está saturada o reiniciándose repetidamente. |
+
+Las últimas tres filas describen el comportamiento del servidor de la API Cloud y su despachador. En Cloud gestionado, corresponde a Failproof AI resolverlos; en un despliegue autohospedado, te corresponde a ti.
Cuando el análisis no se ejecuta, las auditorías `since_last` mantienen esa ventana sin analizar abierta para la próxima ejecución exitosa. Los hallazgos existentes no se retiran porque un análisis omitido no es evidencia de que el fallo haya desaparecido.
-## Comprender las notificaciones de fallo
+## Comprender las notificaciones
+
+Una ejecución exitosa notifica solo cuando encuentra algo **nuevo**. El silencio de una auditoría saludable es el caso normal, no una señal de que nada se ejecutó — consulta **last run** en la página de auditoría, o `fp audits runs `, para verificar que sí lo hizo. Una auditoría sin canales seleccionados registra sus hallazgos y no notifica a nadie.
-Una ejecución fallida o un paso de análisis del modelo fallido utiliza los destinatarios de correo electrónico de la auditoría. Si la auditoría no tiene un canal de correo electrónico, Failproof AI recurre a la configuración `alerts.email_default_recipients` de la organización, de modo que una auditoría silenciosamente rota siga teniendo una ruta de escalación.
+Una ejecución fallida o un paso de análisis del modelo fallido utiliza los destinatarios de correo electrónico de la auditoría. Si la auditoría no tiene canal de correo electrónico, Failproof AI recurre a la configuración `alerts.email_default_recipients` de la organización, de modo que una auditoría silenciosamente rota aún tenga una ruta de escalado.
-El correo electrónico debe estar habilitado para la organización y SMTP debe estar configurado. De lo contrario, el fallo se registra pero no se puede entregar ningún correo. Los fallos de ejecución no mueven el anclaje de programación fija de la auditoría.
+El correo electrónico debe estar habilitado para la organización y SMTP debe estar configurado. De lo contrario, el fallo se registra pero no se puede entregar ningún correo. Los fallos de ejecución no desplazan el anclaje de calendario fijo de la auditoría.
-Cada ejecución también almacena el [contexto del agente](/es/audits/agent-contracts) exacto utilizado para cada agente como una instantánea de contrato. Las ediciones posteriores no modifican el estándar de evidencia registrado con una ejecución anterior.
+Cada ejecución también almacena el [contexto del agente](/es/audits/agent-contracts) exacto utilizado para cada agente como una instantánea del contrato. Las ediciones posteriores no cambian el estándar de evidencia registrado en una ejecución anterior.
- No implementes una política de bloqueo directamente a partir de un hallazgo no verificado. Abre los rastros citados y confirma que la regla separa el comportamiento inseguro del trabajo legítimo.
+ No despliegues una política de bloqueo directamente a partir de un hallazgo no verificado. Abre las trazas citadas y confirma que la regla distingue el comportamiento inseguro del trabajo legítimo.
\ No newline at end of file
diff --git a/docs/es/audits/setup.mdx b/docs/es/audits/setup.mdx
index 0ed47e976..96df0f10e 100644
--- a/docs/es/audits/setup.mdx
+++ b/docs/es/audits/setup.mdx
@@ -1,21 +1,24 @@
---
title: "Configurar una auditoría"
-description: "Define el objetivo, la población de sesiones y el contexto de evidencia de una auditoría."
+description: "Define el objetivo de la auditoría, la población de sesiones y el contexto de evidencia."
icon: "sliders-horizontal"
---
-La calidad de una auditoría comienza con su alcance. Una solicitud amplia como "encontrar problemas" produce resultados menos útiles que una pregunta de fallo concreta.
+La calidad de una auditoría comienza por su alcance. Una solicitud amplia como "encuentra problemas" produce resultados menos útiles que una pregunta de fallo concreta.
## Configurar la auditoría
- 1. Ve a **Analyze → Audits → New audit** e introduce el nombre y la descripción.
- 2. Establece la cadencia, la ventana de tiempo, el alcance de agente/entorno, los errores ignorados, la sensibilidad y el número máximo de hallazgos.
- 3. En **agents**, añade o revisa el contexto del agente, luego añade el brief del operador y cualquier URL de referencia HTTPS pública.
- 4. Elige los canales de notificación y selecciona **create audit**. La primera ejecución se pone en cola inmediatamente.
+ 1. Ve a **Analyze → Audits → New audit** e introduce el nombre y la descripción. El nombre es único por organización; la descripción registra qué esperas que detecte esta auditoría.
+ 2. En **when it runs**, establece la cadencia y la ventana. En **what it reads**, acota la población con entornos, agentes y los tipos de error que ignorar — un campo vacío incluye todo. En **how it judges**, configura la sensibilidad y los hallazgos por ejecución.
+ 3. En **what it knows**, escribe el informe del operador y añade las páginas que lee la auditoría. El informe es el contexto que el modelo lee antes de examinar un solo evento: se suma a lo que esta auditoría ya busca, nunca lo reemplaza, y nunca actúa como evidencia para un hallazgo.
+ 4. Abre el panel **agents** para añadir o revisar el contexto de cada agente. Se guarda de forma independiente a la auditoría, y su encabezado muestra cuántos de tus agentes ya tienen uno. Consulta [agent context](/es/audits/agent-contracts).
+ 5. Elige los canales de notificación y selecciona **create audit**. Una auditoría nueva comienza habilitada y su primera ejecución se pone en cola de inmediato.
- 
+ 
+
+ **agents** en la tarjeta **what it reads** es un filtro de alcance — determina qué sesiones recorre cada ejecución. El propósito de un agente vive en el panel de agentes separado.
```bash
@@ -29,16 +32,44 @@ La calidad de una auditoría comienza con su alcance. Una solicitud amplia como
--url https://runbooks.example.com/checkout
```
- La primera ejecución se pone en cola inmediatamente. Incluye el brief y las URLs de referencia durante la creación para que esa ejecución los reciba.
+ Todos los campos excepto el nombre tienen un valor predeterminado en el servidor, por lo que un simple `fp audits create nightly` ya es una auditoría diaria válida. Un nombre que ya esté en uso se rechaza de inmediato, antes de que se cree nada. Las auditorías nuevas comienzan habilitadas a menos que pases `--disabled`, y la primera ejecución de una auditoría habilitada se pone en cola de inmediato.
+
+ Basa una definición en JSON guardado con `--file audit.json` y combínalo con indicadores adicionales. Es el camino reproducible cuando las definiciones de auditoría se revisan o se mantienen en control de versiones.
Consulta la referencia completa de [`fp audits create`](/es/reference/cloud-cli#audits).
+## Rangos y valores predeterminados
+
+La configuración numérica se valida en ambos extremos, por lo que un valor fuera de rango es un error de uso y no una solicitud rechazada.
+
+| Configuración | Indicador CLI | Valores aceptados | Predeterminado |
+| --- | --- | --- | --- |
+| Cadencia | `--schedule-interval-secs` | 3600–604800 (1 hora a 7 días) | 86400 (diario) |
+| Ancla del calendario | `--schedule-anchor` | UTC ISO 8601; se rechaza un ancla a más de 365 días vista | El siguiente 09:00 UTC |
+| Ventana | `--window-mode` | `fixed`, `since_last` | `since_last` |
+| Período de retrospectiva | `--lookback-window-secs` | 3600–7776000 (1 hora a 90 días) | 604800 (7 días) |
+| Sensibilidad | `--sensitivity` | `low`, `medium`, `high` | `medium` |
+| Hallazgos por ejecución | `--top-k` | 1 o más | 50 |
+
+El ancla fija la fase del calendario: las ejecuciones aterrizan en `anchor + N * interval`, de modo que una ejecución lenta o un **run now** manual no puede desplazar la cadencia. La primera ejecución se pone en cola de inmediato al crear la auditoría, independientemente del ancla.
+
+## Informe y páginas de referencia
+
+El formulario muestra ambos límites como contadores, y la CLI impone los mismos dos:
+
+- El informe tiene un límite de 8.192 caracteres (`--text`, o `--text-file` para leerlo desde un archivo — pasa uno u otro, no ambos).
+- Una auditoría referencia como máximo cinco páginas, solo `https://` públicas (`--url`, repetido).
+
+Las URLs de referencia se validan al guardar. Las direcciones privadas, de bucle local y de metadatos en la nube son rechazadas, y una URL rechazada hace fallar toda la creación — no queda ninguna auditoría a medias. Las páginas aceptadas se obtienen en segundo plano, por lo que un sitio lento nunca bloquea el guardado. Cada ejecución las vuelve a leer y recurre a la instantánea almacenada cuando alguna no es accesible; las instantáneas se actualizan automáticamente cada semana. Usa `fp audits context-refresh ` cuando sepas que una página ha cambiado y quieras que se recoja antes de la próxima ejecución.
+
+Envía el informe y las URLs junto con la solicitud de creación, no en una segunda llamada. Una auditoría nueva habilitada vence en el instante en que su fila se confirma, por lo que el contexto escrito después puede ser adelantado por el despachador y perderse en la primera ejecución — la que estás observando. Cámbialo más adelante con `fp audits context-set `, que reemplaza la mitad que indiques y deja la otra intacta.
+
- Empieza con una sesión fallida conocida y varias sesiones normales. Esto le proporciona a la auditoría tanto un ejemplo positivo como un conjunto de comparación.
+ Comienza con una sesión fallida conocida y varias sesiones normales. Esto le da a la auditoría tanto un ejemplo positivo como un conjunto de comparación.
- El contexto de la auditoría se almacena como su propio recurso, por lo que editar una auditoría no elimina accidentalmente el material de referencia.
+ El contexto de auditoría se almacena como su propio recurso. El endpoint de definición rechaza escribirlo en actualizaciones, por lo que una edición ordinaria sin relación a la auditoría nunca puede sobrescribir el informe ni las páginas de referencia.
\ No newline at end of file
diff --git a/docs/es/index.mdx b/docs/es/index.mdx
index 72b24fa4f..7d3615645 100644
--- a/docs/es/index.mdx
+++ b/docs/es/index.mdx
@@ -1,41 +1,58 @@
---
-title: "Haz que tu agente sea infalible"
-description: "Observabilidad y control para cada entorno en que se ejecutan tus agentes — CLIs de programación, gateways de chat, asistentes autoalojados y tus propios agentes instrumentados."
+title: "Haz tu agente infalible"
+description: "Observa lo que hacen tus agentes, detecta fallos y evita que vuelvan a ocurrir."
icon: "shield-check"
---
-Failproof AI ayuda a los equipos a entender qué hicieron los agentes, encontrar dónde fallaron y desplegar salvaguardas antes de que el mismo comportamiento vuelva a ocurrir.
+Failproof AI ayuda a cualquiera que ejecute agentes a entender qué ocurrió, detectar fallos y evitar que se repitan.
-Un **entorno de ejecución** (harness) es lo que contiene y ejecuta tu agente. Failproof AI se integra con 12 de ellos — CLIs de programación como Claude Code y Codex, gateways de chat como Hermes, asistentes autoalojados como OpenClaw — y los mismos eventos, las mismas políticas y el mismo historial de sesiones aplican a todos. Los agentes sin entorno de ejecución se comunican a través del [SDK de Python](/es/reference/custom-agents), que los rastrea y audita; aplicar una política en ese caso requiere un hook en tu propio runtime.
+Funciona con 12 entornos de agentes comunes, incluyendo Claude Code, Codex, Hermes, OpenClaw y Goose. Los agentes creados con LangChain, CrewAI, LlamaIndex, Pydantic AI o tu propio runtime pueden reportar a través del [SDK de Python](/es/reference/custom-agents).
-
- Usa la habilidad para instrumentar tu proyecto, conectarlo y verificar que los registros del agente lleguen correctamente.
+
+ Instala Failproof AI, conecta tus agentes y elige qué aplicar.
-
- Analiza, consulta, crea dashboards y ejecuta auditorías en lenguaje natural sobre los registros de tu agente.
+
+ Consulta sesiones, investiga fallos y crea dashboards en lenguaje natural.
-
-
- Sigue las llamadas al modelo, herramientas, errores, entradas del usuario, latencia y decisiones de política en una sola sesión.
-
-
- Audita un conjunto definido de sesiones, revisa hallazgos respaldados por evidencia y realiza seguimiento de la remediación como incidencias.
+## Empieza en local o conéctate a la nube
+
+
+
+ Abre el dashboard en `localhost:8020` y ejecuta `failproofai audit`. El historial de tu agente permanece en esta máquina.
-
- Convierte un modo de fallo conocido en una política, observa su impacto y despliégala en toda tu flota.
+
+ Ve sesiones de varias máquinas y gestiona políticas para tu equipo.
-> **Sesión → Auditoría → Hallazgo → Incidencia → Política**
-> Rastrea lo que ocurrió, encuentra el fallo, gestiona la respuesta y previene el mismo comportamiento en ejecuciones futuras.
+La configuración no incluye ningún paquete de políticas por defecto. Añade el nuestro después de la instalación:
+
+```bash
+failproofai policies add FailproofAI/policies
+```
+
+Hasta entonces, solo se ejecuta `block-failproofai-commands`. Evita que un agente deshabilite Failproof AI.
-## Empieza aquí
+## Qué puedes hacer
+
+
+
+ Sigue una ejecución del agente a través de llamadas al modelo, herramientas, errores y decisiones de política.
+
+
+ Revisa evidencias de una o varias ejecuciones.
+
+
+ Observa una salvaguarda sobre actividad real y aplícala cuando estés listo.
+
+
-Si estás desplegando tu primer agente instrumentado, comienza con la [guía de inicio rápido](/es/start/quickstart). Si los datos ya están llegando, abre [Sesiones](/es/sessions/overview) e inspecciona una ejecución real antes de configurar auditorías o políticas.
+> **Sesión → Auditoría → Hallazgo → Incidencia → Política**
+> Ve qué ocurrió, encuentra el fallo, asume la respuesta y prevén que se repita.
-
- Completa el flujo de trabajo de extremo a extremo, desde la captura hasta el despliegue seguro de una política.
-
\ No newline at end of file
+
+ La configuración es compatible con Linux y macOS. Consulta los [entornos compatibles](/es/reference/harnesses) para saber qué puede observar o bloquear cada entorno de agente.
+
\ No newline at end of file
diff --git a/docs/es/policies/builtin-catalog.mdx b/docs/es/policies/builtin-catalog.mdx
index 64178e91a..b00bf12a8 100644
--- a/docs/es/policies/builtin-catalog.mdx
+++ b/docs/es/policies/builtin-catalog.mdx
@@ -1,101 +1,138 @@
---
title: "Catálogo de políticas integradas"
-description: "Revisa todas las políticas integradas de Failproof AI, su disparador, estado recomendado y parámetros configurables."
+description: "Revisa todas las políticas integradas de Failproof AI, su disparador, estado por defecto y parámetros configurables."
icon: "list-checks"
---
-El paquete instalado es la fuente de verdad para la disponibilidad de políticas. Ejecuta `failproofai policies` tras cada actualización, ya que las entradas del catálogo y el comportamiento pueden cambiar con la versión del paquete.
+38 de las 39 políticas integradas se entregan como el paquete `FailproofAI/policies`; `block-failproofai-commands` se compila directamente en el paquete porque un pack no puede declarar `alwaysOn`. El paquete instalado es la fuente de verdad sobre lo que esta máquina puede aplicar:
-## Línea base recomendada
+```bash
+failproofai policies show FailproofAI/policies # el catálogo, tal como se publicó
+failproofai policies # lo que está habilitado aquí
+```
+
+`failproofai policies` lista archivos personalizados, archivos de convención, paquetes instalados y asignaciones de Cloud. No tiene una sección de integrados, por lo que no puede responder «qué integrados existen» — `policies show` y el [Policy Hub](https://befailproof.ai/policy-hub/FailproofAI/policies/) son donde se responde esa pregunta.
-La selección recomendada por la configuración guiada activa actualmente los sanitizadores de secretos, las protecciones de entorno, la autoprotección, las defensas contra comandos catastróficos y la seguridad de ramas protegidas:
+## Valores predeterminados y cómo seleccionar
-```text
-sanitize-jwt sanitize-api-keys
-sanitize-connection-strings sanitize-private-key-content
-sanitize-bearer-tokens protect-env-vars
-block-env-files block-secrets-write
-block-failproofai-commands block-sudo
-block-curl-pipe-sh block-rm-rf
-block-push-master block-force-push
+Un simple `failproofai policies add FailproofAI/policies` activa los propios valores predeterminados del paquete — las 10 filas marcadas como **on** a continuación. `block-failproofai-commands` está activo independientemente y no forma parte de esa selección. `--all` toma todo; `--category ` y `--policy ` toman un subconjunto. El slug junto a cada encabezado es el que `--category` reconoce:
+
+```bash
+failproofai policies add FailproofAI/policies --category git,database
```
-`block-failproofai-commands` está **siempre activo**. Se incluye arriba por
-completitud, pero se registra en cada evaluación independientemente de si aparece en
-tu conjunto habilitado, y no puede desactivarse ni pausarse — una protección contra
-que el agente desactive la aplicación que el propio agente puede desactivar no es una protección.
+`block-failproofai-commands` está **siempre activo**. Se registra en cada evaluación independientemente de si aparece en tu selección, y no puede desactivarse ni pausarse — una protección contra que el agente desactive la aplicación que el propio agente puede desactivar no es una protección. Un pack no puede declarar `alwaysOn`, razón por la cual esta política se compila directamente en el paquete en lugar de en el pack.
-La selección recomendada es deliberadamente más acotada que **Todo**. Las políticas de infraestructura y flujo de trabajo pueden interrumpir trabajo válido, y deben habilitarse únicamente en los repositorios y máquinas que las necesiten.
+## Sanitización — `sanitize`
-## Secretos y entorno
+Estas se ejecutan en `PostToolUse`, después de que la herramienta ya ha corrido. **Detectan y rechazan el resultado de la herramienta**; no redactan una subcadena y devuelven el resto.
-| Política | Disparador | Resultado |
-| --- | --- | --- |
-| `sanitize-jwt` | `PostToolUse` | Redacta JWTs de la salida de las herramientas antes de que el modelo los vea. |
-| `sanitize-api-keys` | `PostToolUse` | Redacta claves comunes de OpenAI, Anthropic, GitHub, AWS, Stripe y Google. |
-| `sanitize-connection-strings` | `PostToolUse` | Redacta cadenas de conexión a bases de datos que contengan credenciales. |
-| `sanitize-private-key-content` | `PostToolUse` | Redacta cuerpos de claves privadas PEM. |
-| `sanitize-bearer-tokens` | `PostToolUse` | Redacta tokens de autorización de tipo bearer. |
-| `protect-env-vars` | `PreToolUse` en herramientas de shell | Bloquea comandos que vuelcan variables de entorno. |
-| `block-env-files` | `PreToolUse` | Bloquea lecturas y escrituras de archivos `.env`. |
-| `block-read-outside-cwd` | `PreToolUse` en herramientas de lectura, glob, grep o shell | Restringe las lecturas al directorio de trabajo de la sesión. |
-| `block-secrets-write` | `PreToolUse` en herramientas de escritura | Bloquea escrituras en nombres de archivo comunes de claves secretas y credenciales. |
-
-## Comandos peligrosos e infraestructura
-
-| Política | Disparador | Resultado |
-| --- | --- | --- |
-| `block-sudo` | `PreToolUse`, `PermissionRequest` | Bloquea `sudo` salvo que coincida un patrón de permiso. |
-| `block-curl-pipe-sh` | `PreToolUse` | Bloquea scripts descargados y canalizados directamente a un shell. |
-| `block-rm-rf` | `PreToolUse` | Bloquea patrones de eliminación recursiva catastróficos. |
-| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` | **Siempre activo, no puede desactivarse.** Bloquea toda invocación del CLI de Failproof AI, autopausas y desinstalaciones mediante gestores de paquetes. |
-| `block-kubectl` | `PreToolUse` | Controla comandos de Kubernetes. |
-| `block-terraform` | `PreToolUse` | Controla comandos de Terraform y OpenTofu. |
-| `block-aws-cli` | `PreToolUse` | Controla comandos del CLI de AWS. |
-| `block-gcloud` | `PreToolUse` | Controla comandos del CLI de Google Cloud. |
-| `block-az-cli` | `PreToolUse` | Controla comandos del CLI de Azure. |
-| `block-helm` | `PreToolUse` | Controla comandos de Helm. |
-| `block-gh-pipeline` | `PreToolUse` | Controla operaciones mutantes del CLI de GitHub: workflow, run, merge, release, cache y secret. |
-
-## Seguridad en Git y bases de datos
-
-| Política | Disparador | Resultado |
-| --- | --- | --- |
-| `block-push-master` | `PreToolUse` | Bloquea pushes directos a las ramas protegidas configuradas. |
-| `block-force-push` | `PreToolUse` | Bloquea los force-pushes; `--force-with-lease` sigue siendo permitido por la implementación actual. |
-| `block-work-on-main` | `PreToolUse` | Bloquea commits y merges en ramas protegidas. |
-| `warn-git-amend` | `PreToolUse` | Advierte antes de reescribir un commit con `--amend`. |
-| `warn-git-stash-drop` | `PreToolUse` | Advierte antes de eliminar o limpiar stashes de forma permanente. |
-| `warn-all-files-staged` | `PreToolUse` | Advierte ante el uso amplio de `git add -A`, `git add .` o `git add --all`. |
-| `warn-destructive-sql` | `PreToolUse` | Advierte ante `DROP`, `TRUNCATE` y `DELETE` sin `WHERE` en clientes de base de datos reconocidos. |
-| `warn-schema-alteration` | `PreToolUse` | Advierte ante operaciones reconocidas de `ALTER TABLE` para columnas y renombrados. |
-
-## Paquetes, comportamiento del sistema y bucles de agente
-
-| Política | Disparador | Resultado |
-| --- | --- | --- |
-| `warn-package-publish` | `PreToolUse` | Advierte antes de publicar en registros de paquetes. |
-| `warn-global-package-install` | `PreToolUse` | Advierte antes de instalar paquetes de forma global. |
-| `prefer-package-manager` | `PreToolUse` | Instruye al agente para que use un gestor de paquetes permitido. |
-| `warn-large-file-write` | `PreToolUse` en herramientas de escritura | Advierte cuando se supera el umbral de tamaño de archivo configurado. |
-| `warn-background-process` | `PreToolUse` | Advierte ante patrones de procesos en segundo plano desacoplados o de larga duración. |
-| `warn-repeated-tool-calls` | `PreToolUse` | Advierte tras tres o más llamadas idénticas a una herramienta. |
+Un rechazo aquí solo llega al modelo en los arneses que consumen un veredicto de `PostToolUse` — **codex** y **copilot**, donde la razón reemplaza el resultado completo de la herramienta. En claude, cursor, opencode, pi, hermes, openclaw, factory, devin, antigravity y goose, `PostToolUse` es solo de observación: la detección se registra y la salida sigue llegando al modelo.
+
+| Política | Disparador | Por defecto | Resultado |
+| --- | --- | --- | --- |
+| `sanitize-jwt` | `PostToolUse` | on | Rechaza un resultado de herramienta que contenga un JWT. |
+| `sanitize-api-keys` | `PostToolUse` | on | Rechaza un resultado de herramienta que contenga una clave de OpenAI, Anthropic, GitHub, AWS, Stripe o Google. |
+| `sanitize-connection-strings` | `PostToolUse` | on | Rechaza un resultado de herramienta que contenga una cadena de conexión de base de datos con credenciales embebidas. |
+| `sanitize-private-key-content` | `PostToolUse` | on | Rechaza un resultado de herramienta que contenga contenido de clave privada PEM. |
+| `sanitize-bearer-tokens` | `PostToolUse` | on | Rechaza un resultado de herramienta que contenga un token `Authorization: Bearer`. |
+
+## Entorno — `environment`
+
+| Política | Disparador | Por defecto | Resultado |
+| --- | --- | --- | --- |
+| `protect-env-vars` | `PreToolUse` en `Bash` | on | Bloquea comandos que leen variables de entorno. |
+| `block-env-files` | `PreToolUse` | on | Bloquea lecturas y escrituras de archivos `.env`. |
+| `block-read-outside-cwd` | `PreToolUse` en `Read`, `Glob`, `Grep`, `Bash` | off | Mantiene las lecturas de archivos dentro del directorio de trabajo de la sesión. |
+
+## Comandos peligrosos — `dangerous-commands`
+
+| Política | Disparador | Por defecto | Resultado |
+| --- | --- | --- | --- |
+| `block-sudo` | `PreToolUse`, `PermissionRequest` en `Bash` | on | Bloquea `sudo` a menos que coincida un patrón de allow. |
+| `block-curl-pipe-sh` | `PreToolUse` en `Bash` | on | Bloquea scripts descargados y redirigidos directamente a un shell. |
+| `block-failproofai-commands` | `PreToolUse`, `PermissionRequest` en `Bash`, `Write`, `Edit`, `NotebookEdit` | **siempre activo** | Bloquea toda invocación de la CLI de Failproof AI, auto-pausa y desinstalación. |
+| `block-rm-rf` | `PreToolUse` en `Bash` | off | Bloquea patrones de eliminación recursiva catastrófica. |
+| `block-secrets-write` | `PreToolUse` en `Write` | off | Bloquea escrituras en nombres de archivo comunes de claves secretas y credenciales. |
+
+## Comandos de infraestructura — `infra-commands`
+
+Los siete están desactivados por defecto: controlan herramientas que el trabajo legítimo usa constantemente, por lo que corresponden a los repositorios y máquinas que las necesitan.
+
+| Política | Disparador | Por defecto | Resultado |
+| --- | --- | --- | --- |
+| `block-kubectl` | `PreToolUse` en `Bash` | off | Controla las mutaciones de clústeres de `kubectl`. |
+| `block-terraform` | `PreToolUse` en `Bash` | off | Controla los comandos de `terraform` y `tofu`. |
+| `block-aws-cli` | `PreToolUse` en `Bash` | off | Controla los comandos de la CLI `aws`. |
+| `block-gcloud` | `PreToolUse` en `Bash` | off | Controla los comandos de `gcloud`. |
+| `block-az-cli` | `PreToolUse` en `Bash` | off | Controla los comandos de `az`. |
+| `block-helm` | `PreToolUse` en `Bash` | off | Controla los comandos de `helm`. |
+| `block-gh-pipeline` | `PreToolUse` en `Bash` | off | Controla las operaciones mutantes de `gh`: workflow run, run rerun y cancel, pr merge, release create y delete, cache delete, secret set y delete. Los subcomandos de solo lectura como `gh pr view` no coinciden. |
-## Flujo de trabajo al final de la tarea
+## Git — `git`
-Estas políticas requieren un harness que emita un evento `Stop` compatible.
+| Política | Disparador | Por defecto | Resultado |
+| --- | --- | --- | --- |
+| `block-push-master` | `PreToolUse` en `Bash` | on | Bloquea los pushes directos a las ramas protegidas configuradas. |
+| `block-force-push` | `PreToolUse` en `Bash` | off | Bloquea los force-pushes. `--force-with-lease` y `--force-if-includes` siguen permitidos. |
+| `block-work-on-main` | `PreToolUse` en `Bash` | off | Bloquea commits y merges en ramas protegidas. |
+| `warn-git-amend` | `PreToolUse` en `Bash` | off | Advierte antes de reescribir un commit con `--amend`. |
+| `warn-git-stash-drop` | `PreToolUse` en `Bash` | off | Advierte antes de eliminar o limpiar stashes de forma permanente. |
+| `warn-all-files-staged` | `PreToolUse` en `Bash` | off | Advierte ante un `git add -A`, `git add .` o `git add --all` amplio. |
-| Política | Resultado |
+## Base de datos — `database`
+
+| Política | Disparador | Por defecto | Resultado |
+| --- | --- | --- | --- |
+| `warn-destructive-sql` | `PreToolUse` en `Bash` | off | Advierte ante `DROP`, `TRUNCATE` y `DELETE` sin `WHERE` a través de clientes de base de datos reconocidos. |
+| `warn-schema-alteration` | `PreToolUse` en `Bash` | off | Advierte ante operaciones de columna y renombrado de `ALTER TABLE` reconocidas. |
+
+## Paquetes y sistema — `packages-system`
+
+| Política | Disparador | Por defecto | Resultado |
+| --- | --- | --- | --- |
+| `warn-package-publish` | `PreToolUse` en `Bash` | off | Advierte antes de publicar en npm, PyPI, crates.io, RubyGems y registros similares. |
+| `warn-global-package-install` | `PreToolUse` en `Bash` | off | Advierte antes de instalar paquetes de forma global. |
+| `prefer-package-manager` | `PreToolUse` en `Bash` | off | Bloquea un gestor de paquetes no preferido e instruye al agente a usar uno permitido. |
+| `warn-large-file-write` | `PreToolUse` en `Write` | off | Advierte por encima del umbral de tamaño de archivo configurado. |
+| `warn-background-process` | `PreToolUse` en `Bash` | off | Advierte ante patrones de procesos en segundo plano o desvinculados. |
+
+## Comportamiento de IA — `ai-behavior`
+
+| Política | Disparador | Por defecto | Resultado |
+| --- | --- | --- | --- |
+| `warn-repeated-tool-calls` | `PreToolUse` | off | Advierte cuando la misma herramienta se llama tres o más veces con parámetros idénticos. |
+
+## Flujo de trabajo — `workflow`
+
+Las cinco se ejecutan en `Stop` y están desactivadas por defecto.
+
+| Política | Por defecto | Resultado |
+| --- | --- | --- |
+| `require-commit-before-stop` | off | Rechaza la finalización mientras haya trabajo rastreado sin confirmar. |
+| `require-push-before-stop` | off | Rechaza la finalización mientras haya commits que solo existen en local. |
+| `require-pr-before-stop` | off | Requiere un pull request para la rama actual. |
+| `require-no-conflicts-before-stop` | off | Requiere un merge limpio contra la rama base configurada. |
+| `require-ci-green-before-stop` | off | Requiere que las verificaciones de CI en el commit HEAD actual pasen, ignorando ejecuciones obsoletas en commits anteriores. |
+
+Estas necesitan un arnés cuyo veredicto de `Stop` sea consumido. No todos los arneses lo hacen:
+
+| Arnés | `Stop` |
| --- | --- |
-| `require-commit-before-stop` | Rechaza la finalización mientras haya trabajo rastreado sin confirmar. |
-| `require-push-before-stop` | Rechaza la finalización mientras haya commits solo en local. |
-| `require-pr-before-stop` | Requiere un pull request para la rama actual. |
-| `require-no-conflicts-before-stop` | Requiere un merge limpio contra la rama base configurada. |
-| `require-ci-green-before-stop` | Requiere que las comprobaciones de CI del HEAD actual finalicen con éxito. |
+| claude, codex, copilot, cursor, openclaw, factory, devin, antigravity | Verificado que bloquea: el rechazo fuerza otro turno |
+| pi | Observación. La razón se lleva al siguiente turno como instrucción, no como compuerta |
+| goose, hermes | No se instala ningún hook de `Stop`, por lo que estas cinco nunca se activan |
+| opencode | No verificado. `Stop` no está entre los eventos de los que opencode consume un veredicto |
+
+Las VMs del Cursor Cloud Agent no ejecutan hooks de stop en absoluto, por lo que una sesión de Cursor allí no tiene cobertura aunque el Cursor local sí la tenga.
+
+
+ Las políticas `warn-*` devuelven `instruct`, no `deny`. (`prefer-package-manager` es la excepción entre los nombres que no empiezan por `block-*`: devuelve `deny`, por lo que bloquea en todos los arneses que consumen un veredicto de `PreToolUse` — que son los doce.) En Hermes y Goose, en Pi, OpenClaw y Factory fuera del canal `Stop`, y en Antigravity fuera de `Stop` y `UserPromptSubmit`, `instruct` se degrada a allow más una nota en stderr — el agente no es notificado. El `UserPromptSubmit` de Antigravity es un segundo canal real: la instrucción se inyecta como mensaje transitorio antes de que el modelo se ejecute.
+
## Referencia de parámetros
-Configura los parámetros en el objeto `policyParams` del scope seleccionado. Los tipos son validados por cada política.
+Configura los parámetros bajo el objeto `policyParams` del alcance seleccionado. Los tipos son validados por cada política.
| Política | Parámetro | Tipo y valor por defecto |
| --- | --- | --- |
@@ -115,7 +152,6 @@ Configura los parámetros en el objeto `policyParams` del scope seleccionado. Lo
```json
{
- "enabledPolicies": ["block-sudo", "block-push-master"],
"policyParams": {
"block-sudo": {
"allowPatterns": ["sudo systemctl status"]
@@ -127,6 +163,10 @@ Configura los parámetros en el objeto `policyParams` del scope seleccionado. Lo
}
```
+
+ Un nombre de política simple como clave de `policyParams` solo se respeta para `FailproofAI/policies`. Para cualquier otro paquete, la clave es `pack///` — un paquete externo que declare el mismo nombre de política recibirá los valores predeterminados del esquema, no tus parámetros.
+
+
- Un patrón de permiso amplía lo que un agente puede hacer. Prueba la tokenización exacta y las variantes de comandos en el harness de destino antes de desplegarlo en una flota.
+ Un patrón de allow amplía lo que un agente puede hacer. Prueba la tokenización exacta y las variantes de comando en el arnés de destino antes de desplegarlo en una flota.
\ No newline at end of file
diff --git a/docs/es/policies/builtin.mdx b/docs/es/policies/builtin.mdx
index 2b7f4eeb2..7c126bbca 100644
--- a/docs/es/policies/builtin.mdx
+++ b/docs/es/policies/builtin.mdx
@@ -1,57 +1,100 @@
---
title: "Políticas integradas"
-description: "Activa medidas de seguridad mantenidas para modos de fallo comunes en agentes."
+description: "Utiliza las barreras de protección mantenidas para los modos de fallo más comunes de los agentes, y activa las que necesites."
icon: "library"
---
-Las políticas integradas cubren el manejo de secretos, archivos de entorno, comandos shell destructivos, ramas protegidas, herramientas de nube e infraestructura, publicación de paquetes, llamadas repetidas y verificaciones de flujo de trabajo al final de la tarea.
+Las políticas integradas son 39 reglas mantenidas que cubren nueve categorías de fallos de agentes. Todas menos una se **distribuyen como un paquete**, `FailproofAI/policies`, de la misma manera que cualquier otro paquete de políticas. El paquete no aplica ningún conjunto de reglas propio, por lo que una instalación nueva no impone nada hasta que lo añadas:
-## Activar y verificar una política integrada
+```bash
+failproofai policies add FailproofAI/policies
+```
-
-
- 1. Instala la política en una máquina conectada con la CLI local.
- 2. Ejecuta una acción de prueba segura en el agente instrumentado.
- 3. Ve a **Observe → policy** y filtra por nombre de política, entorno de máquina o decisión.
- 4. Abre la sesión vinculada para confirmar la entrada de herramienta coincidente y el motivo devuelto.
+Esto activa los valores predeterminados del paquete: 10 de las 38 políticas que incluye. La número 39 es `block-failproofai-commands`, que está activa de forma permanente: se compila dentro del paquete, se registra en cada evaluación y no puede desactivarse ni pausarse. Un paquete no puede declarar `alwaysOn`, razón por la cual esa protección no sigue el canal de paquetes.
-
+## Qué cubren las nueve categorías
+
+| Categoría | Slug `--category` | Políticas |
+| --- | --- | --- |
+| Sanitize | `sanitize` | 5 |
+| Environment | `environment` | 3 |
+| Dangerous Commands | `dangerous-commands` | 5 |
+| Infra Commands | `infra-commands` | 7 |
+| Git | `git` | 6 |
+| Database | `database` | 2 |
+| Packages & System | `packages-system` | 5 |
+| AI Behavior | `ai-behavior` | 1 |
+| Workflow | `workflow` | 5 |
+
+Estos son los recuentos del catálogo compilado, que suman 39. El paquete incluye 38 de ellas, ya que `block-failproofai-commands` es `alwaysOn` y nunca sigue el canal de paquetes; por eso `--category dangerous-commands` selecciona las otras cuatro.
+
+Toma un subconjunto en lugar de los valores predeterminados:
+
+```bash
+failproofai policies add FailproofAI/policies --category git,database
+failproofai policies add FailproofAI/policies --policy block-rm-rf
+failproofai policies add FailproofAI/policies --all
+```
+
+## Consulta el catálogo antes de adoptarlo
+
+
```bash
+ failproofai policies show FailproofAI/policies
failproofai policies
- failproofai policy add block-rm-rf --cli claude --scope project
- failproofai config --status
```
- Elimínala con `failproofai policy remove block-rm-rf --cli claude --scope project`.
+ `policies show` lee el manifiesto publicado — todas las políticas, agrupadas por categoría, marcadas como predeterminadas u opcionales — sin descargar ni importar el código del paquete. `failproofai policies` lista lo que está habilitado en esta máquina: archivos personalizados, archivos de convención, paquetes instalados y asignaciones de Cloud. No tiene una sección de integradas, así que responde a "qué está activo aquí", nunca a "qué existe".
+
+
+ Explora el mismo catálogo en el navegador, sin la CLI, en [befailproof.ai/policy-hub](https://befailproof.ai/policy-hub/). Cada paquete tiene una página en `/policy-hub///` y cada política una página en `/policy-hub////`.
+
+
+ 1. Instala la política en una máquina conectada mediante la CLI local.
+ 2. Ejecuta una acción de prueba segura en el agente instrumentado.
+ 3. Ve a **Observe → policy** y filtra por nombre de política, entorno de máquina o decisión.
+ 4. Abre la sesión vinculada para confirmar la entrada de herramienta coincidente y el motivo devuelto.
-Lista las políticas disponibles en tu versión instalada:
+## Activar o desactivar una política
```bash
-failproofai policies
+failproofai policies add block-rm-rf --cli claude --scope project
+failproofai policies remove block-rm-rf --cli claude --scope project
```
-Activa una política para un proyecto:
-
-```bash
-failproofai policy add block-rm-rf --scope project
-```
-
-Activa varias políticas para los arneses seleccionados:
+`policies add` y `policies remove` aceptan exactamente **un** nombre de política. Ejecútalos sin ningún nombre y obtendrás un selector con las políticas ya activas marcadas. Para varios nombres a la vez, usa la forma de instalación:
```bash
failproofai policies --install block-sudo block-force-push \
--cli claude codex --scope project
```
-Algunas políticas aceptan parámetros o están marcadas como beta. Revisa la descripción, el alcance de coincidencia y el comportamiento predeterminado antes de desplegarlas. Una política que protege un flujo de trabajo puede bloquear operaciones válidas en otro.
+
+ En una máquina sin ningún paquete instalado, `failproofai policies add ` descarga `FailproofAI/policies` desde su release de GitHub para resolver el nombre — por lo que ese primer comando requiere conexión a la red.
+
+
+## No todas las políticas se aplican en todos los harnesses
+
+Una política solo modifica el comportamiento donde el harness consume el veredicto para su evento. Hay dos casos que conviene verificar antes de confiar en una política integrada:
+
+| Evento | Dónde se verifica que un deny cambia el comportamiento |
+| --- | --- |
+| `PreToolUse` | Los 12 harnesses |
+| `Stop` | claude, codex, copilot, cursor, openclaw, factory, devin, antigravity. No se instala ningún hook `Stop` en goose ni en hermes; pi lleva el motivo al siguiente turno en lugar de usarlo, y opencode no está verificado |
+
+Por tanto, las cinco políticas `require-*-before-stop` de la categoría Workflow pueden estar habilitadas en una máquina y no dispararse nunca, dependiendo del agente que se ejecute en ella. Las VMs de Cursor Cloud Agent no ejecutan hooks de stop en absoluto.
+
+Las políticas `warn-*` y `prefer-*` devuelven `instruct` en lugar de `deny`. En Hermes y Goose, y fuera del canal `Stop` en Pi, OpenClaw, Factory y Antigravity, `instruct` se degrada a allow más una nota en stderr: el operador la ve en los logs, el agente no.
+
+Algunas políticas aceptan parámetros. Revisa la descripción, el ámbito de aplicación y el valor predeterminado antes del despliegue — una política que protege un flujo de trabajo puede bloquear operaciones válidas en otro.
-
- Revisa las 40 políticas actuales, sus disparadores, la línea base recomendada y sus parámetros.
+
+ Las 39 políticas integradas, por categoría, con sus disparadores, valores predeterminados y parámetros.
- Prefiere el alcance de proyecto para expectativas específicas del repositorio y el alcance de usuario para requisitos de seguridad a nivel de máquina.
+ `failproofai config` configura todos los agentes compatibles en el ámbito de usuario y no selecciona ninguna política — no tiene el flag `--scope`. Pasa `--scope project` a `failproofai policies add` o a `failproofai policies --install` solo cuando la expectativa pertenezca genuinamente a un único repositorio.
\ No newline at end of file
diff --git a/docs/es/policies/custom.mdx b/docs/es/policies/custom.mdx
index f86eb41e4..a23d93a32 100644
--- a/docs/es/policies/custom.mdx
+++ b/docs/es/policies/custom.mdx
@@ -1,72 +1,51 @@
---
title: "Políticas personalizadas"
-description: "Escribe una política para un modo de fallo específico de tu flujo de trabajo de agente."
-icon: "shield-plus"
+description: "Escribe una regla para comportamientos específicos de tu agente o flujo de trabajo."
+icon: "code-2"
---
-Crea un archivo con extensión `policies.js`, `policies.mjs` o `policies.ts` dentro de `.failproofai/policies/`. Los archivos de convención se cargan automáticamente en el ámbito del proyecto y del usuario.
+Consulta el [catálogo de reglas integradas](/es/policies/builtin-catalog) antes de escribir una política. Una regla revisada suele ser más segura que una nueva.
-## Prueba la política antes de publicarla en la nube
+## Empieza desde una política funcional
-
-
- 1. Instala la política personalizada en una máquina de prueba y activa tanto una acción que coincida como una legítima que no coincida.
- 2. Ve a **Observar → política** y compara las dos decisiones.
- 3. Abre cada sesión vinculada y verifica que el payload del evento contenga suficiente evidencia para la regla.
- 4. Cuando el comportamiento sea correcto, mueve el código revisado a **Admin → editor de políticas** y publica una versión.
-
-
-
- ```bash
- failproofai policies --install --custom ./security.policies.ts \
- --cli claude --scope project
- failproofai policies
- ```
+```bash
+failproofai publish --init guards.mjs
+failproofai policies -i -c ./guards.mjs
+```
- Los archivos de convención dentro de `.failproofai/policies/` se cargan sin `--custom`. Mantén un comando de instalación explícito en CI cuando la validación deba fallar con un módulo roto.
-
-
+El ejemplo de inicio bloquea `git push --force`. Edítalo, pide a tu agente que intente la acción bloqueada e inspecciona **Policies → Activity**.
-```ts
+```js
import { customPolicies, allow, deny } from "failproofai";
customPolicies.add({
- name: "protect-production-paths",
- description: "Block writes to production configuration",
- match: { events: ["PreToolUse"] },
- fn: async (ctx) => {
- if (ctx.toolName !== "Write" && ctx.toolName !== "Edit") return allow();
- const path = String(ctx.toolInput?.file_path ?? "").replaceAll("\\", "/");
- if (path.split("/").includes("production")) {
- return deny("Writes to production configuration require approval.");
- }
- return allow();
- },
+ name: "protect-production",
+ description: "Production changes need a human",
+ match: { events: ["PreToolUse"], toolNames: ["Bash"] },
+ fn: async (ctx) =>
+ String(ctx.toolInput?.command ?? "").includes("production")
+ ? deny("Ask a human before changing production.")
+ : allow(),
});
```
-Esto coincide con `production/config.yml`, `/srv/production/config.yml`, `/srv/production` y `C:\\production\\config.yml` tanto para `Write` como para `Edit`. No coincide con nombres como `production-backup` porque `production` debe ser un segmento de ruta completo.
+Una política devuelve `allow()`, `deny(message)` o `instruct(message)`. Usa `deny` cuando la acción deba detenerse; no todos los entornos pueden enviar una instrucción de vuelta al agente.
-Valida e instala un archivo explícito:
+## Carga automática
-```bash
-failproofai policies --install --custom ./security.policies.ts
-```
+Coloca archivos con nombres `*policies.js`, `*policies.mjs` o `*policies.ts` en:
+
+- `.failproofai/policies/` para un proyecto concreto.
+- `~/.failproofai/policies/` para tu usuario.
-El contexto de la política incluye el tipo de evento, el payload normalizado, el nombre e input de la herramienta, los metadatos de sesión, los parámetros y el CLI de origen cuando está disponible.
+## Prueba los caminos de fallo
-## Prueba las rutas de fallo
+Prueba tanto la acción insegura como el trabajo legítimo que pueda parecerse. Confirma que la decisión proviene de tu política y no de otra regla.
-Ejecuta la validación después de modificar el archivo de entrada o cualquier módulo local que importe:
+Elimina los archivos de prueba explícitos con:
```bash
-failproofai policies --install --custom ./security.policies.ts --scope project
+failproofai policies -u -c
```
-La ruta CLI con --strict falla ante archivos faltantes, errores de sintaxis, importaciones no resueltas, excepciones en el nivel superior y tiempos de espera de carga del módulo. En el momento de aplicación de la política, un archivo personalizado roto se registra y se omite para que las políticas integradas puedan continuar. Trata cualquier advertencia de carga como una pérdida de la aplicación esperada y genera una alerta en los registros de producción.
-
-Usa nombres únicos globalmente entre políticas explícitas, de convención y gestionadas en la nube. Mantén las funciones de política deterministas, limita las llamadas externas con tiempos de espera cortos, y devuelve un `allow`, `instruct` o `deny` intencional en cada ruta de ejecución.
-
-
- Una política personalizada es código de aplicación. Prueba campos faltantes, nombres de herramienta alternativos y entradas con formato incorrecto, no solo la coincidencia esperada.
-
\ No newline at end of file
+Cuando la política esté lista, [publica un pack](/es/policies/publish-a-pack) o [despliégala a través de Cloud](/es/policies/deploy).
\ No newline at end of file
diff --git a/docs/es/policies/deploy.mdx b/docs/es/policies/deploy.mdx
index d3df4df49..fa82aa109 100644
--- a/docs/es/policies/deploy.mdx
+++ b/docs/es/policies/deploy.mdx
@@ -1,51 +1,54 @@
---
title: "Desplegar políticas"
-description: "Distribuye una versión de política revisada a las máquinas previstas."
+description: "Observa una política sobre actividad real del agente, luego aplícala o revierte los cambios."
icon: "cloud-upload"
---
-Un despliegue conecta una o más versiones de política a un conjunto de máquinas enroladas.
+Despliega una política revisada en una máquina a la vez. Comienza en modo observación.
-## Aplicar un despliegue
+## Despliegue desde la CLI
-
-
- 1. Ve a **Admin → enforcement**, busca la máquina y expande su fila.
- 2. Selecciona **edit**, añade la versión de política revisada y elige el efecto **observe** o de aplicación forzada.
- 3. Aplica el cambio, luego espera al próximo check-in de la máquina y confirma su estado de despliegue y cobertura.
- 4. Ve a **Observe → policy** para inspeccionar las decisiones en tiempo real.
+```bash
+fp policies test ./rule.mjs --tool Bash --command "git push --force" --expect deny
+fp policies publish no-force-push ./rule.mjs
+fp fleet deploy --add no-force-push:observe
+fp guardrails summary --since 24h --machine
+fp fleet deploy --add no-force-push:enforce
+```
- 
-
-
- Despliega desde la CLI con `fp fleet`. Revisa el conjunto resultante antes de aplicarlo — `deploy` imprime el plan completo y solicita confirmación **únicamente en una terminal interactiva sin `--json`**. Con `--json`, con `--yes`, o con stdin redirigido (un paso de CI, un script, un agente que ejecuta comandos) se aplica de inmediato sin plan ni confirmación, por lo que ejecuta `fp fleet show ` primero si deseas revisarlo:
+El modo observación evalúa la política real y registra las decisiones que no son allow, pero no bloquea al agente.
- ```bash
- fp fleet list
- fp fleet show
- fp fleet deploy --add no-force-push
- ```
+
+ Un `--add no-force-push` sin modificador aplica la política de inmediato. Añade `:observe` para un despliegue en modo sombra.
+
- `fp fleet diff ` muestra la intención frente a la entrega (una máquina aparece como `behind` hasta su próximo sondeo), `fp fleet history ` lista las generaciones, y `fp fleet rollback ` restaura una de ellas — rechaza la operación si esa generación hace referencia a una política que ha sido deshabilitada o eliminada.
+Si la aplicación de la política causa problemas:
- Comprueba la propia máquina con `failproofai config --status`, y usa `fp sessions --env production --since 24h` y `fp events --event-type hook_completed` tras el despliegue para verificar que la actividad llega a Cloud.
-
-
+```bash
+fp fleet history
+fp fleet rollback
+```
-
-
- Despliega una versión revisada, no un borrador mutable, comenzando con una máquina fuera de producción o un grupo pequeño cuyas sesiones puedas inspeccionar.
-
-
- Revisa coincidencias, motivos, herramientas afectadas y falsos positivos sin bloquear el trabajo.
-
-
- Promueve tras confirmar que las coincidencias observadas distinguen acciones inseguras de las válidas; luego verifica que cada máquina prevista ha obtenido el despliegue y está reportando decisiones.
-
-
+## Despliegue desde el panel de control
-Las máquinas necesitan la capacidad `policies:pull`. El reporte de eventos está controlado por separado mediante `events:add`; verifica ambos cuando esperes análisis y aplicación forzada en Cloud.
+1. Ve a **Admin → enforcement**.
+2. Abre la máquina de destino.
+3. Añade la versión de la política con efecto **observe**.
+4. Aplica el despliegue.
+5. Revisa los resultados en **Observe → policy**.
+6. Promueve la misma versión a **enforce** cuando las coincidencias sean correctas.
-
- La gestión de enforcement es un flujo de trabajo administrativo de Cloud. No trates las rutas de enforcement exclusivas de root como endpoints de API `/v1` ordinarios para clientes.
-
\ No newline at end of file
+
+
+## Reemplazar o preparar un conjunto
+
+- `--remove ` elimina una política.
+- `--set ...` reemplaza el conjunto completo de políticas.
+- `--create` prepara un despliegue antes de que una máquina se registre por primera vez.
+- `fp fleet diff ` compara el estado previsto y el estado aplicado.
+
+
+ Sin Cloud, publica un paquete con `failproofai publish --effect observe` e inspecciona las decisiones en el panel de control local.
+
+
+Las máquinas necesitan `policies:pull` para recibir despliegues y `events:add` para reportar decisiones.
\ No newline at end of file
diff --git a/docs/es/policies/failure-behavior.mdx b/docs/es/policies/failure-behavior.mdx
index 50344625c..c42709317 100644
--- a/docs/es/policies/failure-behavior.mdx
+++ b/docs/es/policies/failure-behavior.mdx
@@ -1,67 +1,48 @@
---
-title: "Comportamiento ante fallos"
-description: "Entiende qué sucede cuando la evaluación de políticas o el daemon local no están disponibles."
+title: "Comportamiento ante fallos de política"
+description: "Comprende por qué Failproof AI deniega cuando la evaluación no puede ejecutarse."
icon: "shield-alert"
---
-Failproof AI está diseñado para que un fallo de aplicación sea visible, en lugar de permitir silenciosamente trabajo riesgoso.
+Tras la configuración, el servicio local `failproofaid` es el único evaluador. Si no puede responder, las acciones protegidas se deniegan en lugar de permitirse silenciosamente.
-## Diagnosticar un bloqueo por fallo cerrado
+## Diagnosticar un bloqueo a nivel de máquina
-
-
- 1. Ve a **Admin → enforcement** y abre la máquina.
- 2. Revisa su último registro de entrada, el despliegue asignado y el despliegue reportado.
- 3. Ve a **Observe → policy** y abre la sesión de la decisión denegada.
- 4. Confirma si el motivo reporta inaccesibilidad del daemon, desajuste de versión o la política en sí.
-
-
-
- ```bash
- failproofai config --status
- npm install -g failproofai@latest
- failproofai config
- ```
-
- Volver a ejecutar `failproofai config` actualiza y reinicia el daemon tras una actualización del paquete.
-
-
-
-En una máquina configurada para usar `failproofaid`, el daemon es el único evaluador. Si no es accesible o su versión de protocolo no coincide con la CLI, la evaluación del hook falla en modo cerrado. La acción se deniega con un motivo que indica al operador que verifique o actualice el daemon.
+```bash
+failproofai config --status
+systemctl status failproofaid@$USER # Linux
+sudo launchctl print system/ai.failproof.failproofaid.$USER # macOS
+```
-Antes de configurar el daemon, los hooks evalúan las políticas en proceso. Una vez que la configuración del daemon queda registrada, Failproof AI no recurre silenciosamente a un segundo evaluador cuando el daemon falla.
+Ejecuta `failproofai config` para reparar el servicio o instalar la versión correspondiente.
-## Responder a una decisión de fallo cerrado
+Dos tipos de fallo pueden parecer similares:
-1. Ejecuta `failproofai config --status`.
-2. Si las versiones difieren, vuelve a ejecutar `failproofai config` después de actualizar el paquete.
-3. Si el daemon no es accesible, inspecciona el estado de su servicio y los logs locales.
-4. Reanuda el trabajo del agente solo después de confirmar que la ruta de evaluación de políticas conocida está en buen estado.
+| Fallo | Significado |
+| --- | --- |
+| Servicio inaccesible | El socket no tiene un evaluador funcional detrás |
+| Incompatibilidad de versión | La CLI y el servicio no coinciden en el protocolo |
-
- No reintentes repetidamente la acción bloqueada. Una respuesta de fallo cerrado significa que el sistema no pudo establecer que la acción era segura.
-
+Ambos deniegan, pero el estado los reporta por separado.
## Un pack no carga
-Una máquina a la que se le indicó aplicar un pack, y no puede ejecutarlo, deniega en lugar de continuar silenciosamente. El disparador es una **expectativa registrada**, nunca una vacía: una máquina sin packs instalados permanece en silencio, mientras que un pack que está declarado y no se puede resolver — o que registra menos de lo que declara su manifiesto — deniega.
+Un pack seleccionado que está ausente, modificado o no es válido deniega los eventos cubiertos por sus políticas seleccionadas. Esto evita que un pack defectuoso desaparezca mientras la máquina aparenta estar protegida.
-La denegación es **acotada**, a diferencia de un daemon inaccesible. Un daemon que no puede alcanzarse significa que no se realizó ninguna evaluación, por lo que nada puede considerarse seguro. Un pack que no carga tiene un conjunto enumerable de guardas faltantes, ya que cada política declarada lleva su propio `match` — por lo tanto, deniega solo los eventos y herramientas que esas políticas cubrían, y todo lo demás continúa.
+`failproofai policies` indica el nombre del pack y el error de carga.
-No se activa para:
-
-- un pack de `observe`, que evalúa y descarta por construcción
-- políticas que nunca tomaste, o que desactivaste explícitamente
-- un pack que el cargador nunca recibió, donde "sin registros" no se puede distinguir de una omisión deliberada
-- una pausa de sesión activa
-- un tiempo de espera de carga, que es transitorio — un momento de disco lento no debe denegar hasta que intervenga un humano
+```bash
+failproofai policies
+failproofai policies remove owner/repo
+failproofai policies add owner/repo@
+```
-`UserPromptSubmit` **instructs** en lugar de denegar, independientemente de lo que declarara la política faltante. Una denegación general lo incluiría y te dejaría sin acceso al agente que podría solucionar el problema.
+Los metadatos ilegibles amplían la denegación segura en lugar de reducirla a partir de datos en los que no se podía confiar.
-### Qué hacer
+## Qué sigue disponible
-```bash
-failproofai pack list
-```
+El panel local y los comandos de estado siguen funcionando mientras la evaluación de políticas falla. Úsalos para identificar el servicio, pack o versión que necesita reparación.
-Nombra cualquier pack instalado que no cargue, indica el motivo y termina con código distinto de cero. Luego reinstálalo (`failproofai pack add `) o elimínalo (`failproofai pack remove `) — eliminarlo retira la expectativa, y la denegación cesa con ella.
\ No newline at end of file
+
+ No intentes sortear una decisión de fallo cerrado eliminando archivos del servicio o del pack. Repara el servicio, reinstala el pack o elimina la asignación a través de la CLI para que la máquina vuelva a un estado conocido.
+
\ No newline at end of file
diff --git a/docs/es/policies/fleet.mdx b/docs/es/policies/fleet.mdx
index 9ecba50bd..1724504bf 100644
--- a/docs/es/policies/fleet.mdx
+++ b/docs/es/policies/fleet.mdx
@@ -1,52 +1,61 @@
---
-title: "Desplegar políticas en máquinas"
-description: "Conoce qué máquinas están inscritas, actualizadas y aplicando las versiones de política previstas."
+title: "Cobertura de flota"
+description: "Consulta qué máquinas recibieron y aplicaron las políticas previstas."
icon: "network"
---
-La cobertura de flota responde si existe una política donde existe el riesgo. Rastrea las máquinas por ID estable y una etiqueta legible, luego compara su estado de despliegue asignado y reportado.
+La cobertura de flota compara lo que Cloud asignó con lo que cada máquina aplicó por última vez.
-## Verificar cobertura
+## Verificar una máquina
-
-
- 1. Ve a **Admin → enforcement** y revisa los totales de aplicación y observación.
- 2. Busca una máquina por ID o etiqueta, o filtra las máquinas que no tienen política asignada.
- 3. Expande una fila para comparar las políticas asignadas, el despliegue reportado, el último registro de actividad y el historial.
- 4. Actualiza tras el intervalo de sondeo de la máquina cuando un despliegue aplicado permanezca pendiente.
+```bash
+failproofai config --status
+failproofai flush --wait --timeout 120
+```
- 
-
-
- ```bash
- failproofai config --status
- failproofai config --machine-label checkout-runner-03
- failproofai flush --wait
- ```
+Desde Cloud:
+
+```bash
+fp fleet list
+fp fleet diff
+fp fleet show
+```
- Usa `fp events --agent-id --since 24h` para confirmar que la actividad del agente de la máquina llega a Cloud.
-
-
+`fp fleet` requiere una sesión con sesión iniciada, no una clave de API.
-Usa las vistas de cobertura para identificar:
+| Comando | Qué hace |
+| --- | --- |
+| `fp fleet list` | Lista las máquinas y el estado de despliegue |
+| `fp fleet show ` | Muestra el conjunto de políticas de una máquina |
+| `fp fleet deploy --add ` | Añade o actualiza una política |
+| `fp fleet deploy --remove ` | Elimina una política |
+| `fp fleet deploy --set ...` | Reemplaza el conjunto completo |
+| `fp fleet diff [machine]` | Compara las versiones previstas y aplicadas |
+| `fp fleet history ` | Lista las generaciones de despliegue |
+| `fp fleet rollback ` | Restaura una generación |
+| `fp fleet rename ""` | Cambia la etiqueta en Cloud |
-- Máquinas que nunca descargaron el último despliegue
-- Máquinas inscritas que dejaron de reportar actividad
-- Una política asignada al entorno o cohorte equivocado
-- Deriva de versión tras una actualización interrumpida
+
+ `--set` reemplaza el conjunto completo de políticas. Un `--add ` simple aplica la nueva política de inmediato. Usa `--add :observe` para un despliegue en modo sombra.
+
-Renombra una máquina sin reconectarla:
+## Observar y luego aplicar
```bash
-failproofai config --machine-label checkout-runner-03
+fp fleet deploy ci-runner-01 --add prod-guard:observe
+fp guardrails summary --since 24h --machine ci-runner-01
+fp fleet deploy ci-runner-01 --add prod-guard:enforce
```
-Verifica el estado local:
+El modo observación evalúa la política real y registra las decisiones que no son allow sin bloquear al agente.
+
+## Identidad de la máquina
+
+El ID de máquina es estable e identifica la máquina. La etiqueta es solo para visualización y puede cambiar:
```bash
-failproofai config --status
+failproofai config --machine-label checkout-runner-03
+fp fleet rename "Checkout runner 03"
```
-
- Usa etiquetas que identifiquen la carga de trabajo y el entorno. Los nombres de host por sí solos suelen ser insuficientes tras el autoescalado o el reemplazo de máquinas.
-
\ No newline at end of file
+Cambiar la etiqueta no reconecta ni renueva las claves de la máquina.
\ No newline at end of file
diff --git a/docs/es/policies/local-configuration.mdx b/docs/es/policies/local-configuration.mdx
index 4df5fc914..dec0be0cd 100644
--- a/docs/es/policies/local-configuration.mdx
+++ b/docs/es/policies/local-configuration.mdx
@@ -1,84 +1,50 @@
---
-title: "Configuración local"
-description: "Controla el alcance de las políticas, los parámetros, los archivos personalizados y los ajustes de Failproof AI a nivel de máquina."
-icon: "file-cog"
+title: "Configuración de políticas locales"
+description: "Elige dónde se aplican las políticas y define sus parámetros."
+icon: "sliders-horizontal"
---
-Failproof AI separa la selección de políticas de los ajustes de máquina y del daemon. Esto permite que las decisiones de políticas del repositorio sean revisables, mientras que las credenciales y el estado del daemon permanecen fuera del repositorio.
+Usa el scope para decidir quién recibe una política local:
-## Elige un alcance de política
-
-
-
- Ejecuta `failproofai` sin argumentos para abrir el panel de políticas local. Selecciona el alcance de usuario, proyecto o local antes de habilitar una política, para que el cambio se escriba en el archivo de configuración correspondiente.
-
- - **Usuario** aplica en todos los proyectos de esta máquina.
- - **Proyecto** pertenece al repositorio y puede confirmarse (commit).
- - **Local** sobrescribe un proyecto para un usuario específico y debe mantenerse en el gitignore.
-
-
-
- ```bash
- failproofai policy add block-rm-rf --scope user
- failproofai policy add block-force-push --scope project
- failproofai policy add warn-large-file-write --scope local
- failproofai policies
- ```
+| Scope | Se aplica a |
+| --- | --- |
+| `user` | Tus agentes compatibles en esta máquina |
+| `project` | Agentes que se ejecutan en este proyecto |
+| `local` | Solo Claude, en la configuración local del proyecto |
+| `all` | Solo para desinstalar |
- No todos los entornos de ejecución admiten el alcance local. El CLI rechaza un alcance que el entorno seleccionado no pueda representar.
-
-
+```bash
+failproofai policies add block-sudo --scope user
+failproofai policies add block-rm-rf --scope project
+```
-| Alcance | Archivo de configuración de políticas |
-| --- | --- |
-| Proyecto | `/.failproofai/policies-config.json` |
-| Local | `/.failproofai/policies-config.local.json` |
-| Usuario | `~/.failproofai/policies-config.json` |
+Hermes y OpenClaw solo admiten el scope de usuario. La mayoría de los otros harnesses admiten user y project. Claude también admite el scope local. Consulta [Harnesses](/es/reference/harnesses).
-Las políticas habilitadas se combinan como una unión. Los parámetros de las políticas utilizan el primer alcance que define parámetros para esa política, en el orden proyecto → local → usuario. Las rutas de políticas personalizadas explícitas utilizan el primer alcance que las define.
+## Parámetros de políticas
-## Configura los parámetros de las políticas
+La configuración de las políticas se almacena en `policies-config.json` en el scope correspondiente. Utiliza la vista **Policies → Configure** del panel de control local siempre que sea posible.
-
-
- Abre la política en el panel local, edita sus parámetros compatibles y guarda en el alcance seleccionado. Ejecuta una acción de agente que coincida y otra que no coincida, luego inspecciona la decisión en **Observar → política**.
+Un parámetro pertenece a una política concreta y modifica cómo esa política toma decisiones. Por ejemplo, una lista de permitidos puede hacer que una política de bloqueo acepte comandos o rutas conocidas como seguras.
-
-
- Edita el archivo `policies-config.json` del alcance seleccionado y luego ejecuta `failproofai policies` para detectar nombres de políticas o claves de parámetros desconocidos.
+Los archivos de políticas personalizadas se pueden cargar automáticamente desde `.failproofai/policies/`, o de forma explícita:
- ```json
- {
- "enabledPolicies": ["block-rm-rf", "block-force-push"],
- "policyParams": {
- "block-rm-rf": {
- "allowPaths": ["/tmp/build-output"]
- }
- }
- }
- ```
+```bash
+failproofai policies -i -c ./guards.mjs --scope project
+```
- ```bash
- failproofai policies
- ```
-
-
+Elimina rutas explícitas con:
-## Comprende los archivos de máquina
+```bash
+failproofai policies -u -c
+```
-`~/.failproofai` contiene archivos separados para distintos límites de confianza:
+## Archivos
-| Ruta | Propósito |
+| Archivo | Propósito |
| --- | --- |
-| `config.json` | Ajustes del daemon, auditoría y telemetría (sin secretos) |
-| `credentials.json` | Credenciales en la nube; almacenadas con permisos solo para el propietario |
-| `policies-config.json` | Selección de políticas integradas, parámetros y rutas personalizadas explícitas del alcance de usuario |
-| `policies/` | Políticas de convención de usuario y artefactos de políticas gestionadas en la nube |
-| `hook-activity/` | Registro local de decisiones de políticas |
-| `state/` | Cola del daemon, estado de salud, pausa y estado en tiempo de ejecución |
-
-Usa `FAILPROOFAI_HOME` para reubicar el diseño completo de la máquina en un contenedor o prueba aislada. No reubicar directorios de estado individuales de forma independiente.
+| `~/.failproofai/config.json` | Configuración de la máquina y del colector |
+| `policies-config.json` | Políticas habilitadas y parámetros para un scope |
+| `.failproofai/policies/*policies.mjs` | Políticas cargadas por convención |
+| `~/.failproofai/policies/packs/installed.json` | Packs instalados y selecciones |
-
- Nunca confirmes (commit) `credentials.json`. Confirma la configuración de políticas del proyecto y las políticas de convención del proyecto solo después de revisarlas como código de cumplimiento.
-
\ No newline at end of file
+No edites directamente los artefactos de packs instalados. Reinstala o publica una versión corregida.
\ No newline at end of file
diff --git a/docs/es/policies/overview.mdx b/docs/es/policies/overview.mdx
index fe6e97cf9..3c45a7de9 100644
--- a/docs/es/policies/overview.mdx
+++ b/docs/es/policies/overview.mdx
@@ -1,63 +1,76 @@
---
-title: "Policies"
-description: "Observa, guía o bloquea acciones del agente antes de que un fallo conocido se repita."
+title: "Políticas"
+description: "Guía o bloquea a un agente antes de que un fallo conocido se repita."
icon: "shield-check"
---
-Una policy evalúa un evento de hook del agente y devuelve una de tres decisiones:
+Una política observa la acción de un agente y devuelve una de tres decisiones:
-- `allow` permite que la acción continúe.
-- `instruct` proporciona orientación correctiva al agente.
-- `deny` bloquea la acción con una razón.
+- `allow` continúa.
+- `instruct` proporciona orientación al agente cuando su entorno de ejecución lo soporta.
+- `deny` bloquea la acción.
-## Usa las tres superficies de policy
+Usa políticas para comportamientos conocidos y repetibles: eliminar archivos protegidos, exponer secretos, hacer push a la rama incorrecta o modificar infraestructura de producción.
-
-
- 1. Ve a **Observe → policy** para filtrar e inspeccionar decisiones de policy de las sesiones.
- 2. Ve a **Admin → policy editor** para redactar, validar, publicar, deshabilitar o inspeccionar versiones inmutables.
- 3. Ve a **Admin → enforcement** para asignar versiones y efectos a máquinas.
+## Añadir políticas a esta máquina
- Usa la página de Policy para entender qué ya está coincidiendo antes de crear o cambiar la aplicación.
+La configuración inicial no incluye ningún paquete de políticas. Añade el paquete de Failproof AI después de la configuración:
- 
+```bash
+failproofai config
+failproofai policies add FailproofAI/policies
+failproofai policies
+```
- El editor es donde conviertes una condición de fallo en código fuente, la validas y publicas una versión inmutable.
+El paquete no contiene un pack integrado con privilegios especiales. El nuestro se instala de la misma manera que el de cualquier otro.
- 
+Las políticas también pueden provenir de un archivo local, un paquete publicado o una asignación en la nube:
- Enforcement luego asigna esa versión publicada y su efecto de observación o aplicación a las máquinas.
+| Origen | Cómo añadirlo |
+| --- | --- |
+| Archivo local | Coloca `*policies.{js,mjs,ts}` en `.failproofai/policies/` |
+| Cualquier ruta de archivo | `failproofai policies -i -c ` |
+| Paquete publicado | `failproofai policies add /` |
+| Nube | Asígnalo desde el panel de control o con `fp fleet deploy` |
- 
+`block-failproofai-commands` siempre se ejecuta y no puede desactivarse. Impide que un agente deshabilite su propio sistema de cumplimiento.
- Verifica las decisiones de vuelta en la página de Policy después del despliegue para que las vistas de autoría y de flota estén vinculadas a la actividad real del agente.
-
-
- Usa `failproofai` para la instalación y validación local de policies:
+## Observar antes de aplicar
- ```bash
- failproofai policies
- failproofai policy add block-rm-rf --scope project
- failproofai config --status
- ```
+El modo observación ejecuta la política real y registra lo que habría hecho, pero no bloquea al agente.
- Usa `fp` para encontrar las sesiones y eventos de la nube que contienen decisiones de policy. La autoría en la nube y el despliegue en flota siguen siendo flujos de trabajo del dashboard.
-
-
+```bash
+fp policies test ./checkout.policy.mjs --tool Bash --command "git push --force" --expect deny
+fp fleet deploy ci-runner-01 --add checkout-guard:observe
+fp guardrails summary --since 24h --machine ci-runner-01
+fp fleet deploy ci-runner-01 --add checkout-guard:enforce
+```
-Las policies tienen tres superficies distintas en Failproof AI:
+
+ Un `fp fleet deploy --add ` sin modificadores aplica la política de inmediato. Añade `:observe` para un despliegue en modo sombra.
+
-1. **Analizar decisiones** en sesiones, dashboards y auditorías.
-2. **Crear versiones** con reglas integradas, código o el editor de policy.
-3. **Desplegar y aplicar** versiones en las máquinas seleccionadas.
+Una política que supera el tiempo de espera en modo observación registra un allow, ya que eso es lo que ocurriría durante la aplicación. Solo las decisiones observadas que no sean allow se registran.
-Comienza desde un modo de fallo confirmado. Define la coincidencia de evento y herramienta más pequeña que lo identifique, prueba ejemplos legítimos e inseguros, luego observa antes de aplicar.
+Para un paquete utilizado sin la nube, publícalo con `failproofai publish --effect observe`.
-
-
- Habilita una regla revisada para riesgos comunes de secretos, shell, Git, nube y flujos de trabajo.
+## Elige el camino correcto
+
+
+
+ Elige entre 39 políticas para secretos, archivos, Git, infraestructura y flujos de trabajo.
+
+
+ Añade un conjunto de políticas publicado desde GitHub o el Policy Hub.
-
- Expresa una decisión específica del flujo de trabajo en JavaScript o TypeScript.
+
+ Define una regla para tu propio agente o flujo de trabajo.
-
\ No newline at end of file
+
+ Observa, promueve y revierte una política en la nube.
+
+
+
+
+ La compatibilidad con el cumplimiento varía según el entorno de ejecución. Un deny de llamada a herramienta está verificado en los 12 entornos de ejecución soportados; otros eventos pueden variar. Consulta [entornos de ejecución soportados](/es/reference/harnesses#enforcement-capability).
+
\ No newline at end of file
diff --git a/docs/es/policies/packs.mdx b/docs/es/policies/packs.mdx
index 5e862d134..5a7e5f193 100644
--- a/docs/es/policies/packs.mdx
+++ b/docs/es/policies/packs.mdx
@@ -1,110 +1,62 @@
---
title: "Paquetes de políticas"
-description: "Instala un conjunto de políticas publicadas como una versión de GitHub y gestiona lo que se aplica."
+description: "Inspecciona e instala conjuntos de políticas versionados publicados a través de GitHub."
icon: "package"
---
-Un paquete es un conjunto de políticas publicadas como una versión de GitHub. Un solo comando lo instala, los checksums propios de la versión se verifican antes de ejecutar nada, y el digest queda registrado para que el paquete no pueda cambiar en tu máquina posteriormente.
-
-## Instalar las políticas de Failproof AI
+Un paquete de políticas es un conjunto versionado de políticas publicado como una release pública de GitHub. El paquete no incluye ningún conjunto propio; instala el nuestro como cualquier otro:
```bash
-failproofai pack add core
+failproofai policies show FailproofAI/policies
+failproofai policies add FailproofAI/policies
```
-Esto instala el conjunto que publicamos, desde la copia incluida en el paquete npm, por lo que no necesita red y no puede fallar detrás de un proxy. Puedes instalar solo una parte:
-
-```bash
-failproofai pack add core --policy block-rm-rf # una, o varias separadas por comas
-failproofai pack add core --category dangerous-commands # una categoría completa
-failproofai pack add core --all # todo lo que contiene
-```
+`show` lee el manifiesto sin ejecutar el código del paquete.
-`failproofai pack list` muestra todas las categorías que ofrece el paquete.
-
-## Ver qué contiene un paquete antes de instalarlo
+## Elige qué instalar
```bash
-failproofai pack list acme/support-agent
+failproofai policies add owner/repo --policy block-refunds
+failproofai policies add owner/repo --category billing,git
+failproofai policies add owner/repo --all
```
-Lista todas las políticas del paquete, agrupadas por categoría, indicando cuáles activa su autor por defecto y cuáles son opcionales. Solo lee el **manifiesto** — el artefacto principal nunca se descarga ni se importa, así que consultar el paquete de un desconocido no puede ejecutar código ajeno. El manifiesto se verifica igualmente contra el archivo `SHA256SUMS` de la versión, de modo que lo que estás leyendo es exactamente lo que se instalaría.
-
-`failproofai pack list` sin ningún argumento lista los paquetes ya instalados en esta máquina.
-
-## Instalar el paquete de otra persona
+Sin ninguna selección, el paquete utiliza los valores predeterminados de su publicador. Volver a añadir una release más reciente conserva tu selección existente.
-```bash
-failproofai pack add acme/support-agent
-```
+Todo lo que contenga una barra diagonal es una fuente de paquete. Todo lo que no tenga barra es un nombre de política.
-Cualquiera de estas formas funciona — pega la que tengas a mano:
+## Fijar una release
-| Origen | Resultado |
+| Fuente | Resultado |
| --- | --- |
-| `acme/support-agent` | Versión más reciente, **fijada** al tag exacto que se resolvió |
-| `acme/support-agent@v2.1.0` | Esa versión concreta |
-| `github:acme/support-agent@v2.1.0` | Lo mismo, escrito de forma explícita |
-| `https://github.com/acme/support-agent/releases/tag/v2.1.0` | Lo mismo, copiado desde el navegador |
+| `owner/repo` | Release más reciente, fijada tras la resolución |
+| `owner/repo@a1b2c3d4e5f6` | Release exacta basada en commit |
+| `owner/repo@v2.1.0` | Release exacta con nombre |
+| URL de release de GitHub | La release de esa URL |
-Si no se especifica ningún tag, se instala la versión más reciente **y se fija**, informándote del tag elegido. Lo que queda registrado siempre nombra exactamente una versión, así que una reinstalación no puede derivar.
+Un paquete normalmente utiliza el SHA de commit de 12 caracteres con el que fue construido. Usa `failproofai policies show owner/repo --releases` para ver el orden de las releases.
-## Instalar solo una parte de un paquete
-
-Por defecto obtienes los **propios** valores predeterminados del paquete — las políticas que su autor marcó como seguras para activar sin supervisión — no todo lo que contiene.
+## Gestionar paquetes instalados
```bash
-failproofai pack add acme/support-agent --category billing,git
-failproofai pack add acme/support-agent --policy block-refunds
-failproofai pack add acme/support-agent --all
+failproofai policies
+failproofai policies remove block-refunds
+failproofai policies add block-refunds
+failproofai policies remove owner/repo
```
-`--category` y `--policy` se combinan como unión (`--only` se acepta como sinónimo de `--policy`). Al volver a añadir el paquete en una versión más reciente se conserva lo que elegiste en lugar de reactivar el resto.
-
-## Gestionar lo que está activo
-
-```bash
-failproofai policies # todas las fuentes en una lista, paquetes incluidos
-failproofai pack list # solo paquetes, agrupados por categoría
-failproofai policies --uninstall block-refunds # desactivar una política de paquete
-failproofai policies --install block-refunds # volver a activarla
-failproofai pack remove acme/support-agent
-```
-
-Un nombre sin prefijo hace referencia a la política **incorporada** si existe una con ese nombre. Especifica la copia de un paquete de forma explícita cuando lo necesites:
-
-```bash
-failproofai policies --uninstall acme/support-agent:block-refunds
-```
-
-
-Si un paquete incluye una política cuyo nombre coincide con un **incorporado habilitado**, el incorporado se ejecuta y la copia del paquete se omite — de lo contrario, la misma protección se evaluaría dos veces. Desactiva el incorporado para usar la copia del paquete en su lugar.
-
-
-## De dónde vienen las políticas de Failproof AI
-
-`core` lee la copia incluida en el paquete npm. El mismo conjunto se publica como una versión de GitHub, que es lo que se instala si quieres una versión específica:
-
-```bash
-failproofai pack add core # desde este paquete, sin red
-failproofai pack add FailproofAI/policies # el mismo conjunto, desde su versión de GitHub
-```
-
-## Qué garantiza la integridad y qué no
-
-`SHA256SUMS` se distribuye en la misma versión que el artefacto, por lo que **no** es una firma y no prueba nada sobre quién lo publicó. Lo que sí prueba es que los bytes son los que esa versión publicó — y como el digest se registra al añadir el paquete y se vuelve a verificar antes de cada importación, un paquete no puede cambiar en tu máquina posteriormente. Un repositorio que reetiquetar o reemplaza un asset deja de cargarse en lugar de ejecutar silenciosamente algo diferente.
-
-En el momento de la instalación, el paquete también se **importa una vez** y se verifica contra su propio manifiesto. Un paquete cuyo artefacto no se puede analizar, o que registra algo distinto a lo que declara, se rechaza antes de activar nada — en lugar de instalarse correctamente y fallar en tu siguiente llamada a una herramienta.
+Si dos paquetes instalados contienen el mismo nombre de política, la CLI rechaza el nombre simple ambiguo. Selecciona la política a través de un paquete o desinstala el otro.
-## Cuándo un paquete no carga
+## Seguridad y disponibilidad
-Un paquete que esta máquina tiene orden de aplicar y no puede ejecutar **deniega** los eventos cubiertos por sus políticas ausentes, en lugar de permitirlos silenciosamente. Consulta [Comportamiento ante fallos](/es/policies/failure-behavior). `failproofai pack list` identifica cualquier paquete en ese estado y termina con código de salida distinto de cero.
+Cada release contiene un manifiesto, el código de políticas empaquetado y sumas de verificación. Failproof AI verifica el resumen registrado antes de cargarlo. Las sumas de verificación demuestran que los bytes coinciden con la release; no demuestran quién la publicó.
-## Sin conexión y mirrors
+Un paquete seleccionado que no puede cargarse falla de forma cerrada para los eventos que declaró. Consulta [comportamiento ante fallos de políticas](/es/policies/failure-behavior).
| Variable | Efecto |
| --- | --- |
-| `FAILPROOFAI_NO_DOWNLOAD=1` | Rechaza cualquier descarga; los paquetes ya instalados siguen aplicándose |
-| `FAILPROOFAI_PACK_BASE_URL` | Redirige la descarga de paquetes a un mirror en lugar de `github.com` |
+| `FAILPROOFAI_NO_DOWNLOAD=1` | Rechaza nuevas descargas; los paquetes instalados siguen ejecutándose |
+| `FAILPROOFAI_PACK_BASE_URL` | Usa un espejo |
+| `FAILPROOFAI_PACK_DIR` | Mueve el almacén de paquetes |
-Para publicar tu propio paquete, consulta [Publicar un paquete](/es/policies/publish-a-pack).
\ No newline at end of file
+Explora paquetes en el [Policy Hub](https://befailproof.ai/policy-hub/) o [publica el tuyo propio](/es/policies/publish-a-pack).
\ No newline at end of file
diff --git a/docs/es/policies/publish-a-pack.mdx b/docs/es/policies/publish-a-pack.mdx
index 915b02eb4..e0ee88ee7 100644
--- a/docs/es/policies/publish-a-pack.mdx
+++ b/docs/es/policies/publish-a-pack.mdx
@@ -1,91 +1,89 @@
---
-title: "Publicar un pack"
-description: "Distribuye tus propias políticas como una release de GitHub que cualquiera puede instalar."
+title: "Publicar políticas"
+description: "Distribuye tus políticas como una release pública de GitHub que cualquiera puede instalar."
icon: "upload"
---
-Un pack son tres archivos adjuntos a una release de GitHub. `failproofai pack build` genera los tres a partir de un archivo de políticas que ya tienes.
+Crea una política funcional, pruébala localmente y publícala como un paquete.
-## 1. Escribe las políticas
+## Crear y probar
-Un solo archivo, usando la misma API que cualquier política personalizada. Dos campos adicionales son importantes para un pack:
+```bash
+failproofai publish --init guards.mjs
+failproofai policies -i -c ./guards.mjs
+```
+
+`--init` genera una política que ya bloquea `git push --force`. Edítala, pide a tu agente que intente la acción bloqueada y revisa **Policies → Activity** en el panel local.
+
+Una política de paquete puede incluir:
```js
-import { customPolicies, deny, allow } from "failproofai";
+import { customPolicies, allow, deny } from "failproofai";
customPolicies.add({
name: "block-refunds",
- description: "Refunds above the approved limit need a human",
- category: "Billing", // groups it, and is what --category selects on
- defaultEnabled: true, // switched on by a plain `pack add`
- match: { events: ["PreToolUse"], tools: ["Bash"] },
- fn: async (ctx) =>
- String(ctx.toolInput?.command ?? "").includes("refund")
- ? deny("Refunds need a human. Ask before running this.")
- : allow(),
+ description: "Refunds above the limit need a human",
+ category: "Billing",
+ defaultEnabled: true,
+ match: { events: ["PreToolUse"], toolNames: ["Bash"] },
+ fn: async (ctx) => {
+ // return allow(), instruct(), or deny()
+ },
});
```
-`defaultEnabled` es **false** por defecto cuando se omite. Un `failproofai pack add` simple solo activa lo que hayas marcado — instalar automáticamente todas las políticas de un desconocido no es una decisión que el instalador deba tomar por su usuario.
+`defaultEnabled` tiene el valor por defecto `false`.
-
-La entrada debe ser **un único archivo autocontenido**. Solo la entrada tiene el digest fijado, por lo que un pack que importe archivos locales no podría garantizar honestamente que el digest cubre lo que se ejecuta. Primero empaqueta con (`esbuild`, `bun build`, `rollup`) y construye el pack desde el bundle — `pack build` rechaza una importación local en lugar de hacer una promesa que no puede cumplir.
-
+## Publicar
-## 2. Construye los archivos de la release
+Haz commit de tus archivos y luego ejecuta:
```bash
-failproofai pack build ./policies.mjs \
- --id acme/support-agent \
- --version 1.0.0 \
- --out ./dist-pack
+failproofai publish
```
-Genera tres archivos y valida cada política con las **reglas propias del loader** antes — así un pack que nunca podría instalarse falla aquí, donde puedes corregirlo:
-
-| Archivo | Descripción |
-| --- | --- |
-| `failproofai-pack.json` | El manifiesto: id, versión, efecto y una entrada por política |
-| `failproofai-pack.mjs` | Tu entrada, tal cual |
-| `SHA256SUMS` | `` para los otros dos |
+El comando de publicación localiza el archivo de políticas, lo valida con el mismo cargador que se usa durante la instalación y sube los archivos del paquete a una release de GitHub. Utiliza `GITHUB_TOKEN`, `GH_TOKEN` o `gh auth login`.
-Se rechaza en tiempo de construcción: un id que no sea `publisher/name`, un nombre de política que contenga `/`, una política que declare `alwaysOn`, una `description`, `category` o `match` ausente, una entrada que no registra nada, y una entrada que importa archivos locales.
+El repositorio debe ser público porque la instalación utiliza HTTPS anónimo.
-## 3. Adjúntalos a una release
+La versión predeterminada es el SHA de 12 caracteres del commit actual. La publicación falla si el árbol de trabajo tiene cambios sin commitear o si el directorio está fuera de Git, a menos que se indique `--version`. Si existe una etiqueta en `HEAD`, esta tiene prioridad sobre el SHA.
-Etiqueta la release con la misma versión que construiste y adjunta los tres archivos como assets de la release:
+Los usuarios lo instalan con:
```bash
-gh release create 1.0.0 \
- ./dist-pack/failproofai-pack.json \
- ./dist-pack/failproofai-pack.mjs \
- ./dist-pack/SHA256SUMS
+failproofai policies add owner/repo
```
-Ahora cualquiera puede instalarlo:
+## Publicar en modo observación
```bash
-failproofai pack add acme/support-agent
+failproofai publish --effect observe
```
-Los nombres de los assets son fijos — son los que la CLI del consumidor usa para construir sus URLs, sin llamadas a la API ni descubrimiento automático.
+El modo observación evalúa la política real y registra las decisiones que no son allow, pero permite que el agente continúe. Un timeout se registra como allow.
-## Publicar una nueva versión
+Publica de nuevo con `--effect enforce` cuando las coincidencias observadas sean correctas.
-Construye con el nuevo `--version`, crea una nueva release, adjunta los tres assets nuevamente. Los consumidores ejecutan el mismo `pack add` y conservan el subconjunto que habían elegido; una política que desactivaron permanece desactivada tras la actualización.
+## Opciones útiles
-Cambiar el **nombre** de una política es un cambio incompatible: una máquina que la había desactivado está desactivando un nombre que ya no existe, y el nuevo nombre llega con lo que `defaultEnabled` indique.
-
-## En qué confían tus usuarios
-
-`SHA256SUMS` vive en la misma release que el artefacto, por lo que prueba que los bytes son los que publicaste — no quién eres. Cualquiera que pueda escribir en el repositorio puede escribir ambos archivos. La protección de tus usuarios es que el digest queda fijado al instalar, de modo que lo que publicaste no puede cambiar posteriormente.
-
-Publica desde un repositorio cuyo acceso de escritura controles, y trata una release de pack como si fuera la publicación de un paquete.
+| Flag | Efecto |
+| --- | --- |
+| `--init [file]` | Genera una política de ejemplo |
+| `--repo /` | Selecciona o crea el repositorio |
+| `--version ` | Reemplaza la versión basada en el commit |
+| `--effect enforce|observe` | Define si el paquete bloquea o solo observa |
+| `--dry-run` | Construye y valida sin publicar |
+| `--allow-private` | Publica de forma privada, sabiendo que `policies add` no podrá instalarlo |
-## Observar antes de aplicar
+```bash
+failproofai publish --dry-run
+failproofai publish ./guards.mjs --repo me/guards --version 2.0.0
+```
-Un manifiesto puede declarar `"effect": "observe"`. Esas políticas se ejecutan y sus veredictos se **registran y descartan** — nada queda bloqueado. Es la forma de medir una nueva regla frente al tráfico real antes de que pueda interrumpir el trabajo de alguien.
+
+ Añade el topic de GitHub `failproofai-policies` después de publicar para que el [Policy Hub](https://befailproof.ai/policy-hub/) pueda indexar el paquete. La CLI no lo configura automáticamente.
+
-```json
-{ "id": "acme/support-agent", "version": "1.1.0", "effect": "observe", "policies": [ ... ] }
-```
\ No newline at end of file
+
+ Cambiar el nombre de una política es un cambio que rompe la compatibilidad con las selecciones existentes. Mantén los nombres estables entre versiones.
+
\ No newline at end of file
diff --git a/docs/es/policies/rollback.mdx b/docs/es/policies/rollback.mdx
index 59a1c6bc1..bf5e52fd7 100644
--- a/docs/es/policies/rollback.mdx
+++ b/docs/es/policies/rollback.mdx
@@ -1,6 +1,6 @@
---
title: "Rollback"
-description: "Restaura un despliegue de políticas conocido cuando un rollout interrumpe el trabajo válido de los agentes."
+description: "Restaura una versión de política conocida cuando un despliegue interrumpe el trabajo válido de los agentes."
icon: "rotate-ccw"
---
@@ -12,30 +12,57 @@ El rollback cambia la versión desplegada o elimina una asignación de política
1. Ve a **Admin → enforcement**, expande la máquina afectada e identifica su último conjunto de políticas conocido como válido.
2. Selecciona **edit**, restaura esas versiones y efectos, y aplica el nuevo despliegue.
- 3. Espera a que la máquina haga check-in y verifica el despliegue reportado.
+ 3. Espera a que la máquina se comunique y verifica el despliegue reportado.
4. Abre **Observe → policy** y las sesiones afectadas para confirmar que el trabajo válido ya no está bloqueado.
- El rollback de un despliegue en la nube es un flujo de trabajo del panel de control. Usa el estado local para confirmar que el despliegue corregido ha llegado a la máquina:
+ Encuentra la generación a la que quieres volver, restáurala y confirma que se aplicó:
```bash
+ fp fleet history ci-runner-01
+ fp fleet rollback ci-runner-01 3
+ fp fleet diff ci-runner-01
failproofai config --status
```
- `failproofai config --pause` pausa las políticas integradas, personalizadas y de convención durante una sesión local. No pausa las políticas gestionadas por Cloud, por lo que no es una solución alternativa para un despliegue incorrecto en Cloud.
+ `fp fleet rollback` crea una **nueva** generación que contiene el conjunto anterior en lugar de retroceder el contador, por lo que el historial sigue siendo solo de adición. Rechaza la operación si esa generación referencia una política que ha sido desactivada o eliminada — el servidor lo indica en lugar de reinstaurar un conjunto que no puede entregarse.
+
+ `fp fleet diff` muestra la diferencia entre la intención y la entrega. Una máquina aparece como desviada hasta su próximo sondeo, así que revisa el diff antes de concluir que el rollback no tuvo efecto. `failproofai config --status` lo confirma directamente en la máquina.
-## Cuándo revertir
+## Una pausa no es un rollback
+
+Una pausa suspende todas las políticas instaladas localmente durante **una sesión** y siempre expira por sí sola — packs, archivos personalizados, archivos de convención y builtins por igual. Solo las políticas gestionadas desde la nube y el guard siempre activo `block-failproofai-commands` siguen aplicándose. Por tanto, una pausa no es un workaround para un despliegue Cloud defectuoso, y tiene un radio de impacto mayor de lo que parece: un pack es donde vive prácticamente toda la aplicación local, y el guard de fallo cerrado del pack también se omite durante ese tiempo.
+
+| Comando | Efecto |
+|---|---|
+| `failproofai config --pause` | La sesión de agente más reciente de este directorio, durante 30 minutos |
+| `failproofai config --pause 10m` | Un tiempo determinado. Máximo 8h; sufijos `s`/`m`/`h`; un número sin sufijo equivale a minutos |
+| `failproofai config --pause --session ` | Apunta a una sesión específica |
+| `failproofai config --resume` | Finaliza la pausa antes de tiempo |
+| `failproofai config --resume --all` | Finaliza todas las pausas activas |
+| `failproofai config --status` | Qué está en pausa y cuándo se levanta |
+
+## Cuándo hacer un rollback
- Una política bloquea una acción de producción esperada.
-- El volumen de coincidencias es materialmente mayor de lo que predijo el rollout observado.
+- El volumen de coincidencias es materialmente mayor de lo que predijo el despliegue observado.
- Una política depende de campos que una integración no proporciona.
-- Una nueva versión cambia el comportamiento fuera del modo de fallo previsto.
+- Una nueva versión cambia el comportamiento más allá del modo de fallo previsto.
+
+Tras el rollback, abre las sesiones afectadas e identifica la condición que causó el falso positivo. Crea una nueva versión, prueba tanto el caso inseguro como el legítimo de forma local, y vuelve a pasar por observe antes de volver a aplicar enforcement:
+
+```bash
+fp policies test ./policy.mjs --tool Bash --command '' --expect allow
+fp policies publish my-policy ./policy.mjs
+fp fleet deploy ci-runner-01 --add my-policy:observe
+fp guardrails summary --since 24h --machine ci-runner-01
+```
-Tras el rollback, abre las sesiones afectadas e identifica la condición que causó el falso positivo. Crea una nueva versión, prueba tanto los casos inseguros como los legítimos y repite la fase de observación.
+`:observe` es lo que convierte esto en un despliegue en modo sombra. Un `fp fleet deploy ... --add my-policy` sin más **aplica enforcement de inmediato** — un efecto omitido se resuelve al efecto ya desplegado, y luego a `enforce` — lo que en una política que acabas de revertir significa reinstaurar el incidente. El modo observe igualmente evalúa la política de forma real y registra cada veredicto que no sea allow; solo se omite la aplicación del enforcement, por lo que `fp guardrails summary` mide la nueva versión contra el mismo tráfico que falló con la anterior. Promueve con `--add my-policy:enforce` cuando los números lo indiquen.
- Pausar el enforcement puede ser apropiado durante un incidente, pero amplía la exposición para todas las políticas activas en ese ámbito. Siempre que sea posible, prefiere revertir la versión específica de la política.
+ Pausar el enforcement puede ser apropiado durante un incidente, pero amplía la exposición para todas las políticas activas en ese alcance. Siempre que sea posible, prefiere revertir la versión específica de la política.
\ No newline at end of file
diff --git a/docs/es/reference/cloud-cli.mdx b/docs/es/reference/cloud-cli.mdx
index ec6b3d115..91522487f 100644
--- a/docs/es/reference/cloud-cli.mdx
+++ b/docs/es/reference/cloud-cli.mdx
@@ -4,17 +4,21 @@ description: "Referencia completa para consultar y administrar Failproof AI Clou
icon: "cloud-cog"
---
-Usa `fp` para inspeccionar la telemetría de Cloud, gestionar la aplicación de políticas gestionada en la nube (políticas, despliegues de flota, decisiones de guardrail), así como auditorías, hallazgos, incidencias, alertas, claves, usuarios, consultas y configuración. Utiliza [`failproofai`](/es/reference/failproof-cli) para hooks locales, políticas, captura e inscripción de máquinas.
+Usa `fp` para inspeccionar la telemetría de Cloud, gestionar la aplicación administrada en la nube (políticas, despliegues de flota, decisiones de guardrail) y administrar auditorías, hallazgos, incidencias, alertas, claves, usuarios, consultas y ajustes. Usa [`failproofai`](/es/reference/failproof-cli) para hooks locales, políticas, captura e incorporación de máquinas.
-Instala el Cloud CLI publicado como herramienta aislada:
+Instala el Cloud CLI publicado como herramienta aislada. Requiere Python 3.10 o superior.
```bash
uv tool install fp-cloud-cli
fp version
```
+La distribución es `fp-cloud-cli` y el comando instalado es `fp` — difieren porque `fp` ya estaba tomado en PyPI.
+
## Iniciar sesión
+`fp login` te envía un código de seis dígitos por correo electrónico y guarda la sesión. Si el panel tiene un certificado autofirmado, añade `--insecure` al iniciar sesión.
+
```bash
fp login
fp whoami
@@ -32,7 +36,7 @@ Las opciones globales deben ir antes del comando:
fp --json sessions --since 24h
```
-Ejecuta `fp COMMAND --help` o `fp COMMAND SUBCOMMAND --help` para obtener ayuda en la terminal.
+Ejecuta `fp COMMAND --help` o `fp COMMAND SUBCOMMAND --help` para obtener ayuda en el terminal.
## Comandos de la CLI
@@ -44,10 +48,10 @@ Ejecuta `fp COMMAND --help` o `fp COMMAND SUBCOMMAND --help` para obtener ayuda
| `fp logout` | Revoca y elimina la sesión de usuario guardada. | — |
| `fp whoami` | Muestra la identidad actual, el modo de autenticación, la organización y los permisos. | — |
| `fp version` | Muestra la versión instalada de la CLI. | — |
-| `fp help` | Muestra la ayuda de los comandos de nivel superior. | — |
+| `fp help` | Muestra la ayuda de comandos de nivel superior. | — |
```bash
-fp login --email tu@ejemplo.com --org reliability-team
+fp login --email you@example.com --org reliability-team
fp whoami
```
@@ -57,23 +61,23 @@ fp whoami
fp events [OPTIONS]
```
-Lista eventos individuales de agentes. El feed ligero predeterminado excluye los payloads sin procesar; usa `--full` solo para una investigación acotada.
+Lista eventos individuales del agente. El feed ligero predeterminado excluye los payloads sin procesar; usa `--full` solo para una investigación acotada.
| Opción | Descripción |
| --- | --- |
-| `--limit`, `-n ` | Máximo de filas totales. Por defecto: `50`. |
+| `--limit`, `-n ` | Número máximo total de filas. Predeterminado: `50`. |
| `--since ` | `all`, `15m`, `1h`, `6h`, `24h` o `7d`. |
-| `--from ` / `--to ` | Rango UTC en ISO 8601; reemplaza `--since`. |
-| `--env ` | Filtro de entorno; repite o separa por comas. |
-| `--event-type ` | Filtro de tipo de evento; repite o separa por comas. |
-| `--agent-id ` | Filtro de agente; repite o separa por comas. |
-| `--session-id ` | Filtro de sesión; repite o separa por comas. |
+| `--from ` / `--to ` | Rango UTC en ISO 8601; anula `--since`. |
+| `--env ` | Filtro de entorno; repite o separa los valores con comas. |
+| `--event-type ` | Filtro de tipo de evento; repite o separa los valores con comas. |
+| `--agent-id ` | Filtro de agente; repite o separa los valores con comas. |
+| `--session-id ` | Filtro de sesión; repite o separa los valores con comas. |
| `--search ` | Búsqueda de texto en el payload; repetible, coincide con cualquier término. |
-| `--order asc\|desc` | Orden temporal. Por defecto: más reciente primero. |
+| `--order asc\|desc` | Orden cronológico. Predeterminado: más reciente primero. |
| `--all` | Pagina automáticamente hasta `--limit`. |
| `--cursor ` | Reanuda desde un cursor opaco. |
| `--page-size ` | Filas por solicitud con `--all`; máximo `200`. |
-| `--full` | Incluye payloads sin procesar a través del endpoint de eventos más completo. |
+| `--full` | Incluye payloads sin procesar a través del endpoint de eventos más pesado. |
| `--fields ` | Devuelve solo los campos seleccionados; solicitar `payload` activa el modo completo. |
```bash
@@ -82,7 +86,7 @@ fp --json events --full --session-id --all --limit 10000
```
- `--all` pagina **hasta `--limit`**, que por defecto es **50** — así que `--all` por sí solo se detiene en 50 filas. Cuando se detiene antes, la respuesta incluye un `next_cursor` para reanudar; `"next_cursor": null` indica que el feed realmente se ha agotado.
+ `--all` pagina **hasta `--limit`**, que tiene como predeterminado **50** — por tanto, `--all` solo se detiene en 50 filas. Cuando se detiene antes, la respuesta incluye un `next_cursor` para continuar; `"next_cursor": null` indica que el feed realmente se agotó.
### Sesiones
@@ -93,19 +97,19 @@ fp sessions [OPTIONS]
| Opción | Descripción |
| --- | --- |
-| `--limit`, `-n ` | Máximo de filas totales. Por defecto: `50`. |
+| `--limit`, `-n ` | Número máximo total de filas. Predeterminado: `50`. |
| `--since ` | `all`, `15m`, `1h`, `6h`, `24h` o `7d`. |
-| `--from ` / `--to ` | Rango UTC en ISO 8601; reemplaza `--since`. |
-| `--env ` | Filtro de entorno; repite o separa por comas. |
-| `--status ` | `done`, `error` o `timeout`; repite o separa por comas. |
-| `--agent-id ` | Coincide con sesiones que involucran al agente seleccionado. |
-| `--session-id ` | Filtro de sesión; repite o separa por comas. |
+| `--from ` / `--to ` | Rango UTC en ISO 8601; anula `--since`. |
+| `--env ` | Filtro de entorno; repite o separa los valores con comas. |
+| `--status ` | `done`, `error` o `timeout`; repite o separa los valores con comas. |
+| `--agent-id ` | Coincide con sesiones que involucran cualquier agente seleccionado. |
+| `--session-id ` | Filtro de sesión; repite o separa los valores con comas. |
| `--all` | Pagina automáticamente hasta `--limit`. |
| `--cursor ` | Reanuda desde un cursor opaco. |
| `--page-size ` | Filas por solicitud con `--all`; máximo `200`. |
| `--fields ` | Devuelve solo los campos seleccionados. |
-| `--full-ids` | No acorta los IDs de sesión en la salida de la terminal. |
-| `--agents` | Expande el registro de agentes para sesiones multiagente. |
+| `--full-ids` | No acorta los IDs de sesión en la salida del terminal. |
+| `--agents` | Expande el listado de agentes para sesiones multiagente. |
### Evaluaciones
@@ -116,14 +120,14 @@ fp evals [OPTIONS]
| Opción | Descripción |
| --- | --- |
| `--aggregate` | Muestra totales y estadísticas por puntuación en lugar de evaluaciones individuales. |
-| `--limit`, `-n ` | Máximo de filas en la lista. Por defecto: `50`. |
+| `--limit`, `-n ` | Número máximo de filas en la lista. Predeterminado: `50`. |
| `--since`, `--from`, `--to` | Selecciona el rango de tiempo. |
-| `--env`, `--status`, `--agent-id`, `--session-id` | Filtra a un único valor exacto por filtro. |
-| `--score KEY:MIN..MAX` | Rango de puntuación; repetible, todos los rangos deben coincidir. |
+| `--env`, `--status`, `--agent-id`, `--session-id` | Limita a un valor exacto por filtro. |
+| `--score KEY:MIN..MAX` | Rango de puntuación; repetible; todos los rangos deben coincidir. |
| `--all`, `--cursor`, `--page-size` | Controla la paginación de la lista. |
| `--fields ` | Devuelve solo los campos seleccionados. |
| `--full-ids` | Muestra los IDs de sesión completos. |
-| `--scores-full` | Muestra todas las puntuaciones en la salida de la terminal. |
+| `--scores-full` | Muestra todas las puntuaciones en la salida del terminal. |
### Errores
@@ -133,17 +137,17 @@ fp errors [OPTIONS]
| Opción | Descripción |
| --- | --- |
-| `--aggregate` | Resume los errores coincidentes en lugar de listar filas. |
-| `--limit`, `-n ` | Máximo de filas en la lista. Por defecto: `50`. |
+| `--aggregate` | Resume los errores coincidentes en lugar de listar las filas. |
+| `--limit`, `-n ` | Número máximo de filas en la lista. Predeterminado: `50`. |
| `--since`, `--from`, `--to` | Selecciona el rango de tiempo. |
-| `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id` | Filtra la población de errores. |
-| `--search ` | Busca texto en el payload; repetible. |
-| `--order asc\|desc` | Orden temporal. |
+| `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id` | Limita la población de errores. |
+| `--search ` | Busca en el texto del payload; repetible. |
+| `--order asc\|desc` | Orden cronológico. |
| `--all`, `--cursor`, `--page-size` | Controla la paginación de la lista. |
| `--fields ` | Devuelve solo los campos seleccionados. |
| `--full-ids` | Muestra los IDs de sesión completos. |
-### Uso y valores de filtro
+### Uso y valores de filtros
| Comando | Propósito |
| --- | --- |
@@ -155,7 +159,7 @@ fp errors [OPTIONS]
| `fp list models` | Lista los nombres de modelos. |
| `fp list hooks` | Lista los nombres de hooks. |
| `fp list tools` | Lista los nombres de herramientas. |
-| `fp list error_types` | Lista los tipos de error. |
+| `fp list error_types` | Lista los tipos de errores. |
### Organizaciones
@@ -174,10 +178,10 @@ fp errors [OPTIONS]
| `fp keys show NAME` | Muestra una clave y sus permisos. | — |
| `fp keys create NAME` | Crea una clave y revela su secreto una sola vez. | `--permission-set`; `--add`; `--remove` |
| `fp keys update NAME` | Reemplaza el conjunto de permisos o ajusta los permisos. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
-| `fp keys regenerate NAME` | Rota el secreto y revela el de reemplazo una sola vez. | `--yes`, `-y` |
-| `fp keys disable NAME` | Revoca permanentemente una clave. | `--yes`, `-y` |
+| `fp keys regenerate NAME` | Rota el secreto y revela el reemplazo una sola vez. | `--yes`, `-y` |
+| `fp keys disable NAME` | Revoca una clave de forma permanente. | `--yes`, `-y` |
-Los tokens de permiso usan el formato `resource:action`, por ejemplo `events:add`. Repite `--add`, separa los tokens por comas, o usa acciones con punto como `events:read.add`.
+Los tokens de permisos usan `resource:action`, como `events:add`. Repite `--add`, separa los tokens con comas o usa acciones con puntos como `events:read.add`.
### Consultas
@@ -188,7 +192,7 @@ Los tokens de permiso usan el formato `resource:action`, por ejemplo `events:add
| `fp query create NAME` | Guarda una consulta. | `--sql `; `--description` |
| `fp query update NAME` | Actualiza o renombra una consulta. | `--name`; `--sql`; `--description`; `--yes`, `-y` |
| `fp query delete NAME` | Elimina una consulta guardada. | `--yes`, `-y` |
-| `fp query run [NAME]` | Ejecuta una consulta guardada o SQL ad hoc. | `--sql`; `--limit`; `--all`; `--arg`, `--param` |
+| `fp query run [NAME]` | Ejecuta una consulta guardada o SQL ad-hoc. `--limit` limita solo la vista de **tabla**, con 50 como predeterminado; `--json` siempre devuelve todas las filas. | `--sql`; `--limit`; `--all`; `--arg`, `--param` |
| `fp query schema [TABLE]` | Lista las tablas consultables o inspecciona una tabla. | — |
### Usuarios
@@ -198,17 +202,17 @@ Los tokens de permiso usan el formato `resource:action`, por ejemplo `events:add
| `fp users list` | Lista los miembros de la organización. | `--active-only`; `--show-id` |
| `fp users show EMAIL` | Muestra un miembro y sus permisos. | — |
| `fp users create EMAIL` | Añade un miembro. | `--permission-set`; `--add`; `--remove` |
-| `fp users update EMAIL` | Modifica los permisos de un miembro. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
+| `fp users update EMAIL` | Cambia los permisos de un miembro. | `--permission-set`; `--add`; `--remove`; `--yes`, `-y` |
| `fp users disable EMAIL` | Deshabilita el inicio de sesión. | `--yes`, `-y` |
| `fp users enable EMAIL` | Vuelve a habilitar el inicio de sesión. | `--yes`, `-y` |
-### Configuración
+### Ajustes
| Comando | Propósito | Opciones |
| --- | --- | --- |
-| `fp settings list` | Lista la configuración de la organización y los valores actuales. | — |
-| `fp settings schema` | Muestra los valores aceptados y sus descripciones. | — |
-| `fp settings set KEY` | Modifica una configuración existente. | exactamente una de `--value`, `--json-value`, `--file`; opcional `--yes`, `-y` |
+| `fp settings list` | Lista los ajustes de la organización y sus valores actuales. | — |
+| `fp settings schema` | Muestra los valores aceptados y las descripciones. | — |
+| `fp settings set KEY` | Modifica un ajuste existente. | exactamente uno de `--value`, `--json-value`, `--file`; opcional `--yes`, `-y` |
### Alertas
@@ -221,7 +225,7 @@ Los tokens de permiso usan el formato `resource:action`, por ejemplo `events:add
| `fp alerts delete NAME` | Elimina una alerta. | `--yes`, `-y` |
| `fp alerts test NAME` | Envía una notificación de prueba. | `--channels`; `--yes`, `-y` |
-Las severidades de alerta son `info`, `warning` y `critical`. Los tipos de trigger son `metric_threshold`, `custom_sql`, `evaluation_score`, `eval_compound` y `per_event`. Los intervalos de evaluación deben estar entre 30 y 86 400 segundos.
+Las severidades de alerta son `info`, `warning` y `critical`. Los tipos de disparador son `metric_threshold`, `custom_sql`, `evaluation_score`, `eval_compound` y `per_event`. Los intervalos de evaluación deben estar entre 30 y 86 400 segundos.
### Auditorías
@@ -229,24 +233,24 @@ Las severidades de alerta son `info`, `warning` y `critical`. Los tipos de trigg
| --- | --- | --- |
| `fp audits list` | Lista las auditorías. | `--enabled-only`; `--show-id` |
| `fp audits show NAME` | Muestra una definición de auditoría y su estado. | — |
-| `fp audits create NAME` | Crea una auditoría y pone en cola su primera ejecución de inmediato. | Consulta las [opciones de creación](#audit-create-options). |
-| `fp audits edit NAME` | Reemplaza la configuración de auditoría manteniendo los valores no especificados. | opciones de definición de creación; `--name`; `--yes`, `-y` |
+| `fp audits create NAME` | Crea una auditoría y encola inmediatamente su primera ejecución. | Consulta [opciones de creación](#audit-create-options). |
+| `fp audits edit NAME` | Reemplaza la configuración de auditoría conservando los valores no especificados. | opciones de definición de creación; `--name`; `--yes`, `-y` |
| `fp audits delete NAME` | Elimina una auditoría, sus hallazgos y el historial de ejecuciones. | `--yes`, `-y` |
-| `fp audits run NAME` | Pone en cola una ejecución manual. | — |
+| `fp audits run NAME` | Encola una ejecución manual. | — |
| `fp audits runs NAME` | Lista el historial de ejecuciones. | `--limit`, `-n`; `--show-id` |
-| `fp audits context-show NAME` | Muestra el resumen y el estado de obtención de la URL de referencia. | — |
-| `fp audits context-set NAME` | Modifica el resumen o las URLs de referencia. | `--text`; `--text-file`; `--url`; `--clear-urls` |
+| `fp audits context-show NAME` | Muestra el brief y el estado de obtención de la URL de referencia. | — |
+| `fp audits context-set NAME` | Cambia el brief o las URLs de referencia. | `--text`; `--text-file`; `--url`; `--clear-urls` |
| `fp audits context-refresh NAME` | Vuelve a obtener las URLs de referencia. | — |
-| `fp audits findings` | Lista los hallazgos. | `--audit`; `--run-id`; `--status`; `--limit`, `-n`; `--offset`; `--show-id` |
+| `fp audits findings` | Lista los hallazgos. `--limit` tiene como predeterminado 100 aquí, no los 50 usados en otros lugares, y el servidor lo limita a 500. | `--audit`; `--run-id`; `--status`; `--limit`, `-n`; `--offset`; `--show-id` |
| `fp audits finding FINDING_ID` | Muestra un hallazgo y su evidencia. | — |
| `fp audits ack FINDING_ID` | Confirma un hallazgo. | `--reason` |
| `fp audits mute FINDING_ID` | Suprime un patrón recurrente. | `--reason`; `--yes`, `-y` |
| `fp audits dismiss FINDING_ID` | Marca un patrón como no accionable y lo suprime. | `--reason`; `--yes`, `-y` |
| `fp audits resolve FINDING_ID` | Marca un hallazgo como corregido sin supresión futura. | `--yes`, `-y` |
| `fp audits reopen FINDING_ID` | Devuelve un hallazgo a la cola activa y elimina la supresión. | — |
-| `fp audits assign FINDING_ID` | Establece el propietario del hallazgo. | `--to ` requerido |
+| `fp audits assign FINDING_ID` | Establece el responsable del hallazgo. | `--to ` obligatorio |
-#### Opciones de creación de auditorías
+#### Opciones de creación de auditoría
```bash
fp audits create checkout-reliability \
@@ -261,24 +265,24 @@ fp audits create checkout-reliability \
| Opción | Descripción |
| --- | --- |
-| `--file ` | Basa la definición en JSON, o usa `-` para stdin. Las flags explícitas reemplazan los valores del archivo. |
+| `--file ` | Basa la definición en JSON, o usa `-` para stdin. Los flags explícitos anulan los valores del archivo. |
| `--description ` | Describe la pregunta de fallo o el propósito. |
-| `--enabled` / `--disabled` | Inicia la programación activada o desactivada. Por defecto: activada. |
-| `--schedule-interval-secs ` | `3600`–`604800`. Por defecto: `86400`. |
-| `--schedule-anchor ` | Fase UTC fija en formato ISO 8601. Por defecto: próximas 09:00 UTC. |
-| `--window-mode since_last\|fixed` | Continúa tras la última ventana completamente analizada o inspecciona repetidamente una ventana variable. Por defecto: `since_last`. |
-| `--lookback-window-secs ` | `3600`–`7776000`. Por defecto: `604800`. |
-| `--scope ''` | Filtra por `environments`, `agent_ids` u otros campos de alcance admitidos. |
-| `--ignore-error-type ` | Excluye tipos de error; repite o separa por comas. |
-| `--llm` / `--no-llm` | Activa o desactiva el análisis agéntico. Por defecto: activado. |
-| `--top-k ` | Retiene `1`–`500` hallazgos. Por defecto: `50`. |
-| `--sensitivity low\|medium\|high` | Establece la sensibilidad de reporte. Por defecto: `medium`. |
+| `--enabled` / `--disabled` | Inicia la programación activada o desactivada. Predeterminado: activada. |
+| `--schedule-interval-secs ` | `3600`–`604800`. Predeterminado: `86400`. |
+| `--schedule-anchor ` | Fase UTC fija en formato ISO 8601. Predeterminado: próximas 09:00 UTC. |
+| `--window-mode since_last\|fixed` | Continúa después de la última ventana completamente analizada o inspecciona repetidamente una ventana móvil. Predeterminado: `since_last`. |
+| `--lookback-window-secs ` | `3600`–`7776000`. Predeterminado: `604800`. |
+| `--scope ''` | Filtra por `environments`, `agent_ids` u otros campos de scope admitidos. |
+| `--ignore-error-type ` | Excluye tipos de errores; repite o separa con comas. |
+| `--llm` / `--no-llm` | Activa o desactiva el análisis agéntico. Predeterminado: activado. |
+| `--top-k ` | Retiene `1`–`500` hallazgos. Predeterminado: `50`. |
+| `--sensitivity low\|medium\|high` | Establece la sensibilidad de reporte. Predeterminado: `medium`. |
| `--channels ''` | Array de canales de notificación. |
-| `--text ` | Resumen en línea, máximo 8 192 caracteres. |
-| `--text-file ` | Lee el resumen desde un archivo; mutuamente exclusivo con `--text`. |
+| `--text ` | Brief en línea, máximo 8 192 caracteres. |
+| `--text-file ` | Lee el brief desde un archivo; mutuamente exclusivo con `--text`. |
| `--url ` | Añade una referencia HTTPS pública; repite hasta cinco veces. |
-Incluye el contexto durante la creación cuando la primera ejecución lo necesita. La creación confirma la definición y el contexto juntos antes de que comience la ejecución en cola.
+Incluye el contexto durante la creación cuando la primera ejecución lo necesite. La creación confirma la definición y el contexto juntos antes de que comience la ejecución en cola.
`fp audits run` es asíncrono. Consulta `fp audits runs NAME` hasta que la última ejecución tenga éxito o falle antes de leer sus hallazgos.
@@ -289,88 +293,158 @@ Incluye el contexto durante la creación cuando la primera ejecución lo necesit
| Comando | Propósito | Opciones |
| --- | --- | --- |
| `fp issues list` | Lista las incidencias. | `--state`; `--alert-id`; `--limit`, `-n`; `--show-id` |
-| `fp issues count` | Cuenta las incidencias abiertas o en los estados seleccionados. | `--state` |
-| `fp issues show INCIDENT_ID` | Muestra los detalles, comentarios, suscriptores y actividad de una incidencia. | — |
-| `fp issues open` | Abre una incidencia manual o vinculada a una alerta. | `--summary` requerido; `--title`, `--alert-id`, `--severity` opcionales |
+| `fp issues count` | Cuenta las incidencias abiertas o los estados de incidencia seleccionados. | `--state` |
+| `fp issues show INCIDENT_ID` | Muestra los detalles, comentarios, suscriptores y actividad de la incidencia. | — |
+| `fp issues open` | Abre una incidencia manual o vinculada a una alerta. | `--summary` obligatorio; `--title`, `--alert-id`, `--severity` opcionales |
| `fp issues ack INCIDENT_ID` | Confirma una incidencia. | — |
-| `fp issues assign INCIDENT_ID` | Reemplaza los asignados; omite la opción para eliminarlos. | `--assignee` repetible |
+| `fp issues assign INCIDENT_ID` | Reemplaza los asignados; omite la opción para borrarlos. | `--assignee` repetible |
| `fp issues resolve INCIDENT_ID` | Resuelve una incidencia. | `--yes`, `-y` |
| `fp issues comment-list INCIDENT_ID` | Lista los comentarios. | — |
-| `fp issues comment-add INCIDENT_ID` | Añade un comentario. | exactamente una de `--body`, `--file` |
+| `fp issues comment-add INCIDENT_ID` | Añade un comentario. | exactamente uno de `--body`, `--file` |
| `fp issues comment-delete INCIDENT_ID COMMENT_ID` | Elimina un comentario. | `--yes`, `-y` |
| `fp issues subscribers INCIDENT_ID` | Lista los suscriptores. | — |
-| `fp issues subscribe INCIDENT_ID` | Te suscribe a ti u otro operador. | `--email` |
+| `fp issues subscribe INCIDENT_ID` | Te suscribe a ti o a otro operador. | `--email` |
| `fp issues unsubscribe INCIDENT_ID` | Elimina una suscripción. | `--email` |
-Los estados de incidencia válidos son `firing`, `acknowledged` y `resolved`. Las severidades de incidencia independiente son `info`, `warning` y `critical`.
+Los estados válidos de incidencia son `firing`, `acknowledged` y `resolved`. Las severidades de incidencias independientes son `info`, `warning` y `critical`.
-### Asistente cloud
+### Asistente de Cloud
| Comando | Propósito | Opciones |
| --- | --- | --- |
-| `fp agent health` | Comprueba la disponibilidad y la configuración del asistente. | — |
+| `fp agent health` | Verifica la disponibilidad y configuración del asistente. | — |
| `fp agent models` | Lista los modelos de asistente disponibles. | — |
| `fp agent chats` | Lista los chats guardados. | — |
-| `fp agent ask [MESSAGE]` | Inicia o continúa un chat; lee stdin si se omite el mensaje. | `--chat`; `--model`; `--page-context` |
+| `fp agent ask [MESSAGE]` | Inicia o continúa un chat; lee stdin cuando se omite el mensaje. | `--chat`; `--model`; `--page-context` |
| `fp agent show CHAT_ID` | Muestra una conversación guardada. | — |
-| `fp agent rename CHAT_ID` | Renombra una conversación. | `--title` requerido |
+| `fp agent rename CHAT_ID` | Renombra una conversación. | `--title` obligatorio |
| `fp agent delete CHAT_ID` | Elimina una conversación. | `--yes`, `-y` |
### Políticas
-Versiones de políticas gestionadas en la nube. **Solo para sesión** — todos los comandos aquí salen con código `2` bajo una clave de API, antes de cualquier solicitud, porque estas son rutas de escritura exclusivas de root deliberadamente ausentes de `/v1`.
+Versiones de políticas administradas en la nube. **Solo de sesión** — cada comando aquí, excepto `fp policies test`, sale con código `2` con una clave de API, antes de cualquier solicitud, porque estas son rutas de escritura exclusivas para root deliberadamente ausentes de `/v1`. `fp policies test` es la excepción deliberada: se ejecuta completamente de forma local contra `node` y no habla con ningún servidor, por lo que no tiene requisito de autenticación ni rechazo en modo clave, y funciona sin sesión iniciada y con una clave de API por igual.
| Comando | Propósito | Opciones |
| --- | --- | --- |
-| `fp policies list` | Lista las versiones de políticas. | `--json` |
+| `fp policies list` | Lista las versiones de políticas, la más reciente de cada política primero. | — |
| `fp policies show POLICY_ID` | Muestra una política con su código fuente. | — |
-| `fp policies publish NAME PATH` | Crea una versión a partir de un archivo `.mjs` local. | `--description`; `--no-verify` |
-| `fp policies enable POLICY_ID` | La añade de nuevo a cada despliegue del que fue eliminada, creando una nueva generación en cada uno. | `--yes`, `-y` |
-| `fp policies disable POLICY_ID` | La elimina de cada despliegue que la lleva, creando una nueva generación en cada uno. | `--yes`, `-y` |
+| `fp policies publish POLICY_ID [SOURCE]` | Crea una nueva versión; nunca edita una existente. `SOURCE` es una ruta, `@path` o `-` para stdin — omítelo para pegar. | `--description`; `--no-verify` |
+| `fp policies enable POLICY_ID` | La añade de nuevo a cada despliegue del que se eliminó, creando una nueva generación en cada uno. | `--yes`, `-y` |
+| `fp policies disable POLICY_ID` | La elimina de cada despliegue que la incluye, creando una nueva generación en cada uno. | `--yes`, `-y` |
| `fp policies delete POLICY_ID` | Elimina una versión de política. | `--yes`, `-y` |
-| `fp policies test PATH` | Ejecuta una política localmente contra un contexto sintético. Aplica el filtro `match` de cada política, por lo que una que no cubre el evento/herramienta dado se reporta como `skipped` en lugar de ejecutarse. | `--event`; `--tool`; `--command`; `--file-path`; `--expect` |
-| `fp policies compose PROMPT` | Redacta una política con el asistente. Requiere `policies:write`. | — |
+| `fp policies test [SOURCE]` | Ejecuta una política localmente contra un contexto sintético. Aplica el filtro `match` de cada política, por lo que una que no cubre el evento/herramienta dado se reporta como `skipped` en lugar de ejecutarse. Requiere `node` en PATH. | `--event`; `--tool`; `--command`; `--file`; `--expect` |
+| `fp policies compose PROMPT` | Redacta una política con el asistente. Imprime el borrador y no hace nada más de forma predeterminada. Requiere `policies:write`. | `--out `; `--publish ` |
### Flota
-Qué máquinas ejecutan qué políticas. **Solo para sesión**, por la misma razón que las anteriores.
+Qué máquinas ejecutan qué políticas. **Solo de sesión** — cada comando aquí, sin excepción, sale con código `2` con una clave de API.
| Comando | Propósito | Opciones |
| --- | --- | --- |
-| `fp fleet list` | Lista las máquinas inscritas y su generación de despliegue. | — |
+| `fp fleet list` | Lista las máquinas incorporadas y su generación de despliegue. | — |
| `fp fleet show MACHINE_ID` | El conjunto de políticas que ejecuta actualmente una máquina. | — |
-| `fp fleet deploy MACHINE_ID` | **Reemplaza el conjunto completo de políticas de la máquina.** Muestra el plan y solicita confirmación solo en una terminal interactiva sin `--json`. | `--add`; `--remove`; `--set`; `--create`; `--yes`, `-y` |
-| `fp fleet diff MACHINE_ID` | Compara una máquina con otro despliegue. | — |
-| `fp fleet history MACHINE_ID` | Despliegues anteriores de una máquina. | — |
-| `fp fleet rollback MACHINE_ID` | Restaura un despliegue anterior. | `--yes`, `-y` |
-| `fp fleet rename MACHINE_ID` | Asigna un nombre legible a una máquina. | `--name` requerido |
+| `fp fleet deploy MACHINE_ID` | Cambia lo que aplica una máquina. Imprime primero el conjunto resultante completo y pregunta solo en un terminal interactivo sin `--json`. | `--add`; `--remove`; `--set`; `--create`; `--yes`, `-y` |
+| `fp fleet diff [MACHINE_ID]` | Intención versus entrega — lo que se le indica a una máquina que ejecute frente a lo que obtuvo en la última sincronización. Omite el id para toda la flota. | — |
+| `fp fleet history MACHINE_ID` | Cada generación de una máquina, la más reciente primero. | — |
+| `fp fleet rollback MACHINE_ID GENERATION` | Reinstala el conjunto de políticas de una generación anterior. El número de generación proviene de `fp fleet history MACHINE_ID`. | `--yes`, `-y` |
+| `fp fleet rename MACHINE_ID LABEL` | Asigna una etiqueta legible a una máquina. El id en sí nunca cambia. | — |
+
+```bash
+fp fleet history ci-runner-01
+fp fleet rollback ci-runner-01 3
+fp fleet rename ci-runner-01 "CI runner (eu-west)"
+```
+
+#### Referencias de políticas
+
+`--add` y `--set` aceptan una referencia de política, no un id desnudo:
+
+| Forma | Significa |
+| --- | --- |
+| `id` | Versión actual, efecto actual |
+| `id@3` | Versión 3, efecto actual |
+| `id:observe` | Versión actual, registrado pero no aplicado |
+| `id@3:observe` | Versión 3, registrado pero no aplicado |
+
+El efecto es `enforce` u `observe`. La resolución es: un efecto explícito tiene precedencia; de lo contrario, el efecto ya desplegado para esa política; de lo contrario, `enforce`.
+
+
+ Un `--add` desnudo **aplica de inmediato**. `fp fleet deploy ci-runner-01 --add checkout-guard` comienza a bloquear en esa máquina tan pronto como la sincronice. `:observe` es lo que lo convierte en un despliegue en sombra:
+
+ ```bash
+ fp fleet deploy ci-runner-01 --add checkout-guard:observe # solo registra
+ fp fleet deploy ci-runner-01 --add checkout-guard # aplica ahora
+ ```
+
+ Observe no significa desactivado. La política se evalúa de verdad, bajo el mismo tiempo límite de 10 segundos y el mismo manejo de errores que una que aplica, y cada veredicto que no sea allow se registra — solo se omite la aplicación. Eso es lo que hace que la medición valga la pena leer.
+
+
+#### Deltas, reemplazo y condiciones de carrera
+
+`--add` y `--remove` leen el conjunto actual de la máquina y aplican un delta, por lo que nada que no hayas nombrado se ve afectado. Un `--add` desnudo sobre una política que la máquina ya ejecuta conserva su versión anclada en lugar de actualizarla silenciosamente; pasa `id@version` para moverla.
+
+`--set` reemplaza todo y es la única forma de eliminar políticas que no nombras. No puede combinarse con `--add` ni `--remove`. Pasar ninguno de los tres es un error de uso, no una operación nula.
+
+```bash
+fp fleet deploy ci-runner-01 --add prod-guard@1:observe --remove old-rule
+fp fleet deploy ci-runner-01 --set no-force-push --set no-secret-echo
+```
+
+La escritura en sí es un reemplazo completo en cada ruta, porque el endpoint recibe el conjunto de políticas completo. No hay bloqueo en el servidor, por lo que la CLI registra la generación que leyó y se niega si el resultado no es exactamente una mayor — eso significa que alguien más desplegó en el ínterin, y un reemplazo no fusiona. Vuelve a leer con `fp fleet show`, luego despliega de nuevo.
+
+`--create` despliega en un id de máquina que aún no ha hecho check-in, para pre-staging. Sin él, un id que el servidor no conoce es rechazado, porque un error tipográfico de lo contrario crearía una máquina que nadie posee con políticas que nadie recolecta.
### Guardrails
-Lo que realmente hizo la aplicación. **Solo para sesión**, por la misma razón que las anteriores.
+Lo que la aplicación realmente hizo. **Solo de sesión**, por la misma razón que arriba.
| Comando | Propósito | Opciones |
| --- | --- | --- |
-| `fp guardrails summary` | Cobertura, totales bloqueados/evaluados, una gráfica de denegaciones y la tabla por política. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
-| `fp guardrails timeline` | Decisiones agrupadas en la ventana temporal, sumadas por cada fuente de política. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
+| `fp guardrails summary` | Cobertura, totales bloqueados/evaluados, un sparkline de denegaciones y la tabla por política. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
+| `fp guardrails timeline` | Decisiones agrupadas en la ventana, sumadas en todas las fuentes de políticas. | `--since` (`1h`, `6h`, `24h`, `7d`); `--machine` |
+
+Una fila `(no policy)` en el resumen es normal y no indica una brecha: la mayoría de las evaluaciones son allows que nadie objetó, y la fila mantiene el denominador visible en pantalla.
+
+### Desplegar una política sin romper nada
+
+Los tres grupos anteriores forman una secuencia. Decide localmente, publica, observa en sombra, mide y luego aplica.
+
+```bash
+fp policies test ./checkout.policy.mjs --tool Bash --command "git push --force" --expect deny
+fp policies publish checkout-guard ./checkout.policy.mjs --description "Block force-push"
+fp fleet deploy ci-runner-01 --add checkout-guard:observe
+fp guardrails summary --since 24h --machine ci-runner-01
+fp fleet deploy ci-runner-01 --add checkout-guard:enforce
+```
+
+| Paso | Por qué está ahí |
+| --- | --- |
+| `fp policies test` | Sin servidor ni autenticación. Ejecuta el archivo real contra un contexto que describes e imprime allow, deny o instruct por política registrada. `--expect` lo convierte en una aserción de CI. |
+| `fp policies publish` | Crea una nueva versión inmutable; nunca edita una existente. |
+| `fp fleet deploy --add :observe` | El despliegue en sombra. **`:observe` no es opcional aquí** — un `--add` desnudo aplica en el momento en que la máquina sincroniza. |
+| `fp guardrails summary` | Separa las coincidencias inseguras del trabajo legítimo que la política también habría bloqueado. |
+| `fp fleet deploy --add :enforce` | Promoción, una vez que los veredictos registrados confirman lo que esperabas. |
+| `fp fleet rollback ` | La vía de retorno si la aplicación falla. |
+
+El equivalente para una sola máquina, sin Cloud, es publicar el pack con `failproofai publish --effect observe` y leer los veredictos registrados en el [panel local](/es/reference/local-dashboard).
## Flags globales
| Flag | Descripción |
| --- | --- |
| `--json` | Emite JSON legible por máquina. |
-| `--base-url ` | Usa un dashboard alojado localmente o de desarrollo. |
+| `--base-url ` | Usa un panel autohospedado o de desarrollo. |
| `--org ` | Selecciona una organización para esta invocación. |
-| `--token ` | Reemplaza el token de sesión de usuario guardado. |
-| `--api-key ` | Autentica automatización con una clave de API; nunca se guarda. |
-| `--timeout ` | Tiempo de espera HTTP; debe ser positivo. Por defecto: `30`. |
+| `--token ` | Anula el token de sesión de usuario guardado. |
+| `--api-key ` | Autentica la automatización con una clave de API; nunca se guarda. |
+| `--timeout ` | Tiempo límite HTTP; debe ser positivo. Predeterminado: `30`. |
| `--quiet`, `-q` | Suprime la salida de estado en stderr. |
-| `--no-color` | Deshabilita la salida en color. |
-| `--insecure` / `--secure` | Deshabilita o restaura la verificación de certificados TLS. |
-| `--version` | Imprime la versión y sale. |
+| `--no-color` | Desactiva la salida con colores. |
+| `--insecure` / `--secure` | Desactiva o restaura la verificación del certificado TLS. |
+| `--version` | Imprime la versión instalada y sale. |
| `--help`, `-h` | Muestra la ayuda. |
-`--api-key` está pensado para automatización. El inicio de sesión, el cambio de organización y los comandos del asistente requieren una sesión de usuario.
+`--api-key` está pensado para la automatización. Los comandos de inicio de sesión, cambio de organización y asistente requieren una sesión de usuario.
## Variables de entorno
@@ -382,18 +456,20 @@ Lo que realmente hizo la aplicación. **Solo para sesión**, por la misma razón
| `FP_API_KEY` | `--api-key` |
| `FP_JSON` | `--json` |
| `FP_INSECURE` | `--insecure` |
-| `FP_HOME` | Reubica el directorio de configuración de la CLI (por defecto `~/.failproofai/fpcli`). |
-| `FP_ANALYTICS_DISABLED` o `DO_NOT_TRACK` | Deshabilita las analíticas anónimas de la CLI. |
-| `NO_COLOR` | Deshabilita la salida en color. |
+| `FP_HOME` | Reubica el directorio de configuración de la CLI (predeterminado `~/.failproofai/fpcli`). |
+| `FP_ANALYTICS_DISABLED` o `DO_NOT_TRACK` | Desactiva las analíticas anónimas de la CLI. |
+| `NO_COLOR` | Desactiva la salida con colores. |
+
+Los flags explícitos anulan las variables de entorno, que anulan la configuración guardada.
-Las flags explícitas reemplazan las variables de entorno, que a su vez reemplazan la configuración guardada. En modo de clave de API, selecciona el tenant explícitamente con `--org` o `FP_ORG`.
+En modo de clave de API, la organización guardada por un `fp login` humano se **ignora**, no simplemente se anula — solo se envía un `--org` o `FP_ORG` explícito. No se hereda nada de un inicio de sesión guardado, así que pasa `--org` siempre que la clave pueda actuar para más de una organización. Omitirlo no falla de forma ruidosa: una clave con ámbito de instancia sin `--org` se resuelve en el servidor hacia la organización **predeterminada** y responde con los datos de esa organización, sin ningún error. Ejecuta `fp whoami` primero para confirmar con qué tenant está hablando realmente una clave.
- Las versiones `AGENTEYE_*` de estas variables **no son leídas por `fp`** y nunca lo fueron — la CLI declara `FP_*` (`fp_cli/app.py`), y una variable desconocida no genera un error. Establecer `AGENTEYE_DASHBOARD_URL` no redirige la CLI; se ignora y el comando se ejecuta silenciosamente contra el dashboard guardado.
+ Las variantes `AGENTEYE_*` de estas variables **no son leídas por `fp`** y nunca lo fueron — la CLI declara `FP_*` (`fp_cli/app.py`), y una variable desconocida no es un error. Establecer `AGENTEYE_DASHBOARD_URL` no redirige la CLI; se ignora y el comando se ejecuta silenciosamente contra el panel guardado.
- `AGENTEYE_HOME` y `AGENTEYE_ENVIRONMENT` todavía existen, pero pertenecen al **colector y al SDK de telemetría**, no a esta CLI.
+ `AGENTEYE_HOME` y `AGENTEYE_ENVIRONMENT` aún existen, pero pertenecen al **recolector y al SDK de telemetría**, no a esta CLI.
- Los comandos que eliminan, revocan, suprimen, resuelven o reemplazan configuración solicitan confirmación por defecto. Usa `--yes` solo después de verificar la organización activa y el objetivo.
+ Los comandos que eliminan, revocan, suprimen, resuelven o reemplazan la configuración solicitan confirmación de forma predeterminada. Usa `--yes` solo después de verificar la organización activa y el objetivo.
\ No newline at end of file
diff --git a/docs/es/reference/custom-agents.mdx b/docs/es/reference/custom-agents.mdx
index 2afefeb9b..1a07610f0 100644
--- a/docs/es/reference/custom-agents.mdx
+++ b/docs/es/reference/custom-agents.mdx
@@ -4,45 +4,46 @@ description: "Configuración, el catálogo de eventos, reglas de correlación y
icon: "python"
---
-Qué hace cada parámetro, método y campo. Si es la primera vez que instrumentas, comienza con la guía — esta página es para consultar referencias.
+Qué hace cada ajuste, método y campo. Si es la primera vez que instrumentas, comienza con la guía — esta página es para consultas puntuales.
- Instalación, instrumentación, los métodos de eventos, un ejemplo completo y problemas frecuentes.
+ Instalación, instrumentación, los métodos de evento, un ejemplo práctico y problemas frecuentes.
LangChain, CrewAI, LlamaIndex y Pydantic AI se instrumentan solos con una sola llamada.
-Python 3.10 o superior. Sin dependencias en tiempo de ejecución.
+Python 3.10 o superior, y **cero dependencias en tiempo de ejecución** — una decisión de diseño, no un accidente. El SDK se instala dentro de los procesos de agentes de terceros, así que cualquier dependencia declarada la heredarían ellos también. Un test escanea los módulos principales e inicia un intérprete nuevo para confirmar que ningún framework acaba en `sys.modules`.
-## Instalación
+## Instalar
```bash
pip install failproofai-sdk
```
-El paquete se instala como `failproofai-sdk` y se importa en Python como `failproofai_sdk`. Los extras de framework como `failproofai-sdk[langgraph]` instalan el propio framework; los adaptadores siempre se incluyen en el wheel base.
+El paquete se instala como `failproofai-sdk` y se importa en Python como `failproofai_sdk`. Los extras de framework como `failproofai-sdk[langgraph]` instalan el propio framework; los adaptadores siempre vienen incluidos en el wheel base.
-## Conectar el daemon de Failproof
+## Conectar el demonio de Failproof
- 1. Ve a **Admin → Keys** y crea una clave con `events:add`.
- 2. [Conecta el daemon de Failproof a Cloud](/es/start/setup#connect-a-machine-to-cloud) en la máquina del agente.
- 3. Ejecuta una sesión instrumentada y luego encuentra su ID exacto en **Observe → Events**.
+ 1. Ve a **Administration → Keys** y crea una clave con `events:add`.
+ 2. [Conecta el demonio de Failproof a Cloud](/es/start/setup#connect-failproof-ai-cloud) en la máquina del agente.
+ 3. Ejecuta una sesión instrumentada y luego localiza su ID exacto en **Observe → Events**.
4. Ve a **Observe → Sessions**, selecciona el mismo entorno y abre el trace reconstruido.
- 
+ 
```bash
- failproofai config \
- --connect https://app.befailproof.ai \
- --token
+ export FAILPROOFAI_CLOUD_TOKEN=
+ failproofai config
failproofai config --status
```
+
+ Prefiere la variable de entorno sobre `--token`: un argumento de línea de comandos es legible desde `ps` por cualquier usuario del sistema, y queda registrado en el historial de shell y en los logs de CI.
@@ -60,30 +61,65 @@ failproofai_sdk.configure(
| Argumento | Qué hace |
| --- | --- |
-| `environment` | La etiqueta en cada evento — `production`, `staging`, `prod-eu`. Por defecto es `dev`. |
-| `flush_interval` | Con qué frecuencia el hilo en segundo plano escribe en disco, en segundos. Por defecto es `0.5`. |
-| `base_dir` | Dónde escribir. Por defecto usa el spool del daemon, que es lo que quieres salvo que sepas lo que estás haciendo. |
+| `environment` | La etiqueta en cada evento — `production`, `staging`, `prod-eu`. Por defecto `dev`. |
+| `flush_interval` | Con qué frecuencia escribe el hilo en segundo plano al disco, en segundos. Por defecto `0.5`. |
+| `base_dir` | Dónde escribir. Por defecto `$FAILPROOFAI_HOME/custom-agents`, o en su defecto `~/.failproofai/custom-agents` — el spool que vigila el demonio, que es lo que quieres salvo que sepas lo que haces. |
+
+`configure()` es **solo de palabras clave** — `configure(None, 0.5, "prod")` lanza un `TypeError`. Además valida todos los argumentos antes de aplicar cualquiera de ellos, y lanza `ValueError` si `flush_interval` no es un número finito mayor que cero, por lo que una llamada rechazada deja el SDK exactamente como estaba, sin aplicar cambios parciales.
-También se puede configurar mediante variables de entorno:
+Para configurar mediante variables de entorno:
| Variable | Qué hace |
| --- | --- |
-| `AGENTEYE_ENVIRONMENT` | Define `environment` sin modificar el código, para cuando la etiqueta pertenece al despliegue y no a la aplicación. Un argumento de `configure()` tiene prioridad sobre ella. |
-| `FAILPROOFAI_HOME` | Mueve la raíz de Failproof AI que contiene el spool. |
-| `FAILPROOFAI_SDK_STRICT` | `1` hace que los errores de instrumentación lancen excepciones en lugar de solo registrarse. |
+| `AGENTEYE_ENVIRONMENT` | Establece `environment` sin cambiar el código, para cuando la etiqueta pertenece al despliegue y no a la aplicación. Un argumento de `configure()` tiene prioridad sobre ella. |
+| `FAILPROOFAI_HOME` | Mueve la raíz de Failproof AI donde se almacena el spool. |
+| `FAILPROOFAI_SDK_STRICT` | `1` hace que los errores de instrumentación lancen una excepción en lugar de registrarse. |
| `FAILPROOFAI_SDK_STRICT_INTEGRATIONS` | `1` hace que un problema de compatibilidad con un framework lance una excepción en lugar de advertir y continuar. |
- **No uses comas en `environment`.** El sistema de ingesta divide ese campo por comas para construir sus filtros, y descarta cualquier evento cuya etiqueta contenga una — con lo que toda una ejecución desaparece silenciosamente. Escribe `prod-eu`, no `prod,eu`.
+ **Sin comas en `environment`.** El sistema de ingesta divide ese campo por comas para construir sus filtros, y descarta cualquier evento cuya etiqueta contenga una — así que una ejecución entera desaparece silenciosamente. Escribe `prod-eu`, no `prod,eu`.
- `configure(environment="prod,eu")` lanza una excepción para que lo descubras de inmediato. `AGENTEYE_ENVIRONMENT` no puede lanzar — nadie te está llamando — así que advierte una vez y vuelve a `dev`.
+ `configure(environment="prod,eu")` lanza una excepción para que lo descubras de inmediato. `AGENTEYE_ENVIRONMENT` no puede lanzar — nadie te está llamando — por lo que advierte una vez y vuelve a `dev`.
-Los eventos se encolan en memoria y se escriben en segundo plano cada `flush_interval` segundos, con un flush final al salir del intérprete. Un proceso terminado abruptamente pierde lo que aún no se había escrito.
+Los eventos se encolan en memoria y se escriben en segundo plano cada `flush_interval` segundos, con un flush final al salir del intérprete. Un proceso terminado de forma abrupta pierde lo que aún no se había escrito.
+
+## Scopes
+
+Tres gestores de contexto, cada uno usable con `with` y `async with`:
+
+| Scope | Vincula | Emite |
+| --- | --- | --- |
+| `session()` | Un id de sesión. Lo devuelve | Nada — solo identidad |
+| `agent(name)` | Un id de agente y un `parent_id` inferido del agente que lo contiene | `agent_start` al entrar, `agent_end` al salir |
+| `tool_call(name)` | Nada nuevo — hereda la identidad del contexto que lo contiene | `tool_use` al entrar, `tool_result` al salir |
+
+```python
+with failproofai_sdk.session():
+ with failproofai_sdk.agent("planner"):
+ with failproofai_sdk.tool_call("web_search", input={"q": q}) as t:
+ t.output = search(q)
+```
+
+`tool_call()` asigna por defecto un `uuid4().hex` nuevo a `tool_call_id` y resuelve la identidad una sola vez, al entrar, para que una herramienta que abra su propio scope internamente no haga que el `tool_result` de cierre acabe en un agente distinto. En caso de error emite `tool_result(error="TypeName: msg")` y **ningún evento `error`** — un fallo de herramienta que el bucle captura no es un error a nivel de ejecución, y uno que se propaga se notifica exactamente una vez, por el `agent()` que lo contiene. La cancelación cierra la hoja sin cadena de error.
+
+## Adaptadores
+
+`instrument()` conecta un framework compatible con los scopes anteriores. Sin argumentos detecta automáticamente los frameworks ya importados en el proceso; pasa un nombre para instalar exactamente uno.
+
+```python
+failproofai_sdk.instrument() # todo lo ya importado
+failproofai_sdk.instrument("crewai") # exactamente uno
+failproofai_sdk.uninstrument("crewai") # restaura los atributos originales
+```
+
+Los cuatro nombres son `"langchain"` (que cubre LangGraph, ya que LangGraph usa el gestor de callbacks de langchain-core), `"crewai"`, `"llama_index"` y `"pydantic_ai"`. La importación del framework ocurre dentro de la llamada, que es lo que mantiene `import failproofai_sdk` sin dependencias.
+
+Cada framework tiene su propia página: [LangChain](/es/start/integrations/langchain), [CrewAI](/es/start/integrations/crewai), [LlamaIndex](/es/start/integrations/llamaindex), [Pydantic AI](/es/start/integrations/pydantic-ai).
## Identidad
-Cada evento pertenece a una sesión y a un agente. **Los scopes rellenan ambos**, por lo que rara vez necesitas pasarlos explícitamente:
+Cada evento pertenece a una sesión y a un agente. **Los scopes rellenan ambos**, por lo que raramente necesitas pasarlos:
```python
with failproofai_sdk.session():
@@ -91,32 +127,43 @@ with failproofai_sdk.session():
failproofai_sdk.event.tool_use(tool_name="search", tool_call_id="c1")
```
-Pasar `session_id` o `agent_id` explícitamente sigue funcionando y tiene prioridad. Si no hay ninguno vinculado ni pasado, la llamada lanza `TypeError` en lugar de emitir un evento que Cloud descartaría silenciosamente.
+Pasar `session_id` o `agent_id` explícitamente también funciona y tiene prioridad.
+
+Los dos **no** son simétricos cuando no hay nada vinculado:
+
+| Omitido | Sin nada vinculado |
+| --- | --- |
+| `session_id` | Lanza `TypeError`, en lugar de emitir un evento que Cloud descartaría silenciosamente |
+| `agent_id` | Cae en `main`, por lo que los eventos emitidos dentro de `session()` sin ningún `agent()` alrededor todos se agrupan bajo un único agente llamado `main` |
+
+Inventar un id de sesión dispersaría una ejecución en tantas sesiones como sitios de emisión tenga, que es la razón por la que solo ese lanza.
+
+`session_id` y `agent_id` son también los únicos dos nombres verificados por vacío: un valor no string lanza `TypeError`, y un id vacío o solo con espacios lanza `ValueError`. El servidor *acepta* un id en blanco, por lo que sin esa comprobación todos los eventos enviados con uno quedarían agrupados bajo un id en blanco, aparecerían presentes pero fusionados silenciosamente.
- La identidad viaja en variables de contexto. Sigue las tareas de `asyncio` automáticamente, pero **no** los nuevos hilos — envuelve un worker con `failproofai_sdk.propagate()` o sus eventos quedarán sin asociar.
+ La identidad viaja en variables de contexto. Sigue las tareas de `asyncio` automáticamente, pero **no** los hilos nuevos — envuelve un worker con `failproofai_sdk.propagate()` o sus eventos quedarán sin asociar.
## Catálogo de eventos
-Quince métodos. La mayoría vienen en **pares** — llamas al de apertura, luego al de cierre, y el SDK mide el intervalo.
+Quince métodos. La mayoría vienen en **pares** — un abridor y un cerrador.
-| | Abre | Cierra |
-| --- | --- | --- |
-| **Agentes** | `agent_start` | `agent_end` |
-| | `agent_pause` | `agent_resume` |
-| **Modelos** | `model_request` | `model_response` |
-| **Herramientas** | `tool_use` | `tool_result` |
-| **Hooks** | `hook_triggered` | `hook_completed` |
-| **Humanos** | `human_wait` | `human_input` |
+| | Abre | Cierra | Cronometrado por el SDK |
+| --- | --- | --- | --- |
+| **Agentes** | `agent_start` | `agent_end` | No |
+| | `agent_pause` | `agent_resume` | Sí |
+| **Modelos** | `model_request` | `model_response` | No — correlacionado en Cloud |
+| **Herramientas** | `tool_use` | `tool_result` | Sí |
+| **Hooks** | `hook_triggered` | `hook_completed` | Sí |
+| **Humanos** | `human_wait` | `human_input` | Sí |
Tres son independientes: `error`, `human_pause`, `human_interrupt`.
-
+
-Cada método también acepta `session_id` y `agent_id`, que los scopes rellenan por ti. Cualquier campo que quede como `None` se omite en lugar de enviarse como JSON `null`, y todos los métodos devuelven `None`.
+Cada método también acepta `session_id` y `agent_id`, que los scopes rellenan por ti. Cualquier valor que sea `None` se descarta en lugar de enviarse como JSON `null`, y todos los métodos devuelven `None`.
-| Método | Obligatorio | Opcional |
+| Método | Requerido | Opcional |
| --- | --- | --- |
| `agent_start` | — | `goal`, `parent_id` |
| `agent_end` | — | `outcome`, `summary` |
@@ -137,32 +184,35 @@ Cada método también acepta `session_id` y `agent_id`, que los scopes rellenan
- Para marcar una ejecución como fallida, `outcome` debe ser uno de `failed`, `error`, `timeout` o `rejected`. Cualquier otro valor — incluido el casi correcto `"failure"` — se considera un éxito.
+ Para marcar una ejecución como fallida, `outcome` debe ser uno de `failed`, `error`, `timeout` o `rejected`. Cualquier otro valor — incluyendo el parecido `"failure"` — se cuenta como éxito.
## Emparejamiento y duración
-**Una regla: dale al evento de cierre el mismo id que a su apertura.** Eso es lo que los empareja y lo que permite al SDK medir el intervalo.
+**Una regla: dale al evento de cierre el mismo id que a su abridor.** Eso es lo que los empareja y lo que permite al SDK medir el intervalo.
-| Par | Se empareja por |
-| --- | --- |
-| `tool_use` → `tool_result` | `tool_call_id` |
-| `hook_triggered` → `hook_completed` | `hook_id` |
-| `agent_pause` → `agent_resume` | `pause_id` |
-| `human_wait` → `human_input` | `input_id` |
-| `model_request` → `model_response` | `request_id` |
+| Par | Se empareja por | Clave de seguimiento |
+| --- | --- | --- |
+| `tool_use` → `tool_result` | `tool_call_id` | `tool:{session_id}:{tool_call_id}` |
+| `hook_triggered` → `hook_completed` | `hook_id` | `hook:{session_id}:{hook_id}` |
+| `agent_pause` → `agent_resume` | `pause_id` | `pause:{session_id}:{pause_id}` |
+| `human_wait` → `human_input` | `input_id` | `human:{session_id}:{input_id}` |
-**No pases `duration_ms` manualmente.** El SDK lo mide, y pasarlo lanza `ValueError`.
+La clave tiene como espacio de nombres la sesión, que es lo que hace que ambos casos límite siguientes sean ciertos.
-La única excepción es `model_response`, donde solo tú conoces la latencia real del proveedor. Pasa un número entero de milisegundos — un float lanza una excepción, porque la columna es un entero de 32 bits y de otro modo quedaría vacía.
+**No pases `duration_ms` tú mismo** en esos cuatro cerradores. El SDK lo mide, y pasarlo lanza `ValueError`.
+
+
+ `model_request` y `model_response` son un par que Cloud correlaciona mediante `request_id`. El SDK no los rastrea ni mide nada localmente, por eso `model_response` es el único evento que acepta `duration_ms` de tu parte. Pasa un número entero de milisegundos — un float lanza una excepción, porque la columna es un entero de 32 bits y de lo contrario llegaría vacía.
+
-- **Los ids solo necesitan ser únicos por tipo y por sesión.** Una llamada a una herramienta y un hook pueden compartir uno; dos sesiones ejecutándose a la vez pueden reutilizar los mismos ids sin colisionar.
-- **No están limitados al ámbito de un agente.** Un par abierto bajo un agente y cerrado bajo otro sigue emparejándose — que es el caso normal en código multi-agente.
-- **`request_id` es opcional pero recomendado.** Sin él, los eventos de modelo se emparejan en el orden en que llegan, por lo que dos llamadas concurrentes en el mismo agente pueden emparejarse incorrectamente.
+- **Los ids solo necesitan ser únicos por tipo y por sesión.** Una llamada a herramienta y un hook pueden compartir uno; dos sesiones que corren a la vez pueden reutilizar los mismos ids sin colisiones.
+- **No están acotados a un agente.** Un par abierto en un agente y cerrado en otro sigue emparejándose — que es el caso habitual en código multiagente.
+- **`request_id` es opcional pero recomendado.** Sin él, los eventos de modelo se emparejan en el orden en que llegan, por lo que dos llamadas concurrentes en el mismo agente pueden emparejarse mal.
- **Un par dividido entre procesos** sigue emparejándose en Cloud, pero el SDK no puede medirlo — ninguno de los dos procesos vio ambas mitades.
-- **Como máximo 10 000 aperturas esperan un cierre a la vez.** A partir de ahí se descarta la más antigua, para que una fuga no crezca sin límite.
+- **Como máximo 10 000 abridores esperan un cerrador a la vez.** A partir de ahí se descarta el más antiguo, para que una fuga no crezca sin límite.
@@ -177,21 +227,42 @@ failproofai_sdk.event.tool_use(
)
```
-Usa tipos JSON si quieres consultarlos más adelante. Cualquier otra cosa — un UUID, un datetime, un `Decimal`, un set, bytes, un objeto de modelo — se almacena como cadena de texto.
+Prefiere tipos JSON si quieres consultarlos más adelante. Cualquier otro tipo — un UUID, un datetime, un `Decimal`, un set, bytes, un objeto de modelo — se almacena como string.
- **Pon prefijo a los nombres de tus campos.** Los extras se aplican al final, por lo que un campo llamado `model`, `tool_name` o `outcome` sobreescribirá silenciosamente el real. Los adaptadores de framework usan `fw_`; haz lo mismo y nada podrá colisionar.
+ **Once nombres son la excepción y lanzan en lugar de convertir a string.** El sistema de ingesta eleva cada uno a una columna tipada y almacena `NULL` para cualquier otra cosa, con un `200 OK`, de forma silenciosa — por eso el SDK los rechaza en el lugar de la llamada en su lugar.
+
+ | Nombres | Deben ser |
+ | --- | --- |
+ | `duration_ms`, `input_tokens`, `output_tokens` | Un `int` en el rango sin signo de 32 bits |
+ | `tool_name`, `tool_call_id`, `hook_name`, `hook_id`, `input_id`, `pause_id`, `error_type`, `model` | Un string — `None` lanza `ValueError`, cualquier valor no string lanza `TypeError` |
- Esta es también la razón por la que un campo opcional mal escrito nunca genera un error — simplemente se convierte en un nuevo campo personalizado. Si falta un campo estándar en Cloud, comprueba primero la ortografía.
+ Esto aplica tanto si el valor llega como parámetro con nombre como si es uno de tus propios extras. `model_response` valida sus `input_tokens` y `output_tokens` a la entrada por la misma razón — son los más propensos a llenarse directamente desde el objeto de uso de un proveedor.
+
+
+
+ **Añade un prefijo a tus nombres de campo.** Los extras se aplican al final, así que un campo llamado `model`, `tool_name` o `outcome` sobrescribe silenciosamente el real. Los adaptadores de framework usan `fw_`; haz lo mismo y nada puede colisionar.
+
+ Por eso también un campo opcional mal escrito nunca lanza error — simplemente se convierte en un nuevo campo personalizado. Si falta un campo estándar en Cloud, comprueba primero la ortografía.
Estos cinco nombres están reservados y se rechazan directamente: `timestamp`, `session_id`, `agent_id`, `type`, `environment`.
-## Entrega y verificación
+## Otras exportaciones
+
+| Exportación | Qué es |
+| --- | --- |
+| `current()` | La identidad vinculada en este momento, como un objeto `Identity`. `current().session_id is None` significa que no hay nada vinculado |
+| `Identity` | `session_id`, `agent_id`, `parent_id`, `depth`. Nunca es `None` en sí mismo — comprueba los campos |
+| `propagate(fn)` | Envuelve `fn` para que se ejecute con la identidad vinculada en el momento del envoltorio. Necesario para `Thread`, `pool.submit`, `pool.map`, `run_in_executor` |
+| `_writer.flush_now()` | Vacía y escribe las entradas en búfer inmediatamente, para un test o un flush forzado antes de salir |
+| `__version__` | La versión del SDK instalada |
+
+## Entregar y verificar
- En **Observe → Events**, verifica que `agent_start` exista primero y `agent_end` exista al final. Luego abre **Observe → Sessions** y confirma que los eventos de modelo, herramienta, humano, hook y error aparecen en el orden previsto. Usa el ID de sesión como clave principal de resolución de problemas.
+ En **Observe → Events**, verifica que `agent_start` existe primero y `agent_end` existe al final. Luego abre **Observe → Sessions** y confirma que los eventos de modelo, herramienta, humano, hook y error aparecen en el orden esperado. Usa el ID de sesión como clave principal para la resolución de problemas.
```bash
@@ -203,14 +274,14 @@ Estos cinco nombres están reservados y se rechazan directamente: `timestamp`, `
-Si Cloud está vacío, inspecciona `$FAILPROOFAI_HOME/custom-agents/events`; en caso contrario, `~/.failproofai/custom-agents/events`. Los archivos JSONL confirman la emisión del SDK; un spool creciente apunta a configuración del daemon o entrega, mientras que un spool vacío apunta a instrumentación o ciclo de vida del proceso.
+Si Cloud está vacío, inspecciona `$FAILPROOFAI_HOME/custom-agents/events`, o en su defecto `~/.failproofai/custom-agents/events`. Los archivos JSONL confirman la emisión del SDK; un spool que crece apunta a configuración o entrega del demonio, mientras que un spool vacío apunta a instrumentación o tiempo de vida del proceso.
- Inspecciona el spool solo cuando el daemon esté detenido. Mientras se ejecuta, recoge y elimina cada lote en cuestión de milisegundos, por lo que un listado de directorio compite con el colector y mostrará muchos menos eventos de los que se emitieron.
+ Inspecciona el spool solo cuando el demonio está detenido. Mientras se ejecuta, recolecta y elimina cada lote en cuestión de milisegundos, así que un listado de directorio compite con el recolector y mostrará muchos menos eventos de los que se emitieron.
## Prevenir fallos en un runtime personalizado
-Usa los hallazgos de auditoría y los traces vinculados para definir la acción no segura, la evidencia requerida y la respuesta esperada. Una integración de enforcement personalizada debe exponer la acción antes de su ejecución, pasar su entrada estructurada al motor de políticas y aplicar la decisión resultante: allow, instruct o deny.
+Usa los hallazgos de auditoría y los traces vinculados para definir la acción insegura, la evidencia requerida y la respuesta prevista. Una integración de cumplimiento personalizada debe exponer la acción antes de la ejecución, pasar su entrada estructurada al motor de políticas y aplicar la decisión resultante de allow, instruct o deny.
-[Contacta con Failproof AI](mailto:support@befailproof.ai) y te ayudaremos a mapear los límites de modelo, herramienta y ciclo de vida de tu runtime a los hooks de política, y luego a validar la integración contigo.
\ No newline at end of file
+[Contacta con Failproof AI](mailto:support@befailproof.ai) y te ayudaremos a mapear los límites de modelo, herramienta y ciclo de vida de tu runtime a los hooks de política, para luego validar la integración contigo.
\ No newline at end of file
diff --git a/docs/es/reference/evaluator-sdk.mdx b/docs/es/reference/evaluator-sdk.mdx
index 0bd752a5c..0a80bd54f 100644
--- a/docs/es/reference/evaluator-sdk.mdx
+++ b/docs/es/reference/evaluator-sdk.mdx
@@ -1,28 +1,52 @@
---
-title: "SDK de Evaluador"
+title: "Evaluator SDK"
description: "Construye un servicio que puntúe sesiones de Failproof AI de forma síncrona o asíncrona."
icon: "gauge"
---
-Un evaluador recibe una sesión de agente completada y devuelve las señales de calidad que te interesan: puntuaciones numéricas, una explicación para cada puntuación y un resumen opcional. Failproof AI almacena estos resultados junto al rastro y los representa gráficamente a lo largo de agentes y entornos.
+Un evaluador recibe una sesión de agente completada y devuelve las señales de calidad que te importan: puntuaciones numéricas, una explicación para cada puntuación y un resumen opcional. Failproof AI almacena estos resultados junto al trace y los representa gráficamente a lo largo de agentes y entornos.
+
+El paquete es `agenteye-evaluator`, importado como `agenteye_evaluator`. Requiere Python 3.10 o superior y depende de `fastapi`, `pydantic>=2` y `structlog`.
+
+
+ **`pip install agenteye-evaluator` desde PyPI público no es la ruta de instalación correcta.** El paquete se publica únicamente como artefacto de versión privada, y el nombre no está registrado en PyPI público — una instalación sin cualificación podría incorporar el paquete de un tercero al servicio que lee tus transcripciones de producción. Usa la escalera indicada a continuación.
+
## Configurar un evaluador
-
- Instala el SDK y el servidor necesario para ejecutarlo.
+
+ Recorre esta escalera en orden y detente en el primer peldaño que aplique.
+
+ Dentro del monorepo, donde existe un directorio `evaluator-sdk/`:
+
+ ```bash
+ pip install ./evaluator-sdk
+ ```
+
+ En caso contrario, desde la versión privada. Las wheels están adjuntas a GitHub Releases en `agenteye-enterprise/releases`, etiquetadas como `evaluator-sdk/v`, y necesitas `gh auth login` más acceso a ese repositorio:
```bash
- pip install failproofai-sdk uvicorn
+ gh release download evaluator-sdk/v \
+ --repo agenteye-enterprise/releases --pattern '*.whl'
+ pip install ./agenteye_evaluator-*.whl
+ ```
+
+ Si ninguna de las opciones funciona, pide la wheel a tu contacto de Failproof AI en lugar de improvisar una instalación.
+
+ `uvicorn` no es una dependencia de forma deliberada, así que instala el servidor por separado:
+
+ ```bash
+ pip install 'uvicorn[standard]'
```
- Crea `evaluator.py`. Este ejemplo comprueba si una sesión contiene alguna llamada a herramienta fallida.
+ Crea `evaluator.py`. Este ejemplo comprueba si una sesión contiene llamadas a herramientas fallidas.
```python
import os
- from failproofai.evaluator import Evaluator, EvalResponse
+ from agenteye_evaluator import Evaluator, EvalResponse
app = Evaluator(token=os.environ.get("EVALUATOR_TOKEN"))
@@ -41,10 +65,16 @@ Un evaluador recibe una sesión de agente completada y devuelve las señales de
reasoning={"tool_reliability": f"{tool_errors} tool errors"},
)
```
+
+ El constructor completo es `Evaluator(token: str | None = None, *, title: str = "AgentEye Evaluator")`. El token se compara con `hmac.compare_digest`; `title` es el título de la aplicación FastAPI y es meramente cosmético.
+
+
+ `token=None` desactiva la autenticación por completo. Eso está bien en un ordenador local, pero es una brecha en producción, donde el endpoint recibe transcripciones completas de sesiones.
+
-
- Establece un token compartido, inicia el evaluador y confirma que su endpoint de salud responde.
+
+ Define un token compartido, arranca el evaluador y confirma que su endpoint de salud responde.
```bash
export EVALUATOR_TOKEN=
@@ -56,30 +86,32 @@ Un evaluador recibe una sesión de agente completada y devuelve las señales de
```bash
curl http://127.0.0.1:8080/health
```
+
+ Cada decorador devuelve la función sin modificarla, por lo que `evaluate(req)` sigue siendo invocable directamente. Eso es lo que hace que las pruebas unitarias sean sencillas — construye un `EvalRequest` y llama al handler, sin necesidad de HTTP.
## Conectar el evaluador a Failproof AI
1. Despliega el evaluador en una URL HTTPS accesible por Failproof AI Cloud.
-2. Configura `EVALUATOR_ENDPOINT` con esa URL y establece `EVALUATOR_TOKEN` con el mismo token utilizado por el evaluador. Para Cloud gestionado, contacta con [support@befailproof.ai](mailto:support@befailproof.ai) para configurar la conexión.
+2. Configura `EVALUATOR_ENDPOINT` con esa URL y establece `EVALUATOR_TOKEN` con el mismo token que usa el evaluador. Para el Cloud gestionado, contacta con [support@befailproof.ai](mailto:support@befailproof.ai) para configurar la conexión.
3. Ejecuta una evaluación y confirma que sus puntuaciones aparecen en Failproof AI.
-
+
Abre una sesión completada en **Observe → Sessions** y selecciona **Run evaluation** si no se evaluó automáticamente. Revisa el estado, las puntuaciones, el razonamiento y el resumen en el panel **Evaluation** de la sesión.
- Usa **Observe → Evaluations** para comparar puntuaciones entre agentes o entornos. Usa **Observe → Metrics** para mediciones de latencia, coste, tokens y otros valores numéricos.
+ Usa **Observe → Evaluations** para comparar puntuaciones entre agentes o entornos. Usa **Observe → Metrics** para medir latencia, coste, tokens y otras métricas numéricas.
- Comienza con una sola sesión para confirmar que el evaluador devolvió las claves de puntuación esperadas y un razonamiento útil para esa ejecución específica.
+ Comienza con una sesión para confirmar que el evaluador devolvió las claves de puntuación esperadas y un razonamiento útil para esa ejecución específica.
- 
+ 
- Una vez que los resultados individuales parezcan correctos, usa el panel de evaluación para comparar esas puntuaciones a lo largo del tiempo y entre agentes o entornos.
+ Una vez que los resultados individuales se vean correctos, usa el dashboard de evaluación para comparar esas puntuaciones a lo largo del tiempo y entre agentes o entornos.
- 
+ 
- Un gráfico saludable debe usar nombres de puntuación estables; cambiar una clave crea una serie separada.
+ Un gráfico saludable debería usar nombres de puntuación estables; cambiar una clave crea una serie separada.
```bash
@@ -89,11 +121,32 @@ Un evaluador recibe una sesión de agente completada y devuelve las señales de
-Para una instancia de Cloud autohospedada, la evaluación automática está deshabilitada hasta que se establezca `EVALUATOR_ENDPOINT` en el proceso del servidor. Reinicia el servidor después de cambiar las variables de entorno del evaluador.
+Para una instancia de Cloud autohospedada, la evaluación automática está desactivada hasta que se establezca `EVALUATOR_ENDPOINT` en el proceso del servidor. Reinicia el servidor tras cambiar las variables de entorno del evaluador.
-El servicio expone `GET /health`, `GET /config`, `POST /evaluate` y opcionalmente `GET /evaluate/{job_id}`. Devuelve `JobPending` para trabajo asíncrono y registra `@app.job_lookup` para que Failproof AI pueda consultarlo periódicamente.
+## Decoradores y rutas
+
+| Decorador | Ruta | Obligatorio |
+| --- | --- | --- |
+| `@app.evaluator` | `POST /evaluate` | Sí. |
+| `@app.job_lookup` | `GET /evaluate/{job_id}` | Solo si en algún momento devuelves `JobPending`. Sin él, los sondeos reciben un 404. |
+| `@app.config` | `GET /config` | No, pero obligatorio para cualquier sesión que nunca emita `agent_end` — ver más abajo. |
+
+Cada decorador acepta una función síncrona o asíncrona, la devuelve sin modificarla y lanza `ValueError` si la registras dos veces.
+
+| Ruta | Autenticación |
+| --- | --- |
+| `GET /health` | Abierta incluso cuando se ha configurado un token. |
+| `POST /evaluate` | Bearer. |
+| `GET /evaluate/{job_id}` | Bearer. |
+| `GET /config` | Bearer. |
-Cuando hay un token configurado, todas las rutas excepto health requieren el mismo token bearer que Failproof AI envía como `EVALUATOR_TOKEN`.
+La coincidencia del esquema bearer no distingue mayúsculas de minúsculas. `GET /config` sin `@app.config` registrado sigue devolviendo `{"default_poll_interval_secs": 10}`, por lo que el SDK siempre anuncia una cadencia.
+
+El SDK limita el cuerpo de las solicitudes de evaluación a 25 MiB, comprobado contra `Content-Length` antes de leer el cuerpo. Superar el límite devuelve un 413, que es un 4xx y por tanto es terminal. Los campos de solicitud desconocidos se ignoran para que los servicios sigan siendo compatibles a medida que el contrato de eventos crece.
+
+
+ Registrar `@app.config` con `inactivity_timeout_secs` es lo que habilita el escáner de respaldo. Sin él, una sesión que nunca emitió `agent_end` — cualquier sesión abandonada, que haya fallado o que siga inactiva — nunca se encola para evaluación. Los valores de cero o menores se descartan.
+
## Tipos del SDK
@@ -105,22 +158,55 @@ Cuando hay un token configurado, todas las rutas excepto health requieren el mis
| `JobPending` | `job_id`, `next_poll_secs` |
| `EvaluatorConfig` | `inactivity_timeout_secs`, `default_poll_interval_secs` |
-## Decoradores y rutas
+## Campos de solicitud y respuesta
-| Decorador | Ruta | Obligatorio |
+| Campo | Tipo | Notas |
| --- | --- | --- |
-| `@app.evaluator` | `POST /evaluate` | Sí |
-| `@app.job_lookup` | `GET /evaluate/{job_id}` | Al devolver `JobPending` |
-| `@app.config` | `GET /config` | No |
+| `EvalRequest.schema_version` | `str` | Actualmente `"1"`. |
+| `session_id`, `agent_id`, `environment` | `str` | Identidad de la sesión y entorno. |
+| `started_at` | `datetime` | Marca de tiempo del primer evento. |
+| `ended_at` | `datetime \| None` | La marca de tiempo del evento `agent_end`, no «cuándo se detuvo la sesión». Las sesiones encoladas por el escáner de inactividad nunca tuvieron un `agent_end` y llegan como `None`. |
+| `events` | `list[AgentEvent]` | Flujo completo de eventos ordenados. |
+| `AgentEvent.id` | `int` | Identificador de fila del evento en el backend. |
+| `AgentEvent.ts` | `datetime` | Marca de tiempo del evento. |
+| `AgentEvent.event_type` | `str` | Familia del evento, como `tool_use`. |
+| `AgentEvent.payload` | `dict[str, Any]` | El JSON completo del evento aplanado, de modo que los campos específicos del evento se sitúan en el nivel superior y `payload["type"]` duplica `event_type`. |
+| `EvalResponse.scores` | `dict[str, float] \| None` | Dimensiones numéricas representadas en las evaluaciones. |
+| `EvalResponse.reasoning` | `dict[str, str] \| None` | Explicaciones por puntuación; las claves deben reflejar `scores`. |
+| `EvalResponse.summary` | `str \| None` | Narrativa general de la evaluación. Truncada en 8192 bytes en el servidor; `last_error` en 2048. |
+
+La serialización usa `exclude_none`, por lo que los campos no establecidos se omiten en lugar de enviarse como `null`.
+
+
+ Derivar una duración de `ended_at` falla con datos reales. Cada sesión que el escáner de inactividad encola llega con `ended_at` establecido como `None`. Compruébalo antes de hacer la resta.
+
+
+## Formas de retorno
+
+Tu handler puede devolver exactamente una de tres cosas. Cualquier otra cosa es un `TypeError`, que se manifiesta como un 500.
+
+| Retorno | `status` en el cable | Terminal |
+| --- | --- | --- |
+| `EvalResponse(...)` | `done` | Sí — puntuaciones almacenadas. |
+| `JobPending(job_id=...)` | `pending` | No — el servidor sondea. |
+| Un `dict` con `status` en `done`, `pending` o `error` | El indicado | `error` es terminal. |
+
+El estado `error` no tiene un modelo tipado. Para fallar de forma terminal debes devolver un dict, y `error` debe ser un `str` no vacío:
+
+```python
+return {"status": "error", "error": "model service unavailable"}
+```
-El SDK limita el cuerpo de las solicitudes de evaluación a 25 MiB. Los campos desconocidos de la solicitud se ignoran, de modo que los servicios permanecen compatibles a medida que el contrato de eventos evoluciona.
+
+ **Lanzar una excepción no es reportar un error.** Una excepción se convierte en un 500 genérico cuyo cuerpo es `"evaluator raised an internal error"` — el texto de tu excepción nunca llega al servidor, y el servidor trata cada 5xx como transitorio y lo reintenta. Devuelve el dict de `error` cuando quieras que el fallo quede registrado.
+
## Devolver trabajo asíncrono
-Usa `JobPending` cuando la evaluación no puede completarse dentro de una sola solicitud. El ID de trabajo es opaco para Failproof AI y debe permanecer resoluble por tu servicio hasta que el resultado sea recogido o expire el tiempo de espera del servidor.
+Usa `JobPending` cuando la evaluación no pueda completarse dentro de una sola solicitud. El ID de trabajo es opaco para Failproof AI y debe permanecer resoluble por tu servicio hasta que se recoja el resultado o expire el tiempo límite del servidor.
```python
-from failproofai.evaluator import EvalRequest, EvalResponse, Evaluator, JobPending
+from agenteye_evaluator import EvalRequest, EvalResponse, Evaluator, JobPending
app = Evaluator(token="shared-secret")
@@ -141,50 +227,38 @@ def lookup(job_id: str):
)
```
-La cadencia de consulta se selecciona en este orden: `JobPending.next_poll_secs`, `EvaluatorConfig.default_poll_interval_secs` y luego el `EVALUATOR_POLLING_INTERVAL_SECS` del servidor. Los valores se limitan entre 1 segundo y 1 hora. El límite de tiempo de consulta por reloj del servidor es de una hora por defecto.
-
-## Campos de solicitud y respuesta
-
-| Campo | Tipo | Notas |
-| --- | --- | --- |
-| `EvalRequest.schema_version` | `str` | Actualmente `"1"`. |
-| `session_id`, `agent_id`, `environment` | `str` | Identidad de sesión y entorno. |
-| `started_at` | `datetime` | Marca de tiempo del primer evento. |
-| `ended_at` | `datetime \| None` | Presente cuando la sesión emitió un evento de fin. |
-| `events` | `list[AgentEvent]` | Flujo de eventos completo y ordenado. |
-| `AgentEvent.id` | `int` | Identificador de fila del evento en el backend. |
-| `AgentEvent.ts` | `datetime` | Marca de tiempo del evento. |
-| `AgentEvent.event_type` | `str` | Familia del evento, como `tool_use`. |
-| `AgentEvent.payload` | `dict[str, Any]` | Carga útil completa del evento. |
-| `EvalResponse.scores` | `dict[str, float] \| None` | Dimensiones numéricas representadas en las evaluaciones. |
-| `EvalResponse.reasoning` | `dict[str, str] \| None` | Explicaciones por puntuación; las claves deben coincidir con `scores`. |
-| `EvalResponse.summary` | `str \| None` | Narrativa general de la evaluación. |
+La cadencia de sondeo se selecciona en este orden: `JobPending.next_poll_secs`, `EvaluatorConfig.default_poll_interval_secs` y luego el `EVALUATOR_POLLING_INTERVAL_SECS` del servidor. Los valores se limitan entre 1 segundo y 1 hora. El límite de tiempo de sondeo por reloj del servidor es de una hora por defecto, tras la cual el resultado se registra como `timeout`.
-## Configuración para el operador del servidor
+## Configuración para operadores del servidor
-La evaluación automática afecta a todo el despliegue y permanece deshabilitada cuando `EVALUATOR_ENDPOINT` no está definido.
+La evaluación automática se aplica a todo el despliegue y permanece desactivada cuando `EVALUATOR_ENDPOINT` no está definido.
-| Variable | Valor por defecto | Propósito |
+| Variable | Valor predeterminado | Propósito |
| --- | --- | --- |
| `EVALUATOR_ENDPOINT` | no definido | URL base del servicio evaluador. |
| `EVALUATOR_TOKEN` | no definido | Token bearer compartido con `Evaluator(token=...)`. |
-| `EVALUATOR_WORKERS` | `2` | Trabajadores del despachador concurrentes. |
+| `EVALUATOR_WORKERS` | `2` | Workers del despachador concurrentes. |
| `EVALUATOR_CLAIM_BATCH` | `4` | Sesiones reclamadas por pasada del despachador. |
-| `EVALUATOR_POLLING_INTERVAL_SECS` | `10` | Cadencia de consulta asíncrona de reserva. |
-| `EVALUATOR_REQUEST_TIMEOUT_MS` | `30000` | Tiempo de espera del evaluador por solicitud. |
-| `EVALUATOR_MAX_ATTEMPTS` | `5` | Intentos de entrega antes de fallo terminal. |
+| `EVALUATOR_POLLING_INTERVAL_SECS` | `10` | Cadencia de sondeo asíncrono de respaldo. |
+| `EVALUATOR_REQUEST_TIMEOUT_MS` | `30000` | Tiempo límite por solicitud al evaluador, aplicado al POST y a cada sondeo. |
+| `EVALUATOR_MAX_ATTEMPTS` | `5` | Intentos de entrega antes del fallo terminal. |
| `EVALUATOR_CONFIG_REFRESH_SECS` | `300` | Cadencia de actualización para `/config`. |
-| `EVALUATOR_MAX_POLL_DURATION_SECS` | `3600` | Tiempo máximo de consulta asíncrona por reloj. |
+| `EVALUATOR_MAX_POLL_DURATION_SECS` | `3600` | Tiempo máximo de sondeo asíncrono por reloj. |
+
+Dos consecuencias de esa tabla merecen señalarse explícitamente:
+
+- **Workers multiplicado por claim batch es tu concurrencia.** Con los valores predeterminados, eso son 8 llamadas concurrentes a tu endpoint en todo el despliegue. Dimensiona el servicio para ese número, no para uno solo.
+- **4xx es terminal y 5xx, 429 o un fallo de transporte se reintenta** con backoff hasta `EVALUATOR_MAX_ATTEMPTS`. Un token incorrecto devuelve un 401, por lo que falla de inmediato en lugar de reintentar — eso es lo primero que hay que comprobar cuando no llega nada.
-El servidor también puede restringir qué organizaciones usan el evaluador global del despliegue. Trata los cambios en el endpoint, el token, los reintentos y las restricciones por organización como configuración del operador, y reinicia o rota el servidor tras modificarlos.
+El servidor también puede restringir qué organizaciones utilizan el evaluador global del despliegue. Trata los cambios de endpoint, token, reintentos y filtro de organizaciones como configuración de operador, y reinicia o rota el servidor tras modificarlos.
## Seguridad y operaciones
-- Coloca el evaluador detrás de HTTPS cuando el tráfico cruce un límite de red de confianza.
-- Configura un token bearer no vacío y mantenlo idéntico en ambos servicios.
-- No registres en logs el token ni los prompts sensibles completos de las cargas útiles de las solicitudes.
-- Haz que los manejadores síncronos sean idempotentes; los reintentos pueden repetir una solicitud.
-- Persiste el estado de los trabajos asíncronos fuera de la memoria del proceso en producción.
-- Devuelve claves de puntuación estables. Renombrar una clave crea una nueva serie en el gráfico en lugar de modificar la anterior.
+- Pon el evaluador detrás de HTTPS cuando el tráfico cruce un límite de red de confianza.
+- Configura un token bearer no vacío y mantenlo idéntico en ambos servicios. `token=None` acepta cualquier llamante.
+- No registres en logs el token ni los prompts sensibles completos de los payloads de solicitud. El SDK no lo hace: los fallos de validación devuelven 422 sin hacer eco del payload, los 500 nunca hacen eco del texto de excepción, y el token no aparece en ningún campo de log.
+- Haz que los handlers síncronos sean idempotentes; los reintentos pueden repetir una solicitud.
+- Persiste el estado de trabajos asíncronos fuera de la memoria del proceso en producción.
+- Devuelve claves de puntuación estables. Renombrar una clave crea una nueva serie en el gráfico en lugar de modificar la antigua.
-El SDK emite logs de ciclo de vida estructurados como `eval received`, `eval responded`, `job lookup`, `config returned`, `auth rejected` y excepciones de manejadores. No configura manejadores de logging; utiliza la configuración de logging de la aplicación anfitriona.
\ No newline at end of file
+El SDK emite logs de ciclo de vida estructurados como `eval received`, `eval responded`, `job lookup`, `config returned`, `auth rejected` y excepciones del handler. Las respuestas de `/config` etiquetan `source="user"` frente a `source="default"`, para que puedas saber si tu `@app.config` fue detectado. No configura handlers de logging; usa la configuración de logging de la aplicación anfitriona.
\ No newline at end of file
diff --git a/docs/es/reference/events-and-configuration.mdx b/docs/es/reference/events-and-configuration.mdx
index 653065124..fdf6c9036 100644
--- a/docs/es/reference/events-and-configuration.mdx
+++ b/docs/es/reference/events-and-configuration.mdx
@@ -4,38 +4,49 @@ description: "Referencia del modelo de eventos, entornos, almacenamiento local y
icon: "list-tree"
---
+## Dos vocabularios de eventos
+
+Failproof AI maneja dos tipos distintos de eventos, y sus nombres nunca se solapan.
+
+| Vocabulario | Producido por | Los nombres se parecen a | Referencia |
+| --- | --- | --- | --- |
+| Eventos de telemetría | `failproofai-sdk`, desde dentro de tu agente | `tool_use`, `tool_result`, `hook_triggered`, `model_response` | [Python SDK](/es/reference/custom-agents) |
+| Eventos de hook | El harness del agente, normalizado por failproofai | `PreToolUse`, `PostToolUse`, `Stop`, `UserPromptSubmit` | [Políticas personalizadas](/es/reference/policy-sdk#choose-the-event) |
+
+El lado de hooks normaliza los nombres de eventos propios de cada harness en 29 tipos canónicos. El lado de telemetría tiene 15 métodos y su propio contrato de campos. `hook_triggered` y `PreToolUse` no son dos formas de escribir lo mismo.
+
## Familias de eventos
- Inicio, fin, pausa y reanudación del agente
- Solicitud y respuesta del modelo
-- Uso de herramienta y resultado
-- Hook activado y completado
-- Espera, entrada, pausa e interrupción humana
+- Uso y resultado de herramienta
+- Hook disparado y completado
+- Espera humana, entrada, pausa e interrupción
- Errores explícitos
-Cada evento incluye una marca de tiempo, ID de sesión, ID de agente, tipo de evento y entorno. Los campos específicos del evento contienen datos sobre el modelo, la herramienta, la correlación, el resultado, el contenido, la duración o el error.
+Cada evento incluye un timestamp, ID de sesión, ID de agente, tipo de evento y entorno. Los campos específicos de cada evento contienen datos de modelo, herramienta, correlación, resultado, contenido, duración o error.
## Inspeccionar un contrato de evento
-
+
1. Abre **Observe → Events**.
- 2. Establece una ventana de tiempo reducida y filtra por entorno, agente y tipo de evento.
- 3. Selecciona un evento para inspeccionar sus campos normalizados y el payload sin procesar; luego abre su sesión para ver el contexto de ejecución.
- 4. Si falta una duración emparejada, verifica que los eventos de inicio y finalización usen el mismo ID de correlación.
+ 2. Establece una ventana de tiempo corta y filtra por entorno, agente y tipo de evento.
+ 3. Selecciona un evento para inspeccionar sus campos normalizados y payload sin procesar, luego abre su sesión para ver el contexto de ejecución.
+ 4. Si falta una duración pareada, verifica que los eventos de inicio y finalización usen el mismo ID de correlación.
- Usa el flujo de Events para acotar los datos a una ejecución de agente e inspeccionar los campos de evento normalizados.
+ Usa el flujo de eventos para acotar los datos a una ejecución de agente e inspeccionar los campos de evento normalizados.
- 
+ 
- Luego sigue el evento hasta su sesión. El trazado muestra qué ocurrió inmediatamente antes y después, lo cual es necesario cuando el payload por sí solo es ambiguo.
+ Luego sigue el evento hasta su sesión. El trace muestra qué ocurrió justo antes y después, lo cual es necesario cuando el payload por sí solo resulta ambiguo.
- 
+ 
- Compara los IDs de correlación y las marcas de tiempo en ambas vistas cuando falte un evento emparejado o una duración.
+ Compara los IDs de correlación y los timestamps en ambas vistas cuando falte un evento pareado o una duración.
- Descubre los valores de filtro válidos y luego obtén los payloads completos de los eventos de una sesión:
+ Descubre los valores de filtro válidos y luego obtén los payloads completos de eventos para una sesión:
```bash
fp list event_types
@@ -47,38 +58,109 @@ Cada evento incluye una marca de tiempo, ID de sesión, ID de agente, tipo de ev
--full
```
- Usa `fp --json events ... --fields ts,event_type,session_id,payload` para una inspección legible por máquina.
+ Usa `fp --json events ... --fields ts,event_type,session_id,payload` para inspección legible por máquinas.
## Campos reservados del SDK
-No uses `timestamp`, `session_id`, `agent_id`, `type` ni `environment` como campos personalizados del SDK de Python. Las duraciones de eventos emparejados, como la duración del resultado de una herramienta, son calculadas por el SDK y no pueden proporcionarse manualmente.
+Cinco nombres son rechazados directamente como campos personalizados, porque el SDK los establece en cada evento:
+
+`timestamp`, `session_id`, `agent_id`, `type`, `environment`.
+
+Once más son aceptados pero se verifica su tipo, ya que el endpoint de ingesta los extrae del payload hacia columnas tipadas y almacena `NULL` silenciosamente para cualquier valor del tipo incorrecto. En su lugar, el SDK lanza un error en el punto de llamada, donde todavía puedes ver qué produjo el valor.
+
+| Nombres | Tipo requerido |
+| --- | --- |
+| `duration_ms`, `input_tokens`, `output_tokens` | `int`, dentro del rango unsigned de 32 bits. Un float o un bool produce un error. |
+| `tool_name`, `tool_call_id`, `hook_name`, `hook_id`, `input_id`, `pause_id`, `error_type`, `model` | `str`. `None` produce un error, porque la fila llegaría con 200 OK y sería invisible para cualquier filtro en ese campo. |
+
+### Duraciones
+
+El SDK mide la diferencia entre cuatro pares de eventos y rechaza cualquier `duration_ms` que pases manualmente: `tool_use` → `tool_result`, `hook_triggered` → `hook_completed`, `agent_pause` → `agent_resume` y `human_wait` → `human_input`.
+
+`model_response` es la excepción. El SDK nunca mide las llamadas al modelo, por lo que debes proporcionar `duration_ms` tú mismo, como un número entero de milisegundos. Consulta las [reglas de correlación](/es/reference/custom-agents) para saber cómo se empareja un par.
## Límites locales
-- El estado de Failproof AI reside en `~/.failproofai` a menos que se configure explícitamente de otra manera.
-- `failproofai-sdk` siempre escribe en el spool bajo `~/.failproofai/custom-agents`. `FAILPROOFAI_HOME` reubica ese directorio raíz; el segmento `custom-agents` siempre se añade, por lo que el spool no puede colocarse fuera de él. Solo el propio `configure(base_dir=...)` del SDK escribe en otro lugar. `AGENTEYE_HOME` es leído por el antiguo `agenteye-collector` para determinar qué observar, y ya no afecta dónde escribe el SDK.
-- Las etiquetas de entorno pueden establecerse mediante la configuración del SDK o con `AGENTEYE_ENVIRONMENT`.
-- Las credenciales del daemon se almacenan de forma separada de la configuración no secreta.
+- El estado de Failproof AI reside en `~/.failproofai` salvo que se configure explícitamente de otro modo.
+- `failproofai-sdk` siempre almacena en cola bajo `~/.failproofai/custom-agents`. `FAILPROOFAI_HOME` reubica ese directorio raíz; el segmento `custom-agents` siempre se añade al final, por lo que la cola no puede ubicarse fuera de él. Solo el propio `configure(base_dir=...)` del SDK escribe en otro lugar. `AGENTEYE_HOME` es leído por el antiguo `agenteye-collector` para determinar qué observar, y ya no afecta dónde escribe el SDK.
+- Las credenciales residen en `~/.failproofai/credentials.json`, con permisos `0600`. Deliberadamente no están en `config.json`, que se escribe con una escritura normal y hereda el umask, por lo que queda legible para cualquier usuario local en la máquina.
+
+Usa nombres de entorno estables y de baja cardinalidad. Una coma se rechaza en ambos escritores: el daemon la rechaza en `collector.environment`, y el SDK lanza un error en `configure(environment=...)`. La razón es la misma en ambos casos: el endpoint de ingesta divide este campo por comas y omite toda la línea, respondiendo `200 OK` sin almacenar nada.
+
+## Configuración de la máquina
+
+Las configuraciones no secretas del daemon se encuentran en `~/.failproofai/config.json`. `hooks_verbosity`, `redact` y `environment` no tienen flag de CLI — edita el archivo directamente. `sessions`, `hooks` y `machine_id` son escritos por `failproofai config` cuando conecta esta máquina a Cloud.
+
+| Clave | Valores | Valor por defecto | Qué controla |
+| --- | --- | --- | --- |
+| `collector.sessions` | `true` / `false` | `false`, y `true` una vez que te conectas a Cloud | Envía las transcripciones de sesiones del agente. Una transcripción incluye prompts, contenidos de archivos y cualquier cosa que se pegó en un terminal. |
+| `collector.hooks` | `true` / `false` | `true` | Envía la actividad de hooks. Incluye decisiones y nombres de herramientas, nunca contenidos de archivos. |
+| `collector.hooks_verbosity` | `all` / `decisions` / `off` | `decisions` | `decisions` conserva exactos cada deny e instruct y agrega el aproximadamente 99% que son allow. |
+| `collector.redact` | `minimal` / `off` | `minimal` | Redacción aplicada antes de que cualquier dato salga de la máquina. |
+| `collector.environment` | cualquier cadena sin coma | `local` | La etiqueta que se estampa en cada evento que envía esta máquina. |
+| `collector.machine_id` | cualquier cadena | un ID ya existente en disco, o un UUID aleatorio nuevo | Bajo qué máquina agrupa el dashboard estos datos. Lo escribe `--machine-id`. Nunca se deriva del hostname. |
+
+
+ `failproofai backfill --help` menciona `~/.failproofai/config.toml`. Esa es una ruta obsoleta de una versión anterior del directorio raíz; ninguna versión actual la escribe. El archivo es `config.json`.
+
+
+Conectarse a Cloud envía tanto las decisiones de política como las transcripciones completas de sesión.
-Usa nombres de entorno estables y de baja cardinalidad. Las comas no están admitidas en las etiquetas de entorno del daemon.
+
+ `--no-transcripts` no desactiva las transcripciones durante el proceso de configuración. `failproofai config --token --no-transcripts` analiza el flag y luego nunca lo lee, y el asistente conecta con las sesiones activadas de todas formas, por lo que las transcripciones siguen enviándose mientras crees que las desactivaste.
+
+ Para enviar solo decisiones, establece `collector.sessions` en `false` en `~/.failproofai/config.json` después de conectarte:
+
+ ```json
+ {
+ "collector": {
+ "sessions": false
+ }
+ }
+ ```
+
+
+Un backfill sigue la misma configuración del colector, por lo que nunca envía algo que tu configuración indique que no deseas. Reenviar es seguro: la redacción es determinista, por lo que un evento reenviado genera el mismo hash que su primer envío y se fusiona con la fila ya existente.
## Cambiar una etiqueta de entorno
+El SDK y el daemon estampan cada uno su propia etiqueta, y se configuran en lugares distintos.
+
-
- Las etiquetas de entorno son asignadas por el SDK emisor o el daemon de Failproof. Tras cambiar una, abre **Observe → Sessions** y usa el filtro de entorno para confirmar que las nuevas sesiones llevan el nuevo valor. Las sesiones existentes conservan su entorno original.
+
+ Configúralo en el código, o en el entorno del proceso que emite los eventos. El valor por defecto es `dev`.
-
-
- Para `failproofai-sdk`, configura el entorno en el código o mediante su variable de entorno heredada. Vuelve a ejecutar la configuración del daemon cuando cambies ajustes a nivel de máquina.
+ ```python
+ import failproofai_sdk
+
+ failproofai_sdk.configure(environment="production-us-east")
+ ```
```bash
export AGENTEYE_ENVIRONMENT=production-us-east
- failproofai config
+ ```
+
+ `AGENTEYE_ENVIRONMENT` solo es leído por `failproofai-sdk`. Ni la CLI ni el daemon lo leen, por lo que exportarlo no cambia nada sobre la máquina.
+
+
+ Edita `collector.environment` en `~/.failproofai/config.json`. El valor por defecto es `local` y ningún flag de CLI lo establece.
+
+ ```json
+ {
+ "collector": {
+ "environment": "production-us-east"
+ }
+ }
+ ```
+
+ ```bash
failproofai config --status
fp sessions --since 1h --env production-us-east
```
+
+ Las etiquetas de entorno son asignadas por el SDK emisor o el daemon de Failproof, por lo que no hay nada que cambiar aquí. Tras modificar una en su origen, abre **Observe → Sessions** y usa el filtro de entorno para confirmar que las nuevas sesiones llevan el nuevo valor. Las sesiones existentes conservan su entorno original.
+
\ No newline at end of file
diff --git a/docs/es/reference/failproof-cli.mdx b/docs/es/reference/failproof-cli.mdx
index f481903ae..562fe8c84 100644
--- a/docs/es/reference/failproof-cli.mdx
+++ b/docs/es/reference/failproof-cli.mdx
@@ -1,149 +1,135 @@
---
title: "Failproof AI CLI"
-description: "Instala hooks, gestiona políticas locales, conecta con Cloud y opera el daemon local."
+description: "Configura una máquina, gestiona políticas, inspecciona la actividad local y conecta Cloud."
icon: "terminal"
---
-Instala el CLI local con `npm install -g failproofai`. Ejecútalo sin argumentos para abrir el panel de políticas local.
+Instala con `npm install -g failproofai`. Ejecuta `failproofai` sin argumentos para abrir el panel de control local.
-El paquete requiere Node.js 20.9 o superior. Bun 1.3 o superior es compatible para desarrollo e instalaciones desde el código fuente. `failproofai configure` y `failproofai setup` son alias de `failproofai config`; `failproofai p` es un alias de `failproofai policies`.
+## Comandos principales
+
+| Comando | Qué hace |
+| --- | --- |
+| `failproofai config` | Configura agentes, el servicio en segundo plano y la conexión opcional a Cloud |
+| `failproofai config --token ` | Configura y conecta sin preguntas |
+| `failproofai config --status` | Muestra la conexión, la versión del servicio y el estado de pausa |
+| `failproofai policies` | Lista las políticas y si están activadas |
+| `failproofai policies add ` | Activa una política |
+| `failproofai policies add /` | Instala un paquete de políticas |
+| `failproofai policies remove ` | Desactiva una política o elimina un paquete |
+| `failproofai policies show /` | Inspecciona un paquete antes de instalarlo |
+| `failproofai publish` | Publica tus políticas como un paquete |
+| `failproofai audit` | Escanea el historial local del agente |
+| `failproofai harness` | Gestiona ubicaciones de sesión adicionales |
+| `failproofai flush` | Envía los eventos en cola ahora |
+| `failproofai backfill` | Vuelve a leer el historial anterior del agente |
+| `failproofai update` | Finaliza una actualización de npm y actualiza el servicio |
+| `failproofai uninstall` | Elimina los hooks y el servicio |
+
+`policy`, `pack` y `p` son alias aceptados para `policies`, aunque la documentación usa `policies`.
## Configurar una máquina
```bash
npm install -g failproofai
-failproofai config \
- --connect https://app.befailproof.ai \
- --token \
- --machine-label checkout-prod-01
-failproofai policies --install
+failproofai config
+failproofai policies add FailproofAI/policies
failproofai config --status
```
-Ejecuta `failproofai` sin argumentos para abrir el panel de políticas local.
+La configuración inicial no selecciona ningún paquete de políticas. Hasta que añadas uno, solo se ejecuta `block-failproofai-commands`.
-| Comando | Resultado |
-| --- | --- |
-| `failproofai config` | Ejecuta la configuración interactiva de la máquina |
-| `failproofai config --connect --token ` | Conecta la ingesta de Cloud y la entrega de políticas |
-| `failproofai config --status` | Muestra el estado de conexión, daemon, entrega y pausa |
-| `failproofai policies` | Lista las políticas integradas, personalizadas, de convención, de pack y gestionadas por Cloud |
-| `failproofai policies --install` | Instala hooks y activa las políticas |
-| `failproofai policy add ` | Activa una política: una integrada o `:` de un pack instalado |
-| `failproofai policy remove ` | Desactiva una política con la misma nomenclatura |
-| `failproofai policies --uninstall` | Desactiva políticas o elimina los hooks del harness |
-| `failproofai pack list` | Lista los packs de políticas instalados y todas las políticas que incluye cada uno |
-| `failproofai pack add ` | Instala un pack de políticas desde una release de GitHub; sin etiqueta toma la más reciente y la fija |
-| `failproofai pack add --bundled` | Instala las políticas integradas como un pack, desde este paquete, sin red |
-| `failproofai pack build ` | Construye los tres archivos de release para un pack propio |
-| `failproofai pack remove ` | Desactiva un pack instalado |
-| `failproofai audit` | Escanea el historial del agente local y abre la vista de auditoría local |
-| `failproofai audit --schedule [days] --email ` | Programa escaneos locales periódicos y envía los hallazgos por correo |
-| `failproofai audit --status` | Muestra la dirección de informes, el intervalo y el próximo escaneo programado |
-| `failproofai audit --no-schedule` | Detiene los escaneos periódicos sin eliminar el historial de auditoría |
-| `failproofai harness list` | Lista las rutas de captura adicionales |
-| `failproofai flush --wait` | Entrega la cola de eventos actual |
-| `failproofai backfill --since 30d` | Relee el historial previamente procesado |
-| `failproofai config --pause [duration]` | Pausa una sesión local durante 30 minutos por defecto, hasta un máximo de 8 horas |
-| `failproofai config --resume` | Reanuda una sesión local pausada; añade `--all` para limpiar todas las pausas |
-| `failproofai update` | Completa las migraciones del paquete y actualiza el daemon |
-| `failproofai migrate --dry-run` | Previsualiza o ejecuta las migraciones de diseño del directorio home pendientes |
-| `failproofai uninstall` | Elimina los hooks y el daemon antes de desinstalar el paquete |
-| `failproofai --version` | Muestra la versión del paquete instalado |
-| `failproofai --help` | Muestra los comandos y el uso global |
-
-## Opciones de configuración
-
-| Opción | Uso |
-| --- | --- |
-| `--connect --token ` | Conecta de forma no interactiva |
-| `--machine-id ` | Establece el ID estable de la máquina |
-| `--machine-label ` | Establece o cambia la etiqueta del panel |
-| `--no-transcripts` | Envía decisiones sin el contenido de la transcripción |
-| `--disconnect` | Detiene las descargas de políticas de Cloud y la entrega de eventos |
-| `--status` | Muestra el estado actual de la máquina |
-| `--pause [duration]` | Pausa la sesión más reciente en el directorio actual; acepta segundos, minutos u horas y tiene un valor por defecto de 30 minutos |
-| `--resume` | Finaliza anticipadamente una pausa coincidente |
-| `--session ` | Apunta a una sesión explícita para pausar o reanudar |
-| `--all` | Con `--resume`, finaliza todas las pausas activas |
-
-Las pausas locales suspenden las políticas integradas, personalizadas, de convención y de pack para una sesión. Siempre expiran y no desactivan las políticas gestionadas por Cloud. `block-failproofai-commands` —que siempre está activo y no puede desactivarse ni pausarse— impide que un agente instrumentado use esta vía de escape.
-
-## Opciones de políticas
-
-| Opción | Uso |
-| --- | --- |
-| `--install`, `-i` | Activa las políticas e instala los hooks del harness |
-| `--uninstall`, `-u` | Desactiva las políticas o elimina los hooks |
-| `--cli ` | Apunta a uno o más harnesses compatibles |
-| `--scope user\|project\|local\|all` | Elige el ámbito de configuración; `all` es para desinstalar |
-| `--beta` | Incluye políticas en fase beta |
-| `--custom`, `-c ` | Valida y carga un archivo de política personalizado; se puede repetir |
+Para configurar Cloud de forma desatendida:
+
+```bash
+export FAILPROOFAI_CLOUD_TOKEN=""
+failproofai config
+```
+
+Para enviar decisiones sin transcripciones, conéctate primero y establece `collector.sessions` en `false` en `~/.failproofai/config.json`. El indicador de configuración `--no-transcripts` actualmente se parsea pero no aplica ese ajuste.
+
+Usa `--machine-label ` después de conectar la máquina para cambiarle el nombre. `--connect ` es el comando más específico para inscribir únicamente una máquina ya configurada.
+
+## Políticas y paquetes
+
+```bash
+failproofai policies
+failproofai policies add block-sudo
+failproofai policies show owner/repo
+failproofai policies add owner/repo --category git,database
+failproofai policies remove owner/repo
+```
-## Opciones de entrega y mantenimiento
+Todo lo que contiene una barra diagonal es una fuente de paquete; lo que no la contiene es un nombre de política.
-| Comando | Opciones |
+Indicadores útiles para seleccionar paquetes:
+
+| Indicador | Uso |
| --- | --- |
-| `backfill` | `--since <30d\|6m\|YYYY-MM-DD>`, `--dry-run` |
-| `flush` | `--wait`, `--timeout ` |
-| `update` | `--no-daemon` |
-| `migrate` | `--dry-run` |
-| `uninstall` | `--purge`, `--dry-run`, `--yes` |
+| `--policy a,b` | Selecciona políticas por nombre |
+| `--category x,y` | Selecciona categorías |
+| `--all` | Selecciona todo |
+| `--cli ` | Restringe a harnesses específicos |
-`failproofai update` debe ejecutarse después de `npm install -g failproofai@latest`; realiza las migraciones del diseño del directorio home, instala el binario del daemon correspondiente y reinicia el servicio. `--no-daemon` realiza únicamente la migración del diseño.
+Usa `failproofai policies -i -c ` para cargar una política personalizada desde cualquier ruta. Los archivos con el patrón `*policies.{js,mjs,ts}` ubicados en `.failproofai/policies/` se cargan automáticamente.
-## Rutas del harness
+## Pausar la aplicación de políticas
-```text
-failproofai harness list [harness]
-failproofai harness add-path [label=]
-failproofai harness remove-path
+```bash
+failproofai config --pause 10m
+failproofai config --status
+failproofai config --resume
```
-Los nombres de harness compatibles son `claude`, `codex`, `copilot`, `cursor`, `opencode`, `pi`, `hermes`, `openclaw`, `factory`, `devin`, `antigravity` y `goose`.
+Una pausa aplica a una sola sesión local y siempre expira. No pausa las políticas gestionadas por Cloud ni `block-failproofai-commands`.
+
+## Auditoría y entrega
+
+```bash
+failproofai audit
+failproofai audit --schedule 7 --email team@example.com
+failproofai audit --status
+failproofai flush --wait
+failproofai backfill --since 30d --dry-run
+```
-Las etiquetas delimitan los IDs de agente derivados cuando dos raíces contienen copias del mismo proyecto. Las raíces solapadas y las etiquetas duplicadas son rechazadas para evitar la recolección duplicada o la corrupción del cursor. La configuración de rutas adicionales se recarga sin necesidad de reiniciar el daemon.
+`backfill` lee `~/.failproofai/config.json`. Elimina `--dry-run` para reenviar el historial.
-Los entornos de contenedor pueden reemplazar las rutas adicionales configuradas en archivos mediante una variable separada por comas con el nombre `FAILPROOFAI__EXTRA_PATHS`, por ejemplo:
+## Ubicaciones de sesión adicionales
```bash
-export FAILPROOFAI_OPENCLAW_EXTRA_PATHS="user1=/srv/openclaw-a,user2=/srv/openclaw-b"
+failproofai harness list
+failproofai harness add-path claude work=/srv/team/.claude/projects
+failproofai harness remove-path claude work
```
-## Variables de entorno
+Las etiquetas evitan que las sesiones de dos directorios copiados se fusionen bajo el mismo ID de agente derivado.
+
+Los harnesses compatibles son `claude`, `codex`, `copilot`, `cursor`, `opencode`, `pi`, `hermes`, `openclaw`, `factory`, `devin`, `antigravity` y `goose`. La compatibilidad con scopes varía; consulta [Harnesses](/es/reference/harnesses).
-Usa archivos de configuración para el comportamiento persistente de la máquina. Las variables de entorno son más útiles para contenedores, pruebas y procesos individuales.
+## Variables de entorno útiles
| Variable | Uso |
| --- | --- |
-| `FAILPROOFAI_HOME` | Reubica el diseño completo de `~/.failproofai` |
-| `FAILPROOFAI_LOG_LEVEL` | Establece la verbosidad del registro local |
-| `FAILPROOFAI_HOOK_LOG_FILE` | Escribe los diagnósticos del hook en un archivo seleccionado |
-| `FAILPROOFAI_TELEMETRY_DISABLED=1` | Desactiva la telemetría anónima para este proceso |
-| `FAILPROOFAI_NO_FIRST_RUN=1` | Omite la configuración interactiva del primer inicio |
-| `FAILPROOFAI_NO_AUTO_AUDIT=1` | Omite la auditoría local posterior a la configuración |
-| `FAILPROOFAI_LLM_BASE_URL` | Reemplaza el endpoint compatible con OpenAI utilizado por las políticas LLM |
-| `FAILPROOFAI_LLM_API_KEY` | Proporciona la clave de API utilizada por las políticas LLM |
-| `FAILPROOFAI_LLM_MODEL` | Selecciona el modelo utilizado por las políticas LLM |
-| `FAILPROOFAI_POLICY_LOAD_TIMEOUT_MS` | Limita el tiempo de carga del módulo de política personalizada |
-| `FAILPROOFAI_NO_DOWNLOAD=1` | Impide la descarga de packs y binarios del daemon; lo que esté instalado continúa aplicándose |
-| `FAILPROOFAI_PACK_BASE_URL` | Descarga packs desde un espejo en lugar de `github.com` |
-| `FAILPROOFAI__EXTRA_PATHS` | Reemplaza las rutas de captura adicionales configuradas para un harness |
-| `NO_COLOR` | Desactiva la salida de terminal con color |
-
-Las variables de directorio home específicas del agente, como `CLAUDE_PROJECTS_PATH`, `CURSOR_HOME`, `HERMES_HOME` y `OPENCLAW_HOME`, reemplazan la ubicación donde Failproof AI descubre las sesiones locales para ese harness.
-
-## Pausar o eliminar una máquina de forma segura
+| `FAILPROOFAI_CLOUD_TOKEN` | Clave de máquina para Cloud |
+| `FAILPROOFAI_CLOUD_URL` | Sobreescribe la URL de Cloud |
+| `FAILPROOFAI_HOME` | Mueve el directorio de estado local |
+| `FAILPROOFAI_NO_DOWNLOAD=1` | Rechaza descargas de paquetes y del servicio |
+| `FAILPROOFAI_DAEMON_BASE_URL` | Usa un mirror del binario del servicio |
+| `FAILPROOFAI_PACK_BASE_URL` | Usa un mirror de paquetes |
+| `FAILPROOFAI_NO_FIRST_RUN=1` | Desactiva los mensajes del primer uso |
+| `FAILPROOFAI_TELEMETRY_DISABLED=1` | Desactiva la telemetría anónima del CLI |
+| `FAILPROOFAI__EXTRA_PATHS` | Reemplaza las rutas adicionales de un harness |
+| `NO_COLOR` | Desactiva el color en la terminal |
+
+## Eliminar o actualizar
```bash
-failproofai config --pause
-failproofai config --status
-failproofai config --resume
+npm install -g failproofai@latest
+failproofai update
```
-Una pausa de sesión local no desactiva las políticas gestionadas por Cloud. Restaura los despliegues de Cloud a través del flujo de trabajo de aplicación de Cloud cuando el propio despliegue es el problema.
-
-Antes de eliminar el paquete npm, elimina los hooks instalados y el daemon:
+Antes de eliminar el paquete:
```bash
failproofai uninstall --dry-run
@@ -151,8 +137,8 @@ failproofai uninstall --yes
npm rm -g failproofai
```
-Ejecuta `failproofai --help` para obtener detalles específicos de la versión.
-
- Ejecuta `failproofai uninstall` antes de `npm rm -g failproofai`; npm no elimina los hooks del agente instalados ni el servicio del daemon.
-
\ No newline at end of file
+ Ejecuta `failproofai uninstall` antes de eliminar el paquete de npm. npm no elimina los hooks instalados ni el servicio en segundo plano.
+
+
+Ejecuta `failproofai help ` para ver las opciones completas de tu versión instalada.
\ No newline at end of file
diff --git a/docs/es/reference/harnesses.mdx b/docs/es/reference/harnesses.mdx
index 0b833f918..fa3f8f046 100644
--- a/docs/es/reference/harnesses.mdx
+++ b/docs/es/reference/harnesses.mdx
@@ -4,77 +4,160 @@ description: "Captura sesiones y aplica políticas en los 12 arneses de agentes
icon: "plug-zap"
---
-Un arnes es el entorno en el que tu agente se ejecuta realmente. Failproof AI admite doce de ellos, en dos categorías:
+Un arnés es el entorno donde tu agente realmente se ejecuta. Failproof AI admite doce de ellos, en dos categorías:
-- **CLIs de programación** (10) — Claude Code, Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi, Factory Droid, Devin CLI, Antigravity CLI, Goose
-- **Pasarelas de chat y asistentes** (2) — Hermes (Slack, Telegram, cron), OpenClaw (asistente auto-hospedado)
+- **CLIs de codificación** (10) — Claude Code, Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi, Factory Droid, Devin CLI, Antigravity CLI, Goose
+- **Pasarelas de chat y asistentes** (2) — Hermes (Slack, Telegram, cron), OpenClaw (asistente autoalojado)
-Las mismas políticas y el mismo historial de sesiones se aplican independientemente del arnes en el que se ejecute un agente. Una capa de adaptador mapea los nombres de eventos nativos, nombres de herramientas y campos de entrada de herramientas de cada arnes sobre 29 eventos canónicos antes de que se ejecute cualquier política.
+Las mismas políticas y el mismo historial de sesiones se aplican independientemente del arnés en que corra un agente. Una capa adaptadora unifica los nombres de eventos nativos, nombres de herramientas y campos de entrada de cada arnés en 29 eventos canónicos antes de que se ejecute cualquier política.
-Un agente que no se ejecuta en **ninguno** de los doce se instrumenta directamente con el [SDK de Python](/es/reference/custom-agents). Este es un contrato diferente, y vale la pena indicarlo claramente: el SDK proporciona trazabilidad, sesiones, evaluaciones y auditorías — **no aplica políticas por sí solo.** Bloquear una acción insegura antes de que se ejecute requiere un hook de cumplimiento en el límite de herramientas de tu entorno de ejecución; [contáctanos](mailto:support@befailproof.ai) y lo mapearemos.
+Un agente que no corra en **ninguno** de los doce se instrumenta directamente con el [SDK de Python](/es/reference/custom-agents). Ese es un contrato diferente, y conviene dejarlo claro: el SDK proporciona trazas, sesiones, evaluaciones y auditorías — **no aplica políticas por sí solo.** Bloquear una acción insegura antes de que se ejecute requiere un hook de cumplimiento en el límite de herramientas del entorno de ejecución; [contáctanos](mailto:support@befailproof.ai) y lo mapearemos.
-| Arnes | Ámbitos de hook compatibles |
+## Ámbitos de hook
+
+| Arnés | Ámbitos de hook compatibles |
| --- | --- |
-| Claude Code | User, project, local |
-| Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi | User, project |
-| Factory Droid, Devin CLI, Antigravity CLI, Goose | User, project |
-| Hermes, OpenClaw | User |
+| Claude Code | Usuario, proyecto, local |
+| Codex, GitHub Copilot CLI, Cursor, OpenCode, Pi | Usuario, proyecto |
+| Factory Droid, Devin CLI, Antigravity CLI, Goose | Usuario, proyecto |
+| Hermes, OpenClaw | Usuario |
-Cada integración normaliza los nombres de eventos de hook nativos, nombres de herramientas y campos de entrada de herramientas antes de que se ejecuten las políticas. Una política solo puede actuar sobre los eventos que el arnes expone; prueba el comportamiento de fin de turno e instrucciones en el arnes y versión exactos que despliegues.
+Claude Code es el único arnés con ámbito **local**. Hermes y OpenClaw no tienen configuración de proyecto en absoluto — son solo de ámbito de usuario, y la CLI rechaza `--scope project` para ellos.
-## Capacidad de aplicación
+Cada integración normaliza los nombres de eventos de hook nativos, nombres de herramientas y campos de entrada antes de que se ejecuten las políticas. Una política solo puede actuar sobre los eventos que expone el arnés; prueba el comportamiento de fin de turno e instrucciones en el arnés y versión exactos que despliegas.
-"Bloquear" significa que el veredicto devuelto por el adaptador actual es consumido por el arnes indicado. El bloqueo post-herramienta puede reemplazar el resultado mostrado al modelo, pero no puede deshacer un efecto secundario de herramienta que ya ocurrió.
+## Dónde se almacena la configuración de hooks
-| Arnes | Eventos de bloqueo verificados | Advertencias de solo observación o no bloqueantes |
+| Arnés | Ámbito de usuario | Ámbito de proyecto |
+| --- | --- | --- |
+| Claude Code | `~/.claude/settings.json` | `.claude/settings.json` (local: `.claude/settings.local.json`) |
+| Codex | `~/.codex/hooks.json` | `.codex/hooks.json` |
+| GitHub Copilot CLI | `~/.copilot/hooks/failproofai.json` | `.github/hooks/failproofai.json` |
+| Cursor | `~/.cursor/hooks.json` | `.cursor/hooks.json` |
+| OpenCode | `~/.config/opencode/opencode.json` | `.opencode/opencode.json` |
+| Pi | `~/.pi/agent/settings.json` | `.pi/settings.json` |
+| Hermes | `~/.hermes/config.yaml` | — |
+| OpenClaw | `~/.openclaw/openclaw.json` | — |
+| Factory Droid | `~/.factory/hooks.json` | `.factory/hooks.json` |
+| Devin CLI | `~/.config/devin/config.json` | `.devin/config.json` |
+| Antigravity CLI | `~/.gemini/config/hooks.json` | `.agents/hooks.json` |
+| Goose | `~/.agents/plugins/failproofai/hooks/hooks.json` | `.agents/plugins/failproofai/hooks/hooks.json` |
+
+OpenCode, Pi y OpenClaw son integraciones de plugin en lugar de integraciones de hook de shell: el archivo indicado registra un paquete de plugin o extensión, que invoca el binario de failproofai y traduce su veredicto.
+
+## Capacidad de cumplimiento
+
+"Bloquear" significa que el veredicto devuelto por el adaptador actual es consumido por el arnés indicado. El bloqueo post-herramienta puede sustituir el resultado mostrado al modelo, pero no puede deshacer un efecto secundario de herramienta que ya ocurrió.
+
+| Arnés | Eventos de bloqueo verificados | Advertencias de solo observación o no bloqueantes |
| --- | --- | --- |
| Claude Code | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PreCompact` y varios eventos de tarea/configuración | `PostToolUse`, ciclo de vida de sesión, notificaciones y eventos post-fallo son observacionales. |
-| Codex | `PreToolUse`, `PermissionRequest`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `PostToolUse` | El bloqueo post-herramienta reemplaza el resultado tras la ejecución; los eventos de inicio de sesión y compactación son observacionales en el adaptador actual. |
-| GitHub Copilot CLI | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PostToolUse` | El bloqueo post-herramienta reemplaza el resultado tras la ejecución; los eventos de sesión y notificación son observacionales. |
+| Codex | `PreToolUse`, `PermissionRequest`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `PostToolUse` | El bloqueo post-herramienta sustituye el resultado tras la ejecución; los eventos de inicio de sesión y compactación son observacionales en el adaptador actual. |
+| GitHub Copilot CLI | `PreToolUse`, `UserPromptSubmit`, `PermissionRequest`, `Stop`, `SubagentStop`, `PostToolUse` | El bloqueo post-herramienta sustituye el resultado tras la ejecución; los eventos de sesión y notificación son observacionales. |
| Cursor | `PreToolUse`, `UserPromptSubmit`, `Stop` | `PostToolUse` y los eventos de sesión son observacionales. |
-| OpenCode | `PreToolUse` | Los eventos post-herramienta y de ciclo de vida son observacionales; el manejo actual de stop es orientación para un turno posterior, no una puerta verificada. |
-| Pi | `PreToolUse`, `UserPromptSubmit` | Los eventos post-herramienta y de ciclo de vida son observacionales; la orientación de stop se aplica a un turno posterior. |
-| Hermes | `PreToolUse` | Los veredictos post-herramienta, de sesión y de subagente-stop no son puertas. |
-| OpenClaw | `PreToolUse`, `UserPromptSubmit`, `Stop` | Los eventos post-herramienta, de sesión, subagente-stop y compactación son observacionales. |
-| Factory Droid | `PreToolUse`, `UserPromptSubmit`, `Stop`, `PreCompact` | Los veredictos post-herramienta y de subagente-stop son observacionales. |
-| Devin CLI | `PreToolUse`, `UserPromptSubmit`, `Stop`, `PermissionRequest` condicional | Los hooks de permisos no se ejecutan en todos los modos de permisos; los eventos post-herramienta y de sesión son observacionales. |
-| Antigravity CLI | `PreToolUse`, `Stop` | Los veredictos de prompt de usuario y post-herramienta son observacionales; las instrucciones de prompt pueden seguir inyectándose. |
-| Goose | `PreToolUse` | Los eventos de prompt de usuario, post-herramienta y de sesión son observacionales. Existe un hook de stop nativo bloqueante en sentido ascendente, pero el adaptador actual no lo instala. |
+| OpenCode | `PreToolUse` | Los eventos post-herramienta y de ciclo de vida son observacionales; el manejo de stop actual es orientación para un turno posterior, no una barrera verificada. `PermissionRequest` nunca se ejecuta. |
+| Pi | `PreToolUse`, `UserPromptSubmit` | Los eventos post-herramienta y de ciclo de vida son observacionales; la orientación de stop aplica a un turno posterior. |
+| Hermes | `PreToolUse` | Los veredictos de post-herramienta, sesión y subagent-stop no son barreras. No hay evento `Stop` instalado. |
+| OpenClaw | `PreToolUse`, `UserPromptSubmit`, `Stop` | Los eventos de post-herramienta, sesión, subagent-stop y compactación son observacionales. |
+| Factory Droid | `PreToolUse`, `UserPromptSubmit`, `Stop`, `PreCompact` | Los veredictos de post-herramienta y subagent-stop son observacionales. |
+| Devin CLI | `PreToolUse`, `UserPromptSubmit`, `Stop`, `PermissionRequest` condicional | Los hooks de permisos no se ejecutan en todos los modos de permiso; los eventos de post-herramienta y sesión son observacionales. |
+| Antigravity CLI | `PreToolUse`, `Stop` | Los veredictos de prompt de usuario y post-herramienta son observacionales; las instrucciones de prompt aún pueden inyectarse. |
+| Goose | `PreToolUse` | Los eventos de prompt de usuario, post-herramienta y sesión son observacionales. Existe un hook de stop de bloqueo nativo aguas arriba, pero el adaptador actual no lo instala. |
+
+Un evento ausente de ambas columnas **no está verificado** — trátalo como desconocido, nunca como bloqueante.
+
+### Condiciones sobre una barrera listada
+
+Varias filas anteriores son barreras reales que, sin embargo, están acotadas o son condicionales. Una política que dependa de una de estas necesita conocer la condición tanto como la fila.
+
+| Arnés | Evento | Condición |
+| --- | --- | --- |
+| Claude Code | `Stop`, `SubagentStop` | Limitado por `CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`, por defecto 8. Se descarta en rutas de fin de turno |
+| Cursor | `Stop` | Limitado por `loop_limit`, por defecto 5, y solo se consume cuando el turno se completa — un abort del usuario o un error de turno lo descarta |
+| Cursor | `Stop` | **Las VMs de Cursor Cloud Agent no ejecutan hooks `stop` ni `subagentStop` en absoluto.** La barrera solo cubre sesiones locales |
+| Codex | `SubagentStop` | Solo los subagentes ThreadSpawn lo despachan; cualquier otra fuente de subagente nunca ejecuta el hook |
+| GitHub Copilot CLI | `SubagentStop` | Se omite completamente para subagentes `isSidekick` |
+| Devin CLI | `PermissionRequest` | Nunca se activa en modo `--permission-mode dangerous`, ni para herramientas de solo lectura aprobadas automáticamente |
+| OpenCode | `PermissionRequest` | Un hook inactivo: `permission.ask` está declarado y documentado aguas arriba, pero nunca se invoca, por lo que la política ni siquiera se ejecuta |
+| Hermes | `Stop` | No hay evento `Stop` instalado, por decisión de diseño. Los cinco builtins `require-*-before-stop` no aplican en Hermes |
+| Goose | `Stop` | Mismo resultado: no hay `Stop` instalado, por lo que los cinco builtins `require-*-before-stop` no aplican |
+
+### Dónde `instruct()` se degrada
+
+`deny` no es el único veredicto que puede devolver una política. `instruct()` entrega al agente una directiva y permite que la acción proceda — pero no todo arnés tiene un canal para transmitirla. Donde no existe ninguno, failproofai permite la acción y escribe la instrucción en stderr para los registros del operador; el modelo nunca la ve.
+
+| Arnés | Eventos donde `instruct()` se degrada a una nota en stderr |
+| --- | --- |
+| Hermes | Todos los eventos |
+| Goose | Todos los eventos |
+| Pi | Todos los eventos excepto `Stop` |
+| OpenClaw | Todos los eventos excepto `Stop` |
+| Factory Droid | Todos los eventos excepto `Stop` |
+| Antigravity CLI | Todos los eventos excepto `Stop` y `UserPromptSubmit` |
-Las capacidades dependen de la versión. Vuelve a realizar las pruebas tras actualizar una CLI de agente, especialmente cuando una política depende del comportamiento de prompt, stop, permisos o post-herramienta en lugar de la puerta pre-herramienta común.
+En todos los demás casos, la instrucción se devuelve a través del canal de contexto adicional propio del arnés.
-## Instalar hooks de captura y política
+### Versiones contra las que se verificaron estas afirmaciones
+
+La versión es parte de la afirmación, no una nota al pie. Vuelve a realizar las pruebas tras actualizar una CLI de agente, especialmente cuando una política depende del comportamiento de prompt, stop, permiso o post-herramienta en lugar de la barrera pre-herramienta común.
+
+| Arnés | Versión verificada |
+| --- | --- |
+| Claude Code | 2.1.220 |
+| Codex | `fe01054a`, con `PostToolUse` reverificado en vivo en 0.147.0 |
+| GitHub Copilot CLI | 1.0.71, algunos puntos de llamada relectos en 1.0.68 y 1.0.78 |
+| Cursor | cursor-agent 2026.07.16-899851b |
+| OpenCode | 1.18.9, reverificado en 1.14.33 |
+| Pi | 0.80.10 |
+| Hermes | hermes-agent `5771a6e` |
+| OpenClaw | v2026.7.2 |
+| Factory Droid | droid 0.175.1 |
+| Devin CLI | 3000.2.17 |
+| Antigravity CLI | agy 1.1.8 |
+| Goose | 1.43.0 |
+
+
+ Varias filas de Codex citan rutas de código fuente que fueron reestructuradas después de `fe01054a` y ya no existen en 0.147.0. No se sabe que sean incorrectas, pero no están verificadas contra ninguna versión publicada de Codex y están pendientes de reverificación. Solo la fila `PostToolUse` de Codex fue reverificada en vivo.
+
+
+## Modo agente de VS Code
+
+El modo agente integrado de Copilot Chat en VS Code **no es una decimotercera integración**. Descubre la configuración de hooks desde `.github/hooks/*.json`, `~/.copilot/hooks/*.json` y `~/.claude/settings.json` — exactamente las rutas que ya escriben las instalaciones de `copilot` y `claude` — y usa el mismo contrato de denegación con forma Claude. Instalar cualquiera de los dos ya aplica las políticas dentro de las sesiones en modo agente de VS Code.
+
+La funcionalidad está en vista previa y requiere una suscripción activa a GitHub Copilot más el modo agente.
+
+## Instalar hooks de captura y políticas
- 1. Abre **Administración → Claves** y crea una clave con `events:add` y `policies:pull`, con nombre para la máquina o entorno.
- 2. En la máquina de destino, conecta la CLI local con la clave mostrada e instala los hooks del arnes.
+ 1. Abre **Administración → Claves** y crea una clave con `events:add` y `policies:pull`, con un nombre que identifique la máquina o entorno.
+ 2. En la máquina de destino, conecta la CLI local con la clave mostrada.
3. Inicia una nueva sesión de agente y confirma sus eventos de hook y sesión en **Observar → Eventos**.
- 4. Abre **Observar → política** para el mismo intervalo de tiempo y confirma que una decisión de política está atribuida a la máquina.
+ 4. Abre **Observar → política** para la misma ventana de tiempo y confirma que una decisión de política está atribuida a la máquina.
La conexión comienza con una clave de máquina. Confirma que incluye permisos tanto de ingesta como de entrega de políticas antes de copiar su secreto.
- 
+ 
- Después de instalar los hooks, el flujo de Eventos debería mostrar nuevos eventos de la máquina y el entorno que conectaste.
+ Tras instalar los hooks, el flujo de Eventos debería mostrar nuevos eventos desde la máquina y el entorno que conectaste.
- 
+ 
- Finalmente, verifica que las decisiones de política estén atribuidas a la misma máquina. Esto confirma que el arnes está reportando actividad de políticas además de eventos de trazado.
+ Por último, verifica que las decisiones de política están atribuidas a la misma máquina. Esto confirma que el arnés está reportando actividad de políticas además de eventos de traza.
- 
+ 
- Instala hooks para todos los arneses detectados:
+ `failproofai config` conecta hooks en cada CLI de agente compatible que encuentre, instala el daemon y se conecta a Cloud cuando hay una clave presente:
```bash
- failproofai config \
- --connect https://app.befailproof.ai \
- --token
- failproofai policies --install
+ failproofai config --token
+ failproofai policies add FailproofAI/policies
```
- O apunta a arneses específicos y un ámbito de configuración:
+ La configuración inicial no elige ninguna política, de ahí el segundo comando.
+
+ Para conectar un arnés manualmente — si se omite `--cli`, `--install` detecta lo que está instalado y pregunta:
```bash
failproofai policies --install \
@@ -82,7 +165,7 @@ Las capacidades dependen de la versión. Vuelve a realizar las pruebas tras actu
--scope user
```
- El ámbito de proyecto mantiene la configuración de hooks junto a un repositorio. El ámbito de usuario cubre el trabajo en varios repositorios. Claude Code también admite ámbito local; la compatibilidad varía según el arnes y la CLI rechaza las combinaciones no admitidas.
+ El ámbito de proyecto mantiene la configuración de hooks junto al repositorio. El ámbito de usuario cubre el trabajo entre repositorios. Consulta la tabla de ámbitos anterior antes de combinar `--cli` y `--scope`; la CLI rechaza las combinaciones no compatibles.
Verifica la máquina y sus eventos:
@@ -94,11 +177,15 @@ Las capacidades dependen de la versión. Vuelve a realizar las pruebas tras actu
+
+ En ejecuciones headless de `copilot -p` iniciadas desde un directorio nuevo, el archivo de ámbito de proyecto `.github/hooks/failproofai.json` **no** se cargó. Trata el ámbito de usuario como el punto de cumplimiento fiable para Copilot en CI hasta que se verifique lo contrario.
+
+
## Agregar una ruta de sesión no predeterminada
- Las rutas adicionales se registran en la máquina, no en la nube. Después de agregar una, abre **Observar → Sesiones**, filtra por el entorno de la máquina y confirma que aparecen sesiones de la nueva ruta. Abre una sesión y comprueba el agente, el arnes y las marcas de tiempo de los eventos antes de usarla en una auditoría.
+ Las rutas adicionales se registran en la máquina, no en Cloud. Tras agregar una, abre **Observar → Sesiones**, filtra por el entorno de la máquina y confirma que aparecen sesiones de la nueva ruta. Abre una sesión y comprueba el agente, el arnés y las marcas de tiempo de los eventos antes de confiar en ella para una auditoría.

@@ -113,9 +200,11 @@ Las capacidades dependen de la versión. Vuelve a realizar las pruebas tras actu
```
Elimina una ruta con `failproofai harness remove-path claude checkout`.
+
+ La etiqueta forma el espacio de nombres de los IDs de agente derivados. Dos ubicaciones que contengan copias del mismo proyecto derivan el mismo ID a partir de la transcripción, por lo que sin etiqueta se fusionan en un único agente. Los roots solapados y las etiquetas duplicadas se rechazan — consulta [la referencia de CLI](/es/reference/failproof-cli) para entender por qué existe cada rechazo.
- Ejecuta una nueva sesión después de la instalación. Verifica tanto el flujo de eventos en vivo como una decisión de política real antes de ampliar el despliegue.
+ Ejecuta una nueva sesión tras la instalación. Verifica tanto el flujo de eventos en vivo como una decisión de política real antes de ampliar el despliegue.
\ No newline at end of file
diff --git a/docs/es/reference/http-api.mdx b/docs/es/reference/http-api.mdx
index 8061e31cd..85fc5732a 100644
--- a/docs/es/reference/http-api.mdx
+++ b/docs/es/reference/http-api.mdx
@@ -1,74 +1,124 @@
---
-title: "API HTTP"
-description: "Autentícate en la API pública `/v1` de Failproof AI Cloud y utiliza la referencia de endpoints generada."
+title: "HTTP API"
+description: "Autentícate en la API pública de Failproof AI Cloud `/v1` y utiliza la referencia de endpoints generada."
icon: "braces"
---
-La API pública se sirve bajo `/v1` en el origen de tu panel de Failproof AI.
+La API pública se sirve bajo `/v1` en el origen de tu panel de Failproof AI. En Failproof AI Cloud ese origen es `https://app.befailproof.ai`, por lo que la ruta base es `https://app.befailproof.ai/v1`. En un despliegue autogestionado es tu propio host del panel seguido de `/v1`; pasa ese host a `fp` con `--base-url ` o `FP_DASHBOARD_URL`.
## Crear una clave y realizar una solicitud
- 1. Abre **Administración → Claves**, selecciona **Crear clave** y elige el conjunto de permisos más restrictivo que cubra la integración.
- 2. Añade permisos individuales solo cuando sea necesario, crea la clave y copia su secreto de un solo uso.
+ 1. Abre **Administración → Claves**, selecciona **nueva clave** y elige el conjunto de permisos más restrictivo que cubra la integración.
+ 2. Agrega concesiones individuales solo cuando sea necesario, crea la clave y copia su secreto de un solo uso.
3. Realiza una solicitud de prueba a `/v1/sessions` y confirma que la clave permanece activa en la página de Claves.
4. Rota o deshabilita la clave desde su menú de acciones cuando la integración cambie de propietario.
- 
+ 
- El panel de creación se muestra arriba. El secreto de un solo uso aparece únicamente tras seleccionar **crear**; cópialo antes de cerrar esa confirmación.
+ El panel de creación se muestra arriba. El secreto de un solo uso aparece únicamente después de crear la clave; cópialo antes de cerrar esa confirmación.
- Crea una clave de solo lectura y úsala directamente con `fp` o `curl`:
+ Crea una clave de lectura y úsala directamente con `fp` o `curl`. `fp` lee la clave de `--api-key` o de `FP_API_KEY`:
```bash
fp keys create reliability-reader \
--permission-set read-only
- fp --api-key sessions --since 24h
+ export FP_API_KEY=""
+ fp --org reliability-team sessions --since 24h
```
```bash
curl "https://app.befailproof.ai/v1/sessions?limit=20" \
- -H "Authorization: Bearer $FAILPROOFAI_KEY"
+ -H "Authorization: Bearer $FP_API_KEY" \
+ -H "X-AgentEye-Org: reliability-team"
```
-Las claves están asociadas a una organización y a un conjunto de permisos. Una solicitud que no cuente con el permiso requerido por el endpoint devuelve `403` e identifica el permiso faltante.
+Las claves están vinculadas a una organización y a una lista plana de permisos. Un conjunto de permisos solo inicializa esa lista en el momento de la creación — la clave almacena las concesiones expandidas, por lo que cambiar el conjunto después no modifica la clave. Una solicitud que carece del permiso requerido por el endpoint devuelve `403` e identifica el permiso faltante.
## Selección de organización
-Una clave de organización actúa automáticamente sobre su propia organización. Una clave de ámbito de instancia puede seleccionar una organización por solicitud:
+Una clave de organización actúa sobre su organización automáticamente. Una clave con alcance de instancia selecciona una organización por solicitud, y un tenant con más de una organización siempre debe indicar una en modo clave — `fp` nunca envía una organización guardada cuando se autentica con una clave.
+
+| Emisor | Cómo se indica la organización |
+| --- | --- |
+| `fp`, por invocación | `--org `, antes del subcomando |
+| `fp`, desde el entorno | `FP_ORG` |
+| HTTP directo | la cabecera de solicitud `X-AgentEye-Org: ` |
+
+`X-AgentEye-Org` conserva su ortografía original en el wire. Es la cabecera que el panel lee para resolver la organización activa; cambiarle el nombre en un cliente rompe la solicitud.
- Usa el selector de organización en la cabecera del panel antes de abrir **Administración → Claves**. Las claves creadas allí pertenecen a la organización seleccionada. Confirma el slug de la organización en la URL y en el detalle de la clave antes de copiar la credencial en la automatización.
+ Usa el selector de organización en el encabezado del panel antes de abrir **Administración → Claves**. Las claves creadas allí pertenecen a la organización seleccionada. Confirma el slug de la organización en la URL y en el detalle de la clave antes de copiar la credencial en la automatización.
- Usa `--org` antes del comando, o envía la cabecera de organización para una clave de API de ámbito de instancia.
+ Usa `--org` antes del comando, o envía la cabecera de organización para una clave API con alcance de instancia. `fp orgs list` no descubre el slug aquí — se rechaza en modo clave; lee el slug desde el selector de organización del panel.
```bash
- fp orgs list
fp --org reliability-team sessions --since 24h
```
```bash
curl "https://app.befailproof.ai/v1/usage" \
- -H "Authorization: Bearer $FAILPROOFAI_KEY" \
+ -H "Authorization: Bearer $FP_API_KEY" \
-H "X-AgentEye-Org: reliability-team"
```
-Consulta las páginas de endpoints generadas en esta sección para conocer las rutas actuales, parámetros, requisitos de permisos y códigos de estado. La especificación se genera a partir de las anotaciones de rutas del servidor y se verifica contra el router `/v1`.
+## Paginación
+
+Los endpoints de listado utilizan paginación por keyset, y el mismo contrato se aplica tanto si los llamas a través de `fp` como de `curl`.
+
+| Elemento | Significado |
+| --- | --- |
+| Parámetro de consulta `limit` | Filas solicitadas en esta llamada. `fp` limita una sola solicitud a 200 filas en todos los endpoints. Una solicitud directa está limitada por el techo propio del servidor para cada endpoint. |
+| Parámetro de consulta `cursor` | Un token opaco que reanuda el feed después de una página anterior. |
+| Campo de respuesta `next_cursor` | El token para la siguiente página. `null` significa que el feed está agotado. |
+
+Esos techos varían según el endpoint, y cada página de endpoint indica su propio valor predeterminado y límite máximo:
+
+| Endpoint | Predeterminado | Límite |
+| --- | --- | --- |
+| `/events`, `/events/summary` | 50 | 1000 |
+| `/issues`, `/alerts/{id}/issues` | 200 | 1000 |
+| `/evaluation-jobs` | 100 | 500 |
+| `/audits/findings` | 100 | 500 |
+| `/sessions`, `/evaluations` | 50 | 200 |
+| `/audits/{id}/runs` | 50 | 200 |
+
+Lee un feed completo volviendo a emitir la misma solicitud con `cursor` establecido en el `next_cursor` de la respuesta anterior, hasta que `next_cursor` devuelva `null`. Los flags equivalentes de `fp` — `--all`, `--cursor` y `--page-size` — están documentados en la [referencia de Cloud CLI](/es/reference/cloud-cli).
+
+## Referencia de endpoints y manejo de errores
+
+Usa las páginas de endpoints generadas en esta sección para conocer las rutas actuales, los parámetros, los requisitos de permisos y los códigos de estado. La especificación se genera a partir de las anotaciones de rutas del servidor y se verifica contra el router `/v1`.
+
+La especificación actual tiene cobertura completa de rutas, métodos, parámetros, permisos y códigos de estado. Los cuerpos de solicitud están tipados; los cuerpos de respuesta no — la especificación no incluye esquemas de respuesta hoy en día, porque el servidor todavía los construye como JSON dinámico. Inspecciona una respuesta real antes de generar un cliente fuertemente tipado.
+
+Usa `Content-Type: application/json` para escrituras JSON. Trata `401` como autenticación ausente o inválida, `403` como identidad válida sin el permiso requerido, `404` como recurso ausente o inaccesible para la organización, `409` como conflicto de estado, `400` como parámetro rechazado — un valor de filtro desconocido, un parámetro de consulta malformado, una sentencia que no se ejecutaría — y `422` como campo o valor de permiso inválido en el cuerpo de una solicitud. Las respuestas de error incluyen un mensaje legible por humanos; los errores de permiso también indican la concesión requerida.
+
+## Superficies que `/v1` no expone
+
+Las políticas gestionadas en la nube, la flota y el feed de decisiones del guardrail son superficies de operador — tanto lecturas como escrituras. Son exclusivas del root en el servidor y están deliberadamente ausentes de `/v1`, que está orientado a internet. Publicar una versión de política o desplegarla en una máquina, por ejemplo, no es algo que una clave API pueda hacer, y la lectura de las decisiones de la flota pertenece a la misma superficie.
+
+Una clave API recibe por tanto una denegación por diseño en esas rutas, y `fp` rechaza antes de abrir una conexión en lugar de dejar que la solicitud devuelva un 404 sin explicación:
-La especificación actual tiene cobertura completa de rutas, métodos, parámetros, permisos y códigos de estado. Algunos cuerpos de respuesta permanecen intencionadamente sin tipar porque el servidor aún los construye como JSON dinámico. Inspecciona una respuesta real antes de generar un cliente fuertemente tipado para un endpoint que no tenga esquema de respuesta.
+| Comando | Comportamiento con una clave API |
+| --- | --- |
+| `fp policies` | Se rechaza con salida `2` e identifica las políticas gestionadas en la nube como superficie de operador |
+| `fp fleet` | Se rechaza con salida `2` e identifica la flota como superficie de operador |
+| `fp guardrails` | Se rechaza con salida `2` e identifica el feed del guardrail como superficie de operador |
+| `fp agent` | Se rechaza con salida `2`; el asistente está implementado por el panel, no por la API |
+| `fp orgs` | Se rechaza con salida `2`; la membresía en orgs pertenece a un usuario autenticado, y una clave ya actúa para una org |
-Usa `Content-Type: application/json` para escrituras JSON. Trata `401` como autenticación ausente o inválida, `403` como identidad válida sin el permiso requerido, `404` como recurso inexistente o inaccesible para la organización, `409` como conflicto de estado y `422` como campo o valor de permiso inválido. Las respuestas de error incluyen un mensaje legible por humanos; los fallos de permisos también indican el permiso requerido.
+Ejecuta estos comandos bajo una sesión de usuario autenticado (`fp login`), o usa el panel. Las familias de lectura y administración — sesiones, eventos, evaluaciones, auditorías, issues, alertas, claves, conjuntos de permisos, usuarios, configuración, consultas y uso — tienen cada una una ruta `/v1` y funcionan con una clave. La única excepción es `fp keys update`: necesita `keys:update`, un permiso que ninguna clave API puede tener, por lo que una clave puede crear y deshabilitar claves pero nunca editar los permisos de una. `fp login` y `fp logout` también se rechazan en modo clave, por una razón diferente: una clave ya es la credencial, y nunca se guarda en disco.
- El despliegue de la aplicación de políticas se gestiona intencionadamente fuera de la superficie pública ordinaria `/v1`. Utiliza el flujo de despliegue en la nube soportado.
+ El despliegue de la aplicación de políticas se gestiona intencionalmente fuera de la superficie pública ordinaria de `/v1`. Usa el flujo de despliegue en la nube compatible descrito en [Desplegar políticas](/es/policies/deploy).
\ No newline at end of file
diff --git a/docs/es/reference/local-dashboard.mdx b/docs/es/reference/local-dashboard.mdx
index 03737a9e9..f93aab13e 100644
--- a/docs/es/reference/local-dashboard.mdx
+++ b/docs/es/reference/local-dashboard.mdx
@@ -1,34 +1,36 @@
---
title: "Panel local"
-description: "Revisa proyectos locales, sesiones, actividad de políticas, configuración, auditorías y escaneos programados."
+description: "Revisa proyectos locales, sesiones, actividad de políticas, configuración, auditorías y análisis programados."
icon: "monitor-cog"
---
-Ejecuta `failproofai` sin argumentos para iniciar el panel incluido en `http://localhost:8020`. Lee historiales locales de agentes, configuración de políticas, resultados de auditorías y actividad de hooks directamente desde la máquina.
+Ejecuta `failproofai` sin argumentos para iniciar el panel integrado en `http://localhost:8020`. Lee los historiales locales de agentes, la configuración de políticas, los resultados de auditorías y la actividad de hooks directamente desde la máquina.
-El panel local es independiente de Failproof AI Cloud. Funciona sin una cuenta en la nube y no garantiza que los eventos hayan sido entregados a tu organización.
+En una máquina que no ha sido configurada, el comando sin argumentos ejecuta la configuración inicial antes de abrir el panel. Esto solo ocurre en una terminal interactiva: si se usa con redirección o en CI, imprime una sugerencia de una línea y abre el panel, porque un asistente al que nadie puede responder nunca debe bloquear el comando que escribiste. Define `FAILPROOFAI_NO_FIRST_RUN=1` para omitir completamente la redirección e ir directamente al panel.
+
+El panel local es independiente de Failproof AI Cloud. Funciona sin una cuenta de Cloud y no garantiza que los eventos hayan sido entregados a tu organización. En una máquina que completó la configuración, las decisiones que muestra fueron tomadas por el daemon `failproofaid`, que es el único evaluador; en una máquina que no ha sido configurada, los hooks se evalúan en proceso.
## Áreas del panel
-| Área | Qué puedes hacer |
+| Área | Lo que puedes hacer |
| --- | --- |
-| Políticas → Actividad | Inspeccionar decisiones locales de allow, instruct y deny; filtrar por decisión, evento, CLI, herramienta, origen, política y sesión. |
-| Políticas → Configurar | Habilitar funciones integradas, editar parámetros compatibles, activar o desactivar políticas personalizadas descubiertas y seleccionar los harnesses de destino. |
+| Políticas → Actividad | Inspeccionar decisiones locales de allow, instruct y deny; filtrar por decisión, evento, CLI, origen, política y sesión. |
+| Políticas → Configurar | Habilitar políticas de un paquete instalado, editar parámetros admitidos, activar o desactivar políticas personalizadas y de convención descubiertas, y seleccionar los entornos de destino. |
| Proyectos | Explorar proyectos descubiertos en los historiales de agentes compatibles y comparar sus sesiones más recientes. |
| Sesiones de proyecto | Abrir una transcripción local, revisar entradas ordenadas sin procesar y subagentes, descargarla y correlacionar la actividad de políticas. |
-| Auditoría | Revisar el último escaneo sin conexión, patrones riesgosos, puntos fuertes, proyectos afectados y políticas integradas sugeridas. |
-| Configuración | Configurar escaneos locales programados e informes de auditoría por correo electrónico cuando el daemon o la plataforma los admita. |
+| Auditoría | Revisar el último análisis sin conexión, patrones de riesgo, fortalezas, proyectos afectados y políticas integradas sugeridas. |
+| Configuración | Configurar análisis locales programados e informes de auditoría por correo electrónico cuando el daemon o la plataforma lo admitan. |
## Revisar la actividad de políticas
1. Abre **Políticas → Actividad** y establece los filtros de decisión y origen.
- 2. Filtra por evento, harness, herramienta o nombre de política.
- 3. Expande una fila para inspeccionar su motivo, políticas coincidentes, origen, modo de ejecución y duración.
- 4. Sigue el enlace de sesión para ubicar la decisión en el contexto de la transcripción.
+ 2. Acota por evento, entorno, nombre de política o sesión.
+ 3. La fila muestra la decisión, el evento, el entorno, la herramienta, la política, el modo de permisos y la duración. Expándela para ver el motivo completo, cada política coincidente, el origen decisivo, el despliegue en la nube, y el directorio de trabajo y la ruta de transcripción de la sesión. El nombre de la herramienta aparece en la fila pero no es un filtro.
+ 4. Sigue el enlace de sesión para situar la decisión en el contexto de la transcripción.
- Una fila con apariencia de denegación puede ser meramente observacional en un par harness/evento que no consume veredictos de bloqueo. La vista de detalle indica la capacidad de aplicación verificada.
+ Una fila con aspecto de denegación puede seguir siendo observacional en un par entorno/evento que no consume veredictos de bloqueo. La vista de detalle indica la capacidad de aplicación verificada.
```bash
@@ -37,7 +39,7 @@ El panel local es independiente de Failproof AI Cloud. Funciona sin una cuenta e
failproofai
```
- La actividad local se almacena en `~/.failproofai/hook-activity`. Usa el panel en lugar de editar estos archivos directamente.
+ La actividad local se almacena en `~/.failproofai/hook-activity`. Usa el panel en lugar de editar estos archivos.
@@ -45,33 +47,36 @@ El panel local es independiente de Failproof AI Cloud. Funciona sin una cuenta e
- 1. Abre **Políticas → Configurar** y elige los harnesses y el ámbito de configuración.
- 2. Habilita una política integrada o una política personalizada descubierta.
- 3. Para una política integrada con parámetros, abre su control de configuración y guarda los valores admitidos.
- 4. Regresa a Actividad y ejecuta acciones que coincidan y que no coincidan con la política.
+ 1. Abre **Políticas → Configurar** y elige los entornos y el ámbito de configuración. La pestaña es accesible directamente en `http://localhost:8020/policies?tab=policies`.
+ 2. Habilita una política de un paquete instalado, o una política personalizada o de convención descubierta.
+ 3. Para una política parametrizada, abre su control de configuración y guarda los valores admitidos.
+ 4. Vuelve a Actividad y ejecuta acciones que coincidan y que no coincidan.
- Las políticas de convención muestran su origen de proyecto o usuario. Los cambios explícitos de rutas personalizadas pueden requerir volver a ejecutar la configuración de la CLI para que la ruta seleccionada quede registrada.
+ La lista está vacía hasta que se instale un paquete — esta compilación no incluye políticas propias, así que ejecuta primero `failproofai policies add FailproofAI/policies`. Las políticas de convención muestran su origen de proyecto o usuario. Los cambios de ruta personalizada explícitos pueden requerir volver a ejecutar la configuración de CLI para que se registre la ruta seleccionada.
```bash
- failproofai policy add block-sudo --scope project
+ failproofai policies show FailproofAI/policies
+ failproofai policies add block-sudo --scope project
failproofai policies --install --custom ./security.policies.ts --scope project
failproofai policies
```
+
+ `policies show /` lee el contenido de un paquete antes de instalarlo. `--scope` acepta `user`, `project` o `local`; solo Claude Code admite `local`, y Hermes y OpenClaw solo admiten `user`.
## Explorar proyectos y sesiones
-La página de Proyectos combina los almacenes de historial local compatibles. Selecciona un proyecto para listar sus sesiones, luego abre una sesión para acceder al visor de registros sin procesar, los segmentos de subagentes, la acción de descarga y la actividad de políticas en el ámbito de la sesión.
+La página de Proyectos combina los almacenes de historial local compatibles. Selecciona un proyecto para listar sus sesiones, luego abre una sesión para acceder al visor de registros sin procesar, los segmentos de subagentes, la acción de descarga y la actividad de políticas con ámbito de sesión.
-Si falta un proyecto o sesión, confirma que el harness utiliza su ubicación de historial predeterminada o registra una raíz adicional con `failproofai harness add-path`.
+Si falta un proyecto o una sesión, confirma que el entorno usa su ubicación de historial predeterminada o registra una raíz adicional con `failproofai harness add-path [=]`.
## Programar auditorías sin conexión
- Abre **Configuración**, habilita el escaneo programado, elige el intervalo compatible y configura la entrega de informes cuando esté disponible. La página muestra la próxima ejecución, la última ejecución, el código de salida y si el daemon en segundo plano es compatible con la plataforma.
+ Abre **Configuración**, habilita el análisis programado, elige el intervalo compatible y configura la entrega de informes cuando esté disponible. La página muestra la próxima ejecución, la última ejecución, el código de salida y si el daemon en segundo plano es compatible con la plataforma.
```bash
@@ -79,10 +84,16 @@ Si falta un proyecto o sesión, confirma que el harness utiliza su ubicación de
failproofai audit --status
```
- Cambia el número de días para establecer un intervalo diferente entre 1 y 90 días. Deshabilita los escaneos recurrentes con `failproofai audit --no-schedule`; ejecuta `failproofai audit` para un escaneo interactivo inmediato.
+ Cambia el número de días para establecer un intervalo diferente entre 1 y 90 días. Desactiva los análisis recurrentes con `failproofai audit --no-schedule`, que detiene el temporizador y te mantiene con sesión iniciada; ejecuta `failproofai audit` para un análisis interactivo inmediato.
+
+ La programación inicia sesión la primera vez porque los hallazgos se envían por correo. `--email ` proporciona la dirección de antemano y omite el aviso de inicio de sesión.
+
+ El análisis y los hallazgos permanecen en esta máquina. La telemetría anónima de CLI se envía de forma predeterminada a menos que definas `FAILPROOFAI_TELEMETRY_DISABLED=1`. Los análisis programados también envían metadatos de la máquina y pueden enviar un resumen limitado de hallazgos después de que lo autorices.
+
+
- El panel local puede mostrar prompts, entradas de herramientas, contenido de archivos y salidas de terminal provenientes de los historiales locales de agentes. Vincúlalo únicamente a interfaces de confianza y detén el proceso cuando la revisión haya concluido.
+ El panel local puede mostrar prompts, entradas de herramientas, contenido de archivos y salida de terminal de los historiales locales de agentes. Vincúlalo solo a interfaces de confianza y detén el proceso cuando finalice la revisión.
\ No newline at end of file
diff --git a/docs/es/reference/overview.mdx b/docs/es/reference/overview.mdx
index a8fd4fdc5..1fc5ec048 100644
--- a/docs/es/reference/overview.mdx
+++ b/docs/es/reference/overview.mdx
@@ -1,20 +1,25 @@
---
title: "Integraciones y referencia"
-description: "Conecta harnesses de agentes compatibles, SDKs, CLIs y la API HTTP."
+description: "Conecta agentes, SDKs, CLIs y la API HTTP compatibles."
icon: "braces"
---
Elige la integración más cercana al entorno donde ya se ejecuta tu agente.
+Esta sección cubre dos herramientas de línea de comandos con funciones distintas. `failproofai` se ejecuta en la máquina donde corre tu agente y aplica la política dentro del bucle del agente; `fp` se comunica con Failproof AI Cloud y devuelve lo que hizo ese bucle. La configuración de máquinas solo está disponible en Linux y macOS — `failproofai config` rechaza cualquier otro sistema y no escribe nada, en lugar de dejar una máquina a medio configurar.
+
-
- Instala hooks para CLIs de agentes de código y autónomos compatibles.
+
+ Instala hooks para CLIs de agentes de codificación y autónomos compatibles.
Instrumenta LangGraph, CrewAI, LlamaIndex, Pydantic AI o un agente personalizado.
- Configuración, el catálogo de eventos, reglas de correlación y entrega.
+ Configuración, catálogo de eventos, reglas de correlación y entrega.
+
+
+ Los dos vocabularios de eventos, campos reservados y el archivo de configuración de la máquina.
Revisa proyectos locales, sesiones, actividad de políticas y auditorías sin conexión.
@@ -23,59 +28,71 @@ Elige la integración más cercana al entorno donde ya se ejecuta tu agente.
Configura la captura local, hooks, políticas, auditorías, entrega y estado de la máquina.
- Consulta y administra sesiones de Cloud, auditorías, incidencias, alertas, claves, usuarios y configuraciones.
+ Consulta y administra sesiones, auditorías, incidencias, alertas, claves, usuarios y configuraciones de Cloud.
-
+
Puntúa sesiones completas o inactivas con un servicio FastAPI.
Crea y prueba decisiones allow, instruct y deny específicas para tu flujo de trabajo.
-
- Despliega el plano de control de Cloud en un clúster de Kubernetes gestionado por el cliente.
+
+ Referencia generada para la superficie pública `/v1`.
+
+
+ Diagnostica hooks que no se disparan, eventos que no llegan y denegaciones inesperadas.
+
+
+ Despliega el plano de control de Cloud en un clúster Kubernetes gestionado por el cliente.
-La [referencia de la API HTTP](/es/reference/http-api) generada cubre la superficie pública `/v1`. Las páginas escritas manualmente explican flujos de trabajo que abarcan múltiples endpoints o utilizan interfaces administrativas fuera de esa superficie pública.
+Las páginas de la API HTTP generadas cubren la superficie pública `/v1`. Las páginas escritas a mano explican flujos de trabajo que abarcan múltiples endpoints o que usan interfaces administrativas fuera de esa superficie pública.
-## Conectar un agente y verificar los datos
+## Conectar un agente y verificar datos
1. Abre **Administración → Claves**, crea una clave con `events:add` y `policies:pull`, y copia el secreto.
- 2. Configura la integración utilizando la página correspondiente indicada arriba.
- 3. Abre **Observar → Eventos** para confirmar que los eventos llegan, luego **Observar → Sesiones** para confirmar que forman ejecuciones completas.
+ 2. Configura la integración usando la página correspondiente de arriba.
+ 3. Abre **Observar → Eventos** para confirmar que llegan eventos, luego **Observar → Sesiones** para confirmar que forman ejecuciones completas.
4. Filtra por el entorno de la integración e inspecciona una sesión para verificar los campos de modelo, herramienta, error y política que necesitan las auditorías.
- Comienza con el panel de claves. Los permisos seleccionados determinan si la máquina puede enviar eventos y recibir políticas gestionadas desde Cloud.
+ Comienza por el panel de claves. Los permisos seleccionados determinan si la máquina puede enviar eventos y recibir políticas gestionadas desde Cloud.
- 
+ 
- Después de conectar la integración, usa la lista de Sesiones para confirmar que sus eventos se están agrupando en ejecuciones completas en el entorno esperado.
+ Tras conectar la integración, usa la lista de Sesiones para confirmar que sus eventos se están agrupando en ejecuciones completas en el entorno esperado.
- 
+ 
- Abre una de estas sesiones antes de dar la integración por completa; el trazado debe contener el modelo, la herramienta, el error y la evidencia de política que necesitan tus auditorías.
+ Abre una de estas sesiones antes de considerar la integración completa; el rastreo debe contener el modelo, la herramienta, el error y la evidencia de política que necesitan tus auditorías.
- Crea una clave de máquina, conecta el daemon de Failproof y verifica la primera sesión.
+ Crea una clave de máquina, configura y conecta esta máquina, elige políticas y verifica la primera sesión.
```bash
fp keys create agent-production \
--add events:add \
--add policies:pull
- failproofai config \
- --connect https://app.befailproof.ai \
- --token
+ failproofai config --token
+
+ failproofai policies add FailproofAI/policies
failproofai flush --wait
- fp sessions --since 1h --env production
- fp events --since 1h --env production --limit 20
+ fp sessions --since 1h
+ fp events --since 1h --limit 20
```
+ Ninguno de los comandos de verificación filtra por entorno, porque una máquina recién configurada etiqueta todos los eventos como `local`. Añade `--env production` solo después de establecer `collector.environment` — consulta [Cambiar una etiqueta de entorno](/es/reference/events-and-configuration#change-an-environment-label).
+
+ Pasar un token es la solicitud de conexión, por lo que `failproofai config --token ` hace lo mismo en un solo comando. Es preferible usar la variable de entorno: un argumento es visible desde `ps` por cualquier usuario del sistema, y queda registrado en el historial de la shell y en los logs de CI.
+
+ El paso de políticas no es opcional. `failproofai config` instala el daemon y conecta todos los CLIs de agentes compatibles, pero no elige ninguna política deliberadamente, por lo que una máquina recién configurada no aplica nada hasta que añadas un paquete.
+
Usa `fp --json sessions ...` cuando otro programa vaya a consumir el resultado. Los flags globales como `--json`, `--org` y `--base-url` deben ir antes del comando.
- Consulta la [referencia del CLI de Failproof AI](/es/reference/failproof-cli) para los comandos locales y la [referencia del CLI de Failproof Cloud](/es/reference/cloud-cli#cli-commands) para los comandos `fp`.
+ Consulta la [referencia de la CLI de Failproof AI](/es/reference/failproof-cli) para los comandos locales y la [referencia de la CLI de Failproof Cloud](/es/reference/cloud-cli#cli-commands) para los comandos de `fp`.
\ No newline at end of file
diff --git a/docs/es/reference/policy-sdk.mdx b/docs/es/reference/policy-sdk.mdx
index 6b181ecfc..dd0c08e85 100644
--- a/docs/es/reference/policy-sdk.mdx
+++ b/docs/es/reference/policy-sdk.mdx
@@ -4,32 +4,32 @@ description: "Crea, prueba e implementa políticas en JavaScript o TypeScript pa
icon: "shield-plus"
---
-Las políticas personalizadas convierten un patrón de fallos detectado en tus trazas o auditorías en una decisión que se ejecuta mientras el agente trabaja. Una política puede permitir una acción, dar orientación al agente o bloquear la acción antes de que cause otro incidente.
+Las políticas personalizadas convierten un patrón de fallos de tus trazas o auditorías en una decisión que se ejecuta mientras un agente trabaja. Una política puede permitir una acción, proporcionar orientación al agente o denegar la acción antes de que provoque otro incidente.
-Usa una política personalizada cuando el comportamiento dependa de tus herramientas, rutas, comandos, entornos o reglas operativas. Consulta primero el [catálogo de políticas integradas](/es/policies/builtin-catalog) para no recrear un control que ya existe.
+Usa una política personalizada cuando el comportamiento dependa de tus herramientas, rutas, comandos, entornos o reglas operativas. Consulta primero el [catálogo de políticas integradas](/es/policies/builtin-catalog) para no recrear un control ya existente.
## Crear una política personalizada
-
+
1. Ve a **Admin → editor de políticas**, selecciona **Nueva política** y describe el fallo que quieres prevenir.
- 2. Añade el código fuente de la política y prueba coincidencias esperadas y acciones seguras sin coincidencia en el editor. Resuelve todos los errores de validación.
+ 2. Añade el código fuente de la política, luego prueba las coincidencias esperadas y los casos seguros sin coincidencia en el editor. Resuelve todos los errores de validación.
3. Guarda el borrador y selecciona **Publicar versión** para crear una versión inmutable.
4. Ve a **Admin → aplicación**, despliega la versión en una máquina de prueba en modo **observar** y verifica sus decisiones en **Observar → política** antes de aplicarla.

- 1. Crea `.failproofai/policies/checkout-policies.ts`. El nombre del archivo debe terminar en `policies.js`, `policies.mjs` o `policies.ts`.
+ 1. Escribe una política inicial con `failproofai publish --init`, o crea `.failproofai/policies/checkout-policies.ts` manualmente. Por convención, el nombre del archivo debe terminar en `policies.js`, `policies.mjs` o `policies.ts`.
2. Registra una o más políticas con `customPolicies.add()`.
- 3. Valida e instala el archivo con `failproofai policies --install --custom ./.failproofai/policies/checkout-policies.ts --scope project`.
- 4. Activa una acción que coincida y una acción segura. Ejecuta `failproofai policies` e inspecciona las decisiones atribuidas en **Observar → política**.
+ 3. Aplica el archivo en esta máquina de inmediato: `failproofai policies -i -c ./.failproofai/policies/checkout-policies.ts`.
+ 4. Activa una acción que coincida y una acción segura. Ejecuta `failproofai policies`, luego abre **Políticas → Actividad** en el [dashboard local](/es/reference/local-dashboard) y filtra por origen para ver qué política tomó la decisión.
-## Empieza con una regla estrecha
+## Empieza con una regla específica
-Esta política bloquea comandos destructivos de Kubernetes solo cuando el comando apunta a producción. Todo lo que quede fuera de ese modo de fallo exacto devuelve `allow()`.
+Esta política bloquea comandos destructivos de Kubernetes únicamente cuando el comando apunta a producción. Todo lo que quede fuera de ese fallo exacto devuelve `allow()`.
```ts
import { customPolicies, allow, deny } from "failproofai";
@@ -55,20 +55,33 @@ customPolicies.add({
});
```
-Las buenas políticas son lo suficientemente específicas como para explicarse en una sola frase. Haz coincidir la acción observable, no la intención que esperas que el agente tuviera, y devuelve `allow()` en cuanto la regla no aplique.
+Las buenas políticas son lo suficientemente específicas como para explicarse en una sola frase. Detecta la acción observable, no la intención que esperas que tenga el agente, y devuelve `allow()` en cuanto la regla no aplique.
## Elige una decisión
-| Helper | Resultado | Úsalo cuando |
+| Helper | Resultado | Cuándo usarlo |
| --- | --- | --- |
| `allow(reason?)` | La operación continúa. | La política no aplica o la acción es segura. |
-| `instruct(reason)` | La operación continúa con orientación donde el harness lo admita. | Quieres dirigir al agente hacia un mejor enfoque sin imponer un invariante. |
-| `deny(reason)` | La operación se bloquea cuando el evento y el harness admiten el bloqueo. | La acción no debe continuar. |
+| `instruct(reason)` | La operación continúa y el motivo se entrega al agente en los entornos que disponen de un canal para ello. | Cuando quieres orientar al agente hacia un mejor enfoque sin imponer una restricción obligatoria. |
+| `deny(reason)` | La operación es bloqueada en el entorno y los pares de eventos verificados para consumir un veredicto de bloqueo. | La acción no debe continuar. |
Escribe el motivo pensando en el agente que debe recuperarse. Explica qué se detectó y qué debería hacer en su lugar.
+### Dónde llega realmente `instruct()`
+
+`instruct()` necesita un canal de contexto adicional en el entorno. Seis entornos no disponen de él en algunos o todos los eventos; en esos casos la operación se permite y el mensaje se escribe en stderr, donde el agente nunca lo lee.
+
+| Entorno | Eventos que entregan la instrucción |
+| --- | --- |
+| Claude, Codex, Copilot, Cursor, Devin, OpenCode | `PreToolUse`, `PostToolUse`, `UserPromptSubmit` y `PermissionRequest` la llevan como contexto adicional. `Stop` y `SubagentStop` la llevan a través del canal de reintento. Todos los demás eventos emiten un mensaje que el entorno ignora. |
+| Antigravity | Solo `UserPromptSubmit` y `Stop`. |
+| Factory, Pi, OpenClaw | Solo `Stop`. |
+| Hermes, Goose | Ninguno. Siempre permite más una nota en stderr. |
+
+Ningún entorno activa los 29 eventos canónicos, por lo que la primera fila está limitada por lo que cada uno instala: una instrucción solo llega en un evento que ese entorno realmente activa. Consulta el conjunto de eventos instalados por entorno en [Entornos de agentes](/es/reference/harnesses) antes de depender de uno.
+
- No uses `instruct()` como límite de seguridad. La entrega de orientación varía según el harness del agente. Usa `deny()` cuando la acción deba prevenirse.
+ No uses `instruct()` como límite de seguridad. En Hermes y Goose nunca llega al agente, y en Antigravity, Factory, Pi y OpenClaw no llega en eventos de herramientas. Usa `deny()` cuando la acción deba prevenirse.
## Objeto de política
@@ -84,13 +97,15 @@ customPolicies.add({
| Campo | Requerido | Descripción |
| --- | --- | --- |
-| `name` | Sí | Identificador estable para la política. Mantén los nombres únicos entre archivos. |
-| `description` | No | Propósito legible por humanos que aparece en los listados de políticas y decisiones. |
+| `name` | Sí | Identificador estable de la política. Mantén los nombres únicos en todos los archivos. |
+| `description` | No | Propósito legible por humanos que se muestra en los listados de políticas y en las decisiones. |
| `match.events` | No | Tipos de evento que invocan la política. Omitir `match` la invoca para todos los eventos disponibles. |
| `fn` | Sí | Función síncrona o asíncrona que devuelve un resultado `allow`, `instruct` o `deny`. |
Filtra las herramientas dentro de `fn`. `match.toolNames` no forma parte del tipo público de política personalizada.
+Una política publicada dentro de un pack puede llevar dos campos adicionales: `category` y `defaultEnabled`. Consulta [De un archivo a un pack](#from-a-file-to-a-pack).
+
## Contexto de la política
Cada política recibe un `PolicyContext`.
@@ -99,17 +114,17 @@ Cada política recibe un `PolicyContext`.
| --- | --- | --- |
| `eventType` | `HookEventType` | Evento normalizado que se está evaluando actualmente. |
| `toolName` | `string \| undefined` | Nombre canónico de la herramienta, como `Bash`, `Read`, `Write` o `Edit`. |
-| `toolInput` | `Record \| undefined` | Entrada canónica para la llamada a herramienta actual. |
+| `toolInput` | `Record \| undefined` | Entrada canónica para la llamada de herramienta actual. |
| `payload` | `Record` | Payload completo del evento normalizado. |
-| `session` | `SessionMetadata \| undefined` | ID de sesión, directorio de trabajo, ruta de transcript, modo de permisos y metadatos del harness cuando estén disponibles. |
-| `cli` | `string \| undefined` | Harness del agente de origen, como `claude`, `codex` o `cursor`. |
-| `params` | `Record` | Parámetros de políticas integradas. Las políticas personalizadas reciben actualmente un objeto vacío. |
+| `session` | `SessionMetadata \| undefined` | ID de sesión, directorio de trabajo, ruta del transcript, modo de permisos y metadatos del entorno cuando estén disponibles. |
+| `cli` | `string \| undefined` | Entorno del agente de origen, como `claude`, `codex` o `cursor`. |
+| `params` | `Record` | Parámetros de esta política. Una política integrada o de pack declara un esquema y los valores configurados por el usuario se fusionan sobre sus valores predeterminados. Una política en un archivo personalizado no declara esquema, por lo que recibe lo que el usuario configuró bajo su nombre, y `{}` cuando no hay nada configurado. |
-Trata cada valor opcional como genuinamente opcional. Las versiones del agente y los tipos de evento no proveen los mismos campos en todos los casos.
+Trata cada valor opcional como genuinamente opcional. Las versiones de agentes y los tipos de eventos no proporcionan todos los mismos campos.
### Entradas comunes de herramientas
-Failproof AI normaliza las herramientas comunes entre los harnesses compatibles, por lo que una política generalmente puede usar una única forma de entrada.
+Failproof AI normaliza las herramientas comunes en todos los entornos compatibles para que una política pueda usar generalmente una misma forma de entrada.
| Herramienta | Campos comunes |
| --- | --- |
@@ -119,7 +134,7 @@ Failproof AI normaliza las herramientas comunes entre los harnesses compatibles,
| `Edit` | `file_path`, `old_string`, `new_string` |
| `Grep` | `pattern`, `path` |
-Usa coerción defensiva porque los valores de entrada de las herramientas están tipados como `unknown`:
+Usa coerción defensiva porque los valores de entrada de las herramientas tienen tipo `unknown`:
```ts
const command = String(ctx.toolInput?.command ?? "");
@@ -130,21 +145,21 @@ const filePath = String(ctx.toolInput?.file_path ?? "");
| Evento | Cuándo se ejecuta | Uso típico |
| --- | --- | --- |
-| `PreToolUse` | Antes de que se ejecute una herramienta. | Bloquear o guiar comandos, escrituras, lecturas y acciones externas. |
-| `PostToolUse` | Después de que una herramienta retorna. | Inspeccionar resultados antes de que lleguen al agente. Un deny bloquea el resultado completo; no redacta campos seleccionados. |
+| `PreToolUse` | Antes de que se ejecute una herramienta. | Bloquear o guiar comandos, escrituras, lecturas y acciones externas. Este es el punto de control. |
+| `PostToolUse` | Después de que la herramienta ya se haya ejecutado. | Inspeccionar o reemplazar el resultado que lee el modelo. No puede deshacer el efecto secundario —la escritura o el comando ya ocurrieron— y en diez de los doce entornos el veredicto no puede detener nada. Solo Codex y Copilot lo consumen, y aun así reemplaza el resultado que lee el modelo en lugar de prevenir la llamada. Nunca lo uses como punto de control. |
| `PermissionRequest` | Cuando el agente solicita permiso. | Aplicar reglas de permisos específicas de la organización. |
-| `UserPromptSubmit` | Antes de que un prompt enviado continúe. | Rechazar instrucciones prohibidas o añadir orientación de flujo de trabajo. |
+| `UserPromptSubmit` | Antes de que un prompt enviado continúe. | Rechazar instrucciones prohibidas o añadir orientación sobre el flujo de trabajo. |
| `Stop` | Cuando el agente intenta finalizar. | Requerir una condición de finalización alcanzable, como un paso de verificación local. |
-| `SubagentStop` | Cuando un subagente intenta finalizar. | Controlar el trabajo delegado antes de que vuelva al padre. |
-| `SessionStart` / `SessionEnd` | En los límites de sesión. | Registrar o comprobar el estado a nivel de sesión. |
+| `SubagentStop` | Cuando un subagente intenta finalizar. | Controlar el trabajo delegado antes de que regrese al agente padre. |
+| `SessionStart` / `SessionEnd` | En los límites de sesión. | Registrar o verificar el estado a nivel de sesión. |
-La disponibilidad de eventos y el comportamiento de bloqueo dependen del harness del agente. Consulta [Harnesses de agente](/es/reference/harnesses) antes de depender de un evento en una flota mixta.
+La disponibilidad de eventos y el comportamiento de bloqueo dependen del entorno del agente, y las diferencias son significativas: Failproof AI no instala ningún hook `Stop` para Goose ni Hermes, por lo que un control de parada nunca se activa en ninguno de los dos. Consulta [Entornos de agentes](/es/reference/harnesses) antes de depender de un evento en una flota mixta.
- `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `PreToolUse`, `PermissionRequest`, `PermissionDenied`, `PostToolUse`, `PostToolUseFailure`, `Notification`, `SubagentStart`, `SubagentStop`, `TaskCreated`, `TaskCompleted`, `Stop`, `StopFailure`, `TeammateIdle`, `InstructionsLoaded`, `ConfigChange`, `CwdChanged`, `FileChanged`, `WorktreeCreate`, `WorktreeRemove`, `PreCompact`, `PostCompact`, `Elicitation`, `ElicitationResult`, `UserPromptExpansion`, `PostToolBatch` y `Setup`.
+ `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `PreToolUse`, `PermissionRequest`, `PermissionDenied`, `PostToolUse`, `PostToolUseFailure`, `Notification`, `SubagentStart`, `SubagentStop`, `TaskCreated`, `TaskCompleted`, `Stop`, `StopFailure`, `TeammateIdle`, `InstructionsLoaded`, `ConfigChange`, `CwdChanged`, `FileChanged`, `WorktreeCreate`, `WorktreeRemove`, `PreCompact`, `PostCompact`, `Elicitation`, `ElicitationResult`, `UserPromptExpansion`, `PostToolBatch` y `Setup`. Ese es el conjunto completo de 29 nombres de eventos canónicos en los que se normaliza el vocabulario de eventos propio de cada entorno.
-## Crea patrones comunes de políticas
+## Patrones comunes de políticas
### Bloquear escrituras en rutas protegidas
@@ -166,7 +181,7 @@ customPolicies.add({
});
```
-### Dar orientación sin bloquear
+### Proporcionar orientación no bloqueante
```ts
import { customPolicies, allow, instruct } from "failproofai";
@@ -186,7 +201,7 @@ customPolicies.add({
});
```
-### Controlar la finalización de la sesión
+### Controlar la finalización de sesión
```ts
import { execFileSync } from "node:child_process";
@@ -215,10 +230,10 @@ customPolicies.add({
```
- Un evento `Stop` denegado puede hacer que el agente reintente. Solo condiciona la finalización a algo que el agente pueda satisfacer en el entorno actual, y limita el tiempo de cada subproceso o llamada de red.
+ Un evento `Stop` denegado puede hacer que el agente reintente. Solo establece controles sobre condiciones que el agente pueda satisfacer en el entorno actual, y limita todos los subprocesos o llamadas de red.
-## Cargar archivos de políticas
+## Cargar archivos de política
### Archivos de convención
@@ -229,16 +244,33 @@ Los archivos de convención se cargan automáticamente:
~/.failproofai/policies/personal-policies.mjs
```
-- Se cargan tanto los directorios de políticas del proyecto como los del usuario.
-- Los archivos se cargan en orden alfabético dentro de cada directorio.
-- El archivo debe terminar en `policies.js`, `policies.mjs` o `policies.ts`.
+- Los directorios de políticas del proyecto y del usuario se cargan ambos.
+- Los archivos se cargan alfabéticamente dentro de cada directorio.
+- Un archivo debe terminar en `policies.js`, `policies.mjs` o `policies.ts`.
- Se admiten múltiples llamadas a `customPolicies.add()` en un mismo archivo.
- Se admiten importaciones relativas desde módulos locales.
-- Las políticas del proyecto pueden commitearse para que las mismas reglas acompañen al repositorio.
+- Las políticas del proyecto pueden confirmarse en el repositorio para que las mismas reglas sigan al proyecto.
+
+
+ Un archivo en el directorio cuyo nombre no termine en `policies.{js,mjs,ts}` se omite. Parece instalado pero no aplica nada. El cargador lista cada archivo omitido con el nombre al que debe renombrarse; lee esa advertencia en lugar de asumir que una política está activa. Este repositorio entregó `block-version-bumps.mjs` de esa manera, y el control escrito tras una versión incorrecta nunca llegó a ejecutarse ni una sola vez.
+
+
+`~/.failproofai/policies/` también contiene dos subdirectorios que no creaste tú: `cloud-policies/` para despliegues gestionados en flota y `packs/` para los packs instalados. El cargador nunca desciende a ninguno de los dos, por lo que nada en ellos se recoge como una política de convención no verificada.
+
+### Desactivar una política encontrada
+
+Dos claves en `policies-config.json` desactivan las políticas de convención sin eliminar ni renombrar el archivo:
+
+| Clave | Efecto |
+| --- | --- |
+| `disabledCustomPolicies` | Un array de IDs de política calificados por origen que no se registran. |
+| `customPoliciesEnabled` | Establécelo en `false` para dejar de cargar `.failproofai/policies/` por completo. Si está ausente, se considera habilitado. |
+
+La pestaña **Políticas → Configurar** del [dashboard local](/es/reference/local-dashboard) escribe `disabledCustomPolicies` por ti. `customPoliciesEnabled` lo escribe `failproofai config` o manualmente.
### Archivos explícitos
-Usa rutas explícitas cuando la validación o la configuración deba nombrar el archivo de entrada directamente:
+Usa rutas explícitas cuando la validación o configuración deba nombrar directamente el archivo de entrada:
```bash
failproofai policies --install \
@@ -247,57 +279,94 @@ failproofai policies --install \
--scope project
```
-Los archivos explícitos se cargan primero, seguidos de los archivos de convención del proyecto y luego los del usuario. Un archivo descubierto por ambas vías se carga una sola vez.
+Los archivos explícitos se cargan primero, seguidos de los archivos de convención del proyecto y luego los del usuario. Un archivo descubierto por ambas rutas se carga una sola vez.
## Validar y probar
-La validación ejecuta el módulo a través del cargador de producción y confirma que registra al menos una política.
+`-c` es la forma abreviada de `--custom` e `-i` de `--install`. Aplica el archivo de inmediato, en cualquier ruta y con cualquier nombre de archivo:
```bash
-failproofai policies --install \
- --custom ./.failproofai/policies/checkout-policies.ts \
- --scope project
+failproofai policies -i -c ./checkout-policies.ts
failproofai policies
```
-La validación detecta archivos faltantes, errores de sintaxis, importaciones no resueltas, excepciones de nivel superior y timeouts de carga de módulos. No garantiza que tu lógica de coincidencia sea correcta.
+Pide a tu agente que realice la acción que bloqueaste y comprueba que la rechaza. No se publica nada y ninguna otra máquina se ve afectada.
+
+La validación ejecuta el módulo a través del cargador de producción y confirma que registra al menos una política. Detecta archivos faltantes, errores de sintaxis, importaciones no resueltas, excepciones de nivel superior y tiempos de espera al cargar el módulo. No garantiza que tu lógica de coincidencia sea correcta.
Prueba al menos estos casos:
- Una acción que debe coincidir y producir el motivo de política esperado.
- Una acción cercana pero segura que debe devolver `allow()`.
- Campos de herramienta faltantes o malformados.
-- Sintaxis de comando alternativa, rutas, comillas, mayúsculas/minúsculas y espacios en blanco.
+- Sintaxis alternativa de comandos, rutas, comillas, mayúsculas y espacios en blanco.
- Un subproceso o dependencia de red no disponible.
-Atribuye el resultado a tu política personalizada en **Observar → política**. Una prueba bloqueada no es suficiente si una política integrada diferente tomó la decisión.
+Atribuye el resultado a tu política personalizada en **Políticas → Actividad** en el dashboard local. Un bloqueo de prueba no es suficiente si una política integrada diferente tomó la decisión.
## Comportamiento en tiempo de ejecución
-- Las políticas integradas se evalúan antes que las personalizadas.
+- Las políticas integradas se evalúan antes que las políticas personalizadas.
- El primer `deny` detiene la evaluación de políticas adicionales.
- Múltiples resultados `instruct` pueden combinarse cuando ninguna política deniega el evento.
-- Una función de política tiene un plazo de ejecución de 10 segundos.
-- Una excepción lanzada o un timeout se registra y se trata como `allow()`.
+- Una función de política tiene un plazo de ejecución de 10 segundos. La carga del módulo de nivel superior tiene el mismo plazo.
+- Una excepción lanzada o un tiempo de espera se registran y se tratan como `allow()`.
- Un archivo de convención que no se carga se omite; los demás archivos personalizados y las políticas integradas continúan.
-- La carga del módulo de nivel superior también tiene un plazo de 10 segundos.
-- El modo observar en la nube ejecuta la política pero registra una decisión que no es allow sin aplicarla.
+- El modo de observación ejecuta la política realmente y registra cualquier veredicto que no sea allow sin aplicarlo. Dos capas lo establecen: `failproofai publish --effect observe` en un pack que publicas, y `fp fleet deploy --add :observe` en un despliegue Cloud. En cualquier caso, la política se evalúa bajo el mismo plazo de 10 segundos que una en modo de aplicación, por lo que una política que agota el tiempo se registra como allow.
+
+### Dónde el cargador falla de forma cerrada en cambio
+
+La regla de fallo abierto anterior cubre un archivo que añadiste tú mismo. Dos rutas hacen deliberadamente lo contrario, porque ambas significan que a esta máquina se le dijo que tenía una aplicación que no tiene.
+
+| Situación | Resultado |
+| --- | --- |
+| Un pack seleccionado no puede cargarse, o su digest fijado no coincide | Se deniega cada evento en el ámbito que ese pack declaró, atribuido a `pack/failproofai-pack-unavailable`. `UserPromptSubmit` instruye en lugar de denegar, para que nunca quedes bloqueado del agente que necesitas para solucionarlo. Los metadatos de pack ilegibles amplían el ámbito denegado en lugar de reducirlo. |
+| El daemon `failproofaid` no puede alcanzarse en una máquina que completó la configuración | Se deniega cada evento. No se lee ninguna configuración y no se ejecuta ninguna política personalizada, porque un daemon que no pudo alcanzarse tampoco podría haberlas ejecutado. Una discrepancia de versión de protocolo también deniega, con un mensaje que nombra `failproofai config`. |
+
+En una máquina que completó la configuración, `failproofaid` es el único evaluador, por lo que tu `fn` se ejecuta dentro del worker activo del daemon en lugar del proceso de hook. El cliente del hook permite 150 ms para conectarse y 30 segundos para la respuesta, muy por encima del plazo fijo de 10 segundos que recibe cada función de política.
+
+Mantén los módulos de política deterministas y rápidos. Evita llamadas de red de nivel superior o el inicio de servidores. Limita el trabajo dentro de `fn`, gestiona los fallos de dependencias y decide deliberadamente si ese fallo debe permitir o denegar la operación.
+
+## De un archivo a un pack
+
+Un pack es la manera en que un archivo de políticas se convierte en algo que otras máquinas pueden instalar. Dos comandos te llevan de cero a un pack publicado:
+
+```bash
+failproofai publish --init
+failproofai publish
+```
+
+`--init` pregunta cómo se llama el pack, escribe `.mjs` y se detiene. El archivo no es una plantilla con espacios en blanco: es una política que ya bloquea `git push --force`, así que lo primero que editas es algo que funciona. Pruébalo localmente con `failproofai policies -i -c ./.mjs`, luego ejecuta `failproofai publish` desde dentro del repositorio git que lo contiene.
+
+Dos campos importan una vez que una política se publica en un pack:
+
+| Campo | Qué hace |
+| --- | --- |
+| `category` | Lo que selecciona `failproofai policies add / --category git,database`. |
+| `defaultEnabled` | Si un `failproofai policies add /` sin argumentos activa esta política. Por defecto es `false`. |
+
+`--effect` se establece por pack en lugar de por política: `failproofai publish --effect observe` publica un pack que registra lo que habrían decidido sus políticas sin bloquear nada. El valor predeterminado es `enforce`. Este es el modo de observación en una sola máquina sin conexión Cloud: lee los veredictos registrados en **Políticas → Actividad** en el dashboard local.
-Mantén los módulos de política deterministas y rápidos. Evita llamadas de red o el inicio de servidores en el nivel superior. Limita el trabajo dentro de `fn`, captura los fallos de dependencias y decide deliberadamente si ese fallo debe permitir o denegar la operación.
+La versión del pack es el sha corto de 12 caracteres del commit a partir del cual se construyó, por lo que `publish` rechaza ejecutarse fuera de un checkout de git o en un árbol con cambios sin confirmar. Consulta [Publicar un pack](/es/policies/publish-a-pack) para el flujo completo y [Packs de políticas](/es/policies/packs) para saber cómo las instalaciones resuelven una versión.
## Exportaciones de la API
| Exportación | Propósito |
| --- | --- |
-| `customPolicies.add(policy)` | Registra una política personalizada cuando se carga el módulo. |
+| `customPolicies.add(policy)` | Registra una política personalizada cuando el módulo se carga. |
| `allow(reason?)` | Permite la operación. |
-| `instruct(reason)` | Permite la operación y proporciona orientación donde esté soportado. |
-| `deny(reason)` | Bloquea la operación donde esté soportado. |
-| `getCustomHooks()` | Devuelve las políticas registradas actualmente en el registro del módulo. |
+| `instruct(reason)` | Permite la operación y proporciona orientación donde sea compatible. |
+| `deny(reason)` | Bloquea la operación donde sea compatible. |
+| `getCustomHooks()` | Devuelve las políticas actualmente registradas en el registro del módulo. |
| `clearCustomHooks()` | Limpia ese registro, principalmente para pruebas y cargadores. |
TypeScript exporta `PolicyContext`, `PolicyResult`, `CustomHook`, `PolicyDecision` y `PolicyFunction`.
-
- Publica una versión, despliégala en modo observar, verifica las decisiones y pasa a la aplicación.
-
\ No newline at end of file
+
+
+ Publica tus políticas como un pack que cualquiera puede instalar desde una release pública de GitHub.
+
+
+ Publica una versión, despliégala en modo de observación, verifica las decisiones y pasa a la aplicación.
+
+
\ No newline at end of file
diff --git a/docs/es/reference/troubleshooting.mdx b/docs/es/reference/troubleshooting.mdx
index cadda7682..462fe9240 100644
--- a/docs/es/reference/troubleshooting.mdx
+++ b/docs/es/reference/troubleshooting.mdx
@@ -1,167 +1,100 @@
---
title: "Solución de problemas"
-description: "Diagnostica sesiones faltantes, políticas ausentes, fallos de entrega y acciones de agente bloqueadas."
+description: "Diagnostica problemas de configuración, entrega, políticas y sesiones."
icon: "wrench"
---
-
-
-
-
- Abre **Administration → Keys** y confirma que la clave de máquina está activa y tiene `events:add`. Luego abre **Observe → Events**, amplía el rango de tiempo y limpia los filtros de entorno y agente. Si existen eventos, busca el ID de sesión y luego comprueba **Observe → Sessions** para la agrupación. Si no existen eventos, diagnostica el daemon de Failproof desde la CLI.
-
- 
-
-
- ```bash
- failproofai config --status
- failproofai flush --wait --timeout 60
- fp list envs
- fp events --since 24h --limit 20
- fp sessions --since 24h --limit 20
- ```
-
- Confirma que la captura está habilitada, que la clave configurada tiene `events:add` y que el filtro del dashboard coincide con el entorno emitido.
-
-
-
-
-
-
- Limpia los filtros en **Observe → Events** y busca el ID de sesión exacto del SDK. Si no aparece nada, inspecciona el spool del SDK y el daemon de Failproof en la máquina de origen.
-
-
- ```bash
- failproofai config --status
- failproofai flush --wait
- ```
-
- Confirma que hay un daemon en ejecución y conectado — el SDK hace spool independientemente de si hay uno activo. El directorio de spool **no** necesita existir de antemano (el escritor lo crea), y ninguna variable de entorno lo selecciona: `$FAILPROOFAI_HOME/custom-agents` o, en su defecto, `~/.failproofai/custom-agents` es la única raíz, y `configure(base_dir=...)` es la única forma de sobreescribirlo. Si el proceso fue terminado con `SIGKILL` o por falta de memoria, todo lo que estaba en cola se pierde — maneja `SIGTERM` para acotar esa situación.
-
-
-
-
-
-
- Abre **Admin → enforcement**, selecciona la máquina y compara sus versiones asignada, reportada y anterior. Confirma que el alcance de despliegue incluye la máquina y que su clave tiene `policies:pull`. La ingesta puede funcionar aunque la entrega de políticas falle.
-
-
-
- ```bash
- failproofai config --status
- failproofai update
- failproofai config --status
- ```
-
- Confirma que el ID y la etiqueta de la máquina coinciden con el objetivo en el dashboard. Reconéctate con una clave habilitada para políticas si la credencial actual solo permite la ingesta de eventos.
-
-
-
-
-
-
- Abre **Admin → enforcement** e inspecciona la última vez que se vio la máquina y su versión reportada. Si la máquina está desactualizada, trátalo como un problema local del daemon. No debilites la política desplegada solo para eludir un daemon no disponible.
-
-
-
- ```bash
- failproofai config --status
- failproofai update
- failproofai config
- failproofai config --status
- ```
-
- Reinicia o actualiza `failproofaid`; vuelve a ejecutar la configuración cuando las versiones de protocolo de la CLI y del daemon difieran. La ruta de daemon configurada falla de forma cerrada por diseño.
-
-
-
-
-
-
- Para una política creada en Cloud, abre **Admin → policy editor**, selecciona el borrador y revisa los errores de validación antes de publicar. Para una política local, valídala con la CLI y luego abre **Observe → policy** tras una acción de prueba para confirmar que llegan las decisiones.
-
-
-
- Confirma que el nombre de archivo termina en `policies.js`, `policies.mjs` o `policies.ts`, que el módulo llama a `customPolicies.add(...)` y que las importaciones se resuelven desde el archivo de política.
-
- ```bash
- failproofai policies --install --custom ./checkout.policies.ts
- failproofai policies
- ```
-
-
-
-
-
-
- Abre **Analyze → audits**, selecciona la ejecución y comprueba si el análisis del modelo se ejecutó. Luego compara su alcance y ventana con **Observe → sessions** y abre trazas representativas de esa población.
-
- Un resultado en cero solo es significativo cuando el análisis se ejecutó correctamente. Si el análisis fue omitido o falló, la ejecución no produce resultados y mantiene la ventana sin analizar abierta para una futura ejecución exitosa. Si el análisis del modelo está deshabilitado, la auditoría tampoco produce resultados, ya que el análisis determinista de credenciales y PII registra estadísticas pero ya no genera hallazgos.
-
- 
-
-
- ```bash
- fp audits show
- fp audits runs
- fp sessions --since 24h --env production
- fp audits context-show
- fp audits run
- fp audits findings --audit
- ```
-
- Si la ejecución permaneció en cola, espera a que haya capacidad del agente de auditoría o pide al operador de despliegue que inspeccione la flota de auditoría. Una auditoría en cola reintenta; no se omite de inmediato.
-
-
-
-
-
-
- Abre una sesión completada y comprueba si una evaluación manual tiene éxito. El Cloud alojado actualmente no tiene control del endpoint del evaluador en el dashboard; el operador del servidor debe configurarlo.
-
-
- Verifica el evaluador en sí y luego inspecciona los estados de evaluación recientes:
-
- ```bash
- curl https://evaluator.example.com/health
- fp evals --since 1h
- ```
-
- En Cloud autoalojado, confirma que `EVALUATOR_ENDPOINT` está presente en el servidor y que `EVALUATOR_TOKEN` coincide con el evaluador. La evaluación automática se deshabilita cuando el endpoint está ausente.
-
-
-
-
-
-
- Usa el selector de organización y confirma el slug y los permisos esperados antes de comparar los resultados con la CLI.
-
-
- ```bash
- fp whoami
- fp orgs current
- fp orgs perms
- ```
-
- En modo de clave de API, especifica `fp --org --api-key ...` o establece `AGENTEYE_ORG`. El estado de organización de sesión humana guardado se ignora intencionalmente para las solicitudes con clave de API.
-
-
-
-
-
-
- Abre **Observe → policy**, preserva la decisión y la sesión vinculada, e identifica la condición de falso positivo. Luego abre **Admin → enforcement** y revierte las máquinas afectadas a la versión anterior. Crea una versión más restrictiva en **Policy editor**, pruébala en un alcance reducido y amplíala solo después de que el trabajo válido tenga éxito.
-
-
-
- La reversión del despliegue en Cloud es exclusiva del dashboard. Pausar una sesión local no deshabilita las políticas gestionadas por Cloud. Si el dashboard no está disponible, captura el estado de la máquina y del despliegue y restaura el acceso al dashboard en lugar de reintentar repetidamente la acción bloqueada.
-
- ```bash
- failproofai config --status
- ```
-
-
-
-
-
-Al contactar con soporte, incluye la versión de la CLI, el harness, el entorno, el ID de sesión o despliegue relevante y la salida de `failproofai config --status` con los secretos eliminados.
\ No newline at end of file
+Comienza con:
+
+```bash
+failproofai config --status
+failproofai policies
+```
+
+## Un agente no está conectado
+
+Ejecuta la configuración nuevamente:
+
+```bash
+failproofai config
+```
+
+La configuración es compatible con Linux y macOS. Necesita acceso de administrador una sola vez para instalar el servicio, pero nunca solicita una contraseña de sudo.
+
+Consulta las rutas y alcances de los arneses en [Harnesses](/es/reference/harnesses).
+
+## Falta una sesión
+
+```bash
+failproofai flush --wait
+failproofai backfill --since 30d --dry-run
+failproofai harness list
+```
+
+Elimina `--dry-run` para reenviar el historial antiguo. Agrega otra ubicación de transcripción con:
+
+```bash
+failproofai harness add-path [label=]
+```
+
+Usa una etiqueta cuando dos ubicaciones contengan copias del mismo proyecto.
+
+## Todas las acciones protegidas son denegadas
+
+En una máquina configurada, `failproofaid` es el único evaluador. Si no puede responder, las acciones protegidas fallan de forma cerrada.
+
+```bash
+failproofai config --status
+systemctl status failproofaid@$USER # Linux
+sudo launchctl print system/ai.failproof.failproofaid.$USER # macOS
+```
+
+Ejecuta `failproofai config` para reparar o reinstalar el servicio.
+
+## Un paquete está denegando
+
+`failproofai policies` muestra los paquetes que no pueden cargarse. Un paquete seleccionado falla de forma cerrada en lugar de desaparecer.
+
+Causas frecuentes:
+
+- El artefacto cambió después de la instalación.
+- El manifiesto y las políticas incluidas no coinciden.
+- El archivo no existe o no puede importarse.
+- El paquete utiliza un evento, herramienta o forma de política no compatible.
+
+Elimina el paquete o instala una versión corregida:
+
+```bash
+failproofai policies remove owner/repo
+failproofai policies add owner/repo@
+```
+
+## La nube está desconectada
+
+Prefiere una variable de entorno para la clave:
+
+```bash
+export FAILPROOFAI_CLOUD_TOKEN=""
+failproofai config
+failproofai config --status
+```
+
+Una máquina puede obtener políticas y enviar actividad de forma independiente. El estado reporta ambos.
+
+## Una política no bloqueó
+
+Verifica tres cosas:
+
+1. La política está activa: `failproofai policies`.
+2. Su evento y herramienta coinciden con la acción.
+3. Ese arnés puede aplicar el evento.
+
+Una denegación de llamada a herramienta se verifica en los 12 arneses compatibles. Otros eventos varían. Consulta [capacidad de aplicación](/es/reference/harnesses#enforcement-capability).
+
+## Las descargas están bloqueadas
+
+- `FAILPROOFAI_NO_DOWNLOAD=1` rechaza las descargas de red.
+- `FAILPROOFAI_DAEMON_BASE_URL` dirige las descargas del servicio a un espejo.
+- `FAILPROOFAI_PACK_BASE_URL` dirige las descargas de paquetes a un espejo.
+
+Los paquetes instalados continúan aplicándose cuando las descargas están deshabilitadas.
\ No newline at end of file
diff --git a/docs/es/sessions/assistant.mdx b/docs/es/sessions/assistant.mdx
index 5c47aa411..5b09fc11d 100644
--- a/docs/es/sessions/assistant.mdx
+++ b/docs/es/sessions/assistant.mdx
@@ -1,10 +1,10 @@
---
-title: "Asistente de Failproof"
-description: "Analiza y opera Failproof AI en lenguaje natural, desde preguntas y consultas hasta dashboards y auditorías."
+title: "Asistente en la nube"
+description: "Analiza y opera Failproof AI en lenguaje natural, desde preguntas y consultas hasta paneles y auditorías."
icon: "message-square-text"
---
-Pídele al Asistente de Failproof que realice cualquier tarea en Failproof AI usando lenguaje natural. Puede analizar sesiones y fallos, ejecutar consultas, crear dashboards, investigar evaluaciones y alertas, y ayudarte a diseñar y ejecutar auditorías sin necesidad de traducir la tarea en pantallas del producto o comandos CLI.
+El asistente en la nube de Failproof AI responde preguntas sobre tu flota en lenguaje natural. Puede analizar sesiones y fallos, ejecutar consultas, construir paneles, investigar evaluaciones y alertas, y ayudar a crear y ejecutar auditorías sin necesidad de traducir la tarea a pantallas del producto o comandos CLI. En el panel, el control se llama **Open agent chat**; en el [CLI `fp`](/es/reference/cloud-cli) es el grupo de comandos `fp agent`.
```text
Why did production checkout agents regress this week?
@@ -13,41 +13,77 @@ Create an audit that finds agents retrying the same failed action without changi
Show me the sessions behind the most common audit finding.
```
-El asistente trabaja con los datos y permisos disponibles en la organización activa. Revisa sus evidencias y los cambios propuestos antes de aplicar acciones que afecten a otros usuarios o agentes.
+El asistente trabaja con los datos y permisos disponibles en la organización activa. Revisa su evidencia y los cambios propuestos antes de aplicar acciones que afecten a otros usuarios o agentes.
-## Consulta al asistente
+
+ El asistente se ejecuta en el panel y sus chats pertenecen a una persona, por lo que no hay una ruta de API detrás de él que una clave pueda llamar. Cada subcomando `fp agent` requiere una sesión con inicio de sesión (`fp login`) y el permiso `agent:use`, y termina con código 2 bajo `--api-key` o `FP_API_KEY`. Una clave de API nunca puede acceder a él, por lo que un trabajo programado debe portar un token de sesión con inicio de sesión en `--token` o `FP_TOKEN`. Eso funciona — `fp agent ask` lee la pregunta desde stdin cuando no hay TTY — pero un token de sesión expira aproximadamente 24 horas después de `fp login`, lo que hace que el asistente no sea adecuado para automatización desatendida aunque pueda ejecutarse.
+
+
+## Usar el asistente
-
- 1. Selecciona **Open agent chat** y describe qué quieres entender, crear u operar.
+
+ 1. Selecciona **Open agent chat** y describe lo que quieres entender, crear u operar.
2. Revisa las llamadas a herramientas, tablas y resultados de consultas del asistente mientras trabaja.
3. Abre la sesión, alerta o consulta citada para verificar el resultado frente a los datos de origen.
4. Inicia un nuevo chat para una investigación diferente, o usa el historial de chats para continuar la misma línea de análisis.
- 
+ 
+ Empieza con `health`. Indica si el asistente está habilitado para este despliegue y si hay un LLM configurado para él. Cuando no hay LLM, `ask` falla y `models` no reporta ninguno — `chats`, `show`, `rename` y `delete` nunca consultan health y siguen funcionando.
+
```bash
fp agent health
fp agent models
fp agent ask "Which production checkout agents had the most tool errors in the last 24 hours?"
+ ```
+
+ `fp agent models` lista los modelos que permite este despliegue y cuál es el predeterminado. Pasa uno a `ask --model `. Fundamenta una respuesta en texto que ya tienes con `--page-context `, y envía la pregunta por stdin en lugar de pasarla como argumento cuando proviene de un archivo o un comando anterior:
+
+ ```bash
+ cat incident-notes.md | fp agent ask --model
+ ```
+
+ Cada pregunta se guarda en un chat. Sin `--chat` inicia uno nuevo e imprime su id corto; con `--chat` continúa ese hilo.
+
+ ```bash
fp agent chats
fp agent show
fp agent ask "Open representative sessions" --chat
+ fp agent rename --title "checkout regression"
+ fp agent delete --yes
```
- Usa `fp agent rename --title ` para mantener una investigación identificable y `fp agent delete ` para eliminarla.
+ `fp agent chats` lista tus chats del más reciente al más antiguo como `chat-id · title · messages · updated`, donde `updated` es la antigüedad de la última actividad del chat. El `chat-id` mostrado es el corto — los primeros 8 caracteres — y `show`, `rename`, `delete` y `ask --chat` resuelven ese prefijo. Un id que no coincide con nada termina con código 6 y un cuadro de `chat not found`; uno que coincide con varios solicita un prefijo más largo.
+
+ `fp agent delete` pide confirmación primero. `--yes` omite el aviso, y también lo hace cualquier invocación no interactiva: bajo `--json`, o con stdin redirigido, procede sin preguntar.
-## Trabaja de forma efectiva con el asistente
+## Trabajar eficazmente con el asistente
-- Primero indícale un objetivo; añade un entorno, flujo de trabajo o rango temporal cuando esos límites sean relevantes.
+- Dile primero el objetivo; añade un entorno, flujo de trabajo o rango de tiempo cuando esos límites importen.
- Trata el SQL generado y los resúmenes como una ayuda para la investigación, no como evidencia definitiva.
- Abre sesiones representativas antes de crear una auditoría, incidencia, alerta o política.
- Mantén explícitos los filtros de organización, entorno y tiempo.
- Guarda el SQL útil como una consulta para que otro operador pueda reproducir el resultado.
- El asistente solo puede leer lo que tu usuario actual tiene acceso. No amplíes los permisos para que una pregunta funcione; pide a un operador autorizado que realice la investigación en su lugar.
-
\ No newline at end of file
+ Se aplican dos capas de permisos y fallan de forma diferente. `agent:use` controla la funcionalidad en sí: sin él, `fp agent` y el chat del panel no están disponibles. Las respuestas están entonces acotadas por los permisos de datos del usuario con sesión iniciada — `events:read`, `evaluations:read`, `queries:run`, `policies:read` — por lo que un usuario que puede abrir el asistente puede igualmente obtener una respuesta vacía para datos que no puede leer. No amplíes los permisos para que una pregunta funcione; pide a un operador autorizado que realice la investigación. Consulta [Claves y permisos](/es/admin/keys-and-permissions).
+
+
+
+
+ Guarda el SQL que escribió el asistente para que otro operador pueda volver a ejecutarlo.
+
+
+ Convierte una consulta guardada en un gráfico que el equipo monitorea.
+
+
+ Investiga un patrón de fallo en una población de sesiones.
+
+
+ Prevén una acción repetible en lugar de tener que encontrarla de nuevo la próxima semana.
+
+
\ No newline at end of file
diff --git a/docs/es/sessions/dashboards.mdx b/docs/es/sessions/dashboards.mdx
index c9feb6ae9..35929ca8d 100644
--- a/docs/es/sessions/dashboards.mdx
+++ b/docs/es/sessions/dashboards.mdx
@@ -4,7 +4,9 @@ description: "Monitorea las señales de confiabilidad que importan para un agent
icon: "layout-dashboard"
---
-Los dashboards combinan consultas guardadas en una vista operativa. Construye uno en torno a una decisión que alguien deba tomar, no en torno a todas las métricas disponibles.
+Los dashboards combinan consultas guardadas en una vista operacional. Construye uno en torno a una decisión que esperas que alguien tome, no en torno a cada métrica disponible.
+
+Los dashboards son una funcionalidad de Cloud. El dashboard local en `localhost:8020` cubre la actividad de políticas, proyectos, sesiones y resultados de auditoría, pero no tiene consultas guardadas ni tiles; por lo tanto, una máquina que no se ha conectado no tiene nada que construir aquí. Consulta [Local dashboard](/es/reference/local-dashboard).
## Crear un dashboard
@@ -13,22 +15,42 @@ Los dashboards combinan consultas guardadas en una vista operativa. Construye un
1. Ve a **Analyze → Queries**, crea o abre una consulta guardada y valida su resultado.
2. Selecciona **add to dashboard**, luego elige un dashboard existente o crea uno en **Analyze → Dashboards**.
3. Abre el dashboard, entra en modo de edición, organiza los tiles y guarda el diseño.
- 4. Vuelve a la consulta cuando necesites modificar los datos o los filtros detrás de un tile.
+ 4. Regresa a la consulta cuando necesites cambiar los datos o los filtros detrás de un tile.

- El CRUD de dashboards no está disponible en el Cloud CLI actual. Usa el CLI para crear y verificar la consulta guardada, luego agrégala a un dashboard desde la interfaz.
+ Las operaciones CRUD de dashboards no están disponibles en el CLI de Cloud actual. Usa el CLI para escribir y verificar la consulta guardada, luego agrégala a un dashboard desde la interfaz.
```bash
fp query schema
- fp query create "production error rate" --sql "SELECT ..."
- fp query run
+ fp query run --sql "select count(*) from analytics.events"
+ fp query create "event volume" --sql "select count(*) from analytics.events"
+ fp query run "event volume"
```
+
+ Ejecuta el SQL con `--sql` primero: se ejecuta contra el mismo grupo de análisis de solo lectura sin guardar nada, así identificas un nombre de columna incorrecto antes de que lo haga un tile. `--sql @file.sql` lee la instrucción desde un archivo. `fp query schema` lista las tablas consultables y sus columnas; pasa el nombre de una tabla para reducirlo a una sola.
+
+ Las consultas guardadas se referencian por **nombre**, no por id — `fp query run "event volume"` — porque `fp query list` oculta el id sin procesar a menos que pases `--show-id`. También se acepta un id con formato UUID.
+
+ Para un tile parametrizado, vincula cada `$1..$N` posicional con `--arg`, que es repetible y se vincula en orden: `fp query run --arg checkout-agent`.
+
+ `--limit` y `--all` solo ajustan el límite de la vista previa de la tabla; `--json` siempre devuelve todas las filas, como `{columns: [{name, type}], rows: [[...]], truncated, elapsed_ms}`.
+
+ | Subcomando | Permiso |
+ | --- | --- |
+ | `query list`, `query show`, `query schema` | `queries:read` |
+ | `query create`, `query update` | `queries:write` |
+ | `query run` | `queries:run` |
+ | `query delete` | `queries:delete` |
+
+ Cada subcomando que acepta un **nombre** de consulta lo resuelve listando primero las consultas de la organización, por lo que `query create`, `query update`, `query delete` y `query run ` necesitan `queries:read` además del permiso indicado arriba. Solo `fp query run --sql` y `fp query schema` no lo requieren.
+
+ Ninguno de los comandos de `fp query` está bloqueado en modo de clave de API, por lo que las consultas de un dashboard pueden crearse y verificarse desde CI.
-Algunos grupos de dashboards útiles incluyen:
+Grupos de dashboards útiles incluyen:
- **Modelos:** volumen, latencia, uso de tokens, tasa de errores y puntuaciones de evaluación.
- **Evaluaciones:** tasa de éxito y tendencias de puntuación por agente o entorno.
@@ -38,6 +60,14 @@ Algunos grupos de dashboards útiles incluyen:
Comienza con una consulta guardada, valida su resultado y luego agrégala como tile. Mantén los filtros de producción y desarrollo explícitos para que el tráfico de pruebas no oculte una regresión.
+
+ Un tile de hook que cuenta filas reporta el denominador incorrecto. Con la verbosidad de hook predeterminada, cada deny e instruct se emite como un par `hook_triggered` / `hook_completed`, y lo mismo ocurre con cada allow en modo observación; los allows simples se agrupan por sesión, evento, herramienta y atribución de política por minuto en un único `hook_completed` que contiene `failproofai_allow_count`. Suma ese campo en lugar de contar filas, o una flota que evaluó decenas de miles de llamadas parecerá haber evaluado solo unos cientos. Consulta [Policy decisions](/es/sessions/policy-decisions) y [Hooks](/es/sessions/hooks).
+
+
- Asigna a cada dashboard un responsable y una pregunta de respuesta, como "¿La confiabilidad de checkout-agent es peor que la semana pasada?"
-
\ No newline at end of file
+ Asigna a cada dashboard un responsable y una pregunta de respuesta, como "¿La confiabilidad del checkout-agent es peor que la semana pasada?"
+
+
+
+ Escribe, guarda y comparte el SQL que lee cada tile de un dashboard.
+
\ No newline at end of file
diff --git a/docs/es/sessions/errors.mdx b/docs/es/sessions/errors.mdx
index 7569383d4..638f1e710 100644
--- a/docs/es/sessions/errors.mdx
+++ b/docs/es/sessions/errors.mdx
@@ -1,43 +1,63 @@
---
title: "Errores"
-description: "Agrupa errores repetidos y abre las sesiones asociadas."
+description: "Filtra errores repetidos y abre las sesiones relacionadas."
icon: "circle-alert"
---
-Errores te ofrece una vista centrada en fallos a través de las sesiones. Agrupa por tipo de error, agente, entorno, modelo, herramienta o ventana de tiempo para identificar problemas operativos recurrentes.
+Errores te ofrece una vista centrada en fallos a través de las sesiones. Filtra por entorno, tipo de evento, tipo de error, agente o sesión, y ajusta la ventana temporal para encontrar problemas operativos recurrentes.
## Investigar errores
-
- 1. Ve a **Observar → Errores**.
+
+ 1. Ve a **Observe → Errors**.
2. Filtra por entorno, tipo de evento, tipo de error, agente, ID de sesión o texto de búsqueda.
- 3. Expande un error agrupado para ver sus ocurrencias. Selecciona una fila para abrir el evento exacto dentro de su sesión.
- 4. Selecciona el control de campana en un error representativo para configurar una alerta para errores similares.
+ 3. Selecciona una fila para abrir el evento exacto dentro de su sesión.
+ 4. Selecciona **alert** en una fila representativa para crear una alerta sobre errores similares.
- 
+ 
```bash
- fp errors --env production --since 24h
+ fp errors --since 24h
fp errors --error-type TimeoutError --agent-id checkout-agent
- fp errors --aggregate --env production --since 7d
+ fp errors --event-type tool_result --since 24h
+ fp errors --aggregate --env local --since 7d
```
- Usa `fp events --full --session-id ` cuando necesites el payload sin procesar detrás de un resumen de error.
+ Un fallo de herramienta llega como un evento `tool_result` con error en lugar de un evento `error` independiente, por lo que `--event-type tool_result` es la forma de separar los fallos de herramienta de los fallos de modelo y de ejecución. `is_error` y `error_type` son columnas calculadas por el servidor en cada fila, así que ningún modo analiza los payloads.
+
+ Descubre los valores de filtro válidos en lugar de adivinarlos: `fp list error_types`, `fp list agents`, `fp list envs` y `fp list event_types`.
+
+ **Estos cinco filtros de `fp errors` aceptan exactamente un valor cada uno**: `--env`, `--error-type`, `--event-type`, `--agent-id`, `--session-id`. (`--search` es la excepción y puede repetirse.) Los mismos nombres de flag en `fp events` y `fp sessions` aceptan valores repetidos o separados por comas, así que `--env prod,staging` funciona allí, mientras que aquí solo coincide con la cadena literal `prod,staging`. Eso devuelve un resultado vacío en lugar de un error, lo que se interpreta como «no hay errores».
+
+ El daemon etiqueta los eventos como `local` hasta que lo cambies, por lo que `--env production` no coincide con nada en una instalación estándar. Consulta [Cambiar una etiqueta de entorno](/es/reference/events-and-configuration#change-an-environment-label).
+
+ `--all` pagina automáticamente solo hasta `--limit`, cuyo valor predeterminado es 50 — escribe `--all --limit 500` cuando necesites más. Otros flags del modo lista son `--order asc|desc`, `--cursor`, `--page-size` (máximo 200), `--fields` y `--full-ids`. `--search` es repetible y se aplica a ambos modos — una fila coincide si contiene alguno de los términos.
+
+ `fp errors` requiere `events:read`. Con `--json`, el modo lista devuelve `{"errors": [...], "next_cursor": ...}` y `--aggregate` devuelve `{total, sessions, agents, last_ts, bins}`. Usa `fp events --full --session-id ` cuando necesites el payload sin procesar detrás de un resumen de error.
-## Usa Errores cuando necesites
+## Cuándo usar Errores
- Encontrar la clase de error más frecuente en producción.
-- Determinar si una herramienta o modelo está causando un pico.
-- Pasar de un conteo agregado a sesiones representativas.
-- Crear una alerta para recurrencias.
+- Determinar si una herramienta o modelo concreto provoca un pico.
+- Pasar de un recuento agregado a sesiones representativas.
+- Crear una alerta ante recurrencias.
- Incluir la población afectada en una auditoría.
Un error es un evento observado. Una evaluación fallida es un juicio de calidad, y un hallazgo de auditoría es un patrón de fallo investigado. Ten en cuenta estas distinciones al decidir qué flujo de respuesta utilizar.
-
- Notifica a los responsables cuando un error o una condición de calidad supere un umbral.
-
\ No newline at end of file
+## Sin una cuenta Cloud
+
+Errores es una función de Cloud. En una máquina que no se ha conectado, `failproofai audit` analiza el historial de sesiones almacenado en disco en busca de patrones arriesgados y de desperdicio, y abre `http://localhost:8020/audit`. Añade `--schedule [days]` para volver a analizar según un temporizador y enviar los hallazgos por correo electrónico (predeterminado: 7 días, rango: 1 a 90), `--status` para comprobar si la programación está activa y `--no-schedule` para detenerla. Todo se ejecuta en la máquina, con dos excepciones. Un análisis programado publica el id, la etiqueta, la plataforma y la ventana cubierta de esta máquina en cada ejecución, incluso cuando es limpia — lo que un análisis limpio omite es el resumen, no la solicitud. Y se envía telemetría anónima de CLI en cada auditoría a menos que establezcas `FAILPROOFAI_TELEMETRY_DISABLED=1`.
+
+
+
+ Notifica a los responsables cuando un error o condición de calidad supera un umbral.
+
+
+ Convierte un error recurrente en un patrón investigado con un responsable asignado.
+
+
\ No newline at end of file
diff --git a/docs/es/sessions/evaluations.mdx b/docs/es/sessions/evaluations.mdx
index 598094fd1..1a832f3e7 100644
--- a/docs/es/sessions/evaluations.mdx
+++ b/docs/es/sessions/evaluations.mdx
@@ -1,52 +1,80 @@
---
-title: "Evaluaciones en línea"
-description: "Puntúa sesiones en curso y completadas según calidad, cumplimiento, costo y latencia."
+title: "Evaluaciones"
+description: "Puntúa sesiones completadas por calidad, cumplimiento, costo y latencia."
icon: "gauge"
---
-Las evaluaciones en línea aplican criterios consistentes a las sesiones de agentes. Úsalas para señales que deben medirse de forma continua, en lugar de investigarse únicamente durante una auditoría.
+Las evaluaciones aplican juicios consistentes a las sesiones de agentes. Úsalas para señales que deben medirse de forma continua en lugar de investigarse solo durante una auditoría.
+
+Un evaluador recibe una sesión que ha finalizado, lo que significa una de dos cosas: la sesión emitió un evento de fin, o dejó de emitir durante más tiempo que el `inactivity_timeout_secs` del evaluador. No se puntúan ejecuciones que aún estén en curso.
+
+
+ La evaluación automática aplica a todo el despliegue y permanece desactivada hasta que un operador configure `EVALUATOR_ENDPOINT`. Hasta entonces esta vista está vacía, `fp evals` no devuelve nada, y `fp sessions` muestra un estado en blanco para cada fila — lo que generalmente significa que no hay ningún evaluador configurado, no que nada haya obtenido una mala puntuación. Consulta [Evaluator SDK](/es/reference/evaluator-sdk).
+
## Revisar la calidad de las evaluaciones
-
+
1. Ve a **Observe → Evaluations**.
- 2. Añade una serie y elige el agente, el entorno, la puntuación de evaluación, la estadística y la curva.
- 3. Añade series para comparar entornos, agentes o claves de puntuación.
+ 2. Agrega una serie y elige el agente, entorno, puntuación de evaluación, estadística y curva.
+ 3. Agrega series para comparar entornos, agentes o claves de puntuación.
4. Selecciona un resultado para abrir las sesiones correspondientes o compartir la vista filtrada. Usa **Observe → Metrics** para latencia, tokens, costo y otros valores de magnitud.
- 
+ 
Abre una sesión desde el desglose para inspeccionar el razonamiento por puntuación:
- 
+ 
```bash
+ fp list score_filters
fp evals --agent-id checkout-agent --aggregate
- fp evals --aggregate --env production --status error
- fp evals --score helpfulness:0.8.. --since 7d
+ fp evals --aggregate --status error --since 7d
+ fp evals --score helpfulness:0.5..0.8 --score tool_efficiency:..0.3 --since 7d
+ fp evals --scores-full --since 24h
```
- Añade `--json` de forma global antes de `evals` para automatización, por ejemplo `fp --json evals --aggregate --env production`.
+ Todo aquí requiere `evaluations:read` — incluido `fp sessions`, que lee el mismo resultado de la última evaluación. Por eso una clave con alcance `events:read` ve los rastros pero no las puntuaciones.
+
+ Comienza con `fp list score_filters`: devuelve las claves de puntuación que este despliegue produce realmente, lo que hace que un filtro `--score` sea verificable en lugar de una suposición.
+
+ `--score KEY:MIN..MAX` tiene cada límite opcional y es repetible, con todos los rangos requeridos en conjunto: `helpfulness:0.5..0.8`, `tool_efficiency:..0.3`, `factuality:0.9..`. Un valor mal formado se rechaza antes de enviar la solicitud en lugar de ignorarse silenciosamente. `--status` acepta exactamente uno de `done`, `error` o `timeout`. `--scores-full` imprime todos los pares de puntuación en lugar de los primeros más un `+N`. `--all` se detiene en `--limit`, cuyo valor predeterminado es 50.
+
+ Las opciones globales van antes del comando, así que la automatización usa `fp --json evals --aggregate`.
+
+ El daemon etiqueta cada evento con el entorno `local` a menos que lo cambies, por lo que `--env production` no coincide con nada en una instalación estándar. Consulta [Change an environment label](/es/reference/events-and-configuration#change-an-environment-label).
-Un evaluador recibe la identidad de la sesión, el entorno, las marcas de tiempo y los eventos ordenados. Puede devolver claves de puntuación numéricas con razonamiento opcional y un resumen. Los evaluadores de larga duración pueden devolver un trabajo pendiente y ser consultados más tarde.
+## Qué intercambia un evaluador
+
+| Mensaje | Campos |
+| --- | --- |
+| `EvalRequest` (entrada) | `schema_version` (actualmente `"1"`), `session_id`, `agent_id`, `environment`, `started_at`, `ended_at` y `events` — el flujo ordenado completo, donde cada evento lleva su payload completo. |
+| `EvalResponse` (salida) | `scores` como claves numéricas, `reasoning` con claves que las reflejan, y un `summary`. |
+| `JobPending` (salida) | `job_id` y `next_poll_secs`, para trabajos que no pueden completarse dentro de una sola solicitud. |
+
+`ended_at` solo está presente cuando la sesión emitió un evento de fin, por lo que una sesión despachada por inactividad llega sin él. La cadencia de sondeo sigue `next_poll_secs`, luego el `default_poll_interval_secs` del evaluador, luego el `EVALUATOR_POLLING_INTERVAL_SECS` del servidor, con un límite entre un segundo y una hora y un tope máximo de una hora de reloj.
+
+Dado que la solicitud lleva los payloads completos de los eventos, un evaluador ve el contenido completo de la transcripción. Trata la entrega al evaluador como entrega de transcripción al decidir qué datos puede enviar la máquina.
## Buenos objetivos de evaluación
-- Finalización o corrección de tareas
-- Fundamentación y riesgo de alucinación
-- Selección de herramientas y eficiencia en su uso
+- Completitud o corrección de la tarea
+- Fundamentación y riesgo de alucinaciones
+- Selección y eficiencia de herramientas
- Cumplimiento de políticas o procesos
- Presupuestos de costo y latencia
- Escalación humana requerida
+Las claves de puntuación son identificadores estables. Renombrar una inicia una nueva serie en el gráfico en lugar de modificar la anterior, lo que rompe una tendencia de forma silenciosa — elige el nombre antes de graficarlo.
+
## De la puntuación a la respuesta
-Muestra las puntuaciones en paneles para rastrear tendencias. Crea alertas para umbrales o condiciones compuestas. Cuando una puntuación disminuye en una población, realiza una auditoría para investigar el motivo; cuando la causa es una acción repetible, despliega una política.
+Muestra las puntuaciones en dashboards para seguir tendencias. Crea alertas para umbrales o condiciones compuestas. Cuando una puntuación cae en una población, ejecuta una auditoría para investigar el motivo; cuando la causa es una acción repetible, despliega una política.
-
- Implementa evaluaciones síncronas o asíncronas con el SDK de evaluadores de Python.
+
+ Implementa evaluaciones síncronas o asíncronas con el SDK de evaluador para Python.
\ No newline at end of file
diff --git a/docs/es/sessions/hooks.mdx b/docs/es/sessions/hooks.mdx
index 23b9d8800..fa504357c 100644
--- a/docs/es/sessions/hooks.mdx
+++ b/docs/es/sessions/hooks.mdx
@@ -1,25 +1,34 @@
---
title: "Hooks"
-description: "Mide la actividad de los hooks, los disparadores y la latencia de forma independiente a los resultados de las políticas."
+description: "Consulta cuándo Failproof AI evaluó un evento de agente y qué decidió."
icon: "webhook"
---
-Hooks muestra cuándo se ejecutan los hooks del ciclo de vida del agente y cuánto tiempo tardan. Las decisiones de políticas son una vista separada.
+Un hook es un punto donde un agente solicita a Failproof AI una decisión. El registro de actividad de hooks captura el evento, la política, el resultado y el tiempo de evaluación.
+
+## Investigar la actividad de hooks
-
- 1. Ve a **Observe → Hooks**.
- 2. Filtra por entorno, nombre del hook, evento disparador, agente o ID de sesión.
- 3. Revisa la latencia de los hooks y su distribución.
- 4. Selecciona un punto del gráfico o un segmento de hook para abrir los eventos subyacentes.
+
+ Ve a **Observe → Hooks**. Filtra por entorno, evento, agente o sesión.
- 
+ 
```bash
+ fp guardrails summary --since 24h
+ fp --json events --full --event-type hook_completed --session-id --all --limit 500
fp list hooks
- fp events --event-type hook_triggered,hook_completed --env production --since 24h
- fp events --search "PreToolUse" --since 24h
```
-
\ No newline at end of file
+
+
+De forma predeterminada, cada decisión deny e instruct se envía completa. Los allow repetidos se agrupan para reducir el ruido. Establece `collector.hooks_verbosity` en `~/.failproofai/config.json` con el valor `all`, `decisions` o `off`.
+
+
+ La actividad de hooks demuestra que la evaluación se ejecutó, no que el arnés pudiera bloquear ese evento. Consulta [capacidad de aplicación](/es/reference/harnesses#enforcement-capability). Un par arnés-evento no listado no está verificado.
+
+
+
+ Consulta la misma actividad organizada por resultado y política.
+
\ No newline at end of file
diff --git a/docs/es/sessions/live-events.mdx b/docs/es/sessions/live-events.mdx
index c3326a43e..a981d2e76 100644
--- a/docs/es/sessions/live-events.mdx
+++ b/docs/es/sessions/live-events.mdx
@@ -1,45 +1,41 @@
---
title: "Eventos en vivo"
-description: "Observa la actividad del agente en tiempo real mientras una sesión está en ejecución."
+description: "Observa la actividad de los agentes en tiempo real en Failproof AI Cloud."
icon: "radio"
---
-Los eventos en vivo te ayudan a confirmar la instrumentación y supervisar una ejecución de riesgo sin esperar a que la sesión finalice.
+Eventos en vivo muestra la actividad mientras los agentes se ejecutan: llamadas al modelo, herramientas, errores, entrada humana, hooks y decisiones de políticas.
## Ver actividad
-
-
- 1. Ve a **Observe → Events**.
- 2. Comienza con la ventana de tiempo actual y sin filtros para confirmar que los datos están llegando.
- 3. Filtra por entorno, tipo de evento, agente o sesión. Usa la búsqueda para texto en el payload.
- 4. Selecciona un evento para inspeccionar su resumen y detalles. Sigue el enlace de su sesión para ver el seguimiento completo.
+Ve a **Observe → Live events**, o ejecuta:
- 
-
-
- ```bash
- fp events --env production --event-type tool_use,error --limit 100
- fp events --session-id --order asc --all
- fp --json events --full --session-id --all
- ```
+```bash
+fp events --since 1h
+fp events --event-type tool_use,tool_result --since 1h
+fp --json events --full --session-id --all --limit 2000
+```
- El feed por defecto omite los payloads sin procesar. Usa `--full` únicamente para una investigación de sesión acotada.
-
-
+Usa `--full` cuando necesites el contenido del payload. El feed ligero es más rápido y suficiente para la mayoría de los filtros.
-Usa el flujo de eventos para responder tres preguntas inmediatas:
+Los tipos de eventos más comunes incluyen:
-- ¿El agente esperado está reportando al entorno correcto?
-- ¿Las llamadas al modelo, las llamadas a herramientas y las decisiones de política están llegando en orden?
-- ¿La sesión ha dejado de avanzar o ha comenzado a repetir una acción?
+- `session_start` y `session_end`
+- `model_request` y `model_response`
+- `tool_use` y `tool_result`
+- `hook_triggered` y `hook_completed`
+- `error`
+- `human_wait` y `human_input`
+- `agent_pause` y `agent_resume`
-Los tipos de eventos incluyen eventos del ciclo de vida del agente, solicitudes y respuestas del modelo, uso de herramientas y sus resultados, ejecución de hooks, esperas e interrupciones humanas, y errores explícitos. Los IDs de correlación vinculan eventos emparejados, como una llamada a herramienta y su resultado.
+## Si los eventos no aparecen
-
- Mantén la vista en vivo amplia mientras verificas una nueva integración. Añade filtros solo después de ver el primer evento; un filtro incorrecto puede parecer un fallo de ingesta.
-
+```bash
+failproofai flush --wait
+failproofai config --status
+failproofai backfill --since 30d --dry-run
+```
-Si no aparece ningún evento, ejecuta `failproofai config --status` y luego [soluciona problemas de ingesta](/es/reference/troubleshooting).
+El entorno predeterminado es `local`. Un filtro para `production` no devolverá resultados hasta que cambies la etiqueta del entorno.
-Los agentes que no se ejecutan en uno de los 12 [harnesses](/es/reference/harnesses) compatibles reportan los mismos tipos de eventos a través del [SDK de Python](/es/reference/custom-agents), incluidos los eventos de human-in-the-loop (`human_wait`, `human_input`, `human_interrupt`) de los que dependen los agentes de pasarela y producción.
\ No newline at end of file
+Para un agente fuera de un harness compatible, usa el [SDK de Python](/es/reference/custom-agents).
\ No newline at end of file
diff --git a/docs/es/sessions/models.mdx b/docs/es/sessions/models.mdx
index dc4251cae..a1ed9427d 100644
--- a/docs/es/sessions/models.mdx
+++ b/docs/es/sessions/models.mdx
@@ -4,24 +4,51 @@ description: "Compara latencia, tokens, uso de contexto y distribución de tráf
icon: "cpu"
---
-Usa Modelos para ver si la fiabilidad o el coste cambiaron con un modelo, agente, entorno o rango de tiempo.
+Usa Modelos para ver si la fiabilidad o el costo cambiaron según el modelo, agente, entorno o rango de tiempo.
1. Ve a **Observe → Models**.
- 2. Establece el rango de tiempo y luego filtra por entorno, modelo, agente o ID de sesión.
+ 2. Establece el rango de tiempo y filtra por entorno, modelo, agente o ID de sesión.
3. Revisa la latencia, el consumo de tokens, el uso de la ventana de contexto y la distribución de modelos.
- 4. Selecciona un punto del gráfico o un segmento de distribución para abrir los eventos correspondientes.
+ 4. Selecciona un punto del gráfico o un segmento de la distribución para abrir los eventos correspondientes.
- 
+ 
```bash
fp list models
- fp events --event-type model_request,model_response --env production --since 24h
- fp --json events --fields ts,agent_id,session_id,event_type,output_tokens,context_fill
+ fp events --event-type model_request,model_response --since 24h
+ fp --json events --event-type model_response --since 24h --all --limit 500 --fields ts,agent_id,session_id,output_tokens,context_window,context_fill
```
- Usa una consulta guardada para agregados a nivel de modelo que no están disponibles como comando CLI dedicado.
+ Los tres requieren `events:read`.
+
+ `--fields` proyecta columnas; no filtra filas. Combínalo con `--event-type` y una ventana de tiempo, o de lo contrario obtendrás los 50 eventos más recientes de cada tipo con `output_tokens` y `context_fill` en null en todos los que no son de modelo. `--all` se detiene en `--limit`, cuyo valor predeterminado es 50.
+
+ Lee `context_fill` junto a `context_window`: un valor de relleno no significa nada sin la ventana contra la que se mide.
+
+ El daemon marca cada evento con el entorno `local` a menos que lo cambies, por lo que `--env production` no coincide con nada en una instalación estándar. Consulta [Cambiar una etiqueta de entorno](/es/reference/events-and-configuration#change-an-environment-label).
-
\ No newline at end of file
+
+
+## Qué puede y qué no puede mostrar la CLI
+
+El feed de eventos predeterminado no incluye payload. Contiene `output_tokens`, `context_window` y `context_fill` como columnas promocionadas, y nada más sobre una llamada a un modelo:
+
+| Valor | Dónde se encuentra |
+| --- | --- |
+| Tokens de salida, ventana de contexto, relleno de contexto | Columnas del feed ligero — disponibles directamente desde `fp events`. |
+| Nombre del modelo | Payload — usa `fp events --full`, acotado a una sesión. |
+| Tokens de entrada | Payload — el SDK registra ambas mitades, pero solo la mitad de salida está promocionada. |
+| Latencia por llamada | No hay columna `duration_ms` en el feed ligero, y el `model_response` del SDK tampoco la incluye. Derívala emparejando la solicitud con su respuesta. |
+
+`model_request` y `model_response` se emparejan mediante `request_id`. Ese campo existe precisamente para poder asociar una solicitud con su respuesta, y es la única forma de calcular la latencia por llamada a partir de eventos sin procesar:
+
+```bash
+fp --json events --full --event-type model_request,model_response --session-id --all --limit 500
+```
+
+Los nombres de los modelos llegan tal cual desde la transcripción de cada harness. Nada en la ruta de captura los normaliza, por lo que un mismo modelo subyacente puede aparecer con varios identificadores específicos del proveedor en el gráfico de distribución. Ejecuta `fp list models` para ver las denominaciones que tiene realmente un despliegue.
+
+Usa una consulta guardada para agregados a nivel de modelo que no están expuestos como un comando CLI dedicado.
\ No newline at end of file
diff --git a/docs/es/sessions/overview.mdx b/docs/es/sessions/overview.mdx
index df9a8342c..d08fda6dc 100644
--- a/docs/es/sessions/overview.mdx
+++ b/docs/es/sessions/overview.mdx
@@ -1,57 +1,66 @@
---
title: "Sesiones"
-description: "Comienza con el registro completo de una ejecución de agente."
-icon: "workflow"
+description: "Sigue una ejecución de agente desde su objetivo hasta las herramientas, decisiones y resultado."
+icon: "route"
---
-Una sesión es el mejor punto de partida cuando un agente se comporta de forma inesperada. Reúne las solicitudes al modelo, las respuestas, las llamadas a herramientas, las interacciones humanas, los errores, las evaluaciones y las decisiones de políticas que pertenecen a una ejecución.
+Una sesión es una ejecución de agente. Conecta el prompt, las llamadas al modelo, las herramientas, los errores, la entrada humana, las decisiones de políticas y el resultado final.
-Las sesiones tienen el mismo aspecto independientemente del entorno que las generó. Una ejecución de Claude Code que reescribe un repositorio, un agente Hermes que responde a un cliente en Slack y un servicio Python instrumentado con el SDK llegan al mismo formato de traza, de modo que una sola vista cubre toda la flota.
-
-
-
-
-
-Sigue una ejecución de agente desde su objetivo, pasando por las llamadas al modelo y las herramientas, hasta la respuesta final.
-
-## Encontrar una sesión
+## Dónde se almacenan las sesiones
-
- 1. En la barra lateral de Cloud, ve a **Observar → Sesiones**.
- 2. Establece el intervalo de tiempo y filtra por entorno, estado, agente o ID de sesión.
- 3. Añade rangos de puntuación o métrica cuando necesites un corte por calidad, coste, tokens o latencia.
- 4. Selecciona una fila para abrir su traza. Usa el control de copia junto al ID de sesión cuando la compartas.
-
- 
+
+ Ejecuta `failproofai` para abrir el panel de control en `http://localhost:8020`. El historial de sesiones se mantiene en esta máquina.
-
+
+ Conecta la máquina y luego abre **Observe → Sessions**:
+
```bash
- fp sessions --env production --since 24h
- fp sessions --status error,timeout --agent-id checkout-agent
- fp --json sessions --session-id
+ export FAILPROOFAI_CLOUD_TOKEN=""
+ failproofai config
```
- Añade `--agents` para expandir ejecuciones multiagente, `--all` para paginar, o `--fields` para elegir las columnas de salida.
+ Cloud recibe las transcripciones completas de forma predeterminada. Para enviar solo las decisiones de políticas, conéctate primero y luego establece `collector.sessions` en `false` en `~/.failproofai/config.json`. El indicador de configuración `--no-transcripts` no aplica esa configuración.
-## Qué puedes hacer
+Las sesiones provienen de los 12 [agentes compatibles](/es/reference/harnesses) y de agentes instrumentados con el [SDK de Python](/es/reference/custom-agents).
+
+## Encontrar una sesión
+
+En Cloud, filtra por tiempo, entorno, estado, agente o ID de sesión. Desde la CLI:
+
+```bash
+fp sessions --since 24h
+fp sessions --status error,timeout --agent-id checkout-agent
+fp --json sessions --session-id
+```
+
+Usa `fp errors --since 24h` para fallos que nunca fueron evaluados. `fp sessions --status` utiliza el último resultado de evaluación, por lo que una sesión sin evaluar no tiene estado.
+
+## Leer una ejecución
+
+1. Confirma el objetivo del agente y su entorno.
+2. Encuentra el primer error o decisión inesperada.
+3. Inspecciona el contexto del modelo y la entrada de herramientas inmediatamente antes.
+4. Verifica los reintentos, la latencia y las interrupciones humanas.
+5. Revisa las evaluaciones y las decisiones de políticas.
-- Encontrar una ejecución por agente, entorno, tiempo, modelo, tipo de evento o estado de error.
-- Seguir la secuencia exacta que produjo un resultado.
-- Comparar ejecuciones exitosas y fallidas.
-- Abrir la evidencia utilizada por un hallazgo de auditoría o un incidente de alerta.
-- Exportar una sesión cuando necesites un registro sin conexión.
+## Si falta una sesión
-## Un orden de investigación fiable
+```bash
+failproofai flush --wait
+failproofai config --status
+failproofai backfill --since 30d --dry-run
+```
-1. Confirma el objetivo y el entorno de la sesión.
-2. Encuentra el primer error o decisión inesperada, no solo el fallo final.
-3. Inspecciona el contexto del modelo y la entrada de la herramienta inmediatamente antes.
-4. Comprueba los reintentos, la latencia y las interrupciones humanas.
-5. Revisa las puntuaciones de evaluación y las decisiones de políticas.
+Usa `failproofai harness add-path [=]` cuando las sesiones se encuentren fuera de la ubicación habitual del harness, como otro perfil, directorio de inicio de un contenedor o un directorio de equipo montado.
-
- Aprende a pasar del resumen de la sesión al evento que causó el resultado.
-
\ No newline at end of file
+
+
+ Encuentra el evento que causó el resultado.
+
+
+ Consulta qué permitió, orientó o bloqueó la aplicación de reglas.
+
+
\ No newline at end of file
diff --git a/docs/es/sessions/policy-decisions.mdx b/docs/es/sessions/policy-decisions.mdx
index 19abf28ae..0f768350c 100644
--- a/docs/es/sessions/policy-decisions.mdx
+++ b/docs/es/sessions/policy-decisions.mdx
@@ -1,27 +1,62 @@
---
-title: "Decisiones de política"
-description: "Consulta qué políticas evaluaron, bloquearon, instruyeron o permitieron."
+title: "Decisiones de políticas"
+description: "Consulta qué políticas evaluaron, orientaron, bloquearon u observaron."
icon: "shield-check"
---
-Decisiones de política explica qué hizo la aplicación de normas. Úsalo para verificar un despliegue, medir la tasa de bloqueos y encontrar actividad sin cobertura.
+Las decisiones de políticas muestran lo que Failproof AI hizo durante la ejecución de un agente.
- 1. Ve a **Observe → policy** y elige el rango de tiempo y, opcionalmente, una máquina.
- 2. Revisa las acciones evaluadas, bloqueos, tasa de bloqueos, decisiones en la nube, acciones sin cobertura y actividad mientras está en pausa.
- 3. Filtra la tabla de asignación de políticas e inspecciona las asignaciones desplegadas.
- 4. Selecciona un punto del gráfico para abrir las decisiones y sus sesiones.
+ Ve a **Observe → policy** para revisar las decisiones, la tasa de bloqueos, las máquinas y las asignaciones desplegadas.
- 
+ 
```bash
- fp events --event-type hook_completed --env production --since 24h
- fp events --search "deny" --since 24h
+ fp guardrails summary --since 24h
+ fp guardrails timeline --since 24h
+ failproofai policies
failproofai config --status
```
- Usa `failproofai` para el estado de aplicación local de la máquina y `fp` para la investigación de eventos en la nube.
+ `--since` acepta `1h`, `6h`, `24h` o `7d`. Añade `--machine ` para centrarte en una máquina específica.
-
\ No newline at end of file
+
+
+## Interpretar un despliegue en modo observación
+
+El modo observación ejecuta la política real y registra cualquier decisión de tipo `deny` o `instruct`. El agente puede continuar de todos modos.
+
+```bash
+fp fleet deploy --add :observe
+fp guardrails summary --since 24h --machine
+fp fleet deploy --add :enforce
+```
+
+
+ Un `--add ` sin sufijo aplica la política de forma inmediata cuando no existe un despliegue previo. Añade `:observe` para un despliegue en modo sombra.
+
+
+Solo se registran las decisiones observadas que no son allow. Un tiempo de espera agotado se registra como allow, ya que eso es también lo que ocurre en el modo de aplicación.
+
+Un deny registrado no es prueba de que el sistema haya detenido la acción. Las denegaciones de llamadas a herramientas están verificadas en los 12 adaptadores compatibles; otros eventos pueden variar. Consulta [capacidad de aplicación](/es/reference/harnesses#enforcement-capability).
+
+## Investigar un resultado inesperado
+
+| Lo que ves | Qué revisar |
+| --- | --- |
+| Sin decisiones | `failproofai config --status` y si la sesión está pausada |
+| Muchas denegaciones sin nombre de política | [Comportamiento ante fallos de política](/es/policies/failure-behavior) |
+| Cada acción protegida es denegada | Si el servicio `failproofaid` está en buen estado |
+| Un deny que no puedes deshabilitar | `block-failproofai-commands` siempre está activo |
+| Sin datos para `--env production` | Las máquinas nuevas usan el entorno `local` |
+
+
+
+ Compara las políticas previstas y las aplicadas.
+
+
+ Comprende las decisiones de cierre por fallo.
+
+
\ No newline at end of file
diff --git a/docs/es/sessions/queries.mdx b/docs/es/sessions/queries.mdx
index a82a73d39..e7db4e946 100644
--- a/docs/es/sessions/queries.mdx
+++ b/docs/es/sessions/queries.mdx
@@ -4,50 +4,100 @@ description: "Explora datos de sesiones, eventos y evaluaciones con SQL reutiliz
icon: "database"
---
-Las consultas son la capa flexible que sustenta los dashboards, las auditorías y las investigaciones. Usa SQL ad-hoc para probar una idea y guarda la consulta cuando pase a formar parte de un flujo de trabajo recurrente.
+Las consultas son la capa flexible que subyace a los paneles, auditorías e investigaciones. Usa SQL ad-hoc para probar una idea y guarda la consulta cuando pase a formar parte de un flujo de trabajo recurrente.
## Crear y ejecutar una consulta
-
+
1. Ve a **Analyze → Queries** y selecciona **new query**.
2. Abre el explorador de esquemas y elige campos de los datos de eventos, sesiones o evaluaciones.
3. Escribe el SQL, añade parámetros si es necesario y ejecuta la consulta.
- 4. Guárdala con un nombre y una descripción claros y, si el resultado debe monitorizarse, usa **add to dashboard**.
+ 4. Guárdala con un nombre y descripción claros, y usa **add to dashboard** cuando el resultado deba monitorizarse.
- El editor de consultas combina el esquema de eventos, el SQL, los parámetros y una vista previa de los resultados para que puedas validar la pregunta antes de guardarla.
+ El editor de consultas combina el esquema de eventos, el SQL, los parámetros y una vista previa de resultados para que puedas validar la pregunta antes de guardarla.

- Las consultas guardadas aparecen en la biblioteca compartida, donde los compañeros de equipo pueden volver a ejecutarlas o añadir sus resultados a los dashboards.
+ Las consultas guardadas aparecen en la biblioteca compartida, donde los compañeros de equipo pueden volver a ejecutarlas o añadir sus resultados a paneles.

- Usa un nombre y una descripción claros para que el resultado siga siendo comprensible sin necesidad de abrir el SQL.
+ Usa un nombre y descripción claros para que el resultado sea comprensible sin necesidad de abrir el SQL.
+ Trabaja en el mismo orden que el SQL: examina el esquema, ejecuta la sentencia ad-hoc y guárdala cuando merezca un nombre.
+
```bash
fp query schema
- fp query create "retry loops" --sql "SELECT ..."
- fp query run
- fp query show
- fp query update --sql "SELECT ..."
+ fp query schema events
+
+ fp query run --sql "SELECT agent_id, count() FROM analytics.events GROUP BY agent_id"
+ fp query run --sql @retry-loops.sql
+
+ fp query create "retry loops" --sql @retry-loops.sql --description "repeated tool calls per session"
+ ```
+
+ Todo lo que sigue toma el **nombre** de la consulta, no un id:
+
+ ```bash
+ fp query list
+ fp query run "retry loops"
+ fp query show "retry loops"
+ fp query update "retry loops" --sql @retry-loops-v2.sql --yes
+ fp query delete "retry loops" --yes
+ ```
+
+ Los nombres son únicos por organización, lo que los convierte en un identificador seguro. Se acepta un id con formato UUID en cualquier lugar donde se use un nombre, pero `fp query list` no imprime uno — sus columnas son `name`, `description`, `created by` y `created` (cuándo se creó la consulta, no cuándo se editó por última vez). Añade `--show-id` para obtener una columna de id abreviado, o usa `--json`, que siempre incluye el id completo.
+
+ Vincula los parámetros posicionales de una consulta guardada con `--arg` (alias `--param`), repetido una vez por cada `$1..$N` en orden:
+
+ ```bash
+ fp query run --arg agent-codegen --arg 0.5
```
- Usa `fp query list` para encontrar los IDs y `fp query delete ` para eliminar una consulta guardada.
+ | Subcomando | Permiso | Notas |
+ | --- | --- | --- |
+ | `fp query schema [TABLE]` | `queries:read` | Pasa un nombre de tabla para filtrar sus columnas. |
+ | `fp query list` | `queries:read` | `--show-id` muestra los ids; `--fields` proyecta campos sin procesar. |
+ | `fp query show ` | `queries:read` | Ficha de metadatos más el SQL completo. |
+ | `fp query create --sql ...` | `queries:write` | Un conflicto de nombres se rechaza de inmediato. |
+ | `fp query update ` | `queries:write` | Pasa al menos uno de `--name`, `--sql`, `--description`. Solicita confirmación; si no hay cambios, sale sin guardar. |
+ | `fp query delete ` | `queries:delete` | Solicita confirmación con una vista previa de lo que se eliminará. |
+ | `fp query run ` o `--sql ...` | `queries:run` | Exactamente uno de los dos. `--limit` y `--all` ajustan la vista previa de la tabla. |
+
+ `update` y `delete` solo solicitan confirmación en una terminal interactiva. Con `--json` o con stdin redirigido, proceden sin preguntar — por lo tanto, `--yes` es para el caso de terminal, no para scripts.
+
+ Las consultas se ejecutan contra un grupo de análisis de solo lectura. `--sql @file.sql` lee la sentencia desde un archivo, que es la forma recomendada para mantener en control de versiones.
+## Uso de consultas en scripts
+
+`fp --json query run` devuelve todas las filas independientemente del límite de vista previa de la tabla, con la forma `{columns: [{name, type}], rows: [[...]], truncated, elapsed_ms}`:
+
+```bash
+fp --json query run "retry loops" | jq '.rows | length'
+```
+
+`fp --json query schema` devuelve `{schema, columns: [{table, column, type, nullable}]}`, que es la forma legible por máquina del explorador de esquemas.
+
+Hay dos fallos que conviene gestionar por código de salida en lugar de parseando texto: un nombre sin coincidencias muestra `✗ no query named "…"` y sale con código 6, y un error de SQL o ejecución muestra `✗ query failed — …` con el detalle del servidor incluido.
+
## Usos habituales
- Encontrar sesiones con llamadas repetidas a la misma herramienta.
- Comparar puntuaciones de evaluación entre modelos o entornos.
-- Medir el tiempo entre una espera humana y su reanudación.
+- Medir el tiempo entre una espera humana y la reanudación.
- Identificar denegaciones de políticas seguidas de una alternativa exitosa.
- Construir una cohorte para una auditoría.
-Abre **Queries → Schema** antes de escribir consultas sobre campos desconocidos. Prefiere filtros explícitos de tiempo y entorno, y mantén límites en los resultados durante la exploración.
+Abre el esquema — **Analyze → Queries** en el panel, o `fp query schema` — antes de escribir consultas sobre campos desconocidos. Prefiere filtros explícitos de tiempo y entorno, y mantén límites de resultados durante la exploración.
Una consulta puede identificar un patrón sospechoso, pero por sí sola no establece el modo de fallo. Abre trazas representativas o ejecuta una auditoría antes de convertir el resultado en una política.
-
\ No newline at end of file
+
+
+
+ Añade una consulta guardada a un panel compartido cuando el resultado valga la pena monitorizarlo.
+
\ No newline at end of file
diff --git a/docs/es/sessions/read-a-trace.mdx b/docs/es/sessions/read-a-trace.mdx
index b5e6bba51..1be278756 100644
--- a/docs/es/sessions/read-a-trace.mdx
+++ b/docs/es/sessions/read-a-trace.mdx
@@ -1,48 +1,58 @@
---
-title: "Leer un rastreo"
-description: "Encuentra el evento que cambió el curso de una sesión de agente."
+title: "Leer una traza"
+description: "Encuentra el evento que cambió el curso de una ejecución del agente."
icon: "route"
---
-Un rastreo convierte un flujo plano de eventos en la historia causal de la ejecución. Léelo desde la primera divergencia, no hacia atrás desde el último error.
-
-## Abrir el rastreo
+Una traza es la línea de tiempo de una ejecución del agente. Comienza por el primer evento inesperado, no por el error final.
- 1. Ve a **Observe → Sessions** y abre una sesión.
- 2. Usa el resumen del perfil para revisar el resultado, el tiempo, los errores y las puntuaciones de evaluación.
- 3. Escanea la línea de tiempo y el minimapa. Filtra tipos de eventos o tiempo cuando la sesión sea extensa.
- 4. Selecciona un evento para inspeccionarlo. Usa **export** para obtener el JSON del evaluador, o copia la URL de la página para compartir un enlace directo a la evidencia seleccionada.
+ 1. Abre **Observe → Sessions**.
+ 2. Elige una sesión.
+ 3. Busca el primer error, llamada a herramienta inusual, espera prolongada o decisión de política.
+ 4. Abre el evento e inspecciona la solicitud, respuesta, entrada y salida.
- 
+ 
```bash
fp --json sessions --session-id
- fp events --session-id --order asc --all
- fp --json events --full --session-id --all
+ fp events --session-id --order asc --all --limit 5000
+ fp --json events --full --session-id --all --limit 2000
```
- Usa primero el feed de eventos ligero. Solicita los payloads completos solo cuando los resúmenes de eventos no contengan evidencia suficiente.
+ Usa `--full` solo cuando el resumen del evento no ofrezca suficiente evidencia. Un `next_cursor` no nulo indica que se alcanzó el límite antes del final.
-
-
- Confirma el agente, el entorno, el tiempo, el resultado y la duración; luego busca errores, intervalos largos, herramientas repetidas, esperas humanas y decisiones de política denegadas.
-
-
- Inspecciona su solicitud, respuesta, entrada de herramienta, salida e ID de correlación. El contenido sensible solo es visible cuando la captura de transcripciones está habilitada y tus permisos lo permiten.
-
-
- La causa suele estar un evento antes: una respuesta incorrecta del modelo, un resultado de herramienta faltante o una suposición obsoleta.
-
-
- Agrega la sesión a un alcance de auditoría, vincúlala a un problema o usa el modo de fallo para crear una política.
-
-
+## Sigue la evidencia
+
+1. Confirma el agente, el objetivo, el entorno y el resultado.
+2. Encuentra el primer error o decisión inesperada.
+3. Inspecciona el evento inmediatamente anterior.
+4. Sigue los IDs coincidentes a través de los pares de solicitud y respuesta.
+5. Convierte la evidencia en una auditoría, incidencia o política.
+
+| Par | Campo coincidente |
+| --- | --- |
+| Solicitud y respuesta del modelo | `request_id` |
+| Llamada a herramienta y resultado | `tool_call_id` |
+| Inicio y finalización del hook | `hook_id` |
+| Pausa y reanudación del agente | `pause_id` |
+| Espera humana y entrada | `input_id` |
+
+Una decisión aparece en `hook_completed`. La fila indica el resultado y la fuente de la política. Una decisión en modo observación aparece como allow con el veredicto hipotético en `failproofai_observed`.
- Una duración larga no siempre significa latencia del modelo. Separa el tiempo del modelo, de las herramientas, de los hooks y de espera humana antes de decidir qué corregir.
-
\ No newline at end of file
+ La duración prolongada de una sesión no siempre se debe a la latencia del modelo. Separa el tiempo del modelo, de las herramientas, de los hooks y de la espera humana antes de decidir qué corregir.
+
+
+
+
+ Consulta qué permitió, orientó o bloqueó el sistema de aplicación.
+
+
+ Comprende los tipos de eventos y su entrega.
+
+
\ No newline at end of file
diff --git a/docs/es/sessions/tools.mdx b/docs/es/sessions/tools.mdx
index 85af82946..38a5f07a4 100644
--- a/docs/es/sessions/tools.mdx
+++ b/docs/es/sessions/tools.mdx
@@ -1,25 +1,38 @@
---
title: "Herramientas"
-description: "Encuentra herramientas lentas, con errores o sobreutilizadas en las sesiones de agentes."
+description: "Encuentra herramientas lentas, fallidas o sobreutilizadas en las ejecuciones de agentes."
icon: "wrench"
---
-La sección de herramientas agrupa las llamadas a herramientas entre sesiones para que puedas comparar la latencia y la distribución de llamadas.
+Herramientas muestra qué llaman los agentes, con qué frecuencia fallan las llamadas y qué sesiones se ven afectadas.
+
+Los nombres de las herramientas provienen de cada agente, por lo que la misma capacidad puede tener nombres distintos. Por ejemplo, una llamada de shell puede aparecer como `Bash`, `exec`, `Shell`, `terminal` o `run_command`. Ejecuta `fp list tools` antes de crear un filtro.
-
- 1. Ve a **Observe → Tools**.
- 2. Filtra por entorno, nombre de herramienta, agente o ID de sesión.
- 3. Revisa la latencia y la distribución de herramientas.
- 4. Selecciona un punto del gráfico o un segmento de herramienta para abrir los eventos y sesiones correspondientes.
+
+ Ve a **Observe → Tools**. Filtra por entorno, herramienta, agente o sesión.
- 
+ 
```bash
fp list tools
- fp events --event-type tool_use,tool_result --env production --since 24h
- fp --json events --full --session-id --all
+ fp events --event-type tool_use,tool_result --since 24h
+ fp errors --event-type tool_result --since 24h
+ fp --json events --full --event-type tool_use,tool_result --session-id --all --limit 2000
```
+
+ Usa `--full` cuando necesites campos del payload como la duración por llamada.
-
\ No newline at end of file
+
+
+Usa esta página para encontrar fallos repetidos, comparar ejecuciones exitosas y fallidas, o confirmar que una herramienta objetivo de una política realmente se está utilizando.
+
+
+
+ Abre las sesiones asociadas a fallos de herramientas.
+
+
+ Consulta los nombres canónicos de herramientas y las decisiones de política.
+
+
\ No newline at end of file
diff --git a/docs/es/start/concepts.mdx b/docs/es/start/concepts.mdx
index 267270c73..2b442e678 100644
--- a/docs/es/start/concepts.mdx
+++ b/docs/es/start/concepts.mdx
@@ -1,26 +1,51 @@
---
-title: "Conceptos principales"
-description: "El pequeño conjunto de conceptos utilizados en todo Failproof AI."
+title: "Conceptos fundamentales"
+description: "Los términos utilizados para observar, auditar y proteger agentes."
icon: "boxes"
---
-| Concepto | Qué significa | Qué puedes lograr |
-| --- | --- | --- |
-| Session | Una tarea o ejecución de agente | Reconstruir un resultado individual |
-| Event | Una acción registrada en una sesión | Inspeccionar una llamada al modelo, uso de herramienta, error, acción humana o decisión de política |
-| Trace | La vista ordenada y anidada de la sesión | Entender la causalidad en lugar de leer registros desconectados |
-| Evaluation | Una puntuación o juicio sobre una sesión | Rastrear calidad, cumplimiento, costo o latencia de forma continua |
-| Audit | Una revisión de una población de sesiones seleccionada | Buscar patrones de fallo con un objetivo y cadencia definidos |
-| Finding | Un fallo con respaldo de evidencia descubierto por una auditoría | Ver el modo de fallo, la gravedad y las sesiones afectadas |
-| Issue | Un registro de respuesta duradero | Asignar, discutir y resolver un hallazgo o incidente de alerta |
-| Alert | Una regla que detecta recurrencias | Notificar a los responsables cuando una condición conocida vuelve a aparecer |
-| Policy | Una regla evaluada durante la actividad del agente | Observar, bloquear o redirigir comportamiento riesgoso |
-| Deployment | Un despliegue de política versionado a máquinas | Controlar dónde se ejecuta una política y revertirla de forma segura |
+Failproof AI registra lo que hacen los agentes y decide qué pueden hacer.
-## El ciclo de confiabilidad
+## Observar
-Comienza desde la evidencia. Una sesión muestra lo que ocurrió. Una auditoría determina si es un error aislado o un patrón. Un hallazgo identifica el modo de fallo; un issue gestiona la respuesta. Una política previene el mismo comportamiento, mientras que las alertas te informan si la condición vuelve a aparecer.
+| Término | Significado |
+| --- | --- |
+| Session | Una ejecución de agente |
+| Event | Una acción dentro de una sesión |
+| Trace | La vista ordenada de una sesión |
+| Evaluation | Una puntuación o valoración |
+| Audit | Una revisión de múltiples sesiones |
+| Finding | Evidencia de un patrón de fallo |
+| Issue | La respuesta de la que alguien es responsable |
+| Alert | Una regla que detecta recurrencia |
+
+## Aplicar
+
+| Término | Significado |
+| --- | --- |
+| Harness | El entorno donde se ejecuta un agente |
+| Hook | Un punto donde el harness solicita una decisión |
+| Policy | Una regla que permite, orienta o bloquea |
+| Policy pack | Un conjunto de políticas versionado que cualquiera puede instalar |
+| Daemon | El servicio local que evalúa las políticas |
+| Deployment | Políticas asignadas a una máquina |
+
+## El flujo de trabajo
+
+```text
+Session → Audit → Finding → Issue → Policy
+```
+
+Empieza con evidencia. Identifica el fallo recurrente, asigna la respuesta y luego prevenlo.
+
+Una política devuelve `allow`, `instruct` o `deny`. La orientación mediante `instruct` depende del harness; usa `deny` cuando la acción deba detenerse.
+
+El modo de observación es independiente de la decisión. Ejecuta la política real y registra lo que haría, mientras permite que el agente continúe.
- Un `failproofai audit` local analiza el historial de agentes locales. Una auditoría recurrente en la nube revisa las sesiones almacenadas en Failproof AI Cloud. Son flujos de trabajo separados con distinto alcance y programación.
-
\ No newline at end of file
+ Un simple `fp fleet deploy --add ` aplica la política de inmediato. Añade `:observe` para un despliegue en modo sombra.
+
+
+La configuración inicial no elige ningún policy pack. Antes de añadir uno, solo se ejecuta `block-failproofai-commands`. El catálogo compilado contiene 39 políticas en 9 categorías.
+
+Consulta los [harnesses compatibles](/es/reference/harnesses#enforcement-capability) antes de asumir que un evento puede bloquear en cualquier entorno de agente.
\ No newline at end of file
diff --git a/docs/es/start/first-audit.mdx b/docs/es/start/first-audit.mdx
index c84571b78..cdd24a792 100644
--- a/docs/es/start/first-audit.mdx
+++ b/docs/es/start/first-audit.mdx
@@ -1,30 +1,64 @@
---
title: "Ejecuta tu primera verificación de fallos"
-description: "Crea una auditoría desde el panel de Cloud o la CLI fp y revisa sus primeros hallazgos."
+description: "Escanea el historial del agente en esta máquina con failproofai audit, o crea una auditoría recurrente sobre las sesiones almacenadas en Failproof AI Cloud."
icon: "scan-search"
---
Una auditoría convierte un conjunto de sesiones en hallazgos de fallos priorizados y respaldados por evidencia. Comienza con una pregunta de fallo concreta y acotada.
+Existen dos tipos de auditoría. Leen datos distintos y corresponden a herramientas diferentes:
+
+| Auditoría | Lee | Requiere cuenta | Los hallazgos aparecen en |
+| --- | --- | --- | --- |
+| Local — `failproofai audit` | El historial del agente ya presente en esta máquina | No | `http://localhost:8020/audit` |
+| Cloud — **Analyze → Audits**, o la CLI `fp` | Las sesiones almacenadas en Failproof AI Cloud | Sí | El panel de Cloud |
+
+Ejecuta primero la local. Solo necesita la CLI. Los hallazgos permanecen en local, aunque por defecto se envía telemetría anónima de la CLI a menos que establezcas `FAILPROOFAI_TELEMETRY_DISABLED=1`.
+
-
+
+ ```bash
+ failproofai audit
+ ```
+
+ Escanea todo el historial de agentes compatibles que encuentra en esta máquina, reproduce la actividad de herramientas a través del catálogo de políticas integrado y luego abre **http://localhost:8020/audit**. Mantén el proceso en ejecución mientras lees los resultados; pulsa Ctrl+C cuando hayas terminado.
+
+ El análisis y los hallazgos permanecen en esta máquina. Por defecto se envía telemetría anónima de la CLI salvo que esté desactivada. Después de activar la programación, cada escaneo también envía metadatos de la máquina y puede enviar un resumen limitado de hallazgos.
+
+ | Opción | Qué hace |
+ | --- | --- |
+ | `--schedule [days]` | Escanea según un temporizador y envía los hallazgos por correo. Por defecto 7 días, rango 1–90. La primera vez inicia sesión automáticamente. |
+ | `--email ` | Junto con `--schedule`, indica la dirección del informe en lugar de solicitarla. |
+ | `--no-schedule` | Detiene el temporizador. Mantiene la sesión iniciada. |
+ | `--status` | Indica si la programación está activa, a dónde van los informes, el estado del daemon y cuándo es el próximo escaneo. |
+
+ ```bash
+ failproofai audit --schedule 7 --email reliability@example.com
+ failproofai audit --status
+ ```
+
+ Consulta [Auditar historial local del agente](/es/audits/local-audit) para saber qué historiales lee cada adaptador y cómo se ejecuta el escaneo programado.
+
+
-
+
En la barra lateral de Cloud, ve a **Analyze → Audits**. Selecciona **new audit**.
- Ingresa un nombre y un objetivo de fallo directo, como «encontrar sesiones de producción que reintenten la misma llamada de pago fallida sin cambiar la entrada ni escalar». Selecciona el agente, el entorno, el período de tiempo y la programación. Agrega un resumen breve y URLs de referencia cuando el auditor necesite conocer las reglas de tu flujo de trabajo.
+ Introduce un nombre y un objetivo de fallo concreto, como "encontrar sesiones de producción que reintenten la misma llamada de pago fallida sin cambiar la entrada ni escalar". Selecciona el agente, el entorno, la ventana de tiempo y la programación. Añade un breve resumen y URLs de referencia cuando el auditor necesite conocer las reglas de tu flujo de trabajo.
- Selecciona **create audit**. La primera ejecución se pone en cola de inmediato. Abre la tarjeta de auditoría para seguir su progreso: de en cola a en ejecución y luego a completado.
+ Selecciona **create audit**. La primera ejecución se encola de inmediato. Abre la tarjeta de auditoría para ver cómo avanza de encolada a en ejecución y luego a completada.
- Una vez completada la ejecución, abre un hallazgo y revisa la evidencia de sesión asociada. Puedes reconocerlo, asignarlo, descartarlo, silenciarlo o resolverlo.
+ Una vez completada la ejecución, abre un hallazgo y revisa su evidencia de sesión. Luego puedes reconocerlo, asignarlo, descartarlo, silenciarlo o resolverlo.

-
+
+ `fp` es la CLI de Failproof AI Cloud. Recupera lo que Cloud almacenó; es un programa distinto de `failproofai`, que aplica las políticas en esta máquina.
+
```bash
fp audits create payment-retry-failures \
--description "Find production sessions that retry a failed payment call without changing input or escalating" \
@@ -37,7 +71,7 @@ Una auditoría convierte un conjunto de sesiones en hallazgos de fallos prioriza
fp audits finding
```
- Agrega contexto de referencia y actualízalo cuando cambie la fuente:
+ Añade contexto de referencia y actualízalo cuando cambie la fuente:
```bash
fp audits context-set payment-retry-failures --url https://example.com/payment-runbook
@@ -45,8 +79,8 @@ Una auditoría convierte un conjunto de sesiones en hallazgos de fallos prioriza
fp audits run payment-retry-failures
```
- Usa `fp audits ack `, `fp audits assign --to `, `fp audits dismiss `, `fp audits mute `, `fp audits resolve ` o `fp audits reopen ` para gestionar el triaje de un hallazgo.
+ Usa `fp audits ack `, `fp audits assign