에이전트가 안전하게 오래 일하려면 “에이전트가 사는 곳”과 “에이전트가 위험한 코드를 실행하는 곳”을 분리해야 한다. Fly.io의 Sprite 사례는 이를 Brain/Hands 분리로 설명한다. Brain은 장기 상태와 히스토리를 가진 에이전트 루프이고, Hands는 명령을 실행하는 격리 샌드박스다.
핵심 패턴
| 계층 | 역할 | 수명 |
|---|---|---|
| Brain | 모델 호출, 세션 상태, 메모리, 사용자 연결 | 길게 유지 |
| Hands | 셸 명령, 테스트 실행, 마이그레이션, 파일 작업 | 세션별 또는 작업별로 생성·폐기 |
에이전트 자체를 샌드박스에서 실행하더라도, 그 안에서 생성한 임의 명령을 같은 환경에서 실행하면 에이전트가 자기 상태나 자격증명을 망가뜨릴 수 있다. 명령 실행은 별도 샌드박스로 밀어내는 편이 안전하다.
실전 설계 원칙
- 세션마다 샌드박스 생성: 사용자별 작업 파일과 도구를 격리한다.
- 자격증명은 파일에 쓰지 않는다: 토큰은 특정 명령 실행 순간에만 환경 변수로 주입하고 즉시 사라지게 한다.
- 샌드박스는 버릴 수 있어야 한다: 세션이 끝나면 폐기하고, 재개가 필요하면 새 샌드박스를 만든다.
- 복구 가능한 상태는 Brain에 둔다: 장기 메모리, 대화 히스토리, 작업 요약은 샌드박스 밖에 둔다.
언제 유용한가
- 여러 사용자가 같은 에이전트 서비스를 쓰는 경우
- 에이전트가 실제
git,flyctl,kubectl, DB migration을 실행해야 하는 경우 - 위험 명령 승인 프롬프트를 줄이고 싶지만 호스트를 보호해야 하는 경우
- hermes-agent나 사내 트러블슈팅 에이전트처럼 장기 세션과 실행 환경이 모두 필요한 경우
관련 문서
- agent-harness — 샌드박스와 실행 루프를 포함한 에이전트 하네스 설계
- docker-sandbox — MicroVM 기반 AI 에이전트 격리 실행 환경
- sandboxd — AI 앱 빌더를 위한 셀프호스팅 샌드박스 엔진
- agent-vault — 에이전트 자격증명 관리
참고 자료
- Building Agents that Don’t Break Themselves — Fly.io (2026-06-18)