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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions