「AIエージェントキャッチアップ #74 - NemoClaw」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #74 - NemoClaw」という勉強会を開催しました。

https://generative-agents.connpass.com/event/390939/generative-agents.connpass.com

アーカイブ動画はこちらです。

www.youtube.com

NemoClaw

今回は、OpenClawのような常時稼働アシスタントをより安全に実行するためのNVIDIAの「NemoClaw」をキャッチアップしました。

NemoClawのGitHubリポジトリはこちらです。

github.com

公式ドキュメントはこちらです。

docs.nvidia.com

今回のポイント

NemoClawとは

NemoClawは、OpenClawの安全な実行を簡単にするリファレンススタックです。 NemoClawと同時に発表された「OpenShell」を使用してOpenClawを動かすツールとなっています。

OpenShellは、AIエージェントのための安全でプライベートなランタイムです。 ポリシーによってファイル操作やネットワークアクセスを制御します。 以前OpenShellを扱った際のブログ記事は以下になります。

blog.generative-agents.co.jp

NemoClawをさわってみた

NemoClawのインストールは、ドキュメントに記載されているコマンドを実行するだけです。 指示に従ってセットアップを進めると、OpenShellが起動し、OpenShellのサンドボックスでOpenClawが起動します。

セットアップが完了すると、以下のコマンドでサンドボックスに接続できます。

nemoclaw <sandbox-name> connect

サンドボックスでOpenClawのTUIを起動して操作できます。

openclaw tui

~/.openclaw/workspaceには、OpenClawのAGENTS.mdやSOUL.mdなどが配置されています。

プラグインとブループリント

NemoClawは、プラグインとブループリントの2つで構成されます。

  • プラグイン:サンドボックスに推論プロバイダーと/nemoclawコマンドを登録するTypeScriptパッケージ
  • ブループリント:サンドボックスの作成・ポリシーの適用などのロジックを含むPythonパッケージ

docs.nvidia.com

4層のセキュリティ

NemoClawのセキュリティは、以下の4層で構成されています。

  • ネットワーク
  • ファイルシステム
  • プロセス(権限昇格や危険なシステムコールのブロック)
  • 推論(モデルの推論をプロキシ経由とする)

とくにネットワークポリシーについて確認したので説明します。

docs.nvidia.com

NemoClawのネットワークポリシー

NemoClawのネットワークポリシーは、nemoclaw-blueprint/policies/openclaw-sandbox.yamlに以下のように定義されています。

  :
network_policies:
  claude_code:
    name: claude_code
    endpoints:
      - host: api.anthropic.com
        port: 443
        protocol: rest
        enforcement: enforce
        tls: terminate
        rules:
          - allow: { method: POST, path: "/v1/messages" }
          - allow: { method: POST, path: "/v1/messages/batches" }
          - allow: { method: GET, path: "/v1/messages/batches/**" }
          - allow: { method: POST, path: "/v1/complete" }
      - host: statsig.anthropic.com
        port: 443
        protocol: rest
        enforcement: enforce
        tls: terminate
        rules:
          - allow: { method: POST, path: "/**" }
        :
      - host: sentry.io
        port: 443
        protocol: rest
        enforcement: enforce
        tls: terminate
        rules:
          - allow: { method: GET, path: "/**" }
    binaries:
      - { path: /usr/local/bin/claude }
  :

引用元:https://github.com/NVIDIA/NemoClaw/blob/67db244d88f539755b7486acddea2b1618bf2621/nemoclaw-blueprint/policies/openclaw-sandbox.yaml

これはOpenShellのポリシーであり、上記の箇所では/usr/local/bin/claudeというバイナリファイルからどのような通信を許可するかが定義されています。

このように、NemoClawはOpenShellを使用して、バイナリ単位でのネットワークポリシーが定められるようになっています。 AIエージェントがバイナリを編集する可能性も想定し、起動時からバイナリのハッシュ値の違いがないことをチェックする仕組みも含まれています。

ネットワークポリシーのプリセット

NemoClawでは、たとえばSlackと接続して使う場合のために、nemoclaw-blueprint/policies/presets/slack.yamlというプリセットのポリシーが用意されています。

  :
network_policies:
  slack:
    name: slack
    endpoints:
      - host: slack.com
        port: 443
        protocol: rest
        enforcement: enforce
        rules:
          - allow: { method: GET, path: "/**" }
          - allow: { method: POST, path: "/**" }
      - host: api.slack.com
        port: 443
        protocol: rest
        enforcement: enforce
        rules:
          - allow: { method: GET, path: "/**" }
          - allow: { method: POST, path: "/**" }
      - host: hooks.slack.com
        port: 443
        protocol: rest
        enforcement: enforce
        rules:
          - allow: { method: GET, path: "/**" }
          - allow: { method: POST, path: "/**" }
      # Socket Mode WebSocket — requires CONNECT tunnel to avoid
      # HTTP idle timeout killing the persistent connection. See #409.
      - host: wss-primary.slack.com
        port: 443
        access: full
      - host: wss-backup.slack.com
        port: 443
        access: full
    binaries:
      - { path: /usr/local/bin/node }
      - { path: /usr/bin/node }

引用元:https://github.com/NVIDIA/NemoClaw/blob/67db244d88f539755b7486acddea2b1618bf2621/nemoclaw-blueprint/policies/presets/slack.yaml

NemoClawはこのように、OpenClawを安全に使うためのOpenShellの設定集のような存在と言えます。

docs.nvidia.com

次回のご案内

以上、今回は「NemoClaw」をキャッチアップしました。

次回は「AIエージェントキャッチアップ #75 - Hermes Agent」ということで、ユーザーとともに成長するAIエージェント「Hermes Agent」がテーマです!

https://generative-agents.connpass.com/event/391588/generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!