주요 컨텐츠로 이동
제품

Omnigent의 컨텍스트 정책: 세션 상태를 활용한 AI 에이전트의 효과적인 관리

Omnigent가 강력한 보안 및 비용 제어를 지원하는 방법

작성자: Matei Zaharia, David Nasi, 샹루이 멍, Kecheng Cao , Tomu Hirata

• Omnigent는 AI 에이전트를 위한 컨텍스트 정책을 도입합니다. 이 정책은 에이전트 세션이 지금까지 수행한 작업을 추적하여 다음 작업을 진행할지 여부를 평가할 수 있습니다.
• Omnigent는 메타 하네스로서, Claude Code 및 Codex와 같은 코딩 에이전트를 포함하여 자신이 래핑하는 모든 에이전트에 이러한 정책을 적용할 수 있도록 지원합니다.
• 컨텍스트 정책을 사용하면 기존 에이전트 하네스에서 제공하는 것보다 더 강력한 정책을 정의할 수 있습니다. 예를 들어, 세션당 지출 한도를 설정하거나 리스크가 누적됨에 따라 더욱 엄격해지는 가드레일을 구성할 수 있습니다.

최근 저희는 AI 에이전트를 위한 오픈 소스 메타 하네스인 Omnigent를 출시했습니다. 이를 통해 Claude Code, Codex, 커스텀 에이전트 등 이미 선호하는 에이전트 하네스를 계속 사용하면서 협업, 구성 및 정책을 위한 공유 레이어를 추가할 수 있습니다.

보안 및 비용 관리를 위해 Omnigent는 강력한 새 도구인 컨텍스트 기반 정책(contextual policies)을 도입합니다. 오늘날의 에이전트 프레임워크는 에이전트가 수행할 수 있는 작업을 제한하는 간단한 제어 기능(예: 다양한 도구 호출에 대해 허용, 거부 또는 사용자에게 확인 요청하는 규칙)만 제공합니다. 하지만 이로 인해 보안과 사용자 편의성을 모두 만족하는 정책을 만들기가 어렵습니다. 반면, Omnigent의 컨텍스트 기반 정책은 지금까지 세션에서 발생한 일(예: 에이전트가 읽은 내용 또는 지금까지 지출한 비용)을 기억하고, 해당 상태(state)를 사용하여 다음 작업을 진행할지 여부를 결정할 수 있습니다. 이를 통해 세션의 위험 수준을 동적으로 추적하는 것부터 최소 권한 보안 모델 구현, 지출 관리를 위해 개별 작업에 대한 예산을 설정하는 것에 이르기까지, 사용자에게 더 안전하고 편리한 다양하고 풍부한 정책을 적용할 수 있습니다.

컨텍스트가 있을 때 에이전트 제어가 더 효과적인 이유

AI 에이전트는 기업에 새로운 유형의 위험을 초래합니다. 예를 들어, 에이전트는 신뢰할 수 없는 콘텐츠에 의해 프롬프트 주입(prompt-injected)되어 해로운 작업을 수행하도록 유도될 수 있으므로, 동일한 에이전트가 신뢰할 수 없는 콘텐츠를 읽고, 민감한 데이터에 액세스하며, 외부 세계와 통신하는 것을 방지하는 것이 바람직합니다(이는 Simon Willison의 "치명적인 삼중주(Lethal Trifecta)" 및 Meta의 "에이전트 2인 규칙(Agents Rule of Two)"으로 널리 알려져 있습니다). 어떤 작업이 "안전한지" 여부는 부분적으로 이전에 발생한 일에 따라 달라집니다. 코딩 에이전트가 엔지니어를 위해 기능 작업을 방금 마친 후 GitHub에 푸시하는 것은 일반적으로 괜찮지만, 에이전트가 이전에 주입 공격이 포함되어 있을 수 있는 신뢰할 수 없는 웹 페이지를 다운로드한 적이 있다면 동일한 GitHub 푸시라도 위험할 수 있습니다.

아쉽게도 오늘날 대부분의 에이전트 소프트웨어는 Git 푸시나 웹 검색 허용 여부와 같이 개별 작업에 대한 간단한 허용 목록(allow-list) 제어 또는 가드레일만 제공합니다. 주입 공격을 방지하려면 이러한 작업 중 하나 이상을 완전히 차단해야 하지만, 이는 무해한 많은 사용 사례에 제약이 될 수 있습니다. 각 작업마다 사용자에게 승인을 요청하는 것 역시 사용자가 승인 요청에 피로감을 느끼기 때문에 효과적이지 않습니다.

다른 상황에서도 마찬가지입니다. 영업 담당자의 에이전트가 고객에게 이메일을 한 통 보내는 것은 괜찮을 수 있지만, 수천 통의 이메일을 보내는 것은 보안 침해나 버그를 나타낼 수 있습니다. 에이전트가 자신이 생성한 문서를 편집하는 것은 괜찮지만, 동일한 에이전트가 수천 개의 내부 문서를 편집하는 것은 면밀한 검토가 필요할 수 있습니다. 실제로 인간 사용자를 위한 많은 보안 도구 역시 현재 작업뿐만 아니라 사용자의 이력을 고려합니다(이를 컨텍스트 기반 보안이라고 합니다).

