メインコンテンツへスキップ
OpenClaw は加算的な SecretRef をサポートしているため、対応している認証情報を設定内に平文で置く必要はありません。
平文も引き続き機能します。SecretRef は認証情報ごとにオプトインです。
平文の認証情報は、openclaw.jsonauth-profiles.json.env、生成された agents/*/agent/models.json ファイルなど、エージェントが検査できるファイル内にある場合、引き続きエージェントから読み取り可能です。SecretRef がローカルの影響範囲を縮小するのは、対応しているすべての認証情報が移行され、openclaw secrets audit --check が平文の残存なしを報告した後だけです。

ランタイムモデル

  • シークレットは、リクエストパス上で遅延解決されるのではなく、アクティベーション中に即時に、メモリ内ランタイムスナップショットへ解決されます。
  • 実質的にアクティブな SecretRef を解決できない場合、起動は早期に失敗します。
  • リロードはアトミックな差し替えです。完全に成功するか、最後に正常だったスナップショットを維持します。
  • ポリシー違反(たとえば OAuth モードの認証プロファイルと SecretRef 入力の組み合わせ)は、ランタイム差し替えの前にアクティベーションを失敗させます。
  • ランタイムリクエストは、アクティブなメモリ内スナップショットだけを読み取ります。送信配信パス(Discord の返信/スレッド配信、Telegram アクション送信)もそのスナップショットを読み取り、送信ごとに ref を再解決しません。
これにより、シークレットプロバイダーの停止がホットなリクエストパスに影響しません。

エージェントアクセス境界

SecretRef は、認証情報が設定や生成されたモデルファイルに永続化されることを防ぎますが、プロセス分離境界ではありません。エージェントが読み取れるパスのディスク上に平文の認証情報が残っている場合、API レベルの秘匿化を迂回して、ファイルまたはシェルツール経由で引き続き読み取り可能です。 エージェントがアクセス可能なファイルが対象範囲に含まれる本番デプロイでは、次のすべてが満たされている場合にのみ移行完了とみなしてください。
  • 対応している認証情報は、平文値の代わりに SecretRef を使用している。
  • レガシーな平文の残存が、openclaw.jsonauth-profiles.json.env、生成された models.json ファイルから削除されている。
  • 移行後に openclaw secrets audit --check がクリーンである。
  • 残っている未対応またはローテーション対象の認証情報は、OS 分離、コンテナ分離、または外部認証情報プロキシで保護されている。
このため、audit/configure/apply ワークフローは単なる便利なヘルパーではなく、セキュリティ移行ゲートです。
SecretRef は、任意の読み取り可能ファイルを安全にするものではありません。バックアップ、コピーされた設定、古い生成済みモデルカタログ、未対応の認証情報クラスは、削除されるか、エージェントの信頼境界の外へ移動されるか、個別に分離されるまで、本番シークレットのままです。

アクティブサーフェスのフィルタリング

SecretRef は、実質的にアクティブなサーフェスでのみ検証されます。
  • 有効なサーフェス: 未解決の ref は起動/リロードをブロックします。
  • 非アクティブなサーフェス: 未解決の ref は起動/リロードをブロックせず、非致命的な SECRETS_REF_IGNORED_INACTIVE_SURFACE 診断を出力します。
  • 無効化されたチャンネル/アカウント項目。
  • 有効なアカウントが継承しないトップレベルのチャンネル認証情報。
  • 無効化されたツール/機能サーフェス。
  • tools.web.search.provider で選択されていない Web 検索プロバイダー固有のキー。自動モード(プロバイダー未設定)では、いずれかが解決されるまで自動検出のために優先順位に従ってキーが参照されます。選択後、選択されなかったプロバイダーキーは非アクティブになります。
  • サンドボックス SSH 認証素材(agents.defaults.sandbox.ssh.identityDatacertificateDataknownHostsData、およびエージェントごとの上書き)は、有効なサンドボックスバックエンドが ssh で、サンドボックスモードが off ではなく、デフォルトエージェントまたは有効なエージェントに対する場合にのみアクティブです。
  • gateway.remote.token / gateway.remote.password SecretRef は、次のいずれかが成り立つ場合にアクティブです。
    • gateway.mode=remote
    • gateway.remote.url が設定されている
    • gateway.tailscale.modeserve または funnel である
    • これらのリモートサーフェスがないローカルモード: トークン認証が勝ち得て、env/認証トークンが設定されていない場合、gateway.remote.token はアクティブです。パスワード認証が勝ち得て、env/認証パスワードが設定されていない場合にのみ、gateway.remote.password はアクティブです。
  • OPENCLAW_GATEWAY_TOKEN が設定されている場合、gateway.auth.token SecretRef は起動時の認証解決では非アクティブです。そのランタイムでは env トークン入力が優先されるためです。

Gateway 認証サーフェス診断

SecretRef が gateway.auth.tokengateway.auth.passwordgateway.remote.token、または gateway.remote.password に設定されている場合、Gateway の起動/リロードはコード SECRETS_GATEWAY_AUTH_SURFACE でサーフェス状態をログに記録します。
  • active: SecretRef は有効な認証サーフェスの一部であり、解決される必要があります。
  • inactive: 別の認証サーフェスが優先されている、またはリモート認証が無効/非アクティブです。
ログエントリには、アクティブサーフェスポリシーが使用した理由が含まれます。

オンボーディング参照の事前検証

対話型オンボーディングで SecretRef ストレージを選択すると、保存前に事前検証が実行されます。
  • Env ref: env var 名を検証し、セットアップ中に空でない値が見えていることを確認します。
  • Provider ref(file または exec): プロバイダー選択を検証し、id を解決して、解決された値の型を確認します。
  • クイックスタートフロー: gateway.auth.token がすでに SecretRef の場合、オンボーディングは probe/dashboard bootstrap の前に、同じ fail-fast ゲートを使用してそれを解決します(envfileexec ref)。
検証に失敗するとエラーが表示され、再試行できます。

SecretRef 契約

どこでも 1 つのオブジェクト形状です。
{ source: "env" | "file" | "exec", provider: "default", id: "..." }
{ source: "env", provider: "default", id: "OPENAI_API_KEY" }
SecretInput フィールドでは短縮文字列も受け付けます。
"${OPENAI_API_KEY}"
"$OPENAI_API_KEY"
検証:
  • provider^[a-z][a-z0-9_-]{0,63}$ に一致する必要があります
  • id^[A-Z][A-Z0-9_]{0,127}$ に一致する必要があります

プロバイダー設定

secrets.providers の下にプロバイダーを定義します。
{
  secrets: {
    providers: {
      default: { source: "env" },
      filemain: {
        source: "file",
        path: "~/.openclaw/secrets.json",
        mode: "json", // or "singleValue"
      },
      vault: {
        source: "exec",
        command: "/usr/local/bin/openclaw-vault-resolver",
        args: ["--profile", "prod"],
        passEnv: ["PATH", "VAULT_ADDR"],
        jsonOnly: true,
      },
      "team-secrets": {
        source: "exec",
        pluginIntegration: {
          pluginId: "acme-secrets",
          integrationId: "secret-store",
        },
      },
    },
    defaults: {
      env: "default",
      file: "filemain",
      exec: "vault",
    },
    resolution: {
      maxProviderConcurrency: 4,
      maxRefsPerProvider: 512,
      maxBatchBytes: 262144,
    },
  },
}
  • allowlist による任意の完全一致名 allowlist。
  • env 値がない、または空の場合、解決は失敗します。
  • path のローカルファイルを読み取ります。
  • mode: "json"(デフォルト)は JSON オブジェクトペイロードを想定し、id を JSON pointer として解決します。
  • mode: "singleValue" は ref id "value" を想定し、生のファイル内容(末尾の改行は除去)を返します。
  • パスは所有権/権限チェックに合格する必要があります。timeoutMs(デフォルト 5000)と maxBytes(デフォルト 1 MiB)が読み取りを制限します。
  • Windows は fail-closed です。パスの ACL 検証が利用できない場合、解決は失敗します。信頼済みパスに限り、そのプロバイダーで allowInsecurePath: true を設定してチェックを迂回できます。
  • 設定された絶対バイナリパスを直接実行します。シェルは使用しません。
  • デフォルトでは、command はシンボリックリンクではなく通常ファイルである必要があります。シンボリックリンクのコマンドパス(たとえば Homebrew shim)を許可するには allowSymlinkCommand: true を設定し、trustedDirs(たとえば ["/opt/homebrew"])と組み合わせて、パッケージマネージャーパスだけが対象になるようにします。
  • timeoutMs(デフォルト 5000)、noOutputTimeoutMs(デフォルトは timeoutMs と同じ)、maxOutputBytes(デフォルト 1 MiB)、env/passEnv allowlist、trustedDirs をサポートします。
  • jsonOnly のデフォルトは true です。jsonOnly: false でリクエストされた id が 1 つだけの場合、プレーンな非 JSON stdout がその id の値として受け付けられます。
  • Windows は fail-closed です。コマンドパスの ACL 検証が利用できない場合、解決は失敗します。信頼済みパスに限り、そのプロバイダーで allowInsecurePath: true を設定してチェックを迂回できます。
  • Plugin 管理の exec プロバイダーは、コピーされた command/args の代わりに pluginIntegration を使用できます。OpenClaw は起動/リロード中に、インストール済み Plugin マニフェストから現在のコマンド詳細を解決します。Plugin が無効化、削除、未信頼になっている、またはその統合を宣言しなくなっている場合、そのプロバイダー上のアクティブな SecretRef は fail closed します。
リクエストペイロード(stdin):
{ "protocolVersion": 1, "provider": "vault", "ids": ["providers/openai/apiKey"] }
レスポンスペイロード(stdout):
{ "protocolVersion": 1, "values": { "providers/openai/apiKey": "<openai-api-key>" } } // pragma: allowlist secret
任意の id ごとのエラー:
{
  "protocolVersion": 1,
  "values": {},
  "errors": { "providers/openai/apiKey": { "message": "not found" } }
}

ファイル backed API キー

設定の env ブロックに file:... 文字列を入れないでください。そのブロックはリテラルであり、上書きもしないため、そこで file:... が解決されることはありません。 代わりに、対応している認証情報フィールドでファイル SecretRef を使用してください。
{
  secrets: {
    providers: {
      xai_key_file: {
        source: "file",
        path: "~/.openclaw/secrets/xai-api-key.txt",
        mode: "singleValue",
      },
    },
  },
  models: {
    providers: {
      xai: {
        apiKey: { source: "file", provider: "xai_key_file", id: "value" },
      },
    },
  },
}
mode: "singleValue" では、SecretRef id"value" です。mode: "json" では、"/providers/xai/apiKey" のような絶対 JSON pointer を使用します。 SecretRef を受け付けるフィールドについては、SecretRef 認証情報サーフェス を参照してください。

Exec 統合の例

{
  secrets: {
    providers: {
      onepassword_openai: {
        source: "exec",
        command: "/opt/homebrew/bin/op",
        allowSymlinkCommand: true, // required for Homebrew symlinked binaries
        trustedDirs: ["/opt/homebrew"],
        args: ["read", "op://Personal/OpenClaw QA API Key/password"],
        passEnv: ["HOME"],
        jsonOnly: false,
      },
    },
  },
  models: {
    providers: {
      openai: {
        baseUrl: "https://api.openai.com/v1",
        models: [{ id: "gpt-5", name: "gpt-5" }],
        apiKey: { source: "exec", provider: "onepassword_openai", id: "value" },
      },
    },
  },
}
SecretRef id を Bitwarden Secrets Manager 項目キーへマップするには、resolver ラッパーを使用します。リポジトリには scripts/secrets/openclaw-bws-resolver.mjs が含まれています。Gateway を実行するホスト上の絶対信頼済みパスにインストールまたはコピーしてください。要件:
  • Gateway ホストに Bitwarden Secrets Manager CLI (bws) がインストールされている。
  • BWS_ACCESS_TOKEN が Gateway サービスで利用可能。
  • PATH がリゾルバーに渡されている、または BWS_BIN が絶対 bws バイナリパスに設定されている。
  • セルフホストの Bitwarden インスタンスを使用する場合は、環境で BWS_SERVER_URL が設定されている。
{
  secrets: {
    providers: {
      bws: {
        source: "exec",
        command: "/usr/local/bin/openclaw-bws-resolver.mjs",
        passEnv: ["BWS_ACCESS_TOKEN", "BWS_SERVER_URL", "PATH", "BWS_BIN"],
        jsonOnly: true,
      },
    },
  },
  models: {
    providers: {
      openai: {
        baseUrl: "https://api.openai.com/v1",
        models: [{ id: "gpt-5", name: "gpt-5" }],
        apiKey: {
          source: "exec",
          provider: "bws",
          id: "openclaw/providers/openai/apiKey",
        },
      },
    },
  },
}
リゾルバーは要求された id をバッチ化し、bws secret list を実行し、一致するシークレットの key フィールドの値を返します。openclaw/providers/openai/apiKey のように、exec SecretRef id コントラクトを満たすキーを使用してください。アンダースコアを含む env-var 形式のキーは、リゾルバーの実行前に拒否されます。複数の表示可能な Bitwarden シークレットが要求されたキーを共有している場合、リゾルバーは推測せず、その id を曖昧として失敗させます。config を更新したら、リゾルバーパスを検証します。
openclaw secrets audit --allow-exec
{
  secrets: {
    providers: {
      vault_openai: {
        source: "exec",
        command: "/opt/homebrew/bin/vault",
        allowSymlinkCommand: true, // required for Homebrew symlinked binaries
        trustedDirs: ["/opt/homebrew"],
        args: ["kv", "get", "-field=OPENAI_API_KEY", "secret/openclaw"],
        passEnv: ["VAULT_ADDR", "VAULT_TOKEN"],
        jsonOnly: false,
      },
    },
  },
  models: {
    providers: {
      openai: {
        baseUrl: "https://api.openai.com/v1",
        models: [{ id: "gpt-5", name: "gpt-5" }],
        apiKey: { source: "exec", provider: "vault_openai", id: "value" },
      },
    },
  },
}
SecretRef id を pass エントリに直接マッピングする小さなリゾルラーラッパーを使用します。たとえば /usr/local/bin/openclaw-pass-resolver のように、exec-provider パスチェックに通る絶対パスに実行可能ファイルとして保存してください。#!/usr/bin/env node shebang は、リゾルバープロセスの PATH から node を解決するため、passEnvPATH を含めてください。pass がその PATH 上にない場合は、親環境で PASS_BIN を設定し、それも passEnv に含めます。
#!/usr/bin/env node
const { spawnSync } = require("node:child_process");

let stdin = "";
process.stdin.setEncoding("utf8");
process.stdin.on("data", (chunk) => {
  stdin += chunk;
});
process.stdin.on("error", (err) => {
  process.stderr.write(`${err.message}\n`);
  process.exit(1);
});
process.stdin.on("end", () => {
  let request;
  try {
    request = JSON.parse(stdin || "{}");
  } catch (err) {
    process.stderr.write(`Failed to parse request: ${err.message}\n`);
    process.exit(1);
  }

  const passBin = process.env.PASS_BIN || "pass";
  const values = {};
  const errors = {};

  for (const id of request.ids ?? []) {
    const result = spawnSync(passBin, ["show", id], { encoding: "utf8" });
    if (result.status === 0) {
      values[id] = result.stdout.split(/\r?\n/, 1)[0] ?? "";
    } else {
      errors[id] = { message: (result.stderr || `pass exited ${result.status}`).trim() };
    }
  }

  process.stdout.write(JSON.stringify({ protocolVersion: 1, values, errors }));
});
次に exec provider を設定し、apiKeypass エントリパスを指すようにします。
{
  secrets: {
    providers: {
      pass_store: {
        source: "exec",
        command: "/usr/local/bin/openclaw-pass-resolver",
        passEnv: ["PATH", "HOME", "GNUPGHOME", "GPG_TTY", "PASSWORD_STORE_DIR", "PASS_BIN"],
        jsonOnly: true,
      },
    },
  },
  models: {
    providers: {
      openai: {
        baseUrl: "https://api.openai.com/v1",
        models: [{ id: "gpt-5", name: "gpt-5" }],
        apiKey: {
          source: "exec",
          provider: "pass_store",
          id: "openclaw/providers/openai/apiKey",
        },
      },
    },
  },
}
シークレットは pass エントリの最初の行に置くか、代わりに完全な pass show 出力を返すようラッパーをカスタマイズしてください。config を更新したら、静的監査と exec リゾルバーパスの両方を検証します。
openclaw secrets audit --check
openclaw secrets audit --allow-exec
{
  secrets: {
    providers: {
      sops_openai: {
        source: "exec",
        command: "/opt/homebrew/bin/sops",
        allowSymlinkCommand: true, // required for Homebrew symlinked binaries
        trustedDirs: ["/opt/homebrew"],
        args: ["-d", "--extract", '["providers"]["openai"]["apiKey"]', "/path/to/secrets.enc.json"],
        passEnv: ["SOPS_AGE_KEY_FILE"],
        jsonOnly: false,
      },
    },
  },
  models: {
    providers: {
      openai: {
        baseUrl: "https://api.openai.com/v1",
        models: [{ id: "gpt-5", name: "gpt-5" }],
        apiKey: { source: "exec", provider: "sops_openai", id: "value" },
      },
    },
  },
}

MCP サーバー環境変数

plugins.entries.acpx.config.mcpServers 経由で設定される MCP サーバー env var は SecretInput を受け入れ、API キーとトークンを平文 config から除外します。
{
  plugins: {
    entries: {
      acpx: {
        enabled: true,
        config: {
          mcpServers: {
            github: {
              command: "npx",
              args: ["-y", "@modelcontextprotocol/server-github"],
              env: {
                GITHUB_PERSONAL_ACCESS_TOKEN: {
                  source: "env",
                  provider: "default",
                  id: "MCP_GITHUB_PAT",
                },
              },
            },
          },
        },
      },
    },
  },
}
平文の文字列値も引き続き機能します。${MCP_SERVER_API_KEY} のような env-template ref と SecretRef オブジェクトは、MCP サーバープロセスが起動する前の gateway activation 中に解決されます。他の SecretRef surface と同様に、未解決の ref は acpx Plugin が実質的にアクティブな場合にのみ activation をブロックします。

Sandbox SSH 認証マテリアル

コアの ssh sandbox バックエンドも、SSH 認証マテリアル用の SecretRef をサポートします。
{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "ssh",
        ssh: {
          target: "user@gateway-host:22",
          identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
          certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
          knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
        },
      },
    },
  },
}
ランタイムの動作:
  • OpenClaw は、SSH 呼び出しごとに遅延解決するのではなく、sandbox activation 中にこれらの ref を解決します。
  • 解決済みの値は制限付きファイル権限 (0o600) で一時ディレクトリに書き込まれ、生成された SSH config で使用されます。
  • 実効 sandbox バックエンドが ssh でない場合、または sandbox mode が off の場合、これらの ref は非アクティブのままで、起動をブロックしません。

サポートされる認証情報 surface

標準のサポート対象および非サポート対象の認証情報は、SecretRef 認証情報 surface に記載されています。
ランタイムで発行される認証情報やローテーションされる認証情報、および OAuth refresh マテリアルは、読み取り専用 SecretRef 解決から意図的に除外されています。

必須の動作と優先順位

  • ref のないフィールド: 変更なし。
  • ref のあるフィールド: active surface では activation 中に必須。
  • 平文と ref の両方が存在する場合、サポートされる優先パスでは ref が優先されます。
  • redaction sentinel __OPENCLAW_REDACTED__ は内部 config の redaction/restore 用に予約されており、literal submitted config data としては拒否されます。
警告および監査シグナル:
  • SECRETS_REF_OVERRIDES_PLAINTEXT (ランタイム警告)
  • REF_SHADOWED (auth-profiles.json 認証情報が openclaw.json ref より優先される場合の監査 finding)
Google Chat 互換性: serviceAccountRef は平文の serviceAccount より優先されます。兄弟 ref が設定されると、平文値は無視されます。

Activation トリガー

Secret activation は次で実行されます。
  • Startup (preflight と最終 activation)
  • Config reload hot-apply path
  • Config reload restart-check path
  • secrets.reload による手動 reload
  • Gateway config write RPC preflight (config.set / config.apply / config.patch)。編集を永続化する前に、送信された config payload 内で active-surface SecretRef が解決可能かをチェックします
Activation コントラクト:
  • 成功すると snapshot がアトミックに入れ替わります。
  • Startup failure は gateway startup を中止します。
  • Runtime reload failure は last-known-good snapshot を保持します。
  • Write-RPC preflight failure は送信された config を拒否します。disk config と active runtime snapshot はどちらも変更されません。
  • outbound helper/tool call に明示的な per-call channel token を渡しても SecretRef activation はトリガーされません。activation point は startup、reload、明示的な secrets.reload のままです。

Degraded と recovered のシグナル

正常状態の後に reload-time activation が失敗すると、OpenClaw は degraded secrets state に入り、ワンショットの system event と log code を発行します。
  • SECRETS_RELOADER_DEGRADED
  • SECRETS_RELOADER_RECOVERED
動作:
  • Degraded: ランタイムは last-known-good snapshot を保持します。
  • Recovered: 次の activation 成功後に一度だけ発行されます。
  • すでに degraded の間に失敗が繰り返される場合は警告をログに出しますが、イベントは再発行しません。
  • Startup fail-fast は degraded event を発行しません。ランタイムが一度も active になっていないためです。

コマンドパス解決

Command path は、Gateway snapshot RPC を介して、サポートされる SecretRef 解決にオプトインできます。大きく 2 つの動作があります。
たとえば、openclaw memory remote-memory path や、remote shared-secret ref が必要な場合の openclaw qr --remote です。これらは active snapshot から読み取り、必要な SecretRef が利用できない場合は即座に失敗します。
その他の注意:
  • backend secret rotation 後の snapshot refresh は openclaw secrets reload によって処理されます。
  • これらの command path が使用する Gateway RPC method: secrets.resolve

監査と configure ワークフロー

デフォルトの operator flow:
1

現在の状態を監査する

openclaw secrets audit --check
2

SecretRefs を設定して適用する

openclaw secrets configure --apply
3

再監査する

openclaw secrets audit --check
再監査がクリーンになるまで、移行が完了したものとして扱わないでください。監査で保存時の平文値がまだ報告される場合、runtime API が墨消し済みの値を返していても、エージェントアクセスのリスクは残ります。 configure 中に適用せずにプランを保存した場合は、再監査の前に openclaw secrets apply --from <plan-path> でその保存済みプランを適用してください。
検出項目には以下が含まれます。
  • 保存時の平文値(openclaw.jsonauth-profiles.json.env、生成された agents/*/agent/models.json)。
  • 生成された models.json エントリ内に残った、機密性の高いプロバイダー header の平文。
  • 未解決の ref。
  • 優先順位によるシャドーイング(auth-profiles.jsonopenclaw.json の ref より優先される)。
  • レガシー残留物(auth.json、OAuth リマインダー)。
exec 注記: デフォルトでは、audit はコマンドの副作用を避けるため、exec SecretRef の解決可能性チェックをスキップします。監査中に exec プロバイダーを実行するには openclaw secrets audit --allow-exec を使用してください。header 残留物の注記: 機密性の高いプロバイダー header の検出は、名前ヒューリスティックに基づきます(一般的な認証/認可情報 header 名、および authorizationx-api-keytokensecretpasswordcredential などの断片)。
対話型ヘルパーは以下を行います。
  • まず secrets.providers を設定する(env/file/exec、追加/編集/削除)。
  • 1 つのエージェントスコープについて、openclaw.jsonauth-profiles.json 内のサポート対象の secret 保持フィールドを選択できるようにする。
  • ターゲットピッカー内で新しい auth-profiles.json マッピングを直接作成できる。
  • SecretRef の詳細(sourceproviderid)を取得する。
  • preflight 解決を実行し、すぐに適用できる。
exec 注記: --allow-exec が設定されていない限り、preflight は exec SecretRef チェックをスキップします。configure --apply から直接適用し、プランに exec ref/プロバイダーが含まれる場合は、適用ステップでも --allow-exec を設定したままにしてください。便利なモード:
  • openclaw secrets configure --providers-only
  • openclaw secrets configure --skip-provider-setup
  • openclaw secrets configure --agent <id>
