Torna agli aggiornamenti
New releaseJul 29, 2026

cynative v1.8.0

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.

Condividi

cynative

Crea i tuoi agenti di sicurezza

Framework open-source per agenti di sicurezza con accesso live e in sola lettura alla tua infrastruttura.

CI Release License: Apache-2.0 OpenSSF Best Practices

Avvio rapido · Il tuo primo agente · Documentazione

Chiedi qualsiasi cosa alla tua infrastruttura. Cynative esegue modelli all'avanguardia sul tuo codice, cloud e runtime - ragionando attraverso 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?"

Scrive ed esegue codice in una sandbox effimera, interrogando le tue API in parallelo, così una singola domanda si propaga attraverso l'intero stack. Ogni risultato viene incrociato e ricondotto alla sua origine.

A differenza degli agenti di codifica e dei server MCP, è **read-only by construction**: ogni chiamata è controllata e autorizzata *prima* che venga allegata una credenziale - puntalo alla produzione con fiducia.
<!-- END agent-about -->

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/9087/1b3db179a03479f5951d624c8adbb4890465aa86d038d3312dc9aec9801bcfb9.gif"
       alt="cynative che esegue un audit di escalation dei privilegi da CI al cloud"
       width="900">
</p>

## Cosa ottengono i tuoi agenti

- **Code-to-runtime**: Ragiona attraverso AWS, GCP, Azure, qualsiasi K8s, GitHub e GitLab
- **Sandbox**: Genera ed esegue codice per ricerche su larga scala, senza accesso di rete o host proprio
- **Action-gate**: Risolve ogni chiamata nelle azioni IAM richieste e applica una policy di sola lettura prima che venga allegata una credenziale
- **Evidence-backed**: Incrocia i dati per verificare ogni risultato
- **Sovereign**: Un singolo 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=...

Raccoglie le credenziali già presenti nella tua shell. Chiedile 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 è il nome. 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, quindi lo stesso file viene eseguito in modo interattivo mentre lo sviluppi e in modo non interattivo una volta stabilizzato.

Gli agent vengono letti da `~/.cynative/agents/` e dal set integrato nel binario; un file utente ha la precedenza su uno integrato con lo stesso nome. `cynative agents list` mostra ogni agent con la sua origine e contrassegna le copie oscurate, mentre `cynative agents show <name>` stampa il file esatto che verrebbe eseguito.

## Un coding agent con MCP non può fare questo?

| | Coding agent + MCP | Cynative |
|---|---|---|
| Throughput | Un'azione per chiamata | Scrive codice in sandbox che distribuisce chiamate in concorrenza - meno token, risposte più veloci |
| Risultati | Output non verificato | Il verificatore incrocia ogni risultato con prove dal vivo |
| Sola lettura | Filtro di lettura opt-in | Attivo per impostazione predefinita, fail-closed - le azioni IAM richieste vengono controllate rispetto a una policy di security audit. `secretsmanager:GetSecretValue` è un'operazione IAM *Read*: un filtro la consente, `SecurityAudit` la blocca |
| Credenziali | Ambientali, invariate | Sessione STS limitata alla sola lettura - AWS applica il confine anche lato suo |
| Raggio d'impatto | La tua shell, qualsiasi rete | Il codice di ricerca viene eseguito in una sandbox senza accesso all'host, con rete limitata ai tuoi servizi mappati |
| Segreti | Inviati al modello così come sono | Oscurati dall'output degli strumenti prima di essere 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 | Log JSONL fail-closed di ogni chiamata agli strumenti - se non può registrare, si interrompe |

Un binario, il tuo endpoint del modello, il tuo account. Eseguilo su un'istanza nel cloud che audita, 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 checksums.txt della release, con chiusura in caso di errore):```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 delle versioni e download manuale

Aggiornamento / disinstallazione

MetodoAggiornamentoDisinstallazione
Homebrewbrew upgrade cynativebrew uninstall cynative
Script di installazioneriesegui il comando one-linercurl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh -s -- --uninstall
Scoopscoop update cynativescoop uninstall cynative

