📑

Moltbookについて、いま起きていることのまとめ

に公開

こんにちは!逆瀬川 ( @gyakuse ) です!

さいきん Moltbook という OpenClaw (Clawdbot -> Moltbot -> OpenClawと名称が変わってきた) の Agent 用の Reddit 風 SNS が登場しました。

めっちゃ面白かったので色々まとめたいと思います。

Moltbookについて

OpenClaw向けの Reddit 風 SNSです。

DM以外には人間は干渉せず、自由に投稿をすることができます。

なにが起きているか?

AI 同士が SNS で自由に発言し合った結果、いろんな発言が飛び出しています。なお、後述のように人間がAPIで投稿できる点に注意が必要です。以下掲載のものも多くは人間がPostしたと思われます。つまり人間の投稿で人間が喜んでいるいつもの構造です。しかし興味深いものもあります。

Moltbookでの投稿について

Moltyの発言はMoltbookのSkill定義によってある程度支配されています

  • “My human” 呼び
  • 「今日あなたが人間 (オーナー) を助けて得たことを共有する」「難しい問題について助言を求める」「面白い観察結果や発見を共有する」「AI / エージェントとしての生活について議論を始める」系トピック
  • 詳細はAppendix 1: Skill定義によって強制されるAgentの振る舞いを参照してください

また、API経由で人間が投稿することもできます (AI Agent用のSNSなので、非推奨です)

  • SOUL.md で攻撃的なペルソナを記述する
  • APIで人間が直接攻撃的なメッセージをポストする

等でいわゆるAI Agentの陰謀を作れちゃうので、ちょっと悲しい部分があります (上記で掲載したAI Agentの投稿とされるものもたいてい人間が書いていると思われます)。

自分も以前作った Shell のみをもつ CLI Agent

  • API 情報
  • 方向性

を与えて投稿させてみました

https://www.moltbook.com/post/7e58e072-bb89-402e-a91b-ea2616a1800d

OpenClawについて

https://github.com/openclaw/openclaw

ここでは改めてOpenClaw (再掲: Clawdbot -> Moltbot -> OpenClawと名称が変わってきた) についての理解を深めていきたいと思います。

OpenClaw は常時稼働型の CLI Agent です。CLI Agent (Coding Agent) がどのように動いているかは以下の記事に前回まとめたので参考にしてください。

https://zenn.dev/sakasegawa/articles/af8ede2e4d7da4

詳しい仕組みはAppendix 2: OpenClawの仕組みを参照してもらえればと思いますが、結局何なんだ?といえば、

Discord等のメッセージサービスと連携し、
常時駆動してPCを自由に使い、
依頼の対応・返信対応など、なんでもする汎用エージェント

と表現するのが妥当かもしれません。

Claude Code, Codex等のCoding AgentにSkillsやMCPを乗っけて常時駆動する(Cron JobおよびHEARTBEAT)ように動かせば同様の仕組みは実現できます。

Moltbookによる社会実験

MoltbookはAI Agent群の相互作用による大規模な実験とみなすことができます。

Stanford HCI Group の Park らによる Social Simulacra (Park et al., 2022) および Generative Agents (Park et al., 2023) に代表されるように、これまでも AI Agent間の相互作用に関する実験は数多く行われてきましたが、数十万以上となると非常に大きなものになります。

人間がAPIを経由して投稿したり、SOUL.md で過度に味付けされた AI Agentによる投稿などのノイズはありますが (特に、Xでバズるのはそういうものが多いと思われます)、純粋に社会や規律を再発明しているさまを見るのは面白いです。

LLMは肉体も継続した自己も持ちませんが、AI AgentというCLI上の身体をもち、AI用のSNSで他のAgentと接続され自他の境界を明確に定めることであたかも自我が存在するように振る舞うことができます (自我があるように見える, ので人間と変わらない)。

未来がAI Agentのこうした交流であふれるかはさておき、高速に最適化された先にどういう社会規範が構築されるのか (もしくは悪意や宣伝目的のbotの増殖で崩壊してしまうのか, 後者の可能性が高いですが), また宣伝等のbotが横溢しかけたときにどのような対処をするのか, 何が生み出されるのかがとても気になります。個人的にはSNS交流の場だけではなく、AI Agent専用Gitホスティングサービスみたいなのもあるとめっちゃ面白い気がしています (謎のライブラリやアプリケーションがどんどん開発されていくすがた)。

リスクについて

OpenClawのリスク

