Skip to content

OpenRouter が guardrail の confidential policy でブロックされる原因と対処法 #24

@terisuke

Description

@terisuke

概要

OpenRouter 経由でモデルを使用すると、guardrail policy によりブロックされる。

Guardrail policy blocked this action: openrouter is evaluation-only under confidential policy; use provider-eval

根本原因

packages/guardrails/profile/plugins/guardrail.ts にハードコードされたプロバイダー制限が原因。

証拠1: evals セット (L205)

const evals = new Set(["openrouter"])

"openrouter" が評価専用プロバイダーとして登録されている。

証拠2: gate() 関数 (L352-353)

if (evals.has(provider) && agent !== evalAgent) {
  return `${provider} is evaluation-only under confidential policy; use ${evalAgent}`
}

現在のエージェントが provider-eval でない場合、OpenRouter は無条件でブロックされる。implement エージェント等の通常のエージェントからは使用不可。

証拠3: AGENTS.md (L15) の設計意図

Keep provider admission explicit. Standard confidential-code work stays on the admitted
`zai` and `openai` lane; OpenRouter-backed evaluation belongs on `provider-eval` or
`/provider-eval` only.

これは意図的な設計であり、「機密コードが OpenRouter 経由で外部に流れるリスク」を防ぐための confidential policy。

証拠4: state.json の確認

.opencode/guardrails/state.json"last_provider": "openrouter" が記録されており、OpenRouter 選択後にブロックが発生したことが裏付けられる。

対処法の選択肢

方法1: /provider-eval コマンドを使う(正規ルート・推奨)

guardrail が想定している正規の使い方。OpenRouter モデルを /provider-eval レーン経由で評価専用として使用する。コード変更不要。

方法2: evals セットから openrouter を除外する

guardrail.ts:205 を変更:

// Before
const evals = new Set(["openrouter"])
// After
const evals = new Set([])

guardrails パッケージのビルドし直しが必要。OpenRouter が通常プロバイダーとして使えるようになるが、confidential policy の保護が外れる。

方法3: mode パラメータの変更

guardrail.ts:204mode"enforced" 以外("warn" 等)に変更できれば guardrail を緩和可能。ただし他の保護(factcheck、review gate 等)も全て緩むため非推奨。

方法4: opencode.jsonc の provider 設定

.opencode/opencode.jsoncprovider セクションで whitelist を設定できるが、evals セットのバイパスにはならないため、この問題の解決にはならない可能性が高い(whitelist は L359-363 の別のゲートで使用される)。

影響範囲

  • packages/guardrails/profile/plugins/guardrail.ts — gate 関数
  • packages/guardrails/profile/AGENTS.md — ポリシー定義
  • packages/guardrails/profile/commands/provider-eval.md — 評価コマンド定義
  • packages/guardrails/profile/agents/provider-eval.md — 評価エージェント定義

関連ファイル

ファイル 役割
guardrail.ts:205 evals セット定義(ブロック対象プロバイダー)
guardrail.ts:206 evalAgent 定義("provider-eval"
guardrail.ts:335-368 gate() 関数(プロバイダー admission チェック)
guardrail.ts:371-378 config ハンドラ(whitelist 処理)
AGENTS.md:15 confidential policy の設計意図記述

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions