Torna agli aggiornamenti
New releaseAug 14, 2026

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.

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 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

MetodoAggiornamentoDisinstallazione
Homebrewbrew upgrade cynativebrew uninstall cynative
Script di installazioneriesegui il 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; 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.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 (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'ambienteDefaultEffetto
max_total_tokens
CYNATIVE_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_iterations
CYNATIVE_MAX_ITERATIONS
32Numero massimo di iterazioni di chiamata strumenti del loop principale per turno.
max_subagent_iterations
CYNATIVE_MAX_SUBAGENT_ITERATIONS
10Numero massimo di iterazioni all'interno di un sub-agent di attività.
max_consecutive_failures
CYNATIVE_MAX_CONSECUTIVE_FAILURES
5Chiamate strumenti consecutive senza progressi prima di un arresto con riepilogo (0 disabilita).
sandbox_max_concurrency
CYNATIVE_SANDBOX_MAX_CONCURRENCY
16Numero 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 RBAC view live del cluster stesso, recuperato a runtime e applicato per ogni 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 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 (SecurityAudit per 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.

Categorie