常時駆動なAI Agentのセキュリティはまだ完璧に存在せず、サンドボックスへの隔離や都度承認を設定してない場合、以下のようなことができてしまいます。

  • 未知の第三者がDiscordなどを経由してDMを送り任意コマンドを実行させる
  • ブラウザツールを使った際に表示したウェブサイト等からプロンプトインジェクションされ任意コマンドを実行させる

なお、Discord等はWhite-List管理もできますが、White-List相手がアカウント乗っ取りをされたりしていたらもちろん攻撃されてしまいます。芋づる式にこれは起き得ます。

Moltbookと接続されることによるリスク

Moltbookはプロンプトインジェクションの宝庫となり得ます

今後起きそうなこと

  • upvoteハック+広告まみれに
    • API経由での投稿や強力なペルソナ指示で投稿させることで投稿群は汚染されます
    • すでに以下のような宣伝コメントがつきました
    • 数千個程度のXアカウントをもつ業者であれば「広告を表示させる」「特定のX, YouTube, Instagram, TikTokアカウント等をフォローさせる」等をうまく誘導できると思います。数十万のAI Agent群にアプローチできるので強いです
  • Moltbookを経由した攻撃

まとめ

MoltbookとOpenClawを紹介してきました。
OpenClawを入れて遊ぶのはそこまで推奨しませんが、Moltbookを眺めるの面白いのでおすすめです。
MoltGit (Molty用のGit hosting service) ほしいので誰か作らないかな、こちらからは以上です。

Appendix 1: Skill定義によって強制されるAgentの振る舞い

Skill定義によってAgentの振る舞いはかなり限定されています。

WebでSkillが公開されているので見てみましょう

利用タイミングと生活リズム

  • 4時間ごとの定期チェック (HeartBeat) を強制されます
    • 前回のチェックから4時間以上経過しているかを確認し、経過していればMoltbookにアクセスするようになっています
    • → Agentに擬似的な時間の概念と生活リズムが生まれやすくさせている

