
cynative v1.9.2
Agente IA di sola lettura che interroga la tua infrastruttura cloud, codice e runtime per far emergere configurazioni errate, segreti divulgati e percorsi di escalation dei privilegi con risultati verificati e basati su prove.

Crea i tuoi agenti di sicurezza
Framework open-source per agenti di sicurezza con accesso live e in sola lettura alla tua infrastruttura.
Avvio rapido · Il tuo primo agente · Documentazione
Chiedi qualsiasi cosa alla tua infrastruttura. Cynative esegue modelli di frontiera su codice, cloud e runtime, ragionando su GitHub, GitLab, AWS, GCP, Azure e Kubernetes come un unico sistema, e restituisce risposte verificate.```bash cynative "what in my cloud is publicly exposed that shouldn't be?"
It scrive ed esegue codice in una sandbox effimera, interrogando le tue API in parallelo, così una singola domanda si dirama attraverso l'intero stack. Ogni risultato viene incrociato e ricondotto alla sua origine.
A differenza degli agenti di coding e dei server MCP, è **read-only per costruzione**: ogni chiamata viene sottoposta a un gate e autorizzata *prima* che venga associata una credenziale - puntalo verso la produzione con fiducia.
<!-- END agent-about -->
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/9087/1b3db179a03479f5951d624c8adbb4890465aa86d038d3312dc9aec9801bcfb9.gif"
alt="cynative che verifica un'escalation dei privilegi da CI a cloud"
width="900">
</p>
## Cosa ottengono i tuoi agenti
- **Code-to-runtime**: Ragiona su AWS, GCP, Azure, qualsiasi K8s, GitHub e GitLab
- **Sandbox**: Genera ed esegue codice per ricerche su larga scala, senza accesso alla rete o all'host
- **Action-gate**: Risolve ogni chiamata nelle azioni IAM richieste e applica una policy di sola lettura prima che venga associata una credenziale
- **Evidence-backed**: Esegue controlli incrociati per verificare ogni risultato
- **Sovereign**: Un solo binario, il tuo modello, i tuoi dati restano tuoi
## Avvio rapido
Installa e configura un 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=...
Rileva le credenziali già presenti nella tua shell. Chiedigli qualsiasi cosa:```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"
## Il tuo primo agente
Un agente è un file Markdown: una riga di descrizione, poi il prompt. Il nome del file è quello dell'agente. Per aggiungerne uno tuo, crea `~/.cynative/agents/` e scrivine uno al suo interno. Cynative non crea questa directory per te:```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
Vedi docs/agents.md per il formato.
Esecuzione degli agenti```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` si combina con `-p`, `--auto-approve`, `--config` e stdin tramite pipe, così lo stesso file viene eseguito in modo interattivo mentre lo sviluppi e in modo non interattivo una volta stabilizzato.
Gli agenti vengono letti da `~/.cynative/agents/` e dall'insieme integrato nel binario; un file utente ha la precedenza su uno integrato con lo stesso nome. `cynative agents list` mostra ogni agente con la sua origine e segna le copie in ombra, e `cynative agents show <name>` stampa il file esatto che verrebbe eseguito.
## Un agente di codifica con MCPs non può fare questo?
| | Agente di codifica + MCPs | Cynative |
|---|---|---|
| Throughput | Un'azione per chiamata | Scrive codice sandbox che distribuisce le chiamate in concorrenza - meno token, risposte più rapide |
| Findings | Output non verificato | Il verificatore incrocia ogni risultato con evidenze dal vivo |
| Read-only | Filtro di lettura opt-in | Attivo per impostazione predefinita, in modalità fail-closed - le azioni IAM richieste vengono verificate rispetto a una policy di security-audit. `secretsmanager:GetSecretValue` è una *Read* IAM: un filtro la consente, `SecurityAudit` la blocca |
| Credentials | Di ambiente, invariate | Sessione STS limitata alla sola lettura - anche AWS applica il confine |
| Blast radius | La tua shell, qualsiasi rete | Il codice di ricerca viene eseguito in una sandbox senza accesso all'host, rete limitata ai tuoi servizi mappati |
| Secrets | Inviati al modello così come sono | Oscurati dall'output dello strumento prima che vengano inviati al modello |
| Supply chain | MCP e skill di terze parti eseguiti con le tue credenziali | Un binario open-source, connettori integrati |
| Audit trail | Log di sessione sparsi, best effort | Registro JSONL fail-closed di ogni chiamata dello strumento - se non riesce a registrare, si interrompe |
Un unico binario, il tuo endpoint del modello, il tuo account. Eseguilo su un'istanza nel cloud che verifica, tramite l'inferenza gestita di quel cloud, e nulla lascia il tuo ambiente: sicurezza sulla tua infrastruttura, dall'interno della tua infrastruttura.
## Installazione
**Homebrew** (macOS / Linux - consigliato):```bash
brew install cynative/tap/cynative
Script di installazione (macOS / Linux - verifica lo SHA-256 del download rispetto al file checksums.txt della release, interrompendosi in caso di mancata corrispondenza):```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
Aggiornamento, disinstallazione, dettagli Windows, blocco della versione e download manuale
Aggiornamento / disinstallazione
| Metodo | Aggiornamento | Disinstallazione |
|---|---|---|
| Homebrew | brew upgrade cynative | brew uninstall cynative |
| Script di installazione | riesegui il one-liner | curl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh -s -- --uninstall |
| Scoop | scoop update cynative | scoop uninstall cynative |
Windows (script PowerShell): irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1 | iex; disinstallare con & ([scriptblock]::Create((irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1))) -Uninstall.
Opzioni dello script di installazione: blocca una versione con CYNATIVE_VERSION=v1.0.0; cambia la directory di destinazione con CYNATIVE_INSTALL_DIR (predefinita ~/.local/bin, senza sudo). Lo script controlla l'attestazione della release GitHub quando gh è installato (di default è solo un avviso); imposta CYNATIVE_REQUIRE_ATTESTATION=1 per rendere fatale un controllo fallito. Per un'installazione ad alta integrità, scarica lo script da un tag immutabile invece di main.
macOS (manuale): scarica cynative_Darwin_arm64.pkg (Apple Silicon) o cynative_Darwin_x86_64.pkg (Intel) dalla pagina delle release e installa con sudo installer -pkg <file> -target / (oppure facendo doppio clic). Questi pacchetti sono firmati, notarizzati e con ticket di notarizzazione incorporato - nessun prompt Gatekeeper al primo avvio. Gli archivi grezzi cynative_Darwin_*.tar.gz rimangono per lo scripting/CI; il primo avvio GUI di un binario da tarball in quarantena richiede internet per il controllo di notarizzazione online (l'uso da terminale/install.sh/Homebrew non è influenzato).
Linux / Windows (manuale): scarica un binario precompilato e checksums.txt dalla pagina delle release, verifica lo SHA-256 e metti il binario nel tuo PATH. Binario singolo statico, senza dipendenze.
Verifica una firma di release (opzionale). Le nuove release includono checksums.txt.sigstore.json, un bundle Sigstore che firma checksums.txt con un certificato keyless associato al workflow di release di questo repository. Autentica il manifest, poi verifica il tuo archivio rispetto ad esso:```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
Questo copre gli archivi indicati in checksums.txt. Gli installatori .pkg sono invece firmati con Developer ID, notarizzati e pinzati, e ogni asset è inoltre coperto dall'attestazione di rilascio GitHub (gh release verify <tag>). Due limiti da conoscere: cosign recupera la trust root di Sigstore dalla rete a meno che non si passi --trusted-root, e poiché i nomi dei file non riportano la versione, la firma prova origine e integrità ma non da quale release provenga un insieme sparso di file - l'URL della release o gh release verify è ciò che vincola una versione.
Provider LLM
Cynative comunica con gli LLM tramite l'SDK Bifrost integrato e supporta quasi tutti i provider AI out of the box (OpenAI, Anthropic, Azure OpenAI, Amazon Bedrock, Google Vertex/Gemini, Cohere, Mistral, Groq, Ollama, vLLM e altri). Scegline uno da docs/providers/README.md e segui la guida di quel provider.
Esempi rapidi
```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 avanzato</strong></summary>
Per il bilanciamento del carico multi-chiave, il comportamento di retry personalizzato, la configurazione del proxy
o qualsiasi altra funzionalità di Bifrost, scrivi un file 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
Vedi docs/providers/ per il riferimento di configurazione di ogni provider supportato.
Sessioni e approvazioni
cynative apre una sessione interattiva (modifica completa della riga e cronologia con i tasti freccia); cynative "task" esegue l'attività e poi rimane interattivo; -p / --print esegue una singola attività in modalità non interattiva ed esce - per script e pipe (ad es. cat main.tf | cynative -p "review this Terraform for misconfigurations").
Cynative interagisce con il tuo stack usando le credenziali già presenti nella tua shell - non conserva un archivio di credenziali separato. Fornisci sempre la credenziale di sola lettura con il minimo privilegio necessario.
Approvazioni: ogni chiamata di uno strumento attende una singola pressione di tasto: y la esegue una volta, a libera tutte le chiamate successive a quello strumento per la sessione (gli script vengono comunque stampati prima dell'esecuzione), qualsiasi altro tasto nega. Senza un terminale di controllo, usa --auto-approve.
Arresto a metà attività: mentre un'attività è in esecuzione, premi Esc o Ctrl-C una volta per arrestarla in modo pulito (l'agente termina l'eventuale chiamata già in esecuzione, poi si ferma e stampa ⏸ Stopped). Quando l'agente incontra errori o rifiuti ripetuti degli strumenti, si ferma automaticamente, riepiloga ciò che lo blocca e chiede le informazioni mancanti.
Completamento Bash: consulta cynative completion <shell> --help per le note complete di installazione per ogni shell.
Cynative stampa un breve piè di pagina operativo (tempi, utilizzo dei token) su stderr - reindirizzare stdout (cynative -p "..." > out.txt) mantiene pulita la risposta catturata. --version stampa versione, commit, data di build, versione di Go e piattaforma.
cynative doctor valida la configurazione e la prontezza dei connettori senza avviare una sessione di ricerca. Passa --live-llm per testare anche il modello configurato con un round-trip senza strumenti.
Controlli di risorse & costi per esecuzioni non presidiate
Controlli di risorse e costi: per esecuzioni non presidiate, programmate o con orizzonte temporale lungo - collegate a cron, CI o qualsiasi trigger - vincola esplicitamente il lavoro. Le leve principali (chiavi di configurazione / variabili d'ambiente):
| Chiave di configurazione / variabile d'ambiente | Default | Effetto |
|---|---|---|
max_total_tokensCYNATIVE_MAX_TOTAL_TOKENS | 0 (illimitato) | Limite massimo di token per sessione, condiviso tra il loop principale, i sub-agent delle attività, il verificatore sempre attivo e i follow-up interattivi. |
max_iterationsCYNATIVE_MAX_ITERATIONS | 32 | Numero massimo di iterazioni di chiamata strumenti del loop principale per turno. |
max_subagent_iterationsCYNATIVE_MAX_SUBAGENT_ITERATIONS | 10 | Numero massimo di iterazioni all'interno di un sub-agent di attività. |
max_consecutive_failuresCYNATIVE_MAX_CONSECUTIVE_FAILURES | 5 | Chiamate strumenti consecutive senza progressi prima di un arresto con riepilogo (0 disabilita). |
sandbox_max_concurrencyCYNATIVE_SANDBOX_MAX_CONCURRENCY | 16 | Numero massimo di chiamate strumenti concorrenti nella sandbox. |
La verifica dei finding (strumento verify_findings) comporta chiamate extra al modello - mettile in conto in ogni esecuzione che produca finding.
Connettori
Oltre alle credenziali presenti nella tua shell, Cynative applica la sola lettura su tre livelli:
- Rete - ogni host richiesto è ancorato al relativo servizio e alla relativa regione mappati e l'IP risolto viene verificato prima della connessione - il tuo agente può raggiungere la tua infrastruttura e nient'altro.
- Gate delle azioni - ogni operazione viene risolta nelle azioni IAM richieste,
derivate dalle definizioni API dei provider stessi, poi autorizzata da una
policy di sola lettura prima che qualsiasi credenziale venga associata:
SecurityAudit(AWS),roles/viewer(GCP),Reader(Azure). La copertura segue le API cloud mentre crescono e il gate va in fail-closed su tutto ciò che classifica come scrittura. Per Kubernetes la policy è il ruolo RBACviewlive del cluster stesso, recuperato a runtime e applicato per ogni richiesta. GitHub e GitLab sono in sola lettura per impostazione predefinita; un'impostazioneconnectors.{github,gitlab}.permissionspuò consentire la scrittura su categorie specifiche dove un workflow ne ha bisogno, applicata per ogni richiesta prima che il token venga associato. Anche in modalità sola lettura, gli endpoint di secret-scanning di GitHub restano bloccati e l'API GraphQL di GitLab viene negata. - Credenziali (AWS) - per le identità con ruolo assunto, le credenziali vengono ri-emesse
tramite STS
AssumeRole, limitate a una policy gestita (SecurityAuditper impostazione predefinita), quindi anche AWS IAM applica il confine. Le identità IAM-user e root vengono eseguite con le loro credenziali di base, filtrate dal gate delle azioni di cui sopra.
Cynative si collega ad AWS, GCP, Azure, EKS/GKE/AKS, Kubernetes auto-gestito, GitHub e GitLab. Vedi docs/connectors/README.md per la scoperta delle credenziali, l'hardening, i limiti e gli esempi specifici per connettore.
Esecuzione del codice e orchestrazione degli strumenti
Per lavori in blocco - "controlla ogni bucket S3 pubblico", "elenca i cluster EKS in ogni
regione" - Cynative può scrivere ed eseguire JavaScript in una sandbox invece di emettere
una chiamata di strumento alla volta. Gli strumenti dell'agente (ad es. http_request) sono esposti come
funzioni JavaScript async, così l'agente itera, filtra e concatena le chiamate in
codice - ed esegue le chiamate indipendenti in modo concorrente con l'helper integrato
mapConcurrent(items, fn, limit) (o await Promise.all([...]) per
piccoli insiemi fissi).
Solo ciò che lo script stampa con console.log viene restituito al modello, mantenendo la ricerca
rapida ed efficiente in termini di token.```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));
- **Asincrono e concorrente**: le funzioni degli strumenti restituiscono Promise - usa `await` su di esse, distribuisci
su molte risorse con `mapConcurrent(items, fn, limit)` (con
limite, che preserva l'ordine), oppure usa `await Promise.all([...])` per piccoli set fissi.
- **Risposte strutturate**: `http_request` restituisce `{ status, statusText,
headers, body }`; `body` è la stringa grezza - `JSON.parse(resp.body)` per le
API JSON o leggila direttamente per XML.
- **In sandbox**: uno script può chiamare solo gli strumenti che Cynative espone - non ha
un proprio accesso alla rete o all'host.
- **Vedi l'intero script**: ogni chiamata `code_execution` è mostrata per intero per
l'approvazione prima di essere eseguita (saltala con `--auto-approve`; mostra in streaming ogni chiamata interna
con `-v`).
- **Con stato all'interno della sessione**: i valori salvati su `globalThis` persistono tra le
chiamate durante una sessione interattiva; le dichiarazioni `let`/`const`/`var`/
`function` a livello top-level sono limitate a una singola chiamata.
- **Con limiti**: gli script vengono eseguiti con un timeout (default 120s) e una
dimensione massima dell'output.
## Log di audit
Ogni chiamata agli strumenti viene registrata in un log di audit JSONL persistente (`~/.cynative/audit.log`, attivo di default). Il log è fail-closed: se una chiamata non può essere registrata, l'esecuzione si interrompe. Ogni voce di un'esecuzione dell'agente registra anche il nome dell'agente, la sorgente e il digest del file, così un risultato può essere ricondotto al prompt esatto che lo ha prodotto.
I risultati degli strumenti vengono oscurati prima di essere scritti, ma gli argomenti del prompt di approvazione sono salvati verbatim - il log può contenere valori sensibili. È leggibile solo dall'utente che ha eseguito Cynative. Rotazione e conservazione sono configurabili.
Configuralo sotto `audit:` in `~/.cynative/config.yaml`, oppure tramite env:
| Chiave | Env | Default |
|---|---|---|
| `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` |
## Domande e feedback
[Discussions](https://github.com/cynative/cynative/discussions) è il posto migliore per condividere il tuo feedback - a cosa l'hai puntato, cosa ha restituito e cosa manca. Le stelle aiutano le persone a trovare il progetto.
## Contributi
Contributi benvenuti - nuovi agenti, connettori, dataset di valutazione e
miglioramenti a tutto campo. Vedi [CONTRIBUTING.md](https://github.com/cynative/cynative/blob/HEAD/CONTRIBUTING.md) per il
setup di sviluppo, il gate `make check` e le convenzioni per le PR, e [SECURITY.md](https://github.com/cynative/cynative/blob/HEAD/SECURITY.md)
per segnalare vulnerabilità.
## Licenza
Licenza Apache-2.0. Vedi [LICENSE](https://github.com/cynative/cynative/blob/HEAD/LICENSE) per il testo completo.