컨텍스트 기반 정책의 도입

Omnigent에서 정책(policy)은 기존의 에이전트 가드레일과 유사하게 에이전트가 수행하는 이벤트(예: 도구 호출 및 응답, LLM에 대한 입력 및 출력)를 모니터링하고 메시지를 허용, 거부, 변환할지 또는 사용자에게 권한을 요청할지 결정할 수 있습니다. 하지만 정책은 해당 정책에만 표시되는 임의의 변수인 세션에 대한 상태(state)를 업데이트할 수도 있습니다. 여기에는 에이전트가 특정 도구를 사용한 횟수, 읽은 문서 등을 추적하는 것이 포함될 수 있습니다. Omnigent 서버는 각 정책 및 세션에 대한 상태를 기억하고, 다음 번에 핸들러를 호출할 때 이를 정책 핸들러에 전달합니다. 컨텍스트 기반 정책을 작성하려면 이전 상태와 에이전트가 수행하려는 새 이벤트를 입력받아 상태 업데이트와 결정을 반환하는 함수를 작성하기만 하면 됩니다. Omnigent에는 이미 여러 유용한 정책이 기본적으로 포함되어 있습니다.

또한 Omnigent는 메타 하네스이므로 어떤 하네스를 사용하는 에이전트에도 동일한 방식으로 컨텍스트 기반 정책을 적용할 수 있습니다. Omnigent는 Claude Code, Codex, Antigravity, Pi, OpenCode, Hermes와 같이 널리 사용되는 코딩 에이전트뿐만 아니라 OpenAI Agents SDK 및 Claude Agents SDK와 같은 프레임워크의 커스텀 에이전트도 지원합니다. Omnigent를 통해 에이전트를 실행하기만 하면, Omnigent 서버가 에이전트의 도구 호출을 가로채서 정책을 적용합니다.

예시 사용 사례

현재 Omnigent와 함께 제공되는 세 가지 내장 예시 정책은 다음과 같습니다. 각 정책은 에이전트가 지금까지 읽은 콘텐츠, 누적된 세션 위험 점수 또는 현재 세션의 총 비용 등 서로 다른 종류의 세션 상태에 의존합니다.

1. Google Drive 정책: 에이전트의 액세스 범위를 적절한 문서로 제한하기

Google Drive 정책은 에이전트가 Docs, Sheets, Slides에서 읽고 수정할 수 있는 항목을 제어합니다. 기본적으로 쓰기 작업은 에이전트가 이번 세션 동안 생성한 문서로 제한됩니다. 따라서 에이전트는 새 문서를 만들어 자유롭게 편집할 수 있지만, 원래 접근해서는 안 되는 기존 파일을 몰래 수정할 수는 없습니다. 이러한 동작은 간단한 허용 목록으로는 구현할 수 없습니다. "문서 쓰기" 도구를 완전히 허용하거나 거부하려는 것이 아니라, 에이전트가 동일한 세션에서 생성한 문서에 대해서만 허용하기를 원하기 때문입니다.

이 정책에서 컨텍스트 기반 동작의 두 번째 예로, 일련의 문서를 기밀로 표시할 수 있습니다. 에이전트가 그중 하나를 여는 순간 정책이 강화되어 쓰기 작업이 해당 문서 세트로 제한됩니다. 기밀 자료를 추가하면 보안이 덜한 파일로 해당 콘텐츠가 유출될 수 있으므로, 에이전트가 1분 전에 생성한 문서조차도 접근 금지 대상이 됩니다. 기존 보안 관점에서 이는 "no write-down(하향 쓰기 금지)" 규칙을 가진 Bell-LaPadula 모델을 구현한 것입니다.

그림 1: Google Drive 정책 구성. confidential_files는 어떤 문서가 기밀인지 선언합니다.


그림 2: 기본적으로 쓰기 작업은 에이전트가 이번 세션에서 생성한 문서로 제한됩니다.


그림 3: 기밀 문서를 읽은 후에는 하향 쓰기 유출을 방지하기 위해 동일한 쓰기 작업이 거부됩니다.


2. 위험 점수 정책: 에이전트가 민감한 자료를 다룰 때 더 신중하게 대처하기

