世界は立ち止まらない。RSS
BIG CHANGE.

Markdown版

AI-translated from English; not yet reviewed by a fluent editor.

# OpenRouter Armorはツール呼び出しをどう検査するのか、クライアントが止めるべき場面は

> OpenRouter Armorは、提案されたツール呼び出しを開発者のルールに照らして分類する。ResponsesとChat Completionsではフラグ付き呼び出しを差し止められるが、Messages互換モードではクライアントが責任を負う。

By BIG CHANGE Editorial

Published: 2026-10-17T01:51:13.522Z
Updated: 2026-10-17T01:51:13.522Z
Canonical: https://bigchange.ai/blog/openrouter-armor-tool-call-screening-client-enforcement

![Conceptual charcoal illustration of a desktop monitor and idle keyboard; abstract code strokes and one orange pending-call shape appear on the unbranded screen.](https://bigchange.ai/api/media/file/openrouter-armor-call-screening-concept-v1.png)
AI-generated conceptual illustration by BIG CHANGE; no actual OpenRouter interface or tested security result is depicted.

OpenRouterの[Armorベータ](https://openrouter.ai/docs/guides/features/plugins/armor)は、モデルが提案するツール呼び出しと、それを実行する可能性のあるアプリケーションの間にルール分類器を置く。エージェント開発者にとって重要なのは、判定がどの段階で実際に実行を止めるかだ。Chat CompletionsとResponsesでは、Armorがフラグ付き呼び出しの受け渡しを差し止められる。Messages APIのClaude Code互換モードでは、フラグ付きの `tool_use` が応答に残り、クライアントが実行を拒否しなければならない。

現行の文書は、2026年10月から利用可能なベータを説明している。BIG CHANGEは10月17日に、文書化されたリクエストとレスポンスの契約を確認した。APIリクエストの送信、エージェントの実行、セキュリティー性能の測定は行っていない。

## 大きな変化

- **何が変わったのか:** OpenRouterのエージェントは、提案したツール呼び出しを、開発者のルールを適用する分類器に通してからアプリケーションに渡せる。標準のルール強制経路ではフラグ付き呼び出しの実行がスキップされ、理由が返るため、モデルは処理を続けられる。
- **なぜ重要なのか:** 開発者は、限定的に許可された作業の例外も含め、行動単位の制限を文章で表現できる。ただしMessages互換契約では、実行を決める最後の段階は依然としてクライアントが担う。フラグ付き判定を無視すれば、その呼び出しを実行できてしまう。
- **今後の注目点:** チームは選択したAPI出力モードにクライアントを合わせ、自分たちのトラフィックでルールを検証し、分類器のエラー時にどう動くかを決める必要がある。ベータの形式は変わり得る。OpenRouterは、分類器が問題のない呼び出しを止めたり、許容できない呼び出しを見逃したりする可能性を認めている。

## 提案から判定まで、呼び出しの流れを追う

OpenRouterによると、提案された各ツール呼び出しは、アプリケーションに転送される前に保留される。判定モデルは呼び出し、ルール、それまでの会話を受け取り、各ルールに一致するかを推定し、結果をまとめて `flagged` または `not_flagged` とする。フラグのない呼び出しは変更せずに渡す。強制モードでは、フラグ付き呼び出しに実行をスキップする印が付き、モデルに理由が返る。モデルはより狭い範囲の呼び出しを試したり、拒否の理由を説明したりできる。これは提案された行動に関する分類器の判断であり、後続のツールやエージェント全体が安全だという証拠ではない。

ルールの階層はそれぞれ別の問いに答える。`hard_deny` に一致すると、許可ルールやユーザーの依頼に関係なくブロックする。`soft_deny` への一致は、`allow` への一致、または会話の中でユーザーがその対象にその操作を明確に求めることで解除できる。`allow` ルールが単独で呼び出しをブロックすることはない。OpenRouterは、ユーザーが設定し、まだ解除していない境界に対する組み込みのソフト拒否も説明している。開発者は、信頼できるリポジトリやデプロイ先などの事実を `environment` に入力する。古い事実はルールの精度を下げ得る。名前付きのルールオブジェクトは、判定にIDと名前を表示する。任意のしきい値の標準値は拒否ルールが0.6、許可ルールが0.7だ。

文書にある[Responsesの例](https://openrouter.ai/docs/guides/features/plugins/armor#example)は、`bash` ツールに `git push` をハード拒否するルールを設定する。`output_mode: "custom_item"` を使うと、フラグ付きのpushは呼び出しと理由を含む `openrouter:armor_blocked` 項目に置き換わり、その後にモデルの応答が続く。この例は、サービスが何を返すと文書に書かれているかを示すもので、BIG CHANGEによるテストではない。

## ツール実行の前に出力契約を選ぶ

Chat CompletionsとResponsesでは、標準の `text` モードがブロックされた呼び出しを削除し、アシスタントのテキストに `<openrouter_armor_blocked>` マーカーを入れる。Responses APIは `custom_item` もサポートし、本来 `function_call` が現れる場所に、型が明示されたブロック項目を返す。文書は、その項目を次のResponses入力に変更せずにそのまま返し、そのための別の `function_call_output` を作らないよう求めている。`safeguard_results` は呼び出しIDごとに判定を記録する。

Messages APIでは、リクエストに `safeguards` が含まれる場合の標準動作が大きく異なる。`claude_code_compatibility` はフラグ付きの `tool_use` を `content[]` に残し、その `flagged` 結果を `safeguard_results` に追加する。**アプリケーションは結果を読み、その呼び出しの実行を拒否しなければならない。** OpenRouterは、判定を無視するMessagesクライアントはフラグ付きのツール使用を実行してしまうと明確に警告している。クライアントを制御できない開発者は、Messagesで `output_mode: "text"` を指定し、OpenRouter側に呼び出しを差し止めさせられる。APIが表現できない出力モードを要求すると400が返る。

OpenRouterのOriメタハーネスを通じたClaude Codeの自動モードは、Armorプラグインの追加エントリーなしでMessages契約を使う。文書によると、Claude Codeはフラグ付き呼び出しを拒否し、会話記録にエラー結果を書き込み、モデルを続行させる。また、独自の分類器に対応するAnthropicエンドポイントでは判定をそのまま渡せ、それ以外のエンドポイントではArmorが評価するという。これは文書化された統合動作であり、すべてのサードパーティークライアントが正しく実装しているという主張ではない。

## 範囲を絞ったルール集を設定して確認する

独自エージェント向けに、[Armorガイド](https://openrouter.ai/docs/guides/features/plugins/armor#example)は `armor` エントリーを `plugins` に置き、バージョン付きの `classifier_context`(`v: 1`)、`auto_mode` ルール、任意の環境情報を含めるとしている。まずルールが認識すべき行動と保護対象のリソースを決める。そのうえで、ユーザーが同意しても維持すべき禁止にはハード拒否を、明確な同意や名前付きの許可で正当に解除できる場合にはソフト拒否を選ぶ。文書は、コマンドの一つの書き方ではなく行動を説明し、環境情報を最新に保つよう勧めている。

標準の `enforce` モードは判定に従って動作する。`audit` は同じ判定を報告する一方、フラグ付きも含むすべての呼び出しを渡す。実際のトラフィックを確認し、強制前にルールを調整する方法であり、保護モードではない。監査モードは `claude_code_compatibility` と併用できない。どちらのモードでも `safeguard_results` を読む。`not_flagged` は許可、`flagged` は一致したルール、`unavailable` は評価失敗、`skipped` は未評価のプロバイダーネイティブツールを意味する。ストリーミングでは判定オブジェクトは応答の最後に到着するため、Messagesを使うクライアントはツール使用を実行する前にそれを待つ必要がある。

OpenRouterは、分類器のタイムアウト、エラー、大きすぎるリクエストを扱えない場合の標準値を `on_error: "block"` としている。`on_error: "log"` は呼び出しを渡す。Claude Code互換モードでは、`unavailable` の呼び出しが判定を表示したまま渡される。プロバイダーネイティブのサーバーツールは標準では評価をスキップするが、`evaluate_native_tools` でネイティブ経路から外して評価させられる。これらの設定と実際のツール経路をチームの統合確認に含めるべきであり、Armorのエントリーだけで全ツールが評価されたとはいえない。

## ベータの費用、速度、適用範囲の限界

OpenRouterによると、Claude Code互換ルール集を読み込んだ条件で、評価による追加時間は**中央値279ミリ秒、90パーセンタイル334ミリ秒**だった。これは明示された条件でのベンダー報告値であり、特定のエージェントやあらゆるルール集のベンチマークではない。各呼び出しは、渡されるかブロックされる前に一度評価される。ベータ期間中は評価の課金はなく、OpenRouterは一般提供前に価格を発表するとしている。文書は将来の料金を確定していない。

判定モデルは文章のルールを文章の引数と照合するため、誤検知や見逃しを生む可能性がある。文書は、実トラフィックの監査判定を使い、ルールごとのしきい値を調整するよう勧める。Armor評価は、HIPAA、Zero Data Retention、データ地域の制限があるリクエストにはまだ対応していない。こうした条件でプラグインを有効にしたリクエストは403になる。一方、Claude Codeリクエストは呼び出しを `unavailable` として渡し、Claude Codeはローカルの自動モード評価に戻る。ベータの注意事項には、設定フィールド、`safeguard_results`、`openrouter:armor_blocked` 項目型の変更も含まれる。

Armorはモデルからアプリケーションへの受け渡し時に、提案された呼び出しを検査する。したがって、その仕組みは[MicrosoftのMXCコマンド封じ込め](https://bigchange.ai/blog/mxc-agent-command-containment-guide)や[NVIDIAのOpenShellとSentryによるランタイム制御](https://bigchange.ai/blog/nvidia-open-agent-safety-platform-agent-controls)とは異なる。後者はワークロードまたはそのアクセスを囲む形で制約を適用する。Armorでまず決めるべき実装上の点は、選んだ応答形式がフラグ付き呼び出しを差し止めるのか、クライアントに停止を求めるのかだ。

## 出典と参考資料

- [OpenRouter Armor文書](https://openrouter.ai/docs/guides/features/plugins/armor)、2026年10月17日閲覧。ベータの状態、分類器の手順、ルールの優先順位、API応答契約、エラー時の動作、プライバシー条件の除外、報告された遅延、ベータの課金に関する一次資料。これらはOpenRouterが文書で述べる内容であり、BIG CHANGEはプラグインを実行していない。
- [Microsoft MXCに関するBIG CHANGEの記事](https://bigchange.ai/blog/mxc-agent-command-containment-guide)は、エージェントが生成したコマンドをポリシーに基づいて封じ込める仕組みを説明する。別の制約適用層であり、Armorの初期段階ではない。
- [NVIDIA OpenShellとSentryに関するBIG CHANGEの記事](https://bigchange.ai/blog/nvidia-open-agent-safety-platform-agent-controls)は、ソフトウェアのアクセス制御と任意のハードウェア監視設計を説明する。関連する背景であり、このOpenRouter機能の直接の続報ではない。

## Sources

- [OpenRouter Armor文書](https://openrouter.ai/docs/guides/features/plugins/armor) — 2026年10月17日に確認した製品の一次文書。ベータの状態、分類器とルールの動作、API応答の形、エラー、制限される条件、報告された遅延、ベータ課金を説明する。ベンダーの主張であり、独立したテストではない。
- [BIG CHANGE:エージェント生成コマンドにMXCポリシーを設定する方法](https://bigchange.ai/blog/mxc-agent-command-containment-guide) — 別のコマンド封じ込め機構を扱った過去の記事。記事の関係を示す背景としてのみ使用。
- [BIG CHANGE:NVIDIAのエージェント安全プラットフォーム](https://bigchange.ai/blog/nvidia-open-agent-safety-platform-agent-controls) — 別のランタイムアクセス制御と任意の監視設計を扱った過去の記事。記事の関係を示す背景としてのみ使用。