configure の適用時デフォルト:
  • 対象プロバイダーについて、auth-profiles.json から一致する静的認証情報をスクラブする。
  • auth.json からレガシー静的 api_key エントリをスクラブする。
  • <config-dir>/.env から一致する既知の secret 行をスクラブする。
保存済みプランを適用します。
openclaw secrets apply --from /tmp/openclaw-secrets-plan.json
openclaw secrets apply --from /tmp/openclaw-secrets-plan.json --allow-exec
openclaw secrets apply --from /tmp/openclaw-secrets-plan.json --dry-run
openclaw secrets apply --from /tmp/openclaw-secrets-plan.json --dry-run --allow-exec
exec 注記: dry-run は --allow-exec が設定されていない限り exec チェックをスキップします。書き込みモードは、--allow-exec が設定されていない限り、exec SecretRef/プロバイダーを含むプランを拒否します。厳密なターゲット/パス契約の詳細と正確な拒否ルールについては、Secrets Apply Plan Contract を参照してください。

一方向の安全ポリシー

OpenClaw は、過去の平文 secret 値を含むロールバックバックアップを意図的に書き込みません。
安全モデル:
  • 書き込みモードの前に preflight が成功している必要があります。
  • commit 前に runtime activation が検証されます。
  • apply は、atomic なファイル置換と失敗時のベストエフォート復元を使用してファイルを更新します。

レガシー認証互換性の注記

静的認証情報については、runtime は平文のレガシー認証ストレージに依存しなくなりました。
  • runtime の認証情報ソースは、解決済みのインメモリスナップショットです。
  • レガシー静的 api_key エントリは、検出時にスクラブされます。
  • OAuth 関連の互換性動作は別扱いのままです。

Web UI の注記

一部の SecretInput union は、フォームモードより raw editor mode の方が設定しやすい場合があります。

関連