設定

OpenClawは~/.openclaw/openclaw.jsonからオプションのJSON5(コメントと末尾カンマをサポート)設定を読み込みます。

ファイルが存在しない場合、OpenClawは安全なデフォルトを使用します。設定を追加するよくある理由:

  • チャンネルを接続し、ボットにメッセージできる人を制御
  • モデル、ツール、サンドボックス、自動化(cron、フック)の設定
  • セッション、メディア、ネットワーク、UIの調整

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

ヒント: 設定が初めての方は? インタラクティブセットアップにはopenclaw onboardを、コピペ可能な完全な設定には設定例ガイドをご確認ください。

最小設定

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

設定の編集

インタラクティブウィザード

```bash
openclaw onboard       # フルセットアップウィザード
openclaw configure     # 設定ウィザード
```

CLI(ワンライナー)

```bash
openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.heartbeat.every "2h"
openclaw config unset tools.web.search.apiKey
```

コントロールUI

[http://127.0.0.1:18789](http://127.0.0.1:18789)を開き、**Config**タブを使用。
コントロールUIは設定スキーマからフォームをレンダリングし、エスケープハッチとして**Raw JSON**エディターも用意されています。

直接編集

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

厳密なバリデーション

警告: OpenClawはスキーマに完全に一致する設定のみを受け入れます。不明なキー、不正な型、無効な値があるとGatewayは起動を拒否します。唯一のルートレベル例外は$schema(文字列)で、エディターがJSONスキーマメタデータを添付できるようにしています。

バリデーションが失敗した場合:

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

よくあるタスク

チャンネルのセットアップ(WhatsApp、Telegram、Discordなど)
各チャンネルは`channels.<provider>`配下に独自の設定セクションを持ちます。セットアップ手順は各チャンネルの専用ページを参照してください:

- [WhatsApp](/docs/channels/whatsapp) — `channels.whatsapp`
- [Telegram](/docs/channels/telegram) — `channels.telegram`
- [Discord](/docs/channels/discord) — `channels.discord`
- [Slack](/docs/channels/slack) — `channels.slack`
- [Signal](/docs/channels/signal) — `channels.signal`
- [iMessage](/docs/channels/imessage) — `channels.imessage`
- [Google Chat](/docs/channels/googlechat) — `channels.googlechat`
- [Mattermost](/docs/channels/mattermost) — `channels.mattermost`
- [MS Teams](/docs/channels/msteams) — `channels.msteams`

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

```json5
{
  channels: {
    telegram: {
      enabled: true,
      botToken: "123:abc",
      dmPolicy: "pairing",   // pairing | allowlist | open | disabled
      allowFrom: ["tg:123"], // allowlist/openの場合のみ
    },
  },
}
```
モデルの選択と設定
プライマリモデルとオプションのフォールバックを設定:

```json5
{
  agents: {
    defaults: {
      model: {
        primary: "anthropic/claude-sonnet-4-5",
        fallbacks: ["openai/gpt-5.2"],
      },
      models: {
        "anthropic/claude-sonnet-4-5": { alias: "Sonnet" },
        "openai/gpt-5.2": { alias: "GPT" },
      },
    },
  },
}
```

- `agents.defaults.models`はモデルカタログを定義し、`/model`の許可リストとして機能します。
- モデル参照は`provider/model`形式(例:`anthropic/claude-opus-4-6`)を使用します。
- `agents.defaults.imageMaxDimensionPx`はプロバイダー呼び出し前のトランスクリプト/ツール画像のダウンスケーリングを制御(デフォルト`1200`)。低い値は通常、スクリーンショットの多い実行でビジョントークンの使用量を削減します。
- チャットでのモデル切り替えについては[Models CLI](/docs/concepts/models)を、認証ローテーションとフォールバック動作については[Model Failover](/docs/concepts/model-failover)を参照してください。
- カスタム/セルフホストプロバイダーについてはリファレンスの[Custom providers](/docs/gateway/configuration-reference#custom-providers-and-base-urls)を参照してください。
ボットにメッセージできる人の制御
DMアクセスはチャンネルごとに`dmPolicy`で制御されます:

- `"pairing"`(デフォルト):不明な送信者にワンタイムペアリングコードを発行して承認
- `"allowlist"`:`allowFrom`(またはペアリング済み許可ストア)内の送信者のみ
- `"open"`:すべての受信DMを許可(`allowFrom: ["*"]`が必要)
- `"disabled"`:すべてのDMを無視

グループの場合は`groupPolicy` + `groupAllowFrom`またはチャンネル固有の許可リストを使用。

チャンネルごとの詳細は[完全リファレンス](/docs/gateway/configuration-reference#dm-and-group-access)を参照してください。
グループチャットのメンションゲーティング設定
グループメッセージはデフォルトで**メンション必須**です。エージェントごとにパターンを設定:

```json5
{
  agents: {
    list: [
      {
        id: "main",
        groupChat: {
          mentionPatterns: ["@openclaw", "openclaw"],
        },
      },
    ],
  },
  channels: {
    whatsapp: {
      groups: { "*": { requireMention: true } },
    },
  },
}
```

- **メタデータメンション**:ネイティブの@メンション(WhatsAppのタップしてメンション、Telegramの@botなど)
- **テキストパターン**:`mentionPatterns`内の正規表現パターン
- 完全リファレンスのチャンネルごとのオーバーライドとセルフチャットモードについては[完全リファレンス](/docs/gateway/configuration-reference#group-chat-mention-gating)を参照してください。
セッションとリセットの設定
セッションは会話の継続性と分離を制御します:

```json5
{
  session: {
    dmScope: "per-channel-peer",  // マルチユーザーに推奨
    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`をサポート)。
- スコープ、アイデンティティリンク、送信ポリシーについては[Session Management](/docs/concepts/session)を参照してください。
- すべてのフィールドについては[完全リファレンス](/docs/gateway/configuration-reference#session)を参照してください。
サンドボックスの有効化
エージェントセッションを分離されたDockerコンテナで実行:

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

まずイメージをビルド:`scripts/sandbox-setup.sh`

完全なガイドは[Sandboxing](/docs/gateway/sandboxing)を、すべてのオプションは[完全リファレンス](/docs/gateway/configuration-reference#sandbox)を参照してください。
公式iOSビルド向けリレーバックドプッシュの有効化
リレーバックドプッシュは`openclaw.json`で設定されます。

ゲートウェイ設定に以下を記述:

```json5
{
  gateway: {
    push: {
      apns: {
        relay: {
          baseUrl: "https://relay.example.com",
          // オプション。デフォルト:10000
          timeoutMs: 10000,
        },
      },
    },
  },
}
```

CLI相当:

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

これにより:

- ゲートウェイが外部リレー経由で`push.test`、ウェイクナッジ、再接続ウェイクを送信可能になります。
- ペアリング済みiOSアプリによって転送される登録スコープ付き送信グラントを使用します。ゲートウェイはデプロイメント全体のリレートークンを必要としません。
- 各リレーバックド登録をiOSアプリがペアリングしたゲートウェイアイデンティティにバインドし、別のゲートウェイが保存済み登録を再利用できないようにします。
- ローカル/手動iOSビルドはダイレクトAPNsのまま。リレーバックド送信はリレー経由で登録した公式配布ビルドにのみ適用されます。
- 公式/TestFlightのiOSビルドにベイクされたリレーベースURLと一致する必要があり、登録と送信トラフィックが同じリレーデプロイメントに到達するようにします。

エンドツーエンドフロー:

1. 同じリレーベースURLでコンパイルされた公式/TestFlightのiOSビルドをインストール。
2. ゲートウェイで`gateway.push.apns.relay.baseUrl`を設定。
3. iOSアプリをゲートウェイにペアリングし、ノードとオペレーターの両セッションを接続。
4. iOSアプリがゲートウェイアイデンティティを取得し、App Attestとアプリレシートを使用してリレーに登録、その後リレーバックドの`push.apns.register`ペイロードをペアリング済みゲートウェイに公開。
5. ゲートウェイがリレーハンドルと送信グラントを保存し、`push.test`、ウェイクナッジ、再接続ウェイクに使用。

運用上の注意:

- iOSアプリを別のゲートウェイに切り替えた場合、アプリを再接続してそのゲートウェイにバインドされた新しいリレー登録を公開してください。
- 別のリレーデプロイメントを指す新しいiOSビルドを出荷した場合、アプリは古いリレーオリジンを再利用する代わりにキャッシュされたリレー登録をリフレッシュします。

互換性に関する注意:

- `OPENCLAW_APNS_RELAY_BASE_URL`と`OPENCLAW_APNS_RELAY_TIMEOUT_MS`は一時的な環境変数オーバーライドとして引き続き動作。
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`はループバック限定の開発用エスケープハッチとして残存。HTTP リレーURLを設定に永続化しないでください。

エンドツーエンドフローについては[iOS App](/docs/platforms/ios#relay-backed-push-for-official-builds)を、リレーセキュリティモデルについては[Authentication and trust flow](/docs/platforms/ios#authentication-and-trust-flow)を参照してください。
ハートビート(定期チェックイン)の設定
```json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "last",
      },
    },
  },
}
```

- `every`:duration文字列(`30m`、`2h`)。`0m`で無効化。
- `target`:`last` | `whatsapp` | `telegram` | `discord` | `none`
- `directPolicy`:`allow`(デフォルト)または`block`(DMスタイルのハートビートターゲット用)
- 完全なガイドは[Heartbeat](/docs/gateway/heartbeat)を参照。
cronジョブの設定
```json5
{
  cron: {
    enabled: true,
    maxConcurrentRuns: 2,
    sessionRetention: "24h",
    runLog: {
      maxBytes: "2mb",
      keepLines: 2000,
    },
  },
}
```

- `sessionRetention`:完了済みの分離cron実行セッションを`sessions.json`から削除するまでの期間(デフォルト`24h`。`false`で無効化)。
- `runLog`:`cron/runs/<jobId>.jsonl`をサイズと保持行数で刈り込み。
- 機能の概要とCLI例については[Cron jobs](/docs/automation/cron-jobs)を参照。
Webhook(フック)の設定
Gateway上でHTTP webhookエンドポイントを有効化:

```json5
{
  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,
      },
    ],
  },
}
```

セキュリティ上の注意:
- すべてのhook/webhookペイロードコンテンツを信頼できない入力として扱ってください。
- unsafe-contentバイパスフラグ(`hooks.gmail.allowUnsafeExternalContent`、`hooks.mappings[].allowUnsafeExternalContent`)は、厳密にスコープされたデバッグ以外は無効のままにしてください。
- hookドリブンのエージェントでは、強力な最新モデルティアと厳格なツールポリシー(例:メッセージングのみ+可能な場合はサンドボックス化)を推奨。

すべてのマッピングオプションとGmail統合については[完全リファレンス](/docs/gateway/configuration-reference#hooks)を参照。
マルチエージェントルーティングの設定
個別のワークスペースとセッションを持つ複数の分離エージェントを実行:

```json5
{
  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" } },
  ],
}
```

バインディングルールとエージェントごとのアクセスプロファイルについては[Multi-Agent](/docs/concepts/multi-agent)と[完全リファレンス](/docs/gateway/configuration-reference#multi-agent-routing)を参照。
設定を複数ファイルに分割($include)
`$include`で大きな設定を整理:

```json5
// ~/.openclaw/openclaw.json
{
  gateway: { port: 18789 },
  agents: { $include: "./agents.json5" },
  broadcast: {
    $include: ["./clients/a.json5", "./clients/b.json5"],
  },
}
```

- **単一ファイル**:含むオブジェクトを置換
- **ファイルの配列**:順序通りにディープマージ(後のものが優先)
- **兄弟キー**:include後にマージ(インクルードされた値をオーバーライド)
- **ネストされたinclude**:10レベルまでサポート
- **相対パス**:インクルードするファイルからの相対解決
- **エラー処理**:欠落ファイル、パースエラー、循環includeに対する明確なエラー

設定のホットリロード

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

リロードモード

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

ホット適用 vs 再起動が必要なもの

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

カテゴリフィールド再起動が必要?
チャンネルchannels.*web(WhatsApp) — 全ビルトインおよび拡張チャンネルいいえ
エージェントとモデルagentagentsmodelsroutingいいえ
自動化hookscronagent.heartbeatいいえ
セッションとメッセージsessionmessagesいいえ
ツールとメディアtoolsbrowserskillsaudiotalkいいえ
UIその他uiloggingidentitybindingsいいえ
Gatewayサーバーgateway.*(port、bind、auth、tailscale、TLS、HTTP)はい
インフラストラクチャdiscoverycanvasHostpluginsはい

注意: gateway.reloadgateway.remoteは例外です。これらの変更は再起動をトリガーしません

設定RPC(プログラマティックな更新)

注意: コントロールプレーン書き込みRPC(config.applyconfig.patchupdate.run)はdeviceId+clientIpごとに60秒あたり3リクエストにレート制限されています。制限時、RPCはUNAVAILABLEretryAfterMsを返します。

config.apply(完全置換)
設定全体を検証+書き込み、1ステップでGatewayを再起動します。

> **警告:** `config.apply`は**設定全体**を置換します。部分更新には`config.patch`を、単一キーには`openclaw config set`を使用してください。

パラメータ:

- `raw`(文字列) — 設定全体のJSON5ペイロード
- `baseHash`(オプション) — `config.get`からの設定ハッシュ(設定が存在する場合は必須)
- `sessionKey`(オプション) — 再起動後のウェイクアップping用セッションキー
- `note`(オプション) — 再起動センチネル用のメモ
- `restartDelayMs`(オプション) — 再起動までの遅延(デフォルト2000)

再起動リクエストは保留中/実行中のものがある間は統合され、再起動サイクル間に30秒のクールダウンが適用されます。

```bash
openclaw gateway call config.get --params '{}'  # payload.hashをキャプチャ
openclaw gateway call config.apply --params '{
  "raw": "{ agents: { defaults: { workspace: \"~/.openclaw/workspace\" } } }",
  "baseHash": "<hash>",
  "sessionKey": "agent:main:whatsapp:direct:+15555550123"
}'
```
config.patch(部分更新)
既存の設定に部分更新をマージします(JSONマージパッチセマンティクス):

- オブジェクトは再帰的にマージ
- `null`はキーを削除
- 配列は置換

パラメータ:

- `raw`(文字列) — 変更するキーのみのJSON5
- `baseHash`(必須) — `config.get`からの設定ハッシュ
- `sessionKey`、`note`、`restartDelayMs` — `config.apply`と同じ

再起動動作は`config.apply`と同じ:保留中の再起動の統合+再起動サイクル間の30秒クールダウン。

```bash
openclaw gateway call config.patch --params '{
  "raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }",
  "baseHash": "<hash>"
}'
```

環境変数

OpenClawは親プロセスの環境変数に加えて以下を読み込みます:

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

いずれのファイルも既存の環境変数を上書きしません。設定でインライン環境変数も設定可能です:

{
  env: {
    OPENROUTER_API_KEY: "sk-or-...",
    vars: { GROQ_API_KEY: "gsk-..." },
  },
}
シェル環境のインポート(オプション)

有効にすると、期待するキーが設定されていない場合、OpenClawはログインシェルを実行して不足キーのみをインポートします:

{
  env: {
    shellEnv: { enabled: true, timeoutMs: 15000 },
  },
}

環境変数相当:OPENCLAW_LOAD_SHELL_ENV=1

設定値内の環境変数置換

${VAR_NAME}で設定文字列値内の環境変数を参照:

{
  gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },
  models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },
}

ルール:

  • 大文字名のみマッチ:[A-Z_][A-Z0-9_]*
  • 欠落/空の変数は読み込み時にエラー
  • $${VAR}でリテラル出力にエスケープ
  • $includeファイル内でも動作
  • インライン置換:"${BASE}/v1""https://api.example.com/v1"
SecretRef(env、file、exec)

SecretRefオブジェクトをサポートするフィールドでは以下を使用可能:

{
  models: {
    providers: {
      openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } },
    },
  },
  skills: {
    entries: {
      "nano-banana-pro": {
        apiKey: {
          source: "file",
          provider: "filemain",
          id: "/skills/entries/nano-banana-pro/apiKey",
        },
      },
    },
  },
  channels: {
    googlechat: {
      serviceAccountRef: {
        source: "exec",
        provider: "vault",
        id: "channels/googlechat/serviceAccount",
      },
    },
  },
}

SecretRefの詳細(env/file/exec用のsecrets.providersを含む)はSecrets Managementにあります。 対応する資格情報パスはSecretRef Credential Surfaceに記載されています。

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

完全リファレンス

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


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