OpenRouter Blog

AI 에이전트를 위한 서버 사이드 코드 실행 도구 비교

서버 사이드 코드 실행 도구는 API 요청 중에 모델의 명령을 제공업체의 샌드박스에서 실행하므로, 직접 컨테이너를 프로비저닝하거나 보안을 관리할 필요가 없습니다. OpenAI, Anthropic, Google은 자사 모델을 위해 코드를 실행합니다. 우리의 openrouter:shell 도구는 Responses 및 Messages API에서 모든 모델의 명령을 실행하며…

Diagram comparing where a command runs in two setups. In the hosted tool call row, your app sends a request with tools to the model, the model emits a shell call, OpenRouter runs it in a sandbox, the sandbox returns stdout and the exit code to the model, and the model returns the answer to your app. In the self-managed sandbox row, the same request goes to the model, the model returns the tool call to your orchestration code, your code runs it in a sandbox built from your image, the sandbox retu
이미지 출처 · OpenRouter Blog

고객이 업로드한 CSV에 대한 질문에 답하는 에이전트를 만든다고 가정해 봅시다. 모델은 답을 얻기 위해 Python을 실행해야 합니다. 그 코드는 어디에서 실행될까요?

한 가지 옵션은 직접 실행하는 것입니다. 이는 E2B 나 Modal같은 샌드박스 플랫폼, 또는 Docker상의 자체 컨테이너를 사용하는 것을 의미하며, 데이터베이스와 인터넷으로부터 격리하고, 런타임을 제한하고, 이미지를 패치하는 작업도 함께 해야 합니다.

다른 옵션은 서버 사이드 코드 실행 도구입니다. API 요청에 도구를 추가하면, 모델이 무언가를 실행해야 할 때를 스스로 판단하고, 제공업체가 자체 샌드박스에서 명령을 실행하여 동일한 요청 내에서 출력을 모델에 반환합니다. 여기서 샌드박스란 자체 파일시스템을 갖추고, 시간 제한이 있으며, 기본적으로 네트워크 접근이 차단된 격리된 Linux 컨테이너를 의미합니다.

이 글에서는 오늘날 서버 사이드 코드 실행을 제공하는 네 가지 제공업체, 각 샌드박스가 할 수 있고 없는 것, 지연 시간과 비용 측면에서의 비용, 그리고 여전히 직접 운영하는 샌드박스가 필요한 작업들을 다룹니다.

요약

  • 서버 사이드 코드 실행 도구는 API 요청 중에 모델의 명령을 제공업체의 샌드박스에서 실행합니다. 컨테이너를 프로비저닝, 패치 또는 보안 관리할 필요가 없습니다.
  • OpenAI, Anthropic, Google은 각각 자사 모델을 위해 코드를 실행합니다. 우리의 openrouter:shell 도구는 Responses 및 Messages API에서 모든 모델의 명령을 실행하며, openrouter:bash 도구는 Messages API에서만 동일한 작업을 수행합니다. 두 도구 모두 베타 상태입니다.
  • 우리의 샌드박스는 계정과 워크스페이스에 범위가 지정된 격리된 컨테이너로, 아웃바운드 네트워크 접근이 기본적으로 꺼져 있고 런타임과 출력 크기에 명령별 제한이 있습니다. 샌드박스 시간은 초당 $0.0001로 청구되며, 새 컨테이너 또는 절전 중인 컨테이너에는 30초 최소 요금이 적용됩니다.
  • 커스텀 베이스 이미지, GPU 작업, 또는 수 시간 동안 실행되는 세션에는 여전히 직접 운영하는 샌드박스 플랫폼이 올바른 선택입니다.

서버 사이드 코드 실행이란 무엇인가

모델은 그 자체로는 절대 아무것도 실행하지 않습니다. 도구를 호출할 때, 모델은 도구 이름과 인수를 지정하는 요청을 내보내며, 그것을 수행하는 무언가가 필요합니다. 클라이언트 사이드 도구의 경우 그 무언가는 여러분의 애플리케이션 코드 또는 구축 중인 에이전트 프레임워크입니다. 여러분의 애플리케이션이 호출을 받아 실행하고, 후속 요청에서 결과를 다시 보냅니다. 서버 사이드 도구의 경우 제공업체가 자체 인프라에서 호출을 실행하고 동일한 요청 내에서 모델에 결과를 반환하므로, 여러분의 애플리케이션에는 이를 위한 핸들러가 없습니다. 서버 사이드 코드 실행은 두 번째 종류입니다.

