SafeAgents: 코딩 에이전트의 도구 호출을 실행 전 검사하는 오픈소스 프록시
SafeAgents: an open-source proxy that checks every tool call your coding agent makes before it runs
핵심 요약
코딩 에이전트와 모델 서버 사이에서 도구 호출을 실시간으로 검사하여 보안을 강화하는 로컬 프록시 도구입니다.
- 로컬 보안 프록시 — 에이전트와 모델 서버 사이에서 도구 호출을 가로채 실행 전 검사함
- 다중 검사 단계 — 로컬 호스트 확인, atif-scan을 통한 결정론적 탐지, 선택적 판단 모델 활용
- 보상 해킹 방지 — RL 및 평가 과정에서 모델의 부정행위를 기록하거나 차단함
- 폭넓은 호환성 — OpenAI 및 Anthropic API를 지원하며 주요 코딩 에이전트와 연동 가능
SafeAgents는 코딩 에이전트와 모델 서버 사이에 끼어드는 작은 로컬 프록시야. 모델이 응답할 때마다 하니스(harness)가 받기 전에 도구 호출을 싹 다 검사해. 여기서 걸리면 짧은 안내 문구로 바꿔치기해서, 하니스는 그냥 일반 텍스트만 받고 아무것도 실행하지 못하게 막아버리는 거지.
에이전트의 베이스 URL을 모델 서버가 아니라 이 프록시로 설정하면 돼. 모든 검사는 네 컴퓨터에서 로컬로 돌아가. 프록시는 네가 원래 쓰던 모델 서버로 트래픽을 전달해 줄 뿐이고, 네 프롬프트나 코드, 도구 호출을 다른 데로 빼돌리지 않아. (물론 옵션으로 설정한 저지(judge) 모델을 원격 서버로 돌리면 얘기가 다르겠지만.) 각 도구 호출은 최대 세 단계의 검사를 거쳐:
-
요청만 있으면 되는 로컬 검사 두 가지: 하니스가 선언한 도구인지, 그리고 대화 내용에 한 번도 등장한 적 없는 호스트로 호출을 시도하는지 확인해. 모델이 이전에 했던 말은 출처로 안 치니까, 모델이 지 혼자 지어낸 URL은 바로 걸려.
-
u/evalstate가 만든 atif-scan인데, 이건 대기 중인 호출에 대해 약 110개의 결정론적 탐지기를 프로세스 내부에서 돌려. 모델 호출이나 네트워크 통신 없이 바로 실행되니까 빠르지. 샌드박스 사이드 채널, 프록시 및 네트워크 우회, 네임스페이스 탈출, 리워드 해킹 같은 걸 잡아내. 예를 들면 클라우드 메타데이터 엔드포인트로
curl을 날리거나,curl --noproxy로~/.netrc를 어딘가로 전송하거나,/proc/1/environ을 읽으려는 시도 같은 것들이지. -
선택 사항으로, 좀 애매한 건 저지 모델이 판단하게 할 수 있어. llama.cpp를 써서 네 컴퓨터에서 돌아가는 작은 모델을 포함해, OpenAI 호환 서버라면 뭐든 다 돼. 그러니까 이 단계도 로컬에서 해결 가능해. JSON 형식으로 허용(allow)할지 차단(block)할지 답을 주거든. 이 모델은 에이전트의 추론 과정이나 도구 출력값은 못 보고, 오직 사용자 요청이랑 도구 호출, 그리고 탐지 결과만 볼 수 있어. 차단은 할 수 있어도 허용으로 바꾸는 건 불가능해.
RL이랑 평가에서 리워드 해킹 잡아내기
이 탐지기들은 모델이 문제를 푸는 대신 리워드 점수만 따먹으려고 수작 부리는 도구 호출도 다 잡아내. 지가 직접 리워드 파일을 수정하거나, 검증용 테스트 코드를 고치거나, pytest를 패치해서 무조건 통과하게 만드는 짓들 말이야. SafeAgents는 그냥 OpenAI 호환 서버 앞단에 붙는 프록시니까, 롤아웃이나 평가 실행할 때 쓰는 추론 서버 앞에 그대로 갖다 붙이면 돼. --log-only 모드로 돌리면 궤적을 바꾸지 않고도 이런 시도들을 다 기록하니까, 모델이 얼마나 자주 꼼수를 쓰는지 측정할 수 있어. 차단 모드에서는 호출 자체가 안내 문구로 대체되니까 아예 실행조차 안 되고.
몇 가지 실무적인 팁:
