このプロジェクトについて
irreversible-command-gate (icg) は、AIコーディングエージェントのハーネスフックに組み込まれ、シークレットの削除、履歴への強制プッシュ、認証情報のトランスクリプトへの出力、Dockerボリュームのパージなど、取り消し不可能な少数のアクションを捕捉するための小さなRust製ガードです。それ以外のすべてのツール呼び出しはそのまま通過します。これはハーネスのPreToolUseフックにプラグインされ、1つのJSONドキュメントを入力として受け取り、1つの判定エンベロープを出力します。プロジェクトドキュメントでは、敵対的なエージェントに対するセキュリティ境界ではなく、誠実だが誤りを犯しうるエージェントのためのバックストップとして説明されています。
動作原理:ツール呼び出しは、ツールキーワードによってルールパックにディスパッチされます。まず安全なパターンが試行され、一致すればショートサーキット(即時終了)します。ガード付きパターンの間では、最初に一致したものが優先されます。この順序により、安全なパターンが適用されなかった入力に対してのみルールが発火するため、通常の読み取り専用作業は妨げられません。エンジンは決定論的であり、ネットワークI/Oは行いません。設計上「フェイルオープン」となっており、パックディレクトリが空である場合、認識されないツールである場合、またはチェックがクラッシュした場合はすべてコマンドを許可します。これは、違反の見落としは回復可能だが、エージェントフリートの停止は許容できないという考えに基づいています。READMEによると、ウォームキャッシュでのチェックコストの中央値は約10msであり、リリースが実証された後に使用できる段階的なフェイルクローズポリシーが存在することが記されています。
ルールが宣言できるリダイレクトチャネルに応じて4つの判定があり、実際にコマンドを停止させるのはdenyのみです。allow(ルールに一致しなかった、または安全なパターンに先に一致した)、warning(ルールでブロックするほど確実に判定できないが、追加コンテキストを添えて許可する)、rewrite(許可しつつ入力を更新し、ハーネスに同じ意図の安全な形式で再試行させる)、deny(理由とともに代替策を提示する)の4種類です。
提供内容:公開されているパックには、openbao(kv destroy、metadata delete、mountおよびpolicyの削除、operator rekey、argv内のシークレットリテラル、stdoutへのシークレット読み取り)、git(ベア認証情報の入力、強制プッシュを通常のプッシュに書き換え、パススペックのないコミット、古いリモートヘッドへのプッシュ)、secrets(GitHubトークンとPAT、AWSキー、Slackトークン、Anthropicキー、PEM秘密鍵ブロックをコマンドおよびファイル内容から照合)、docker(system prune --all、volume rm、image rm --force)、image-tag、storage-class、およびフリート固有の慣習をエンコードしたbeads、misc、tmux、argocd-topologyが含まれています。ドキュメントでは各パックを「汎用」または「フリート固有」としてマークし、すべてのルールIDを明記しています。パックの足場作りは、パックとその回帰テストを同時に書き出すnew-packコマンドを通じて提供され、リリースゲートはdeny回帰コーパスを構築して、以前はカバーしていたルールが停止したことを報告します。
インストールと使用:バイナリはRustツールチェーンのみでソースからビルドするか、リリースアセットとして取得できます。インストールスクリプトは、バイナリとパックをルート所有で配置し、フックを登録します。このスクリプトは、意図的に既知の破壊的コマンドをフックに送信し、コマンドがdenyで返ってこない限り成功を報告しないことで、強制力の適用を証明します。これは、不完全なインストールが正常な動作と全く同じように振る舞うためです。ドライランおよびアンインストールオプションも利用可能です。人間向けのcheckコマンドは常に終了ステータス0で終了するため、ステータスではなく出力内容をパースする必要があります。
明示的な制限:READMEでは、icgはプロンプトインジェクションや悪意のあるリポジトリを防ぐものではなく、誰が呼び出しているか(アイデンティティ、TTY、権限チェック)を把握せず、ChatGPT web、Codexクラウドタスク、claude.aiなどのクラウドホスト型エージェントセッションには到達せず、kubectlのミューテーション、ワークフローファイル、KubernetesのJobおよびCronJobオブジェクト(これらは個別の組織レベルの強制力に委ねられる)をカバーしないことが明記されています。環境変数でガードを無効化でき、これは制限ではなく監査対象であるため、エージェントはユーザーと同様に簡単に設定できます。アップデートフローの信頼ポインタ遷移はエンドツーエンドで検証されておらず、未実証であると説明されています。
ステータス:READMEによると、エンジン、パック、両方のフロントエンド(フックおよびPATHラッパー)、リリース整合性メカニズム、および52ファイルにわたる526の合格テストが動作しています。コードベースは約25,800行のRustで構成され、依存関係は17個で、Cツールチェーンは不要です。現在のリリースはv0.1.4であり、v0.1.3からのアップグレードが推奨されています。v0.1.3では、ヒアドキュメント本文内のアポストロフィによってレクサーがコマンドの残りを喪失し、ガードをバイパスできてしまう問題が修正されました。リポジトリは、セルフホストされたgitインスタンスのMITライセンスによる読み取り専用ミラーです。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.