設定
OpenClaw は、~/.openclaw/openclaw.json から任意の 設定を読み込みます。
ファイルが存在しない場合、OpenClaw は安全なデフォルト値を使用します。設定を追加する一般的な理由は次のとおりです。
- チャンネルを接続し、誰がボットにメッセージを送れるかを制御する
- モデル、ツール、サンドボックス化、自動化(cron、hooks)を設定する
- セッション、メディア、ネットワーク、UI を調整する
最小構成
設定の編集
- 対話型ウィザード
- CLI(ワンライナー)
- Control UI
- 直接編集
厳格な検証
スキーマツールに関する注記:openclaw config schemaは、Control UI と設定検証で使用されるものと同じ JSON Schema ファミリーを出力します。- そのスキーマ出力は、
openclaw.jsonの正規の機械可読コントラクトとして扱ってください。この概要と設定リファレンスはその要約です。 - フィールドの
titleとdescriptionの値は、エディターやフォームツール向けにスキーマ出力へ引き継がれます。 - ネストしたオブジェクト、ワイルドカード(
*)、配列要素([])の各エントリは、一致するフィールドドキュメントが存在する場合、同じドキュメントメタデータを継承します。 anyOf/oneOf/allOfの合成ブランチも同じドキュメントメタデータを継承するため、union/intersection の各バリアントでも同じフィールドヘルプが維持されます。config.schema.lookupは、正規化された 1 つの設定パスについて、浅いスキーマノード(title、description、type、enum、const、一般的な境界値、および類似の検証フィールド)、一致した UI ヒントメタデータ、そしてドリルダウンツール向けの直下の子要約を返します。- 実行時の plugin/channel スキーマは、gateway が現在のマニフェストレジストリを読み込める場合にマージされます。
pnpm config:docs:checkは、ドキュメント向け設定ベースライン成果物と現在のスキーマサーフェスとのドリフトを検出します。
- Gateway は起動しません
- 診断コマンドのみが動作します(
openclaw doctor、openclaw logs、openclaw health、openclaw status) - 正確な問題を確認するには
openclaw doctorを実行します - 修復を適用するには
openclaw doctor --fix(または--yes)を実行します
一般的なタスク
チャンネルをセットアップする(WhatsApp、Telegram、Discord など)
チャンネルをセットアップする(WhatsApp、Telegram、Discord など)
各チャンネルには、
channels.<provider> の下に専用の設定セクションがあります。セットアップ手順については、各チャンネル専用ページを参照してください。- WhatsApp —
channels.whatsapp - Telegram —
channels.telegram - Discord —
channels.discord - Feishu —
channels.feishu - Google Chat —
channels.googlechat - Microsoft Teams —
channels.msteams - Slack —
channels.slack - Signal —
channels.signal - iMessage —
channels.imessage - Mattermost —
channels.mattermost
モデルを選択して設定する
モデルを選択して設定する
プライマリモデルと任意のフォールバックを設定します。
agents.defaults.modelsはモデルカタログを定義し、/modelの許可リストとしても機能します。- モデル参照は
provider/model形式を使用します(例:anthropic/claude-opus-4-6)。 agents.defaults.imageMaxDimensionPxは transcript/tool 画像の縮小サイズを制御します(デフォルトは1200)。値を小さくすると、スクリーンショットの多い実行で vision token 使用量を減らせることが一般的です。- チャット中のモデル切り替えについては Models CLI を、認証ローテーションとフォールバック動作については Model Failover を参照してください。
- カスタム/セルフホスト型 provider については、リファレンスの Custom providers を参照してください。
誰がボットにメッセージを送れるかを制御する
誰がボットにメッセージを送れるかを制御する
DM アクセスは
dmPolicy によってチャンネルごとに制御されます。"pairing"(デフォルト): 未知の送信者には承認用の一度限りのペアリングコードが送られます"allowlist":allowFrom(またはペア済みの許可ストア)に含まれる送信者のみ"open": すべての受信 DM を許可します(allowFrom: ["*"]が必要)"disabled": すべての DM を無視します
groupPolicy + groupAllowFrom またはチャンネル固有の許可リストを使用します。チャンネルごとの詳細については、完全なリファレンス を参照してください。グループチャットのメンションゲートを設定する
グループチャットのメンションゲートを設定する
グループメッセージはデフォルトでメンション必須です。agent ごとにパターンを設定します。
- メタデータメンション: ネイティブの @ メンション(WhatsApp のタップしてメンション、Telegram の @bot など)
- テキストパターン:
mentionPatterns内の安全な regex パターン - チャンネルごとの上書きや self-chat モードについては、完全なリファレンス を参照してください。
agent ごとに Skills を制限する
agent ごとに Skills を制限する
共有ベースラインには
agents.defaults.skills を使用し、その後
特定の agent を agents.list[].skills で上書きします。- デフォルトで Skills を無制限にするには、
agents.defaults.skillsを省略します。 - defaults を継承するには、
agents.list[].skillsを省略します。 - Skills を無効にするには、
agents.list[].skills: []を設定します。 - Skills、Skills config、および 設定リファレンス を参照してください。
Gateway のチャンネルヘルス監視を調整する
Gateway のチャンネルヘルス監視を調整する
stale に見えるチャンネルを gateway がどの程度積極的に再起動するかを制御します。
- ヘルス監視による再起動をグローバルに無効化するには、
gateway.channelHealthCheckMinutes: 0を設定します。 channelStaleEventThresholdMinutesは、チェック間隔以上である必要があります。- グローバル監視を無効にせずに 1 つのチャンネルまたはアカウントだけ自動再起動を無効化するには、
channels.<provider>.healthMonitor.enabledまたはchannels.<provider>.accounts.<id>.healthMonitor.enabledを使用します。 - 運用上のデバッグについては Health Checks を、すべてのフィールドについては 完全なリファレンス を参照してください。
セッションとリセットを設定する
セッションとリセットを設定する
セッションは会話の継続性と分離を制御します。
dmScope:main(共有)|per-peer|per-channel-peer|per-account-channel-peerthreadBindings: スレッドに紐づくセッションルーティングのグローバルデフォルトです(Discord は/focus、/unfocus、/agents、/session idle、/session max-ageをサポートします)。- スコープ、ID リンク、送信ポリシーについては Session Management を参照してください。
- すべてのフィールドについては 完全なリファレンス を参照してください。
サンドボックス化を有効にする
サンドボックス化を有効にする
公式 iOS ビルド向けに relay ベースの push を有効にする
公式 iOS ビルド向けに relay ベースの push を有効にする
relay ベースの push は CLI での同等操作:これにより行われること:
openclaw.json で設定します。gateway 設定に次を追加します。- gateway が外部 relay 経由で
push.test、wake nudges、reconnect wakes を送信できるようにします。 - ペアリングされた iOS アプリから転送された、登録スコープの send grant を使用します。gateway にデプロイ全体の relay token は不要です。
- 各 relay ベースの登録は、iOS アプリがペアリングした gateway identity に紐付けられるため、別の gateway が保存済み登録を再利用することはできません。
- ローカル/手動の iOS ビルドは direct APNs のままです。relay ベースの送信が適用されるのは、relay を通じて登録された公式配布ビルドのみです。
- 公式/TestFlight iOS ビルドに組み込まれた relay base URL と一致している必要があります。これにより、登録トラフィックと送信トラフィックの両方が同じ relay デプロイメントに到達します。
- 同じ relay base URL でコンパイルされた公式/TestFlight iOS ビルドをインストールします。
- gateway で
gateway.push.apns.relay.baseUrlを設定します。 - iOS アプリを gateway にペアリングし、node セッションと operator セッションの両方を接続します。
- iOS アプリが gateway identity を取得し、App Attest とアプリのレシートを使って relay に登録し、その後 relay ベースの
push.apns.registerpayload をペアリング済み gateway に公開します。 - gateway は relay handle と send grant を保存し、それらを
push.test、wake nudges、reconnect wakes に使用します。
- iOS アプリを別の gateway に切り替える場合、アプリを再接続して、その gateway に紐付いた新しい relay 登録を公開できるようにします。
- 別の relay デプロイメントを指す新しい iOS ビルドを配布した場合、アプリは古い relay origin を再利用する代わりに、キャッシュされた relay 登録を更新します。
OPENCLAW_APNS_RELAY_BASE_URLとOPENCLAW_APNS_RELAY_TIMEOUT_MSは、一時的な env 上書きとして引き続き使用できます。OPENCLAW_APNS_RELAY_ALLOW_HTTP=trueは、loopback 専用の開発用エスケープハッチのままです。HTTP の relay URL を設定に永続化しないでください。
heartbeat(定期チェックイン)を設定する
heartbeat(定期チェックイン)を設定する
every: 期間文字列(30m、2h)。無効化するには0mを設定します。target:last|none|<channel-id>(例:discord、matrix、telegram、whatsapp)directPolicy: DM スタイルの heartbeat target に対してallow(デフォルト)またはblock- 完全なガイドについては Heartbeat を参照してください。
cron ジョブを設定する
cron ジョブを設定する
sessionRetention: 完了した分離実行セッションをsessions.jsonから削除します(デフォルトは24h、無効化するにはfalseを設定)。runLog:cron/runs/<jobId>.jsonlをサイズと保持行数で削除します。- 機能概要と CLI 例については Cron jobs を参照してください。
webhook(hooks)を設定する
webhook(hooks)を設定する
Gateway で HTTP webhook エンドポイントを有効にします。セキュリティに関する注記:
- すべての hook/webhook payload 内容は信頼できない入力として扱ってください。
- 専用の
hooks.tokenを使用してください。共有 Gateway token を使い回さないでください。 - Hook 認証はヘッダーのみです(
Authorization: Bearer ...またはx-openclaw-token)。クエリ文字列の token は拒否されます。 hooks.pathは/にできません。webhook 受信は/hooksのような専用サブパスにしてください。- 危険なコンテンツ回避フラグ(
hooks.gmail.allowUnsafeExternalContent、hooks.mappings[].allowUnsafeExternalContent)は、厳密に限定したデバッグを行う場合を除き無効のままにしてください。 hooks.allowRequestSessionKeyを有効にする場合は、呼び出し側が選ぶ session key を制限するためにhooks.allowedSessionKeyPrefixesも設定してください。- hook 駆動の agent では、強力で最新のモデル階層と厳格な tool ポリシーを優先してください(たとえば、可能であればメッセージングのみ + サンドボックス化)。
マルチエージェントルーティングを設定する
マルチエージェントルーティングを設定する
別々の workspace と session を持つ複数の分離された agent を実行します。バインディングルールと agent ごとのアクセスプロファイルについては、Multi-Agent と 完全なリファレンス を参照してください。
設定を複数ファイルに分割する($include)
設定を複数ファイルに分割する($include)
大きな設定を整理するには
$include を使用します。- 単一ファイル: そのオブジェクト全体を置き換えます
- ファイル配列: 順番に deep-merge されます(後勝ち)
- 兄弟キー: include の後にマージされます(include された値を上書き)
- ネストした include: 最大 10 階層までサポート
- 相対パス: include 元ファイルを基準に解決されます
- エラーハンドリング: ファイル欠如、パースエラー、循環 include に対して明確なエラーを返します
設定のホットリロード
Gateway は~/.openclaw/openclaw.json を監視し、変更を自動的に適用します。ほとんどの設定では手動再起動は不要です。
リロードモード
| モード | 動作 |
|---|---|
hybrid(デフォルト) | 安全な変更を即座にホット適用します。重要な変更では自動的に再起動します。 |
hot | 安全な変更のみをホット適用します。再起動が必要な場合は警告を記録し、対応は自分で行います。 |
restart | 安全かどうかに関係なく、設定変更のたびに Gateway を再起動します。 |
off | ファイル監視を無効にします。変更は次回の手動再起動で反映されます。 |
ホット適用されるものと再起動が必要なもの
ほとんどのフィールドはダウンタイムなしでホット適用されます。hybrid モードでは、再起動が必要な変更は自動的に処理されます。
| カテゴリ | フィールド | 再起動が必要? |
|---|---|---|
| Channels | channels.*、web(WhatsApp)— すべての組み込みおよび extension channels | いいえ |
| Agent & models | agent、agents、models、routing | いいえ |
| Automation | hooks、cron、agent.heartbeat | いいえ |
| Sessions & messages | session、messages | いいえ |
| Tools & media | tools、browser、skills、audio、talk | いいえ |
| UI & misc | ui、logging、identity、bindings | いいえ |
| Gateway server | gateway.*(port、bind、auth、tailscale、TLS、HTTP) | はい |
| Infrastructure | discovery、canvasHost、plugins | はい |
gateway.reload と gateway.remote は例外です。これらの変更では再起動は発生しません。Config RPC(プログラムによる更新)
control-plane の書き込み RPC(
config.apply、config.patch、update.run)は、deviceId+clientIp ごとに 60 秒あたり 3 リクエスト にレート制限されます。制限された場合、RPC は retryAfterMs を付けて UNAVAILABLE を返します。config.schema.lookup: 浅い スキーマノード、一致したヒントメタデータ、直下の子要約とともに、1 つのパスにスコープされた設定サブツリーを確認するconfig.get: 現在のスナップショット + hash を取得するconfig.patch: 推奨される部分更新パスconfig.apply: 設定全体を置き換える場合のみupdate.run: 明示的な self-update + restart
config.schema.lookup
の後に config.patch を優先してください。
config.apply(完全置換)
config.apply(完全置換)
設定全体を検証して書き込み、Gateway を 1 ステップで再起動します。パラメータ:
raw(string)— 設定全体の JSON5 payloadbaseHash(任意)—config.getからの設定 hash(設定が存在する場合は必須)sessionKey(任意)— 再起動後の wake-up ping 用 session keynote(任意)— restart sentinel 用のメモrestartDelayMs(任意)— 再起動までの遅延(デフォルト 2000)
config.patch(部分更新)
config.patch(部分更新)
部分更新を既存の設定にマージします(JSON merge patch セマンティクス)。
- オブジェクトは再帰的にマージされる
nullはキーを削除する- 配列は置き換えられる
raw(string)— 変更するキーだけを含む JSON5baseHash(必須)—config.getからの設定 hashsessionKey、note、restartDelayMs—config.applyと同じ
config.apply と同じです。保留中の再起動はまとめられ、再起動サイクル間には 30 秒のクールダウンがあります。環境変数
OpenClaw は、親プロセスからの env vars に加えて、次も読み込みます。- 現在の作業ディレクトリの
.env(存在する場合) ~/.openclaw/.env(グローバルフォールバック)
シェル env のインポート(任意)
シェル env のインポート(任意)
有効な場合、期待されるキーが設定されていないと、OpenClaw はログインシェルを実行し、不足しているキーのみをインポートします。環境変数での同等設定:
OPENCLAW_LOAD_SHELL_ENV=1設定値での env var 置換
設定値での env var 置換
任意の設定文字列値で ルール:
${VAR_NAME} を使って env vars を参照できます。- 一致するのは大文字名のみ:
[A-Z_][A-Z0-9_]* - 存在しない/空の vars は読み込み時エラーになります
- リテラル出力にするには
$${VAR}でエスケープします $includeファイル内でも動作します- インライン置換:
"${BASE}/v1"→"https://api.example.com/v1"
Secret refs(env、file、exec)
Secret refs(env、file、exec)
SecretRef オブジェクトをサポートするフィールドでは、次を使用できます。SecretRef の詳細(
env/file/exec 用の secrets.providers を含む)は Secrets Management にあります。
サポートされる認証情報パスは SecretRef Credential Surface に一覧があります。完全なリファレンス
フィールドごとの完全なリファレンスについては、Configuration Reference を参照してください。関連: 設定例 · Configuration Reference · Doctor