Gateway

設定

OpenClaw は、~/.openclaw/openclaw.json から任意の <Tooltip tip="JSON5 はコメントと末尾カンマをサポートします">JSON5</Tooltip> 設定を読み込みます。 アクティブな設定パスは通常ファイルである必要があります。シンボリックリンク化された openclaw.json レイアウトは、OpenClaw が管理する書き込みではサポートされません。アトミック書き込みでは、シンボリックリンクを保持せずに そのパスを置き換えることがあります。設定をデフォルトの状態ディレクトリ外に置く場合は、 OPENCLAW_CONFIG_PATH を実ファイルへ直接向けてください。

ファイルがない場合、OpenClaw は安全なデフォルトを使用します。設定を追加する一般的な理由は次のとおりです。

  • チャネルを接続し、ボットにメッセージを送れるユーザーを制御する
  • モデル、ツール、サンドボックス化、または自動化 (cron、フック) を設定する
  • セッション、メディア、ネットワーク、または UI を調整する

利用可能なすべてのフィールドについては、完全なリファレンスを参照してください。

エージェントと自動化は、設定を編集する前に正確なフィールド単位の ドキュメントを確認するため、config.schema.lookup を使用してください。このページはタスク指向のガイダンスとして使用し、 より広いフィールドマップとデフォルトについては 設定リファレンスを使用してください。

最小設定

// ~/.openclaw/openclaw.json
{
  agents: { defaults: { workspace: "~/.openclaw/workspace" } },
  channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}

設定の編集

対話型ウィザード

openclaw onboard       # full onboarding flow
openclaw configure     # config wizard

CLI (1行コマンド)

openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.heartbeat.every "2h"
openclaw config unset plugins.entries.brave.config.webSearch.apiKey

コントロール UI

http://127.0.0.1:18789 を開き、設定 タブを使用します。 コントロール UI は、ライブ設定スキーマからフォームをレンダリングします。これにはフィールド title / description のドキュメントメタデータに加え、利用可能な場合は Plugin とチャネルのスキーマが含まれ、 回避手段として 生 JSON エディターもあります。ドリルダウン UI やその他のツール向けに、Gateway は config.schema.lookup も公開しており、 パススコープのスキーマノード 1 つと直下の子要素概要を取得できます。

直接編集

~/.openclaw/openclaw.json を直接編集します。Gateway はファイルを監視し、変更を自動的に適用します (ホットリロードを参照)。

厳格な検証

openclaw config schema は、コントロール UI と検証で使用される正規の JSON Schema を出力します。 config.schema.lookup は、ドリルダウンツール向けにパススコープのノード 1 つと 子要素概要を取得します。フィールド title/description のドキュメントメタデータは、 ネストされたオブジェクト、ワイルドカード (*)、配列項目 ([])、および anyOf/ oneOf/allOf 分岐に引き継がれます。マニフェストレジストリが読み込まれると、 ランタイム Plugin とチャネルのスキーマがマージされます。

検証に失敗した場合:

  • Gateway は起動しない
  • 診断コマンドのみ動作する (openclaw doctoropenclaw logsopenclaw healthopenclaw status)
  • 正確な問題を確認するには openclaw doctor を実行する
  • 修復を適用するには openclaw doctor --fix (または --yes) を実行する

Gateway は正常に起動するたびに、信頼済みの最後に正常確認済みコピーを保持しますが、 起動時やホットリロード時にそれを自動復元することはありません。openclaw.json が 検証に失敗した場合 (Plugin ローカル検証を含む)、Gateway の起動は失敗するか、 リロードがスキップされ、現在のランタイムは最後に受理された設定を保持します。 接頭辞付き/上書き破損した設定を修復するか、最後に正常確認済みのコピーを復元するには openclaw doctor --fix (または --yes) を実行してください。候補に *** などの 伏せ字化されたシークレットプレースホルダーが含まれる場合、最後に正常確認済みへの昇格はスキップされます。

よくあるタスク

チャネルを設定する (WhatsApp、Telegram、Discord など)

各チャネルには、channels.<provider> の下に独自の設定セクションがあります。セットアップ手順については専用のチャネルページを参照してください。

