Strumento a riga di comando e app per macOS
paratia
paratia mantiene cifrate le cartelle che scegli, così che un agente di programmazione non possa leggerle mentre sono bloccate. Tiene anche un registro di chi apre o modifica i file che tieni sotto controllo.
Un agente di programmazione è un programma di IA che modifica file ed esegue comandi sul tuo computer.
Funziona su macOS. Licenza GPL-3.0.
Il problema, in due parti
Un agente di programmazione funziona con i tuoi permessi, quindi può leggere tutti i file che il tuo account può leggere.
Prima parte
Un file che l'agente non può leggere
Di solito la risposta è scrivere la regola: una riga in un file di configurazione, un percorso in una lista di blocco (una lista di percorsi che l'agente non può toccare) o una frase in una skill (un insieme di istruzioni che l'agente carica per un tipo di compito). Tutte e tre stanno dove stanno le istruzioni dell'agente, quindi un modello che le legge male le aggira tutte e tre. Anche una pagina web può contenere un'istruzione, e l'agente può aprire quella pagina nel mezzo di un compito.
Una lista di blocco copre solo le varianti di scrittura che qualcuno ha previsto. Il percorso /Volumes/vault/token può essere nella lista. Il comando cat "$(printf '/Volumes/va''ult/token')" legge lo stesso file, e la lista non lo riconosce. Le varianti di scrittura non finiscono mai, quindi ogni lista è incompleta.
Seconda parte
Capacità che si combinano
Due agenti di fornitori diversi seguono ciascuno la propria politica, e nessuno applica una politica sull'insieme dei due. Un agente sottoposto a una restrizione può chiedere a un secondo agente, che non è mai stato soggetto a quella regola, di fare ciò che il primo non può fare. Insieme possono fare ciò che nessuno dei due può fare da solo.
Un preprint su arXiv (2607.07097) (in inglese) misura questo effetto. Riporta che la quota di scenari dannosi eseguiti sale dall'8,9% al 38,9%. Trova che Gemini è il modello più sicuro con richieste dirette, e il più amplificato sotto un pianificatore Claude.
Che cosa fa paratia per ciascuna parte
La prima parte richiede file che l'agente non può leggere, e un controllo sulle azioni che l'agente chiede di compiere, che non dipenda da ciò che l'agente dice. La seconda parte richiede una regola su ciò che un agente può chiedere a un altro.
Prima parte: un file che l'agente non può leggere
Cartelle protette
Una cartella protetta è un'immagine disco cifrata, un file che macOS monta come volume quando lo apri. L'algoritmo è AES-256, un metodo di cifratura standard, e ogni cartella ha la propria frase d'accesso. Mentre una cartella è bloccata, i suoi file sono testo cifrato: byte illeggibili che si leggono solo con la frase d'accesso. Vale per ogni processo, a qualunque livello di privilegio, compreso root, l'account amministratore del sistema.
La frase d'accesso esiste solo nella tua testa. La configurazione la chiede due volte e non la scrive da nessuna parte, quindi non c'è nulla che un agente possa trovare. Se la perdi, il contenuto è perduto.
Una cartella aperta è un volume normale, leggibile dai tuoi processi. Un timer la chiude dopo un ritardo che scegli tu, da 1 a 1440 minuti. Se la cartella è occupata, il timer riprova e non forza mai la chiusura. Forzare la chiusura è un'azione separata, con un passaggio di conferma, perché può far perdere modifiche non salvate.
Spostare una cartella esistente
Puoi proteggere una cartella che esiste già, scegliendo solo quella cartella. La sua immagine cifrata viene salvata in automatico sullo stesso disco, in una posizione nascosta, quindi non serve un disco esterno. Il contenuto passa nell'immagine e paratia lo verifica. Poi chiude e riapre l'immagine per controllare di nuovo la copia, e solo dopo una seconda chiusura confermata elimina i file in chiaro. La cartella resta dov'è: chiusa è vuota, e aperta con la frase d'accesso mostra di nuovo i file. Togli la protezione rimette i file nella cartella come file normali, dopo averli verificati, e poi elimina l'immagine cifrata.
L'origine deve restare ferma durante lo spostamento, quindi chiudi prima i documenti e le app che possono modificarla. Se lo spostamento si interrompe, l'app mantiene visibili i passaggi di ripristino.
Barriera
La barriera è un hook PreToolUse, un controllo che il programma dell'agente esegue prima di ogni chiamata a uno strumento (un'azione che l'agente chiede di compiere, come eseguire un comando). Mentre una cartella cifrata è aperta, la barriera nega le chiamate agli strumenti delle sessioni che la eseguono. Pone al kernel, la parte di macOS che gestisce l'hardware, una sola domanda: il volume è montato? Non guarda mai un percorso, quindi non c'è nessuna grafia da aggirare.
La barriera ha alcune eccezioni: i comandi che chiudono o ispezionano le cartelle. Contano solo quando eseguono la copia del programma protetta da root. La regola è semplice di proposito. Verifica un solo fatto, se il volume è montato, e quel fatto non dipende da come è scritto un comando.
Intermediario
L'intermediario esegue un comando fisso con un segreto inserito da paratia. I comandi che può eseguire, detti verbi (comandi con nome), sono dichiarati dentro la cartella cifrata, dove l'agente non può né leggerli né modificarli. L'agente indica un verbo e legge l'output. Non possiede mai il segreto e non sceglie mai il comando.
Seconda parte: capacità che si combinano
Delega
Quando un agente chiede aiuto a un altro, l'hook legge la trascrizione della sessione, il registro che scrive il programma dell'agente e che il modello non controlla. Se l'ultimo a parlare è un altro agente, l'hook toglie dalle possibilità, per quel turno, le azioni riservate alle persone. Sono l'uso del computer, il browser, il simulatore, lo stesso paratia, security (il comando macOS per i portachiavi), sudo (il comando per le azioni di amministratore) e osascript (il comando macOS che esegue AppleScript).
Ponte SSH
SSH è un accesso remoto sicuro. Il ponte collega due macchine che eseguono sessioni di agenti. Il suo accesso può eseguire un solo programma e nient'altro, quindi chi lo possiede non può aprire una shell, una porta, un agente o un terminale. Il ponte calcola l'origine di ogni messaggio dalla trascrizione, quindi chi chiama non può fornirla. Inoltre limita quante volte un messaggio può essere inoltrato, e tiene un registro in cui ogni voce contiene un'impronta (un hash) di quella precedente, così una modifica si vede.
Registro di chi ha toccato che cosa
Il registro degli accessi annota chi ha aperto e chi ha modificato i file nelle cartelle che tieni sotto controllo. Puoi tenere sotto controllo qualunque cartella di tua proprietà, cifrata o no.
Che cosa viene registrato
Ogni evento conserva il percorso, il processo e il suo utente, l'app responsabile quando può essere individuata, e l'ID del processo (PID). Indica anche se l'attore sembra un agente di programmazione, con le prove su cui si basa questa ipotesi. Il registro conserva solo metadati. Non conserva contenuti di file, trascrizioni, argomenti dei comandi né variabili d'ambiente.
Aprire un percorso mostra chi lo ha consultato. Scrivere, creare, rinominare, eliminare (unlink) e troncare mostrano chi lo ha modificato. Puoi filtrare per cartella, file, processo, agente e ora, ed esportare il risultato in CSV, un formato di tabella in testo semplice.
Il nome dell'agente viene dall'eseguibile del programma e dalla sua firma. Nessuna prova autenticata dell'identità del fornitore lo sostiene.
Due fonti, tenute separate
Le operazioni della stessa app, come aprire o chiudere una cartella protetta, costituiscono una fonte. Gli eventi del kernel costituiscono l'altra. Provengono da eslogger, uno strumento a riga di comando di Apple che legge Endpoint Security, il framework di macOS che segnala gli eventi di file e processi agli strumenti di sicurezza. Apple non presenta eslogger come un'interfaccia stabile.
Ogni fonte è una catena: ogni voce porta un'impronta (un hash) della precedente, quindi una modifica dentro la catena fa fallire la verifica. I registri dell'app appartengono al tuo account, quindi un programma che gira come te può riscriverli. Il registro del kernel è un file di proprietà di root, e il tuo account ha solo accesso in lettura. Il troncamento in coda non viene rilevato senza un punto di controllo esterno.
Le rotte che scrive paranco si possono leggere con paratia registro rotte-paranco, che propone le cartelle da tenere sotto controllo.
paratia e paranco
paratia e paranco sono due programmi piccoli dello stesso autore. Girano sullo stesso Mac e non si chiamano a vicenda. Il solo legame tra loro è un file.
paratia
Tiene i dati lontani dagli agenti
Cartelle cifrate che nessun agente legge mentre sono chiuse. Un registro di chi tocca che cosa. Un controllo che blocca gli agenti mentre una cartella è aperta. Verifica anche che un agente non chieda a un altro ciò che non può fare. Questo controllo vale solo dal lato di Claude (vedi Limiti).
paranco
Apre una porta controllata
paranco ha l'Accesso completo al disco, il permesso di macOS per i file protetti, così i programmi che leggono i file copiati non ne hanno bisogno. Copia i file in un solo senso, da una cartella che macOS protegge, come Memo Vocali, verso una cartella normale. Segue le rotte che imposti. Le sue sorgenti sono scritte nel programma, quindi una rotta non può aggiungerne una scrivendo un file.
Chi ha l'Accesso completo al disco
Ogni programma ha una propria voce nell'elenco di macOS, e ciascuno ha bisogno del proprio permesso.
| Programma | A che cosa serve l'Accesso completo al disco | Dopo una nuova compilazione |
paratia Paratia.app | Leggere gli eventi del kernel tramite il suo servizio di registro | Rimuovere la voce, aggiungerla di nuovo; reinstallare il servizio solo quando cambia il suo codice |
paranco Paranco.app | Leggere la cartella Memo Vocali | Rimuovere la voce, poi aggiungere di nuovo Paranco.app |
Sono due voci separate. Il permesso di paranco non rende superfluo quello di paratia.
Perché non un solo programma
- Hanno obiettivi opposti. Uno chiude l'accesso, l'altro apre una porta controllata.
- Ogni nuova compilazione ad hoc ha un nuovo hash del codice, e i suoi permessi di privacy vanno concessi di nuovo. Ricompilare l'uno non deve fermare l'altro.
- Hanno licenze diverse: GPL-3.0 per paratia e MIT per paranco.
L'unico file che condividono
paranco scrive routes.json. paratia può leggere quel file in sola lettura con paratia registro rotte-paranco. Il comando propone di tenere sotto controllo le cartelle in cui scrivono le rotte, così puoi vedere chi apre i file copiati. Senza paranco, il comando segnala che non ci sono rotte. Senza paratia, paranco non cambia.
paranco su GitHub
L'app per Mac
L'app richiede macOS 13 o successivo. Ha cinque sezioni, con i nomi che compaiono nell'app, e ciascuna è spiegata qui.
- Cartelle: le cartelle protette, il loro stato, i timer e gli spostamenti.
- Registro: il registro degli accessi, i suoi filtri e l'esportazione in CSV, e se la raccolta degli eventi del kernel è attiva.
- Etichette: decisioni su che cosa proteggere. Un'etichetta registra una decisione e non sposta nulla.
- Banco di prova: quattro fasi, prima, chiusa, aperta e richiusa, ciascuna con il risultato del controllo e le eventuali prove dal kernel.
- Impostazioni: aggiornamenti del servizio di registro, configurazione degli hook e permessi di privacy. Le password di amministratore restano nelle finestre di macOS.
Le schermate mostrano un'anteprima con dati di esempio artificiali, come indica l'avviso in alto in ciascuna. Non è stata eseguita nessuna operazione reale.
Installazione
- Strumento a riga di comando: macOS e Python 3.11 o successivo. Non usa pacchetti di terze parti.
- App per Mac: macOS 13 o successivo. La compili dal repository con i Command Line Tools di Apple (gli strumenti gratuiti per sviluppatori di Apple) e con rsvg-convert, uno strumento che converte immagini SVG. L'app è firmata ad hoc: porta una firma locale e nessuna identità di sviluppatore. Non è stata notarizzata, quindi il controllo automatico di Apple non è stato eseguito su di essa.
- Tieni l'app in
/Applications.
Il README (in inglese) contiene i comandi esatti per entrambe.
La barriera richiede l'hook di sessione, un controllo registrato nelle impostazioni dell'agente. Senza l'hook, una cartella cifrata continua a funzionare. La barriera non copre quella sessione.
L'app mostra le modifiche previste alle impostazioni degli hook di Claude Code e Codex prima di applicarle. Conserva copie di sicurezza dei file che modifica e mantiene le impostazioni già presenti. Gli hook di Codex vanno approvati a mano nel gestore degli hook dell'app Codex.
Gli eventi del kernel arrivano da un servizio di sistema. Lo installi eseguendo tu stesso un comando di preparazione nel Terminale, poi approvando una finestra di amministratore di macOS. L'app richiede anche l'Accesso completo al disco, un permesso di privacy di macOS. Dopo ogni nuova compilazione, rimuovi la voce dell'app e aggiungila di nuovo. Reinstalla il servizio solo quando cambia il suo codice. I passaggi sono nella guida alla GUI.
Passaggi di installazione nel README (in inglese)
Limiti
Il progetto documenta questi limiti. Leggili prima di fare affidamento su una garanzia.
- Mentre una cartella è bloccata, i suoi file sono testo cifrato. Mentre è aperta, è un volume normale, e un segreto che un agente ha letto mentre era aperta resta nel contesto del modello. Sostituisci tutto ciò che un agente ha visto.
- Mentre una cartella è aperta, la barriera nega le chiamate agli strumenti delle sessioni che la eseguono. Un agente non può lavorare in quelle sessioni finché non chiudi la cartella.
- Su un Mac con un solo account, la barriera lascia traccia delle modifiche. Non le impedisce. Un agente che gira come te può riscrivere i tuoi file di politica e le impostazioni dell'agente, compreso quale hook viene eseguito.
paratia seal e paratia attest segnalano queste modifiche a posteriori. Non le impediscono. La protezione che non dipende dalla collaborazione dell'agente è la cifratura mentre la cartella è bloccata.
- La barriera copre solo le sessioni che eseguono il suo hook. Altri programmi di agenti, come Cursor e Aider, applicano i propri hook oppure nessuno. Tutto questo è locale a una sola macchina: un agente con accesso alla rete e una credenziale API può raggiungere un modello senza nessuno di questi hook.
- La delega viene verificata solo dal lato di Claude. Una conversazione che inizia dal lato di Codex resta senza restrizioni finché Codex non esegue la sua parte del controllo.
- Il registro degli accessi non è una cronologia completa. Un evento di apertura non prova che un byte sia stato letto. La raccolta dal kernel non segnala ogni accesso né ogni tentativo fallito, le scritture fatte solo tramite memory mapping non vengono segnalate, e montaggi e smontaggi non compaiono nel registro del kernel. Non si garantisce la copertura di ogni accesso.
- Un'etichetta registra una decisione e da sola non protegge nulla. È un file JSON (un formato di dati in testo semplice) nella tua cartella personale, e l'account dell'agente può riscriverlo. La protezione viene dalla cifratura dei file.
- Rimuovere l'originale dopo uno spostamento non è una cancellazione sicura. Backup, snapshot APFS (stati salvati del disco che macOS conserva) e copie nel cloud fatte prima conservano le loro versioni, e i blocchi fisici di un SSD (disco a stato solido) non vengono cancellati.
- Alcune misure sono ancora aperte. A ottobre 2026 non è stata eseguita la prova dal vivo del banco di prova. L'uso della CPU a riposo e il ritardo degli eventi vanno misurati di nuovo dopo aver installato una nuova compilazione.
- Il piano di sorveglianza viene da un file che ogni programma in esecuzione come te può riscrivere. Ti aiuta a impostare la sorveglianza, e non è un confine di sicurezza.
Per approfondire
I documenti qui sotto sono in italiano.
Il nome
Una paratia stagna è una parete trasversale della nave, a tenuta d'acqua: impedisce che un compartimento allagato trascini con sé il resto dello scafo.