Головна / Статті

Середовища сандбокс зі станом та керованими агентами з ефектом антигравітації за допомогою GenAI SDK

Агенти з керуванням антигравітацією за допомогою GenAI SDK: підтримуйте роботу віддаленої сандбокс-середовища Ubuntu протягом кількох турів, під’єднуйтесь знову за ID середовища та завантажуйте знімок робочого простору.

Видавець: REACTAPP.TOP8 хв читання1737 слів

Джерела: Orchestrating with Antigravity: A Crescendo of Agents (Part 1)

Деякі розробники постійно працюють у терміналі. Якщо якийсь інструмент неможливо автоматизувати за допомогою bash, вони його ігнорують, а їхній щоденний робочий процес з використанням ШІ ґрунтується на агентах командного рядка, таких як gemini-cli та його новіший аналог antigravity-cli (agy). Це спосіб роботи „BashOps“, на відміну від групи „ClickOps“, яка віддає перевагу графічним інструментам.

Цей підхід стикається з труднощами, коли обсяг роботи агентів зростає. Керування кількома кодувальними агентами одночасно, запуск багатокрокових циклів із збереженням стану та відстеження змін у файлах може означати необхідність стеження за шістьма–дванадцятьма вікнами терміналу, розташованими на різних віртуальних робочих столах, що швидко стає психологічним тягарем. Першим елементом рішення є стабільність: надання кожному агенту робочого простору, який зберігається між викликами. Другим елементом, безпечний паралельний запуск локальних підагентів за допомогою git worktrees, є окрема тема.

Тут ми розглядаємо, як роботають станові віддалені сандбокси з керованими агентами Google Antigravity, використовуючи Google GenAI SDK та модель агента прев’ю antigravity-preview-05-2026. Ви дізнаєтесь, як знову під’єднатися до середовища контейнера та як завантажити робоче простір агента на ваш власний комп’ютер з локального шелу. Архітектура та сторона хостингу керованих агентів детально описані в інших джерелах, наприклад у статті Philipp Schmid про те, як функціонують керовані агенти зсередини. Тут основна увага приділяється їх програмному керуванню для створення циклів автоматизації.

Станові агенти на практиці

У традиційному виклику API агента немає пам’яті. Ви надсилаєте запит, агент відповідає, і робоче простір зникає. Якщо ви хочете, щоб він відредагував файл, створений у попередньому кроці, вам доводиться надсилати весь файл знову у запиті. Це коштує токенів, збільшує затримку та робить багатокрокову генерацію коду повільною та дорогою.

Відповіддю Antigravity є режимний віддалений сандбокс. Передайте "remote" як середовище, і SDK бере на себе наступне:

  1. він створює приватний, захищений контейнер Ubuntu у Google Cloud;
  2. агент виконується всередині нього;
  3. контейнер залишається активним після виклику, і повертається environment_id для його ідентифікації;
  4. будь-який наступний виклик може під’єднатися до цього ж контейнера та знайти файлову систему недоторканою.

Найпростіший спосіб повірити в це — це побачити код.

Приклад: аналітик IPO, який працює з Python

Щоб проілюструвати цю ідею, ось скрипт, який організовує сеанс роботи агента з трьома етапами та зберіганням стану. Агент виконує роль аналітика IPO. На першому етапі він досліджує інформацію про публічну лістинг компанії та зберігає звіт у форматі Markdown. На другому етапі він під’єднується до того ж контейнера, відкриває цей звіт та перетворює його на панель керування у форматі HTML із власним стилем, а також створює відповідне зображення. На третьому етапі скрипт завантажує знімок всього робочого простору.

Функції зберігання стану реалізуються за допомогою стандартного Python SDK Google GenAI шляхом виклику моделі агента preview з параметром environment="remote".

import os
import requests
import tarfile
from google import genai

client = genai.Client()
print("🚀 Turn 1: Launching SRE/Financial Agent in remote Ubuntu Sandbox...")
# Turn 1: Launch agent to research and write a report in a remote sandbox
interaction_1 = client.interactions.create(
    agent="antigravity-preview-05-2026",
    input="Research SpaceX IPO and save report as spacex-report.md.",
    environment="remote"  # Launches a remote Ubuntu sandbox
)
env_id = interaction_1.environment_id
print(f"✅ Turn 1 Complete. Container Environment ID: {env_id}")