すべてのチャネルは同じ DM ポリシーパターンを共有します。

{
  channels: {
    telegram: {
      enabled: true,
      botToken: "123:abc",
      dmPolicy: "pairing",   // pairing | allowlist | open | disabled
      allowFrom: ["tg:123"], // only for allowlist/open
    },
  },
}
モデルを選択して設定する

プライマリモデルと任意のフォールバックを設定します。

{
  agents: {
    defaults: {
      model: {
        primary: "anthropic/claude-sonnet-4-6",
        fallbacks: ["openai/gpt-5.4"],
      },
      models: {
        "anthropic/claude-sonnet-4-6": { alias: "Sonnet" },
        "openai/gpt-5.4": { alias: "GPT" },
      },
    },
  },
}
  • agents.defaults.models はモデルカタログを定義し、/model の許可リストとして機能します。
  • 既存モデルを削除せずに許可リストエントリを追加するには、openclaw config set agents.defaults.models '<json>' --strict-json --merge を使用します。エントリを削除することになる単純な置換は、--replace を渡さない限り拒否されます。
  • モデル参照は provider/model 形式を使用します (例: anthropic/claude-opus-4-6)。
  • agents.defaults.imageMaxDimensionPx はトランスクリプト/ツール画像の縮小を制御します (デフォルト 1200)。値を下げると、スクリーンショットが多い実行で通常ビジョントークン使用量を削減できます。
  • チャット内でのモデル切り替えについてはモデル CLIを、認証ローテーションとフォールバック動作についてはモデルフェイルオーバーを参照してください。
  • カスタム/セルフホストプロバイダーについては、リファレンスのカスタムプロバイダーを参照してください。
ボットにメッセージを送れるユーザーを制御する

DM アクセスは、チャネルごとに dmPolicy で制御されます。

  • "pairing" (デフォルト): 不明な送信者に承認用の 1 回限りのペアリングコードを送る
  • "allowlist": allowFrom (またはペアリング済み許可ストア) 内の送信者のみ
  • "open": すべての受信 DM を許可する (allowFrom: ["*"] が必要)
  • "disabled": すべての DM を無視する

グループでは、groupPolicy + groupAllowFrom またはチャネル固有の許可リストを使用します。

チャネルごとの詳細については、完全なリファレンスを参照してください。

グループチャットのメンションゲーティングを設定する

グループメッセージはデフォルトでメンション必須です。エージェントごとにトリガーパターンを設定し、レガシーな自動最終返信を意図的に使う場合を除き、表示されるルーム返信はデフォルトのメッセージツール経路に保ちます。

{
  messages: {
    visibleReplies: "automatic", // set "message_tool" to require message-tool sends everywhere
    groupChat: {
      visibleReplies: "message_tool", // default; use "automatic" for legacy room replies
    },
  },
  agents: {
    list: [
      {
        id: "main",
        groupChat: {
          mentionPatterns: ["@openclaw", "openclaw"],
        },
      },
    ],
  },
  channels: {
    whatsapp: {
      groups: { "*": { requireMention: true } },
    },
  },
}
  • メタデータメンション: ネイティブ @メンション (WhatsApp のタップしてメンション、Telegram @bot など)
  • テキストパターン: mentionPatterns 内の安全な正規表現パターン
  • 可視返信: messages.visibleReplies でグローバルにメッセージツール送信を必須にできます。messages.groupChat.visibleReplies はグループ/チャネル向けにそれを上書きします。
  • 可視返信モード、チャネルごとの上書き、セルフチャットモードについては、完全なリファレンスを参照してください。
エージェントごとに Skills を制限する

共有ベースラインには agents.defaults.skills を使用し、その後、特定の エージェントを agents.list[].skills で上書きします。

{
  agents: {
    defaults: {
      skills: ["github", "weather"],
    },
    list: [
      { id: "writer" }, // inherits github, weather
      { id: "docs", skills: ["docs-search"] }, // replaces defaults
      { id: "locked-down", skills: [] }, // no skills
    ],
  },
}
  • デフォルトで Skills を無制限にするには、agents.defaults.skills を省略します。
  • デフォルトを継承するには、agents.list[].skills を省略します。
  • Skills なしにするには、agents.list[].skills: [] を設定します。
  • SkillsSkills 設定、および 設定リファレンスを参照してください。
