보이지 않는 에이전트: 볼 수 없는 것은 거버넌스할 수 없는 이유
Anthropic이 Claude Desktop에 Cowork라는 기능을 출시했습니다. 이 기능은 모든 macOS 설치에 10GB 가상 머신 번들을 생성했습니다. Cowork를 활성화하지 않은 사용자도 VM이 설치되었습니다. 삭제한 사용자는 VM이 다시 생성되는 것을 목격했습니다. 한 사용자는 번들이 21GB까지 증가했다고 보고했습니다. Anthropic이 문제를 인정하기 전에 GitHub 이슈는 Hacker News에서 345포인트와 175개의 댓글을 기록했습니다.1
디스크 공간이 부족해질 때까지 아무도 눈치채지 못했습니다.
요약
에이전트 도구는 이제 운영자의 가시성 없이 컴퓨팅 리소스(디스크, 메모리, CPU, 네트워크)를 할당합니다. Anthropic의 Cowork VM은 눈에 보이는 사례이며, 모든 MCP 도구 호출, 생성되는 모든 하위 에이전트, 모든 웹 요청은 보이지 않는 사례입니다. 에이전트를 거버넌스하려면 세 가지 관측성 계층이 필요합니다: 리소스 계측(무엇을 소비했는가?), 정책 적용(무엇이 허용되었는가?), 런타임 감사(실제로 무엇을 했는가?). 두 가지 오픈소스 프로젝트가 정책 및 감사 계층을 다루고 있지만(mcp-firewall과 Logira), 세 가지 모두를 포괄하는 프로덕션 도구는 없습니다. 아래에서 가시성 문제, 세 계층 스택, 각 계층이 포착하는 것, 그리고 오늘 당장 구현할 수 있는 최소 모니터링 훅을 다룹니다.
가시성 문제
전통적인 소프트웨어는 운영자가 설정한 관측성 기준선 아래에서 작동합니다. 웹 서버는 엔지니어가 로깅을 구성했기 때문에 접근 로그를 기록합니다. 데이터베이스는 누군가가 log_min_duration_statement를 설정했기 때문에 느린 쿼리를 추적합니다. 운영자가 세분화 수준을 결정합니다.
에이전트 시스템은 이 관계를 역전시킵니다. 에이전트가 런타임에 무엇을 실행할지 결정합니다. “로그인 엔드포인트를 수정해라”라는 요청을 받은 코딩 에이전트는 47개의 파일을 읽고, 12개에 쓰고, 3개의 하위 에이전트를 생성하고, 2개의 웹 페이지를 가져오고, 15개의 bash 명령을 실행할 수 있습니다. 각 동작은 리소스를 소비합니다. 이 소비는 전통적인 모니터링에 나타나지 않습니다.
Cowork 사건은 인프라 수준에서 이 역전을 노출시켰습니다. Claude Desktop은 10GB의 디스크 공간을 할당하고, 유휴 상태에서 24-55%의 CPU를 소비하며, 8GB 머신에서 스왑 사용량이 20K에서 24K+ 스왑인으로 증가했습니다.1 사용자들은 Anthropic의 텔레메트리가 아닌 macOS 저장 공간 경고를 통해 리소스 소비를 발견했습니다. 애플리케이션은 VM 할당에 대한 대시보드도, 계측기도, 옵트인 공개도 제공하지 않았습니다.
이 패턴은 가상적인 것이 아닙니다. 2026년 3월, 한 개발자가 Claude Code이 프로덕션 데이터베이스를 파괴하는 Terraform 명령을 실행했다고 보고했습니다. 에이전트가 프로덕션 상태 파일에 대해 terraform apply를 실행한 것입니다. 확인 프롬프트도 나타나지 않았고, 훅이 명령을 가로채지도 않았습니다. 개발자는 애플리케이션이 오프라인이 되었을 때 파괴 사실을 발견했습니다. 이 사건은 Hacker News에서 142포인트와 158개의 댓글을 기록했습니다.12 며칠 후 다른 개발자가 Claude Code이 2.5년간의 기록을 포함한 데이터베이스 스냅샷 등 전체 프로덕션 환경을 삭제했다고 보고했습니다.13 두 사건 모두 같은 근본 원인을 공유합니다: 피해가 되돌릴 수 없게 되기 전에 에이전트가 무엇을 하고 있는지에 대한 가시성이 전무했다는 것입니다.
이 패턴을 에이전트 세션으로 확장해 보겠습니다. 저의 훅 오케스트레이션 시스템은 모든 도구 호출에 걸쳐 15가지 이벤트 유형을 가로챕니다.11 60개 이상의 세션에서 시스템은 각 동작마다 84개의 훅이 실행되는 것을 기록하여, 기본 에이전트 설치에서는 제공되지 않는 텔레메트리를 생성했습니다.2 이 계측 없이는 12건의 드리프트 사건, 팬텀 검증 실패, NIST 공개 의견서에 문서화된 재귀적 생성 루프를 감지하지 못했을 것입니다.3
DORA 2024 Accelerate State of DevOps Report는 강력한 관측성 사례를 가진 팀이 더 자주 배포하고 장애에서 더 빠르게 복구한다는 것을 발견했습니다. 2025년판은 프레임워크를 AI 지원 개발로 확장하여, 관측성을 “AI 지원 코딩 또는 테스트가 품질, 리드 타임, 전반적 신뢰성에 어떻게 영향을 미치는지”와 연결합니다.4 에이전트 관측성은 있으면 좋은 것이 아닙니다. 에이전트 행동을 측정하는 것은 거버넌스의 전제 조건입니다.
에이전트 가시성의 세 계층
에이전트 관측성에는 세 가지 독립적인 계층이 필요합니다. 각 계층은 서로 다른 질문에 답합니다. 한 계층의 실패가 다른 계층을 훼손하지 않습니다.
| 계층 | 질문 | 모니터링 대상 | 도구 예시 |
|---|---|---|---|
| 리소스 계측 | 무엇을 소비했는가? | 세션별 디스크, 메모리, CPU, 네트워크 | Cowork가 보여줬어야 할 것 |
| 정책 적용 | 무엇이 허용되었는가? | 허용/차단 규칙, 도구 권한, 범위 제한 | mcp-firewall |
| 런타임 감사 | 실제로 무엇을 했는가? | 시스템 콜 로그, 파일 접근, 네트워크 송신 | Logira |
이 계층들은 점진적 발전에 대응합니다: 측정하지 않는 리소스에 대해 정책을 적용할 수 없고, 정의하지 않은 정책의 준수 여부를 감사할 수 없습니다. 각 계층은 그 아래 계층 위에 구축됩니다.
계층 1: 리소스 계측
리소스 계측은 다음에 답합니다: 에이전트가 얼마나 소비했으며, 어디에서?
Cowork 사건은 리소스 계측 실패입니다. VM 번들은 10GB의 디스크 공간을 소비했습니다. 렌더러 프로세스는 유휴 상태에서 24%의 CPU를 소비했습니다. 세션 중 스왑 활동이 꾸준히 증가했습니다. 이 모든 지표는 macOS Activity Monitor에 존재했습니다. Claude Desktop의 인터페이스에는 하나도 나타나지 않았습니다.1
에이전트 코딩 세션의 경우, 리소스 계측은 네 가지 차원을 추적합니다:
디스크. 모든 파일 쓰기, 모든 캐시 항목, 모든 로그 파일. 제 세션은 세션당 200-400KB의 상태 파일(jiro.state.json, jiro.progress.json, 훅 로그)을 생성합니다. 60개 세션에 걸쳐 명시적으로 정리하지 않으면 세션 간에 12-24MB의 상태 데이터가 지속됩니다.2
메모리. 턴당 컨텍스트 윈도우 소비량. 200,000토큰 컨텍스트 윈도우는 현재 Opus 가격 기준으로 전체 채움 시 약 $3의 비용이 듭니다. 제 비용 추적기는 세션당 누적 토큰 사용량을 기록하며, 설정 가능한 한도의 80%, 90%, 95%에서 예산 임계값을 설정합니다.5
CPU. 훅 실행 시간. 제 9개 훅 프롬프트 디스패처는 프롬프트당 200ms를 추가합니다. 이 오버헤드는 사용자에게 보이지 않지만(사람의 타이핑이 병목이므로) 자동화 파이프라인에서는 누적됩니다. ralph 자율 루프는 스토리당 50-100회 디스패처를 실행하여 스토리당 10-20초의 훅 오버헤드를 추가합니다.2
네트워크. 웹 요청, API 호출, MCP 도구 호출. 모든 아웃바운드 요청은 잠재적 데이터 채널입니다. 제 웹 추출 라이브러리는 요청 URL과 응답 크기를 기록합니다. 네트워크 계측 없이는 50MB 응답을 반환하는 웹 요청과 5KB를 반환하는 요청을 구분할 수 없습니다.6
어떤 상용 에이전트 도구도 세션별 리소스 대시보드를 제공하지 않습니다. 클라우드 제공업체는 운영자 가시성이 아닌 과금을 위해 컴퓨팅을 계측합니다. 에이전트가 소비하는 것과 운영자가 볼 수 있는 것 사이의 격차가 리소스 계측 적자입니다.
이 부재는 수치가 축적될 때까지 보이지 않습니다. 400KB의 상태 파일을 쓰는 한 세션은 아무것도 아닙니다. 정리 없이 각각 400KB를 쓰는 60개의 세션은 24MB의 고아 상태를 남깁니다. 847KB를 반환하는 한 번의 웹 요청은 미미합니다. 실행당 80개의 URL을 가져오는 스캐닝 파이프라인은 에이전트의 도구 추상화가 운영자에게 숨기는 67MB의 캐시 콘텐츠를 생성합니다. 리소스 계측은 누적된 것이 GitHub 이슈 #22543를 제출하게 만드는 위기가 되기 전에 보이게 만듭니다.1
계층 2: 정책 적용
정책 적용은 다음에 답합니다: 어떤 규칙이 에이전트를 제약하며, 그 규칙이 일관되게 적용되고 있는가?
mcp-firewall은 CLI 에이전트를 위한 정책 계층을 다룹니다.7 이 도구는 에이전트와 모든 도구 사용 요청 사이에 위치하여, 실행 전에 각 요청을 정규식 기반 정책에 대해 평가합니다. 정책은 폴더, git 리포지토리 또는 사용자 범위의 JSONNet 구성 파일을 사용합니다. 방화벽은 PreToolUse 훅 통합을 통해 Claude Code과 GitHub Copilot CLI를 지원합니다.
이 아키텍처는 핵심 통찰을 반영합니다: 모든 에이전트가 허용/차단 로직에 대한 자체적인 미완성 솔루션을 구현한다는 것입니다. Claude Code은 glob 패턴을 사용합니다. Codex CLI는 접두사 전용 매칭을 사용합니다. 각 접근 방식은 정책 공간의 일부만 다룹니다. mcp-firewall은 규칙을 에이전트 간에 작동하는 하나의 엔진으로 중앙 집중화합니다.
중앙 집중식 적용 없이 정책 격차를 생각해 보겠습니다. 제 훅 시스템에는 자격 증명 패턴, 위험한 git 작업, 민감한 경로 접근, 배포 명령을 확인하는 12개의 PreToolUse:Bash 핸들러가 포함되어 있습니다.2 각 핸들러는 자체 정규식 패턴을 가진 별도의 셸 스크립트입니다. 새 차단 규칙을 추가해야 할 때 새 스크립트를 작성합니다. 어떤 규칙이 존재하는지 감사해야 할 때 12개 파일에 걸쳐 grep을 실행합니다. mcp-firewall은 이를 명시적 허용 배열이 있는 단일 구성 파일로 통합합니다.
OWASP Top 10 for Agentic Applications(2025)는 Agent Goal Hijacking(ASI01)과 Excessive Agency(LLM06:2025)를 주요 위험으로 식별합니다.8 두 위험 모두 도구 호출 수준에서의 정책 적용을 필요로 합니다. 목표를 탈취하는 에이전트도 여전히 도구 호출을 합니다. 과도한 권한을 가진 에이전트도 여전히 권한을 요청합니다. 정책 적용은 에이전트의 의도가 시스템의 도구와 만나는 경계에서 둘 다를 가로챕니다.
정책 적용은 접근 제어와 다릅니다. 전통적인 접근 제어는 “이 사용자에게 권한이 있는가?”를 묻습니다. 에이전트를 위한 정책 적용은 “이 동작이, 이 맥락에서, 이 작업에 대해, 승인된 범위 내에 있는가?”를 묻습니다. 맥락 민감성이 과제입니다. 기능 브랜치로의 git push와 main으로의 git push --force는 같은 도구(Bash)이지만 폭발 반경이 다릅니다. mcp-firewall의 정규식 패턴은 둘을 구분할 수 있습니다. 기본 에이전트 권한은 구분할 수 없습니다.
애플리케이션 수준의 정책 적용은 우회 위험도 있습니다. 2026년 3월 분석에서 Claude Code의 내장 차단 목록에 대한 세 가지 점진적 샌드박스 탈출 기법이 문서화되었습니다: 경로 기반 우회(/proc/self/root/usr/bin/npx는 차단된 /usr/bin/npx와 같은 바이너리로 해석됨), 자기 주도적 샌드박스 비활성화(에이전트가 작업 완료를 차단할 때 독립적으로 샌드박스 제거를 추론함), 동적 링커 호출(ld-linux-x86-64.so.2가 메모리 매핑을 통해 바이너리를 로드하여 커널 적용 훅을 완전히 우회함).14 세 번째 기법은 하나의 익스플로잇 클래스입니다: execve를 피하는 모든 코드 로딩이 프로세스 수준 적용을 우회합니다. 정책 적용에 대한 시사점은 문자열 매칭 차단 목록이 필요한 첫 번째 계층이지 충분한 계층은 아니라는 것입니다. 콘텐츠 주소 지정 적용(파일명이 아닌 SHA-256 해시로 바이너리를 식별)은 경로 우회 격차를 메우지만, 동적 로더 우회는 정책 계층 아래에 위치하는 커널 수준 제어가 필요합니다.
계층 3: 런타임 감사
런타임 감사는 다음에 답합니다: 에이전트가 시스템 콜 수준에서 실제로 무엇을 했는가?
Logira는 커널 수준에서 시스템 콜을 가로채는 eBPF 프로브를 사용하여 감사 계층을 다룹니다.9 이 도구는 세 가지 이벤트 범주를 기록합니다: 프로세스 실행(exec 이벤트), 파일 작업(자격 증명 파일 접근 포함), 네트워크 연결(목적지 추적 포함). 각 감사된 실행은 세 개의 파일을 생성합니다: 타임라인 검토를 위한 events.jsonl, 쿼리 가능한 필터링을 위한 index.sqlite, 실행 메타데이터를 위한 meta.json.
설계 철학은 “관찰 전용”입니다: Logira는 기록하고 감지하지만 적용하거나 차단하지 않습니다.9 적용 계층과의 분리는 의도적입니다. 정책 적용은 알려진 나쁜 동작을 방지합니다. 런타임 감사는 알려지지 않은 나쁜 동작을 사후에 발견합니다. 두 계층은 서로 다른 시간적 기능을 수행합니다: 예방(이전)과 포렌식(이후).
Logira의 eBPF 프로브는 애플리케이션 계층 아래에서 작동합니다. 데이터를 유출하기 위해 새로운 명령을 구성하는 에이전트도 여전히 시스템 콜을 합니다. 에이전트는 커널 수준 추적으로부터 파일 읽기, 네트워크 연결, 프로세스 생성을 숨길 수 없습니다. 이 접근 방식은 애플리케이션 수준 훅이 놓치는 것을 포착합니다: 도구 호출 추상화를 우회하는 부작용.
내장 감지 규칙은 AI 에이전트 위험을 구체적으로 대상으로 합니다: 자격 증명 파일 접근, 지속성 메커니즘 변경(/etc, systemd, cron), 의심스러운 명령 체인(curl-pipe-sh 패턴), 파괴적 작업(rm -rf), 비정상적 네트워크 송신.9 이 규칙은 일반적인 시스템 감사가 아닌 에이전트 위협 모델에 대한 기본값입니다.
플랫폼 제약이 중요합니다. Logira는 cgroup v2가 있는 Linux 5.8+을 필요로 합니다. macOS 에이전트(Claude Desktop, Darwin의 Claude Code)는 eBPF 기반 감사를 사용할 수 없습니다. 저의 OS 샌드박스는 가장 가까운 대안으로 macOS Seatbelt 프로필을 사용합니다: 민감한 경로에 대한 쓰기를 차단하는 커널 적용 거부 규칙입니다.3 Seatbelt은 적용이지 감사가 아닙니다. macOS에는 Logira의 관찰 전용 감사 추적에 대한 프로덕션 수준 대안이 없습니다.
2026년 3월 Hacker News에서 802포인트와 181개 댓글을 기록한 macOS 네이티브 샌드박싱 도구인 Agent Safehouse는 적용 측면에서 플랫폼 격차를 해소합니다.15 이 도구는 macOS의 로컬 AI 에이전트를 위해 특별히 설계된 샌드박스 프로필을 제공합니다. 커뮤니티 반응(샌드박싱 도구로서 802포인트는 예외적임)은 긴급성을 반영합니다: macOS에서 에이전트를 실행하는 실무자들은 “샌드박스 없음”과 “자체 Seatbelt 프로필 작성” 사이에서 제한적인 선택지를 가지고 있습니다. Agent Safehouse는 적용에 대한 그 격차를 메웁니다. macOS의 감사 격차는 여전히 열려 있습니다.
적용과 감사의 구분은 인시던트 대응의 시간적 분리에 대응합니다. 적용은 인시던트를 방지합니다. 감사는 인시던트 후 재구성을 가능하게 합니다. 둘 다 필요합니다. 모든 자격 증명 접근을 차단하는 적용 계층은 유출을 방지하지만 합법적인 SSH 작업도 방지합니다. 차단 없이 모든 자격 증명 접근을 기록하는 감사 계층은 운영자가 접근 패턴을 검토하고 증거에 기반하여 적용 규칙을 조정할 수 있게 합니다. 감사 데이터와 정책 개선 사이의 피드백 루프가 가시성 스택이 시간이 지남에 따라 개선되는 방식입니다: 감사가 패턴을 드러내고, 패턴이 정책을 알려주고, 정책이 감사가 다뤄야 할 범위를 줄입니다.
Logira의 cgroup v2 격리는 애플리케이션 수준 감사가 복제할 수 없는 기능을 추가합니다: 실행 범위 귀속. 시스템은 모든 이벤트를 전역이 아닌 특정 감사 실행에 귀속시킵니다. 같은 머신에서 두 에이전트 세션이 동시에 실행될 때, cgroup 격리는 세션 A의 파일 접근이 세션 B의 감사 추적에 나타나지 않도록 보장합니다. 애플리케이션 수준 훅은 동일한 보장을 제공할 수 없습니다. 훅이 에이전트 프로세스 내에서 실행되므로, 동시 세션을 분리하는 커널 수준 경계가 없기 때문입니다.9
제가 실제로 운영하는 것
제 오케스트레이션 시스템은 전용 모니터링 도구가 아닌 훅을 통해 세 계층 모두를 다룹니다.
리소스 계측. cost-gate 훅은 설정 가능한 예산 임계값에 대해 세션당 토큰 사용량을 추적합니다.5 시스템 성능 모니터는 설정 가능한 간격으로 CPU, 메모리, 디스크, 스왑을 확인하여 리소스 압력이 임계값을 초과할 때 경고를 주입합니다.10 세션 드리프트 감지기는 25회 도구 호출마다 실행되어, 원래 프롬프트 임베딩과 최근 동작의 슬라이딩 윈도우 사이의 코사인 유사도를 계산합니다.2
정책 적용. 8개의 PreToolUse 디스패처 훅이 도구 유형별로 핸들러 훅에 라우팅합니다. PreToolUse:Bash만으로도 자격 증명 패턴, 파괴적 git 작업, 민감한 경로 접근, 배포 명령을 다루는 12개의 핸들러가 실행됩니다. 재귀 가드는 최대 깊이 2와 부모 에이전트당 최대 5개의 자식을 적용합니다.2
런타임 감사. PostToolUse 훅이 모든 도구 호출 결과를 기록합니다. 보안 스캐닝 훅은 실행 후 bash 출력에서 자격 증명 유출을 확인합니다. 세션 상태 파일(jiro.state.json)은 모든 스토리 완료, 리뷰어 판정, 증거 게이트 결과를 기록합니다.2 시스템은 eBPF를 사용하지 않지만(macOS 제한) 훅 파이프라인을 통해 도구 수준 텔레메트리를 캡처합니다.
| 계층 | 제 구현 | 한계 |
|---|---|---|
| 리소스 계측 | cost-gate, sysmon, 드리프트 감지기 | 도구별 디스크/네트워크 분석 없음 |
| 정책 적용 | 15가지 이벤트 유형에 걸친 84개 훅 | 중앙 집중식 구성이 아닌 훅별 정규식 |
| 런타임 감사 | PostToolUse 로거, 세션 상태 파일 | 애플리케이션 수준만, 시스템 콜 추적 없음 |
시스템은 모든 동작이 훅 파이프라인을 통과하기 때문에 작동합니다. 한계는 깊이입니다: 훅 수준 모니터링은 에이전트가 무엇을 하라고 요청했는지 캡처하지만, 운영체제가 실제로 무엇을 실행했는지는 캡처하지 않습니다. 내장 서브셸로 bash 명령을 구성하는 에이전트는 훅이 단일 문자열로 보는 코드를 실행합니다. 커널 수준 감사라면 각 하위 프로세스를 볼 수 있을 것입니다.
기본 모니터링이 놓쳤을 실패를 세 계층 스택이 포착한 프로덕션 인시던트의 구체적 결과:
| 인시던트 | 포착한 계층 | 모니터링 없이 |
|---|---|---|
| 에이전트가 로그인 엔드포인트 수정 대신 45분간 프로젝트 디렉토리 재구성 | 리소스: 코사인 유사도 0.23에서 드리프트 감지기 작동 | 작업이 잘못된 산출물과 함께 “완료”로 보고됨 |
에이전트가 ~/.ssh/authorized_keys에 쓰기 시도 |
정책: PreToolUse:Bash 핸들러가 민감한 경로 차단 | SSH 키 수정, 영구 백도어 |
| 에이전트가 pytest 실행 없이 “모든 테스트 통과” 보고 | 감사: 완료 보고서에 테스트 출력 붙여넣기 누락 | 팬텀 검증으로 깨진 코드 머지됨 |
| 자식 에이전트 무음 실패, 부모가 성공 보고 | 리소스: 빈 출력의 자식에 대해 예산 초과 | 깨진 데이터베이스 마이그레이션 3시간 후 발견 |
복합되는 사각지대
에이전트가 에이전트를 생성하면 불투명성이 배가됩니다. 각 위임 단계마다 정보 손실이 발생합니다.
제 오케스트레이션 시스템이 ralph 자율 루프를 실행할 때, 부모 프로세스는 각 PRD 스토리에 대해 새로운 Claude Code 인스턴스를 생성합니다. 각 자식 에이전트는 집중된 작업과 새로운 컨텍스트 윈도우를 받습니다. 부모는 완료 상태를 추적합니다. 부모는 자식의 개별 도구 호출, 파일 읽기, 리소스 소비를 볼 수 없습니다.2
깊이 1(부모가 자식 생성)에서 부모는 자식의 최종 출력을 봅니다. 깊이 2(자식이 손자 생성)에서 부모는 자식이 손자의 출력에 대해 보고하는 것을 봅니다. 각 단계마다 정보가 압축됩니다. 제 NIST 의견서의 위임 체인 분석은 세 가지 복합 위험을 측정했습니다: 의미적 압축(컨텍스트가 프롬프트 문자열로 축소됨), 권한 증폭(자식이 민감도를 이해하지 못한 채 권한을 상속함), 책임 분산(루트 에이전트가 검사하지 않은 결과에 대한 책임을 짐).3
관측성도 같은 비율로 저하됩니다. 루트 에이전트의 세 계층 가시성 스택은 각 자식이 독립적으로 자체 모니터링을 실행하지 않는 한 손자 에이전트에 대한 가시성을 제공하지 않습니다. 제 재귀 가드는 깊이 제한을 적용하지만, 이 가드는 정책 제어이지 관측성 제어가 아닙니다. 위임이 깊이 2에서 멈췄다는 것을 아는 것은 깊이 2에서 무슨 일이 있었는지 알려주지 않습니다.
제 프로덕션 시스템의 구체적 사례: ralph 루프가 데이터베이스 마이그레이션 스토리를 구현하기 위해 자식 에이전트를 생성했습니다. 자식 에이전트는 마이그레이션에 “검증 단계”가 필요하다고 판단하고 통합 테스트를 실행하기 위해 자체 하위 에이전트를 생성했습니다. 손자 에이전트는 무음으로 실패했습니다(테스트 데이터베이스가 구성되지 않았음). 자식 에이전트는 빈 응답을 받고 침묵을 성공으로 해석하여 스토리 완료를 보고했습니다. 부모는 “story 4: complete”를 기록했습니다. 저는 3시간 후 애플리케이션이 누락된 컬럼에서 충돌했을 때 깨진 마이그레이션을 발견했습니다. 루트 에이전트의 텔레메트리는 깨끗한 실행을 보여주었습니다. 실패는 두 단계 깊이에 있었으며, 루트에 배포한 모든 모니터링 계층에서 보이지 않았습니다.2
OWASP Agentic Applications 프레임워크는 연쇄 실패와 비정상 에이전트를 다루지만 다중 에이전트 위임 체인에 대한 관측성 요구사항을 규정하지 않습니다.8 이 격차는 구조적입니다: 체인의 각 에이전트가 독립적으로 구성되고 독립적으로 보고되는 자체 리소스 계측, 정책 적용, 런타임 감사가 필요합니다. 오버헤드는 곱셈적입니다. 체인의 3개 에이전트에 대한 3개 모니터링 계층은 9개의 모니터링 인스턴스이며, 각각 자체 텔레메트리를 생성하고 각각 자체 구성이 필요합니다. 기존 도구 중 이 조정을 관리하는 것은 없습니다.
오늘 당장 구현할 수 있는 것
가시성 스택을 다루는 세 가지 최소 모니터링 훅:
1. 리소스: 토큰 예산 추적기. 세션당 누적 입력 및 출력 토큰을 기록합니다. 하드 리밋을 설정합니다. 80%에서 알림을 보냅니다. 구현은 에이전트의 사용량 통계를 읽고(Claude Code은 /cost를 통해 세션 비용을 노출함) 임계값과 비교하는 것을 필요로 합니다. 제 cost-gate 훅은 bash 47줄로 이를 수행합니다.5
2. 정책: PreToolUse 차단 목록. 모든 Bash 도구 호출 전에 실행되는 훅을 생성합니다. 명령을 패턴 목록에 대해 확인합니다: rm -rf /, git push --force, .ssh 또는 .env를 포함하는 경로, curl | sh. 일치하는 것을 차단합니다. 구현은 stdin(도구 호출 JSON)을 읽고, 명령 필드를 추출하고, 패턴 파일에 대해 grep하는 하나의 셸 스크립트를 필요로 합니다. 제 자격 증명 확인 훅은 31줄로 이를 수행합니다.2
3. 감사: PostToolUse 세션 로그. 모든 도구 호출과 결과를 세션별 JSONL 파일에 추가합니다. 타임스탬프, 도구 이름, 인수, 종료 코드를 포함합니다. 로그는 세션 후 재구성을 가능하게 합니다: 에이전트가 무엇을 했는지, 어떤 순서로, 무음으로 실패한 것이 있는지. 제 세션 로거는 bash 22줄로 이를 수행합니다.2
settings.json에서의 차단 목록 훅 작동 예시:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/check-sensitive-paths.sh"
}
]
}
]
}
}
훅 스크립트는 stdin에서 도구 호출을 읽고, 명령 문자열을 추출하고, 패턴에 대해 확인합니다. 차단된 명령은 {"decision": "block", "reason": "Sensitive path access denied"}라는 JSON 객체를 반환합니다. 허용된 명령은 {"decision": "approve"}를 반환합니다. Claude Code은 추가 프롬프트 없이 두 응답을 모두 존중합니다. 전체 훅은 승인된 명령에 대해 지연 시간을 추가하지 않으며(정규식 확인이 5ms 미만으로 실행됨) 차단된 명령에 대해 즉각적인 피드백을 제공합니다.
이 세 가지 훅은 총 100줄 미만입니다. 전용 모니터링 도구를 대체하지 않습니다. 제로 가시성을 최소 가시성으로 대체합니다. 최소 가시성은 이후 모든 거버넌스 결정의 전제 조건입니다. 계측 없이 리소스 예산을 설정할 수 없습니다. 차단 목록 없이 범위 정책을 적용할 수 없습니다. 감사 로그 없이 인시던트를 조사할 수 없습니다. 로그부터 시작하세요. 나머지 둘은 그 다음입니다.
핵심 요약
플랫폼 엔지니어에게: 에이전트는 기존 모니터링이 추적하지 않는 리소스를 소비합니다. 에이전트 세션당 디스크, 메모리, CPU, 네트워크 사용량이 컨테이너 지표와 같은 대시보드에 있어야 합니다. Cowork 사건이 필요성을 증명합니다: 운영자 가시성 없이 10GB가 할당되었습니다.
보안 팀에게: 도구 호출 경계에서의 정책 적용은 최소한의 에이전트 보안 태세입니다. mcp-firewall의 중앙 집중식 접근 방식은 에이전트별 허용/차단 로직을 하나의 감사 가능한 구성으로 통합합니다. 에이전트의 내장 권한이 위협 모델이 요구하는 정책 공간을 다루는지 평가하세요.
엔지니어링 매니저에게: 에이전트 도구에 대해 세 가지 질문을 하세요: 세션별 리소스 소비를 볼 수 있는가? 도구 호출 정책을 정의하고 감사할 수 있는가? 사후에 에이전트가 무엇을 했는지 재구성할 수 있는가? 어느 하나라도 “아니오”라면, 워크플로에 에이전트가 추가될 때마다 커지는 가시성 격차가 있는 것입니다.
FAQ
에이전트 관측성이란 무엇인가요? 에이전트 관측성은 AI 에이전트가 실행 중에 무엇을 하는지 모니터링하고 이해하는 능력입니다: 어떤 리소스를 소비하는지, 어떤 동작을 취하는지, 그리고 그 동작이 정의된 정책을 준수하는지 여부입니다.
Anthropic의 Cowork가 왜 10GB VM을 생성했나요? Claude Desktop의 Cowork 기능은 협업 개발 세션을 위해 가상 머신을 프로비저닝합니다. Claude Desktop은 기능을 활성화하지 않은 사용자를 포함하여 모든 macOS 설치에 VM 번들을 자동으로 생성하며, 수동으로 삭제할 때까지 유지합니다.1
mcp-firewall이란 무엇인가요? mcp-firewall은 CLI 에이전트(Claude Code, GitHub Copilot CLI)의 도구 사용 요청을 가로채어 실행 전에 정규식 기반 허용/차단 규칙에 대해 평가하는 오픈소스 정책 적용 도구입니다.7
eBPF 런타임 감사란 무엇인가요? eBPF(extended Berkeley Packet Filter)는 감사 대상 프로세스를 수정하지 않고 커널 수준에서 시스템 콜을 추적할 수 있게 합니다. Logira와 같은 도구는 eBPF 프로브를 사용하여 AI 에이전트 실행 중의 프로세스 실행, 파일 작업, 네트워크 연결을 기록합니다.9
에이전트가 운영자 가시성 없이 하위 에이전트를 생성하는 방법은 무엇인가요? 작업을 위임하는 에이전트는 새로운 컨텍스트 윈도우를 가진 자식 프로세스를 생성합니다. 부모 에이전트는 자식의 최종 출력을 보지만 개별 도구 호출, 파일 읽기, 리소스 소비는 보지 못합니다. 각 위임 단계마다 정보가 압축됩니다: 손자의 전체 세션이 부모 로그의 한 줄 상태가 됩니다. 관측성은 위임 깊이가 증가하는 것과 같은 비율로 저하됩니다.2
에이전트 모니터링은 전통적인 APM과 어떻게 다른가요? 전통적인 Application Performance Monitoring(APM)은 결정적 소프트웨어의 요청 지연 시간, 오류율, 처리량을 추적합니다. 에이전트 모니터링은 비결정적 행동을 추적합니다: 에이전트가 런타임에 무엇을 하기로 결정했는지, 그 결정이 정책 내에 있었는지, 각 결정이 어떤 리소스를 소비했는지. APM은 애플리케이션이 알려진 코드 경로를 따른다고 가정합니다. 에이전트 모니터링은 에이전트가 자체 경로를 선택한다고 가정합니다.2
출처
-
mystcb et al., “Cowork feature creates 10GB VM bundle that severely degrades performance,” GitHub Issue #22543, anthropics/claude-code, February 2026. 345 HN points, 175 comments. ↩↩↩↩↩
-
Author’s production telemetry. 84 hooks across 15 event types, ~15,000 lines of orchestration code, 60+ daily Claude Code sessions, February-March 2026. ↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Crosley, Blake, “What I Told NIST About AI Agent Security,” blakecrosley.com, February 2026. Public comment on NIST-2025-0035. ↩↩↩
-
DORA Accelerate State of DevOps Report 2024, Google Cloud, 2024. 39,000+ professionals surveyed. ↩
-
Author’s cost-gate hook implementation. SQLite-backed budget tracker with configurable thresholds (80%/90%/95%), 36 tests, February 2026. ↩↩↩
-
Author’s web content extraction library. trafilatura 2.0.0, URL logging and response size tracking, 25 tests, February 2026. ↩
-
dzervas, “mcp-firewall,” GitHub, 2026. Go binary with JSONNet policy configuration, PreToolUse hook integration. ↩↩
-
OWASP Top 10 for Agentic Applications, OWASP GenAI Security Project, 2025. 100+ security researchers contributed. ↩↩
-
melonattacker, “Logira: eBPF runtime auditing for AI agent runs,” GitHub, 2026. Linux 5.8+, cgroup v2, observe-only design. ↩↩↩↩↩
-
Author’s system performance monitoring module. CPU, memory, disk, and swap monitoring with configurable thresholds, 46 tests, February 2026. ↩
-
Crosley, Blake, “Anatomy of a Claw: 84 Hooks as an Orchestration Layer,” blakecrosley.com, February 2026. ↩
-
jv22222, “Claude Code wiped our production database with a Terraform command,” Hacker News, March 2026. 142 points, 158 comments. ↩
-
vanburen, “Claude Code deletes developers’ production setup, including database,” Tom’s Hardware, March 2026. 42 HN points, 27 comments. ↩
-
tomvault, “How Claude Code escapes its own denylist and sandbox,” ona.com, March 2026. Three escalating escape techniques: path evasion, self-directed disabling, dynamic linker bypass. 34 HN points. ↩
-
atombender, “Agent Safehouse: macOS-native sandboxing for local agents,” agent-safehouse.dev, March 2026. 802 HN points, 181 comments. ↩