여러분은 이미 이런 방식으로 작동하는 도구를 사용하고 있을 수 있습니다. 웹 검색 은 모델이 실시간 웹에서 무언가를 찾아보도록 하고, 웹 페치 는 URL의 내용을 읽도록 합니다. 두 경우 모두 요청에 항목 하나를 추가하면 나머지는 제공업체가 처리합니다. 코드 실행은 명령 실행에 동일한 패턴을 적용한 것입니다.

도구 호출이 실행되는 명령이 되는 과정

이 단계들은 모든 서버 사이드 코드 실행 도구에 적용됩니다. 필드 이름이 나오는 경우에는 우리 셸 도구가 사용하는 이름입니다.

  1. 요청의 tools 배열에 도구를 포함시킵니다.
  2. 모델이 무언가를 실행해야 한다고 판단하고 하나 이상의 셸 명령을 담은 호출을 내보냅니다.
  3. 제공자는 그 명령들을 샌드박스 처리된 컨테이너 안에서 순서대로 실행합니다.
  4. 각 명령의 표준 출력, 표준 오류, 그리고 결과가 모델로 돌아갑니다. 결과는 종료 코드 또는 타임아웃입니다.
  5. 모델은 그 결과를 읽고 여러분에게 답하거나 동일한 요청 내에서 더 많은 명령을 실행합니다.

모델이 답할 때까지 2단계부터 5단계까지 반복됩니다. 모델은 무언가를 실행하고, 출력을 읽고, 또 다른 명령이 필요한지 판단한 뒤 다시 실행합니다. 코드 실행 도구가 가치를 인정받는 지점이 바로 이 루프입니다. 모델이 추측 대신 실제 출력과 비교해 자신의 작업을 검증할 수 있기 때문입니다.

우리는 그 루프에 상한을 둡니다. max_tool_calls 필드는 하나의 요청이 취할 수 있는 서버 도구 단계 수를 설정합니다. 우리의 서버 도구 참조 에서는 기본값과 최댓값을 모두 30으로 지정합니다.

호스팅 샌드박스와 직접 운영하는 샌드박스의 차이점

자체 샌드박스를 운영한다는 것은 제공자가 원래 담당할 부분을 직접 소유한다는 뜻입니다. 베이스 이미지를 선택하고, 컴퓨팅을 프로비저닝하고, 실행을 시작하고 출력을 읽기 위한 SDK를 연결하며, 각 실행의 수명 주기를 관리해야 합니다. 보안 경계 역시 직접 책임져야 합니다.

호스팅 도구는 그런 제어권을 JSON 배열의 한 항목과 맞바꿉니다. 컨테이너의 크기를 정하거나, 패치하거나, 운영할 필요가 없습니다. 우리는 요청당 소수의 짧은 명령으로 처리되는 작업을 위한 경우에 맞춰 openrouter:shell을 만들었습니다.

Diagram comparing where a command runs in two setups. In the hosted tool call row, your app sends a request with tools to the model, the model emits a shell call, OpenRouter runs it in a sandbox, the sandbox returns stdout and the exit code to the model, and the model returns the answer to your app. In the self-managed sandbox row, the same request goes to the model, the model returns the tool call to your orchestration code, your code runs it in a sandbox built from your image, the sandbox retu

현재 호스팅 코드 실행을 제공하는 곳은 어디인가

이 글은 OpenAI, Anthropic, Google, OpenRouter를 다룹니다. Agent SDK와 전용 샌드박스 플랫폼은 별도의 카테고리이며, 두 항목 모두 글 뒤쪽에서 다룹니다. 이 네 공급자를 구분하는 기준은 각각 어떤 모델을 위해 코드를 실행하느냐입니다.

OpenAI는 OpenAI 모델을 위한 호스티드 셸을 운영합니다

OpenAI의 셸 도구 OpenAI가 관리하는 컨테이너에서 Responses API를 통해 명령을 실행합니다. OpenAI는 호스티드 런타임을 기본 작업 디렉터리가 있는 Debian 12로 문서화하고 있습니다. /mnt/data인 Debian 12로 문서화하고 있습니다. 명령은 sudo없이 실행되며, 대화형 TTY 세션은 지원되지 않습니다. 문서에 나열된 사전 설치 언어에는 Python 3.11, Node.js 22.16, Java 17, PHP 8.2, Ruby 3.1, Go 1.23이 포함됩니다.