print("\n🔄 Turn 2: Re-attaching to same container and converting to HTML...")
# Turn 2: Re-attach to the SAME sandbox and preserve conversation memory
interaction_2 = client.interactions.create(
    agent="antigravity-preview-05-2026",
    environment=env_id,                              # ← Re-attaches to same sandbox
    previous_interaction_id=interaction_1.id,       # ← Preserves conversation memory
    input="Convert that spacex-report.md file into a clean index.html webpage" +
          " with styling and generate a custom nanobanana image."
)
print("✅ Turn 2 Complete.")

print("\n📦 Turn 3: Downloading the entire container snapshot (.tar) locally...")
# Turn 3: Download the entire sandbox environment state (.tar) locally
api_key = os.environ.get("GEMINI_API_KEY")
response = requests.get(
    f"https://generativelanguage.googleapis.com/v1beta/files/environment-{env_id}:download",
    params={"alt": "media"},
    headers={"x-goog-api-key": api_key},
)
tar_path = "snapshot_env.tar"
with open(tar_path, "wb") as f:
    f.write(response.content)
print(f"✅ Snapshot downloaded to {tar_path}. Extracting...")
with tarfile.open(tar_path) as tar:
    tar.extractall(path="./workspace_extract")
# Wow! We've dumped the remote agent workspace locally!
print("🎉 Workspace extracted successfully! Check ./workspace_extract/")

Що робить скрипт, крок за кроком:

  1. Запуск та дослідження. Google запускає контейнер на машині з Ubuntu — справжню інстанцію з справжнім диском — і агент розпочинає свої дослідження.
  2. Продовження та конвертація. На другому етапі Markdown перетворюється на HTML. Це дивний підхід, адже на першому етапі можна було б безпосередньо створити HTML, але це демонструє, що можна призупинити роботу сьогодні та продовжити її завтра з недоторканою сесією, можливо, навіть через чат-додаток.
  3. Завантаження результатів локально. Саме цей етап надає все це відчуття реальності. У контейнері знаходиться справжнє робоче середовище, можливо, з клонованим репозиторієм та доданими тестами на одиниці. У цьому виконанні він містив звіт у форматі Markdown з першого етапу, файл index.html, файл зображення та таблицю стилів з другого етапу.

Відкриття файлу index.html у браузері показує створений панель керування, включаючи розділ про ситуацію «бики проти ведмедів» для аналізу інвестиційного проекту.

Приклад: прототипування невеликої дитячої гри

Той самий підхід використовується при створенні програмного забезпечення. Розглянемо гру для дітей з читанням часу з годинника. Проблема, яку вона вирішує, є конкретною: дитина, яка добре володіє арифметикою, все одно може мати труднощі з перетворенням значень на аналоговому циферблаті, наприклад, часу 19:45, на відповідний цифровий формат. Як тільки цифровий формат є у розпорядженні, обчислення різниць, наприклад, 08:45 плюс або мінус 20 хвилин, стає простим. Перешкода є суто візуальною, тому гра, яка поєднує ці два аспекти, є корисною.

Метою була мобільна гра для різних платформ у Flutter, частково тому, що часті подорожі роблять корисною додаток, який може працювати офлайн на телефоні під час польоту. Спочатку перший прототип було створено за допомогою одного скрипта зі станом. Йому було надано детальну багатокрокову інструкцію, яка вказувала, як прочитати файл вимог до продукту, реалізувати гру, запустити локальний сервер, зробити скріншот та створити запит на підтягування коду на GitHub.

У основі цього скрипта використовується SDK google-genai для налаштування віддаленої сандбокс-середовища, підключення до репозиторію git, а потім завантаження та розпакування остаточного знімка робочого простору:

from google import genai
import requests, os

client = genai.Client()
api_key    = os.environ["GEMINI_API_KEY"]
gh_token   = os.environ.get("GITHUB_TOKEN")  # optional: enables the agent to push a PR