Gateway のチャネルヘルス監視を調整する

古くなったように見えるチャネルを Gateway がどれだけ積極的に再起動するかを制御します。

{
  gateway: {
    channelHealthCheckMinutes: 5,
    channelStaleEventThresholdMinutes: 30,
    channelMaxRestartsPerHour: 10,
  },
  channels: {
    telegram: {
      healthMonitor: { enabled: false },
      accounts: {
        alerts: {
          healthMonitor: { enabled: true },
        },
      },
    },
  },
}
  • ヘルスモニターによる再起動をグローバルに無効化するには、gateway.channelHealthCheckMinutes: 0 を設定します。
  • channelStaleEventThresholdMinutes はチェック間隔以上にする必要があります。
  • グローバルモニターを無効化せずに、1 つのチャネルまたはアカウントの自動再起動を無効化するには、channels.<provider>.healthMonitor.enabled または channels.<provider>.accounts.<id>.healthMonitor.enabled を使用します。
  • 運用デバッグについてはヘルスチェックを、すべてのフィールドについては完全なリファレンスを参照してください。
Gateway の WebSocket ハンドシェイクタイムアウトを調整する

負荷が高いホストや非力なホストで、ローカルクライアントが認証前の WebSocket ハンドシェイクを完了するための 時間を増やします。

{
  gateway: {
    handshakeTimeoutMs: 30000,
  },
}
  • デフォルトは 15000 ミリ秒です。
  • 1 回限りのサービスまたはシェル上書きでは、引き続き OPENCLAW_HANDSHAKE_TIMEOUT_MS が優先されます。
  • まず起動時やイベントループの停滞を修正することを優先してください。このノブは、健全だがウォームアップ中に遅いホスト向けです。
セッションとリセットを設定する

セッションは会話の継続性と分離を制御します。

{
  session: {
    dmScope: "per-channel-peer",  // recommended for multi-user
    threadBindings: {
      enabled: true,
      idleHours: 24,
      maxAgeHours: 0,
    },
    reset: {
      mode: "daily",
      atHour: 4,
      idleMinutes: 120,
    },
  },
}
  • dmScope: main (共有) | per-peer | per-channel-peer | per-account-channel-peer
  • threadBindings: スレッド紐づけセッションルーティングのグローバルデフォルト (Discord は /focus/unfocus/agents/session idle/session max-age をサポートします)。
  • スコープ、ID リンク、送信ポリシーについては、セッション管理を参照してください。
  • すべてのフィールドについては、完全なリファレンスを参照してください。
サンドボックス化を有効にする

分離されたサンドボックスランタイムでエージェントセッションを実行します。

{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main",  // off | non-main | all
        scope: "agent",    // session | agent | shared
      },
    },
  },
}

まずイメージをビルドします。ソースチェックアウトからは scripts/sandbox-setup.sh を実行し、npm インストールからは サンドボックス化 § イメージとセットアップ にあるインラインの docker build コマンドを参照してください。

完全なガイドは サンドボックス化 を、すべてのオプションは 完全なリファレンス を参照してください。

公式 iOS ビルド向けのリレー経由プッシュを有効にする

リレー経由プッシュは openclaw.json で設定します。

Gateway 設定でこれを設定します。

{
  gateway: {
    push: {
      apns: {
        relay: {
          baseUrl: "https://relay.example.com",
          // Optional. Default: 10000
          timeoutMs: 10000,
        },
      },
    },
  },
}

CLI での同等設定:

openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com

これにより行われること:

  • Gateway が外部リレー経由で push.test、ウェイク通知、再接続ウェイクを送信できるようにします。
  • ペアリング済みの iOS アプリから転送される、登録スコープの送信許可を使用します。Gateway はデプロイ全体のリレートークンを必要としません。
  • 各リレー経由登録を、iOS アプリがペアリングした Gateway ID にバインドするため、別の Gateway は保存済み登録を再利用できません。
  • ローカルまたは手動の iOS ビルドでは直接 APNs を維持します。リレー経由送信は、リレー経由で登録された公式配布ビルドにのみ適用されます。
  • 公式/TestFlight iOS ビルドに組み込まれたリレーベース URL と一致している必要があります。これにより、登録トラフィックと送信トラフィックが同じリレーデプロイに到達します。

