Найкращі пісочниці для агентів у 2026 році: холодний старт за пікового навантаження, похвилинна тарифікація та мережеві політики в E2B, Daytona, Modal, Cloudflare і Vercel
Кожному агенту, який пише код, потрібне місце для його запуску. Це «місце» тепер є окремою категорією продуктів, у якій щонайменше дюжина постачальників, чотири несумісні моделі оплати та маркетингові сторінки, де наводяться показники холодного старту, виміряні за умов, які ніхто не публікує.
Це порівняння приводить одиниці вимірювання до спільного знаменника. Воно охоплює п’ять платформ, які найчастіше потрапляють до короткого списку команд, — E2B, Daytona, Modal Sandboxes, Cloudflare Sandbox SDK і Vercel Sandbox, — а також Runloop, Fly.io Sprites і Northflank там, де вони змінюють відповідь.
Чотири запитання, які насправді визначають вибір
Таблиці функцій для цієї категорії здебільшого є інформаційним шумом. Чотири властивості змінюють архітектуру, а все інше — питання вподобань:
- Холодний старт за умов конкурентного запуску: агентський цикл, який створює пісочницю для кожного виклику інструмента, сплачує цю «ціну» тисячі разів на день.
- Збереження файлової системи між ходами: чи бачить другий хід результат
pip installіз першого, чи агент щоразу відбудовує свій світ? - Політика вихідного трафіку: чи може пісочниця звертатися до інтернету, чи можна це вимкнути та чи можна змінити рішення посеред сесії?
- Оплата простою: агенти більшу частину часу за годинником очікують на модель. Хтось платить за ці секунди.
1. Холодний старт: що насправді показують цифри
Заяви постачальників не можна безпосередньо порівнювати. Сторінка тарифів Daytona рекламує створення пісочниці менш ніж за 90 мс. Для E2B часто наводять показник близько 150 мс. Modal рекламує холодний старт менш ніж за секунду для попередньо кешованих контейнерів. Жоден із цих показників не уточнює конкурентність, регіон, розмір образу або те, чи зупиняється відлік у момент підтвердження API, чи після виконання першої команди.
Найкорисніший загальнодоступний набір даних — таблиця лідерів ComputeSDK для пісочниць, яка має відкритий вихідний код і запускається за розкладом. Вона вимірює час до інтерактивності (TTI): час від create() до першої успішної команди всередині пісочниці, 100 ітерацій для кожного постачальника, запущених одночасно одним пакетом із хоста на 4 vCPU у Північній Вірджинії.
Результати запуску від 21 серпня 2026 року:
| Постачальник | Медіанний TTI | P95 | P99 | Рівень успішності |
|---|---|---|---|---|
| Vercel Sandbox | 0.67 с | 1.04 с | 1.12 с | 100% |
| Modal | 0.88 с | 1.00 с | 1.08 с | 100% |
| Runloop | 0.89 с | 3.27 с | 3.50 с | 100% |
| E2B | 1.61 с | 1.77 с | 1.81 с | 100% |
| Cloudflare | 5.06 с | 6.04 с | 6.48 с | 100% |
| Daytona | 0.27 с | 0.43 с | 0.44 с | 37% |
У цій таблиці важливіші за рейтинг три речі.
- Пакетний запуск — не те саме, що послідовний: найкраща опублікована медіана Daytona є реальною, а під час попереднього запуску на сторінці постачальника платформа створювала пісочниці з медіаною 0.10 с, коли їх запускали по одній. Під час серпневого пакетного запуску вона показала найшвидшу медіану серед усіх і завершила 37 зі 100 спроб. Медіана, якої ви досягаєте лише в третині викликів, — це не показник затримки, а показник пропускної здатності. Логіка повторних спроб не є необов’язковою на жодній із цих платформ.
- Проєктувати потрібно з урахуванням хвостової затримки: медіани Runloop і Modal відрізняються на 10 мс. P95 Runloop у 3,3 раза більший за P95 Modal. Якщо бюджет UX вашого агента становить одну секунду, медіана майже нічого вам не говорить.
- Cloudflare вимірює інший продукт: Sandbox SDK працює на базі Cloudflare Containers, який планує екземпляр контейнера та завантажує образ. Архітектурно це важча операція, ніж відновлення попередньо прогрітої Firecracker VM, і медіани на рівні 5 с це відображають. У власному дописі про загальну доступність Cloudflare відверто описує масштаб проблеми: запуск пісочниці, клонування репозиторію та виконання
npm installзаймають близько 30 секунд, тоді як відновлення того самого середовища з резервної копії — близько двох.
Як відтворити це самостійно
Варто вимірювати завдання, яке виконує ваш агент, а не echo hello. Корисний тестовий стенд виконує всюди однакову роботу: встановлює pandas, читає CSV, будує графік і повертає PNG. Вимірюйте окремо чотири контрольні точки.
# checkpoints: t_create -> t_ready -> t_deps -> t_result
# run 100 iterations sequential, then 100 concurrent, report median/P95/P99
import time, statistics
def one_run(provider):
t0 = time.perf_counter()
sbx = provider.create() # API acknowledged
t1 = time.perf_counter()
sbx.exec("python -c 'print(1)'") # first command returns: TTI
t2 = time.perf_counter()
sbx.exec("pip install pandas matplotlib")
t3 = time.perf_counter()
sbx.exec("python /work/plot.py") # writes /work/out.png
png = sbx.read_file("/work/out.png")
t4 = time.perf_counter()
sbx.kill()
return dict(create=t1-t0, tti=t2-t0, deps=t3-t2, task=t4-t3, bytes=len(png))Звітуйте про tti і task окремо. Постачальники оптимізують перший показник, а читачів цікавить другий. Зафіксуйте регіон і образ та опублікуйте як послідовну, так і конкурентну серії, адже вони відповідають на різні запитання.
2. Ціни за секунду, нормалізовані
Опубліковані тарифи станом на 27 серпня 2026 року, перераховані до спільної одиниці. Modal встановлює ціни за фізичне ядро, яке визначає як 2 vCPU, тому для порівняння наведено еквівалент у vCPU.
| Платформа | CPU | Пам’ять | Основа тарифікації | Мінімальний план |
|---|---|---|---|---|
| E2B | $0.0504 / vCPU-год | $0.0162 / GiB-год | Час за годинником, щосекунди | Безплатний Hobby; Pro за $150/міс. |
| Daytona | $0.0504 / vCPU-год | $0.0162 / GiB-год | Час за годинником, щосекунди | Без мінімуму; кредит $200 |
| Modal Sandbox | $0.1419 / ядро-год (~$0.0710 / vCPU-год) | $0.0240 / GiB-год | max(request, actual), щосекунди | Безплатний Starter; Team за $250/міс. |
| Vercel Sandbox | $0.128 / vCPU-год лише активний CPU | $0.0212 / GB-год виділеної пам’яті | Роздільна: активний CPU, пам’ять — за часом | Ліміт Hobby; кредит Pro |
| Cloudflare Sandbox | $0.072 / vCPU-год лише активний CPU | $0.009 / GiB-год виділеної пам’яті | Активний CPU + виділені пам’ять/диск | Workers Paid за $5/міс. |
| Fly.io Sprites | $0.07 / CPU-год | $0.04375 / GB-год | Лише активне використання; засинає під час простою | Рівні підписки |
| Runloop | $0.108 / CPU-год | $0.0252 / GB-год | Стан роботи; призупинений — лише сховище | Безплатний Basic; Pro за $250/міс. |
| Northflank | $0.01667 / vCPU-год | $0.00833 / GB-год | Виділені ресурси, щосекунди | Безплатний рівень Sandbox |
Два примітки, у яких люди часто помиляються.
- Рівень пісочниць Modal приблизно утричі дорожчий за стандартний тариф Function ($0.00003942 проти $0.0000131 за core-секунду), а вибір регіону додає ще 1,5–1,75 раза. Ціна пісочниці — не основний тариф Modal на обчислення.
- Тарифи Daytona на GPU часто відтворюють як $3,95/год за H100. На її актуальній сторінці тарифів вказано H100 за запитом за $2,27/год, а H200 — за $2,61/год. Сторонні порівняльні таблиці в цій категорії застарівають менш ніж за квартал.
3. Вартість 1 000 виконань
Тарифи — це не витрати. Наведена нижче модель фіксує робоче навантаження та пропускає його через кожну тарифну сітку.
Припущення: пісочниця на 2 vCPU / 4 GiB, 1 000 виконань, без урахування мінімального платежу за планом, без вихідного трафіку, стандартний регіон (Vercel iad1, Cloudflare standard-3 на 2 vCPU / 8 GiB / 16 GB диска, оскільки розміри екземплярів фіксовані).
Сценарій A: короткий пакетний запуск — 90 с роботи, 50% середнього завантаження CPU
| Платформа | Вартість / 1 000 | Складова |
|---|---|---|
| Northflank | $1.67 | $0.83 CPU + $0.83 пам’ять |
| Cloudflare | $3.70 | $1.80 CPU + $1.80 пам’ять + $0.10 диск |
| E2B / Daytona | $4.14 | $2.52 CPU + $1.62 пам’ять |
| Vercel | $5.32 | $3.20 активний CPU + $2.12 пам’ять |
| Modal | $5.95 | $3.55 CPU + $2.40 пам’ять |
| Fly Sprites | $7.88 | $3.50 CPU + $4.38 пам’ять |
| Runloop | $7.92 | $5.40 CPU + $2.52 пам’ять |
Сценарій B: переважно простій — 10 хв роботи, 5% середнього завантаження CPU
Саме так виглядає реальний агентський цикл. Пісочниця відкрита, модель думає, нічого не виконується.
| Платформа | Вартість / 1 000 | Зміна порівняно з A |
|---|---|---|
| Northflank | $11.11 | у 6,7 раза |
| Cloudflare | $13.87 | у 3,7 раза |
| Vercel | $16.27 | у 3,1 раза |
| E2B / Daytona | $27.60 | у 6,7 раза |
| Modal | $39.66 | у 6,7 раза |
| Fly Sprites (залишена активною) | $52.50 | у 6,7 раза |
| Runloop (залишена запущеною) | $52.80 | у 6,7 раза |
Vercel переходить із четвертого за дешевизною на третє місце, а її рядок CPU зменшується з $3.20 до $2.13, тоді як у всіх інших показники масштабуються лінійно. Рядок активного CPU Cloudflare знижується до $1.20. У цьому полягає весь аргумент на користь тарифікації за активним CPU, і для цього робочого навантаження це дає приблизно дворазову різницю.
Сценарій B із призупиненням
Платформи, які програють у сценарії B, можуть відігратися, якщо ваша оркестрація призупиняє їх між ходами замість того, щоб тримати середовище відкритим. Те саме робоче навантаження, 30 с активності на виконання:
| Платформа | Вартість / 1 000 | Механізм |
|---|---|---|
| E2B (автопауза) | ~$2.16 | Пауза коштує ~4 с на GiB оперативної пам’яті, відновлення — ~1 с (документація) |
| Fly Sprites | $2.62 | Монітор простою присипляє Sprite за кілька секунд |
| Runloop | $2.64 | Призупинення зупиняє оплату обчислень; сховище оплачується й надалі |
Показник E2B включає приблизно 17 с накладних витрат на паузу та відновлення для пісочниці обсягом 4 GiB. Ці накладні витрати є вирішальною змінною: призупинення економічно виправдане лише тоді, коли проміжок між ходами суттєво довший за сам процес призупинення.
Детектор простою Fly чітко визначає, що вважається активністю: поточний HTTP- або API-запит, виведення до stdout сесії, відкрите TCP-з’єднання або активне завдання (sprites.dev). Агент, який утримує з’єднання відкритим під час очікування, — це агент, за якого виставляють рахунок. Перенаправлення виведення у файл не вважається активністю, і це справді дає простір для оптимізації.
4. Збереження файлової системи між ходами
Саме тут платформи найбільше відрізняються, і саме тут неправильний вибір проявляється як повторне створення node_modules на кожному ході.
| Платформа | Типова поведінка під час зупинки/простою | Стан пам’яті | Механізм |
|---|---|---|---|
| E2B | onTimeout за замовчуванням має значення kill | Пауза зберігає RAM і запущені процеси | pause() / connect(), призупинені середовища зберігаються безстроково |
| Daytona | Зберігається за замовчуванням; автозупинка через 15 хв (контейнери), автопауза через 60 хв (VM) | Лише пісочниці-VM через pause/resume | Зупинка, архівування, пауза, форк, томи |
| Modal | Завершується після timeout (за замовчуванням 5 хв, максимум 24 год.) | Знімки пам’яті, термін дії 7 днів | Знімки файлової системи є образами, типовий TTL — 30 днів |
| Cloudflare | Засинає через 10 хв; диск скидається до образу | Ні | createBackup() / restoreBackup(), монтування R2, знімки поступово впроваджуються |
| Vercel | Постійні пісочниці створюють знімок файлової системи під час зупинки | Ні | Знімки, типовий термін дії 30 днів, $0.08/GB-місяць |
| Runloop | Призупинення зберігає стан | Так, через suspend/resume | Призупинення/відновлення та розгалуження знімків; лише план Pro |
| Fly Sprites | Коренева файлова система обсягом 100 GB зберігається безстроково | Контрольна точка/відновлення | Диск на основі об’єктного сховища, без образу контейнера |
Три деталі, які варто запам’ятати:
- Типові налаштування E2B знищують вашу роботу:
onTimeoutмає значенняkill, якщо під час створення не встановитиlifecycle: { onTimeout: 'pause' }. Знищений стан є остаточним, а документація не описує надсилання сигналу завершення роботи перед припиненням. Вважайте незбережену роботу втраченою. - Диск Cloudflare є ефемерним після сну: документація контейнерів прямо зазначає, що екземпляр, який прокинувся після сну, перезапускається зі свіжим диском з образу. Резервне копіювання та відновлення до R2 вже працюють; автоматичний знімок диска
persistAcrossSessions, анонсований під час загальної доступності, на момент написання статті все ще поступово впроваджувався. - Daytona розділяє збереження за класом пісочниці: контейнерні пісочниці зберігають файлову систему між зупинкою та запуском, але не підтримують паузу, тому пам’ять щоразу очищується. Пісочниці на Linux VM підтримують обидві функції. GPU-пісочниці є ефемерними та видаляються під час зупинки; результати потрібно записувати до тому.
5. Політика вихідного трафіку
Кожна платформа в цьому порівнянні тепер може запускати пісочницю без доступу до інтернету. Відмінності полягають у пріоритетах правил, деталізації та можливості змінювати політику без перезапуску.
| Платформа | Типове значення | Повне блокування | Список дозволених | Зміна під час роботи |
|---|---|---|---|---|
| E2B | Вихідний трафік відкритий | allowInternetAccess: false | Домени, IP, CIDR; шаблони | Так, updateNetwork() замінює всю політику |
| Daytona | Залежить від рівня | networkBlockAll | domainAllowList (макс. 20), networkAllowList (10 CIDR, лише IPv4) | Так, лише рівні 3/4 |
| Modal | Вихідний трафік відкритий, вхідний відсутній | block_network=True | outbound_cidr_allowlist, outbound_domain_allowlist (бета) | Альфа; лише якщо списки дозволених задано під час створення |
| Cloudflare | Вихідний трафік відкритий | enableInternet = false | allowedHosts / deniedHosts, шаблони glob | Так, обробники та правила для хостів застосовуються в реальному часі |
| Vercel | allow-all | deny-all, включно з DNS | Домени через SNI, а також резервний варіант IP/CIDR | Так, без перезапуску |
| Runloop | Мережеві політики для кожного devbox | Так | Так | Документовано для кожного devbox |
Пастка пріоритетів
E2B і Vercel розв’язують конфлікти у протилежних напрямках. В E2B правила дозволу мають пріоритет над правилами заборони: IP-адреса, яка є в обох списках, дозволена. У Vercel Sandbox заборонені діапазони мають пріоритет над дозволеними. Політика, перенесена з однієї платформи на іншу без переписування, не матиме того самого значення.
Пастка режиму відмови
E2B документує, що заблоковані TCP-з’єднання можуть виглядати успішними зсередини пісочниці. Брандмауер приймає з’єднання, перш ніж вирішити, чи дозволено призначення, тому сокет відкривається, але пакети не надходять. Перевіряйте вихідний трафік за відповіддю на рівні застосунку — статусом HTTP або рукостисканням TLS, — а не за успішним connect(). Будь-який набір тестів, який перевіряє «заблоковану мережу» через помилку з’єднання, пройде для незаблокованої пісочниці.
Справжня відмінність — ін’єкція облікових даних
Блокування вихідного трафіку — базова функція. А ось можливість для пісочниці виконати автентифікований виклик, ніколи не зберігаючи облікові дані, — ні.
Cloudflare запускає вихідні обробники у середовищі Workers, за межами пісочниці, із доступом до прив’язок Workers. Пісочниця надсилає звичайний запит, обробник додає секрет, а ctx.containerId обмежує облікові дані окремим екземпляром (документація). Vercel передає облікові дані під час вихідного запиту за допомогою зіставників, обмежених шляхом, методом, рядком запиту або заголовками, і зазначає, що брандмауер працює на хості за межами мікроVM, де код пісочниці не може його вимкнути (Vercel). E2B постачає трансформації запитів для кожного хоста в публічній бета-версії, які додають заголовки на проксі вихідного трафіку, зокрема токени ідентичності робочого навантаження, яких пісочниця ніколи не бачить. Runloop пропонує Credential Gateway з ін’єкцією непрозорих токенів.
Для агентів, які обробляють ненадійні вхідні дані, ця конструкція важливіша за холодний старт. Агент, якому через ін’єкцію в запиті дістався токен GitHub у середовищі, — це зовсім інцидент іншого масштабу, ніж агент, який може звертатися до GitHub лише через проксі, що зберігає токен.
6. Ізоляція, обмеження та дрібний шрифт
| Платформа | Ізоляція | Максимальна сесія | Конкурентність | GPU у пісочниці | Власний хостинг / BYOC |
|---|---|---|---|---|---|
| E2B | МікроVM Firecracker | 1 год. Hobby, 24 год. Pro; скидається після паузи | 20 Hobby, 100 Pro, до 1 100 | Ні | репозиторій інфраструктури Apache-2.0, Terraform + Nomad + Consul |
| Daytona | Контейнери, а також класи VM і Windows | Налаштовуваний, TTL за часом за бажанням | Залежить від рівня | Так (ефемерний) | BYOC, корпоративний рівень |
| Modal | gVisor | 5 хв. за замовчуванням, максимум 24 год. | 100 Starter, 5 000 Team | Так, повна тарифна сітка | Ні |
| Cloudflare | Контейнери на Workers | Засинає через 10 хв. простою, доступний keepAlive | 15 000 lite, 1 000+ standard-2 | Ні | Ні |
| Vercel | МікроVM Firecracker | 45 хв. Hobby, 24 год. Pro | 10 Hobby, 10 000 Pro | Ні | AWS BYOC у приватній бета-версії |
| Runloop | МікроVM | Призупинення/відновлення | Продемонстровано 10 000 | Ні | Розгортання у VPC |
| Fly Sprites | МікроVM Firecracker | Постійна | Рівні підписки | Ні | Ні |
| Northflank | МікроVM (Kata, Firecracker, gVisor) | Постійна або ефемерна | На рівні платформи | Так | Самообслуговування BYOC |
7. Як вибрати
- Обирайте Vercel Sandbox, якщо ваш агент більше очікує на моделі, ніж виконує обчислення, і ви хочете отримати найнижчий виміряний холодний старт під час пакетного запуску серед представлених платформ. Тарифікація за активним CPU дає приблизно дворазову перевагу в циклах із переважанням простою, брандмауер вихідного трафіку з брокеруванням облікових даних тепер доступний на всіх планах, а медіана 0,67 с із P99 1,12 с стала найстабільнішим розподілом у серпневому запуску.
- Обирайте E2B, якщо вам потрібна ізоляція ядра для кожної сесії під час виконання ворожого коду, збереження стану пам’яті між ходами або можливість власного хостингу. Встановіть
onTimeout: 'pause'у перший же день. Будьте готові до мінімальної вартості плану Pro у $150/міс., щойно перевищите 20 одночасних пісочниць або сесії тривалістю понад 1 годину. - Обирайте Daytona, якщо збереження стану є суттю вашого продукту і ви можете прийняти нестабільність пропускної здатності. Життєвий цикл зупинки/архівування/паузи/форка тут найрозвиненіший у категорії, форкування активної VM зі збереженням пам’яті не має повноцінного аналога в інших платформах, а тариф на обчислення відповідає E2B без мінімальної плати за підписку.
- Обирайте Modal, якщо будь-яка частина роботи агента використовує GPU. Це єдина представлена тут платформа з повною тарифною сіткою GPU безпосередньо в пісочниці — від T4 до B300. Перед рішенням врахуйте потрійний множник для пісочниці та регіональні множники.
- Обирайте Cloudflare Sandbox, якщо ваш застосунок уже працює на Workers, а модель безпеки вихідного трафіку важливіша за холодний старт. Програмовані обробники вихідного трафіку, що працюють за межами пісочниці та мають доступ до прив’язок, справді вирізняють платформу. П’ятисекундні медіани пакетного запуску — ні, тому тримайте пісочниці відкритими протягом сесії, а не створюйте одну для кожного виклику інструмента, і плануйте роботу з диском, який скидається після сну.
- Обирайте Runloop, якщо ви створюєте агента для програмування і вам потрібне оцінювання на кшталт SWE-Bench на тій самій платформі. Зверніть увагу, що призупинення/відновлення — функція, яка виправляє економіку простою, — доступна лише в плані Pro за $250/міс.
- Обирайте Fly Sprites, якщо вам потрібен постійний комп’ютер для кожного користувача, а не одноразовий для кожного виклику, і Northflank, якщо вам потрібні найнижчий опублікований тариф, підтримка GPU та самообслуговування BYOC на одній платформі.
Ключові висновки
- Виміряний холодний старт під час пакетного запуску відрізняється між постачальниками в 7 разів: Vercel — 0,67 с, Modal — 0,88 с, E2B — 1,61 с, Cloudflare — 5,06 с.
- Заяви постачальників про «менш ніж 90 мс» і «~150 мс» описують послідовне створення, а не конкурентні пакетні запуски, які насправді генерують агенти.
- Модель оплати важливіша за рекламний тариф: найдешевший постачальник змінюється залежно від того, як довго ваша пісочниця простоює.
- Лише Vercel і Cloudflare тарифікують CPU за активним використанням; E2B, Daytona, Modal і Runloop стягують плату за час роботи середовища.
- Усі представлені тут платформи тепер можуть за замовчуванням забороняти вихідний трафік, але пріоритети дозволів/заборон і поведінка TCP під час відмови відрізняються так, що це руйнує звичні припущення.
Джерела: тарифи E2B, збереження стану E2B, доступ E2B до інтернету, тарифи Daytona, збереження стану Daytona, мережеві обмеження Daytona, тарифікація Daytona, тарифи Modal, мережева взаємодія пісочниці Modal, ресурси пісочниці Modal, знімки пісочниці Modal, тарифи Cloudflare Containers, вихідний трафік Cloudflare, загальна доступність Cloudflare Sandboxes, тарифи Vercel Sandbox, брандмауер Vercel Sandbox, тарифи Runloop, Sprites та тарифи Northflank
Перекладено автоматично з англійської. Оригінал статті — за посиланням нижче.