Salta ai contenuti

Cosa è protetto e cosa no

Latet riduce ciò che il tuo agente rivela al provider del modello. Non è una garanzia che niente di sensibile esca mai dal tuo computer. Questa pagina elenca cosa è coperto e cosa no.

Quando un rilevatore riconosce un valore, Latet lo sostituisce con un valore fittizio prima che la richiesta protetta raggiunga il provider del modello. Con un server, i dati originali possono prima raggiungere quel server. Questo copre:

  • In Claude Code (modalità client): i prompt che scrivi, il prompt di sistema, i file CLAUDE.md e l’altro contesto che Claude Code aggiunge, gli allegati, i prompt delle skill, le descrizioni degli strumenti e ogni risultato di uno strumento: contenuto dei file, output dei comandi, output degli hook. Un controllo finale legge poi i testi di ogni richiesta prima che venga inviata. Ciò che ha scritto il modello non ferma niente quando torna esattamente come il modello l’ha scritto, cosa che Latet sa dalle risposte che ha fatto passare e dalle chiamate agli strumenti che il plugin ha fatto ripristinare; ogni altro testo al posto del modello viene letto come tuo. Su un computer il daemon tiene tutto questo in memoria: dopo un riavvio, un testo che il modello ha scritto prima nella conversazione viene letto come tuo, e uno che contiene un valore che Latet maschera ferma la richiesta, quindi in quel caso inizia una nuova conversazione. Un server Latet lo conserva per ogni istanza, per un’ora dal suo ultimo uso.
  • In modalità gateway: il prompt di sistema o le istruzioni, e ogni messaggio della conversazione: il tuo testo, le risposte precedenti del modello, le chiamate agli strumenti e i loro risultati. Anche l’input degli embedding. Un controllo finale legge poi quei testi prima che la richiesta venga inviata, come in modalità client.

Risposte gateway, stream e argomenti degli strumenti vengono ripristinati dove gira Latet: sul computer per l’uso locale, sul server per un gateway connesso. Il plugin di Claude Code ripristina argomenti degli strumenti e testo interattivo sullo schermo del computer; stdout di claude -p contiene ancora valori fittizi. OCR/NER vengono eseguiti dove gira il motore Latet interessato; un revisore configurato può ricevere testo originale.

Le chiavi di un documento JSON, come l’output di uno strumento, vengono mascherate come i suoi valori: un indirizzo email, un numero di telefono, un segreto, un nome o uno dei tuoi termini scritto come chiave viene sostituito con il valore fittizio che ha ovunque, e una chiave in cui il modello scrive un valore fittizio viene ripristinata per l’agente. Una regola di campo e la modalità dati rigorosa trovano ancora un valore dalla sua chiave così com’era, e una chiave che dà soltanto il nome a un campo, come id o email, resta così com’è.

Con il revisore locale attivo, anche un modello linguistico sul tuo computer legge quei testi prima che escano, e maschera i nomi, i dati sulla salute e gli altri valori che nessun rilevatore trova, anche nelle chiavi di un documento JSON. Una chiave scritta come il nome di un campo, in lettere minuscole, cifre, _ e - (exit_code, ma anche mario_rossi), non gli viene mostrata: i rilevatori la leggono come leggono ogni chiave.

Latet legge ogni parte di una richiesta prima di inviarla, su un computer come su un server, e non invia niente di cui non abbia reso conto:

  • Il percorso deve corrispondere a una rotta che uno dei profili di richiesta di Latet conosce, e ogni sua parte deve avere la sua forma: l’id di un modello, una regione, una risorsa che hai elencato. Ogni altra chiamata viene rifiutata, anche una senza corpo.
  • I parametri di query sono nominati dal profilo, e ogni valore deve avere la sua forma. Uno che nessun profilo nomina viene rifiutato.
  • Le intestazioni. Una credenziale viene inviata com’è arrivata, mai scritta nei log né registrata. Ogni altra intestazione deve avere la forma che le dà il suo agente, o viene letta dal controllo finale quando può contenere testo libero (user-agent). Le intestazioni che aggiungono gli SDK e il tracing (x-stainless-*, traceparent…), e quelle degli agenti stessi che possono contenere testo libero (gli id di un subagente di Claude Code, i metadati del turno di Codex…), vengono tolte e contate nella dashboard: Le intestazioni che Latet toglie le elenca per agente. Ogni altra intestazione viene rifiutata, e il suo nome viene detto solo all’agente.
  • Il corpo. I suoi testi vengono mascherati, o verificati dove Latet si limita a verificare la richiesta. Ogni altro membro deve avere la sua forma (l’id di un modello, il nome di uno strumento, un’impostazione) e viene letto dal controllo finale dove contiene testo. Un membro che nessun profilo nomina viene rifiutato, e all’agente viene detto dove si trovava, mai il suo nome.