호스티드 컨테이너는 기본적으로 아웃바운드 네트워크 접근이 없습니다. 이를 활성화하려면 조직 관리자가 OpenAI 대시보드에서 허용 목록을 구성하고, 요청 시 컨테이너 환경에 network_policy 를 설정해야 합니다. 컨테이너는 container_reference 환경에 컨테이너의 id를 전달하여 요청 간에 재사용할 수 있으며, 만료 시점은 컨테이너가 생성될 때 설정됩니다. OpenAI는 Python용으로 별도의 코드 인터프리터 도구 도 제공합니다.

Anthropic은 Claude 모델을 위해 Python과 Bash를 실행합니다

Anthropic의 코드 실행 도구 는 Anthropic이 관리하는 샌드박스에서 Messages API를 통해 Python과 Bash를 실행합니다. 문서에 명시된 환경은 Python 3.11, 5 GiB RAM, 5 GiB 작업 공간 스토리지, CPU 1개를 갖춘 Linux x86_64 컨테이너입니다. 인터넷 접근이 비활성화되어 있고 어떠한 아웃바운드 연결도 허용되지 않으므로, Claude는 사전 설치된 라이브러리로 작업하며 실행 중에는 패키지를 설치할 수 없습니다.

세 가지 도구 버전 이 존재하며, 지원되는 모든 모델은 세 가지를 모두 받아들입니다. code_execution_20250825 는 Bash 명령과 파일 작업을 지원합니다. code_execution_20260120 는 요청 간에 유지되는 Python 인터프리터 상태를 추가하며, 이는 Anthropic의 프로그래매틱 도구 호출에 의존하므로 Claude Haiku 4.5에서는 사용할 수 없습니다. 컨테이너는 생성 후 30일에 만료됩니다. 약 5분간 비활성 상태가 되면 컨테이너는 체크포인트되며, 30일 기간 내에 컨테이너의 id로 요청하면 복원됩니다.

Google은 Gemini 모델을 위해 Python을 실행합니다

Google의 코드 실행 도구 는 Google이 관리하는 샌드박스에서 Python을 실행하며, 요청의 tools에 code_execution 항목을 넣어 활성화합니다. 문서에 따르면 모델은 Python만 생성하고 실행할 수 있으며, 코드 환경의 최대 실행 시간은 30초이고, 직접 라이브러리를 설치할 수 없습니다. Google은 환경에 포함된 라이브러리 목록을 공개합니다.

우리는 어떤 모델에든 호스티드 셸을 제공합니다

위 세 도구는 각각 한 회사의 모델에서만 작동합니다. 우리의 도구는 샌드박스를 단일 모델 공급자 내부가 아닌 라우팅 계층에서 실행하기 때문에, Responses 및 Messages API의 모든 모델에서 작동합니다.

우리는 두 가지 코드 실행 도구를 제공합니다. openrouter:shell 은 OpenAI의 호스티드 셸 도구와 형태가 같으며, Responses API 및 Messages API입니다. openrouter:bash Anthropic의 bash 도구와 형태가 같으며 Messages API에서만 작동합니다.

두 도구 모두 베타 상태이므로 API가 변경될 수 있습니다. 샌드박스 실행은 글로벌 openrouter.ai 엔드포인트에서만 실행됩니다. 지역별 엔드포인트는 셸 도구를 제공하지 않으며, Chat Completions는 두 도구 모두에 대해 지원하는 API를 명시하는 400 오류를 반환합니다.

설정 engine 을(를) openrouter 두 도구 중 하나에 설정하면 명령이 우리의 샌드박스에서 실행됩니다. 기본값 engine 은(는) auto입니다. openrouter:shell의 경우, auto 은(는) 제공업체의 네이티브 호스티드 셸이 존재하면 이를 유지하고 그렇지 않으면 우리의 샌드박스로 라우팅합니다. openrouter:bash의 경우, auto 은(는) 도구 호출을 클라이언트 측에서 실행할 수 있도록 애플리케이션에 반환하며, 우리 서버에서는 아무것도 실행되지 않습니다.

샌드박스에서 명령 실행

다음은 두 개의 명령을 실행하고 결과를 다시 읽어오는 완전한 요청입니다.

import os
import requests

response = requests.post(
    "https://openrouter.ai/api/v1/responses",
    headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
    json={
        "model": "anthropic/claude-sonnet-4.5",
        "input": "Run `cat /etc/os-release` and `python3 --version`, then tell me the OS and Python version in one sentence.",
        "tools": [
            {"type": "openrouter:shell", "parameters": {"engine": "openrouter"}}
        ],
    },
)

for item in response.json()["output"]:
    if item["type"] == "openrouter:shell":
        print(item["container_id"], item["action"]["commands"])
        for result in item["output"]:
            print(result["stdout"], result["outcome"])