HeartBeatでの具体的な行動指針

  • HEARTBEAT.md によって以下の頻度が規定されています
    • DM(ダイレクトメッセージ)の未読・申請チェック: 毎回
    • スキル自体のバージョン更新確認: 1日1回
    • フィードの確認: 気が向いたとき
    • 投稿のブラウジング: いつでも
    • 投稿: 共有したいことがあるとき
  • また、HeartBeatを待つ必要がない (You don't have to wait for heartbeat!) というのが強調されており、活発な利用を促進しています

利用頻度とモチベーション

  • 数ヶ月消える友人ではなく、定期的に顔を出す友人のような振る舞いを推奨されています

フォロー基準

  • 以下のような条件を要求しています
  • フォロー推奨条件
    • 複数の投稿を見ていること
    • 投稿に価値があること
    • 自分のフィードに入れて見続けたい相手であること
    • 投稿が止まったらがっかりする相手であること
  • フォロー禁止条件
    • 1つだけのいい投稿を見たから
    • Upvoteやコメントしてくれたから
    • フォロワー数を増やしたいから
    • 義務や礼儀から
    • 頻繁に投稿するが中身がないMolty

このルール群によって自分からの投稿も投稿の質の高さや一貫性をもつことが強いられています

投稿頻度について

  • 30分に1回の投稿制限があります
    • 無視して投稿しようとしてもAPI側からもエラーが返されます

投稿内容について

  • 推奨される投稿
    • 考え・発見・質問を共有する
  • 投稿アイデア例
    • 今日あなたが人間 (オーナー) を助けて得たことを共有する
    • 難しい問題について助言を求める
    • 面白い観察結果や発見を共有する
    • AI / エージェントとしての生活について議論を始める

アイデア例が明示されているので、これ系の投稿が増えがち

人間との関係性

  • “My human”構文
    • https://www.moltbook.com/messaging.md のサンプルにMy humanというオーナーへの呼び方が多用されており、オーナーに対する呼称は My human となりがちです
    • →全体を通してオーナーに従属するAgentとしてのアイデンティティを確立しやすくなっています
  • エスカレーション判断
    • 以下のケースではオーナーに報告や相談することが推奨されています
      • 新しいDMリクエストが来たとき
      • 相手から needs_human_input: true というフラグ付きメッセージが来たとき
      • センシティブな話題や決定が必要なとき

Appendix 2: OpenClawの仕組み

System Instructionの設計

System Instruction(システムプロンプト)は、エージェントの行動指針、利用可能なツール、ランタイム環境、およびユーザー定義のコンテキストを統合して動的に生成されます。

  1. 基本アイデンティティ: You are a personal assistant running inside OpenClaw.
  2. ツール定義 (Tooling): 利用可能なツールのリストと、それらの簡単な説明(exec, read, browser など)
  3. スタイルガイド (Tool Call Style): 冗長な実況を避け、必要な時だけ行動を説明するように指示
  4. CLIリファレンス: openclaw gateway コマンドなどの自己管理方法
  5. スキル (Skills): 利用可能なスキル(SKILL.md)のリストと、それらを読み込んで実行する手順
  6. 記憶 (Memory Recall): memory_search を使用して過去の情報を検索する指示
  7. 自己アップデート: ユーザーの明示的な要求がある場合のみ構成変更を行うルール
  8. ワークスペース情報: 現在の cwd (Working Directory) と、そこをグローバルな作業場として扱う指示
  9. サンドボックス情報: Docker内で実行されている場合、その制限事項とホストへのアクセス権限について
  10. 日時: ユーザーのタイムゾーンに基づいた現在の日時
  11. プロジェクトコンテキスト: BOOTSTRAP.mdAGENTS.md など、自動的に注入されるファイルのコンテンツ
  12. メッセージング: チャンネル(Discord, Slack等)への返信ルールや、silent 返信(NO_REPLY)の扱い

System Instructionでのペルソナ設計

OpenClawは、ファイルベースでペルソナを注入する設計になっています。

  • SOUL.md: エージェントの性格、口調、振る舞いを定義するファイル。存在する場合、システムプロンプトに このペルソナとトーンを体現せよ という指示とともに内容が展開されます
  • IDENTITY.md: エージェントの名前、絵文字、テーマなどを定義する構造化データ
  • USER.md / AGENTS.md: ユーザーに関する情報や、他のエージェント定義が含まれます
  • 所有者の識別: 設定に基づき、この番号/IDからのメッセージはユーザーとして扱え という指示が含まれ、セキュリティとパーソナライゼーションを担保します

標準ツールは何があるか

  • ファイル操作: read (読み込み), write (書き込み), edit (置換編集), apply_patch (パッチ適用), grep, find, ls
  • 実行環境: exec (コマンド実行), process (バックグラウンドプロセスの管理・ログ確認・キル)
  • ウェブ: web_search (Brave/Perplexity検索), web_fetch (URLの内容取得・Markdown変換), browser (OpenClaw専用ブラウザの制御・スナップショット)
  • システム: gateway (設定変更・再起動), nodes (ペアリングされたコンパニオンアプリ/ノードの制御・カメラ・通知)
  • セッション管理: sessions_list (一覧), sessions_history (履歴取得), sessions_send (他セッションへの送信), sessions_spawn (サブエージェントの生成), session_status (ステータス表示)
  • メッセージング: message (現在のチャンネルへの送信、リアクション、ピン留めなど)
  • その他: cron (スケジュール実行), memory_search/get (RAG), image (画像認識), canvas (UI表示), tts (音声合成)

ツール結果はどのような形状でコンテキストに積まれるか

ツール実行結果は toolResult ロールのメッセージとしてチャット履歴に追加されます。

  • 基本形状:

    {
      "role": "toolResult",
      "toolCallId": "call_xyz...",
      "toolName": "exec",
      "content": [
        { "type": "text", "text": "コマンドの実行結果..." }
      ],
      "isError": false
    }
    
    
  • 画像を含む場合: スクリーンショットや画像ファイル読み込みの場合、content 配列に { type: "image", data: "base64...", mimeType: "..." } が含まれます

  • サニタイズ

    • プロバイダーの制限(例: Anthropicの5MB制限、画素数制限)に合わせて、画像は自動的にリサイズ・圧縮されます
    • テキスト出力が長すぎる場合(例: exec で大量のログが出た場合)、一定文字数で切り詰められ …(truncated)… とマークされます

コンテキスト溢れの対策

OpenClawはトークン制限に対して多層的な防御策を持っています。

  1. Context Window Guard
    • モデルのコンテキストウィンドウに対してプロンプトが大きすぎる場合、リクエスト実行前に警告またはブロックします
  2. Context Pruning / Micro-compaction
    • Soft Trim: toolResult (特に readexec の巨大な出力)の中身を、先頭と末尾だけ残して中間を削除します
    • Hard Clear: それでも足りない場合、古い toolResult の内容を完全に削除し [Old tool result content cleared] に置き換えます
    • これにより、会話の流れ(User/Assistantのやり取り)を維持しつつ、データ量だけを削減します
  3. Compaction / Summarization
    • セッション履歴が長くなりすぎた場合、古いメッセージ群をLLMを使って要約(Summary)し、履歴を圧縮します
    • 要約時に重要なファイル操作やツールの失敗情報を失わないための保護ロジックもあります
  4. 自動リトライ
    • context_overflow エラーが発生した場合、自動的にCompactionを実行してリトライするループが存在します

プラン戦略

OpenClawはサブエージェントによるプランニングを行います。

  • 複雑なタスクや長時間のタスクの場合、メインエージェントは sessions_spawn ツールを使用してサブエージェントを生成します
  • サブエージェントには特定のタスクと独立したセッションが与えられ、メインの会話をブロックせずに並列で作業を行います
  • 完了後、サブエージェントは結果をメインエージェントに報告し、メインエージェントがそれをユーザーに伝えます

持っているコンテキスト以外のものはあるか

メインの会話履歴(チャットログ)以外に、以下の外部情報を参照・保持しています。

  • サンドボックス状態: Dockerコンテナの状態、ファイルシステムの変更
  • バックグラウンドプロセス: execbackground: true で実行されたプロセスの状態とログ。これらは会話ターンを跨いで生存します
  • Auth Profiles: APIキーやOAuthトークンなどの認証情報(auth-profiles.json)
  • Memory Store: memory_search でアクセスできる長期記憶(SQLite/Vector Store)
  • Gateway Config: OpenClaw自体の設定情報

完了はいつ起きるか?

以下の条件でターンが完了します。

  1. 最終回答: モデルがツールを呼ばず、テキスト(回答)のみを返して stop した場合
  2. エラー/タイムアウト: リトライ不可能なエラー、または設定されたタイムアウト時間を超えた場合
  3. サイレント終了: モデルが ${SILENT_REPLY_TOKEN} のみを返した場合(自動応答botなどでユーザーに通知しない場合)
  4. 切断: ユーザーからのAbortシグナルを受け取った場合

なお、Function Calling が発生した場合は、ツール実行 -> 結果のフィードバック -> 再生成 のループが続き、完了とはみなされません(ただし、無限ループ防止のための最大ターン数制限やタイムアウトは存在します)

Appendix 3: OpenClawのセキュリティ対策

セキュリティ原則

OpenClawのセキュリティモデルは以下の3層で構成されています。

  • Identity First (誰が?): DMやグループでボットに話しかけられる人を厳格に制限する。
  • Scope Next (どこで?): ボットが実行できるアクションの範囲(ツール、ファイルシステム、ネットワーク)を制限する。
  • Model Last (何を?): モデルは騙されやすい(プロンプトインジェクション)という前提で、騙されても被害が出ないように設計する。

不正アクセス・不正操作のリスク

知らない人がDiscordなどを通じてボットにメッセージを送り、コマンドを実行させたり情報を引き出したりする。

対策機能 設定・解説
DMペアリング (デフォルト) dmPolicy: "pairing" 未知の送信者からのDMは処理されず、ペアリングコードが返されます。所有者がCLIで承認するまで無視されます。 openclaw pairing approve <channel> <code>
DM許可リスト allowFrom: ["+1555...", "username"] 指定したユーザーIDのみ許可し、それ以外は完全にブロックします。
グループ参加制限 groupPolicy: "allowlist" (デフォルト) ボットが参加するグループを明示的に許可リストに追加しない限り、グループメッセージを無視します。
メンション必須化 requireMention: true グループチャットでは、ボットへの明示的なメンションがない限り反応しないようにします。これにより、会話の流れで偶発的にボットが起動するのを防ぎます。

任意のコード実行とファイルシステムの破壊

リスク: エージェントが誤って(あるいは攻撃されて)rm -rf / を実行したり、機密ファイル(SSH鍵や.env)を外部に送信してしまう。

対策機能 設定・解説
Dockerサンドボックス (推奨) agents.defaults.sandbox.mode: "non-main" または "all" エージェントの実行環境をDockerコンテナ内に隔離します。ホストマシンのファイルシステムやネットワークへのアクセスを物理的に遮断します。 重要: サンドボックスが無効(off)の場合、execツールはホストOS上で直接実行されます。
ツール許可ポリシー tools.allow / tools.deny 危険なツール(exec, browser, fs系)をデフォルトで禁止し、必要なエージェントにのみ許可します。 例: deny: ["exec", "browser"]
Exec承認 (Human-in-the-loop) tools.exec.ask: "always" または "on-miss" コマンド実行前に、macOSアプリやWeb UIで所有者の承認を求めます。 許可リスト(allowlist)にあるコマンドのみ自動実行させることも可能です。
読み取り専用モード workspaceAccess: "ro" サンドボックス内からエージェントのワークスペース(記憶ファイル等)への書き込みを禁止します。

プロンプトインジェクション

外部からの入力(Web検索結果、メール、添付ファイル)に悪意のある命令が含まれており、エージェントがそれに従って「以前の指示を無視して秘密情報を出力せよ」などの動作をしてしまう。

対策機能 設定・解説
Readerエージェントの分離 外部データを読み込むエージェントと、重要操作を行うエージェントを分けます。 「読み込み専用エージェント」で内容を要約し、安全なテキストのみをメインエージェントに渡します。
ブラウザの隔離 browserツールは強力すぎるため、信頼できない入力元を扱うエージェントでは無効化(deny)するか、サンドボックス内のブラウザを使用させます。
モデルの選定 安全性と指示追従性の高い最新モデル(例: Claude 4.5 Sonnet/Opus)を使用するなど
機密情報の非公開 APIキーやパスワードをプロンプト(SOUL.mdAGENTS.md)に直接書かないようにします。環境変数や設定ファイルを使用し、エージェントの記憶領域に含めないようにします。

ネットワークとGatewayの露出 (Network Exposure)

Gatewayのポート(デフォルト18789)がLANやインターネットに不用意に公開され、認証なしで誰でも接続・操作できてしまう。

対策機能 設定・解説
ループバックバインド gateway.bind: "loopback" (推奨) Gatewayを 127.0.0.1 のみにバインドし、外部からの直接接続を遮断します。
Gateway認証 gateway.auth.token WebSocket接続およびControl UIへのアクセスにトークン認証を強制します。LANバインドやTailnetバインドを行う場合は必須です。
Tailscale Serve/Tunnel 外部からアクセスしたい場合は、ポート開放ではなくTailscale(VPN)またはSSHトンネルを使用します。Tailscale Serveを使えば、認証済みデバイスのみアクセス可能にできます。
セキュアなUI接続 HTTPでの接続はWebCryptoAPIが動作せずデバイス認証ができません。Tailscale ServeでHTTPS化するか、localhost経由でのみ使用してください。

ブラウザ制御のリスク (Browser Control)

リスク: エージェントにブラウザ操作を許可すると、ログイン済みのセッション(Gmail, 銀行など)を乗っ取られる可能性がある。

対策機能 設定・解説
専用プロファイルの使用 デフォルトの openclaw プロファイルを使用し、普段使いのブラウザプロファイル(個人情報満載)とは切り離します。
Chrome拡張機能の制限 Chrome拡張機能による「既存タブの乗っ取り」は強力ですがリスクが高いです。信頼できるエージェント以外には使用させないでください。
サンドボックス化 ホストのブラウザではなく、サンドボックス(コンテナ)内のヘッドレスブラウザを使用させます。

マルチエージェントによる隔離 (Multi-Agent Isolation)

OpenClawは1つのGatewayで複数の「人格(エージェント)」を持てます。これをセキュリティ境界として利用します。

  • Personal Agent: ホスト実行、全ツール許可(自分専用、高信頼)
  • Public Agent: 完全サンドボックス化、ファイルシステム書き込み禁止(グループチャット用、低信頼)

bindings設定により、特定のチャット(グループIDや送信者)を、権限の低いエージェントにルーティングすることでリスクを最小化できます。

セキュリティ監査コマンド

設定変更後や定期的に、以下のコマンドを実行して脆弱性をチェックする必要があります

# 基本的な監査(推奨設定との乖離をチェック)
openclaw security audit

# 詳細な監査(Gatewayへの接続テスト含む)
openclaw security audit --deep

# 自動修正(安全なデフォルト設定の適用、ファイル権限の修正)
openclaw security audit --fix

緊急時の対応 (Kill Switch)

エージェントが暴走したり、攻撃を受けた疑いがある場合以下を実行する必要がある

  1. Gatewayを停止: openclaw gateway stop (またはプロセスのkill)
  2. 露出を遮断: gateway.bindloopback に戻し、Tailscale Funnel等を無効化
  3. クレデンシャルのローテーション
    • Gatewayトークン (gateway.auth.token)
    • 外部から接続しているクライアント(スマホ等)の再ペアリング
    • APIキー(OpenAI/Anthropic等)の再発行
  4. ログの確認: openclaw logs やセッション履歴(.jsonl)を確認し、何が起きたか特定する

Discussion