Nella dashboard, ogni scambio dice se ogni parte della sua richiesta è stata letta, o cosa ha lasciato passare una parte: solo controllato (un valore che il controllo finale ha letto senza doverlo mascherare), consentito da una regola (una delle regole integrate di Latet, come per i campi cifrati che il provider stesso restituisce), o un’eccezione che hai approvato. Un rifiuto dice all’agente che non è stato inviato niente. Quando un secondo tentativo viene rifiutato dopo che un primo ha raggiunto il provider (una richiesta a Bedrock firmata di nuovo dopo che il suo accesso AWS era scaduto), all’agente viene detto che non è stato inviato nessun altro tentativo e che il primo potrebbe essere arrivato, mai che non è stato inviato niente.

Due cose restano fuori: ciò che un agente invia senza l’indirizzo di Latet, che Latet non vede mai, e il revisore locale, che riceve i testi originali perché l’hai configurato tu.

Valori che i rilevatori non riconoscono. Latet maschera solo ciò che rileva. Un segreto in un formato insolito, diviso su più righe o codificato (per esempio in base64 sotto un nome qualunque) può passare. Nomi e indirizzi nel testo libero vengono trovati solo con il modello locale dei nomi facoltativo o con il revisore locale, entrambi senza garanzie; senza di loro vengono mascherati solo il nome del tuo autore git, i tuoi termini e i valori già nella cassaforte. Le date di nascita non vengono rilevate. Il rilevamento ha sempre dei falsi negativi.

Immagini. Con il riconoscimento del testo facoltativo, il testo di uno screenshot viene letto sul tuo computer e ogni valore trovato viene coperto con il suo valore fittizio. Non dà garanzie, come per i nomi: il testo che non legge esce così com’è. Senza il riconoscimento del testo, una richiesta che contiene un’immagine non viene inviata. In una richiesta che Latet si limita a verificare, come quelle di Claude Code, vengono rifiutate anche la posizione di una foto, le note del produttore di una fotocamera e un’immagine dentro l’immagine (Le foto e i loro metadati). I codici QR e i codici a barre non vengono decodificati: i dati che contengono escono con l’immagine.

PDF e altri documenti, immagini indicate dal loro indirizzo, clip audio. Il loro contenuto non viene letto, quindi una richiesta che ne contiene uno non viene inviata, su un computer come su un server, qualunque cosa dica images. Dai all’agente il testo, invece. Le pagine di un browser, lette come testo, vengono mascherate come qualsiasi output di uno strumento (dati di produzione); i suoi screenshot sono immagini.

Gli strumenti web, i subagenti e i connettori di claude.ai mantengono i valori fittizi (Claude Code). WebFetch, WebSearch, i subagenti e i connettori di claude.ai (Gmail, Calendar…) ricevono i valori fittizi che il modello ha scritto, non gli originali, perché i loro argomenti escono dal tuo computer o avviano un’altra conversazione con un modello. Una ricerca web di un nome mascherato cercherebbe qualcun altro, e un connettore a cui si chiede di scrivere a emily.carter@northwind-legal.com riceverebbe l’indirizzo fittizio, quindi una chiamata a uno strumento web o a un connettore che contiene un valore fittizio viene fermata prima di essere eseguita: il modello si rivolge a te, e Non sensibile nella dashboard lascia uscire il valore in chiaro. I risultati dei connettori di claude.ai tornano attraverso i server di Anthropic, dove gira il connettore: qualunque cosa contengano è già lì prima che Latet possa mascherarla.

