왜 이 업데이트를 지금 봐야 하나
2026년 4월 15일 공개된 OpenAI Agents SDK 업데이트는 에이전트 아키텍처를 신뢰 경계 기준으로 두 층으로 분리한 것이 핵심이다. 릴리스에서 눈에 띄는 변화는 세 가지다.
- 샌드박스(Sandbox): 장기 실행 에이전트를 위한 격리된 실행 환경. 파일, 도구, 의존성에 접근하면서도 시스템 전체를 보호한다.
- 하네스-컴퓨트 분리: 제어면(harness)과 실행면(compute)을 나눠 자격 증명이 모델이 생성한 코드 밖에 머물게 한다.
- Manifest 추상화: 샌드박스 환경을 여러 제공자에 걸쳐 이식 가능하게 기술하는 워크스페이스 정의 레이어.
이 세 가지는 서로 다른 문제를 푼다.
- 보안: 모델이 생성한 셸 명령이 루프 자격 증명을 읽을 수 없다. 하네스와 샌드박스를 분리해 폭발 반경(blast radius)을 가둔다.
- 내결함성: 샌드박스 컨테이너가 죽거나 만료돼도 스냅샷과 재수화(rehydrate)로 마지막 체크포인트에서 이어받는다.
- 이식성: E2B, Modal, Runloop 같은 여러 제공자 중 어느 것을 써도 같은 Manifest로 에이전트 환경을 기술한다.
이 업데이트는 "새 기능 추가"보다 에이전트 시스템을 두 신뢰 도메인으로 나누는 설계 원칙의 공식화에 가깝다. 이전 SDK가 루프 오케스트레이션만 다뤘다면, 이번부터는 실행 환경 보안과 상태 내구성까지 SDK가 책임진다.
전체 구조: 두 층과 그 경계
1. 하네스-샌드박스 분리: 왜 두 층인가
이번 업데이트 이전의 에이전트 SDK는 모델 루프(harness)를 잘 다뤘지만, 실행 환경 보안은 개발자 책임이었다. 에이전트가 파일을 읽고 코드를 실행하려면 직접 파일시스템에 접근하거나, 별도 샌드박스를 구성하고 연결해야 했다.
이 구조에서 가장 위험한 지점은 하나다. 모델이 생성한 셸 명령이 API 키, 데이터베이스 비밀, 클라우드 토큰 같은 루프 자격 증명에 접근할 수 있다는 점이다. 프롬프트 인젝션이나 악의적인 데이터가 에이전트 루프에 들어오면, 자격 증명이 같은 실행 공간에 있으면 폭발 반경이 크다.
업데이트는 이 문제를 구조적으로 푼다.
- 하네스: 모델 호출, 메모리, 자격 증명, 체크포인트를 가진 영속적·신뢰된 제어면.
- 샌드박스: 파일 읽기, 코드 실행, 도구 사용을 수행하는 일시적·비신뢰된 실행면.
하네스는 샌드박스를 호출하지만 공유 메모리 공간에서 돌지 않는다. 두 층의 경계가 신뢰 경계이기도 하다.
샌드박스 실패는 실행의 손실이지 상태의 손실이 아니다
SDK의 스냅샷-재수화 메커니즘이 이 원칙을 실행 가능하게 만든다.
- 하네스가 주기적으로 에이전트 상태를 스냅샷으로 저장한다.
- 샌드박스 컨테이너가 만료되거나 실패하면 하네스가 감지한다.
- 하네스는 새 컨테이너를 프로비저닝하고 마지막 스냅샷에서 워크스페이스를 복원한다.
- 에이전트는 마지막 체크포인트에서 이어받는다.
개발자가 별도의 복구 로직을 작성하지 않아도 된다. 이 로직이 SDK 안으로 들어왔다.
2. Manifest 추상화: 샌드박스 환경의 이식성
샌드박스 환경마다 API가 다르면 코드가 제공자에 종속된다. 이 문제를 풀기 위해 SDK는 Manifest 추상화를 도입한다.
Manifest는 에이전트가 어떤 환경에서 실행돼야 하는지를 선언적으로 기술하는 구조체다.
manifest = Manifest(
inputs=["src/", "data/input.csv"], # 마운트할 로컬 파일/디렉터리
outputs=["reports/", "artifacts/"], # 에이전트가 생성할 출력 디렉터리
storage={
"s3": S3Config(bucket="my-bucket", prefix="agent-runs/"),
},
)같은 Manifest로 E2B, Modal, Runloop, 또는 자체 구축 샌드박스 중 어느 것에서도 에이전트를 실행할 수 있다. 샌드박스 제공자를 교체해도 에이전트 코드는 바뀌지 않는다.
지원 스토리지 제공자
Manifest는 로컬 파일 마운트 외에 다음 클라우드 스토리지를 연동한다.
| 제공자 | 용도 |
|---|---|
| AWS S3 | 대규모 데이터셋 입력, 결과 아카이빙 |
| Google Cloud Storage | GCP 환경 통합 |
| Azure Blob Storage | Azure 환경 통합 |
| Cloudflare R2 | 엣지 가까운 스토리지 |
스토리지 제공자 연결도 Manifest 수준에서 선언된다. 에이전트 코드 안에 클라우드 SDK 연결 코드를 직접 작성하지 않아도 된다.
3. 메모리 시스템: 세션 메모리와 샌드박스 메모리
SDK는 메모리를 두 층으로 나눈다.
세션 메모리
대화 이력과 에이전트 컨텍스트를 저장하는 메모리다. 하네스에 속하며 신뢰된 공간에 있다.
지원 백엔드:
- SQLite: 로컬 개발, 단일 서버 배포
- SQLAlchemy 호환 DB: PostgreSQL, MySQL 등 프로덕션 DB
- Redis: 분산 환경, 빠른 읽기가 필요한 경우
- 암호화 옵션: 민감한 대화 이력이 포함될 때
세션 메모리는 하네스 컨테이너가 재시작돼도 유지된다.
샌드박스 메모리
장기 실행 에이전트가 여러 실행에 걸쳐 학습한 내용을 축적하는 메모리다. 파일시스템에서 추출한 교훈을 구조화해 저장한다. 한 번 실행에서 발견한 유용한 패턴이 다음 실행에 영향을 줄 수 있다.
두 메모리의 역할 분담이 명확하다.
- 세션 메모리: "이번 대화에서 무슨 일이 있었나"
- 샌드박스 메모리: "여러 실행을 통해 이 에이전트가 무엇을 배웠나"
4. 100개 이상의 LLM 지원: Chat Completions 호환 인터페이스
이전 Agents SDK는 사실상 OpenAI 모델에 최적화돼 있었다. 이번 업데이트에서 하네스가 Chat Completions API 호환 인터페이스를 표준으로 채택하면서, 같은 형식을 지원하는 100개 이상의 LLM을 쓸 수 있게 됐다.
agent = Agent(
model="claude-sonnet-5", # Anthropic
# model="gemini-2-5-pro", # Google
# model="llama-4-scout", # Meta (via 호환 엔드포인트)
instructions="코드 리뷰 에이전트입니다.",
tools=[read_file, write_file, run_command],
)이 변화는 팀의 LLM 선택지를 SDK 수준에서 잠그지 않는다는 점에서 중요하다. 특정 작업에 맞는 모델을 고르거나, 비용과 성능 기준으로 제공자를 교체할 때 에이전트 아키텍처를 다시 짤 필요가 없다.
다만 주의할 점이 있다. 모델마다 도구 호출(tool call) 포맷과 멀티턴 처리 방식에 세부 차이가 있다. 호환 인터페이스로 통일했다고 해서 모든 모델이 동일하게 동작하지는 않는다. 특히 긴 컨텍스트나 복잡한 도구 체인을 쓸 때는 대상 모델로 별도 검증이 필요하다.
5. Codex 파일시스템 도구와 샌드박스 보안
샌드박스 안에서 에이전트가 쓸 수 있는 도구는 Codex 스타일 파일시스템 도구 세트다.
| 도구 | 동작 |
|---|---|
read_file(path) | 컨테이너 내 파일 내용 반환 |
write_file(path, content) | 컨테이너 내 파일 쓰기 |
edit_file(path, old, new) | 파일 특정 부분 교체 |
run_command(cmd) | 셸 명령 실행 (컨테이너 내부) |
git_* | git commit, diff, push 등 VCS 조작 |
이 도구들은 모두 샌드박스 컨테이너 내부에서만 실행된다. 하네스 영역의 파일이나 환경 변수에 직접 접근하는 경로가 없다.
심볼릭 링크 탈출 방지
이번 업데이트에는 보안 픽스도 포함됐다. 워크스페이스를 수화(hydrate)할 때, 샌드박스 아카이브 루트 외부를 가리키는 심볼릭 링크를 포함한 tar 아카이브를 거부한다. 절대 경로 심볼릭 링크 타깃도 마찬가지로 거부한다.
로컬, Docker, 제공자 기반 샌드박스 구현 전체에 이 검증이 적용된다.
이 변경은 작아 보이지만, 공급망 공격(supply chain attack)이나 악의적인 아카이브가 컨테이너 루트 밖으로 탈출하는 경로를 차단한다는 점에서 프로덕션 배포에서 의미 있다.
6. 서브에이전트와 병렬 샌드박스
하네스는 하나의 샌드박스만 관리하는 게 아니다. SDK는 여러 서브에이전트를 각각 격리된 샌드박스에서 병렬로 실행하는 패턴을 지원한다.
실용적으로 이런 패턴이 유용하다.
- 코드 리뷰 에이전트: 각 파일을 다른 샌드박스에서 독립적으로 리뷰.
- 데이터 처리 에이전트: 여러 데이터 청크를 병렬 컨테이너에 분산.
- 전문화된 에이전트 팀: 기획 에이전트, 실행 에이전트, 검증 에이전트를 각각 다른 환경에서 격리 실행.
한 서브에이전트의 샌드박스가 실패해도 하네스가 그 서브에이전트만 재수화한다. 나머지 서브에이전트 실행은 영향을 받지 않는다.
운영자 관점 체크리스트
- [ ] 에이전트가 루프 자격 증명(API 키, DB 비밀)에 접근해야 하는 경우, 하네스 레이어에만 두고 샌드박스에 전달하지 않는다.
- [ ] 프로덕션 배포에서는 내장 샌드박스 제공자(E2B, Modal, Runloop 등) 중 보안/비용 요건에 맞는 것을 선택한다.
- [ ] Manifest에 입출력 경로와 스토리지 제공자를 선언해 에이전트 코드가 샌드박스 제공자에 종속되지 않게 한다.
- [ ] 세션 메모리 백엔드를 프로덕션 DB(PostgreSQL 등)로 설정해 하네스 재시작 시 대화 이력을 잃지 않는다.
- [ ] 장기 실행 작업에는 샌드박스 메모리를 활용해 실행 간 학습 내용을 축적한다.
- [ ] tar 아카이브 기반 워크스페이스를 쓰는 경우, 심볼릭 링크 탈출 방지가 적용된 최신 SDK 버전을 쓰는지 확인한다.
- [ ] 100+ LLM 지원 기능을 쓸 때 대상 모델의 tool call 포맷 호환성을 반드시 별도 검증한다.
- [ ] TypeScript 지원은 이번 업데이트에 포함되지 않았다. TypeScript 에이전트는 Python 하네스와 연동하거나 TypeScript 지원 출시를 기다려야 한다.
어디까지를 기대하고, 어디부터는 아직 이른가
이번 업데이트는 에이전트 설계에 필요한 보안 격리, 상태 내구성, 워크스페이스 이식성이라는 세 가지 생산성 기반을 SDK 수준으로 내렸다는 점에서 중요하다.
그러나 과대평가를 피해야 할 지점도 있다.
- 100+ LLM 지원은 인터페이스 호환성이지, 모든 모델이 같은 품질로 에이전트 작업을 수행한다는 뜻이 아니다.
- 샌드박스 제공자별로 네트워크 지연, 콜드 스타트 시간, 비용이 크게 다르다. Manifest로 코드를 추상화해도 성능 특성은 제공자에 따라 달라진다.
- TypeScript 지원이 없다. Python 외 스택을 쓰는 팀은 아직 이번 기능을 직접 쓸 수 없다.
- 스냅샷-재수화가 완벽하진 않다. 매우 큰 워크스페이스나 복잡한 프로세스 상태는 복원 시 불일치가 생길 수 있다.
Open question
- Python Agents SDK의 실제 릴리스 버전 번호(0.x 계열)와 sandbox/harness 기능이 포함된 최초 버전 태그는 공식 changelog에서 확인이 필요하다.
- TypeScript 지원 출시 일정은 공식 공개되지 않았다.
- 샌드박스 메모리의 실제 구현이 어떤 스토리지 포맷을 쓰는지(벡터 임베딩, 구조화 텍스트 등) 세부 문서가 없다.
References
- https://openai.com/index/the-next-evolution-of-the-agents-sdk/
- https://techcrunch.com/2026/04/15/openai-updates-its-agents-sdk-to-help-enterprises-build-safer-more-capable-agents/
- https://www.helpnetsecurity.com/2026/04/16/openai-agents-sdk-harness-and-sandbox-update/
- https://agentpatterns.ai/tools/openai-agents-sdk/
- https://aiautomationglobal.com/blog/openai-agents-sdk-sandbox-native-agent-primitives-2026
- https://devops.com/openai-upgrades-its-agents-sdk-with-sandboxing-and-a-new-model-harness/
- https://modal.com/resources/best-sandbox-openai-agents-sdk
- https://github.com/openai/openai-agents-python/issues/2172