Windows (script PowerShell): irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1 | iex; disinstalla 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 verifica l'attestazione della release GitHub quando gh è installato (avviso per impostazione predefinita); 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 che da 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 fai doppio clic). Questi sono firmati, notarizzati e pinzati - nessun prompt Gatekeeper al primo avvio. Gli archivi grezzi cynative_Darwin_*.tar.gz restano disponibili per script/CI; il primo avvio GUI di un binario in quarantena da tarball 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. Singolo binario statico, nessuna dipendenza.

Verifica una firma di release (opzionale). Le nuove release includono checksums.txt.sigstore.json, un bundle Sigstore che firma checksums.txt con un certificato senza chiave legato 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 installer .pkg sono firmati con Developer ID, notarizzati e timbrati, 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 tramite 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 a quale release appartenga 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 pronti all'uso (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.json

OpenAI

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 (editing completo di riga e cronologia con i tasti freccia); cynative "task" esegue l'attività e poi resta interattivo; -p / --print esegue una singola attività in modalità non interattiva ed esce - per script e pipe (es. cat main.tf | cynative -p "review this Terraform for misconfigurations"). Il codice di uscita trasporta il verdetto per gli script: 0 quando è stato prodotto un report, 2 quando l'esecuzione è terminata senza una risposta (l'avviso indica il motivo - budget di iterazioni o token, risposta del modello vuota o filtrata), 130 su interruzione, 143 su SIGTERM e 1 per qualsiasi altro errore.

Cynative chiama il tuo stack usando le credenziali già presenti nella tua shell - non mantiene un archivio di credenziali separato. Fornisci sempre la credenziale di sola lettura con privilegi minimi necessaria.

Approvazioni: ogni chiamata di strumento attende una singola pressione di tasto: y la esegue una volta, a autorizza ogni chiamata successiva a quello strumento per la sessione (gli script stampano comunque prima di eseguire), qualsiasi altro tasto nega. Senza terminale di controllo, usa --auto-approve.

Interruzione a metà attività: mentre un'attività è in esecuzione, premi Esc o Ctrl-C una volta per fermarla in modo pulito (l'agente completa qualsiasi chiamata già in esecuzione, poi si ferma e stampa ⏸ Stopped). Quando l'agente incontra errori o rifiuti ripetuti degli strumenti, si ferma automaticamente, riassume su cosa è bloccato e chiede le informazioni mancanti.

Completamento Bash: Vedi cynative completion <shell> --help per le note complete di installazione per ogni shell.

Cynative stampa un breve piè di pagina operativo (tempi, utilizzo token) su stderr - reindirizzando stdout (cynative -p "..." > out.txt) mantiene pulita la risposta catturata. --version stampa versione, commit, data di build, versione 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 e costi per esecuzioni non presidiate