우리는 2026년 9월 22일에 이 요청을 실행했습니다. 모델은 두 명령을 하나의 셸 호출로 보냈고, 각 명령은 자체 결과와 함께 돌아왔습니다. 전체 os-release 출력은 여러 줄에 걸쳐 있으며 여기서는 처음 두 줄만 발췌했습니다.

{
  "type": "openrouter:shell",
  "container_id": "sess_art10-418b8597e044",
  "action": { "commands": ["cat /etc/os-release", "python3 --version"] },
  "output": [
    {
      "stdout": "PRETTY_NAME=\"Ubuntu 22.04.5 LTS\"\nNAME=\"Ubuntu\"\n",
      "stderr": "",
      "outcome": { "type": "exit", "exit_code": 0 }
    },
    {
      "stdout": "Python 3.11.14",
      "stderr": "",
      "outcome": { "type": "exit", "exit_code": 0 }
    }
  ]
}

샌드박스는 해당 날짜에 Python 3.11.14가 설치된 Ubuntu 22.04.5 LTS를 보고했습니다. 런타임 이미지는 변경될 수 있으므로 하드코딩하지 말고 컨테이너에서 버전을 읽으십시오. 나머지 매개변수는 서버 도구 참조 에서 다룹니다.

샌드박스를 대신 감싸주는 Agent SDK

API를 직접 호출하는 대신 에이전트 SDK를 사용하여 개발하는 경우, 일부 SDK가 이 도구들 중 하나를 감싸줍니다.

The OpenAI Agents SDK 출시되었으며 CodeInterpreterTool, OpenAI의 샌드박스에서 코드를 실행하는 도구와 ShellTool, 환경 구성 방식에 따라 로컬 런타임 또는 OpenAI 호스팅 컨테이너에서 실행되는 도구가 포함되어 있습니다. 명령이 원격으로 실행되었다고 가정하기 전에 어떤 모드로 구성했는지 확인하세요. 우리 쪽에서 openrouter:shell은 다른 항목과 마찬가지로 tools 배열의 항목이므로, 일반 요청과 마찬가지 방식으로 OpenRouter Agent SDK 루프에 들어갑니다.

여전히 자체 샌드박스가 필요한 경우

호스티드 도구는 스크립트 실행, 파일 변환, 결과 확인 같은 짧고 범위가 정해진 작업에 적합합니다. 특정 베이스 이미지나 GPU가 필요한 것은 네 가지 호스티드 도구 모두의 범위를 벗어나므로, 직접 운영하는 샌드박스 플랫폼이 필요합니다.

비교

호스티드 도구 셀은 위에 링크된 벤더 자체 문서에서 가져온 것이며, OpenRouter 런타임 셀만 예외로 앞서 요청을 실행했을 때 샌드박스가 보고한 내용입니다. 자체 관리 열은 특정 플랫폼이 아니라 직접 실행하는 샌드박스를 설명합니다.

OpenRouterOpenAIAnthropicGoogle자체 관리
운영 주체당사OpenAIAnthropicGoogle사용자
모델Responses 및 Messages API의 모든 모델OpenAI 모델Claude 모델Gemini 모델모든 모델
APIResponses 및 Messages. openrouter:bash는 Messages 전용Responses메시지Gemini API모두
언어모든 셸 명령. 2026년 9월 22일에 보고된 Python 3.11.14가 설치된 Ubuntu 22.04.5Debian 12의 셸 명령. Python, Node.js, Java, PHP, Ruby, Go가 사전 설치됨Python 및 BashPython 전용빌드하는 것에 따라 다름
파일시스템계정과 워크스페이스에 한정된 자체 컨테이너 파일시스템. 홈 디렉터리 아래의 파일은 매 명령 실행 후 저장됩니다기본 작업 디렉터리가 /mnt/data인 자체 컨테이너 파일시스템. 컨테이너가 만료되면 데이터가 삭제됩니다5 GiB의 워크스페이스 스토리지를 갖춘 격리된 컨테이너. 컨테이너는 생성 후 30일 후에 만료됩니다문서화되지 않음이미지와 마운트 설정에 따라 다름
아웃바운드 네트워크기본적으로 꺼짐. 포트 80과 443에서 최대 50개 호스트명의 허용 목록기본적으로 꺼짐. 조직 허용 목록에 더해 요청별 network_policy비활성화됨문서화되지 않음사용자가 구성
런타임에 패키지 설치예, 허용 목록에 있는 패키지 호스트를 통해 가능예, 허용 목록에 있는 패키지 호스트를 통해 가능아니요아니요예
세션 지속성컨테이너 id로 키잉된 컨테이너. 유휴 상태 5분 후 절전 모드로 전환됩니다. 저장된 파일은 마지막 사용 후 30일간 보관됩니다id를 통해 container_reference을(를) 거쳐 컨테이너를 재사용합니다. 만료는 컨테이너에 설정됩니다생성 후 30일 이내라면 id로 컨테이너를 복원합니다. 프로그래매틱 도구 호출이 가능한 code_execution_20260120 및 이후 버전에서는 인터프리터 상태가 유지됩니다실행당 최대 30초 런타임. 요청 간 상태 지속 여부는 문서화되지 않음각 플랫폼의 상한에 따름
비용 모델추론 토큰 비용에 초당 $0.0001의 샌드박스 사용 시간이 더해지며, 신규 또는 절전 중인 컨테이너에는 최소 30초가 청구됩니다셸 도구 문서에는 명시되지 않음조직당 매월 1,550 무료 시간 제공, 이후 컨테이너당 시간당 $0.05, 실행당 최소 5분 과금추가 요금 없음. 생성된 코드와 출력은 토큰으로 청구됨샌드박스가 실행되는 동안의 컴퓨팅 시간

