OpenClaw で個人アシスタントを構築する
OpenClaw は、Discord、Google Chat、iMessage、Matrix、Microsoft Teams、Signal、Slack、Telegram、WhatsApp、Zalo などを AI エージェントに接続するセルフホスト型 Gateway です。このガイドでは「個人アシスタント」構成、つまり、常時稼働する AI アシスタントとして振る舞う専用の WhatsApp 番号を使うセットアップを扱います。⚠️ まず安全性を優先
あなたはエージェントを、次のことができる立場に置くことになります。- あなたのマシン上でコマンドを実行する(tool policy による)
- ワークスペース内のファイルを読み書きする
- WhatsApp/Telegram/Discord/Mattermost やその他の同梱チャンネル経由でメッセージを外部送信する
- 必ず
channels.whatsapp.allowFromを設定する(個人の Mac で世界中から開放された状態では絶対に運用しない) - アシスタントには専用の WhatsApp 番号を使う
- heartbeat は現在デフォルトで 30 分ごとです。セットアップを信頼できるようになるまでは
agents.defaults.heartbeat.every: "0m"を設定して無効化してください
前提条件
- OpenClaw のインストールとオンボーディングが完了していること — まだなら はじめに を参照してください
- アシスタント用の 2 つ目の電話番号(SIM/eSIM/プリペイド)
2台のスマートフォン構成(推奨)
目指す構成はこれです。 個人用の WhatsApp を OpenClaw にリンクすると、あなた宛てのすべてのメッセージが「agent input」になります。多くの場合、それは望ましい挙動ではありません。5 分でできるクイックスタート
- WhatsApp Web をペアリングする(QR が表示されるので、アシスタント用スマートフォンでスキャンします):
- Gateway を起動する(起動したままにします):
- 最小構成の config を
~/.openclaw/openclaw.jsonに置く:
gateway.auth.token)を使いますが、gateway.auth.mode を password に切り替えている場合は password auth でも動作します。後で再度開くには openclaw dashboard を使います。
エージェントにワークスペースを与える(AGENTS)
OpenClaw は、ワークスペースディレクトリーから操作指示と「記憶」を読み取ります。 デフォルトでは、OpenClaw は~/.openclaw/workspace をエージェントのワークスペースとして使い、セットアップ時または初回のエージェント実行時に自動でそれを作成します(加えて、初期の AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md、HEARTBEAT.md も作成します)。BOOTSTRAP.md はワークスペースがまったく新しい場合にのみ作成されます(削除後に再び現れてはいけません)。MEMORY.md は任意です(自動作成されません)。存在する場合は通常セッションで読み込まれます。サブエージェントのセッションでは AGENTS.md と TOOLS.md だけが注入されます。
ヒント: このフォルダーは OpenClaw の「記憶」と考え、AGENTS.md と記憶ファイルをバックアップできるよう git リポジトリー(理想的には非公開)にしてください。git がインストールされていれば、まったく新しいワークスペースは自動で初期化されます。
agents.defaults.workspace で別のワークスペースを選べます(~ をサポート)。
「アシスタント」にするための config
OpenClaw は優れたアシスタント構成をデフォルトで備えていますが、通常は次を調整したくなるでしょう。SOUL.mdの persona/instructions- 思考のデフォルト値(必要なら)
- heartbeat(信頼できるようになったら)
セッションと記憶
- セッションファイル:
~/.openclaw/agents/<agentId>/sessions/{{SessionId}}.jsonl - セッションメタデータ(トークン使用量、最後のルートなど):
~/.openclaw/agents/<agentId>/sessions/sessions.json(旧形式:~/.openclaw/sessions/sessions.json) /newまたは/resetは、そのチャットの新しいセッションを開始します(resetTriggersで設定可能)。単独で送信された場合、エージェントは短い挨拶で返信し、リセットを確認します。/compact [instructions]はセッションコンテキストを圧縮し、残りのコンテキスト予算を報告します。
heartbeat(能動モード)
デフォルトでは、OpenClaw は 30 分ごとに次のプロンプトで heartbeat を実行します:Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.
無効化するには agents.defaults.heartbeat.every: "0m" を設定します。
HEARTBEAT.mdが存在しても、実質的に空(空行と# Headingのような Markdown 見出しだけ)の場合、OpenClaw は API 呼び出しを節約するため heartbeat 実行をスキップします。- ファイルが存在しない場合でも heartbeat は実行され、何をすべきかはモデルが判断します。
- エージェントが
HEARTBEAT_OKで返信した場合(必要に応じて短い余白を含んでも可。agents.defaults.heartbeat.ackMaxCharsを参照)、OpenClaw はその heartbeat の外向き配信を抑制します。 - デフォルトでは、DM 形式の
user:<id>宛先への heartbeat 配信は許可されています。heartbeat 実行は維持したまま直接宛先への配信を抑制するにはagents.defaults.heartbeat.directPolicy: "block"を設定します。 - heartbeat は完全なエージェントターンとして実行されます。間隔が短いほどトークン消費は増えます。
メディアの入出力
受信した添付ファイル(画像/音声/ドキュメント)は、テンプレートを通してコマンドに渡せます。{{MediaPath}}(ローカルの一時ファイルパス){{MediaUrl}}(疑似 URL){{Transcript}}(音声文字起こしが有効な場合)
MEDIA:<path-or-url> を含めてください(空白なし)。例:
tools.fs.workspaceOnlyがtrueの場合、送信用のMEDIA:ローカルパスは OpenClaw の temp ルート、media cache、agent workspace のパス、sandbox が生成したファイルに制限されます。tools.fs.workspaceOnlyがfalseの場合、送信用のMEDIA:には、エージェントがすでに読み取りを許可されているホストローカルファイルを使えます。- ホストローカル送信では、引き続きメディアと安全なドキュメント種類(画像、音声、動画、PDF、Office ドキュメント)のみが許可されます。プレーンテキストや秘密情報らしいファイルは送信可能なメディアとして扱われません。
運用チェックリスト
/tmp/openclaw/ 配下にあります(デフォルト: openclaw-YYYY-MM-DD.log)。
次のステップ
- WebChat: WebChat
- Gateway 運用: Gateway runbook
- Cron + wakeup: Cron jobs
- macOS メニューバーコンパニオン: OpenClaw macOS app
- iOS ノードアプリ: iOS app
- Android ノードアプリ: Android app
- Windows の状況: Windows (WSL2)
- Linux の状況: Linux app
- セキュリティ: Security