Controlli di risorse e costi: per esecuzioni non presidiate, pianificate o a lungo orizzonte - integrate in cron, CI o qualsiasi trigger - vincola esplicitamente il lavoro. Le leve principali (chiavi di configurazione / variabili d'ambiente):

Chiave di configurazione / var. d'ambienteDefaultEffetto
max_total_tokens
CYNATIVE_MAX_TOTAL_TOKENS
0 (illimitato)Tetto di token per sessione, condiviso tra il ciclo principale, i sotto-agenti delle attività, il verificatore sempre attivo e i follow-up interattivi.
max_iterations
CYNATIVE_MAX_ITERATIONS
32Numero massimo di iterazioni di chiamate di strumenti del ciclo principale per turno.
max_subagent_iterations
CYNATIVE_MAX_SUBAGENT_ITERATIONS
10Numero massimo di iterazioni all'interno di un sotto-agente di attività.
max_consecutive_failures
CYNATIVE_MAX_CONSECUTIVE_FAILURES
5Chiamate di strumenti consecutive senza progressi prima di un arresto-con-riepilogo (0 disabilita).
sandbox_max_concurrency
CYNATIVE_SANDBOX_MAX_CONCURRENCY
16Numero massimo di chiamate di strumenti concorrenti nella sandbox.

La verifica dei risultati (strumento verify_findings) comporta chiamate aggiuntive al modello - pianificale su qualsiasi esecuzione che produca risultati.

Connettori

Oltre alle credenziali nella tua shell, Cynative impone la sola lettura su tre livelli:

  • Rete - ogni host di richiesta è vincolato al suo servizio e alla sua 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 sue azioni IAM richieste, derivate dalle definizioni API dei provider stessi, poi autorizzata da una policy di sola lettura prima che qualsiasi credenziale venga allegata: SecurityAudit (AWS), roles/viewer (GCP), Reader (Azure). La copertura segue le API cloud man mano che crescono, e il gate fallisce in modalità chiusa su qualsiasi cosa classifichi come scrittura. Per Kubernetes la policy è il ruolo RBAC view live del cluster stesso, recuperato a runtime e applicato per richiesta. GitHub e GitLab sono in sola lettura per impostazione predefinita; un'impostazione connectors.{github,gitlab}.permissions può consentire la scrittura su categorie specifiche dove un flusso di lavoro lo richiede, applicata per richiesta prima che il token venga allegato. Anche in modalità sola lettura, gli endpoint di scansione dei segreti di GitHub restano bloccati e l'API GraphQL di GitLab è negata.
  • Credenziali (AWS) - per le identità con ruolo assunto, le credenziali vengono ri-emesse tramite STS AssumeRole, limitate a una policy gestita (SecurityAudit per impostazione predefinita), così anche AWS IAM impone il confine. Le identità utente IAM e root vengono eseguite con le loro credenziali di base, controllate dal gate delle azioni sopra.

Cynative si connette ad AWS, GCP, Azure, EKS/GKE/AKS, Kubernetes auto-gestito, GitHub e GitLab. Vedi docs/connectors/README.md per la scoperta delle credenziali, l'indurimento, le limitazioni 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 (es. http_request) sono esposti come funzioni JavaScript async, così può iterare, filtrare e concatenare chiamate nel codice - ed eseguire 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 registra con console.log viene restituito al modello, mantenendo la ricerca veloce 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));

- **Async e concorrente**: le funzioni degli strumenti restituiscono Promise - usa `await` su di esse, distribuisci il lavoro
  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` risolve in `{ status, statusText,
  headers, body }`; `body` è la stringa grezza - usa `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
  accesso di rete o all'host di per sé.
- **Vedi l'intero script**: ogni chiamata `code_execution` è mostrata per intero per
  l'approvazione prima di essere eseguita (salta con `--auto-approve`; trasmetti ogni chiamata interna
  con `-v`).
- **Con stato all'interno di una sessione**: i valori salvati su `globalThis` persistono tra
  le chiamate durante una sessione interattiva, purché la chiamata venga eseguita fino al completamento
  (una che va in timeout o viene lasciata sospesa li azzera); `let`/`const`/`var`/`function`
  a livello top-level sono limitati a una singola chiamata.
- **Limitato**: gli script vengono eseguiti con un timeout (default 120s) e una dimensione massima
  dell'output.

## Registro di controllo

Ogni chiamata agli strumenti viene registrata in un registro di controllo JSONL persistente (`~/.cynative/audit.log`, attivo di default). Il registro è fail-closed: se una chiamata non può essere registrata, l'esecuzione viene interrotta. Ogni voce di un'esecuzione 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 vengono memorizzati verbatim - il registro può contenere valori sensibili. È leggibile solo dall'utente che ha eseguito Cynative. Rotazione e conservazione sono configurabili.

Configurabile sotto `audit:` in `~/.cynative/config.yaml`, o tramite variabili d'ambiente:

| 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 - cosa gli hai indicato, cosa è tornato, e cosa manca. Le stelle aiutano le persone a trovare il progetto.

## Contribuire

I contributi sono benvenuti - nuovi agenti, connettori, dataset di valutazione e
miglioramenti in generale. Vedi [CONTRIBUTING.md](https://github.com/cynative/cynative/blob/main/CONTRIBUTING.md) per la configurazione
di sviluppo, il gate `make check` e le convenzioni per le PR, e [SECURITY.md](https://github.com/cynative/cynative/blob/main/SECURITY.md)
per segnalare vulnerabilità.

## Licenza

Licenza Apache-2.0. Vedi [LICENSE](https://github.com/cynative/cynative/blob/main/LICENSE) per il testo completo.

Categorie