# Mount the git repo AND inject the GitHub token as a file into the sandbox
sources = [
    {"type": "repository",
     "source": "https://github.com/palladius/orologia.io",
     "target": "/workspace"},

    {"type": "inline",
     "target": "/workspace/.github_token",
     "content": gh_token},  # ← secret injection!
]
# The prompt tells the agent exactly what to build
prompt = """
You are an expert full-stack developer agent.

The repo orologia.io is mounted at /workspace.
1. Read docs/PRD.md and implement a beautiful clock-learning game...
2. Make it stunning: analog clock with rotating hands, digital display, ..
3. Optionally screenshot it, then commit and open a PR using the token
   at /workspace/.github_token.
"""  # Full prompt: https://github.com/palladius/orologia.io/blob/main/solutions/20260615-antigravity-managed-agents/run-agent-prototype.py
# Launch remote stateful sandbox agent
interaction = client.interactions.create(
    agent="antigravity-preview-05-2026",
    input=prompt,
    environment={"type": "remote", "sources": sources}
)
# Download final snapshot locally
url = ...
response = requests.get(url, headers={"x-goog-api-key": api_key}, params={"alt": "media"})

Замість того, щоб одразу переходити до складного додатку на Flutter, агент створив швидкий прототип у звичайному HTML, CSS та JavaScript. Отримавши опис поведінки годинника та його зворотного зв’язку за один крок, агент створив реактивний додаток-годинник приблизно за хвилину. Він також розробив інтерактивні опції, які відповідали аналоговому часу кільком цифровим кнопкам відповідей.

Це продемонструвало цінність швидкого прототипування за допомогою одного агента. Масштабування понад один прототип — це інша проблема, адже реалізація повноцінної гри на Flutter з кількома підагентами одночасно створює труднощі для звичайного CLI-циклу. Безпечне вирішення цієї проблеми вимагає ізольованих робочих дерев git та спеціалізованої системи оркестрації.

До чого підходять віддалені агенти

Природне запитання — у чому насправді полягає користь цих віддалених агентів. Можна стверджувати, що все працює зручніше на localhost. Ще цікавіше розглядати їх як перший крок до створення „Dockerfiles для агентів“. Спочатку ви експериментуєте локально, а потім поступово створюєте контейнер агента з власними скриптами, папкою налаштувань інструментів та, можливо, ключем облакового облікового запису. Незабаром у вас з’являється повторюваний, самодостатній та безпечний сандбокс, де агент може отримувати доступ до Інтернету, а git clone та API-ключі стають потужною комбінацією.

Практичні рекомендації:

  • Пропустіть цей крок для одноразового дослідження. Веб-інтерфейс чи локальний CLI працюють набагато швидше.
  • Використовуйте його для повторюваних робочих процесів, де налаштування значно складніші, ніж кінцеве запитання. Якщо ви виконуєте п’ять запитів, причому перші чотири ніколи не змінюються, тоді як п’ятий завжди змінюється, це ідеальний варіант.
  • Спробуйте також інструменти командного рядка API Gemini, про які Філліп Шмід пише у своєму посібнику для розробників керованих агентів.
  • Прикладом повторюваного випадку є контейнеризований планувальник сімейних подорожей, де потрібно лише вказати напрямок, дати та обмеження. Він діє трохи як налаштована модель, але весь файловий системний простір є видимим та піддається корекції, тож пізніше можна завантажити створений index.html. Під час однієї роботи агент створив повний план подорожі на острів із картою маршруту та перевіреними посиланнями на бронювання, використовуючи три запити, з яких перші два залишилися незмінними.

    Застереження перед впровадженням

    До такої налаштування застосовуються кілька логічних перевірок:

    • Сніппет може містити все, що бачив агент, включаючи клоновані репозиторії та будь-які облікові дані, які ви підключили. Сприймайте файл tar як конфіденційний та не використовуйте ключі облікових записів сервісу в пісочницях, якщо це не є абсолютно необхідним.
    • Назва моделі тут є прев’ю з певною датою. Навмисно фіксуйте її, оскільки очікуйте змін у поведінці та кінцевих точках.
    • Зберігайте ідентифікатор середовища в надійному місці. Його втрата означає втрату можливості його повторного підключення.
    • Перевірте, скільки коштує пісочниця зі зберіганням стану та як довго вона існує, перш ніж покладатися на схеми роботи типу „повернутися завтра“.

    Пов’язана література

  • Агентне інжиніринг та зовнішній цикл: де поєднуються технології антигравітації та інструменти CLI для агентів — Технічні характеристики, методи оцінки та правила безпеки визначають принципи агентного інжинірингу. Розгляд інструменту Agents CLI від Google, його рівня використання в GCP та відмінностей технології Antigravity від інших інструментів програмування.