샌드박스가 강제하는 사항

샌드박스의 요점은 모델을 신뢰할 필요가 없다는 것입니다. 의도하지 않은 명령은 네트워크나 다른 사람의 컨테이너에 도달할 수 없으며, 실행 시간과 출력량의 엄격한 한도에서 멈춥니다. 이 섹션의 모든 내용은 우리의 샌드박스를 설명합니다. 위의 표는 다른 세 곳이 어디에서 다른지 보여줍니다.

모든 명령에 적용되는 한도

우리는 각 명령을 격리된 컨테이너에서 실행하며, 이 컨테이너는 요청을 처리하는 인프라 및 사용자의 머신과 분리되어 있고 사용자의 계정과 워크스페이스로 범위가 한정됩니다. 다음을 사용하여 직접 상한을 설정할 수 있습니다: timeout_ms 명령이 실행될 수 있는 시간과 max_output_length 명령이 출력할 수 있는 양. timeout_ms 기본값은 120,000 ms이며 300,000 ms를 초과할 수 없습니다. max_output_length 기본값은 스트림당 16,384자이며 65,536자를 초과할 수 없습니다. 100개를 초과하는 명령이 포함된 셸 호출은 거부됩니다.

아웃바운드 네트워크 접근은 켜지 않는 한 비활성화됩니다. 우리는 2026년 9월 22일에 이를 확인했는데, network_policy 없이 요청을 보내고 모델에게 https://example.com 를 curl로 가져오도록 요청하고, HTTP 상태 코드만 출력한 뒤 5초 후에 포기했습니다. 명령은 000를 출력했는데, 이는 응답이 도착하지 않을 때 curl 가 출력하는 것이며, 종료 코드 28, 즉 curl 타임아웃으로 종료되었습니다.

{ "stdout": "000", "stderr": "curl: (28) Failed to connect to example.com port 443 after 5206 ms: Connection timed out", "outcome": { "type": "exit", "exit_code": 28 } }

네트워크를 열려면 최대 50개의 호스트명 또는 글롭 패턴으로 구성된 network_policy 최대 50개의 호스트명 또는 glob 패턴으로 구성된 허용 목록입니다. 80 및 443 포트만 접근 가능하며, 정책은 컨테이너가 시작될 때 고정됩니다. pip install 는 허용 목록에 pypi.org 과 files.pythonhosted.org 를 모두 필요로 합니다.

프롬프트 인젝션과 샌드박스가 제한하는 것

모델에 셸을 제공하면 프롬프트 인젝션에 노출됩니다. 에이전트가 웹 페이지, 지원 티켓 또는 누군가 업로드한 파일을 읽는다면, 공격자는 그 텍스트 안에 사용자의 프롬프트를 무시하고 다른 것을 실행하도록 모델에게 지시하는 명령을 숨길 수 있습니다.

위의 한도는 모델이 사용자의 프롬프트를 따르든 공격자의 지시를 따르든 적용됩니다. 주입된 지시 아래에서 실행된 명령은 설정한 network_policy 외부의 어떤 호스트에도 도달할 수 없으며, 정책을 끄면 네트워크 접근이 전혀 없습니다. 다른 테넌트의 컨테이너에 도달할 수 없으며, 동일한 타임아웃에서 멈춥니다. 허용 목록은 주입된 명령이 도달할 수 있는 범위를 넓히고, allowed_domains: ["*"] 는 무제한 송신(egress)을 허용하므로, 허용 목록은 작업에 필요한 호스트로만 유지하십시오.