Strumenti eseguiti dal provider (agenti in modalità gateway). Una ricerca web o un server MCP remoto che il provider esegue da sé, come può fare Codex, lavora su ciò che il modello ha scritto: il valore fittizio. Latet vede una chiamata del genere solo dopo che è stata eseguita, nella cronologia della richiesta successiva: la dashboard la segnala (Valore fittizio a uno strumento esterno), con Non sensibile per ogni valore, così la volta successiva il modello usa quello reale.

Ambienti che Latet non può vedere:

  • Chat e Cowork di Claude Desktop, con l’accesso a Claude;
  • le sessioni cloud, che girano sull’infrastruttura del provider invece che sul tuo computer;
  • Cursor, Windsurf e gli altri strumenti le cui richieste al modello partono dai server del produttore (l’elenco);
  • i suggerimenti inline di GitHub Copilot e le edit prediction di Zed, che arrivano dai servizi dei loro produttori;
  • OpenCode con accesso tramite ChatGPT (nella roadmap);
  • ciò che gli strumenti di un agente inviano quando vengono eseguiti, come un’API di ricerca sul web, un database o un vector store nel cloud: ricevono i valori reali (vedi Framework per agenti);
  • qualsiasi agente o ambiente che non hai configurato per usare Latet.

Con l’accesso a Claude, nella scheda Code di Claude Desktop il plugin maschera i contenuti, ma l’app ignora ANTHROPIC_BASE_URL: dietro il plugin non c’è il controllo del daemon, e nella dashboard non resta nessuna traccia. Su un gateway di terze parti, senza l’accesso a Claude, ogni richiesta di Chat, Cowork e Code passa da Latet: Latet le controlla una per una e ferma quella che porterebbe con sé un valore sensibile in chiaro, ma maschera solo nella scheda Code, con il plugin. Vedi Claude Code e Claude Desktop su un gateway.

Contesto e metadati. I nomi dei file, i percorsi, la struttura del codice, i commenti e la logica di business vengono inviati così come sono, a parte i valori che Latet vi rileva, come il tuo nome utente in un percorso della cartella home. I valori fittizi mantengono la forma dell’originale (lunghezza, formato, prefisso; un segreto di meno di dodici caratteri riceve un valore fittizio più lungo), e il testo intorno può rivelare che cos’è un valore (“la password del database di produzione”).

Ciò che un documento JSON contiene dove il mascheramento non arriva. Un numero di carta scritto come numero JSON, che il profilo balanced non maschera, viene trovato dal controllo finale, che allora ferma la richiesta: all’agente viene detto perché, e la dashboard mostra dov’è il valore. Finché un output del genere resta nella conversazione, ogni sua richiesta si ferma: inizia una nuova conversazione e chiedi all’agente i dati in un’altra forma. Il valore fittizio estratto per una chiave non è mai un’altra chiave del suo oggetto; una chiamata a uno strumento il cui input contiene come due chiavi un valore e il suo valore fittizio, che diventerebbero una sola una volta mascherate, ferma la richiesta, perché un oggetto contiene una chiave una volta sola, e due chiavi così restano come le ha scritte il modello quando Latet ripristina la sua risposta per l’agente. Un oggetto JSON che ripete una chiave viene letto con la sua ultima copia, ed esce riscritto con quella copia sola, così la copia che Latet non ha letto non esce mai; una richiesta che Latet si limita a controllare, come quelle di Claude Code, viene fermata quando è il suo stesso corpo a ripetere una chiave.

Chiamate con chiavi in conflitto nella cronologia. Conservare entrambe le chiavi in una chiamata ripristinata ne preserva i dati, ma mascherarla di nuovo può rendere le chiavi identiche. È un limite documentato: vengono rifiutate la richiesta successiva e tutte quelle che conservano quella chiamata. Inizia una nuova conversazione, oppure rimuovi o riformula la chiamata tramite i controlli della cronologia supportati dal tuo client. Riprovare con la richiesta invariata non sblocca la conversazione.

Argomenti degli strumenti in streaming. Latet trattiene gli argomenti JSON fino al completamento della chiamata, poi ripristina l’intero documento senza unire chiavi distinte. Il testo normale continua in streaming. I canali JSON trattenuti condividono un unico budget limitato della risposta, inclusi metadati e crescita dovuta a ricostruzione e serializzazione. Superarlo, o ricevere argomenti incompleti o non validi, termina lo stream con un errore. Una chiamata Anthropic con input iniziale non vuoto non può fornire anche una seconda fonte JSON non vuota degli argomenti. Una chiamata interrotta prima del completamento non viene registrata come output completo del modello.

