OpenRouter의 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 예제는 bash 도구에 git push 작업을 엄격히 거부하는 규칙을 부여한다. output_mode: "custom_item" 설정에서는 표시된 푸시를 호출과 사유가 담긴 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 가이드는 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 명령 격리 및 NVIDIA의 OpenShell·Sentry 런타임 제어와는 다른 메커니즘이다. 후자의 메커니즘들은 워크로드 또는 그 접근을 둘러싸고 제약을 적용한다. Armor에서 당장 결정할 구현 사항은 선택한 응답 형식이 표시된 호출을 보류하는지, 아니면 클라이언트가 이를 중단해야 하는지다.

출처 및 추가 읽을거리

  • OpenRouter Armor 문서, 2026년 10월 17일 확인. 베타 상태, 분류기 절차, 규칙 우선순위, API 응답 규약, 오류 처리, 개인정보 보호 맥락에 따른 제외 사항, 보고된 지연 시간과 베타 과금에 관한 1차 출처다. 이는 OpenRouter가 문서에 밝힌 주장이다. BIG CHANGE는 플러그인을 실행하지 않았다.
  • Microsoft MXC에 관한 BIG CHANGE 기사는 에이전트가 생성한 명령을 정책에 따라 격리하는 방식을 설명한다. 별도의 제약 집행 계층이며 Armor의 이전 단계가 아니다.
  • NVIDIA OpenShell·Sentry에 관한 BIG CHANGE 기사는 소프트웨어 접근 제어와 선택적 하드웨어 모니터링 설계를 설명한다. 관련 배경이지 이 OpenRouter 기능의 직접적인 후속 관계는 아니다.