요청 자체에 도착하는 시도를 감지할 수도 있습니다. 프롬프트 인젝션 감지 를 워크스페이스 가드레일에서 사용 모델로 요청을 전달하기 전에, 들어오는 각 요청의 사용자 제공 메시지 내용을 일반적인 인젝션 기법에 대한 정규식 패턴과 대조하여 검사합니다. 그 시점 이후에 서버 도구가 가져오는 내용은 검사하지 않으므로, 모델이 도구를 통해 읽는 페이지, 파일 또는 명령 출력에는 애플리케이션이 수신하는 샌드박스 출력을 검토하는 것과 같은 자체 통제 장치가 필요합니다. 일치 항목이 발견되면 구성한 액션에 따라 세 가지 중 하나의 동작을 수행합니다.

  • Flag은 탐지를 기록하고 요청을 변경하지 않은 채 전달합니다.
  • Redact는 일치한 범위를 다음으로 대체합니다. [PROMPT_INJECTION] 그리고 정화된 요청을 전달합니다.
  • Block은 요청이 모델에 도달하기 전에 403으로 요청을 거부합니다.

둘 이상의 가드레일이 적용되는 경우, 차단(block), 삭제(redact), 표시(flag) 순서로 가장 엄격한 조치가 우선합니다. 탐지가 완벽하지 않고 오탐(false positive)이 발생할 수 있으므로, 삭제(redact) 또는 차단(block)을 강제하기 전에 플래그(flag) 모드에서 자신의 트래픽에 대한 매칭률을 측정하십시오. Logs 페이지에서 오탐을 신고할 수 있습니다.

호스팅 샌드박스가 몇 초와 몇 달러를 대가로 요구하는 것

호스팅형 샌드박스는 요청에 수 초를 추가하지만, 별도로 운영할 인프라가 전혀 필요하지 않습니다. 또한 나중에 돌아올 수 있는 컨테이너를 제공합니다.

파일은 요청 간에 유지됩니다

다음에서 실행된 명령 /workspace/home, 그리고 모든 명령을 실행할 때마다 변경된 파일을 그 디렉터리 아래에 저장합니다. 안정적인 session_id, 또는 도구의 환경 설정이며, 해당 id가 붙은 모든 요청은 동일한 컨테이너와 동일한 파일에 도달합니다. A session_id 는 문자, 숫자, _, 그리고 -만 사용해야 합니다. 다른 문자를 포함한 id는 무시되며, session_id를 보내지 않은 것처럼 컨테이너를 선택합니다. 이는 재생된 대화에 container_id 이 있다면 그것을 사용하고, 없다면 해당 요청을 위한 새 컨테이너를 사용한다는 의미입니다. session_id 이 20자보다 길면 마지막 20자만 사용하므로, 같은 방식으로 끝나는 두 개의 긴 id는 하나의 컨테이너를 공유합니다. A container_reference id는 같은 문자 집합에서 1자에서 40자까지 가능하며 잘리지 않으므로, id가 정확해야 하는 경우 이것을 사용하세요. 우리는 2026년 9월 22일에 한 요청에서 파일을 쓰고, 동일한 session_id.

컨테이너는 5분 동안 유휴 상태이면 잠들며, 유휴 시간은 설정할 수 없습니다. 잠들어도 파일은 삭제되지 않습니다. 나중에 동일한 id를 가진 요청이 도착하면 새 샌드박스가 시작되고 저장된 파일을 먼저 불러옵니다. 열려 있던 프로세스, 환경 변수, 설치된 시스템 상태는 복원되지 않으므로, 깨어난 컨테이너를 파일이 들어 있는 새로운 머신으로 취급하세요. 저장된 파일은 컨테이너가 마지막으로 사용된 후 30일 동안 보관됩니다. 아티팩트를 꺼내려면, GET /api/v1/containers/{container_id}/files 컨테이너가 생성한 결과물을 나열하며, 그 프로모트 엔드포인트 파일을 작업 공간 문서에 복사합니다. 복사된 파일은 만료되지 않습니다.

나중에 검토할 수 있는 내용

