
ironcurtain memory-mcp-server/v0.2.1
Un runtime sicuro* per agenti AI autonomi. Policy da costituzioni in inglese semplice. (*https://ironcurtain.dev)
IronCurtain
Un runtime sicuro* per agenti AI autonomi, in cui la politica di sicurezza deriva da una costituzione leggibile dall'uomo.
*Quando qualcuno scrive "sicuro", dovresti essere immediatamente scettico. Cosa intendiamo per sicuro?
[!WARNING] Prototipo di ricerca. IronCurtain è un progetto di ricerca in fase iniziale che esplora come rendere gli agenti AI abbastanza sicuri da essere realmente utili. Le API, i formati di configurazione e l'architettura possono cambiare. Contributi e feedback sono benvenuti.
Demo
All'agente viene chiesto di clonare un repository e fare push delle modifiche. Sia git_clone che git_push vengono escalati dal motore delle policy, ma l'auto-approver li approva automaticamente — l'input attendibile dell'utente dalla modalità comando (Ctrl-A) ha fornito un intento chiaro, quindi non è stato necessario alcun /approve manuale.
Il Problema
Gli agenti AI autonomi possono gestire file, eseguire comandi git, inviare messaggi e interagire con le API per tuo conto. Ma i framework di agenti odierni concedono all'agente gli stessi privilegi dell'utente, come l'accesso completo al filesystem, alle credenziali e alla rete. I ricercatori di sicurezza chiamano questo autorità ambientale, e significa che una singola prompt injection o una deriva multi-turno può causare la cancellazione di file, l'esfiltrazione di dati o il push di codice malevolo da parte di un agente.
La risposta comune è limitare gli agenti a una sandbox ristretta (limitandone l'utilità) oppure chiedere all'utente di approvare ogni azione (limitandone l'autonomia). Nessuna delle due è soddisfacente.
L'Approccio
IronCurtain segue un percorso diverso: esprimi la tua intenzione di sicurezza in linguaggio naturale, poi lascia che il sistema capisca come applicarla.
Scrivi una costituzione, ovvero un breve documento che descrive cosa il tuo agente è e non è autorizzato a fare. IronCurtain compila questo documento in una politica di sicurezza deterministica utilizzando una pipeline LLM, convalida le regole compilate rispetto a scenari di test generati, e poi applica la politica a runtime su ogni chiamata di strumento. Il risultato è un agente che può lavorare in autonomia entro i confini che definisci in linguaggio naturale.
Le idee chiave:
- L'agente non è attendibile. IronCurtain presuppone che l'LLM possa essere compromesso da prompt injection o deriva. La sicurezza non dipende dal fatto che il modello "si comporti bene".
- Inglese in input, applicazione in output. Scrivi l'intento ("nessuna operazione git distruttiva senza approvazione"); il sistema lo compila in regole deterministiche che vengono applicate senza ulteriore coinvolgimento dell'LLM a runtime.
- Interposizione semantica. Invece di dare all'agente accesso diretto al sistema, tutte le interazioni passano attraverso server MCP (filesystem, git, ecc.). Ogni chiamata di strumento passa attraverso un motore di policy che può consentire, negare o escalare all'utente per approvazione.
- Difesa in profondità. Il codice dell'agente viene eseguito in un isolato V8 senza accesso diretto all'host. L'unica via d'uscita è attraverso chiamate di strumenti MCP semanticamente significative, e ognuna viene verificata rispetto alla policy.
Architettura
IronCurtain supporta due modalità di sessione con modelli di fiducia diversi:
-
Builtin Agent (Code Mode) — L'agente LLM di IronCurtain scrive frammenti TypeScript che vengono eseguiti in una sandbox V8. IronCurtain controlla l'agente, la sandbox e il motore di policy. Ogni chiamata di strumento esce dalla sandbox come richiesta MCP strutturata, passa attraverso il motore di policy (consenti / nega / escala), e solo allora raggiunge il vero server MCP.
-
Docker Agent Mode — Un agente esterno (Claude Code, Goose, Codex) viene eseguito all'interno di un container senza accesso diretto alla rete pubblica. IronCurtain media gli effetti esterni: le chiamate API LLM passano attraverso un proxy MITM che termina TLS (allowlist host, scambio chiave fittizia-reale), le chiamate di strumenti MCP passano attraverso lo stesso motore di policy, e le installazioni di pacchetti supportate passano attraverso proxy di pacchetti con validazione.
Il Docker annidato opt-in offre alle sessioni di sviluppo un daemon privato ed effimero senza esporre il socket Docker dell'host. I profili implementati coprono Apple Container e Docker Desktop su macOS, e WSL2 con Docker Desktop su amd64. Le sue modalità offline, images e packages separano l'uso di immagini locali, i pull mediati di immagini pubbliche e le build di pacchetti supportate. Il Linux Engine nativo non è ammesso per l'annidamento; consulta il riferimento di configurazione per prerequisiti e limitazioni.
In entrambe le modalità, l'agente è non attendibile. La sicurezza non dipende dal fatto che il modello segua le istruzioni — viene applicata al confine.
Consulta SANDBOXING.md per l'architettura completa con diagrammi, analisi della fiducia strato per strato e note sulla piattaforma macOS.
Avvio Rapido
Prerequisiti
- Node.js 24 o 26 — le linee major pari testate da IronCurtain. Entrambe installano binari
isolated-vmprecompilati. Node 25 non è supportato né testato. - Docker — non richiesto ma fortemente raccomandato per la Docker Agent Mode, che fornisce l'isolamento più forte. Su macOS 26+ (Apple silicon), Apple
containerfunziona come backend alternativo (VM per container; usato automaticamente quando i suoi servizi sono in esecuzione — vedicontainerRuntimeinironcurtain config) - Una chiave API per almeno un provider LLM (Anthropic, Google o OpenAI)
Installazione
Come strumento CLI globale (utenti finali):
npm install -g @provos/ironcurtain
Dal sorgente (sviluppo):
git clone https://github.com/provos/ironcurtain.git
cd ironcurtain
npm install
Configurazione iniziale
1. Imposta la tua chiave API:
export ANTHROPIC_API_KEY=sk-ant-...
Puoi anche inserire le chiavi in un file .env nella radice del progetto (caricato automaticamente tramite dotenv), oppure aggiungerle a ~/.ironcurtain/config.json tramite ironcurtain config. Le variabili d'ambiente hanno la precedenza sui valori del file di configurazione. Supportate: ANTHROPIC_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, OPENAI_API_KEY.
2. Esegui la procedura guidata di primo avvio (eseguila esplicitamente prima di utilizzare il percorso mux consigliato; viene eseguita automaticamente anche al primo ironcurtain start non-mux):
ironcurtain setup
Ti guida attraverso la configurazione del token GitHub, il provider di ricerca web, la selezione del modello e altre impostazioni. Crea ~/.ironcurtain/config.json con le tue scelte.