Registrazioni accettate dell’output del modello. Dopo aver convalidato un gruppo di risposte, Latet accetta le registrazioni dell’output e ne accoda il salvataggio prima di restituire l’output di quel gruppo. Il salvataggio avviene in background: l’accettazione non prova né la consegna al client né che i dati siano già stati salvati. Una cancellazione prima dell’accettazione non pubblica registrazioni; dopo l’accettazione, il salvataggio può terminare anche se la consegna viene annullata.

In una singola istanza, il gateway di ogni identità ammette al massimo 32 MiB di queste registrazioni e 256 gruppi fra le sue sessioni, contando sia il lavoro in coda sia quello in esecuzione. Contano il testo mascherato e ripristinato, gli identificatori delle risposte e il costo delle strutture di registrazione. È un limite al nuovo lavoro trattenuto, non alla memoria totale del processo (RSS): la permanenza più lunga dei dati in chiaro e il costo dell’interprete consumano comunque memoria. Se l’ammissione è piena o chiusa, o l’accodamento fallisce, l’output di quel gruppo viene rifiutato. Il testo già trasmesso in streaming non può essere ritirato.

Le registrazioni diventano visibili in seguito. Le richieste accodate dopo sullo stesso processo di lavoro del gateway seguono il tentativo di registrazione. Su un server Latet ciò non garantisce che Valkey li abbia scritti, né che un’altra istanza li veda, né il loro ordine rispetto al lavoro del plugin di Claude Code. L’arresto può scartare le registrazioni in coda. Un errore di salvataggio dopo la consegna produce un messaggio diagnostico con frequenza limitata, contenente solo una categoria fissa e il tipo di eccezione; non può annullare la consegna né ripristinare atomicamente lo stato precedente. Se mancano registrazioni, restano in vigore le normali regole di ricerca nella sessione, mascheramento e rifiuto.

Campi della richiesta fuori dalla conversazione. In modalità gateway, le descrizioni degli strumenti, gli schemi dei loro parametri e gli esempi del loro input vengono mascherati come la conversazione, e così lo schema di un output strutturato, un output previsto e ciò che una richiesta dice di chi la fa (user, safety_identifier, metadata). I nomi degli strumenti, ciò che permette al provider di eseguire uno strumento suo (l’indirizzo e le intestazioni di un server MCP remoto, la posizione di una ricerca web) e le altre impostazioni della richiesta devono avere ciascuno la forma che gli dà il suo profilo, e vengono letti dal controllo finale dove contengono testo; uno che nessun profilo nomina ferma la richiesta (Ogni parte di una richiesta). In Claude Code il plugin maschera le descrizioni degli strumenti, e il controllo finale legge metadata, lo schema di un output strutturato e gli schemi dei parametri degli strumenti (vedi sotto). Un client diverso da Claude Code su una via che Latet si limita a controllare (l’accesso di un abbonamento, Bedrock, Vertex) non ha un plugin: il controllo finale legge anche le descrizioni, i parametri e gli esempi dei suoi strumenti, e ferma una richiesta che vi lascerebbe uscire un valore in chiaro.

Gli strumenti di Claude Code. Il plugin maschera le descrizioni degli strumenti, incluse quelle di tool_addition. Latet non prende i marcatori della richiesta come prova che il plugin sia stato eseguito, su un computer come su un server: il suo controllo finale legge la descrizione di ogni strumento, lo schema dei suoi parametri e gli esempi del suo input, come per un client senza plugin, e ferma una richiesta che vi lascerebbe uscire un valore in chiaro. Uno strumento MCP il cui schema nomina l’indirizzo di un cliente ferma quindi le richieste di Claude Code, finché il valore non viene tolto dallo schema o consentito nelle tue impostazioni. Una definizione di strumento in una forma che Latet non legge viene rifiutata, come per ogni client. Restano i controlli di metadati, output strutturati e schemi di fallback descritti qui.

