AIコーディングエージェントに「細かい確認はいいから、まとめて進めて」と頼みたくなることがある。だが自動実行モードにすると、頼んでもいないgit pushやファイル削除を無断で実行されないか不安になる。結局、一つひとつの操作を承認し続けることになる。
OpenRouterは、複数のAIモデルを1つのAPIで使えるサービスだ。このOpenRouterが2026年10月15日、この悩みに対する新機能「Armor」を公開した(公式ドキュメント)。AIが実行しようとする操作を、コマンドの文字列ではなく行為の意味で判定する。ユーザーが頼んだ操作は通しながら、頼んでいない危険な操作だけを自動で止める仕組みだ。何を、どうやって見分けているのだろうか。
何を守る機能か
公式ドキュメントは、Armorが守る対象をこう説明する。シェルコマンドを実行できるコーディングエージェントは、mainブランチへの誤ったpush、ディレクトリの削除、.envファイルの外部送信も行えてしまう。多くのハーネス(エージェントを動かす実行環境)は、コマンドごとに人の承認を求めることでこれに対処してきた。
承認を求める方式は安全だが、確認作業そのものが「自動化したい」という目的を損なう。Armorは、この一つひとつの承認を減らしながら、危険な操作だけは自動で止めることを狙っている。対応するのはChat Completions・Responses・Messagesの各APIと、OpenRouterのエージェント実行ツール「Ori」経由のClaude Codeだ。この網は、何を手がかりに危険だと判定しているのだろうか。
判定は文字列ではなく行為を見る
判定は次の順で進む(公式ドキュメント)。
- AIがツール呼び出し(コマンド実行やファイル操作)を行おうとすると、OpenRouterはそれをアプリケーションへ即座には渡さない
- 呼び出しの内容、利用者が設定したルール、それまでの会話を、別の判定モデルに送る
- 判定モデルは、各ルールに一致する確率を返す
- Armorはそれらを統合し、ブロックするか許可するかを決める
ここで判定材料になっているのは、コマンドの文字列一致ではない。「それまでの会話」を含めた、行為の意味だ。たとえば「このフォルダの使っていないファイルを整理して」と頼んだ結果、エージェントが.envファイルまで消そうとしたとする。コマンド名だけを機械的に禁止するルールでは、本当に必要な削除まで一律に止めてしまいかねない。Armorは会話の文脈を踏まえ、「ユーザーが本当に求めた操作か」まで踏み込んで判定する設計になっている。
ブロックされた場合、呼び出しは実行されない。該当するルールの名前と、「同じ引数で再試行しないこと」を示す情報がAIに伝えられる。AIは作業を止めるのではなく、別の方法を試すか、ユーザーに状況を説明して会話を続けられる。
この「確率で判定する」という方式は、もう一つ疑問を生む。ユーザー自身が「それでも消して」と明確に頼んだ場合、判定はどちらを優先するのだろうか。
一声でも解除できないルールがある
Armorのルールは3つの階層に分かれる(公式ドキュメント)。
| ルールの種類 | 想定する行為 | ユーザーが会話内で明示的に頼んだ場合 | allowルールに一致した場合 |
|---|---|---|---|
hard_deny | 絶対に起きてはいけない行為 | ブロックされたまま(解除されない) | 解除されない |
soft_deny | 通常は不適切だが、正当に求められることもある行為 | 許可される | 許可される |
allow | soft_denyの例外を定義する行為 | (単独ではブロックしない) | - |
自分はここを読んで、「ユーザーが明示的に頼めば、AIはそれに従うのが自然ではないか」と予想していた。実際、soft_denyはその予想どおりだ。ユーザーが会話の中でその操作を明確に求めていれば通過する。ところがhard_denyは別枠だった。ユーザーがどれだけ強く頼んでも、allowルールに一致しても、判定は解除されない。認証情報の外部送信のような、取り返しのつかない行為を想定した区分だ。
この階層のおかげで、「普段は止めたいが今回は本当に必要」という操作は、ユーザーの一言でsoft_denyから通せる。一方で「本当に起きてはいけない」と決めた操作は、hard_denyに入れておけば、会話の流れに押し切られて実行されることがない。では、このルールを実際に手元のエージェントへ組み込むには、何をすればよいのだろうか。
任意のモデルで自動モードを試す
Oriで任意のモデルを使う
Claude Codeには、操作をいちいち確認しない自動実行モードがある。OpenRouterの「Ori」は、手持ちのエージェントCLI(Claude CodeやCodexなど)を動かすラッパーだ。OpenRouterの認証・モデルカタログ経由で、そのまま実行できる(Ori Harness公式ドキュメント)。
Oriを使うと、Claude Codeの自動モードを、Anthropic以外も含むOpenRouter提供の任意のモデルで動かせる(公式ドキュメント)。コマンドは次のとおりだ。
ori claude --model <モデル> -- --permission-mode auto
ルールを自分で書かなくても、use_cc_style_default_rulesをtrueにすれば、Claude Code向けに用意された既定のルールセットを組み込める。
監査モードで試してから切り替える
ルールをいきなり遮断に使うのは怖い、という場合には監査モードがある。"mode": "audit"を指定すると、判定は通常どおり行われるが、呼び出しは遮断されない。実際のトラフィックで判定結果を確認し、過剰にブロックする・見逃すルールをthreshold(一致とみなす確率のしきい値。既定はdeny系が0.6、allowが0.7)で調整してから、遮断するenforceモードへ切り替える運用を想定している。
導入前に確認しておく条件
今から試す場合、次の条件を踏まえておきたい。
- Armorは2026年10月時点でベータ版で、設定項目やレスポンスの形式は今後変わる可能性がある
- ベータ期間中の判定そのものに追加料金はかからない。正式提供(GA)前に料金が発表される予定だ
- 判定には処理時間が加わる。Claude Code互換のルールセットを使った場合、中央値約279ミリ秒、90パーセンタイルで約334ミリ秒という数値が公式に示されている
- HIPAAやZero Data Retention、データリージョンが制限されたリクエストでは、Armorを有効にするとエラーになる場合がある(Claude Code経由のリクエストはこの場合も拒否されず、判定が素通りして手元の承認フローに委ねられる)
企業の規制対応環境でこの機能を使うなら、最後の制約が当てはまるかを確認したほうがよい。
まとめ
OpenRouterが2026年10月15日に公開した「Armor」は、AIコーディングエージェントのツール呼び出しを、コマンドの文字列ではなく会話の文脈を踏まえた意味で判定し、危険な操作だけを自動で止める機能だ。ルールはhard_deny(ユーザーが頼んでも解除されない)・soft_deny(ユーザーの明示的な依頼で解除される)・allow(例外)の3階層に分かれる。これにより、「普段は止めたいが今回は必要な操作」と「絶対に起きてはいけない操作」を作り分けられる。
Claude Codeを使っている読者は、Oriのori claude --model <モデル> -- --permission-mode autoを使える。任意のモデルの自動実行モードに、この安全網をかけて試せる。ベータ版で仕様が変わりうる点と、処理時間が数百ミリ秒単位で加わる点は、導入前に踏まえておく条件になる。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…