# Managed Agents 확장하기: 두뇌와 손을 분리하기

> Clean Markdown view of GeekNews topic #28427. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=28427](https://news.hada.io/topic?id=28427)
- GeekNews Markdown: [https://news.hada.io/topic/28427.md](https://news.hada.io/topic/28427.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-04-12T09:35:02+09:00
- Updated: 2026-04-12T09:35:02+09:00
- Original source: [anthropic.com](https://www.anthropic.com/engineering/managed-agents)
- Points: 21
- Comments: 0

## Topic Body

- 장기 실행 에이전트를 위한 **호스팅 서비스** Managed Agents는 하네스(harness)가 모델 발전에 따라 변해도 안정적으로 유지되는 **인터페이스 기반 아키텍처**를 채택  
- 하네스는 Claude가 혼자 수행하지 못하는 작업에 대한 가정을 인코딩하지만, 모델이 발전하면 해당 가정이 **낡은 것(stale)** 이 되어 불필요한 오버헤드 발생  
- 운영체제가 하드웨어를 **프로세스·파일 같은 추상화**로 가상화한 것처럼, Managed Agents는 에이전트 구성 요소(세션, 하네스, 샌드박스)를 가상화하여 독립적 교체 가능  
- 두뇌(하네스)와 손(샌드박스)을 분리함으로써 **p50 TTFT 약 60% 감소**, p95는 **90% 이상 감소**라는 성능 개선 달성  
- 이 설계는 향후 어떤 하네스·샌드박스가 등장하더라도 수용 가능한 **메타 하네스(meta-harness)** 역할 수행  
  
---  
  
### 하네스의 가정은 모델 발전에 따라 낡아짐  
  
- 하네스는 Claude가 스스로 할 수 없는 작업에 대한 **가정을 인코딩**하는 구조이나, 모델이 발전하면 해당 가정이 불필요해짐  
- Claude Sonnet 4.5에서는 컨텍스트 한계가 다가오면 작업을 조기에 종료하는 **"context anxiety"** 현상이 있어 컨텍스트 리셋을 하네스에 추가  
- Claude Opus 4.5에서는 해당 동작이 사라져 **리셋 로직이 불필요한 코드**가 됨  
- 하네스가 계속 변화할 것으로 예상하여, 특정 구현에 종속되지 않는 **범용 인터페이스** 기반의 Managed Agents 서비스 구축  
  
### 운영체제에서 영감을 받은 설계 철학  
  
- 운영체제는 하드웨어를 **프로세스, 파일** 같은 추상화로 가상화하여, 아직 존재하지 않는 프로그램도 실행할 수 있도록 설계  
- `read()` 명령이 1970년대 디스크 팩이든 최신 SSD든 동일하게 작동하는 것처럼, 추상화가 하드웨어보다 오래 지속  
- Managed Agents도 동일한 패턴을 따라 에이전트 구성 요소를 가상화  
  - **세션(session)**: 발생한 모든 이벤트의 append-only 로그  
  - **하네스(harness)**: Claude를 호출하고 도구 호출을 라우팅하는 루프  
  - **샌드박스(sandbox)**: Claude가 코드를 실행하고 파일을 편집하는 실행 환경  
  
### 초기 설계: 단일 컨테이너의 한계 ("Pet" 문제)  
  
- 초기에는 세션, 하네스, 샌드박스를 **하나의 컨테이너**에 배치  
- 파일 편집이 직접 syscall로 가능하고 서비스 경계 설계가 불필요한 장점이 있었음  
- 하지만 컨테이너가 **"pet"**(교체 불가능한 개별 인스턴스)이 되는 문제 발생  
  - 컨테이너 장애 시 세션 유실  
  - 응답 불능 시 컨테이너를 수동으로 복구해야 함  
- 디버깅 관점에서 WebSocket 이벤트 스트림만으로는 **장애 발생 위치 파악이 불가능**했고, 컨테이너에 셸 접근 시 사용자 데이터가 포함되어 있어 디버깅 자체가 어려웠음  
- 하네스가 모든 작업 대상이 컨테이너 내부에 있다고 가정해, 고객의 **VPC 연결** 요구 시 네트워크 피어링이나 자체 환경에서 하네스 실행이 필요  
  
### 두뇌와 손의 분리 (핵심 아키텍처)  
  
- "두뇌"(Claude와 하네스), "손"(샌드박스와 도구), "세션"(이벤트 로그)을 각각 **독립 인터페이스**로 분리  
- 각 구성 요소가 독립적으로 실패하거나 교체 가능  
  
#### 하네스의 컨테이너 탈출  
  
- 하네스가 컨테이너 외부로 이동하여, 컨테이너를 다른 도구와 동일하게 `execute(name, input) → string`으로 호출  
- 컨테이너가 **"cattle"**(교체 가능한 인스턴스)로 전환  
- 컨테이너 장애 시 하네스가 이를 도구 호출 오류로 처리하고, Claude가 재시도 결정 시 `provision({resources})`로 **새 컨테이너 초기화**  
  
#### 하네스 장애 복구  
  
- 세션 로그가 하네스 외부에 존재하므로, 하네스 내부에 생존해야 할 상태가 없음  
- 장애 시 `wake(sessionId)` → `getSession(id)`로 이벤트 로그를 가져와 **마지막 이벤트부터 재개**  
- 하네스는 에이전트 루프 중 `emitEvent(id, event)`로 **내구성 있는 이벤트 기록** 유지  
  
#### 보안 경계  
  
- 결합 설계에서는 Claude가 생성한 비신뢰 코드가 **자격 증명과 같은 컨테이너**에서 실행되어, 프롬프트 인젝션으로 환경 변수 탈취 가능  
- 공격자가 토큰을 획득하면 제한 없는 새 세션 생성 및 작업 위임 가능  
- 구조적 해결: 샌드박스에서 **토큰에 절대 접근할 수 없도록** 분리  
- **Git**: 리포지토리 액세스 토큰으로 샌드박스 초기화 시 클론하고 로컬 git remote에 연결, 에이전트가 토큰을 직접 다루지 않고 `push`/`pull` 수행  
- **MCP 커스텀 도구**: OAuth 토큰을 **보안 볼트(vault)** 에 저장하고, 전용 프록시를 통해 MCP 도구 호출 시 세션 연관 토큰으로 볼트에서 자격 증명을 가져와 외부 서비스 호출  
  
### 세션은 Claude의 컨텍스트 윈도우가 아님  
  
- 장기 작업은 Claude의 **컨텍스트 윈도우 길이를 초과**하는 경우가 많아, 무엇을 유지할지에 대한 비가역적 결정 필요  
- **압축(compaction)**: Claude가 컨텍스트 윈도우의 요약을 저장  
- **메모리 도구**: Claude가 컨텍스트를 파일에 기록하여 세션 간 학습 가능  
- **컨텍스트 트리밍**: 오래된 도구 결과나 사고 블록 등 선택적 토큰 제거  
- 비가역적 컨텍스트 폐기는 **미래 턴이 필요로 할 토큰을 예측하기 어렵기** 때문에 실패로 이어질 수 있음  
- 선행 연구에서는 컨텍스트를 **컨텍스트 윈도우 외부에 존재하는 객체**로 저장하고, LLM이 코드를 작성해 프로그래밍적으로 접근하는 방식 탐구  
  
#### Managed Agents의 세션 로그 활용  
  
- 세션이 컨텍스트 윈도우 밖에 존재하는 **컨텍스트 객체** 역할 수행  
- 샌드박스나 REPL이 아닌 **세션 로그에 내구적으로 저장**  
- `getEvents()` 인터페이스로 이벤트 스트림의 **위치 기반 슬라이스** 선택 가능  
  - 마지막 읽기 지점부터 이어서 읽기  
  - 특정 시점 전 몇 개 이벤트를 되감아 확인  
  - 특정 액션 전 컨텍스트 재읽기  
- 가져온 이벤트는 하네스에서 **변환 후 Claude의 컨텍스트 윈도우에 전달** 가능  
- 변환 내용에는 높은 **프롬프트 캐시 적중률**을 위한 컨텍스트 정리 및 컨텍스트 엔지니어링 포함  
- 세션은 **내구적 저장과 조회**만 보장하고, 구체적인 컨텍스트 관리는 하네스에 위임하여 미래 모델의 요구 변화에 대응  
  
### 다수의 두뇌, 다수의 손  
  
#### 다수의 두뇌 (Many Brains)  
  
- 두뇌와 손의 분리로 초기 고객 불만 해소: VPC 내 리소스 작업 시 더 이상 **네트워크 피어링 불필요**  
- 초기 설계에서는 각 두뇌마다 컨테이너가 필요하여, 컨테이너 프로비저닝이 끝날 때까지 **추론 시작 불가**  
- 샌드박스가 필요 없는 세션도 리포지토리 클론, 프로세스 부팅, 펜딩 이벤트 가져오기 등 **풀 컨테이너 셋업 비용** 부담  
- 분리 후 컨테이너가 필요한 경우에만 도구 호출로 프로비저닝하여 **불필요한 대기 시간 제거**  
- 추론은 오케스트레이션 레이어가 세션 로그에서 펜딩 이벤트를 가져오는 즉시 시작 가능  
- **p50 TTFT 약 60% 감소**, **p95 TTFT 90% 이상 감소**  
- 다수의 두뇌 확장은 단순히 **상태 없는(stateless) 하네스**를 다수 시작하고, 필요 시에만 손에 연결  
  
#### 다수의 손 (Many Hands)  
  
- 각 두뇌를 **다수의 실행 환경**에 연결하는 기능 필요  
- Claude가 여러 실행 환경에 대해 추론하고 작업 배분을 결정해야 하므로 **단일 셸보다 인지적으로 더 어려운 과제**  
- 초기에는 모델 능력 부족으로 단일 컨테이너에 두뇌를 배치했으나, 지능이 향상되면서 단일 컨테이너가 오히려 **제약**으로 작용  
- 분리 설계에서 각 손은 `execute(name, input) → string` 도구로 취급  
  - 커스텀 도구, MCP 서버, 자체 도구 모두 지원  
  - 하네스는 샌드박스가 컨테이너인지, 폰인지, **포켓몬 에뮬레이터**인지 알 필요 없음  
- 두뇌와 손이 결합되어 있지 않으므로, **두뇌 간 손의 전달도 가능**  
  
### 결론: 메타 하네스로서의 Managed Agents  
  
- 운영체제가 하드웨어를 가상화하여 아직 존재하지 않는 프로그램을 수용한 것과 동일한 접근  
- Managed Agents는 특정 하네스에 종속되지 않은 **메타 하네스**로, 다양한 하네스를 수용하는 범용 인터페이스 제공  
- Claude Code도 하나의 하네스로 사용 가능하며, **작업 특화 에이전트 하네스**도 수용  
- 인터페이스에 대해서는 명확한 입장을 가짐: Claude가 **상태 조작(세션)** 과 **계산 수행(샌드박스)** 능력을 필요로 한다는 점  
- 다수의 두뇌와 손으로의 확장, **장기 안정적·안전한 운영**을 위한 인터페이스 설계  
- 두뇌와 손의 **수량이나 위치에 대해서는 어떤 가정도 하지 않음**

## Comments



_No public comments on this page._