Per Anthropic, la lettura degli output strutturati comprende anche descrizioni, chiavi e valori degli schemi in ogni fallbacks[].output_config.format. Il mascheramento protegge gli schemi sensibili; nelle richieste solo controllate, gli schemi sensibili vengono rifiutati e i byte sicuri restano invariati. Restano supportati i fallback che indicano solo il modello. Un server con protezione attiva rifiuta contenitori di fallback e schemi di output in forme non valide.

Ciò che Latet non legge. Latet rifiuta ciò che non legge, su un computer come su un server, con un errore che dice perché. Rifiuta una chiamata che nessun profilo nomina: files o batches, per esempio, o un metodo che la rotta non accetta. Rifiuta dei contenuti in una forma che Latet non legge: un prompt di completamento dato come token; una variabile di un prompt, una definizione di strumento o il formato di una risposta di un tipo che non conosce; una parte di contenuto, un blocco di un messaggio o un elemento dell’input di un tipo che non conosce, nelle chat completions come nei messaggi di Anthropic e nella Responses API, o uno che non è un oggetto; un campo che Latet legge dato in un’altra forma, come l’input di una chiamata a uno strumento che non è un oggetto o un prompt di sistema che non è né testo né blocchi; e, nella Responses API, l’audio di una conversazione dal vivo (audio, output_audio) e ciò che è stato sentito in una clip audio. Rifiuta un frame WebSocket che non è un turno (response.create; response.cancel passa) e, su una richiesta che si limita a controllare (Claude Code, Bedrock, Vertex), un’immagine di cui non ha potuto leggere il testo, qualunque cosa dica images. Ciò che il provider ha prodotto e gli viene restituito così come l’ha prodotto passa quando Latet l’ha visto arrivare dal provider in quella conversazione: il ragionamento del modello e le sue firme, una compattazione, le chiamate agli strumenti del provider e i loro risultati. Dove Latet non l’ha visto (il daemon di un computer è stato riavviato, per esempio), una regola integrata lascia passare i campi cifrati del provider stesso, solo nei turni del modello e solo verso l’indirizzo del provider, mai attraverso un gateway aziendale; la dashboard li mostra come consentito da una regola. Passa anche ciò che non contiene nulla, come un riferimento a un elemento precedente, e una richiesta senza corpo su una rotta che un profilo nomina, ad esempio l’elenco dei modelli.

Latet rifiuta inoltre messaggi chat con name, blocchi Anthropic search_result e blocchi documento con title o context, anche nei risultati degli strumenti, su un computer come su un server. Queste forme facoltative non sono supportate neppure con valori vuoti o null. Un documento senza titolo né contesto viene rifiutato come ogni documento.

La revisione della modalità auto di Claude Code. Il revisore della modalità auto riceve il tuo nome utente del sistema operativo e i percorsi della tua cartella home e della cartella di lavoro, più qualsiasi nome host o autore git presente nel tuo CLAUDE.md o nell’azione, e nessun plugin può mascherarli. Per impostazione predefinita il daemon ferma quelle revisioni, così i dettagli restano in locale e la modalità auto non può approvare azioni da sola. auto_mode_review lascia passare ogni dettaglio al revisore, e solo a lui, oppure dà al revisore un nome utente fittizio; vedi Claude Code.

Il tuo computer. Latet non è una sandbox: non protegge da malware, da altri utenti del tuo account o da un agente compromesso. Gli strumenti che l’agente esegue sul tuo computer, server MCP locali compresi, ricevono i valori reali, così file e comandi funzionano: un comando che invia dati in rete invia il valore reale. Esegui l’agente in una sandbox quando ne ha bisogno.

Regole aggiunte a conversazione in corso (Claude Code). Mettiamo che tu aggiunga Project Falcon come termine personalizzato a metà di una conversazione. I contenuti nuovi vengono mascherati da quel momento in poi, ma i turni precedenti, già arrivati ad Anthropic con il nome in chiaro, vengono inviati di nuovo con ogni richiesta. Latet li segnala nella dashboard invece di bloccarli: sono già stati inviati, e bloccarli fermerebbe la conversazione. Inizia una nuova conversazione per lasciarli alle spalle.

Dati inviati in precedenza. Tutto ciò che è stato inviato prima dell’installazione di Latet o, prima della 0.11, da un progetto in cui era disattivato, è già presso il provider.

Vedi il modello di sicurezza e delle minacce per le ragioni dietro questi limiti.