
cynative v1.9.2
وكيل ذكاء اصطناعي للقراءة فقط يستعلم عن البنية التحتية السحابية، والكود، وبيئة التشغيل الخاصة بك لكشف سوء التهيئة، والأسرار المسربة، ومسارات تصعيد الصلاحيات مع نتائج مدعومة بأدلة مؤكدة.

ابنِ وكلاء الأمن الخاصين بك
إطار عمل مفتوح المصدر لوكلاء الأمن مع وصول مباشر للقراءة فقط إلى البنية التحتية الخاصة بك.
بدء سريع · وكيلك الأول · التوثيق
اسأل بنيتك التحتية عن أي شيء. يشغّل Cynative نماذج متطورة عبر الكود والسحابة وبيئة التشغيل - ويستدل عبر GitHub وGitLab وAWS وGCP وAzure وKubernetes كنظام واحد - ثم يعود بإجابات موثّقة.```bash cynative "what in my cloud is publicly exposed that shouldn't be?"
يكتب وينفّذ الكود في بيئة حماية مؤقتة (sandbox)، ويستعلم عن واجهاتك البرمجية API بالتوازي، فتنطلق المسألة الواحدة لتغطي مجموعتك التقنية كاملة. ويتم التحقق من كل نتيجة تبادليًا وتتبّع أثرها حتى مصدرها الأصلي.
بخلاف وكلاء البرمجة وخوادم MCP، فهو **للقراءة فقط بحكم تصميمه**: كل استدعاء يمر عبر بوابة تحقق ويُصرَّح به *قبل* إرفاق أي بيانات اعتماد - وجّهه نحو بيئة الإنتاج بثقة.
<!-- END agent-about -->
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/9087/1b3db179a03479f5951d624c8adbb4890465aa86d038d3312dc9aec9801bcfb9.gif"
alt="cynative يدقّق في تصعيد الصلاحيات من CI إلى السحابة"
width="900">
</p>
## ما الذي يحصل عليه وكلاؤك
- **من الكود إلى بيئة التشغيل**: يحلّل عبر AWS وGCP وAzure وأي بيئة K8s وGitHub وGitLab
- **بيئة الحماية (Sandbox)**: يولّد وينفّذ كودًا للبحث على نطاق واسع، دون أي وصول خاص به إلى الشبكة أو المضيف
- **بوابة الإجراءات (Action-gate)**: يحدد لكل استدعاء إجراءات IAM المطلوبة ويطبّق سياسة للقراءة فقط قبل إرفاق أي بيانات اعتماد
- **مدعوم بالأدلة**: يجري تحققات تبادلية للتحقق من كل نتيجة
- **سيادي**: ملف تنفيذي واحد، نموذجك أنت، وبياناتك تبقى ملكك
## البدء السريع
ثبّت الأداة وعيّن نموذج LLM:
<!-- BEGIN quickstart-example -->```bash
brew install cynative/tap/cynative
export CYNATIVE_LLM_PROVIDER=anthropic
export CYNATIVE_LLM_MODEL=claude-opus-5
export ANTHROPIC_API_KEY=...
إنها تلتقط بيانات الاعتماد الموجودة بالفعل في shell الخاص بك. اسألها أي شيء:```bash cynative -p "which IAM roles can escalate to admin?" cynative -p "high-risk cloud permissions, trace each to the PR where it was granted" cynative -p "cloud credentials leaked in source code and their current blast radius" cynative "live cloud resources absent from IaC - drift" # starts an interactive session cat findings.json | cynative -p "triage these findings by exploitability"
## وكيلك الأول
الوكيل هو ملف ماركداون: سطر وصف واحد، ثم التلقين. اسم الملف هو الاسم. لإضافة وكيل خاص بك، أنشئ `~/.cynative/agents/` واكتب واحدًا فيه. لا ينشئ Cynative هذا الدليل لك:```bash
mkdir -p ~/.cynative/agents
cat > ~/.cynative/agents/aws-public-data-stores.md <<'EOF'
---
description: Finds publicly accessible data stores in an AWS account.
---
Check S3, RDS snapshots, EBS snapshots and public AMIs for exposure.
Report each finding with the resource ARN and how it is reachable.
EOF
cynative -p --agent aws-public-data-stores
انظر docs/agents.md لمعرفة التنسيق.
تشغيل الوكلاء```bash
cynative -p --agent aws-public-data-stores "AWS account ID 12814983572854 only" # with a task cynative -p --agent aws-public-data-stores # without cynative --agent aws-public-data-stores # seeds an interactive session
`--agent` يُدمج مع `-p` و`--auto-approve` و`--config` والمدخلات عبر الأنابيب (stdin)، بحيث يعمل نفس الملف تفاعليًا أثناء تطويره وبشكل غير تفاعلي بمجرد استقراره.
تُقرأ الوكلاء (Agents) من `~/.cynative/agents/` ومن المجموعة المدمجة في الملف الثنائي؛ ملف المستخدم يتفوق على الملف المدمج الذي يحمل نفس الاسم. يُظهر `cynative agents list` كل وكيل مع مصدره ويعلّم النسخ المُظلَّلة، بينما يطبع `cynative agents show <name>` الملف الدقيق الذي سيتم تشغيله.
## ألا يمكن لوكيل برمجي مع MCPs القيام بذلك؟
| | وكيل برمجي + MCPs | Cynative |
|---|---|---|
| الإنتاجية | إجراء واحد لكل استدعاء | يكتب كودًا معزولًا (sandboxed) يوزّع الاستدعاءات بشكل متزامن - رموز أقل وإجابات أسرع |
| النتائج | مخرجات غير موثّقة | يتحقق المدقق من كل نتيجة مقابل أدلة حية |
| القراءة فقط | فلتر قراءة اختياري (opt-in) | مفعّل افتراضيًا، يُغلق عند الفشل - تُفحص إجراءات IAM المطلوبة مقابل سياسة تدقيق أمني. `secretsmanager:GetSecretValue` هي قراءة *Read* لـ IAM: الفلتر يسمح بها، بينما `SecurityAudit` يحظرها |
| بيانات الاعتماد | محيطية، دون تغيير | جلسة STS محصورة في القراءة فقط - تفرض AWS هذا الحد أيضًا |
| نطاق الانفجار | صدفة الأوامر لديك، أي شبكة | يعمل كود البحث في بيئة معزولة دون وصول للمضيف، والشبكة مثبّتة على خدماتك المعيّنة |
| الأسرار | تُرسل إلى النموذج كما هي | تُحذف من مخرجات الأداة قبل إرسالها إلى النموذج |
| سلسلة التوريد | MCPs ومهارات من جهات خارجية تعمل ببيانات اعتمادك | ملف ثنائي واحد مفتوح المصدر، مع موصلات مدمجة |
| مسار التدقيق | سجلات جلسات متناثرة، بأفضل جهد | سجل JSONL بإغلاق عند الفشل لكل استدعاء أداة - إذا تعذر التسجيل، يتوقف |
ملف ثنائي واحد، نقطة نهاية نموذجك، حسابك. شغّله على مثيل في السحابة التي يدققها، عبر الاستدلال المُدار (managed inference) لتلك السحابة، ولن يغادر أي شيء بيئتك: أمان على بنيتك التحتية، من داخل بنيتك التحتية.
## التثبيت
**Homebrew** (macOS / Linux - موصى به):```bash
brew install cynative/tap/cynative
سكربت التثبيت (macOS / Linux - يتحقق من SHA-256 للملف المُحمَّل مقابل checksums.txt الخاص بالإصدار، مع الإغلاق الآمن عند الفشل):```bash
curl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh
**Windows** (Scoop):```powershell
scoop bucket add cynative https://github.com/cynative/scoop-bucket
scoop install cynative
التحديث، إلغاء التثبيت، تفاصيل ويندوز، تثبيت الإصدار والتنزيل اليدوي
التحديث / إلغاء التثبيت
| الطريقة | التحديث | إلغاء التثبيت |
|---|---|---|
| Homebrew | brew upgrade cynative | brew uninstall cynative |
| سكربت التثبيت | أعد تشغيل الأمر أحادي السطر | curl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh -s -- --uninstall |
| Scoop | scoop update cynative | scoop uninstall cynative |
ويندوز (سكربت PowerShell): irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1 | iex؛ إلغاء التثبيت عبر & ([scriptblock]::Create((irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1))) -Uninstall.
خيارات سكربت التثبيت: حدّد إصدارًا باستخدام CYNATIVE_VERSION=v1.0.0؛ غيّر مجلد الهدف باستخدام CYNATIVE_INSTALL_DIR (الافتراضي ~/.local/bin، دون sudo). يتحقق السكربت من مصادقة إصدار GitHub عند تثبيت gh (تحذيري افتراضيًا)؛ اضبط CYNATIVE_REQUIRE_ATTESTATION=1 لجعل فشل التحقق أمرًا قاتلًا. للتثبيت بتكامل عالٍ، اجلب السكربت من وسم غير قابل للتغيير بدلاً من main.
macOS (يدويًا): نزّل cynative_Darwin_arm64.pkg (Apple Silicon) أو cynative_Darwin_x86_64.pkg (Intel) من صفحة الإصدارات وقم بالتثبيت عبر sudo installer -pkg <file> -target / (أو بالنقر المزدوج). هذه الحزم موقّعة وموثّقة ومختومة - دون مطالبة Gatekeeper عند أول تشغيل. تبقى أرشيفات cynative_Darwin_*.tar.gz الخام للاستخدام في السكربتات/CI؛ أول تشغيل واجهة رسومية لملف ثنائي من أرشيف tar في وضع الحجر الصحي يتطلب اتصالًا بالإنترنت للتحقق من التوثيق عبر الإنترنت (استخدام الطرفية أو install.sh أو Homebrew غير متأثر).
لينكس / ويندوز (يدويًا): نزّل ملفًا ثنائيًا مُجهّزًا مسبقًا وملف checksums.txt من صفحة الإصدارات، وتحقق من SHA-256، ثم ضع الملف الثنائي في PATH الخاص بك. ملف ثنائي ثابت واحد، بلا تبعيات.
التحقق من توقيع الإصدار (اختياري). تصدر الإصدارات الجديدة ملف checksums.txt.sigstore.json، وهو حزمة Sigstore توقّع checksums.txt بشهادة بدون مفتاح مرتبطة بسير عمل الإصدارات في هذا المستودع. تحقق من صحة البيان، ثم افحص أرشيفك مقابله:```bash
cosign verify-blob checksums.txt
--bundle checksums.txt.sigstore.json
--certificate-identity "https://github.com/cynative/cynative/.github/workflows/release.yaml@refs/heads/main"
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"
grep cynative_Linux_x86_64.tar.gz checksums.txt | sha256sum -c - # Linux grep cynative_Darwin_arm64.tar.gz checksums.txt | shasum -a 256 -c - # macOS
```powershell
(Get-FileHash .\cynative_Windows_x86_64.zip -Algorithm SHA256).Hash.ToLower()
Select-String -Path checksums.txt -Pattern cynative_Windows_x86_64.zip
يغطي هذا الأرشيفات المذكورة في checksums.txt. أمّا مثبّتات .pkg فهي موقّعة عبر Developer ID وموثّقة ومختومة بدلاً من ذلك، وكل أصل من أصول الإصدار مشمول أيضًا بشهادة توثيق إصدار GitHub (gh release verify <tag>). هناك حدّان يجدر معرفتهما: يجلب cosign جذر الثقة الخاص بـ Sigstore عبر الشبكة ما لم تمرر --trusted-root، ونظرًا لأن أسماء الملفات لا تحمل رقم إصدار، فإن التوقيع يثبت الأصل والسلامة، لكنه لا يثبت الإصدار الذي جاءت منه مجموعة ملفات غير مقترنة به - رابط الإصدار أو gh release verify هو ما يربط الإصدار.
مزودو LLM
تتواصل Cynative مع نماذج LLM عبر SDK المدمج Bifrost وتدعم تقريبًا أي مزوّد ذكاء اصطناعي بشكل جاهز (OpenAI, Anthropic, Azure OpenAI, Amazon Bedrock, Google Vertex/Gemini, Cohere, Mistral, Groq, Ollama, vLLM وغيرها). اختر أحدها من docs/providers/README.md واتبع دليل ذلك المزوّد.
أمثلة سريعة
```bash # Google Vertex export CYNATIVE_LLM_PROVIDER=vertex export CYNATIVE_LLM_MODEL=gemini-3.1-pro-preview export CYNATIVE_LLM_VERTEX_PROJECT_ID=my-gcp-project export CYNATIVE_LLM_VERTEX_REGION=global # CI / no gcloud: export GOOGLE_APPLICATION_CREDENTIALS=/path/to/sa.jsonOpenAI
export CYNATIVE_LLM_PROVIDER=openai export CYNATIVE_LLM_MODEL=gpt-5.6-sol export OPENAI_API_KEY=sk-...
Amazon Bedrock - AWS credential chain
export CYNATIVE_LLM_PROVIDER=bedrock export CYNATIVE_LLM_MODEL=anthropic.claude-opus-5 export CYNATIVE_LLM_BEDROCK_REGION=us-east-1
Azure OpenAI - endpoint via env, no YAML needed
export CYNATIVE_LLM_PROVIDER=azure export CYNATIVE_LLM_MODEL=my-gpt-5.6-sol export AZURE_OPENAI_API_KEY=... export CYNATIVE_LLM_AZURE_ENDPOINT=https://my-resource.openai.azure.com
Local Ollama
export CYNATIVE_LLM_PROVIDER=ollama export CYNATIVE_LLM_MODEL=nemotron-cascade-2 export CYNATIVE_LLM_OLLAMA_URL=http://localhost:11434
</details>
<details>
<summary><strong>YAML المتقدم</strong></summary>
لتحقيق موازنة التحميل متعددة المفاتيح، وسلوك إعادة المحاولة المخصص، وإعدادات الوكيل،
أو أي ميزة أخرى من Bifrost، اكتب ملف YAML:```yaml
llm:
provider: openai
model: gpt-5.5
api_key: env.OPENAI_API_KEY
network_config: # common fields shown; see schemas.NetworkConfig for the full set
base_url: https://my-proxy.example.com/v1
default_request_timeout_in_seconds: 60
max_retries: 3
extra_headers:
x-tenant: prod
انظر docs/providers/ للحصول على مرجع إعدادات كل مزوّد مدعوم.
الجلسات والموافقات
يفتح cynative جلسة تفاعلية (تحرير كامل للأسطر وسجلّ أوامر عبر مفاتيح الأسهم)؛ ويشغّل cynative "task" المهمة ثم يبقى تفاعليًا؛ بينما يشغّل -p / --print مهمة واحدة بشكل غير تفاعلي ثم يخرج - وذلك للسكربتات والأنابيب (مثل cat main.tf | cynative -p "review this Terraform for misconfigurations").
يستدعي Cynative مجموعتك التقنية باستخدام بيانات الاعتماد الموجودة بالفعل في shell - ولا يحتفظ بمخزن بيانات اعتماد منفصل. قدّم دائمًا بيانات الاعتماد الأقل صلاحيةً والمخصّصة للقراءة فقط.
الموافقات: كل استدعاء أداة ينتظر ضغطة مفتاح واحدة: y يشغّله مرة واحدة، وa يمرّر كل استدعاء لاحق لتلك الأداة خلال الجلسة (ما تزال السكربتات تُطبع قبل تشغيلها)، وأي مفتاح آخر يرفض. في حال عدم وجود طرفية تحكم، استخدم --auto-approve.
إيقاف منتصف المهمة: أثناء تشغيل مهمة، اضغط Esc أو Ctrl-C مرة واحدة لإيقافها بشكل سلس (ينهي الوكيل أي استدعاء قيد التشغيل بالفعل، ثم يتوقف ويطبع ⏸ Stopped). عندما يواجه الوكيل أخطاء أدوات أو رفضًا متكررًا، يتوقف تلقائيًا، ويلخّص ما يعوق تقدمه، ويطلب المعلومات المفقودة.
إكمال Bash: انظر cynative completion <shell> --help للحصول على ملاحظات التثبيت الكاملة لكل shell.
يطبع Cynative تذييلًا تشغيليًا قصيرًا (التوقيت واستهلاك التوكنات) إلى stderr - إعادة توجيه stdout (cynative -p "..." > out.txt) تُبقي الإجابة الملتقطة نظيفة. يطبع --version رقم الإصدار وcommit وتاريخ البناء وإصدار Go والمنصة.
يتحقق cynative doctor من صحة الإعدادات وجاهزية الموصلات دون بدء جلسة بحث. مرّر --live-llm لاختبار النموذج المُعدّ أيضًا عبر جولة ذهاب وإياب بدون أدوات.
التحكم في الموارد & التكاليف للتشغيل غير المُراقَب
التحكم في الموارد والتكاليف: بالنسبة للتشغيل غير المُراقَب أو المجدول أو طويل الأمد - المربوط بـ cron أو CI أو أي مشغّل - قيّد العمل صراحةً. عناصر الضبط الأساسية (مفاتيح الإعداد / متغيرات البيئة):
| مفتاح الإعداد / متغير البيئة | الافتراضي | التأثير |
|---|---|---|
max_total_tokensCYNATIVE_MAX_TOTAL_TOKENS | 0 (غير محدود) | سقف التوكنات لكل جلسة، مشترك بين الحلقة الرئيسية والوكلاء الفرعيين للمهام ووحدة التحقق دائمة التشغيل والمتابعات التفاعلية. |
max_iterationsCYNATIVE_MAX_ITERATIONS | 32 | أقصى عدد لتكرارات استدعاء الأدوات في الحلقة الرئيسية لكل دورة. |
max_subagent_iterationsCYNATIVE_MAX_SUBAGENT_ITERATIONS | 10 | أقصى عدد للتكرارات داخل الوكيل الفرعي للمهمة. |
max_consecutive_failuresCYNATIVE_MAX_CONSECUTIVE_FAILURES | 5 | استدعاءات أدوات متتالية دون إحراز تقدّم قبل التوقف والتلخيص (0 يعطّل). |
sandbox_max_concurrencyCYNATIVE_SANDBOX_MAX_CONCURRENCY | 16 | أقصى عدد لاستدعاءات الأدوات المتزامنة داخل بيئة العزل. |
يُجري التحقق من النتائج (أداة verify_findings) استدعاءات إضافية للنموذج - خصّص ميزانية لها في أي تشغيل يُنتج نتائج.
الموصلات
بالإضافة إلى بيانات الاعتماد الموجودة في shell، يفرض Cynative وضع القراءة فقط على ثلاث طبقات:
- الشبكة - كل مضيف طلب يُثبَّت على خدمته ومنطقته المرتبطتين به، ويُتحقق من عنوان IP المُحلَّل قبل الاتصال - يمكن لوكيلك الوصول إلى بنيتك التحتية فقط ولا شيء غير ذلك.
- بوابة الإجراءات - كل عملية تُحلَّل إلى إجراءات IAM المطلوبة لها،
والمستمدة من تعريفات واجهات برمجة التطبيقات الخاصة بالمزوّدين، ثم يُصرَّح
بها عبر سياسة قراءة فقط قبل إرفاق أي بيانات اعتماد:
SecurityAudit(AWS)،roles/viewer(GCP)،Reader(Azure). تتابع التغطية واجهات برمجة التطبيقات السحابية مع نموّها، وتُغلق البوابة (fails closed) تجاه أي شيء تصنّفه ككتابة. وبالنسبة إلى Kubernetes، تكون السياسة هي دور RBAC المباشرviewالخاص بالمجموعة نفسها، ويُجلب وقت التشغيل ويُطبَّق على كل طلب. GitHub وGitLab للقراءة فقط افتراضيًا؛ ويمكن لإعدادconnectors.{github,gitlab}.permissionsالسماح بالكتابة في فئات محددة عندما يحتاج سير عمل إلى ذلك، ويُطبَّق على كل طلب قبل إرفاق التوكن. وحتى في وضع القراءة فقط، تبقى نقاط نهاية فحص الأسرار في GitHub محظورة وتُرفض واجهة GraphQL API الخاصة بـ GitLab. - بيانات الاعتماد (AWS) - بالنسبة للهويات ذات الأدوار المُفترَضة، تُعاد
إصدار بيانات الاعتماد عبر STS
AssumeRole، مقيّدةً بسياسة مُدارة (SecurityAuditافتراضيًا)، وبذلك يفرض AWS IAM الحدود أيضًا. تعمل هويات مستخدمي IAM والجذر ببيانات اعتمادها الأساسية، مع تقييدها ببوابة الإجراءات أعلاه.
يتصل Cynative بـ AWS وGCP وAzure وEKS/GKE/AKS وKubernetes المُدار ذاتيًا وGitHub وGitLab. انظر docs/connectors/README.md للاطلاع على اكتشاف بيانات الاعتماد والتحصين والقيود والأمثلة الخاصة بكل موصل.
تنفيذ الكود وتنسيق الأدوات
للأعمال المجمّعة - "افحص كل حاوية S3 عامة"، "اسرد مجموعات EKS في كل
منطقة" - يمكن لـ Cynative كتابة وتشغيل JavaScript داخل بيئة عزل بدلًا من
إصدار استدعاء أداة واحد في كل مرة. أدوات الوكيل (مثل http_request) متاحة
كدوال JavaScript غير متزامنة (async)، فينشئ حلقات تكرارية للاستدعاءات
ويصفّيها ويُسلسلها في الكود - ويشغّل الاستدعاءات المستقلة بالتزامن مع
المساعد المدمج mapConcurrent(items, fn, limit) (أو await Promise.all([...])
للمجموعات الصغيرة الثابتة).
فقط ما يطبعه السكربت عبر console.log يعود إلى النموذج، مما يُبقي البحث
سريعًا واقتصاديًا في استهلاك التوكنات.```js
// Discover regions, then list EKS clusters in every region concurrently,
// following pagination - only the summary returns to the model.
const r = await http_request({
method: "GET",
url: "https://ec2.us-east-1.amazonaws.com/?Action=DescribeRegions&Version=2016-11-15",
auth_provider: "aws", aws_auth: { service: "ec2", region: "us-east-1" },
});
const regions = [...r.body.matchAll(/([^<]+)</regionName>/g)].map((m) => m[1]);
const all = await mapConcurrent(regions, async (region) => {
const clusters = [];
let token = null;
do {
const url = https://eks.${region}.amazonaws.com/clusters +
(token ? ?nextToken=${encodeURIComponent(token)} : "");
const resp = await http_request({
method: "GET", url,
auth_provider: "aws", aws_auth: { service: "eks", region },
});
const body = JSON.parse(resp.body);
clusters.push(...body.clusters);
token = body.nextToken;
} while (token);
return { region, clusters };
});
console.log(JSON.stringify(all.filter((x) => x.clusters.length > 0), null, 2));
- **غير المتزامنة والمتزامنة**: دوال الأدوات تُرجع وعودًا (Promises) - استخدم `await` معها، ووزّع
العمل عبر موارد متعددة باستخدام `mapConcurrent(items, fn, limit)` (محدود،
يحافظ على الترتيب)، أو استخدم `await Promise.all([...])` لمجموعات صغيرة ثابتة.
- **الاستجابات المنظمة**: `http_request` تُحل إلى `{ status, statusText,
headers, body }`؛ `body` هو السلسلة النصية الخام - استخدم `JSON.parse(resp.body)` لواجهات JSON
أو اقرأها مباشرةً لـ XML.
- **بيئة معزولة (Sandboxed)**: لا يمكن للبرنامج النصي سوى استدعاء الأدوات التي يوفّرها Cynative -
إذ لا يملك وصولًا خاصًا به إلى الشبكة أو المضيف.
- **ترى النص البرمجي كاملًا**: كل استدعاء `code_execution` يُعرض بالكامل
للموافقة قبل تنفيذه (تخطَّه باستخدام `--auto-approve`؛ وبثّ كل استدعاء داخلي
باستخدام `-v`).
- **الحفاظ على الحالة داخل الجلسة**: القيم المحفوظة على `globalThis` تبقى عبر
الاستدعاءات أثناء جلسة تفاعلية؛ أما `let`/`const`/`var`/
`function` على المستوى الأعلى فمقتصرة على استدعاء واحد.
- **محدود**: تعمل البرامج النصية ضمن مهلة زمنية (120 ثانية افتراضيًا) وبحد أقصى لحجم الإخراج.
## سجل التدقيق
يُسجَّل كل استدعاء أداة في سجل تدقيق JSONL دائم (`~/.cynative/audit.log`, مفعّل افتراضيًا). السجل يعمل بمبدأ الإغلاق عند الفشل: إذا تعذّر تسجيل استدعاء، يتوقف التشغيل. كل إدخال من تشغيل وكيل يسجّل أيضًا اسم الوكيل ومصدره وملخّص الملف، بحيث يمكن تتبّع أي نتيجة وصولًا إلى الاستعلام الدقيق الذي أنتجها.
يتم تنقيح نتائج الأدوات قبل كتابتها، لكن وسائط طلب الموافقة تُخزَّن حرفيًا - قد يحتوي السجل على قيم حساسة. لا يمكن قراءته إلا بواسطة المستخدم الذي شغّل Cynative. يمكن ضبط التدوير والاحتفاظ.
اضبط الإعدادات ضمن `audit:` في `~/.cynative/config.yaml`، أو عبر متغيرات البيئة:
| المفتاح | متغير البيئة | الافتراضي |
|---|---|---|
| `audit.enabled` | `CYNATIVE_AUDIT_ENABLED` | `true` |
| `audit.path` | `CYNATIVE_AUDIT_PATH` | `~/.cynative/audit.log` |
| `audit.max_size_mb` | `CYNATIVE_AUDIT_MAX_SIZE_MB` | `100` |
| `audit.retention_days` | `CYNATIVE_AUDIT_RETENTION_DAYS` | `30` |
| `audit.compress` | `CYNATIVE_AUDIT_COMPRESS` | `false` |
## الأسئلة والملاحظات
[المناقشات](https://github.com/cynative/cynative/discussions) هي أفضل مكان لمشاركة ملاحظاتك - ما وجّهته إليها، وما عاد إليك، وما ينقص. النجوم تساعد الآخرين على اكتشاف المشروع.
## المساهمة
المساهمات مرحّب بها - وكلاء جدد، وموصلات، ومجموعات بيانات تقييم، وتحسينات في جميع المجالات. راجع [CONTRIBUTING.md](https://github.com/cynative/cynative/blob/HEAD/CONTRIBUTING.md) لإعداد بيئة التطوير، وبوابة `make check`، واصطلاحات طلبات السحب (PR)، و[SECURITY.md](https://github.com/cynative/cynative/blob/HEAD/SECURITY.md) للإبلاغ عن الثغرات الأمنية.
## الترخيص
ترخيص Apache-2.0. راجع [LICENSE](https://github.com/cynative/cynative/blob/HEAD/LICENSE) للنص الكامل.