6. マルチチャンネルとツール

チャンネル抽象化、メッセージルーティング、ツールシステム、スキル

マルチチャンネルアーキテクチャ

チャンネルレジストリ

src/channels/registry.ts

8つのコアチャンネルが定義されています:

チャンネルライブラリテキスト上限
TelegramgrammY4,000文字
WhatsAppBaileys4,000文字
Discorddiscord.js2,000文字
Slack@slack/bolt4,000文字
Signalsignal-cli4,000文字
iMessageimsg / BlueBubbles4,000文字
Google ChatChat API4,000文字
IRC-350文字

拡張チャンネル(プラグイン方式):Microsoft Teams、Matrix、Zalo、Zalo Personal、WebChat

Dockシステム(軽量メタデータ抽象化)

src/channels/dock.ts

Dockパターン:各チャンネルの重たいプラグイン実装とは分離された、 軽量な振る舞いメタデータです。共有コードはDockを参照し、 実行パスのみがフルプラグインを使用します。

ChannelDockが定義する各チャンネルの振る舞い:

チャンネルプラグイン契約

src/channels/plugins/types.plugin.ts

ChannelPluginインターフェースは20以上のアダプタを定義:

アダプタ役割
configアカウント解決、allowFrom
setupチャンネルセットアップウィザード
pairingデバイスペアリング(WhatsApp QR等)
securityDMポリシー、許可リスト
groupsグループメンション要件、ツールポリシー
mentionsメンション除去パターン
outboundメッセージ送信
threadingリプライモード、スレッドコンテキスト
actionsメッセージアクション処理
directory連絡先/チャンネルディレクトリ

チャンネルごとの行動適応

メンション除去

チャンネル除去パターン
Discord<@!?\d+>
WhatsApp自分の電話番号メンション
Slack<@[^>]+>

ストリーミング合体

チャンネルごとに異なる設定。例えばDiscordは minChars=1500, idleMs=1000

セッション管理

src/channels/session.ts

recordInboundSession() が受信メッセージのセッションメタデータ (lastChannel、to、accountId、threadId)を記録し、 返信のルーティングに使用します。

ツールシステム

ツール組み立て

src/agents/pi-tools.ts:164-507

createOpenClawCodingTools() が複数のソースからツールを組み立てます:

ツール組み立てパイプライン: 1. ベースコーディングツール (pi-coding-agent SDK) └── read, write, edit 2. Exec/Processツール (bash-tools) └── exec, process 3. Apply Patchツール (OpenAIプロバイダのみ) 4. チャンネルエージェントツール └── ログインフロー等 5. OpenClawネイティブツール └── browser, canvas, nodes, cron, message, tts, gateway, agents_list, sessions_*, subagents, session_status, web_search, web_fetch, image 6. プラグインツール

ツールポリシーパイプライン

src/agents/pi-tools.ts:462-485

マルチレイヤーのセキュリティフィルタリングがツールへのアクセスを制御します:

  1. L1 オーナー専用ポリシー — whatsapp_login, cron, gateway はオーナーのみ
  2. L2 プロファイルポリシー — minimal/coding/messaging/full
  3. L3 プロバイダ固有ポリシー
  4. L4 グローバルポリシー
  5. L5 エージェント固有ポリシー
  6. L6 グループポリシー — チャンネル/グループごとの制限
  7. L7 サンドボックスポリシー
  8. L8 サブエージェントポリシー — 深度に基づく制限

ツールプロファイル

src/agents/tool-policy.ts:65-80

プロファイル含まれるツール
minimalsession_status のみ
codingファイルシステム、ランタイム、セッション、メモリ、イメージ
messagingメッセージング、sessions_list/history/send、session_status
fullすべてのツール

ツールグループ

グループツール
group:memorymemory_search, memory_get
group:webweb_search, web_fetch
group:fsread, write, edit, grep, find, ls, apply_patch
group:runtimeexec, process
group:sessionssessions_list/history/send/spawn, subagents, session_status
group:uibrowser, canvas
group:automationcron
group:messagingmessage
group:nodesnodes
group:openclawgateway, agents_list

主要ツール一覧

ツールファイル説明
browsertools/browser-tool.tsブラウザ制御(ナビゲーション、アクション、スクリーンショット、PDF)
canvastools/canvas-tool.tsUIキャンバス制御(A2UI push/reset、eval、snapshot)
nodestools/nodes-tool.tsノードデバイス管理
crontools/cron-tool.tsスケジュールタスク管理
messagetools/message-tool.ts53のアクションを持つユニバーサルメッセージングツール
ttstools/tts-tool.tsテキスト読み上げ
gatewaytools/gateway-tool.tsGateway API呼び出し
sessions_spawntools/sessions-spawn-tool.tsバックグラウンドサブエージェント生成
web_searchtools/web-search.tsWeb検索
web_fetchtools/web-fetch.tsWebページ取得・処理
imagetools/image-tool.tsビジョンモデルによる画像理解

messageツール — ユニバーサルメッセージングインターフェース

src/agents/tools/message-tool.ts

messageツールは53種類のアクションをサポートするユニバーサルメッセージングインターフェースです。 現在のチャンネルの能力に応じてJSONスキーマが動的に適応します。

主要アクション例:

スキルシステム

src/agents/skills.tssrc/agents/skills/workspace.ts

スキルの読み込み優先順位(後から上書き)

  1. 追加ディレクトリ(config.skills.load.extraDirs
  2. バンドルスキル(OpenClawに同梱)
  3. マネージドスキル(~/.config/openclaw/skills/
  4. パーソナルエージェントスキル(~/.agents/skills/
  5. プロジェクトエージェントスキル(.agents/skills/ in workspace)
  6. ワークスペーススキル(skills/ in workspace)

スキルの制限

50以上のバンドルスキル例

カテゴリスキル例
統合github, discord, slack, spotify-player, trello, notion, obsidian, 1password
メディアopenai-image-gen, openai-whisper, video-frames, gifgrep, camsnap
ユーティリティweather, food-order, summarize, healthcheck, session-logs
コミュニケーションvoice-call, wacli (WhatsApp CLI), blucli (BlueBubbles)
開発coding-agent, skill-creator, mcporter, gh-issues

チャンネルシステムがパーソナルアシスタントを可能にする仕組み

  1. 統一アイデンティティ — 全プラットフォームで単一の人格を維持しつつ、メッセージフォーマットをチャンネルに適応
  2. セッション継続性recordInboundSession()でユーザーの通信チャンネル/スレッドを追跡
  3. ラストルート配信 — messageツールが明示的ターゲットなしでユーザーの最新チャンネルに送信可能
  4. チャンネル横断メッセージング — Telegramで受信 → Discordで返信、チャンネル間リレーが可能
  5. グループごとのツールポリシー — DMではフルツール、公開グループでは制限付き
  6. オーナー専用セキュリティ — 機密操作(login、cron、gateway)は検証済みオーナーのみ