エンドツーエンドの流れ:

  1. 同じリレーベース URL でコンパイルされた公式/TestFlight iOS ビルドをインストールします。
  2. Gateway で gateway.push.apns.relay.baseUrl を設定します。
  3. iOS アプリを Gateway にペアリングし、node セッションと operator セッションの両方を接続させます。
  4. iOS アプリが Gateway ID を取得し、App Attest とアプリレシートを使ってリレーに登録し、その後リレー経由の push.apns.register ペイロードをペアリング済み Gateway に公開します。
  5. Gateway はリレーハンドルと送信許可を保存し、それらを push.test、ウェイク通知、再接続ウェイクに使用します。

運用上の注意:

  • iOS アプリを別の Gateway に切り替える場合は、その Gateway にバインドされた新しいリレー登録を公開できるようにアプリを再接続してください。
  • 別のリレーデプロイを指す新しい iOS ビルドを出荷すると、アプリは古いリレー元を再利用せず、キャッシュ済みリレー登録を更新します。

互換性に関する注意:

  • OPENCLAW_APNS_RELAY_BASE_URLOPENCLAW_APNS_RELAY_TIMEOUT_MS は一時的な環境変数オーバーライドとして引き続き機能します。
  • OPENCLAW_APNS_RELAY_ALLOW_HTTP=true は local loopback 専用の開発用退避手段のままです。HTTP リレー URL を設定に永続化しないでください。

エンドツーエンドの流れは iOS アプリ を、リレーのセキュリティモデルは 認証と信頼の流れ を参照してください。