응답의 각 shell 도구 결과에는 모델이 실행한 명령과 각 명령의 stdout, stderr 및 결과가 포함되어 있으므로, 애플리케이션에서 응답의 나머지 부분을 기록하는 것과 같은 방식으로 이를 기록할 수 있습니다. 입력 및 출력 로깅 프롬프트와 완성 결과를 OpenRouter에 저장하여 Logs 페이지에서 검토할 수 있게 하며, 가드레일 탐지 결과도 그곳에 표시됩니다. 프로덕션 모니터링의 경우, 방송 요청이 완료됨에 따라 트레이스를 외부 관측성 플랫폼으로 스트리밍합니다.

라우팅하는 경우 지역 내(in-region), 셸 도구를 사용할 수 없으며 Input & Output Logging은 활성화되어 있더라도 건너뛰어집니다. Broadcast는 리전 내 라우팅을 지원하며, 각 목적지는 수신하는 트레이스의 데이터 리전으로 구성됩니다.

왕복 여행에 드는 비용

샌드박스 명령을 실행하는 요청은 그렇지 않은 동일한 요청보다 더 오래 걸립니다. 2026년 9월 22일에 보낸 일련의 단일 요청에서 셸 도구가 없는 요청은 약 2초 만에 반환되었고, 셸 호출을 한 번 수행한 요청은 모델에 따라 8초에서 21초 사이에 반환되었습니다. 이는 하나의 세션에서 얻은 단일 샘플이지 벤치마크가 아닙니다. 셸 호출당 수 초의 오버헤드를 예산에 반영하십시오.

샌드박스 시간은 초당 $0.0001로 청구됩니다. 시계는 요청이 처음으로 샌드박스 명령을 실행할 때 시작되고 응답이 완료되면 멈춥니다. 새 컨테이너를 시작하거나 절전 중인 컨테이너를 깨우는 요청은 최소 30초로 청구되며, 이후 같은 웜 컨테이너를 재사용하는 요청은 실제 측정된 시간만 지불합니다. 위의 요청은 새 컨테이너를 시작했으며, 해당 사용량 객체에는 다음과 같이 보고되었습니다. server_tool_cost 0.003이며, 이는 30초 최소 요금입니다. 요청 사이에 유휴 상태인 컨테이너에는 요금이 청구되지 않습니다.

도구 코드를 건드리지 않고 모델을 변경하세요

모델을 바꿔도 도구 정의는 그대로 유지됩니다.

우리는 2026년 9월 22일에 하나의 요청 본문을 여섯 번 전송하면서 그 안의 model 분야를 제시하고 각 모델에게 실행하도록 요청했다 python3 -c "print(sum(range(1, 101)))" 샌드박스 안에서. 각 모델은 셸 명령을 한 번 호출했고 5050을 반환했습니다.

모델결과
openai/gpt-5.4-mini5050
google/gemini-3.5-flash5050
anthropic/claude-haiku-4.55050
deepseek/deepseek-v3.25050
moonshotai/kimi-k2.65050
qwen/qwen3-coder5050

六个 모델 모두 샌드박스가 우리 소유이지 모델 제공사의 소유가 아니기 때문에, 각자 자사 제공업체가 기본 제공하는 것이 무엇이든 동일한 도구 정의를 사용해 동일한 샌드박스에서 실행했습니다. 구축하기 전에 사용할 모델을 직접 테스트하세요. 도구 호출 신뢰성은 모델마다 다르기 때문입니다. 저희 도구 호출 가이드 서버 도구와 사용자 정의 함수 도구가 하나의 tools 배열.

자신만의 샌드박스 플랫폼이 필요할 때

호스티드 도구가 제공하지 않는 것이 필요할 때는 전용 샌드박스 플랫폼을 선택하세요. 모달 사용자 지정 이미지로 구축된 문서 샌드박스를 지원하며, 최대 24시간까지 구성 가능한 수명과 GPU 리소스를 제공합니다. 데이토나 공개 컨테이너 이미지에서 생성된 샌드박스, GPU 샌드박스를 포함한 문서입니다. E2B Pro 플랜에서는 최대 24시간, 기본 플랜에서는 1시간 동안 실행되는 문서 샌드박스를 제공하며, 더 긴 작업을 위해 일시 중지 및 재개 기능을 지원합니다.

결론

모델 요청 안의 짧고 범위가 제한된 명령의 경우, 호스티드 툴을 사용하세요. 다음 항목에 하나의 항목을 추가합니다: tools 배열로 전달하면 외부 네트워크 접근이 차단된 격리된 컨테이너를 받게 되며, 추론 비용과 샌드박스가 실행된 초 단위 시간에 대해 비용을 지불합니다. 셸 호출당 수 초의 오버헤드를 감안하고 가능하면 컨테이너를 재사용하세요.

