OpenClawでパーソナルアシスタントを構築する

OpenClaw は、Pi エージェント用の WhatsApp + Telegram + Discord + iMessage ゲートウェイです。プラグインで Mattermost にも対応します。このガイドでは「パーソナルアシスタント」としてのセットアップ方法を解説します。専用の WhatsApp 番号を用意し、常時稼働するエージェントとして動かす構成です。

⚠️ まずは安全に

エージェントに以下の操作を許可する立場に置くことになります。

  • マシン上でコマンドを実行(Pi のツール設定による)
  • ワークスペース内のファイルを読み書き
  • WhatsApp/Telegram/Discord/Mattermost(プラグイン)経由でメッセージを送信

まずは控えめな設定から始めましょう。

  • 必ず channels.whatsapp.allowFrom を設定してください(個人の Mac で全世界にオープンな状態で実行しないでください)。
  • アシスタント専用の WhatsApp 番号を使用してください。
  • ハートビートのデフォルトは30分間隔です。信頼できる設定になるまでは agents.defaults.heartbeat.every: "0m" で無効化してください。

前提条件

  • OpenClaw がインストール・オンボーディング済みであること — まだの場合ははじめにを参照
  • アシスタント用のもう1つの電話番号(SIM/eSIM/プリペイド)

ツーフォンセットアップ(推奨)

目指す構成は以下の通りです。

flowchart TB
    A["<b>Your Phone (personal)<br></b><br>Your WhatsApp<br>+1-555-YOU"] -- message --> B["<b>Second Phone (assistant)<br></b><br>Assistant WA<br>+1-555-ASSIST"]
    B -- linked via QR --> C["<b>Your Mac (openclaw)<br></b><br>Pi agent"]

個人の WhatsApp を OpenClaw にリンクすると、あなたへのすべてのメッセージが「エージェントへの入力」になります。これはほとんどの場合、望ましくない結果になります。

5分クイックスタート

  1. WhatsApp Web をペアリング(QRが表示されるので、アシスタント用の電話でスキャン):
openclaw channels login
  1. Gateway を起動(起動したままにしてください):
openclaw gateway --port 18789
  1. ~/.openclaw/openclaw.json に最小限の設定を記述:
{
  channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}

許可リストに登録された電話からアシスタント番号にメッセージを送ってください。

オンボーディング完了後、ダッシュボードが自動的に開き、トークン化されていないクリーンなリンクが表示されます。認証を求められた場合は、gateway.auth.token のトークンをコントロールUI の設定に貼り付けてください。再度開くには openclaw dashboard を実行します。

エージェントにワークスペースを与える(AGENTS)

OpenClaw は、ワークスペースディレクトリから操作指示と「メモリ」を読み込みます。

デフォルトでは ~/.openclaw/workspace がエージェントワークスペースとして使用され、セットアップ/初回起動時に自動作成されます(AGENTS.mdSOUL.mdTOOLS.mdIDENTITY.mdUSER.mdHEARTBEAT.md のスターターファイルも含む)。BOOTSTRAP.md はワークスペースが新規の場合のみ作成されます(削除後に再作成されることはありません)。MEMORY.md はオプションで(自動作成されません)、存在する場合は通常セッションで読み込まれます。サブエージェントセッションでは AGENTS.mdTOOLS.md のみが注入されます。

ヒント:このフォルダを OpenClaw の「メモリ」として扱い、gitリポジトリ(できればプライベート)にしておくと、AGENTS.md やメモリファイルのバックアップが取れます。git がインストールされていれば、新規ワークスペースは自動で初期化されます。

openclaw setup

ワークスペースの詳しいレイアウトとバックアップガイド:エージェントワークスペース メモリのワークフロー:メモリ

オプション:agents.defaults.workspace で別のワークスペースを指定できます(~ をサポート)。

{
  agent: {
    workspace: "~/.openclaw/workspace",
  },
}

