OpenClaw風AIエージェントを自作する方法
OpenClawは自分のサーバーでshell commandやbrowser操作を行う個人向けAIエージェントです。構成部品を分解し、CVE-2026-32922の深刻度9.9を踏まえて安全な作り方を解説します。
OpenClawの実態
OpenClawは、自己ホスト型の個人向けAIエージェントです。自分のサーバーで実行し、普段使っているチャットアプリに接続すると、シェルコマンドの実行、ブラウザーの制御、ファイルの読み書き、受信したメッセージに応じた処理ができます。MITライセンスで提供され、ローカル優先の設計です。2026年半ばの時点でGitHubスターが380,000を超えており、同プラットフォームで最もスターの多いプロジェクトの1つです。内部には、適切に接続された比較的小さな部品群があります。この記事では、それらの部品を説明し、このようなツールがどのように構成され、どこに注意すべき点があるかを確認します。
最初に、以下の設計判断すべてに関わる警告があります。2026年3月、OpenClawのメンテナーは大量のセキュリティアドバイザリを公開しました。3月13日だけで22件、3月16日にさらに5件です。一方、National Vulnerability Databaseには、その月に公開されたOpenClawのCVEが199件記録されています。3月13日の一連の公開には、10段階中9.9と評価されたCriticalな脆弱性が2件含まれていました。そのうち1件は権限昇格の脆弱性(CVE-2026-32922)で、ペアリング権限しか持たないデバイスが完全な管理者トークンを発行できました。このプロジェクトは、運用者であるあなた自身が堅牢化することを前提に設計されています。任意のコマンドを実行できるエージェントの安全性は、実行先のサーバーと、その周囲に設けた制限に依存します。この点を念頭に置いて読み進めてください。
ゲートウェイデーモン: 1つのプロセスを非公開に保つ
中心にあるのは、通常gatewayと呼ばれる単一の長時間稼働プロセスです。これは制御プレーンです。メッセージを受信し、処理内容を決め、ツールを実行し、応答を返します。それ以外の機能はすべてこのプロセスに接続します。
gatewayで最も重要なのは、どこで待ち受けるかです。通常のホストへのインストールでは、OpenClawはloopbackアドレス127.0.0.1にbindするため、意図的に外部公開しない限りインターネットから到達できません。例外はコンテナーイメージです。OpenClawのセキュリティドキュメントによると、コンテナーイメージはデフォルトで外部公開されたbindを使用します。コンテナーで実行する場合は認証を有効にし、ポートをインターネットに公開しないでください。いずれの場合も、非公開に保ちます。これはコマンドを実行するプロセスなので、公開されたgatewayは、見つけた者にサーバーへのリモート侵入口を与えます。ノートPCからアクセスする必要がある場合は、ポートを開放せず、VPNまたはSSHトンネルを使用してください。到達できないポートは攻撃できません。
チャネルコネクター: メッセージを受信し、返信を返す
パーソナルエージェントは、普段使用しているアプリから会話できて初めて役に立ちます。それを担うのがチャネルコネクターです。各コネクターは、Telegram、WhatsApp、Slack、Discord などの 1 つのプラットフォームに対応し、そのプラットフォームの bot API または webhooks を使用します。
構成はすべて同じです。コネクターはプラットフォームに bot を登録し、受信メッセージを取得します。メッセージの取得方法は、プラットフォームをポーリングするか、プラットフォームから送信された webhook を受信するかのいずれかです。次に、そのメッセージを gateway に渡し、gateway の返信を同じ API 経由で投稿します。コネクターは薄い変換層です。「Telegram message が届いた」を「エージェントに渡すテキスト」に変換し、その逆も行います。独自のコネクターを作成する作業の大半は、1 つのプラットフォームの bot ドキュメントを読み、そのメッセージ形式を gateway の形式に対応付けることです。
脳とツールのループ
ゲートウェイの内部には、これをチャットボットではなくエージェントにする部分があります。それがループです。
メッセージが届くと、ゲートウェイはモデルが使用を許可されているツールの一覧とともに、そのメッセージを言語モデルへ送ります。モデルはメッセージを読み、直接回答するか、ツールを呼び出すかを判断します。ツールを呼び出した場合、ゲートウェイはそのツールを実行し、結果を取得してモデルへ返します。モデルは結果を確認し、再び判断します。モデルに実行すべき処理がなくなり、最終回答を生成するまで、この処理を繰り返します。
このループがエージェントの基本概念です。エージェントがチャットアプリケーション上で動作していても、端末上で動作していても、同じループになります。ツールをこのループに標準的な方法で接続する方法については、Model Context Protocol を介したツールの接続を次に読むとよいでしょう。モデル側については、モデル自体を自分のハードウェアで実行することで、もう一方の仕組みを理解できます。
ツール群が要であり、危険の源でもある
OpenClaw を強力にするのはツールです。シェルコマンドを実行するツール、ブラウザーを操作するツール、ファイルを読み書きするツールがあります。上記のループからこれらにアクセスできるようにすると、キーボードで実行できることのほぼすべてを実行できます。この到達範囲が製品全体であり、同時にリスク全体でもあります。
チャットアプリから届いた指示に従って任意のコマンドを実行できるエージェントは、攻撃対象領域が大きくなります。悪意のある指示、ブラウザーツールが訪問した Web ページに埋め込まれたプロンプトインジェクション攻撃、または March 2026 の脆弱性のようなバグによって、「カレンダーを読んで」が「ファイルを削除して」に変わる可能性があります。そのため、制限は任意の追加機能ではありません。侵害されても権限昇格できないように、sudo 権限のない専用の非特権ユーザーでエージェントを実行します。破壊的な操作を実行する前にエージェントが確認できるよう、危険なツールには承認手順を設けます。ツールの実行をサンドボックス化し、暴走したコマンドを封じ込めます。API key を隔離し、漏えいしても攻撃者にアカウントを渡さないようにします。同じサーバーに保存されている他の Secret についても検討してください。Vaultwarden の本当の弱点は暗号化ではなく管理トークンとバックアップファイルです。シェルアクセスを持つエージェントは、その両方に到達できます。
シェルコマンドを実行するものを外部公開する前に、基本事項を意識的に確認してください。ここで自分のサーバー用のチェックリストを作成し、上から順に実行します。
非特権ユーザーでサービスを実行する方法については、非特権ユーザーでサービスを実行するで詳しく説明しています。実際のプロジェクトに対する安全な設定手順全体については、VPS 上で OpenClaw を安全に実行するを参照してください。
プレーンファイルとしてのメモリ
多くの人は、エージェントのメモリがデータベースに保存されると考えます。しかし、OpenClawはそうではありません。メモリをディスク上のプレーンなMarkdownファイルとして保存します。この選択は参考になります。ファイルが正本であり、デフォルトのメモリエンジンはその隣にSQLite検索インデックスを保持します。このインデックスはファイルから再構築できます。
ファイルは単純です。移行するスキーマがなく、稼働させ続けるサービスもなく、覚えるクエリ言語もありません。内容を確認できます。フォルダーを開けば、エージェントが自分について何を記憶しているかを正確に読めます。誤った記録はファイルを編集して修正でき、メモリを削除する場合はそのファイルを削除できます。また、可搬性にも優れています。エージェントを新しいサーバーへ移す作業は、ディレクトリをコピーするだけです。単一ユーザー向けの個人エージェントなら、テキストファイルのフォルダーで十分です。システム全体の動作も理解しやすくなります。
スキル: 能力を追加する移植可能な方法
組み込みツールに加えて、OpenClaw は移植可能なスキル形式を使用します。これにより、コミュニティはコアを変更せずに機能を拡張できます。スキルは、エージェントに新しいタスクを教える自己完結型の手順セットです。場合によってはコードも含みます。エージェントは、タスクで必要になったときにスキルを読み込みます。Web 検索は、最初に追加するスキルとして一般的です。そのスキルを自分の SearXNG インスタンスに向けると、商用検索 API にクエリを送らずに済みます。また、スキルの信頼境界がどこにあるかも明確になります。スキルが返す内容は、見知らぬ第三者が書いたテキストだからです。
このような形式の価値は、能力を共有できることです。誰かが特定の作業向けのスキルを作成して公開し、他の人がそれを追加します。この手軽さには別の側面もあります。スキルは見知らぬ第三者が作成したコードであり、エージェントはためらわずに実行します。そのため、自分で作成していないものは、読み込む前に自分でホストするセキュリティスキャナーにかける価値があります。独自のエージェントを構築する場合は、早い段階で小さく明確な拡張形式を定義すると、後からすべての機能をコアにハードコードせずに済みます。
自分でモデルを用意する
OpenClaw はモデルに依存しません。独自の言語モデルは同梱していません。代わりに、ホスト型 API または自分で運用するモデルなど、選択したモデルに接続します。
この分離は、コスト、プライバシー、制御性に関わります。ホスト型 API では、管理するハードウェアなしで高性能なモデルを利用できます。ただし、トークン単位の料金がかかり、プロンプトがサーバーの外部に送信されます。Ollama などで提供する自己ホスト型モデルでは、すべてのメッセージを自分の環境内に保持できます。必要な費用はハードウェアと電力だけですが、より小規模または低速なモデルを運用することになります。両方を組み合わせる利用者も多くいます。エージェントを完全に非公開にしたい場合は、VPS 上でモデルを自己ホストすることが最後に残る外部依存を解消します。比較対象として、Hermes Agent も自己ホスト型エージェントの候補です。
自作するべきでしょうか?
これらはすべて自分で構築できます。構成要素は特殊なものではありません。daemon、いくつかのチャットコネクター、モデルとツールのループ、Markdown のフォルダー、そして plugin 形式です。これらを理解することには実用的な価値があります。利用するすべての agent の仕組みが明確になり、危険が存在する場所も正確に把握できるためです。
ただし、多くの人にとっての正直な答えは、同じものを作り直すのではなく、実際のものを動かして堅牢化することです。OpenClaw はすでにコネクター、ループ、スキル形式を解決しており、実際にセキュリティ面でも検証されています。自分で正しく対応すべき部分、つまり自分のサーバーでのセットアップと堅牢化に労力をかけるほうが有効です。まず学習を優先するなら、概念を段階的に学んでいくほうが、エージェントのソースコードをいきなり読むより効果的です。各段階で、実際に構築したものが1つ手元に残るためです。学習目的なら小さなものを1つ作ってください。利用目的なら実際のものを動かし、アクセスを制限して堅牢化してください。
基本的な内容については、VPS 上で独自の AI agent を構築するを参照してください。Claude を使って agent を構築するでは、同じ考え方を特定のモデルを中核として説明しています。
FAQ
OpenClawのようなエージェントを構築するのは難しいですか?
個々の部品は難しくありません。gatewayプロセス、チャットコネクター、モデルとツールのループ、ファイルのフォルダーは、それぞれ単体なら簡単に実装できます。難しいのは、安全に動作させることです。チャットメッセージからシェルコマンドを実行するエージェントは、重大なセキュリティリスクになります。サンドボックス、権限、非特権ユーザーの設定を正しく構成する作業は、機能を接続する作業よりも大変です。
OpenClawがデータベースではなくMarkdownファイルにメモリを保存するのはなぜですか?
単一ユーザー向けの個人エージェントなら、ファイルで十分であり、はるかに単純だからです。実行するデータベースサービスがなく、メモリを簡単に読み取って手動で修正できます。エージェントを別のサーバーへ移す場合も、ディレクトリをコピーするだけです。データベースが必要になるのは、より大規模な運用の場合です。
個人向けAIエージェントで最も危険な部分は何ですか?
エージェントに操作を許可するツールです。シェルコマンドの実行、ブラウザーの制御、ファイルへの書き込みが該当します。これらはエージェントを構築する理由であると同時に、被害を受ける原因にもなります。2026年3月にOpenClawが公開した一連のセキュリティアドバイザリは、3月13日から16日までに27件、その中に9.9評価のCriticalが2件含まれており、ツール層を慎重に扱うべきことを明確に示しています。非特権ユーザーで実行し、破壊的な操作には制御を設け、実行をサンドボックス化してください。
構築するために自分の言語モデルが必要ですか?
いいえ。OpenClawのようなエージェントはモデルに依存しないため、任意のモデルを接続できます。最も高性能なモデルを使う場合はホスト型APIを利用でき、完全なプライバシーを重視する場合は自分で実行するモデルを選べます。Ollamaで自己ホストすれば、すべてのメッセージを自分のサーバー内に保持できますが、より小さなモデルを実行する必要があります。