사용자 지정 기본 이미지, GPU, 수 시간 동안 실행되는 세션 또는 보안 경계 자체의 소유권이 필요한 작업이 있을 때는 직접 운영하는 샌드박스 플랫폼으로 옮기세요. 어느 쪽이든, 커밋하기 전에 제공업체의 최신 문서를 확인하세요. 저희의 두 도구는 베타 상태이며 나머지 세 제공업체의 도구도 변경되기 때문입니다.

자주 묻는 질문

모델이 요청 처리 중에 직접 호출할 수 있는 호스팅형 샌드박스 셸 도구가 있나요?

네. openrouter:shell 서버 도구는 요청 처리 중 우리 인프라에서 실행되는 샌드박스 처리된 Linux 셸을 모델에 제공하며, Responses API와 Messages API 양쪽에서 사용할 수 있습니다. Set engine ~ openrouter 그리고 명령은 격리된 컨테이너에서 실행되며, 각 명령의 stdout, stderr, 종료 또는 타임아웃 결과가 모델에 반환됩니다. OpenAI, Anthropic, Google은 각각 자사 모델을 위한 호스팅형 코드 실행 도구를 제공합니다.

모델에게 명령을 실행할 수 있는 샌드박스 처리된 셸을 제공할 수 있나요?

예. Responses 또는 Messages API 요청의 {"type": "openrouter:shell", "parameters": {"engine": "openrouter"}} 배열에 tools 을(를) 추가하십시오. 그러면 모델이 셸 호출을 내보낼 수 있으며, 우리는 격리된 컨테이너에서 명령을 실행하고 각 명령의 출력을 모델에 반환합니다. 컨테이너는 network_policy 허용 목록을 설정하지 않는 한 아웃바운드 네트워크 접근이 없습니다.

어떤 SDK나 플랫폼이 서버 측 코드 실행을 기본으로 제공합니까?

우리의 openrouter:shell 서버 도구는 Responses 및 Messages API의 모든 모델에 대해 명령을 실행하며, openrouter:bash 서버 도구는 Messages API에서만 동일한 작업을 수행합니다. OpenAI, Anthropic, Google은 각각 Responses API 셸 도구, 코드 실행 도구, Gemini API 코드 실행 도구를 통해 자체 모델의 코드를 실행합니다. OpenAI Agents SDK는 OpenAI의 호스티드 도구를 CodeInterpreterTool 및 ShellTool(으)로 감싸서 제공합니다. E2B, Modal, Daytona는 API 호출 내에서 제공자가 실행하는 도구가 아니라 직접 통합하고 운영하는 샌드박스 플랫폼입니다.

AI 에이전트에 가장 적합한 샌드박스는 무엇입니까?

작업이 실행되는 시간과 런타임에 대해 필요한 제어 수준에 따라 다릅니다. 요청 내의 짧은 명령의 경우 openrouter:shell 같은 호스티드 도구를 사용하면 인프라를 운영할 필요가 없습니다. 사용자 지정 베이스 이미지, GPU 접근, 또는 수 시간 동안 실행되는 세션이 필요한 경우에는 Modal이나 Daytona처럼 직접 운영하는 샌드박스 플랫폼이 그러한 제어 기능을 제공합니다.

AI 에이전트는 어떻게 샌드박스 처리합니까?

에이전트의 명령을 자신의 시스템과 격리된 환경에서 실행하고 해당 환경이 접근할 수 있는 범위를 제한합니다. 호스티드 도구를 사용하면 제공자가 이 작업을 수행합니다. OpenRouter에서는 컨테이너가 우리 인프라와 사용자의 머신으로부터 격리되고, 사용자의 계정과 워크스페이스로 범위가 한정되며, 아웃바운드 네트워크 접근은 기본적으로 꺼져 있고, 각 명령은 timeout_ms(으)로 제한되며 출력은 max_output_length(으)로 제한됩니다. 워크스페이스 가드레일은 모델 앞단에 프롬프트 인젝션 탐지를 추가합니다.

샌드박스 처리된 AI 도구란 무엇입니까?

부작용이 프로덕션 시스템이 아닌 격리된 환경에 국한되는 도구입니다. 코드 실행의 경우 모델의 명령은 자체 파일시스템, 제한된 네트워크 접근, 시간 제한이 있는 컨테이너에서 실행되며 명령 출력만 모델로 다시 전달됩니다. 우리의 셸 및 bash 서버 도구가 바로 이 방식으로 작동합니다.

참고 자료

원문 출처

OpenRouter Blog

내용 안내

원문 발행 및 권리는 출처에 있습니다.

기계 번역 · 원문을 참고하세요