zn-gate pour Copilot CLI

Installez les hooks expérimentaux de zn pour GitHub Copilot CLI : ils bloquent la lecture et l'écriture des fichiers secrets et les commandes shell qui manipulent des secrets, et remplacent les valeurs secrètes dans les résultats des outils.

Voir le .md

La prise en charge de Copilot CLI est expérimentale. Voyez-la comme une première couche : elle ne peut pas bloquer un secret que vous collez dans un prompt, et Copilot laisse un appel se poursuivre si un hook est trop lent (voir les Limites ci-dessous).

Il vous faut Node.js 18 ou plus récent. Collez chaque ligne dans un terminal et appuyez sur Entrée après chacune :

npm install -g zn-gate
zn hooks install copilot

Sur macOS et Linux, si npm install -g échoue avec EACCES, suivez le guide de npm pour corriger les erreurs de permission.

Corrigez-le sans droits d'administrateur :

mkdir -p ~/.npm-global && npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.zshrc

Si vous utilisez bash, écrivez dans ~/.bashrc au lieu de ~/.zshrc.

Ensuite, ouvrez un nouveau terminal et exécutez npx -y zn-gate init. Un gestionnaire de versions de Node.js, comme nvm, évite aussi le problème.

Ouvrez ensuite une nouvelle session Copilot CLI. zn écrit son propre fichier, zn-gate.json, dans ~/.copilot/hooks/ (ou dans $COPILOT_HOME/hooks/ si vous avez défini un dossier Copilot personnalisé) et ne modifie que ce qu'il y a écrit. Vous mettrez à jour plus tard ? Consultez Mettre à jour zn-gate.

Pour un seul projet

Lancez zn hooks install copilot --project dans le projet. La commande écrit .github/hooks/zn-gate.json dans ce projet plutôt que dans votre dossier personnel. Le hook lance zn depuis votre PATH : toute personne qui ouvre le projet dans Copilot CLI doit donc avoir installé zn-gate, sinon le hook ne peut pas démarrer. Copilot demande aussi à chaque personne de faire confiance au dossier avant d'exécuter les hooks d'un dépôt.

Ce que vous obtenez

  • zn vérifie chaque appel d'outil avant son exécution.
  • Les lectures et écritures de fichiers secrets, comme les fichiers .env contenant des valeurs, sont bloquées d'après le chemin du fichier.
  • Les commandes shell qui manipulent des secrets sont bloquées. Pour une commande qui utilise un marqueur __ZN_<NAME>__, zn la bloque et indique au modèle la ligne exacte zn run -- ... à utiliser à la place.
  • L'agent ne peut pas modifier les fichiers de hooks et de paramètres de Copilot.
  • Après l'exécution d'un outil de lecture ou d'un outil shell, zn remplace les valeurs secrètes d'un résultat réussi avant que le modèle ne le voie.
  • Quand une vérification a besoin de votre décision, zn vous demande de confirmer. Là où personne ne peut répondre, dans l'agent cloud de Copilot et en mode autopilote, Copilot transforme cette question en blocage.
  • zn n'approuve jamais un appel à votre place. Quand il n'a aucune objection, ce sont les règles d'autorisation propres à Copilot qui s'appliquent.

Limites

  • Un secret collé dans un prompt saisi n'est pas arrêté. Copilot ne permet pas à un hook de bloquer un prompt saisi.
  • Copilot laisse l'appel se poursuivre quand un hook est trop lent. Copilot attend 30 secondes par défaut, et zn fixe 15 secondes sur ses hooks. zn répond aussi par un blocage lorsque sa propre vérification n'est pas terminée au bout de 11 secondes.
  • Le journal propre à Copilot conserve la sortie d'origine. Le journal de session (events.jsonl) sur votre machine contient la sortie de l'outil avant tout remplacement par zn. zn nettoie ce qui va au modèle, pas ce fichier.
  • Les hooks de politique de la machine s'exécutent aussi. Copilot charge également des fichiers de hooks depuis /etc/github-copilot/policy.d, que zn ne peut pas voir.
  • Certains outils peuvent ne pas être vérifiés. zn ne reconnaît pas toujours un outil MCP : ses appels peuvent ne pas être vérifiés et sa sortie n'est pas nettoyée.
  • Des paramètres peuvent désactiver les hooks. "disableAllHooks": true dans le fichier de zn, ou dans .github/copilot/settings.json ou settings.local.json du dépôt, les désactive. zn-gate check le signale.
  • Il n'a pas été testé sous Windows.
  • zn a été vérifié avec Copilot CLI 1.0.98 et un modèle simulé, pas avec toutes les versions.

Vérifiez que ça fonctionne

Dans un nouveau terminal, lancez zn-gate check. Il doit afficher OK pour Copilot CLI (experimental). Ce que signifie la sortie.

Sous Windows PowerShell, si npm affiche « running scripts is disabled on this system », utilisez npm.cmd et zn.cmd à la place : voir Installer.

Le retirer

Lancez zn hooks uninstall copilot dans votre propre terminal (ajoutez --project pour une installation de projet).