
cynative v1.8.0
रीड-ओनली एआई एजेंट जो आपके क्लाउड, कोड और रनटाइम इंफ्रास्ट्रक्चर की जांच करता है ताकि सत्यापित, साक्ष्य-समर्थित निष्कर्षों के साथ गलत कॉन्फ़िगरेशन, लीक हुए सीक्रेट्स और प्रिविलेज एस्केलेशन पथ को उजागर किया जा सके।

अपने खुद के सुरक्षा एजेंट बनाएं
आपके इंफ्रास्ट्रक्चर तक लाइव, केवल-पढ़ने की पहुंच वाले सुरक्षा एजेंटों के लिए ओपन-सोर्स फ्रेमवर्क।
क्विकस्टार्ट · आपका पहला एजेंट · दस्तावेज़
अपने इंफ्रास्ट्रक्चर से कुछ भी पूछें। Cynative आपके कोड, क्लाउड और रनटाइम पर फ्रंटियर मॉडल चलाता है - GitHub, GitLab, AWS, GCP, Azure और Kubernetes को एक सिस्टम के रूप में समझकर तर्क करता है - और सत्यापित उत्तरों के साथ वापस आता है।```bash cynative "what in my cloud is publicly exposed that shouldn't be?"
यह एक अस्थायी सैंडबॉक्स में कोड लिखता और चलाता है, आपके APIs को समानांतर रूप से क्वेरी करता है, ताकि एक प्रश्न आपके पूरे स्टैक में फैल जाए। हर निष्कर्ष को क्रॉस-चेक किया जाता है और उसके मूल तक ट्रेस किया जाता है।
कोडिंग एजेंटों और 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 के माध्यम से तर्क करता है
- **सैंडबॉक्स**: स्केल पर शोध करने के लिए कोड उत्पन्न और चलाता है, जिसकी अपनी कोई नेटवर्क या होस्ट एक्सेस नहीं होती
- **एक्शन-गेट**: हर कॉल को उसके आवश्यक 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` और piped stdin के साथ संयोजित होता है, इसलिए वही फ़ाइल इंटरैक्टिव रूप से चलती है जब आप इसे विकसित कर रहे होते हैं और गैर-इंटरैक्टिव रूप से एक बार यह स्थिर हो जाती है।
एजेंट `~/.cynative/agents/` से और बाइनरी में निर्मित सेट से पढ़े जाते हैं; एक उपयोगकर्ता फ़ाइल उसी नाम के निर्मित-इन पर जीत जाती है। `cynative agents list` प्रत्येक एजेंट को उसके स्रोत के साथ दिखाता है और छायांकित प्रतियों को चिह्नित करता है, और `cynative agents show <name>` उस सटीक फ़ाइल को प्रिंट करता है जो चलेगी।
## क्या MCPs वाला कोडिंग एजेंट यह नहीं कर सकता?
| | कोडिंग एजेंट + MCPs | Cynative |
|---|---|---|
| थ्रूपुट | प्रति कॉल एक क्रिया | सैंडबॉक्स्ड कोड लिखता है जो कॉल को समवर्ती रूप से फैलाता है - कम टोकन, तेज़ उत्तर |
| निष्कर्ष | असत्यापित आउटपुट | वेरिफ़ायर प्रत्येक निष्कर्ष को लाइव साक्ष्य के विरुद्ध क्रॉस-चेक करता है |
| केवल-पढ़ने | ऑप्ट-इन रीड फ़िल्टर | डिफ़ॉल्ट रूप से चालू, विफल-बंद - आवश्यक IAM क्रियाओं को सुरक्षा-ऑडिट नीति के विरुद्ध जाँचा जाता है। `secretsmanager:GetSecretValue` एक IAM *रीड* है: एक फ़िल्टर इसे अनुमति देता है, `SecurityAudit` इसे ब्लॉक करता है |
| क्रेडेंशियल | परिवेशी, अपरिवर्तित | STS सत्र केवल-पढ़ने के लिए स्कोप्ड - AWS भी सीमा लागू करता है |
| विस्फोट त्रिज्या | आपका शेल, कोई भी नेटवर्क | शोध कोड एक सैंडबॉक्स में चलता है जिसमें कोई होस्ट एक्सेस नहीं, नेटवर्क आपकी मैप की गई सेवाओं तक सीमित |
| रहस्य | मॉडल को जैसे-का-तैसे भेजे जाते हैं | मॉडल को भेजे जाने से पहले टूल आउटपुट से संपादित किए जाते हैं |
| आपूर्ति श्रृंखला | आपके क्रेड्स के साथ चलने वाले तृतीय-पक्ष 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
अपडेट करना, अनइंस्टॉल करना, Windows विवरण, संस्करण पिनिंग और मैन्युअल डाउनलोड
अपडेट / अनइंस्टॉल
| विधि | अपडेट | अनइंस्टॉल |
|---|---|---|
| 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 |
Windows (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 के लिए बने रहते हैं; क्वारंटीन किए गए tarball बाइनरी के पहले GUI लॉन्च के लिए ऑनलाइन नोटराइज़ेशन जाँच हेतु इंटरनेट की आवश्यकता होती है (टर्मिनल/install.sh/Homebrew उपयोग प्रभावित नहीं होता)।
Linux / Windows (मैन्युअल): रिलीज़ पेज से एक प्रीबिल्ट बाइनरी और 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 होते हैं, और हर एसेट अतिरिक्त रूप से GitHub release attestation (gh release verify <tag>) द्वारा कवर किया जाता है। दो सीमाएँ जानने लायक हैं: cosign Sigstore के trust root को नेटवर्क पर लाता है जब तक आप --trusted-root पास नहीं करते, और क्योंकि फ़ाइल नामों में कोई संस्करण नहीं होता, हस्ताक्षर उत्पत्ति और अखंडता साबित करता है लेकिन यह नहीं कि फ़ाइलों का एक ढीला सेट किस release से आया - release URL या gh release verify ही वह चीज़ है जो संस्करण को बाँधता है।
LLM प्रदाता
Cynative एम्बेडेड Bifrost SDK के माध्यम से LLM से बात करता है और लगभग किसी भी AI प्रदाता को बॉक्स से बाहर समर्थन करता है (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
See docs/providers/ for every supported provider's configuration reference.
सत्र और अनुमोदन
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 या किसी भी ट्रिगर में जुड़े - कार्य को स्पष्ट रूप से सीमित करें। मुख्य नॉब्स (कॉन्फ़िग कुंजियाँ / env vars):
| Config key / env var | Default | Effect |
|---|---|---|
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 एक्शन में हल किया जाता है,
जो प्रदाताओं की अपनी API परिभाषाओं से प्राप्त होता है, फिर किसी भी क्रेडेंशियल को
जोड़ने से पहले केवल-पढ़ने वाली नीति द्वारा अधिकृत किया जाता है:
SecurityAudit(AWS),roles/viewer(GCP),Reader(Azure). कवरेज क्लाउड APIs को ट्रैक करता है जैसे वे बढ़ते हैं, और गेट किसी भी चीज़ पर बंद-विफल होता है जिसे वह लेखन के रूप में वर्गीकृत करता है। Kubernetes के लिए नीति क्लस्टर की अपनी लाइवviewRBAC भूमिका है, जो रनटाइम पर प्राप्त की जाती है और प्रति अनुरोध लागू की जाती है। GitHub और GitLab डिफ़ॉल्ट रूप से केवल-पढ़ने योग्य हैं; एकconnectors.{github,gitlab}.permissionsसेटिंग विशिष्ट श्रेणियों पर लेखन की अनुमति दे सकती है जहां एक वर्कफ़्लो को इसकी आवश्यकता होती है, जो टोकन जोड़ने से पहले प्रति अनुरोध लागू होती है। केवल-पढ़ने के मोड में भी, GitHub के सीक्रेट-स्कैनिंग एंडपॉइंट अवरुद्ध रहते हैं और GitLab का GraphQL API अस्वीकृत है। - क्रेडेंशियल (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) async 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));
- **Async और concurrent**: टूल फ़ंक्शन Promises लौटाते हैं - उन्हें `await` करें, `mapConcurrent(items, fn, limit)` के साथ कई संसाधनों पर फैलाएं (बाउंडेड, ऑर्डर-प्रिज़र्विंग), या छोटे फिक्स्ड सेट के लिए `await Promise.all([...])` का उपयोग करें।
- **संरचित प्रतिक्रियाएँ**: `http_request` `{ status, statusText, headers, body }` में रिज़ॉल्व होता है; `body` कच्चा स्ट्रिंग है - JSON APIs के लिए `JSON.parse(resp.body)` या XML के लिए इसे सीधे पढ़ें।
- **सैंडबॉक्स्ड**: एक स्क्रिप्ट केवल उन टूल्स को कॉल कर सकती है जो Cynative उजागर करता है - इसका अपना कोई नेटवर्क या होस्ट एक्सेस नहीं है।
- **आप पूरी स्क्रिप्ट देखते हैं**: प्रत्येक `code_execution` कॉल चलने से पहले अनुमोदन के लिए पूर्ण रूप से दिखाया जाता है (`--auto-approve` के साथ छोड़ें; `-v` के साथ प्रत्येक आंतरिक कॉल को स्ट्रीम करें)।
- **सत्र के भीतर स्टेटफुल**: `globalThis` पर सहेजे गए मान इंटरैक्टिव सत्र के दौरान कॉल के बीच बने रहते हैं, जब तक कॉल पूर्ण रूप से चलता है (जो टाइमआउट हो जाता है या निलंबित छोड़ दिया जाता है वह उन्हें रीसेट कर देता है); टॉप-लेवल `let`/`const`/`var`/`function` एक ही कॉल तक सीमित हैं।
- **बाउंडेड**: स्क्रिप्ट एक टाइमआउट (डिफ़ॉल्ट 120s) और एक सीमित आउटपुट आकार के तहत चलती हैं।
## ऑडिट लॉग
हर टूल कॉल एक स्थायी JSONL ऑडिट लॉग (`~/.cynative/audit.log`, डिफ़ॉल्ट रूप से चालू) में दर्ज किया जाता है। लॉग फेल-क्लोज़्ड है: यदि कोई कॉल रिकॉर्ड नहीं किया जा सकता है, तो रन रद्द हो जाता है। एजेंट रन से प्रत्येक प्रविष्टि एजेंट का नाम, स्रोत और फ़ाइल डाइजेस्ट भी रिकॉर्ड करती है, ताकि एक निष्कर्ष को उस सटीक प्रॉम्प्ट तक ट्रेस किया जा सके जिसने इसे उत्पन्न किया।
टूल परिणाम लिखे जाने से पहले रिडैक्ट किए जाते हैं, लेकिन अनुमोदन-प्रॉम्प्ट तर्क शब्दशः संग्रहीत होते हैं - लॉग में संवेदनशील मान हो सकते हैं। यह केवल उस उपयोगकर्ता द्वारा पठनीय है जिसने Cynative चलाया। रोटेशन और रिटेंशन कॉन्फ़िगर करने योग्य हैं।
`~/.cynative/config.yaml` में `audit:` के तहत, या env के माध्यम से कॉन्फ़िगर करें:
| कुंजी | Env | डिफ़ॉल्ट |
|---|---|---|
| `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` |
## प्रश्न और प्रतिक्रिया
[Discussions](https://github.com/cynative/cynative/discussions) आपकी प्रतिक्रिया साझा करने के लिए सबसे अच्छी जगह है - आपने इसे किस ओर इंगित किया, क्या वापस आया, और क्या गायब है। स्टार्स लोगों को प्रोजेक्ट खोजने में मदद करते हैं।
## योगदान
योगदान का स्वागत है - नए एजेंट, कनेक्टर, मूल्यांकन डेटासेट, और हर तरफ सुधार। डेव सेटअप, `make check` गेट, और PR परंपराओं के लिए [CONTRIBUTING.md](https://github.com/cynative/cynative/blob/main/CONTRIBUTING.md) देखें, और भेद्यता रिपोर्ट करने के लिए [SECURITY.md](https://github.com/cynative/cynative/blob/main/SECURITY.md) देखें।
## लाइसेंस
Apache-2.0 लाइसेंस। पूर्ण पाठ के लिए [LICENSE](https://github.com/cynative/cynative/blob/main/LICENSE) देखें।