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 doctor、openclaw logs、openclaw health、openclaw status) - 正確な問題を確認するには
openclaw doctorを実行する - 修復を適用するには
openclaw doctor --fix(または--yes) を実行する
Gateway は正常に起動するたびに、信頼済みの最後に正常確認済みコピーを保持しますが、
起動時やホットリロード時にそれを自動復元することはありません。openclaw.json が
検証に失敗した場合 (Plugin ローカル検証を含む)、Gateway の起動は失敗するか、
リロードがスキップされ、現在のランタイムは最後に受理された設定を保持します。
接頭辞付き/上書き破損した設定を修復するか、最後に正常確認済みのコピーを復元するには
openclaw doctor --fix (または --yes) を実行してください。候補に *** などの
伏せ字化されたシークレットプレースホルダーが含まれる場合、最後に正常確認済みへの昇格はスキップされます。
よくあるタスク
チャネルを設定する (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
すべてのチャネルは同じ 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
],
},
}
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,
},
},
}
サンドボックス化を有効にする
分離されたサンドボックスランタイムでエージェントセッションを実行します。
{
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 と一致している必要があります。これにより、登録トラフィックと送信トラフィックが同じリレーデプロイに到達します。
エンドツーエンドの流れ:
- 同じリレーベース URL でコンパイルされた公式/TestFlight iOS ビルドをインストールします。
- Gateway で
gateway.push.apns.relay.baseUrlを設定します。 - iOS アプリを Gateway にペアリングし、node セッションと operator セッションの両方を接続させます。
- iOS アプリが Gateway ID を取得し、App Attest とアプリレシートを使ってリレーに登録し、その後リレー経由の
push.apns.registerペイロードをペアリング済み Gateway に公開します。 - Gateway はリレーハンドルと送信許可を保存し、それらを
push.test、ウェイク通知、再接続ウェイクに使用します。
運用上の注意:
- iOS アプリを別の Gateway に切り替える場合は、その Gateway にバインドされた新しいリレー登録を公開できるようにアプリを再接続してください。
- 別のリレーデプロイを指す新しい iOS ビルドを出荷すると、アプリは古いリレー元を再利用せず、キャッシュ済みリレー登録を更新します。
互換性に関する注意:
OPENCLAW_APNS_RELAY_BASE_URLとOPENCLAW_APNS_RELAY_TIMEOUT_MSは一時的な環境変数オーバーライドとして引き続き機能します。OPENCLAW_APNS_RELAY_ALLOW_HTTP=trueは local loopback 専用の開発用退避手段のままです。HTTP リレー URL を設定に永続化しないでください。
Heartbeat(定期チェックイン)を設定する
{
agents: {
defaults: {
heartbeat: {
every: "30m",
target: "last",
},
},
},
}
every: 期間文字列(30m、2h)。無効にするには0mを設定します。target:last|none|<channel-id>(例:discord、matrix、telegram、whatsapp)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.allowUnsafeExternalContent、hooks.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.apply と config.patch はどちらも raw、baseHash、sessionKey、
note、restartDelayMs を受け付けます。設定がすでに存在する場合、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 認証情報サーフェスに一覧されています。
完全な優先順位とソースについては、環境を参照してください。
完全なリファレンス
フィールドごとの完全なリファレンスについては、設定リファレンス を参照してください。