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

ابنِ وكلاء الأمان الخاصين بك
إطار عمل مفتوح المصدر لوكلاء الأمان مع وصول مباشر للقراءة فقط إلى البنية التحتية الخاصة بك.
بدء سريع · وكيلك الأول · الوثائق
اسأل بنيتك التحتية عن أي شيء. يشغّل Cynative نماذج متطورة عبر الكود والسحابة وبيئة التشغيل الخاصة بك - مع التفكير عبر GitHub وGitLab وAWS وGCP وAzure وKubernetes كنظام واحد - ويعود بإجابات موثّقة.```bash cynative "what in my cloud is publicly exposed that shouldn't be?"
<!-- 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
- **بيئة معزولة**: يولّد وينفّذ كودًا للبحث على نطاق واسع، دون أي وصول خاص به إلى الشبكة أو المضيف
- **بوابة الإجراءات**: يحل كل استدعاء إلى إجراءات 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=...
تقوم الأداة بالتقاط بيانات الاعتماد الموجودة بالفعل في بيئتك الطرفية. اسألها عن أي شيء:```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 |
|---|---|---|
| الإنتاجية | إجراء واحد لكل استدعاء | يكتب كودًا معزولًا يوزع الاستدعاءات بشكل متزامن - رموز أقل، إجابات أسرع |
| النتائج | مخرجات غير موثقة | المدقق يتحقق من كل نتيجة مقابل أدلة حية |
| القراءة فقط | مرشح قراءة اختياري | مفعل افتراضيًا، يفشل بإغلاق آمن - إجراءات IAM المطلوبة تُفحص مقابل سياسة تدقيق أمني. `secretsmanager:GetSecretValue` هو إجراء IAM *قراءة*: المرشح يسمح به، بينما `SecurityAudit` يحظره |
| بيانات الاعتماد | محيطية، دون تغيير | جلسة STS محدودة النطاق للقراءة فقط - AWS تفرض الحدود أيضًا |
| نطاق الانفجار | غلافك (Shell)، أي شبكة | كود البحث يعمل في صندوق رمل بدون وصول للمضيف، والشبكة مثبتة على خدماتك المعينة |
| الأسرار | تُرسل إلى النموذج كما هي | تُحجب من مخرجات الأدوات قبل إرسالها إلى النموذج |
| سلسلة التوريد | وكلاء ومهارات MCPs من جهات خارجية تعمل ببيانات اعتمادك | ثنائي واحد مفتوح المصدر، موصلات مدمجة |
| سجل التدقيق | سجلات جلسات متناثرة، بأفضل جهد | سجل JSONL مغلق عند الفشل لكل استدعاء أداة - إذا تعذر التسجيل، يتوقف التنفيذ |
ثنائي واحد، نقطة نهاية نموذجك، حسابك. شغّله على مثيل في السحابة التي يدققها، عبر الاستدلال المُدار لتلك السحابة، ولا يغادر أي شيء بيئتك: أمان على بنيتك التحتية، من داخل بنيتك التحتية.
## التثبيت
**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؛ أول تشغيل واجهة رسومية لملف ثنائي معزول يتطلب إنترنت لفحص التوثيق عبر الإنترنت (استخدام الطرفية/install.sh/Homebrew غير متأثر).
Linux / ويندوز (يدويًا): نزّل ملفًا ثنائيًا مُجمّعًا مسبقًا و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، ومُصدَّقة (notarized) ومختومة (stapled) بدلاً من ذلك، وكل أصل (asset) مغطّى إضافياً بتوثيق إصدار GitHub (gh release verify <tag>). هناك حدّان جديران بالمعرفة: cosign يجلب جذر الثقة الخاص بـ Sigstore عبر الشبكة ما لم تمرّر --trusted-root، ولأن أسماء الملفات لا تحمل رقم إصدار، فإن التوقيع يُثبت المصدر والسلامة ولكن ليس أي إصدار جاءت منه مجموعة ملفات فضفاضة — رابط الإصدار أو gh release verify هو ما يربط الإصدار.
مزوّدو LLM
تتحدث Cynative مع نماذج LLM عبر Bifrost SDK المدمج وتدعم تقريباً أي مزوّد ذكاء اصطناعي خارج الصندوق (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"). يحمل رمز الخروج الحكم للبرامج النصية: 0 عند إنتاج تقرير، و2 عند اكتمال التشغيل دون إجابة (يذكر الإشعار السبب - حد التكرار أو حد الرموز، أو استجابة نموذج فارغة أو مُصفّاة)، و130 عند الانقطاع، و143 عند SIGTERM، و1 لأي فشل آخر.
يستدعي Cynative مجموعتك التقنية باستخدام بيانات الاعتماد الموجودة بالفعل في قوقعتك - ولا يحتفظ بمخزن منفصل لبيانات الاعتماد. قدّم دائمًا بيانات الاعتماد الأقل صلاحية والمخصصة للقراءة فقط المطلوبة.
الموافقات: كل استدعاء أداة ينتظر ضغطة مفتاح واحدة: y ينفّذه مرة واحدة، وa يلغي كل استدعاء لاحق لتلك الأداة خلال الجلسة (البرامج النصية ما زالت تُطبع قبل التنفيذ)، وأي مفتاح آخر يرفض. عند عدم وجود طرفية تحكم، استخدم --auto-approve.
الإيقاف في منتصف المهمة: أثناء تشغيل مهمة، اضغط Esc أو Ctrl-C مرة واحدة لإيقافها بأمان (ينهي الوكيل أي استدعاء قيد التشغيل بالفعل، ثم يتوقف ويطبع ⏸ Stopped). عندما يواجه الوكيل أخطاء أو رفضًا متكررًا للأدوات، يتوقف تلقائيًا، ويلخّص ما يعيق تقدمه، ويطلب المعلومات المفقودة.
إكمال Bash: راجع cynative completion <shell> --help للحصول على تعليمات التثبيت الكاملة لكل قوقعة.
يطبع Cynative تذييلًا تشغيليًا قصيرًا (التوقيت، استخدام الرموز) إلى stderr - إعادة توجيه stdout (cynative -p "..." > out.txt) تُبقي الإجابة الملتقطة نظيفة. يطبع --version الإصدار والالتزام وتاريخ البناء وإصدار 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) يستدعي نماذج إضافية - خصّص ميزانية لها في أي تشغيل يُنتج نتائج.
الموصلات
إلى جانب بيانات الاعتماد في قوقعتك، يفرض Cynative وضع القراءة فقط على ثلاث طبقات:
- الشبكة - كل مضيف طلب مُثبّت على خدمته ومنطقته المعيّنة ويتم التحقق من عنوان IP المُحلَّل قبل الاتصال - يمكن لوكيلك الوصول إلى بنيتك التحتية ولا شيء غيرها.
- بوابة الإجراءات - كل عملية تُحلَّل إلى إجراءات IAM المطلوبة،
المستمدة من تعريفات واجهات برمجة التطبيقات الخاصة بالمزوّدين، ثم تُصرَّح
بسياسة قراءة فقط قبل إرفاق أي بيانات اعتماد:
SecurityAudit(AWS)، وroles/viewer(GCP)، وReader(Azure). تغطي التغطية واجهات برمجة تطبيقات السحابة مع نموها، وتفشل البوابة بشكل مغلق على أي شيء تصنّفه كعملية كتابة. بالنسبة لـ Kubernetes، السياسة هي دور RBAC المباشرviewالخاص بالمجموعة، الذي يُجلب وقت التشغيل ويُفرض لكل طلب. GitHub وGitLab للقراءة فقط افتراضيًا؛ يمكن لإعدادconnectors.{github,gitlab}.permissionsالسماح بالكتابة على فئات محددة حيث يحتاجها سير العمل، ويُفرض ذلك لكل طلب قبل إرفاق الرمز المميز. حتى في وضع القراءة فقط، تبقى نقاط نهاية فحص الأسرار في GitHub محظورة ويُرفض واجهة GraphQL الخاصة بـ 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 غير متزامنة، بحيث يكرر ويصفّي ويربط الاستدعاءات في
كود - وينفّذ الاستدعاءات المستقلة بالتزامن مع المساعد المدمج
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 ثانية) وحجم إخراج أقصى.
## سجل التدقيق (Audit Log)
يُسجَّل كل استدعاء أداة في سجل تدقيق JSONL دائم (`~/.cynative/audit.log`، مفعّل افتراضيًا). السجل يعمل بنمط الإغلاق عند الفشل: إذا تعذّر تسجيل استدعاء، يتوقف التشغيل. كل إدخال من تشغيل وكيل يسجّل أيضًا اسم الوكيل ومصدره وبصمة الملف، بحيث يمكن تتبع نتيجة إلى المطالبة (prompt) الدقيقة التي أنتجتها.
تُنقّح نتائج الأدوات قبل كتابتها، لكن وسائط مطالبة الموافقة تُخزَّن حرفيًا - قد يحتوي السجل على قيم حساسة. يمكن قراءته فقط من قبل المستخدم الذي شغّل 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) هي أفضل مكان لمشاركة ملاحظاتك - ما وجّهته إليه، وما عاد إليك، وما هو مفقود. النجوم تساعد الأشخاص على اكتشاف المشروع.
## المساهمة
المساهمات مرحّب بها - وكلاء جدد، وموصلات (connectors)، ومجموعات تقييم، وتحسينات
على مستوى المشروع. راجع [CONTRIBUTING.md](https://github.com/cynative/cynative/blob/main/CONTRIBUTING.md) لإعداد
التطوير، وبوابة `make check`، واصطلاحات طلبات السحب (PR)، و[SECURITY.md](https://github.com/cynative/cynative/blob/main/SECURITY.md)
للإبلاغ عن الثغرات الأمنية.
## الترخيص
رخصة Apache-2.0. راجع [LICENSE](https://github.com/cynative/cynative/blob/main/LICENSE) للنص الكامل.