Gateway
設定リファレンス
~/.openclaw/openclaw.json のフィールドレベルのリファレンス:キー、デフォルト、および各サブシステムの詳細ページへのリンク。タスク指向のセットアップガイダンスについては、設定を参照してください。チャンネルおよび Plugin が所有するコマンドカタログと、メモリ/QMD の詳細設定は、ここではなくそれぞれのページに記載されています。
設定形式は JSON5(コメントおよび末尾のカンマを使用可能)です。すべてのフィールドは任意です。省略した場合、OpenClaw は安全なデフォルトを使用します。
このページよりもコード上の実態が優先されます:
openclaw config schemaは、バンドル済み/Plugin/チャンネルのメタデータを統合した、検証および Control UI で使用されるライブ JSON Schema を出力します。- エージェントは、設定を編集する前に、
gatewayツールアクションconfig.schema.lookupを呼び出して、パスでスコープされた正確なスキーマノードを1つ取得する必要があります。 pnpm config:docs:check/pnpm config:docs:genは、このドキュメントのベースラインハッシュを現在のスキーマサーフェスに対して検証します。
スキーマ uiHints には、すべてのパスについて解決済みの advanced ブール値も含まれます。
Control UI はこれを使用して、一般的なフィールドを先に表示し、セクションごとに高度なフィールドを折りたたみます。検索対象には引き続き両方の階層が含まれます。階層メタデータは表示専用です。
キーを追加する場合は、リーフで階層を宣言するか、最も近い祖先の宣言を継承させます。宣言済みの祖先がないパスは、デフォルトで高度な項目になります。
専用の詳細リファレンス:
memory.search.*、memory.qmd.*、memory.citations、およびplugins.entries.memory-core.config.dreaming配下の Dreaming 設定については、メモリ設定リファレンス。- 現在の組み込みおよびバンドル済みコマンドカタログについては、スラッシュコマンド。
- チャンネル固有のコマンドサーフェスについては、それを所有するチャンネル/Plugin のページ。
チャンネル
チャンネルごとの設定キーは、設定 - チャンネルに記載されています:Slack、Discord、Telegram、WhatsApp、Matrix、iMessage、およびその他のバンドル済みチャンネル向けの channels.*(認証、アクセス制御、マルチアカウント、メンションゲート)。
エージェントのデフォルト、マルチエージェント、セッション、メッセージ
以下については、設定 - エージェントを参照してください:
agents.defaults.*(ワークスペース、モデル、思考、Heartbeat、メモリ、メディア、Skills、サンドボックス)multiAgent.*(マルチエージェントのルーティングとバインディング)session.*(セッションのライフサイクル、Compaction、プルーニング)messages.*(メッセージ配信、TTS、Markdown レンダリング)talk.*(Talk モード)talk.consultThinkingLevel:Control UI Talk のリアルタイム相談の背後で実行される OpenClaw エージェント全体に対する思考レベルの上書きtalk.consultFastMode:Control UI Talk のリアルタイム相談に対する1回限りの高速モード上書きtalk.speechLocale:Android、iOS、macOS での Talk 音声認識に使用する任意の BCP 47 ロケール IDtalk.silenceTimeoutMs:未設定の場合、Talk は文字起こしを送信する前のプラットフォーム既定の一時停止時間を維持します(700 ms on macOS and Android, 900 ms on iOS)talk.realtime.consultRouting:openclaw_agent_consultをスキップする、確定済みのリアルタイム Talk 文字起こし向けの Gateway リレーフォールバック
ツールとカスタムプロバイダー
ツールポリシー、実験的な切り替え、プロバイダーを利用するツール設定、およびカスタムプロバイダー/base URL のセットアップについては、設定 - ツールとカスタムプロバイダーを参照してください。
モデル
プロバイダー定義、モデルの許可リスト、およびカスタムプロバイダーのセットアップについては、設定 - ツールとカスタムプロバイダーを参照してください。
models ルートは、グローバルなモデルカタログの動作も管理します。
{ models: { // 任意。デフォルト:true。変更時は Gateway の再起動が必要です。 pricing: { enabled: false }, },}models.mode:プロバイダーカタログの動作(mergeまたはreplace)。models.providers:プロバイダー ID をキーとするカスタムプロバイダーマップ。models.providers.*.localService:ローカルモデルサーバー用の任意のオンデマンドプロセスマネージャー。OpenClaw は設定されたヘルスエンドポイントをプローブし、必要に応じて絶対パスのcommandを起動し、準備完了を待ってからモデルリクエストを送信します。ローカルモデルサービスを参照してください。models.pricing.enabled:サイドカーとチャンネルが Gateway の準備完了パスに到達した後に開始される、バックグラウンドの料金情報ブートストラップを制御します。falseの場合、Gateway は OpenRouter および LiteLLM の料金カタログ取得をスキップします。設定済みのmodels.providers.*.models[].cost値は、ローカルのコスト見積もりで引き続き機能します。
MCP
OpenClaw が管理する MCP サーバー定義は mcp.servers 配下にあり、組み込み OpenClaw およびその他のランタイムアダプターによって使用されます。openclaw mcp list、show、set、unset コマンドは、設定編集時に対象サーバーへ接続することなく、このブロックを管理します。
{ mcp: { servers: { docs: { command: "npx", args: ["-y", "@modelcontextprotocol/server-fetch"], }, remote: { url: "https://example.com/mcp", transport: "streamable-http", // streamable-http | sse requestTimeoutMs: 20000, connectionTimeoutMs: 5000, supportsParallelToolCalls: true, headers: { Authorization: "Bearer ${MCP_REMOTE_TOKEN}", }, auth: "oauth", oauth: { scope: "docs.read", }, sslVerify: true, clientCert: "/path/to/client.crt", clientKey: "/path/to/client.key", toolFilter: { include: ["search_*"], exclude: ["admin_*"], }, // 任意の Codex app-server プロジェクション制御。 codex: { agents: ["main"], defaultToolsApprovalMode: "approve", // auto | prompt | approve }, }, }, },}mcp.servers:設定済みの MCP ツールを公開するランタイム向けの、名前付き stdio またはリモート MCP サーバー定義。 リモートエントリはtransport: "streamable-http"またはtransport: "sse"を使用します。type: "http"は CLI ネイティブのエイリアスであり、openclaw mcp setとopenclaw doctor --fixによって正規のtransportフィールドへ正規化されます。mcp.servers.<name>.enabled:保存済みのサーバー定義を維持しつつ、組み込み OpenClaw の MCP 検出およびツールプロジェクションから除外するには、falseを設定します。mcp.servers.<name>.requestTimeoutMs:サーバーごとの MCP リクエストタイムアウト(ミリ秒)。mcp.servers.<name>.connectionTimeoutMs:サーバーごとの接続タイムアウト(ミリ秒)。mcp.servers.<name>.supportsParallelToolCalls:MCP ツール呼び出しを並列実行するかどうかを選択できるアダプター向けの、任意の並行性ヒント。mcp.servers.<name>.auth:OAuth を必要とする HTTP MCP サーバーでは、"oauth"を設定します。OpenClaw の状態領域にトークンを保存するには、openclaw mcp login <name>を実行します。mcp.servers.<name>.oauth:任意の OAuth スコープ、リダイレクト URL、およびクライアントメタデータ URL の上書き。mcp.servers.<name>.sslVerify、clientCert、clientKey:プライベートエンドポイントおよび相互 TLS 向けの HTTP TLS 制御。mcp.servers.<name>.toolFilter:任意のサーバーごとのツール選択。includeは検出される MCP ツールを一致する名前に限定し、excludeは一致する名前を非表示にします。エントリには、MCP ツールの正確な名前または単純な*glob を指定します。リソースまたはプロンプトを持つサーバーでは、ユーティリティツール名(resources_list、resources_read、prompts_list、prompts_get)も生成され、それらの名前にも同じフィルターが適用されます。mcp.servers.<name>.codex:任意の Codex app-server プロジェクション制御。 このブロックは Codex app-server スレッド専用の OpenClaw メタデータであり、ACP セッション、汎用 Codex ハーネス設定、その他のランタイムアダプターには影響しません。 空でないcodex.agentsは、サーバーを一覧にある OpenClaw エージェント ID に限定します。 空、空白、または無効なスコープ付きエージェントリストは、グローバルになるのではなく、設定検証で拒否され、ランタイムのプロジェクションパスから除外されます。codex.defaultToolsApprovalModeは、そのサーバーに対して Codex ネイティブのdefault_tools_approval_modeを出力します。OpenClaw は、ネイティブのmcp_servers設定を Codex に渡す前に、codexブロックを削除します。このブロックを省略すると、Codex のデフォルト MCP 承認動作を使用して、すべての Codex app-server エージェントにサーバーがプロジェクションされます。- セッションスコープのバンドル済み MCP ランタイムは、組み込みの10分間のアイドル TTL を使用します。 1回限りの組み込み実行では、実行終了時のクリーンアップを要求します。TTL は、長時間存続するセッションおよび将来の呼び出し元に対する最終的な保護手段です。
mcp.*配下の変更は、キャッシュされたセッション MCP ランタイムを破棄することでホット適用されます。 次回のツール検出または使用時に新しい設定から再作成されるため、削除されたmcp.serversエントリはアイドル TTL を待たずに直ちに回収されます。- ランタイム検出では、MCP ツールリストの変更通知も尊重し、そのセッションのキャッシュ済みカタログを破棄します。リソースまたはプロンプトを公開するサーバーには、リソースの一覧表示/読み取り、およびプロンプトの一覧表示/取得を行うユーティリティツールが追加されます。ツール呼び出しが繰り返し失敗すると、次の呼び出しを試行する前に、影響を受けたサーバーが短時間一時停止されます。
ランタイムの動作については、MCPおよび CLI バックエンドを参照してください。
Skills
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, install: { preferBrew: true, nodeManager: "npm", // npm | pnpm | yarn | bun allowUploadedArchives: false, }, workshop: { allowSymlinkTargetWrites: false, }, entries: { "image-lab": { apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // または平文文字列 env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}allowBundled:バンドル済み Skills のみを対象とする任意の許可リスト(管理対象/ワークスペースの Skills には影響しません)。load.extraDirs:追加の共有 Skill ルート(優先度は最低)。load.allowSymlinkTargets:Skill のシンボリックリンクが設定済みのソースルート外にある場合に、そのリンクの解決先として許可される、信頼済みの実ターゲットルート。workshop.allowSymlinkTargetWrites:Skill Workshop の適用時に、すでに信頼済みのシンボリックリンクターゲットを介して書き込めるようにします(デフォルト:false)。install.preferBrew:true の場合、brewが利用可能であれば、他の種類のインストーラーへフォールバックする前に Homebrew インストーラーを優先します。install.nodeManager:metadata.openclaw.install仕様に対する Node インストーラーの優先設定(npm|pnpm|yarn|bun)。install.allowUploadedArchives:信頼済みのoperator.adminGateway クライアントが、skills.upload.*を介してステージングされたプライベート zip アーカイブをインストールできるようにします(デフォルト:false)。これはアップロード済みアーカイブのパスのみを有効にします。通常の ClawHub インストールでは必要ありません。entries.<skillKey>.enabled: falseは、バンドル済みまたはインストール済みであっても Skill を無効にします。entries.<skillKey>.apiKey:主要な環境変数を宣言する Skills 向けの簡易設定(平文文字列または SecretRef オブジェクト)。limits.maxCandidatesPerRoot、limits.maxSkillsLoadedPerSource、limits.maxSkillsInPrompt、limits.maxSkillsPromptChars、limits.maxSkillFileBytes:Skill の検出範囲と、モデルに提示される Skills プロンプトを制限します。- Skill Workshop の自律性/承認設定(
workshop.autonomous.enabled、workshop.approvalPolicy、workshop.maxPending、workshop.maxSkillBytes)については、Skills の設定に記載されています。
Plugins
{ plugins: { enabled: true, allow: ["voice-call"], deny: [], load: { paths: ["~/Projects/oss/voice-call-plugin"], }, entries: { "voice-call": { enabled: true, hooks: { allowPromptInjection: false, }, config: { provider: "twilio" }, }, }, },}~/.openclaw/extensionsおよび<workspace>/.openclaw/extensions配下のパッケージまたはバンドルディレクトリに加え、plugins.load.pathsに指定されたファイルまたはディレクトリから読み込まれます。- スタンドアロンの Plugin ファイルは
plugins.load.pathsに配置してください。自動検出される拡張機能のルートでは、ルート内のヘルパースクリプトが起動を妨げないよう、トップレベルの.js、.mjs、.tsファイルは無視されます。 - 検出では、ネイティブ OpenClaw Plugin に加え、互換性のある Codex バンドルと Claude バンドル(マニフェストなしの Claude デフォルトレイアウトバンドルを含む)を受け入れます。
- 設定の変更には Gateway の再起動が必要です。
allow: オプションの許可リスト(記載された Plugin のみ読み込まれます)。denyが優先されます。plugins.entries.<id>.apiKey: Plugin レベルの API キー用簡易フィールド(Plugin が対応している場合)。plugins.entries.<id>.env: Plugin スコープの環境変数マップ。plugins.entries.<id>.hooks.allowPromptInjection:falseの場合、コアはbefore_prompt_buildなどのプロンプトを変更するフックをブロックします。ネイティブ Plugin フックおよび対応しているバンドル提供のフックディレクトリに適用されます。plugins.entries.<id>.hooks.allowConversationAccess:trueの場合、信頼された非バンドル Plugin は、llm_input、llm_output、before_model_resolve、before_agent_reply、before_agent_run、before_agent_finalize、agent_endなどの型付きフックから会話の未加工コンテンツを読み取れます。plugins.entries.<id>.subagent.allowModelOverride: バックグラウンドのサブエージェント実行について、実行ごとのproviderおよびmodelのオーバーライドを要求する権限を、この Plugin に明示的に付与します。plugins.entries.<id>.subagent.allowedModels: 信頼されたサブエージェントのオーバーライドに使用できる正規provider/modelターゲットのオプションの許可リスト。任意のモデルを意図的に許可する場合にのみ"*"を使用してください。plugins.entries.<id>.llm.allowModelOverride:api.runtime.llm.completeのモデルオーバーライドを要求する権限を、この Plugin に明示的に付与します。plugins.entries.<id>.llm.allowedModels: 信頼された Plugin の LLM 補完オーバーライドに使用できる正規provider/modelターゲットのオプションの許可リスト。任意のモデルを意図的に許可する場合にのみ"*"を使用してください。plugins.entries.<id>.llm.allowAgentIdOverride: デフォルト以外のエージェント ID に対してapi.runtime.llm.completeを実行する権限を、この Plugin に明示的に付与します。plugins.entries.<id>.config: Plugin が定義する設定オブジェクト(利用可能な場合はネイティブ OpenClaw Plugin スキーマで検証されます)。- チャンネル Plugin のアカウント/ランタイム設定は
channels.<id>配下にあり、中央の OpenClaw オプションレジストリではなく、所有する Plugin のマニフェストにあるchannelConfigsメタデータで記述する必要があります。
Codex ハーネス Plugin の設定
バンドルされている codex Plugin は、ネイティブ Codex app-server ハーネスの設定を
plugins.entries.codex.config 配下で所有します。設定項目の全体については
Codex ハーネスリファレンスを、ランタイムモデルについては
Codex ハーネスを参照してください。
codexPlugins は、ネイティブ Codex ハーネスを選択したセッションにのみ適用されます。
OpenClaw プロバイダーの実行、ACP
会話バインディング、または Codex 以外のハーネスに対して Codex Plugin を有効にするものではありません。
{ plugins: { entries: { codex: { enabled: true, config: { codexPlugins: { enabled: true, allow_all_plugins: true, allow_destructive_actions: "auto", plugins: { "google-calendar": { enabled: true, marketplaceName: "openai-curated", pluginName: "google-calendar", allow_destructive_actions: false, }, }, }, }, }, }, },}plugins.entries.codex.config.codexPlugins.enabled: Codex ハーネスでネイティブ Codex Plugin/アプリのサポートを有効にします。デフォルト:false。plugins.entries.codex.config.codexPlugins.allow_all_plugins: 認証済み Codex アカウントに接続され、現在アクセス可能なすべてのアプリを、 新しい各ネイティブ Codex スレッドで公開します。デフォルト:false。plugins.entries.codex.config.codexPlugins.allow_destructive_actions: 設定済み Plugin アプリからの確認要求に対する、破壊的アクションのデフォルトポリシーです。 安全な Codex 承認スキーマを確認なしで受け入れるにはtrue、拒否するにはfalse、 Codex が要求する承認を OpenClaw Plugin の承認経由で処理するには"auto"、永続的な承認なしですべての Plugin の書き込み/破壊的 アクションについて確認するには"ask"を使用します。"ask"モードでは、対象アプリに対する Codex のツールごとの永続的な承認オーバーライドを消去し、Codex スレッドの開始前に そのアプリの承認レビュアーとして人間を選択します。 デフォルト:true。plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled: グローバルなcodexPlugins.enabledも true の場合に、 設定済み Plugin エントリを有効にします。 明示的なエントリのデフォルト:true。plugins.entries.codex.config.codexPlugins.plugins.<key>.marketplaceName: 安定したマーケットプレイス ID。解決されるすべてのエントリでpluginNameとともに必須です。"openai-curated"および"workspace-directory"をサポートします。いずれかの ID フィールドがないエントリは無視されます。plugins.entries.codex.config.codexPlugins.plugins.<key>.pluginName: 安定した Codex Plugin ID。marketplaceNameとともに必須です。workspace-directoryエントリでは、plugin/listが返すマーケットプレイス修飾済みのsummary.idを正確に使用する必要があります。例:"example-plugin@workspace-directory"。plugins.entries.codex.config.codexPlugins.plugins.<key>.allow_destructive_actions: Plugin ごとの破壊的アクションのオーバーライド。省略した場合は、グローバルなallow_destructive_actionsの値が使用されます。Plugin ごとの値には、同じtrue、false、"auto"、"ask"ポリシーを指定できます。
"ask" を使用する許可済みの各 Plugin アプリは、そのアプリの承認リクエストを
人間のレビュアーにルーティングします。他のアプリおよびアプリ以外のスレッド承認では、
設定済みのレビュアーが維持されるため、異なる Plugin ポリシーを混在させても "ask" の動作は継承されません。
codexPlugins.enabled はグローバルな有効化ディレクティブです。移行によって書き込まれた明示的な Plugin
エントリは、厳選されたインストールおよび修復の対象となる永続的なセットです。手動で設定した workspace-directory エントリは、
すでにインストールされ有効になっており、その所有アプリにアクセスできる必要があります。OpenClaw は、
それらのインストールや認証を行いません。Codex が明示的なワークスペース
カタログのリクエストを拒否した場合、有効なワークスペースエントリは
marketplace_missing によりフェイルクローズしますが、デフォルトカタログの厳選されたエントリは
引き続き利用できます。plugins["*"] はサポートされておらず、install スイッチもありません。また、
ローカルの marketplacePath 値はホスト固有であるため、意図的に設定フィールドにはしていません。
app-server のバージョンおよび準備要件については、
ネイティブ Codex Pluginを参照してください。
app/list の準備状況チェックは 1 時間キャッシュされ、古くなると
非同期で更新されます。Codex スレッドのアプリ設定は、毎ターンではなく Codex ハーネスの
セッション確立時に計算されます。ネイティブ Plugin の設定を変更した後は、/new、/reset、または Gateway の
再起動を使用してください。
codexPlugins.allow_all_plugins は、現在アクセス可能なすべてのアカウント
アプリを、新しい各ネイティブ Codex スレッドにスナップショットします。Plugin やアプリはインストールされず、
アクセスできないアプリは除外されたままです。アカウントアプリにはグローバルな
codexPlugins.allow_destructive_actions ポリシーが適用されます。同じアプリが両方の経路に存在する場合は、
明示的な Plugin エントリが優先されます。app/list を読み取れない場合、
アカウント全体への公開はフェイルクローズします。
plugins.entries.firecrawl.config.webFetch: Firecrawl Web フェッチプロバイダーの設定。apiKey: 上限を引き上げるためのオプションの Firecrawl API キー(SecretRef を受け入れます)。plugins.entries.firecrawl.config.webSearch.apiKeyまたはFIRECRAWL_API_KEY環境変数にフォールバックします。baseUrl: Firecrawl API のベース URL(デフォルト:https://api.firecrawl.dev。セルフホストのオーバーライドはプライベート/内部エンドポイントを対象にする必要があります)。onlyMainContent: ページから主要コンテンツのみを抽出します(デフォルト:true)。maxAgeMs: キャッシュの最大有効期間(ミリ秒)(デフォルト:172800000/ 2 日)。timeoutSeconds: スクレイプリクエストのタイムアウト(秒)(デフォルト:60)。
plugins.entries.xai.config.xSearch: xAI X Search(Grok Web 検索)の設定。enabled: X Search プロバイダーを有効にします。model: 検索に使用する Grok モデル(例:"grok-4.3")。
plugins.entries.memory-core.config.dreaming: メモリ Dreaming の設定。フェーズとしきい値については、Dreamingを参照してください。enabled: Dreaming のマスタースイッチ(デフォルトfalse)。frequency: Dreaming の完全な各スイープを実行する Cron 間隔(デフォルトは"0 3 * * *")。model: オプションの Dream Diary サブエージェントモデルのオーバーライド。plugins.entries.memory-core.subagent.allowModelOverride: trueが必要です。ターゲットを制限するにはallowedModelsと組み合わせます。モデルが利用できないエラーの場合は、セッションのデフォルトモデルで 1 回再試行します。信頼または許可リストの失敗では、暗黙にフォールバックしません。- フェーズポリシーとしきい値は実装の詳細です(ユーザー向けの設定キーではありません)。
- メモリ設定の全体については、メモリ設定リファレンスを参照してください。
memory.search.*- エージェントごとのオーバーライドには
agents.entries.*.memory.search.* memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- 有効な Claude バンドル Plugin は、
settings.jsonから埋め込みの OpenClaw デフォルトも提供できます。OpenClaw はそれらを、未加工の OpenClaw 設定パッチではなく、サニタイズされたエージェント設定として適用します。 plugins.slots.memory: アクティブなメモリ Plugin ID を選択します。メモリ Plugin を無効にするには"none"を指定します。plugins.slots.contextEngine: アクティブなコンテキストエンジン Plugin ID を選択します。別のエンジンをインストールして選択しない限り、デフォルトは"legacy"です。
Pluginを参照してください。
ブラウザ
{ browser: { enabled: true, evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { // dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access // allowPrivateNetwork: true, // legacy alias // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, tabCleanup: { enabled: true, idleMinutes: 120, maxTabsPerSession: 8, sweepMinutes: 5, }, profiles: { openclaw: { cdpPort: 18800, color: "#FF4500" }, work: { cdpPort: 18801, color: "#0066CC", executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", }, user: { driver: "existing-session", attachOnly: true, color: "#00AA00" }, brave: { driver: "existing-session", attachOnly: true, userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", color: "#FB542B", }, remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }, }, color: "#FF4500", // headless: false, // noSandbox: false, // extraArgs: [], // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", // attachOnly: false, },}evaluateEnabled: falseはact:evaluateとwait --fnを無効にします。tabCleanupは、アイドル時間の経過後、またはセッションが上限を超えたときに、追跡対象のプライマリエージェントの タブをベストエフォートで定期的にクリーンアップする処理を制御します。追跡の対象となるのは、 ブラウザツールaction: "open"によって作成されたタブのみです。ユーザーが開いたタブや 所有者が不明なタブが追跡対象として取り込まれることはありません。tabCleanupを無効にしても、明示的なセッションライフサイクルのクリーンアップは無効になりません。- 安定したネイティブ CDP ターゲットとブラウザ ID を使用してホストローカルで開いたタブは、
共有 SQLite 状態に保存され、Gateway の再起動後も
/newとセッションライフサイクルのクリーンアップの対象となります。ネイティブツール向けの CDP ターゲットも、 再起動後にアイドルおよび上限超過クリーンアップの対象となります。Chrome MCP は プロセスローカルのターゲットハンドルを使用するため、コールド状態の既存セッションレコードは、 再起動後の帰属不明なアクティビティに対してアイドルスイープを実行するリスクを避け、ライフサイクルのクリーンアップを待機します。 OpenClaw は閉じる前に、プロファイルとブラウザインスタンスを 検証します。Chrome MCP の自動接続、/json/versionブラウザ ID の欠落、未解決のネイティブターゲットは完全にプロセスローカルのままになるため、 再起動後に自動的に閉じられることはありません。追跡されていない古いタブは、 手動で閉じる必要があります。一時的な障害は保留状態となり、後で再試行されます。 タブクリーンアップの所有権を参照してください。 ssrfPolicy.dangerouslyAllowPrivateNetworkは未設定の場合に無効となるため、ブラウザナビゲーションはデフォルトで厳格なままです。- プライベートネットワークへのブラウザナビゲーションを意図的に信頼する場合にのみ、
ssrfPolicy.dangerouslyAllowPrivateNetwork: trueを設定してください。 - 厳格モードでは、リモート CDP プロファイルエンドポイント(
profiles.*.cdpUrl)にも、到達可能性および検出のチェック時に同じプライベートネットワークのブロックが適用されます。 ssrfPolicy.allowPrivateNetworkは従来のエイリアスとして引き続きサポートされます。- 厳格モードでは、明示的な例外として
ssrfPolicy.hostnameAllowlistとssrfPolicy.allowedHostnamesを使用してください。 - リモートプロファイルはアタッチ専用です(開始、停止、リセットは無効)。
profiles.*.cdpUrlはhttp://、https://、ws://、wss://を受け付けます。 OpenClaw に/json/versionを検出させる場合は HTTP(S) を使用し、 プロバイダーから直接 DevTools WebSocket URL が提供される場合は WS(S) を使用してください。- 外部で管理されている CDP サービスにループバック経由で到達できる場合は、
そのプロファイルの
attachOnly: trueを設定してください。設定しない場合、OpenClaw はループバックポートを ローカル管理のブラウザプロファイルとして扱い、ローカルポートの所有権エラーを報告することがあります。 existing-sessionプロファイルは CDP の代わりに Chrome MCP を使用し、 選択したホスト上または接続済みのブラウザ Node 経由でアタッチできます。existing-sessionプロファイルでは、userDataDirを設定して、 Brave や Edge など、Chromium ベースの特定のブラウザプロファイルを対象にできます。existing-sessionプロファイルでは、Chrome がすでに DevTools HTTP(S) 検出エンドポイントまたは 直接 WS(S) エンドポイントの背後で実行されている場合に、cdpUrlを設定できます。この モードでは、OpenClaw は自動接続を使用せず、エンドポイントを Chrome MCP に渡します。 Chrome MCP の起動引数ではuserDataDirは無視されます。existing-sessionプロファイルには、現在の Chrome MCP ルートの制限が引き続き適用されます。 CSS セレクターによるターゲット指定ではなくスナップショット/参照ベースのアクション、単一ファイルのアップロード フック、ダイアログのタイムアウト上書き不可、wait --load networkidleなし、およびresponsebody、PDF エクスポート、ダウンロードのインターセプト、バッチアクションなし、という制限です。- ローカル管理の
openclawプロファイルでは、cdpPortとcdpUrlが自動的に割り当てられます。cdpUrlを明示的に設定するのは、リモート CDP プロファイルまたは既存セッションのエンドポイントへの アタッチの場合のみです。 - ローカル管理プロファイルでは、
executablePathを設定して、そのプロファイルのグローバルbrowser.executablePathを上書きできます。これを使用すると、1 つのプロファイルを Chrome で実行し、別のプロファイルを Brave で実行できます。 - 自動検出順序:Chromium ベースの場合はデフォルトブラウザ → Chrome → Brave → Edge → Chromium → Chrome Canary。
browser.executablePathとbrowser.profiles.<name>.executablePathはどちらも、 Chromium の起動前に、OS のホームディレクトリを表す~と~/...を受け付けます。existing-sessionプロファイルごとのuserDataDirでもチルダが展開されます。- 制御サービス:ループバックのみ(ポートは
gateway.portから派生、デフォルトは18791)。 extraArgsは、ローカル Chromium の起動時に追加の起動フラグを付加します(例:--disable-gpu、ウィンドウサイズ、デバッグフラグ)。
UI
{ ui: { seamColor: "#FF4500", assistant: { name: "OpenClaw", avatar: "CB", // 絵文字、短いテキスト、画像 URL、またはデータ URI }, prefs: { theme: "claw", // claw | knot | dash | custom themeMode: "system", // light | dark | system locale: "en", chatShowThinking: true, chatShowToolCalls: true, chatPersistCommentary: true, // Control UI で実行後もコメンタリーを保持します。チャンネルには配信されません chatSendShortcut: "enter", // enter | modifier-enter chatFollowUpMode: "steer", // steer | queue。サーバーのキューモードを使用する場合は省略します showAdvancedSettings: false, // Settings のすべての Advanced グループを展開します }, },}seamColor:ネイティブアプリの UI クローム用のアクセントカラー(Talk Mode のバブル色など)。assistant:Control UI の ID の上書き。アクティブなエージェントの ID にフォールバックします。prefs:デバイス間で共有されるオペレーター設定。これは標準の保存先であり、エージェントは 承認ゲートを通じて設定を変更でき、すべての Control UI クライアントが同期された 状態を維持できます。ブラウザは即時起動のために値をローカルストレージへミラーリングし、 設定を書き込めない場合(閲覧者スコープ、オフライン)にはデバイスローカルのコピーを保持します。chatPersistCommentaryのデフォルトはtrueです。falseに設定すると、実行中はライブ コメンタリーが表示されたままになりますが、完了時に削除され、新しい Codex コメンタリーが永続的なトランスクリプトのミラーに追加されなくなります。メッセージングチャンネルへの 配信は引き続き別個であり、変更されません。showAdvancedSettingsのデフォルトはfalseです。Settings の検索では、この設定を変更せずに、 一致する Advanced グループを一時的に 1 つ開くことがあります。 テキストの拡大率、チャット幅、サイドバーのライブアクティビティなど、表示専用の 設定はブラウザローカルのままであり、Settings で構成します。 接続中のクライアントにはサーバー側の変更がリアルタイムで適用されます。Gateway は 永続化された設定への書き込みのたびに、ハッシュのみのconfig.changedイベントをブロードキャストし、 クライアントはスナップショットを更新します(ローカルの設定下書きに未保存の編集がある間はスキップされます)。 再接続したクライアントは接続時に整合を取ります。
Gateway
{ gateway: { mode: "local", // local | remote port: 18789, bind: "loopback", auth: { mode: "token", // none | token | password | trusted-proxy token: "your-token", // password: "your-password", // または OPENCLAW_GATEWAY_PASSWORD // trustedProxy: { userHeader: "x-forwarded-user" }, // mode=trusted-proxy 用。/gateway/trusted-proxy-auth を参照 allowTailscale: true, rateLimit: { maxAttempts: 10, windowMs: 60000, lockoutMs: 300000, exemptLoopback: true, }, }, tailscale: { mode: "off", // off | serve | funnel resetOnExit: false, }, controlUi: { enabled: true, basePath: "/openclaw", // root: "dist/control-ui", // toolTitles: false, // ツール呼び出しに AI による目的タイトルを表示するオプトイン設定(ユーティリティモデルのトークンを消費します) // embedSandbox: "scripts", // strict | scripts | trusted // allowExternalEmbedUrls: false, // 危険:絶対外部 http(s) 埋め込み URL を許可します // allowedOrigins: ["https://control.example.com"], // ループバック以外の Control UI では必須です // dangerouslyAllowHostHeaderOriginFallback: false, // 危険な Host ヘッダーのオリジンフォールバックモード }, terminal: { enabled: false, // shell: "/bin/zsh", }, remote: { url: "ws://127.0.0.1:18789", transport: "ssh", // ssh | direct token: "your-token", // password: "your-password", }, trustedProxies: ["10.0.0.1"], // 任意。デフォルトは false。 allowRealIpFallback: false, nodes: { pairing: { // 任意。デフォルトでは未設定/無効。 autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"], // SSH 検証済みの自動承認。デフォルト:有効(true)。 // false に設定すると SSH 検証のみが無効になります。上記の // autoApproveCidrs には影響しません。Node のペアリングを手動のみにするには、false に設定し、 // さらに autoApproveCidrs を未設定にします。調整するにはオブジェクトを渡します:{ user, identity, // timeoutMs, cidrs }。 sshVerify: true, }, commands: { allow: ["canvas.navigate"], deny: ["system.run"], }, }, tools: { // 追加の /tools/invoke HTTP 拒否設定 deny: ["browser"], // オーナー/管理者の呼び出し元について、デフォルトの HTTP 拒否リストからツールを削除します allow: ["gateway"], }, push: { apns: { relay: { baseUrl: "https://relay.example.com", timeoutMs: 10000, }, }, }, },}Gateway フィールドの詳細
mode:local(Gateway を実行)またはremote(リモート Gateway に接続)。localでない限り、Gateway は起動を拒否します。port: WS + HTTP 用の単一多重化ポート。優先順位:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789。bind:auto、loopback(デフォルト)、lan(0.0.0.0)、tailnet(利用可能な場合は Tailscale IPv4、それ以外はループバック)、またはcustom(1 つの IPv4 アドレス)。解決されたtailnetアドレス、および127.0.0.1または0.0.0.0以外のcustomアドレスでは、同一ホストのクライアント用に同じポート上の127.0.0.1が必要です。いずれかのリスナーがバインドできない場合、起動は失敗します。非ループバックへの公開は、選択したインターフェースに限定されたままです。- 従来のバインドエイリアス: ホストエイリアス(
0.0.0.0、127.0.0.1、localhost、::、::1)ではなく、gateway.bindのバインドモード値(auto、loopback、lan、tailnet、custom)を使用してください。 - Docker に関する注意: デフォルトの
loopbackバインドは、コンテナ内の127.0.0.1でリッスンします。Docker ブリッジネットワーク(-p 18789:18789)では、トラフィックがeth0に到達するため、Gateway にアクセスできません。--network hostを使用するか、bind: "lan"(またはcustomBindHost: "0.0.0.0"を指定したbind: "custom")を設定して、すべてのインターフェースでリッスンしてください。 - 認証: デフォルトで必須です。非ループバックへのバインドには Gateway 認証が必要です。実際には、共有トークン/パスワード、または
gateway.auth.mode: "trusted-proxy"を使用する ID 対応リバースプロキシが必要です。オンボーディングウィザードはデフォルトでトークンを生成します。 gateway.auth.tokenとgateway.auth.passwordの両方が設定されている場合(SecretRef を含む)、gateway.auth.modeを明示的にtokenまたはpasswordに設定してください。両方が設定され、モードが未設定の場合、起動およびサービスのインストール/修復フローは失敗します。gateway.auth.mode: "none": 明示的な認証なしモード。信頼できる local loopback セットアップにのみ使用してください。これは意図的にオンボーディングプロンプトでは提供されません。gateway.auth.mode: "trusted-proxy": ブラウザー/ユーザー認証を ID 対応リバースプロキシに委任し、gateway.trustedProxiesからの ID ヘッダーを信頼します(信頼済みプロキシ認証を参照)。このモードはデフォルトで非ループバックのプロキシソースを想定します。同一ホストのループバックリバースプロキシには、明示的なgateway.auth.trustedProxy.allowLoopback = trueが必要です。同一ホストの内部呼び出し元は、ローカル直接フォールバックとしてgateway.auth.passwordを使用できます。gateway.auth.tokenは引き続き信頼済みプロキシモードと相互排他的です。gateway.auth.allowTailscale:trueの場合、Tailscale Serve の ID ヘッダーで Control UI/WebSocket 認証を満たすことができます(tailscale whoisで検証)。HTTP API エンドポイントは、その Tailscale ヘッダー認証を使用しません。代わりに、Gateway の通常の HTTP 認証モードに従います。このトークン不要のフローでは、Gateway ホストが信頼されていることを前提とします。tailscale.mode = "serve"の場合、デフォルトはtrueです。gateway.auth.rateLimit: オプションの認証失敗リミッター。クライアント IP ごと、および認証スコープごとに適用されます(共有シークレットとデバイストークンは個別に追跡されます)。ブロックされた試行は429+Retry-Afterを返します。- 非同期の Tailscale Serve Control UI パスでは、同じ
{scope, clientIp}に対する失敗した試行は、失敗の書き込み前に直列化されます。そのため、同じクライアントから不正な試行が同時に行われた場合、両方が単純な不一致として競合通過するのではなく、2 番目のリクエストでリミッターが作動することがあります。 gateway.auth.rateLimit.exemptLoopbackのデフォルトはtrueです。localhost トラフィックも意図的にレート制限する場合(テスト用セットアップや厳格なプロキシデプロイなど)は、falseを設定してください。- ブラウザー起点の WS 認証試行は、ブラウザーを利用した localhost への総当たり攻撃に対する多層防御として、ループバック除外を無効にした状態で常にスロットリングされます。
- ループバックでは、ブラウザー起点のこれらのロックアウトは、正規化された
Origin値ごとに分離されるため、ある localhost オリジンから繰り返し失敗しても、 別のオリジンが自動的にロックアウトされることはありません。 tailscale.mode:serve(tailnet のみ、ループバックバインド)またはfunnel(公開、認証が必要)。tailscale.serviceName: Serve モード用のオプションの Tailscale Service 名(例:svc:openclaw)。設定すると、OpenClaw はこれをtailscale serve --serviceに渡し、Control UI をデバイスのホスト名ではなく 名前付き Service を通じて公開できるようにします。値は Tailscale のsvc:<dns-label>Service 名形式を使用する必要があります。起動時に、導出された Service URL が報告されます。tailscale.preserveFunnel:trueかつtailscale.mode = "serve"の場合、OpenClaw は 起動時に Serve を再適用する前にtailscale funnel statusを確認し、外部で設定された Funnel ルートがすでに Gateway ポートを 対象としている場合は再適用をスキップします。 デフォルトはfalseです。controlUi.allowedOrigins: Gateway WebSocket 接続用の明示的なブラウザーオリジン許可リスト。公開された非ループバックのブラウザーオリジンでは必須です。ループバック、RFC1918/リンクローカル、.local、.ts.net、または Tailscale CGNAT ホストから読み込まれるプライベートな同一オリジンの LAN/Tailnet UI は、Host ヘッダーのフォールバックを有効にしなくても許可されます。controlUi.toolTitles: Control UI チャット内のツール呼び出しに対して、AI が生成する目的タイトルを有効にします。デフォルト:false(ツールのレンダリングはバックグラウンドでモデルを呼び出さず、完全に決定的なままです)。有効にすると、chat.toolTitlesメソッドは標準のユーティリティモデルルーティングを通じて複雑な呼び出しにラベルを付けます。使用されるのは、エージェントのutilityModel(他のすべてのユーティリティタスクと同様に、限定されたツール引数を選択したプロバイダーへ送信する可能性がある、オペレーターによる決定)、またはセッションプロバイダーが宣言した小規模モデルのデフォルト(OpenAI →gpt-5.6-luna、Anthropic →claude-haiku-4-5)です。結果はエージェントごとの状態データベースにキャッシュされるため、同じ表示で再度課金されることはありません。utilityModel: \"\"は、他のすべてのユーティリティタスクと同様にタイトルを無効にします。タイトルがプライマリモデルへフォールバックすることはありません。controlUi.dangerouslyAllowHostHeaderOriginFallback: Host ヘッダーのオリジンポリシーに意図的に依存するデプロイ向けに、Host ヘッダーのオリジンフォールバックを有効にする危険なモード。terminal.enabled: 管理者スコープのオペレーターターミナルを有効にします。デフォルト:false。ターミナルは選択されたエージェントワークスペース内でホスト PTY を起動し、Gateway プロセスの環境を継承します。sandbox.mode: "all"のエージェントでは使用が拒否されます。信頼できるオペレーターデプロイでのみ有効にしてください。この設定を変更すると Gateway が再起動し、Control UI のコンテンツセキュリティポリシーが更新されます。terminal.shell: オプションのシェル実行ファイル。未設定の場合、OpenClaw は Unix では$SHELL、Windows では%ComSpec%を使用します。terminal.detachedSessionTimeoutSeconds: 接続が切断された後(ページの再読み込み、ノート PC のスリープ)もターミナルセッションを存続させる時間。この間、最近の出力を再生しながらterminal.attach経由で再接続できます。デフォルト:300。接続が切断された瞬間にセッションを終了するには、0を設定します。切断されたセッションでもコマンドは実行され続けるため、共有ホストや公開ホストではこの時間を短くしてください。remote.transport:ssh(デフォルト)またはdirect(ws/wss)。directの場合、公開ホストではremote.urlをwss://にする必要があります。平文のws://は、ループバック、LAN、リンクローカル、.local、.ts.net、および Tailscale CGNAT ホストでのみ許可されます。remote.remotePort: リモート SSH ホスト上の Gateway ポート。デフォルトは18789です。ローカルトンネルポートがリモート Gateway ポートと異なる場合に使用してください。remote.tlsFingerprint: リモートwss://Gateway で期待される SHA-256 証明書フィンガープリント。macOS アプリは、これをオペレーター/制御接続とコンパニオン Node 接続の両方に適用します。明示的な値がない場合、macOS は通常のシステム信頼検証が成功した後に限り、初回使用時のピンを記録します。remote.sshHostKeyPolicy: macOS SSH トンネルのホストキーポリシー。strictがデフォルトで、すでに信頼されているキーが必要です。opensshは、管理対象エイリアスに対して実効 OpenSSH 設定を使用するための明示的なオプトインです。使用する前に、該当するユーザーおよびシステムの SSH 設定を確認してください。macOS アプリとconfigure-remoteは、ターゲットを変更すると、再度明示的にオプトインしない限り、このポリシーをstrictにリセットします。gateway.remote.token/.passwordはリモートクライアントの認証情報フィールドです。それだけでは Gateway 認証を設定しません。gateway.push.apns.relay.baseUrl: リレー対応の iOS ビルドが登録情報を Gateway に公開した後に使用する、外部 APNs リレーのベース HTTPS URL。公開 App Store ビルドは、ホストされている OpenClaw リレーを使用します。カスタムリレー URL は、リレー URL がそのリレーを指すよう意図的に分離された iOS ビルド/デプロイパスと一致する必要があります。gateway.push.apns.relay.timeoutMs: Gateway からリレーへの送信タイムアウト(ミリ秒)。デフォルトは10000です。- リレー対応の登録は、特定の Gateway ID に委任されます。ペアリング済みの iOS アプリは
gateway.identity.getを取得し、その ID をリレー登録に含め、登録スコープの送信許可を Gateway に転送します。別の Gateway は、その保存済み登録を再利用できません。 OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: 上記のリレー設定に対する一時的な環境変数オーバーライド。OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: ループバック HTTP リレー URL 用の、開発専用の緊急回避手段。本番環境のリレー URL では HTTPS を維持してください。OPENCLAW_HANDSHAKE_TIMEOUT_MS: 組み込みの認証前 Gateway WebSocket ハンドシェイクタイムアウトに対する、オプションの環境変数オーバーライド。channels.<provider>.healthMonitor.enabled: グローバルモニターを有効にしたまま、ヘルスモニターによる再起動をチャンネル単位で無効にします。channels.<provider>.accounts.<accountId>.healthMonitor.enabled: 複数アカウント対応チャンネル用のアカウント単位のオーバーライド。設定すると、チャンネル単位のオーバーライドより優先されます。- ローカル Gateway の呼び出しパスでは、
gateway.auth.*が未設定の場合に限り、gateway.remote.*をフォールバックとして使用できます。 gateway.auth.token/gateway.auth.passwordが SecretRef を介して明示的に設定され、解決できない場合、解決はフェイルクローズします(リモートフォールバックによる隠蔽は行われません)。trustedProxies: TLS を終端するか、転送クライアントヘッダーを挿入するリバースプロキシの IP。制御下にあるプロキシのみを列挙してください。ループバックエントリは、同一ホストのプロキシ/ローカル検出セットアップ(Tailscale Serve やローカルリバースプロキシなど)でも有効ですが、ループバックリクエストがgateway.auth.mode: "trusted-proxy"の対象になるわけではありません。allowRealIpFallback:trueの場合、X-Forwarded-Forがないときに Gateway はX-Real-IPを受け入れます。フェイルクローズ動作のデフォルトはfalseです。gateway.nodes.pairing.autoApproveCidrs: 要求スコープがない初回 Node デバイスペアリングを自動承認するための、オプションの CIDR/IP 許可リスト。未設定の場合は無効です。これは、オペレーター/ブラウザー/Control UI/WebChat のペアリングを自動承認せず、ロール、スコープ、メタデータ、公開キーのアップグレードも自動承認しません。gateway.nodes.pairing.sshVerify: 初回 Node デバイスペアリングに対する SSH 検証済み自動承認(デフォルト: 有効)。Gateway はペアリングホストへ SSH で接続し直し(BatchMode、厳格なホストキー)、openclaw node identityデバイスキーが完全に一致した場合にのみ承認します。適格性の最低条件はautoApproveCidrsと同じです。cidrsで上書きしない限り、プローブはプライベート/CGNAT ソースアドレスに限定されます。無効にするにはfalseを設定し、調整するには{ user, identity, timeoutMs, cidrs }を設定してください。Node のペアリングを参照してください。gateway.nodes.commands.allow/gateway.nodes.commands.deny: ペアリングおよびプラットフォームの許可リスト評価後に、宣言された Node コマンドをグローバルに許可または拒否するための設定。camera.snap、camera.clip、screen.record、health.summary、sms.search、sms.sendなどの危険な Node コマンドを有効にするには、commands.allowを使用します。commands.denyは、プラットフォームのデフォルト設定または明示的な許可によって含まれるコマンドも削除します。iOS のヘルスケア権限、Android の SMS 権限、および Gateway のコマンド認可は、それぞれ独立しています。Node が宣言済みコマンドリストを変更した後、Gateway が更新済みのコマンドスナップショットを保存できるよう、そのデバイスのペアリングを拒否してから再承認してください。gateway.tools.deny: HTTPPOST /tools/invokeで追加でブロックするツール名(デフォルトの拒否リストを拡張)。gateway.tools.allow: オーナーまたは管理者の呼び出し元に対して、デフォルトの HTTP 拒否リストから ツール名を削除します。これにより、ID 情報を持つoperator.writeの 呼び出し元がオーナーまたは管理者のアクセス権に昇格することはありません。cron、gateway、およびnodesは、 許可リストに含まれていても、オーナー以外の呼び出し元は引き続き利用できません。
OpenAI 互換エンドポイント
- 管理 HTTP RPC:
admin-http-rpcPlugin と同様にデフォルトでは無効です。Plugin を有効にするとPOST /api/v1/admin/rpcが登録されます。管理 HTTP RPCを参照してください。 - Chat Completions: デフォルトでは無効です。
gateway.http.endpoints.chatCompletions.enabled: trueで有効にします。 - Responses API:
gateway.http.endpoints.responses.enabled。 - Responses の URL 入力の強化:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlist空の許可リストは未設定として扱われます。URL 取得を無効にするには、gateway.http.endpoints.responses.files.allowUrl=falseおよび/またはgateway.http.endpoints.responses.images.allowUrl=falseを使用します。
- オプションのレスポンス強化ヘッダー:
gateway.http.securityHeaders.strictTransportSecurity(管理下にある HTTPS オリジンにのみ設定してください。信頼済みプロキシ認証を参照)
複数インスタンスの分離
一意のポートと状態ディレクトリを使用して、1 台のホスト上で複数の Gateway を実行します。
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \OPENCLAW_STATE_DIR=~/.openclaw-a \openclaw gateway --port 19001便利なフラグ: --dev(~/.openclaw-dev + ポート 19001 を使用)、--profile <name>(~/.openclaw-<name> を使用)。
複数の Gatewayを参照してください。
gateway.tls
{ gateway: { tls: { enabled: false, autoGenerate: false, certPath: "/etc/openclaw/tls/server.crt", keyPath: "/etc/openclaw/tls/server.key", caPath: "/etc/openclaw/tls/ca-bundle.crt", }, },}enabled: Gateway リスナー(HTTPS/WSS)で TLS 終端を有効にします(デフォルト:false)。autoGenerate: 明示的なファイルが設定されていない場合に、ローカルの自己署名証明書/鍵ペアを自動生成します。ローカル/開発用途専用です。certPath: TLS 証明書ファイルへのファイルシステムパス。keyPath: TLS 秘密鍵ファイルへのファイルシステムパス。アクセス権限を制限してください。caPath: クライアント検証またはカスタム信頼チェーン用のオプションの CA バンドルパス。
gateway.reload
{ gateway: { reload: { mode: "hybrid", // off | restart | hot | hybrid debounceMs: 500, deferralTimeoutMs: 300000, }, },}mode: 設定の編集を実行時に適用する方法を制御します。"off": ライブ編集を無視します。変更には明示的な再起動が必要です。"restart": 設定変更時に常に Gateway プロセスを再起動します。"hot": 再起動せずにプロセス内で変更を適用します。"hybrid"(デフォルト): 最初にホットリロードを試行し、必要な場合は再起動にフォールバックします。
debounceMs: 設定変更を適用する前のデバウンス時間(ミリ秒)(非負整数、デフォルト:300)。deferralTimeoutMs: 再起動またはチャンネルのホットリロードを強制する前に、進行中の処理を待機するオプションの最大時間(ミリ秒)。省略するとデフォルトの制限付き待機時間(300000)を使用します。無期限に待機し、未完了であることを定期的に警告ログへ記録するには0を設定します。
クラウドワーカー環境
クラウドワーカーはオプトインです。cloudWorkers が存在しない場合、または profiles が空の場合、OpenClaw は新しいワーカーの作成を受け付けません。以前に作成された永続レコードは引き続き整合され、表示されたままです。既存の Gateway/Node プロジェクションは変更されません。
各ワーカープロバイダーは、信頼済みのプロビジョニング出力から SSH hostKey を、ホスト名やコメントを含めず正確に algorithm base64 として返す必要があります。ブートストラップはその鍵を分離された known_hosts ファイルに書き込み、StrictHostKeyChecking=yes を使用します。プロバイダーが鍵を省略した場合は、接続を開く前に失敗します。初回使用時に信頼するフォールバックはありません。
トンネルのセットアップはプロビジョニングの一部ではなく、オンデマンドで行われます。開始すると、Gateway はワーカーローカルの Unix ソケットを、その local loopback WebSocket エンドポイントへリバースフォワードします。ソケットはランダムに割り当てられた所有者専用のリモートディレクトリに配置されます。local loopback TCP ポートとは異なり、マルチユーザーワーカー上の他のアカウントから到達できず、別の環境のポートと衝突することもありません。SSH キープアライブと上限付きの再接続バックオフは、トンネル所有者が現在の所有者である間のみ実行されます。トンネルを停止すると、SSH プロセスを閉じる前に再接続を遮断します。
制御トラフィックとワークスペース転送には別々の SSH 接続を使用します。どちらも同じ解決済みアイデンティティと分離された固定 known_hosts ファイルを再利用しますが、ワークスペース転送は長時間稼働するトンネルと SSH 接続の多重化を共有しないため、rsync が制御トラフィックをブロックすることはありません。
Crabbox プロファイル
同梱の crabbox プロバイダーは、ローカルの Crabbox CLI を介して SSH 対応リースをプロビジョニングします。内側の settings.provider は Crabbox バックエンドを選択します。これは外側の OpenClaw プロバイダー ID とは別です。
{ cloudWorkers: { profiles: { production: { provider: "crabbox", install: "bundle", // デフォルト。リリース済みの Gateway バージョンにのみ "npm" を使用します。 settings: { provider: "aws", class: "standard", ttl: "24h", idleTimeout: "60m", // オプションの絶対パス。デフォルト: 兄弟の ../crabbox/bin/crabbox、次に PATH。 binary: "/usr/local/bin/crabbox", }, lifetime: { idleTimeoutMinutes: 60, maxLifetimeMinutes: 1440, }, }, }, },}settings.provider(必須):--providerを介して渡される Crabbox バックエンド。inspect 出力に SSH エンドポイントが含まれるバックエンドを使用してください。awsは直接 AWS バックエンドを選択します。settings.class(必須):--classに渡される Crabbox マシンクラス。settings.ttlとsettings.idleTimeout(必須):--ttlと--idle-timeoutに渡される正の Go 期間文字列。これらのプロバイダー側フェイルセーフは、後述する OpenClaw の保存済みlifetimeポリシーとは別です。settings.binary: オプションの Crabbox 実行可能ファイルの絶対パス。指定しない場合、OpenClaw は兄弟の Crabbox チェックアウト、PATH上の実行可能エントリの順に確認し、最後にcrabboxを呼び出します。これにより、CLI がない場合もプロバイダーエラーとして可視化されます。
不明な設定は拒否されます。Crabbox の認証情報およびバックエンド固有のアカウント設定は、引き続き Crabbox が所有します。これらを settings に配置しないでください。OpenClaw はローカル CLI のみを呼び出し、この Plugin からプロバイダーへのネットワーク呼び出しは行いません。プロビジョニングでは常に --keep=true を渡します。OpenClaw が外部ライフサイクルを所有し、crabbox stop でリースを破棄します。
静的 SSH 開発プロファイル
{ cloudWorkers: { profiles: { development: { provider: "static-ssh", settings: { host: "worker.example.test", port: 22, user: "openclaw", hostKey: "ssh-ed25519 <base64-public-host-key>", keyRef: { source: "env", provider: "default", id: "OPENCLAW_WORKER_SSH_KEY", }, }, lifetime: { idleTimeoutMinutes: 60, maxLifetimeMinutes: 1440, }, }, }, },}profiles: 空でなく、前後の空白を除去した ID を持つ名前付きワーカープロファイル。各プロファイルは、Plugin によって登録されたプロバイダーを選択します。provider: 空でないワーカープロバイダー ID。例では、同梱のcrabboxプロバイダーと QA Lab のstatic-sshプロバイダーを使用します。install: ワーカーのインストール方法。"bundle"(デフォルト)は、Gateway にインストールされたビルドのコンテンツハッシュ付きバンドルを転送し、リリース済み、開発中、未リリースのバージョンをサポートします。"npm"は、変更されていないパッケージ版リリース向けのオプトイン最適化です。公開 npm レジストリからopenclaw@<exact gateway version>をインストールし、latestは決してインストールしません。- 同梱のプロバイダー Plugin は設定されると自動的に選択されますが、明示的な無効化と
plugins.allowは引き続き適用されます。許可リストが設定されている場合は、プロバイダー ID(例:crabbox)を含めてください。外部プロバイダー Plugin は、インストールしたうえで明示的に有効化する必要もあります。 settings: プロバイダー所有のサイズ制限付き JSON。選択された Plugin がキーを定義して検証します。シークレットを含む値には SecretRef オブジェクトを使用してください。静的 SSH プロバイダーにはhost、user、hostKey、keyRefが必要です。portのデフォルトは22です。hostKeyは、既知のホストまたは別の信頼済みチャンネルから取得した OpenSSH 公開ホスト鍵の 1 行(algorithm base64)である必要があり、オプションのプレフィックスを含めてはなりません。lifetime.idleTimeoutMinutes: 後のアイドル再利用ポリシー用に保存される正の整数の分数。lifetime.maxLifetimeMinutes: 後のライフサイクルポリシー用に保存される正の整数の分数。
WAL リセットに安全な SQLite を備えた、サポート対象の Node ランタイム(22.22.3+、24.15+、または 25.9+)がワーカーにすでにインストールされている必要があります。オプトインの "npm" メソッドには、npm と公開 npm レジストリへのアウトバウンド HTTPS アクセスも必要です。ネットワークを使用するツールチェーンのセットアップはプロバイダーポリシーです。ブートストラップはツールチェーン自体をインストールせず、対処可能なエラーを報告します。
この基盤は Gateway ビルドをインストールして検証し、トンネルの開始/停止ライフサイクルを提供しますが、一般的な OpenClaw CLI は起動しません。自己完結型のワーカーエントリとループは、次のクラウドワーカーのマイルストーンで導入されます。
各永続環境レコードは、検証済みのプロバイダー設定、解決済みのインストール方法、ライフタイムポリシーを、作成時のプロファイルスナップショットに保持します。名前付きプロファイルを変更または削除すると新規作成に影響します。既存のレコードは、所有する Plugin が引き続き利用可能である限り、そのスナップショットを使用してライフサイクルの整合を継続します。
最初のクラウドワーカーリリースでは、ライフタイム値はデータとしてのみ扱われます。自動適用は後続のライフサイクル作業で導入されます。プロファイルの変更には Gateway の再起動が必要です。
フック
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", defaultSessionKey: "hook:ingress", allowRequestSessionKey: true, allowedSessionKeyPrefixes: ["hook:", "hook:gmail:"], allowedAgentIds: ["hooks", "main"], presets: ["gmail"], transformsDir: "~/.openclaw/hooks/transforms", mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "hooks", wakeMode: "now", name: "Gmail", sessionKey: "hook:gmail:{{messages[0].id}}", messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}", deliver: true, channel: "last", model: "openai/gpt-5.6-sol", }, ], },}認証: Authorization: Bearer <token> または x-openclaw-token: <token>。
クエリ文字列のフックトークンは拒否されます。
検証と安全性に関する注意事項:
hooks.enabled=trueには空でないhooks.tokenが必要です。hooks.tokenは、有効な Gateway 共有シークレット認証(gateway.auth.token/OPENCLAW_GATEWAY_TOKENまたはgateway.auth.password/OPENCLAW_GATEWAY_PASSWORD)とは別のものにする必要があります。再利用が検出されると、起動時に致命的ではないセキュリティ警告がログに記録されます。openclaw security auditは、監査時にのみ指定された Gateway パスワード認証(--auth password --password <password>)を含め、フックと Gateway の認証の再利用を重大な検出事項として報告します。永続化された再利用済みのhooks.tokenをローテーションするにはopenclaw doctor --fixを実行し、その後、外部のフック送信元が新しいフックトークンを使用するように更新します。hooks.pathを/にすることはできません。/hooksのような専用のサブパスを使用してください。hooks.allowRequestSessionKey=trueの場合は、hooks.allowedSessionKeyPrefixesを制限してください(例:["hook:"])。- マッピングまたはプリセットがテンプレート化された
sessionKeyを使用する場合は、hooks.allowedSessionKeyPrefixesとhooks.allowRequestSessionKey=trueを設定してください。静的なマッピングキーでは、このオプトインは不要です。
エンドポイント:
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }- リクエストペイロードの
sessionKeyは、hooks.allowRequestSessionKey=trueの場合にのみ受け入れられます(デフォルト:false)。
- リクエストペイロードの
POST /hooks/<name>→hooks.mappingsによって解決- テンプレートでレンダリングされたマッピングの
sessionKey値は外部から指定されたものとして扱われ、hooks.allowRequestSessionKey=trueも必要です。
- テンプレートでレンダリングされたマッピングの
マッピングの詳細
match.pathは、/hooksの後のサブパスと一致します(例:/hooks/gmail→gmail)。match.sourceは、汎用パスのペイロードフィールドと一致します。{{messages[0].subject}}のようなテンプレートはペイロードから読み取ります。transformは、フックアクションを返す JS/TS モジュールを指すことができます。transform.moduleは相対パスである必要があり、hooks.transformsDir内に限定されます(絶対パスとディレクトリトラバーサルは拒否されます)。hooks.transformsDirは~/.openclaw/hooks/transformsの下に配置してください。ワークスペースの Skills ディレクトリは拒否されます。openclaw doctorがこのパスを無効と報告する場合は、変換モジュールをフック変換ディレクトリへ移動するか、hooks.transformsDirを削除してください。agentIdは特定のエージェントへルーティングします。不明な ID はデフォルトエージェントへフォールバックします。allowedAgentIds:agentIdが省略された場合のデフォルトエージェントパスを含め、有効なエージェントルーティングを制限します(*または省略 = すべて許可、[]= すべて拒否)。defaultSessionKey: 明示的なsessionKeyがないフックエージェント実行用の、任意の固定セッションキーです。allowRequestSessionKey:/hooks/agentの呼び出し元およびテンプレート駆動のマッピングセッションキーがsessionKeyを設定することを許可します(デフォルト:false)。allowedSessionKeyPrefixes: 明示的なsessionKey値(リクエスト + マッピング)に対する任意のプレフィックス許可リストです(例:["hook:"])。マッピングまたはプリセットのいずれかがテンプレート化されたsessionKeyを使用する場合は必須になります。deliver: trueは最終応答をチャンネルへ送信します。channelのデフォルトはlastです。modelは、このフック実行で使用する LLM を上書きします(モデルカタログが設定されている場合は許可対象である必要があります)。
Gmail 連携
- 組み込みの Gmail プリセットは
sessionKey: "hook:gmail:{{messages[0].id}}"を使用します。 - このメッセージ単位のキーが分離するのは会話コンテキストであり、ツールやワークスペースへのアクセスではありません。
agentIdを設定するカスタムマッピングがない場合、プリセットはデフォルトエージェントを使用します。 - 信頼できない受信トレイでは、Gmail を専用の閲覧エージェントへルーティングし、そのエージェントをエージェント単位のサンドボックスとツールポリシーで制限してください。閲覧エージェントがメインエージェントへ通知する必要がある場合は、
tools.agentToAgentで引き継ぎを制限してください。推奨される脅威モデルとモデル階層については、プロンプトインジェクションを参照してください。 - このメッセージ単位のルーティングを維持する場合は、
hooks.allowRequestSessionKey: trueを設定し、hooks.allowedSessionKeyPrefixesが Gmail 名前空間と一致するように制限してください(例:["hook:", "hook:gmail:"])。 hooks.allowRequestSessionKey: falseが必要な場合は、テンプレート化されたデフォルトではなく、静的なsessionKeyでプリセットを上書きしてください。
{ hooks: { gmail: { account: "openclaw@gmail.com", topic: "projects/<project-id>/topics/gog-gmail-watch", subscription: "gog-gmail-watch-push", pushToken: "shared-push-token", hookUrl: "http://127.0.0.1:18789/hooks/gmail", includeBody: true, maxBytes: 20000, renewEveryMinutes: 720, serve: { bind: "127.0.0.1", port: 8788, path: "/" }, tailscale: { mode: "funnel", path: "/gmail-pubsub" }, model: "openai/gpt-5.6-sol", thinking: "high", }, },}- 設定されている場合、Gateway は起動時に
gog gmail watch serveを自動起動します。無効にするにはOPENCLAW_SKIP_GMAIL_WATCHER=1を設定してください。 - Gateway と並行して別の
gog gmail watch serveを実行しないでください。
Canvas Plugin ホスト
{ plugins: { entries: { canvas: { config: { host: { root: "~/.openclaw/workspace/canvas", liveReload: true, // enabled: false, // または OPENCLAW_SKIP_CANVAS_HOST=1 }, }, }, }, },}- エージェントが編集可能な HTML/CSS/JS と A2UI を、Gateway ポート配下の HTTP で提供します:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- ローカル専用:
gateway.bind: "loopback"(デフォルト)のままにしてください。 - 非 local loopback バインド: Canvas ルートには、他の Gateway HTTP サーフェスと同様に Gateway 認証(トークン/パスワード/信頼済みプロキシ)が必要です。
- Node WebView は通常、認証ヘッダーを送信しません。Node がペアリングされ接続されると、Gateway は Canvas/A2UI アクセス用の Node スコープのケイパビリティ URL を通知します。
- ケイパビリティ URL はアクティブな Node WS セッションに紐付けられ、短時間で期限切れになります。IP ベースのフォールバックは使用されません。
- 提供する HTML にライブリロードクライアントを注入します。
- 空の場合は、初期
index.htmlを自動作成します。 - A2UI も
/__openclaw__/a2ui/で提供します。 - 変更を反映するには Gateway の再起動が必要です。
- 大規模なディレクトリまたは
EMFILEエラーが発生する場合は、ライブリロードを無効にしてください。
検出
mDNS(Bonjour)
{ discovery: { mdns: { mode: "minimal", // minimal | full | off }, },}minimal(デフォルト): TXT レコードからcliPath+sshPortを省略します。full:cliPath+sshPortを含めます。LAN マルチキャスト広告には、引き続きバンドルされたbonjourPlugin を有効にする必要があります。off: Plugin の有効化状態を変更せずに LAN マルチキャスト広告を抑制します。- バンドルされた
bonjourPlugin は macOS ホストでは自動起動し、Linux、Windows、およびコンテナ化された Gateway デプロイメントではオプトインです。 - ホスト名が有効な DNS ラベルの場合、デフォルトでシステムのホスト名が使用され、それ以外の場合は
openclawにフォールバックします。OPENCLAW_MDNS_HOSTNAMEで上書きできます。 OPENCLAW_DISABLE_BONJOUR=1は mDNS 広告を完全に無効にし、discovery.mdns.modeを上書きします。
広域(DNS-SD)
{ discovery: { wideArea: { enabled: true }, },}~/.openclaw/dns/ 配下にユニキャスト DNS-SD ゾーンを書き込みます。ネットワークをまたぐ検出には、DNS サーバー(CoreDNS 推奨)と Tailscale スプリット DNS を組み合わせてください。
セットアップ: openclaw dns setup --apply。
環境
env(インライン環境変数)
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-...", }, shellEnv: { enabled: true, timeoutMs: 15000, }, },}- インライン環境変数は、プロセス環境にそのキーが存在しない場合にのみ適用されます。
.envファイル: CWD の.env+~/.openclaw/.env(どちらも既存の変数を上書きしません)。shellEnv: ログインシェルのプロファイルから、不足している想定キーをインポートします。- 完全な優先順位については、環境を参照してください。
環境変数の置換
任意の設定文字列内で ${VAR_NAME} を使用して環境変数を参照します:
{ gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" }, },}- 一致するのは大文字の名前のみです:
[A-Z_][A-Z0-9_]*。 - 変数が存在しないか空の場合、設定の読み込み時にエラーが発生します。
- リテラルの
${VAR}には$${VAR}でエスケープしてください。 $includeでも機能します。
シークレット
シークレット参照は追加的な機能です。プレーンテキスト値も引き続き機能します。
SecretRef
次のいずれかのオブジェクト形式を使用します:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }検証:
providerのパターン:^[a-z][a-z0-9_-]{0,63}$source: "env"の ID パターン:^[A-Z][A-Z0-9_]{0,127}$source: "file"の ID: 絶対 JSON ポインター(例:"/providers/openai/apiKey")source: "exec"の ID パターン:^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(AWS 形式のsecret#json_keyセレクターをサポート)source: "exec"の ID には、スラッシュで区切られたパスセグメントとして.または..を含めることはできません(例:a/../bは拒否されます)
サポートされる認証情報サーフェス
- 正規マトリクス: SecretRef 認証情報サーフェス
secrets applyは、サポートされているopenclaw.json認証情報パスを対象とします。auth-profiles.json参照は、ランタイム解決と監査の対象範囲に含まれます。
シークレットプロバイダーの設定
{ secrets: { providers: { default: { source: "env" }, // 任意の明示的な環境変数プロバイダー filemain: { source: "file", path: "~/.openclaw/secrets.json", mode: "json", timeoutMs: 5000, }, vault: { source: "exec", command: "/usr/local/bin/openclaw-vault-resolver", passEnv: ["PATH", "VAULT_ADDR"], }, }, defaults: { env: "default", file: "filemain", exec: "vault", }, },}注記:
fileプロバイダーはmode: "json"とmode: "singleValue"をサポートします(singleValue モードではidは"value"である必要があります)。- Windows ACL の検証を利用できない場合、ファイルおよび exec プロバイダーのパスは安全側に倒して失敗します。検証できない信頼済みパスに限り、
allowInsecurePath: trueを設定してください。 execプロバイダーには絶対commandパスが必要で、標準入力/標準出力でプロトコルペイロードを使用します。- デフォルトでは、シンボリックリンクのコマンドパスは拒否されます。解決後のターゲットパスを検証しながらシンボリックリンクパスを許可するには、
allowSymlinkCommand: trueを設定してください。 trustedDirsが設定されている場合、信頼済みディレクトリのチェックは解決後のターゲットパスに適用されます。execの子プロセス環境は、デフォルトでは最小限です。必要な変数はpassEnvで明示的に渡してください。- シークレット参照は、アクティベーション時にメモリ内スナップショットへ解決され、その後、リクエストパスはスナップショットのみを読み取ります。
- アクティブサーフェスのフィルタリングはアクティベーション中に適用されます。有効なサーフェスで未解決の参照があると起動または再読み込みに失敗し、非アクティブなサーフェスは診断情報とともにスキップされます。
認証ストレージ
{ auth: { profiles: { "anthropic:default": { provider: "anthropic", mode: "api_key" }, "anthropic:work": { provider: "anthropic", mode: "api_key" }, "openai:personal": { provider: "openai", mode: "oauth" }, }, order: { anthropic: ["anthropic:default", "anthropic:work"], openai: ["openai:personal"], }, },}- エージェントごとのプロファイルは
<agentDir>/auth-profiles.jsonに保存されます。 auth-profiles.jsonは、静的認証情報モード向けに値レベルの参照(api_keyにはkeyRef、tokenにはtokenRef)をサポートします。{ "provider": { "apiKey": "..." } }のような従来のフラットなauth-profiles.jsonマップはランタイム形式ではありません。openclaw doctor --fixは、.legacy-flat.*.bakバックアップを作成したうえで、それらを正規のprovider:defaultAPI キープロファイルに書き換えます。- OAuth モードのプロファイル(
auth.profiles.<id>.mode = "oauth")は、SecretRef を使用する認証プロファイルの認証情報をサポートしません。 - 静的ランタイム認証情報は、メモリ内で解決されたスナップショットから取得されます。従来の静的な
auth.jsonエントリは、検出時に消去されます。 - 従来の OAuth インポート元は
~/.openclaw/credentials/oauth.jsonです。 - OAuth を参照してください。
- シークレットのランタイム動作と
audit/configure/applyツールについては、シークレット管理を参照してください。
監査
{ audit: { enabled: true, messages: "off", // off | direct | all },}Gateway は、エージェント実行とツールアクションに関するメタデータのみの監査イベントを共有状態データベースに記録します。メッセージのライフサイクルメタデータは、別途オプトインする必要があります。台帳には、アイデンティティ、タイミング、ツール名、正規化された結果が保存されますが、プロンプト、メッセージ本文、ツール引数、結果、生のエラーテキストは一切保存されません。メッセージ行には、プラットフォームの生のアカウント ID、会話 ID、メッセージ ID、ターゲット ID は保存されません。実行/ツールのセッションキーは相関分析に引き続き使用でき、それ自体にプラットフォームのアカウント ID やピア ID が含まれる場合があります。レコードは30日後に期限切れとなり、台帳の上限は100,000行です。openclaw audit または audit.activity.list Gateway RPC で照会できます。完全なデータモデル、プライバシー上の意味、対象範囲の制限については、監査履歴を参照してください。
enabled: 新しい監査イベントを記録します(デフォルト:true)。インシデント発生後にのみ有効化された監査証跡では、そのインシデントを説明できないため、台帳はデフォルトで有効です。falseに設定すると、Gateway の再起動後に新しいイベントの挿入が停止します。既存のレコードは期限切れになるまで引き続き読み取り可能です。再度有効にすると、その時点から記録が再開されますが、空白期間はバックフィルされません。messages: メッセージメタデータの範囲です(デフォルト:"off")。"direct"は、既知の直接会話のみを記録します。"all"は、グループ、チャンネル、不明な種類の会話も記録します。どちらのモードもコンテンツを含まず、相関付けが可能な場合は、生の識別子をインストール環境ローカルの鍵付き仮名に置き換えます。これらは匿名化ではなく相関分析の補助です。状態データベースには導出キーが保存されますが、RPC および CLI のエクスポートには含まれません。
実行中の Gateway は、起動時に audit.enabled と audit.messages を取得します。いずれかの設定を変更した後は、Gateway を再起動してください。現在のメッセージ対象範囲には、コアディスパッチに到達した受理済みの受信メッセージと、共有の永続的配信に到達した元の論理的な送信返信ペイロードごとの1件の終端行が含まれます。これらの共有境界を迂回する Plugin ローカルおよび直接送信の経路は、まだ対象外です。上限付きのバックグラウンドライターはベストエフォートであり、損失のないコンプライアンスアーカイブではありません。
ログ
{ logging: { level: "info", file: "/tmp/openclaw/openclaw.log", consoleLevel: "info", consoleStyle: "pretty", // pretty | compact | json redactSensitive: "tools", // off | tools redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"], },}- デフォルトのログファイル:
/tmp/openclaw/openclaw-YYYY-MM-DD.log。名前付きプロファイルでは/tmp/openclaw/openclaw-<profile>-YYYY-MM-DD.logが使用されます。 - 安定したパスを使用するには、
logging.fileを設定します。 --verboseの場合、consoleLevelはdebugに引き上げられます。maxFileBytes: ローテーション前のアクティブなログファイルの最大サイズ(バイト単位、正の整数、デフォルト:104857600= 100 MB)。OpenClaw は、アクティブなファイルの隣に番号付きアーカイブを最大5個保持します。redactSensitive/redactPatterns: コンソール出力、ファイルログ、OTLP ログレコード、永続化されたセッショントランスクリプトのテキストに対するベストエフォートのマスキングです。redactSensitive: "off"は、この一般的なログ/トランスクリプトポリシーのみを無効にします。UI、ツール、診断の安全性に関わるサーフェスでは、出力前に引き続きシークレットが編集されます。
診断
{ diagnostics: { enabled: true, flags: ["telegram.*"], otel: { enabled: false, endpoint: "https://otel-collector.example.com:4318", tracesEndpoint: "https://traces.example.com/v1/traces", metricsEndpoint: "https://metrics.example.com/v1/metrics", logsEndpoint: "https://logs.example.com/v1/logs", protocol: "http/protobuf", // http/protobuf | grpc headers: { "x-tenant-id": "my-org" }, serviceName: "openclaw-gateway", traces: true, metrics: true, logs: false, logsExporter: "otlp", sampleRate: 1.0, flushIntervalMs: 5000, captureContent: { enabled: false, inputMessages: false, outputMessages: false, toolInputs: false, toolOutputs: false, systemPrompt: false, toolDefinitions: false, }, }, cacheTrace: { enabled: false, filePath: "~/.openclaw/logs/cache-trace.jsonl", includeMessages: true, includePrompt: true, includeSystem: true, }, },}enabled: 計装出力のマスタートグルです(デフォルト:true)。flags: 対象を絞ったログ出力を有効にするフラグ文字列の配列です("telegram.*"や"*"などのワイルドカードをサポートします)。otel.enabled: OpenTelemetry エクスポートパイプラインを有効にします(デフォルト:false)。完全な設定、シグナルカタログ、プライバシーモデルについては、OpenTelemetry エクスポートを参照してください。otel.endpoint: OTel エクスポート用のコレクター URL です。otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: シグナル固有のオプションの OTLP エンドポイントです。設定されている場合、そのシグナルに限りotel.endpointを上書きします。otel.protocol:"http/protobuf"(デフォルト)または"grpc"。otel.headers: OTel エクスポートリクエストとともに送信される追加の HTTP/gRPC メタデータヘッダーです。otel.serviceName: リソース属性に使用するサービス名です。otel.traces/otel.metrics/otel.logs: トレース、メトリクス、ログのエクスポートを有効にします。otel.logsExporter: ログのエクスポート先です。"otlp"(デフォルト)、標準出力の1行につき1つの JSON オブジェクトを出力する"stdout"、または"both"を指定します。otel.sampleRate: トレースのサンプリング率0~1。otel.flushIntervalMs: 定期的にテレメトリをフラッシュする間隔(ミリ秒単位)です。otel.captureContent: OTEL スパン属性への生コンテンツの取得をオプトインで有効にします。デフォルトでは無効です。ブール値のtrueはシステム以外のメッセージ/ツールコンテンツを取得します。オブジェクト形式では、inputMessages、outputMessages、toolInputs、toolOutputs、systemPrompt、toolDefinitionsを個別に有効化できます。OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: 最新の実験的な GenAI 推論スパン形式を有効にする環境トグルです。{gen_ai.operation.name} {gen_ai.request.model}スパン名、CLIENTスパン種別、従来のgen_ai.systemに代わるgen_ai.provider.nameが含まれます。デフォルトでは、互換性のためにスパンはopenclaw.model.callとgen_ai.systemを維持し、GenAI メトリクスは上限付きのセマンティック属性を使用します。OPENCLAW_OTEL_PRELOADED=1: グローバルな OpenTelemetry SDK がすでに登録されているホスト向けの環境トグルです。この場合、OpenClaw は診断リスナーをアクティブに保ちながら、Plugin が所有する SDK の起動/シャットダウンを省略します。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT、OTEL_EXPORTER_OTLP_METRICS_ENDPOINT、OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: 対応する設定キーが未設定の場合に使用される、シグナル固有のエンドポイント環境変数です。cacheTrace.enabled: 組み込み実行用のキャッシュトレーススナップショットをログに記録します(デフォルト:false)。cacheTrace.filePath: キャッシュトレース JSONL の出力パスです(デフォルト:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl)。cacheTrace.includeMessages/includePrompt/includeSystem: キャッシュトレース出力に含める内容を制御します(すべてデフォルト:true)。
更新
{ update: { channel: "stable", // stable | extended-stable | beta | dev checkOnStart: true, auto: { enabled: false, }, },}channel: リリースチャンネル("stable"、"extended-stable"、"beta"、または"dev")です。Extended-stable はパッケージ専用です。フォアグラウンドコマンドがインストールを担い、Gateway は読み取り専用の更新通知を出力する場合があります。checkOnStart: Gateway の起動時に npm の更新を確認します(デフォルト:true)。保存済みの Extended-stable 選択では、同じ読み取り専用の通知と24時間間隔の通知スケジュールが使用されます。auto.enabled: stable および beta のパッケージインストールに対するバックグラウンド自動更新を有効にします(デフォルト:false)。Extended-stable は自動的に適用されることはありません。
ACP
{ acp: { enabled: true, dispatch: { enabled: true }, backend: "acpx", fallbacks: ["acpx-secondary"], defaultAgent: "main", allowedAgents: ["main", "ops"], stream: { repeatSuppression: true, deliveryMode: "live", // live | final_only }, },}enabled: グローバルな ACP 機能ゲートです(デフォルト:true。ACP のディスパッチとスポーン機能を非表示にするにはfalseに設定します)。dispatch.enabled: ACP セッションのターンディスパッチ用の独立したゲートです(デフォルト:true)。実行をブロックしつつ ACP コマンドを利用可能な状態に保つには、falseに設定します。backend: デフォルトの ACP ランタイムバックエンド ID です(登録済みの ACP ランタイム Plugin と一致する必要があります)。 まずバックエンド Plugin をインストールしてください。plugins.allowが設定されている場合は、バックエンド Plugin の ID(例:acpx)を含める必要があります。含めない場合、ACP バックエンドは読み込まれません。fallbacks: プライマリバックエンドが何らかの出力を生成する前に、一時的と思われるエラー(利用不可、レート制限、クォータ枯渇、過負荷)で早期に失敗した場合に試行される、フォールバック ACP バックエンド ID の順序付きリストです。各エントリは、登録済みの ACP ランタイム Plugin バックエンドと一致する必要があります。defaultAgent: スポーンで明示的なターゲットを指定しない場合に使用する、フォールバック ACP ターゲットエージェント ID です。allowedAgents: ACP ランタイムセッションで許可されるエージェント ID の許可リストです。空の場合、追加の制限はありません。stream.repeatSuppression: ターンごとに繰り返されるステータス/ツール行を抑制します(デフォルト:true)。stream.deliveryMode:"live"は逐次ストリーミングし、"final_only"はターンの終端イベントまでバッファリングします。stream.tagVisibility: ストリーミングイベントのタグ名とブール値の可視性オーバーライドを対応付けるレコードです。runtime.installCommand: ACP ランタイム環境のブートストラップ時に実行する、オプションのインストールコマンドです。
ウィザード
CLI のガイド付きセットアップフロー(onboard、configure、doctor)の動作とメタデータ:
{ wizard: { accessMode: "full", appRecommendations: true, lastRunAt: "2026-01-01T00:00:00.000Z", lastRunVersion: "2026.1.4", lastRunCommit: "abc1234", lastRunCommand: "configure", lastRunMode: "local", securityAcknowledgedAt: "2026-01-01T00:00:00.000Z", },}-
wizard.accessMode: ガイド付きオンボーディングの開始時に選択する検出への同意。"full"(推奨)では、セットアップが AI アプリ、キー、ローカルランタイムを自動的に検索できます。"guarded"では、検索前にセットアップが一度確認し、代わりに手動構成を提示します。 -
wizard.appRecommendationsのデフォルトはtrueです。falseに設定すると、ガイド付きまたはクラシックオンボーディング中のインストール済みアプリケーションの推奨を無効にし、Gateway のdevice.appsアクセスをブロックします。Node ホストがコマンドを公開するには、別途用意されたデフォルトで無効のインストール済みアプリ共有フラグも有効にする必要があります。
ID
エージェントのデフォルトにあるagents.entriesの ID フィールドを参照してください。
ブリッジ(レガシー、削除済み)
現在のビルドには TCP ブリッジが含まれなくなりました。Node は Gateway WebSocket 経由で接続します。bridge.*キーは構成スキーマに含まれなくなりました(削除するまで検証に失敗します。openclaw doctor --fixで不明なキーを除去できます)。
レガシーブリッジの構成(履歴参照用)
{"bridge": { "enabled": true, "port": 18790, "bind": "tailnet", "tls": { "enabled": true, "autoGenerate": true }}}Cron
{ cron: { enabled: true, webhook: "https://example.invalid/legacy", // deprecated fallback for stored notify:true jobs webhookToken: "replace-with-dedicated-token", // optional bearer token for outbound webhook auth sessionRetention: "24h", // duration string or false },}sessionRetention: 完了した分離 Cron 実行セッションについて、SQLite のセッション行を削除するまで保持する期間。アーカイブされた削除済み Cron トランスクリプトのクリーンアップも制御します。デフォルト:24h。無効にするにはfalseを設定します。- 実行履歴では、ジョブごとに最新の 2000 件の終端行が自動的に保持されます。失われた行には、引き続き 24 時間のクリーンアップ期間が適用されます。
webhookToken: Cron Webhook の POST 配信(delivery.mode = "webhook")に使用されるベアラートークン。省略した場合、認証ヘッダーは送信されません。webhook:notify: trueが残っている保存済みジョブを移行するためにopenclaw doctor --fixが使用する、非推奨のレガシーフォールバック Webhook URL(http/https)。ランタイム配信ではジョブ単位のdelivery.mode="webhook"とdelivery.toを使用し、アナウンス配信を維持する場合はdelivery.completionDestinationを使用します。
cron.failureAlert
{ cron: { failureAlert: { enabled: false, after: 3, cooldownMs: 3600000, includeSkipped: false, mode: "announce", accountId: "main", }, },}enabled: Cron ジョブの失敗アラートを有効にします(デフォルト:false)。after: アラートが発生するまでの連続失敗回数(正の整数、最小値:1)。cooldownMs: 同じジョブについて繰り返しアラートを送る際の最小間隔(ミリ秒、非負整数)。includeSkipped: 連続してスキップされた実行をアラートしきい値に算入します(デフォルト:false)。スキップされた実行は個別に追跡され、実行エラーのバックオフには影響しません。mode: 配信モード -"announce"はチャンネルメッセージで送信し、"webhook"は構成済みの Webhook に投稿します。accountId: アラート配信の範囲を限定するための、任意のアカウント ID またはチャンネル ID。
cron.failureDestination
{ cron: { failureDestination: { mode: "announce", channel: "last", to: "channel:C1234567890", accountId: "main", }, },}- すべてのジョブに適用される Cron 失敗通知のデフォルト送信先。
mode:"announce"または"webhook"。十分な送信先データがある場合、デフォルトは"announce"です。channel: アナウンス配信用のチャンネル上書き。"last"は、最後に確認された配信チャンネルを再利用します。to: 明示的なアナウンス送信先または Webhook URL。Webhook モードでは必須です。accountId: 配信用の任意のアカウント上書き。- ジョブ単位の
delivery.failureDestinationは、このグローバルデフォルトを上書きします。 - グローバルにもジョブ単位にも失敗時の送信先が設定されていない場合、すでに
announceで配信しているジョブは、失敗時にその主要なアナウンス送信先へフォールバックします。 delivery.failureDestinationは、ジョブの主要なdelivery.modeが"webhook"でない限り、sessionTarget="isolated"ジョブでのみサポートされます。
Cron ジョブを参照してください。分離された Cron 実行はバックグラウンドタスクとして追跡されます。
メディアモデルのテンプレート変数
tools.media.models[].args内で展開されるテンプレートプレースホルダー:
| 変数 | 説明 |
|---|---|
{{Body}} |
受信メッセージ本文全体 |
{{RawBody}} |
生の本文(履歴や送信者のラッパーなし) |
{{BodyStripped}} |
グループメンションを除去した本文 |
{{From}} |
送信者識別子 |
{{To}} |
送信先識別子 |
{{MessageSid}} |
チャンネルメッセージ ID |
{{SessionId}} |
現在のセッション UUID |
{{IsNewSession}} |
新しいセッションが作成された場合は"true" |
{{AttachmentUrl}} |
現在の添付ファイルの URL またはプロバイダー参照 |
{{AttachmentPath}} |
現在の添付ファイルのローカルパス |
{{AttachmentContentType}} |
現在の添付ファイルの MIME コンテンツタイプ |
{{AttachmentDir}} |
AttachmentPathを含むディレクトリ |
{{AttachmentIndex}} |
0 始まりのソースファクトインデックス |
{{Transcript}} |
音声トランスクリプト |
{{Prompt}} |
CLI エントリ用に解決されたメディアプロンプト |
{{MaxChars}} |
CLI エントリ用に解決された最大出力文字数 |
{{ChatType}} |
"direct"または"group" |
{{GroupSubject}} |
グループ件名(ベストエフォート) |
{{GroupMembers}} |
グループメンバーのプレビュー(ベストエフォート) |
{{SenderName}} |
送信者の表示名(ベストエフォート) |
{{SenderE164}} |
送信者の電話番号(ベストエフォート) |
{{Provider}} |
プロバイダーのヒント(whatsapp、telegram、discord など) |
レガシーの{{MediaPath}}、{{MediaUrl}}、{{MediaType}}、{{MediaDir}}
という名前は、Plugin SDK の互換期間中は引き続き利用できますが、
非推奨です。新しい構成ではAttachment*変数を使用してください。
構成のインクルード($include)
構成を複数のファイルに分割します:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/mueller.json5", "./clients/schmidt.json5"], },}マージ動作:
- 単一ファイル: それを含むオブジェクトを置き換えます。
- ファイルの配列: 順番にディープマージされます(後のファイルが前のファイルを上書きします)。
- 兄弟キー: インクルード後にマージされます(インクルードされた値を上書きします)。
- ネストされたインクルード: 最大 10 階層まで。
- パス: インクルード元ファイルを基準に解決されますが、最上位の構成ディレクトリ(
openclaw.jsonのdirname)内に収まる必要があります。絶対パスまたは../形式は、解決後もこの境界内に収まる場合にのみ許可されます。構成ディレクトリ外のルートを追加で許可するには、OPENCLAW_INCLUDE_ROOTS(絶対パス)を設定します。 - 制限: パスに null バイトを含めることはできず、解決前後のどちらでも厳密に 4096 文字未満である必要があります。インクルードされる各ファイルの上限は 2 MB です。
- 単一ファイルのインクルードを参照する最上位セクションを 1 つだけ変更する OpenClaw 所有の書き込みは、そのインクルード先ファイルに直接書き込まれます。たとえば、
plugins installはplugins.json5内のplugins: { $include: "./plugins.json5" }を更新し、openclaw.jsonはそのまま維持します。 - ルートインクルード、インクルード配列、および兄弟キーによる上書きを含むインクルードは、OpenClaw 所有の書き込みに対して読み取り専用です。このような書き込みは、構成をフラット化する代わりに安全側で失敗します。
- エラー: ファイルの欠落、解析エラー、循環インクルード、無効なパス形式、長さ超過に対して明確なメッセージを表示します。