Heartbeat(定期チェックイン)を設定する
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "last",
      },
    },
  },
}
  • every: 期間文字列(30m2h)。無効にするには 0m を設定します。
  • target: last | none | <channel-id>(例: discordmatrixtelegramwhatsapp
  • directPolicy: DM スタイルの Heartbeat ターゲットに対する allow(デフォルト)または block
  • 完全なガイドは Heartbeat を参照してください。
cron ジョブを設定する
{
  cron: {
    enabled: true,
    maxConcurrentRuns: 2, // cron dispatch + isolated cron agent-turn execution
    sessionRetention: "24h",
    runLog: {
      maxBytes: "2mb",
      keepLines: 2000,
    },
  },
}
  • sessionRetention: 完了した分離実行セッションを sessions.json から削除します(デフォルトは 24h、無効にするには false を設定)。
  • runLog: サイズと保持行数に基づいて cron/runs/<jobId>.jsonl を削除します。
  • 機能概要と CLI 例は Cron ジョブ を参照してください。
Webhook(フック)を設定する

Gateway で HTTP Webhook エンドポイントを有効にします。

{
  hooks: {
    enabled: true,
    token: "shared-secret",
    path: "/hooks",
    defaultSessionKey: "hook:ingress",
    allowRequestSessionKey: false,
    allowedSessionKeyPrefixes: ["hook:"],
    mappings: [
      {
        match: { path: "gmail" },
        action: "agent",
        agentId: "main",
        deliver: true,
      },
    ],
  },
}

セキュリティに関する注意:

  • すべてのフック/Webhook ペイロード内容を信頼できない入力として扱ってください。
  • 専用の hooks.token を使用し、共有 Gateway トークンを再利用しないでください。
  • フック認証はヘッダーのみです(Authorization: Bearer ... または x-openclaw-token)。クエリ文字列トークンは拒否されます。
  • hooks.path/ にすることはできません。Webhook 受信は /hooks などの専用サブパスに置いてください。
  • 厳密に範囲を絞ったデバッグを行う場合を除き、安全でないコンテンツのバイパスフラグ(hooks.gmail.allowUnsafeExternalContenthooks.mappings[].allowUnsafeExternalContent)は無効のままにしてください。
  • hooks.allowRequestSessionKey を有効にする場合は、呼び出し元が選択できるセッションキーを制限するために hooks.allowedSessionKeyPrefixes も設定してください。
  • フック駆動のエージェントには、強力な最新モデル階層と厳格なツールポリシー(たとえばメッセージングのみ、可能であればサンドボックス化も併用)を推奨します。

すべてのマッピングオプションと Gmail 連携については 完全なリファレンス を参照してください。

マルチエージェントルーティングを設定する

個別のワークスペースとセッションを持つ複数の分離エージェントを実行します。

{
  agents: {
    list: [
      { id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
      { id: "work", workspace: "~/.openclaw/workspace-work" },
    ],
  },
  bindings: [
    { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
    { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
  ],
}

バインドルールとエージェントごとのアクセスプロファイルについては マルチエージェント完全なリファレンス を参照してください。

設定を複数ファイルに分割する($include)

大きな設定を整理するには $include を使用します。

// ~/.openclaw/openclaw.json
{
  gateway: { port: 18789 },
  agents: { $include: "./agents.json5" },
  broadcast: {
    $include: ["./clients/a.json5", "./clients/b.json5"],
  },
}
  • 単一ファイル: 含んでいるオブジェクトを置き換えます
  • ファイル配列: 順番に深くマージされます(後のものが優先)
  • 兄弟キー: include 後にマージされます(include された値を上書き)
  • ネストされた include: 最大 10 階層までサポートされます
  • 相対パス: include しているファイルを基準に解決されます
  • OpenClaw 所有の書き込み: 書き込みが plugins: { $include: "./plugins.json5" } のような単一ファイル include に裏付けられたトップレベルセクション 1 つだけを変更する場合、OpenClaw はその include されたファイルを更新し、openclaw.json はそのまま残します
  • サポートされない書き込みスルー: ルート include、include 配列、兄弟上書きを伴う include は、設定を平坦化する代わりに OpenClaw 所有の書き込みを安全側で失敗させます
  • 閉じ込め: $include パスは openclaw.json を保持するディレクトリ配下に解決される必要があります。マシン間またはユーザー間でツリーを共有するには、include が参照できる追加ディレクトリのパスリスト(POSIX では :、Windows では ;)を OPENCLAW_INCLUDE_ROOTS に設定します。シンボリックリンクは解決されて再チェックされるため、字句上は設定ディレクトリ内にあるパスでも、実際のターゲットが許可されたすべてのルートの外に出る場合は引き続き拒否されます。
  • エラー処理: 存在しないファイル、解析エラー、循環 include に対する明確なエラー

設定のホットリロード

Gateway は ~/.openclaw/openclaw.json を監視し、変更を自動的に適用します。ほとんどの設定では手動再起動は不要です。

直接のファイル編集は、検証されるまで信頼されないものとして扱われます。ウォッチャーはエディターによる一時書き込み/リネームの揺れが収まるのを待ち、最終ファイルを読み取り、無効な外部編集を openclaw.json に書き戻さずに拒否します。OpenClaw 所有の設定書き込みは、書き込み前に同じスキーマゲートを使用します。gateway.mode の削除やファイルサイズを半分未満に縮小するなどの破壊的な上書きは拒否され、確認用に .rejected.* として保存されます。

config reload skipped (invalid config) が表示される場合や、起動時に Invalid config が報告される場合は、設定を確認し、openclaw config validate を実行してから、修復のために openclaw doctor --fix を実行してください。チェックリストは Gateway のトラブルシューティング を参照してください。

リロードモード

モード 動作
hybrid(デフォルト) 安全な変更を即座にホット適用します。重要な変更では自動的に再起動します。
hot 安全な変更のみをホット適用します。再起動が必要な場合は警告をログに出します。対応は利用者が行います。
restart 安全かどうかにかかわらず、設定変更があるたびに Gateway を再起動します。
off ファイル監視を無効にします。変更は次回の手動再起動時に有効になります。
{
  gateway: {
    reload: { mode: "hybrid", debounceMs: 300 },
  },
}

ホット適用されるものと再起動が必要なもの

ほとんどのフィールドはダウンタイムなしでホット適用されます。hybrid モードでは、再起動が必要な変更は自動的に処理されます。

カテゴリ フィールド 再起動が必要か
チャンネル channels.*, web(WhatsApp)- すべての組み込みチャンネルと Plugin チャンネル いいえ
エージェントとモデル agent, agents, models, routing いいえ
自動化 hooks, cron, agent.heartbeat いいえ
セッションとメッセージ session, messages いいえ
ツールとメディア tools, browser, skills, mcp, audio, talk いいえ
UI とその他 ui, logging, identity, bindings いいえ
Gateway サーバー gateway.*(ポート、バインド、認証、tailscale、TLS、HTTP) はい
インフラストラクチャ discovery, plugins はい

リロード計画

$include を通じて参照されるソースファイルを編集すると、OpenClaw は 平坦化されたメモリ内ビューではなく、ソースで記述されたレイアウトから リロードを計画します。 これにより、plugins: { $include: "./plugins.json5" }` のように 単一の最上位セクションが独自のインクルードファイルにある場合でも、 ホットリロードの判断(hot-apply か再起動か)が予測しやすくなります。 ソースレイアウトが曖昧な場合、リロード計画は安全側に倒して失敗します。

Config RPC(プログラムによる更新)

Gateway API 経由で設定を書き込むツールでは、次のフローを推奨します。

  • config.schema.lookup で 1 つのサブツリーを確認する(浅いスキーマノード + 子の サマリー)
  • config.get で現在のスナップショットと hash を取得する
  • config.patch で部分更新する(JSON merge patch: オブジェクトはマージ、null は削除、配列は置換)
  • 設定全体を置き換える意図がある場合のみ config.apply
  • 明示的な自己更新と再起動には update.run。再起動後のセッションで 1 回のフォローアップターンを実行する場合は continuationMessage を含める
  • update.status で最新の更新再起動センチネルを確認し、再起動後に実行中のバージョンを検証する

エージェントは、正確なフィールドレベルのドキュメントと制約を確認する最初の場所として config.schema.lookup を扱う必要があります。より広い設定マップ、デフォルト、専用サブシステム参照へのリンクが必要な場合は 設定リファレンスを使用してください。

部分パッチの例: OC_I18N_900019 config.applyconfig.patch はどちらも rawbaseHashsessionKeynoterestartDelayMs を受け付けます。設定がすでに存在する場合、baseHash は 両方のメソッドで必須です。

環境変数

OpenClaw は親プロセスに加えて、次から env vars を読み込みます。

  • 現在の作業ディレクトリの .env(存在する場合)
  • ~/.openclaw/.env(グローバルフォールバック)

どちらのファイルも既存の env vars を上書きしません。設定内でインライン env vars を設定することもできます。 OC_I18N_900020

シェル env インポート(任意)

有効で、期待されるキーが設定されていない場合、OpenClaw はログインシェルを実行し、不足しているキーだけをインポートします。 OC_I18N_900021 Env var equivalent: OPENCLAW_LOAD_SHELL_ENV=1

設定値内の env var 置換

任意の設定文字列値で ${VAR_NAME} を使って env vars を参照します。 OC_I18N_900022 ルール:

  • 一致するのは大文字名のみ: [A-Z_][A-Z0-9_]*
  • 欠落または空の変数は読み込み時にエラーをスローする
  • リテラル出力には $${VAR} でエスケープする
  • $include ファイル内でも機能する
  • インライン置換: "${BASE}/v1""https://api.example.com/v1"
シークレット参照(env、file、exec)

SecretRef オブジェクトをサポートするフィールドでは、次を使用できます。 OC_I18N_900023 SecretRef の詳細(env/file/exec 用の secrets.providers を含む)はシークレット管理にあります。 サポートされる認証情報パスは SecretRef 認証情報サーフェスに一覧されています。

完全な優先順位とソースについては、環境を参照してください。

完全なリファレンス

フィールドごとの完全なリファレンスについては、設定リファレンス を参照してください。


関連: 設定例 · 設定リファレンス · Doctor

関連