独自のワークスペースファイルをリポジトリから管理している場合は、ブートストラップファイルの作成を完全に無効化できます。

{
  agent: {
    skipBootstrap: true,
  },
}

「アシスタント」にする設定

OpenClaw はデフォルトで良好なアシスタント設定になっていますが、通常は以下をカスタマイズします。

  • SOUL.md のペルソナ/指示
  • thinking のデフォルト設定(必要に応じて)
  • ハートビート(信頼できるようになったら)

設定例:

{
  logging: { level: "info" },
  agent: {
    model: "anthropic/claude-opus-4-6",
    workspace: "~/.openclaw/workspace",
    thinkingDefault: "high",
    timeoutSeconds: 1800,
    // まずは 0 で開始、後から有効化。
    heartbeat: { every: "0m" },
  },
  channels: {
    whatsapp: {
      allowFrom: ["+15555550123"],
      groups: {
        "*": { requireMention: true },
      },
    },
  },
  routing: {
    groupChat: {
      mentionPatterns: ["@openclaw", "openclaw"],
    },
  },
  session: {
    scope: "per-sender",
    resetTriggers: ["/new", "/reset"],
    reset: {
      mode: "daily",
      atHour: 4,
      idleMinutes: 10080,
    },
  },
}

セッションとメモリ

  • セッションファイル:~/.openclaw/agents/<agentId>/sessions/{{SessionId}}.jsonl
  • セッションメタデータ(トークン使用量、最終ルートなど):~/.openclaw/agents/<agentId>/sessions/sessions.json(レガシー:~/.openclaw/sessions/sessions.json
  • /new または /reset でそのチャットの新しいセッションを開始(resetTriggers で設定可能)。単独で送信すると、リセット確認の短い挨拶が返ります。
  • /compact [instructions] でセッションコンテキストをコンパクトにし、残りのコンテキスト容量を報告します。

ハートビート(プロアクティブモード)

デフォルトでは、OpenClaw は30分ごとにハートビートを実行し、以下のプロンプトで動作します。 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 のみ)、API呼び出しを節約するためハートビート実行をスキップします。
  • ファイルが存在しない場合でもハートビートは実行され、モデルが判断します。
  • エージェントが HEARTBEAT_OK と返答した場合(短いパディングの付加は許容、agents.defaults.heartbeat.ackMaxChars を参照)、そのハートビートのアウトバウンド配信は抑制されます。
  • デフォルトでは、DM形式の user:<id> ターゲットへのハートビート配信は許可されています。agents.defaults.heartbeat.directPolicy: "block" を設定すると、ハートビート実行は維持しつつダイレクトターゲットへの配信を抑制できます。
  • ハートビートは完全なエージェントターンを実行します。間隔が短いほどトークンの消費が増えます。
{
  agent: {
    heartbeat: { every: "30m" },
  },
}

メディアの送受信

インバウンドの添付ファイル(画像/音声/ドキュメント)は、テンプレートを通じてコマンドに渡せます。

  • {{MediaPath}}(ローカルの一時ファイルパス)
  • {{MediaUrl}}(擬似URL)
  • {{Transcript}}(音声文字起こしが有効な場合)

エージェントからのアウトバウンド添付ファイル:独立した行に MEDIA:<path-or-url> を記述します(スペースなし)。例:

Here's the screenshot.
MEDIA:https://example.com/screenshot.png

OpenClaw はこれらを抽出し、テキストと一緒にメディアとして送信します。

運用チェックリスト

openclaw status          # ローカル状態(認証情報、セッション、キューイベント)
openclaw status --all    # 完全診断(読み取り専用、そのままペースト可能)
openclaw status --deep   # Gatewayヘルスプローブ追加(Telegram + Discord)
openclaw health --json   # Gatewayヘルススナップショット(WS)

ログは /tmp/openclaw/ 配下に保存されます(デフォルト:openclaw-YYYY-MM-DD.log)。

次のステップ