위험 점수 산정은 보안 팀이 사람의 액세스를 관리하기 위해 흔히 사용하는 방식입니다. Omnigent에서 위험 점수 정책은 현재 세션에 대한 실시간 점수(에이전트가 작업하는 동안 누적된 위험 수준을 추적하는 단일 숫자)를 유지합니다. 사용자는 어떤 작업이 점수를 얼마나 올릴지 구성할 수 있습니다. 예를 들어 일상적인 도구 호출은 1~2점을 추가하는 반면, 매우 기밀로 표시한 문서를 읽으면 훨씬 더 많은 점수가 추가됩니다. 점수가 낮게 유지되는 한 에이전트는 중단 없이 작동합니다. 점수가 임계값을 넘으면 이메일 전송이나 파일 공유와 같은 작업은 ALLOW 대신 ASK를 반환하고 사용자에게 승인을 요청합니다. 따라서 세션 초반에는 바로 전송되었을 이메일이라도, 에이전트가 민감한 자료를 충분히 다루어 점수가 올라간 후에는 나중에 사람의 승인이 필요할 수 있습니다.

그림 4: 세션 범위의 위험 점수 정책 구성


그림 5: 웹 검색으로 인해 세션의 위험 점수가 임계값까지 상승하면, 이메일 전송이 더 이상 자동으로 수행되지 않고 사람의 승인이 필요합니다.


3. 비용 정책: 지출을 통제 하에 유지하기

예산 정책은 세션이 지금까지 모델 호출에 지출한 비용을 추적합니다. 유연한 임계값(soft threshold)을 넘으면 계속 진행할지 묻기 위해 일시 중지됩니다. 지출이 엄격한 한도(hard cap)에 도달하면, 에이전트가 더 저렴한 모델로 전환할 때까지 정책이 비용이 많이 드는 모델에 대한 추가 호출을 차단하여 세션이 중단되지 않고 계속 진행되도록 합니다. 동일한 개념이 단일 세션 이상으로 확장될 수 있습니다. 플랫폼 팀은 세션별 한도 위에 사용자별 일일 한도를 누적하여 적용할 수 있으므로, 누구도 여러 개별 대화에서 많은 비용을 발생시킬 수 없습니다. 두 경우 모두 핵심 맥락은 누적 지출입니다. 정책은 단일 모델 호출을 판단하는 것이 아니라, 누적 합계를 모니터링하고 세션이나 사용자가 너무 많은 비용을 지출했을 때 개입합니다.

그림 6: 세션 범위의 예산 정책 구성하기


그림 7: 세션 지출이 경고 임계값을 초과하면 정책이 일시 중지되고 사용자에게 계속 진행할지 승인을 요청합니다.


4. 의도 기반 권한 부여: 목적에 따른 권한 제한

의도 기반 권한 부여(Intent-based authorization)는 사용자가 에이전트에게 입력한 초기 프롬프트를 바탕으로 에이전트의 권한을 설정하므로, 프롬프트 주입(prompt injection) 공격을 받은 에이전트라 할지라도 대부분의 도구를 사용해 피해를 입히는 것을 방지할 수 있습니다. 예를 들어, 에이전트에게 Google Slides 프레젠테이션을 업데이트하도록 요청하여 세션을 시작하면, 정책은 에이전트가 해당 프레젠테이션을 읽고 쓸 수 있도록 허용하지만, 에이전트가 갑자기 GitHub을 사용하려고 시도하면 액세스를 차단합니다. 이 정책은 세션 시작 시 사용자가 실제로 요청한 내용을 상태(state)로 기억한 다음, 모든 도구 호출을 원래의 목표와 대조하여 확인하며 최소 권한의 원칙(Principle of Least Privilege)을 적용합니다. 이는 컨텍스트 상태를 통해 구현되는 매우 간단하면서도 강력한 정책입니다. 기본적으로 에이전트에 여러 도구를 구성해 두더라도, 각 세션에서 자동으로 권한이 제한됩니다. 한 세션에서는 문제없는 도구 호출이라도, 에이전트에게 요청한 작업에 따라 다른 세션에서는 사용자의 승인이 필요할 수 있습니다.

그림 8: IBA가 원래 요청과 무관한 셸 명령을 차단합니다.


요약

에이전트가 더 많은 실제 업무를 수행함에 따라, 에이전트를 어떻게 제어할 것인가가 핵심 과제가 됩니다. 에이전트는 악의적인 입력이나 단순한 버그로 인해 피해를 입히기 시작할 수 있으며, 개별 작업을 검사하는 단순한 허용 목록(allow-list) 정책은 에이전트의 유용성과 안전성을 모두 확보하기에 충분히 유연하지 않습니다. 컨텍스트 정책은 세션 내의 상태를 동적으로 추적하고 에이전트에 충분한 위험이 누적되었을 때만 작업을 차단함으로써, 더 유용하면서도 안전한 에이전트를 가능하게 합니다. 또한 사용자별/일별 기준뿐만 아니라 세션별 수준에서 예산을 관리할 수 있는 강력하고 간단한 도구를 제공합니다. Omnigent는 오픈 소스이며 가장 인기 있는 코딩 에이전트 및 에이전트 프레임워크와 통합되므로, 기존 에이전트에 바로 적용할 수 있습니다.

직접 사용해 보기

Omnigent는 현재 알파 버전의 오픈 소스로 제공됩니다.

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

최신 게시물을 이메일로 받아보세요

블로그를 구독하고 최신 게시물을 이메일로 받아보세요.