Discuter de ce sujet avec une IA

Vous obtenez une réponse tirée de la documentation et la page d'où elle vient.

Installation et exploitation

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.

~9 min de lecture · Installation et exploitation

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, amd64 ou arm64).
  • Vérifie sa somme de contrôle SHA-256 par rapport au fichier SHA256SUMS publié ; s'interrompt à toute divergence.
  • Installe un service privilégié et, en option, inscrit l'appareil avec une clé d'installation de la console.
L'installation du service exige des droits élevés : root (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 :

bashTerminal
curl -fsSL https://poisonzero.com/install.sh | sudo \
  PZ_ENROLL_CODE="votre-code" sh
powershellPowerShell
$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.
Les mises à jour s'exécutent automatiquement. Installez une fois par appareil ; réexécutez seulement pour changer l'inscription ou forcer un remplacement du binaire.

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é.
L'ancien procédé - créer un appareil dans la console pour obtenir un ID d'app correspondant et un code à usage unique - fonctionne toujours à l'identique. Utilisez-le pour les installateurs plus anciens ou les intégrations déjà construites autour de lui.

Variables d'environnement

Fixez n'importe quelle option par une variable d'environnement pour exécuter l'installation de façon non interactive :

VariableValeursPar défautEffet
PZ_ENROLL_CODEclé d'installationaucunLa 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_IDApp IDaucunAncien et optionnel : nécessaire seulement avec un code par appareil plus ancien, généré avant les clés d'installation. Ignoré seul.
PZ_HEADLESSnone, standard, strictnoneFixe 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_BACKENDcpu, gpucpuBackend 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_TIERenterprise, ultraenterprisePalier 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_ONLY1non définiTélécharge et vérifie uniquement le binaire, puis quitte. Aucun service n'est installé, donc aucun droit élevé n'est requis.
PZ_FETCH_DESTchemin./poisonzero (.\poisonzero.exe sous Windows)Chemin de destination du binaire vérifié quand PZ_FETCH_ONLY=1.
PZ_SETUP_AGENTSliste séparée par virgules, ex. claude,codexnon définiBranche la commande de statistiques locale /poisonzero dans les agents listés (Claude Code, Codex, Gemini, Cursor). Entièrement local, sur adhésion.
PZ_SETUP_STATUSLINE1non définiAjoute 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_RUN1non définiAffiche le mode résolu (fresh/re-enroll/upgrade) et quitte avant tout effet de bord. Utile pour tester l'automatisation.
POISONZERO_DATA_DIRcheminvaleur par défaut selon l'OS (voir ci-dessous)Remplace le répertoire de données utilisé par le daemon et l'installateur.
Linux/macOS acceptent aussi une option --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 :

OSRépertoire de donnéesPropriétaire
Linux/var/lib/poisonzero (fichier enroll dans /etc/poisonzero/enroll)poisonzero:poisonzero
macOS/Library/Application Support/PoisonZeroroot:wheel
Windows<ProgramData>\PoisonZeroSYSTEM / 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, plus appId pour l'ancien procédé) consommée par poisonzero enroll au premier démarrage.
  • headlessmode - présent seulement quand standard/strict a é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 :

OSTypeNom et commande de statut
Linuxunité systemd (root)poisonzero.service · systemctl status poisonzero
macOSLaunchDaemon launchdcom.poisonzero.daemon · launchctl print system/com.poisonzero.daemon
WindowsTâ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 :

bashSans surveillance
PZ_ENROLL_CODE="votre-code" \
  sh -c "$(curl -fsSL https://poisonzero.com/install.sh)"
powershellSans surveillance
$env:PZ_ENROLL_CODE="votre-code"
irm https://poisonzero.com/install.ps1 | iex
Ajoutez 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é) :

bashTéléchargement seul
curl -fsSL https://poisonzero.com/install.sh | PZ_FETCH_ONLY=1 sh
# écrit ./poisonzero (remplacer avec PZ_FETCH_DEST)
powershellTéléchargement seul
$env:PZ_FETCH_ONLY="1"; irm https://poisonzero.com/install.ps1 | iex
# écrit .\poisonzero.exe (remplacer avec $env:PZ_FETCH_DEST)
La vérification de la somme de contrôle est obligatoire sur chaque chemin ; un téléchargement altéré ou tronqué n'est jamais installé.

Vérifier l'appareil

  1. Vérifiez que le service tourne avec la commande de statut pour votre OS (tableau ci-dessus).
  2. Ouvrez la console : l'appareil inscrit apparaît avec son statut dans votre liste d'appareils.
  3. 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.

bashDésinstaller
curl -fsSL https://poisonzero.com/install.sh | sudo sh -s -- --uninstall
powershellDésinstaller
& ([scriptblock]::Create((irm https://poisonzero.com/install.ps1))) -Uninstall
bashDésinstaller
# .deb / .rpm
sudo apt remove poisonzero   # ou: sudo dnf remove poisonzero
# Homebrew
poison0 remove-agent-integration && brew uninstall poisonzero
# Scoop
scoop uninstall poisonzero
Mettre en pause plutôt que désinstaller ? La protection est fail-closed par conception, donc retirer le service est la façon propre de l'arrêter entièrement.

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 :

InstallationEmplacement 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
OSDossier des managed settings
macOS/Library/Application Support/ClaudeCode/
Linux, WSL/etc/claude-code/
WindowsC:\Program Files\ClaudeCode\
  • PoisonZero ne modifie jamais votre managed-settings.json ni les autres fichiers de managed-settings.d/.
  • Les dossiers créés par PoisonZero ne sont modifiables que par les administrateurs et lisibles par tous.

Effet

CasRé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 --settingsLes hooks exec0 continuent de fonctionner.
Vous définissez allowManagedHooksOnlyLes hooks exec0 continuent de fonctionner ; ceux des paramètres utilisateur et de projet, non.
Vous définissez "disableAllHooks": true dans les managed settingsLes hooks exec0 sont également désactivés ; poison0 doctor le signale.
Appareil avec une installation plus ancienneL'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 :

SourceEmplacement
Server-managed settingsConsole d'administration de claude.ai
Profil MDM (macOS)Domaine com.anthropic.claudecode
Stratégie de groupe ou Intune (Windows)HKLM\SOFTWARE\Policies\ClaudeCode
SolutionMé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 sourceCopiez le contenu de managed-settings.d/50-poisonzero-exec0.json d'un appareil installé dans cette source.
Vérifierpoison0 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.

bashexec0 pour Claude Code
# désactiver
sudo poison0 setup-claude --toolgate-off
# activer
sudo poison0 setup-claude --toolgate
powershellexec0 pour Claude Code
# désactiver
poison0 setup-claude --toolgate-off
# activer
poison0 setup-claude --toolgate