概要
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:204 の mode が "enforced" 以外("warn" 等)に変更できれば guardrail を緩和可能。ただし他の保護(factcheck、review gate 等)も全て緩むため非推奨。
方法4: opencode.jsonc の provider 設定
.opencode/opencode.jsonc の provider セクションで 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 の設計意図記述 |
概要
OpenRouter 経由でモデルを使用すると、guardrail policy によりブロックされる。
根本原因
packages/guardrails/profile/plugins/guardrail.tsにハードコードされたプロバイダー制限が原因。証拠1:
evalsセット (L205)"openrouter"が評価専用プロバイダーとして登録されている。証拠2:
gate()関数 (L352-353)現在のエージェントが
provider-evalでない場合、OpenRouter は無条件でブロックされる。implementエージェント等の通常のエージェントからは使用不可。証拠3: AGENTS.md (L15) の設計意図
これは意図的な設計であり、「機密コードが 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を変更:guardrails パッケージのビルドし直しが必要。OpenRouter が通常プロバイダーとして使えるようになるが、confidential policy の保護が外れる。
方法3:
modeパラメータの変更guardrail.ts:204のmodeが"enforced"以外("warn"等)に変更できれば guardrail を緩和可能。ただし他の保護(factcheck、review gate 等)も全て緩むため非推奨。方法4: opencode.jsonc の provider 設定
.opencode/opencode.jsoncのproviderセクションで 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:205evalsセット定義(ブロック対象プロバイダー)guardrail.ts:206evalAgent定義("provider-eval")guardrail.ts:335-368gate()関数(プロバイダー admission チェック)guardrail.ts:371-378configハンドラ(whitelist 処理)AGENTS.md:15