Installer l'agent poison0 : référence complète
L'agent poison0 est un petit daemon installé sur chaque appareil qui surveille localement les fichiers mémoire de vos agents. Cette page documente l'installateur de bout en bout : les commandes d'installation rapide, chaque variable d'environnement, le répertoire de données par système d'exploitation, le service qui exécute le daemon et comment le déployer sans surveillance.
Aperçu
Ce que fait l'installateur, dans l'ordre :
- Télécharge le binaire du daemon correspondant depuis
https://poisonzero.com/dl/latest(Linux/macOS/Windows,amd64ouarm64). - Vérifie sa somme de contrôle SHA-256 par rapport au fichier
SHA256SUMSpublié ; s'interrompt à toute divergence. - Installe un service privilégié et, en option, inscrit l'appareil avec une clé d'installation de la console.
sudo) sous Linux/macOS, une PowerShell Administrateur sous Windows. Utilisez PZ_FETCH_ONLY=1 pour seulement télécharger et vérifier.Prérequis vérifiés avant l'installation :
- x86-64 : AVX2 (Intel Haswell/2013+, AMD Zen+).
- ARM64 : i8mm (Apple M2+ ; Apple M1 non pris en charge).
- Windows : répertoire de données sur un volume NTFS.
Installation rapide
Créez une clé d'installation dans la console (ou utilisez un ancien code par appareil), puis exécutez la commande pour votre plateforme :
curl -fsSL https://poisonzero.com/install.sh | sudo \ PZ_ENROLL_CODE="votre-code" sh
$env:PZ_ENROLL_CODE="votre-code" irm https://poisonzero.com/install.ps1 | iex
- Sans code prédéfini : l'installateur demande la clé d'installation (plus les choix d'accélération/palier et headless sur un vrai terminal) ; un ID d'app n'est demandé que pour l'ancien procédé par appareil.
- Une clé d'installation est réutilisable jusqu'à son plafond d'utilisation ; un ancien code par appareil reste à usage unique.
- Déjà inscrit, réexécuté sans nouveau code = mise à niveau : remplace le binaire, redémarre le service, conserve vos identifiants.
Clés d'installation
Créez une clé d'installation dans la console, sous Clés d'installation. C'est la façon recommandée d'inscrire des appareils :
- Réutilisable : une clé inscrit des appareils jusqu'au plafond que vous fixez à sa création ; chaque inscription compte pour ce plafond.
- Affichée une fois : copiez-la à sa création - la console ne l'affiche plus ensuite.
- Révocable : révoquez-la dans la console pour arrêter immédiatement d'autres inscriptions ; les appareils déjà inscrits continuent de fonctionner.
- Aucun ID d'app requis : le backend attribue à chaque appareil son identité au moment de l'utilisation de la clé.
Variables d'environnement
Fixez n'importe quelle option par une variable d'environnement pour exécuter l'installation de façon non interactive :
| Variable | Valeurs | Par défaut | Effet |
|---|---|---|---|
PZ_ENROLL_CODE | clé d'installation | aucun | La clé d'installation de la console. Requise pour une nouvelle inscription ; seule, elle suffit, car le backend attribue l'identité de l'appareil. Passer une clé neuve sur un appareil déjà inscrit force une réinscription délibérée. |
PZ_APP_ID | App ID | aucun | Ancien et optionnel : nécessaire seulement avec un code par appareil plus ancien, généré avant les clés d'installation. Ignoré seul. |
PZ_HEADLESS | none, standard, strict | none | Fixe la gestion des invites de confirmation utilisateur sur une machine sans utilisateur de bureau pour répondre. none détecte automatiquement d'après l'utilisateur connecté ; standard/strict écrivent un fichier headlessmode que le daemon lit. |
PZ_BACKEND | cpu, gpu | cpu | Backend d'accélération. Le mode CPU seul est le choix par défaut recommandé et le plus sûr. Le GPU est optionnel et affiche un avertissement de sécurité ; le moteur GPU n'est pas encore publié. |
PZ_TIER | enterprise, ultra | enterprise | Palier produit. ultra implique le GPU et est fail-closed sans repli CPU ; enterprise avec GPU se replie sur une installation CPU seul fonctionnelle. |
PZ_FETCH_ONLY | 1 | non défini | Télécharge et vérifie uniquement le binaire, puis quitte. Aucun service n'est installé, donc aucun droit élevé n'est requis. |
PZ_FETCH_DEST | chemin | ./poisonzero (.\poisonzero.exe sous Windows) | Chemin de destination du binaire vérifié quand PZ_FETCH_ONLY=1. |
PZ_SETUP_AGENTS | liste séparée par virgules, ex. claude,codex | non défini | Branche la commande de statistiques locale /poisonzero dans les agents listés (Claude Code, Codex, Gemini, Cursor). Entièrement local, sur adhésion. |
PZ_SETUP_STATUSLINE | 1 | non défini | Ajoute la ligne de statut de l'agent poison0 dans Claude Code (~/.claude/settings.json). Une ligne de statut existante n'est jamais remplacée. |
PZ_DRY_RUN | 1 | non défini | Affiche le mode résolu (fresh/re-enroll/upgrade) et quitte avant tout effet de bord. Utile pour tester l'automatisation. |
POISONZERO_DATA_DIR | chemin | valeur par défaut selon l'OS (voir ci-dessous) | Remplace le répertoire de données utilisé par le daemon et l'installateur. |
--headless none|standard|strict (l'emporte sur PZ_HEADLESS) ; le script de déploiement Windows prend -Headless.Répertoire de données et fichiers
Binaire : /usr/local/bin/poisonzero (Linux/macOS), <ProgramFiles>\PoisonZero\poisonzero.exe (Windows). Répertoire de données par OS :
| OS | Répertoire de données | Propriétaire |
|---|---|---|
| Linux | /var/lib/poisonzero (fichier enroll dans /etc/poisonzero/enroll) | poisonzero:poisonzero |
| macOS | /Library/Application Support/PoisonZero | root:wheel |
| Windows | <ProgramData>\PoisonZero | SYSTEM / Administrateurs |
Fichiers dans le répertoire de données :
credentials- jeton stocké de l'appareil ; sa présence marque l'appareil comme inscrit et n'est jamais écrasé lors d'une mise à niveau.enroll- entrée d'inscription à usage unique (la clé d'installation, plusappIdpour l'ancien procédé) consommée parpoisonzero enrollau premier démarrage.headlessmode- présent seulement quandstandard/stricta été fixé ; absent ou vide = détection automatique.vault/- magasin de quarantaine pour le contenu annulé.
Service / daemon
S'exécute comme un service d'arrière-plan privilégié, un mécanisme par OS :
| OS | Type | Nom et commande de statut |
|---|---|---|
| Linux | unité systemd (root) | poisonzero.service · systemctl status poisonzero |
| macOS | LaunchDaemon launchd | com.poisonzero.daemon · launchctl print system/com.poisonzero.daemon |
| Windows | Tâche planifiée (SYSTEM, au démarrage) | PoisonZero · Get-ScheduledTask -TaskName PoisonZero |
- Windows utilise une tâche planifiée, pas un service Windows : le binaire Go charge son modèle au premier démarrage et manquerait le délai de démarrage du Service Control Manager.
- Un notifieur de bureau s'exécute dans chaque session utilisateur pour l'invite de confirmation utilisateur : autostart XDG (Linux), LaunchAgent par utilisateur (macOS), wrapper VBS via clé Run (Windows).
Installation sans surveillance (Intune / SCCM)
Définissez la clé d'installation dans l'environnement, puis exécutez la même ligne ; avec le code présent et aucun terminal, elle s'exécute sans invites :
PZ_ENROLL_CODE="votre-code" \ sh -c "$(curl -fsSL https://poisonzero.com/install.sh)"
$env:PZ_ENROLL_CODE="votre-code" irm https://poisonzero.com/install.ps1 | iex
PZ_DRY_RUN=1 pour afficher le mode résolu (fresh/re-enroll/upgrade) et quitter avant tout changement.Télécharger et vérifier uniquement
PZ_FETCH_ONLY=1 télécharge le binaire, vérifie sa somme de contrôle SHA-256 et l'écrit sur le disque sans installer de service (aucun droit élevé) :
curl -fsSL https://poisonzero.com/install.sh | PZ_FETCH_ONLY=1 sh # écrit ./poisonzero (remplacer avec PZ_FETCH_DEST)
$env:PZ_FETCH_ONLY="1"; irm https://poisonzero.com/install.ps1 | iex # écrit .\poisonzero.exe (remplacer avec $env:PZ_FETCH_DEST)
Vérifier l'appareil
- Vérifiez que le service tourne avec la commande de statut pour votre OS (tableau ci-dessus).
- Ouvrez la console : l'appareil inscrit apparaît avec son statut dans votre liste d'appareils.
- Pour faire passer un appareil à une clé d'installation neuve, réexécutez l'installateur avec un nouveau
PZ_ENROLL_CODE- il se réinscrit proprement.
Désinstaller
Une seule commande supprime tout : d'abord le fichier exec0 managed-settings.d/50-poisonzero-exec0.json et les hooks Claude Code de tous les utilisateurs, puis le service, le programme et le répertoire de données. Si le fichier exec0 ne peut pas être supprimé, la désinstallation s'arrête et le programme reste installé. Exécutez-la en tant qu'administrateur (root). Ne supprimez jamais le programme à la main : des hooks qui pointent vers un programme absent bloquent chaque appel d'outil de Claude Code.
curl -fsSL https://poisonzero.com/install.sh | sudo sh -s -- --uninstall
& ([scriptblock]::Create((irm https://poisonzero.com/install.ps1))) -Uninstall
# .deb / .rpm sudo apt remove poisonzero # ou: sudo dnf remove poisonzero # Homebrew poison0 remove-agent-integration && brew uninstall poisonzero # Scoop scoop uninstall poisonzero
Hooks exec0 dans Claude Code
exec0 s'intègre à Claude Code avec trois hooks : UserPromptSubmit, PreToolUse et PostToolUse. Leur emplacement dépend du type d'installation :
| Installation | Emplacement des hooks exec0 |
|---|---|
| Installation système : install.sh, install.ps1, .deb/.rpm (programme dans un dossier que seuls les administrateurs peuvent modifier) | Managed settings de Claude Code, fichier dédié managed-settings.d/50-poisonzero-exec0.json |
| Installation utilisateur : Homebrew sous un préfixe de l'utilisateur, Scoop dans le profil utilisateur | ~/.claude/settings.json de l'utilisateur |
| OS | Dossier des managed settings |
|---|---|
| macOS | /Library/Application Support/ClaudeCode/ |
| Linux, WSL | /etc/claude-code/ |
| Windows | C:\Program Files\ClaudeCode\ |
- PoisonZero ne modifie jamais votre
managed-settings.jsonni les autres fichiers demanaged-settings.d/. - Les dossiers créés par PoisonZero ne sont modifiables que par les administrateurs et lisibles par tous.
Effet
| Cas | Résultat |
|---|---|
Un utilisateur ou un agent supprime l'entrée ou définit "disableAllHooks": true dans les paramètres utilisateur ou de projet ou via --settings | Les hooks exec0 continuent de fonctionner. |
Vous définissez allowManagedHooksOnly | Les hooks exec0 continuent de fonctionner ; ceux des paramètres utilisateur et de projet, non. |
Vous définissez "disableAllHooks": true dans les managed settings | Les hooks exec0 sont également désactivés ; poison0 doctor le signale. |
| Appareil avec une installation plus ancienne | L'entrée dans ~/.claude/settings.json reste en secours jusqu'à ce que le service PoisonZero voie Claude Code appeler l'entrée gérée pour cet utilisateur. Le service supprime alors l'entrée utilisateur. Si les deux fonctionnent d'ici là, chaque appel d'outil n'est quand même vérifié qu'une fois. |
Politiques déjà distribuées de façon centrale
Si vous distribuez déjà des politiques Claude Code par l'une des sources suivantes, Claude Code n'applique par défaut que la source la plus haute et ignore 50-poisonzero-exec0.json :
| Source | Emplacement |
|---|---|
| Server-managed settings | Console d'administration de claude.ai |
| Profil MDM (macOS) | Domaine com.anthropic.claudecode |
| Stratégie de groupe ou Intune (Windows) | HKLM\SOFTWARE\Policies\ClaudeCode |
| Solution | Méthode |
|---|---|
| Fusionner les sources (Claude Code 2.1.242 ou plus récent) | Définissez "managedSourcesBehavior": "merge" dans la source la plus haute. |
| Distribuer par votre propre source | Copiez le contenu de managed-settings.d/50-poisonzero-exec0.json d'un appareil installé dans cette source. |
| Vérifier | poison0 doctor, poison0 exec0 status ou la console PoisonZero indiquent si Claude Code appelle vraiment le hook et nomment la source. |
Désactiver et activer exec0 pour Claude Code
Nécessite des droits d'administrateur. Sous Windows, exécutez-la dans un terminal en tant qu'administrateur.
# désactiver sudo poison0 setup-claude --toolgate-off # activer sudo poison0 setup-claude --toolgate
# désactiver poison0 setup-claude --toolgate-off # activer poison0 setup-claude --toolgate