Аддаленыя пясочніцы са станам з Antigravity Managed Agents і GenAI SDK
Antigravity managed agents з GenAI SDK: трымаем аддаленую пясочніцу Ubuntu жывой паміж крокамі, падключаемся зноў па ідэнтыфікатары асяроддзя і забіраем здымак рабочай прасторы.
Крыніцы: Orchestrating with Antigravity: A Crescendo of Agents (Part 1)
Дзеяе некалькі распрацоўшчыкаў выключна ў тэрмінале. Калі які-небудзь інструмент нельга запісаць у вачоркі з Bash, яны яго ігнаруюць, а ўсё іхнё ўлікнёвае робіццё з AI апыходзіць да агентаў у команднай лініі, такіх як gemini-cli і яго новэйшы аналог antigravity-cli (agy). Гэта спосаб працы, вядомы як „BashOps“, на адміністрацыю з працэю з графічнымі інструментамі, які выбірае група „ClickOps“.
Такі падход сталкаецца з проблемамі, калі колькасць агентаў зрастае. Работа з калькама кодаваючых агентаў адразу, кераванне багатоэтапнымі цыкламі з збераганнем стану і назіранне за змянамі файлаў можа значыць неабходнасць керавання шасцю-дзванаццаць вікнамі тэрмінала, распакаванымі на столькі ж віртуальных рабочых столаў, што быстра стае псіхічным трыбам. Першы элемент рашэння — гэта стойкасць: надаць кожнаму агенту рабочую прастору, якая застаецца пасля кожнага вызову. Другі элемент — безпечная паралельная праца локальных падагентаў з адной стороны за дапамогою git worktrees, і гэта ўжо аднае з аддзельных тэм.
Хутчэй паглядзім, як працуюць remote sandboxes з станамі з адмініструемымі агентамі Google Antigravity, выкарыстоўваючы Google GenAI SDK і мадэль агента для прэвью antigravity-preview-05-2026. Вы пазнаеце, як знову прайсці ў сераўерную срэду кантэйнераў і як выкарыстаць локальную шэл, каб перанесці рабочую прастору агента на свой камп’ютар. Архітэктура і сторона хоставання адмініструемых агентаў добра расказаныя ў іншых джэрагах, напрыклад, у статыі Philipp Schmid пра тое, як адмініструемыя агенты працуюць унутрана. Увага тут сконцентравана на тым, як програмна кераваць імі для стварэння цыклаў автаматызацыі.
Агенты з станамі на практыцы
У традыцыянальным вызовах API агента няма памяці. Вы адправляеце запіт, агент адпавядае, і рабочая прастора знікае. Калі вы хачаце, каб агент вырэшыў файл, які ён створыў у пярэднім раундзе, вам трэба адправіць весь файл знову ў запыт. Гэта коштае токэнаў, паўзае час адпаведзі і робіць генераванне коду у калькох раундах медленным і дорогім.
Адпаведзь Antigravity — гэта становыя удалённыя сандбоксы. Перадаце "remote" як сераўісную срэду, і SDK займецца наступным:
- яно стварае прыватны, захішчаны кантэйнер Ubuntu у Google Cloud;
- агент выконваецца ўнутры яго;
- кантэйнер застаецца актыўным пасля вызову, і вяртаецца
environment_id, які служыць для яго ідэнтыфікаціі; - будзь-які наступны вызов можа праўяцца да таго ж контэйнера і знайсці файловую сістэму недастрынутай.
Найпростый спосаб разабрацца ў гэтым — паўтарыць код.
Прыёмак: аналітык 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/")
Што робіць скрыпт, па кроках:
- Запуск і анаіз. Google запускае кантэйнер на машыне Ubuntu — рэальны экземпляр з рэальным дыскам, і агент пачынае свой анаіз.
- Продажчык і пераклад. На другым кроцы Markdown ператвараецца ў HTML. Гэта дыўны падзел, адколі на першым кроцы можна было бы безпосерэдна стварыць HTML, але гэта паказвае, што можна заставіць працу на час і продыржыць яе завтра, калі сеанс застане недыскрэтным, можа, нават з дапамогою чат-прыемніка.
- Зялленне рэзультатаў локальна. Гэта і частка, якая дае вражанне рэальнасці. Кантэйнер мае рэальную рабочую прастору, можа, з клонаваным рэпазітарыем і даданымі тэстамі. У гэтым запуску ён меў справаздача у фармаце Markdown з першага крока, файл
index.html, файл з імэжам і стайл-шыт з другага крока.
Адзёванне файла index.html у прыглыце паказвае створаную панель керування, укладзеную ў тым і раздзіл пра супернацыю быкаў і медвяў для аналізу інвэстыцыйнага праекту.
Прыклад: стварэнне пратэтапа маленькай гры для дзятэй
Той жа прынцып прыменшыцца і для стварэння програмнага забавы. Разглядзім гру для дзятэй, якая навучае чытаць час. Проблема, яку яна рашае, ёсць конкрэтная: дзеця, якія добра ведаюць арыметыку, можаць затрудняцца з перакладам аналаговага цыферблата, напрыклад, які паказвае 19:45, у цыфровы выраз таго часу. Калі цыфровы фармат вядом, вырахунак разлікі, такія як 08:45 плюс або мінус 20 хвілін, стае простым. Адзінака ёсць чыста візуальная, таму гра, якая спалучае гэтыя два падходы, ёсць корыстной.
Метай была стварыць мобільную гру на разных платформах з іспользованнем Flutter, часткова таму, што частыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтарылівыя паўтар
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 працуюць набліжна шырэй.
Прыклад паўтаральнага варыянта — гэта кантэйнерызаваны планавальнік паўтаральных паўтарацкіх паўтарацак, дзе вы проста указваеце пункт прыбыці, даты і абмежэнні. Ён працуе трохі як настроены модэль, але весь файловы сістэма ўможліва адзірваць і налагодзіць, таму пасля цьго можна завантажыць створаны index.html. У аднам выкананні агент стварыў цэлы план паўтаральнай паўтарацкі, з картою маршруту і паўнаважнымі лінкамі на броніраванне, на адной з трох запросоў, пры чым першыя два засталіся незмяннымі.
Увагі пры ўжыцці
Для такой настройкі пасуюць калькіяцькі пераконтрольванні:
- Снімак можа мець усё, што бачыў агент, уклучаючы кланаваныя рэпазітарыі і любыя крантэнціі, якія вы запускалі. Спрыяйце файлу tar як даўерліваму і не калічыце ключы сэрвіснага акаунту ў сэндбоксах, як толькі гэта не ўсёціна неабходна.
- Назва модэлю тут ўжо ўстарэлы прэвю. Намерна закрэпіце яе і чакайце, што поведзенне і канцэнты будуць змініцца.
- Зберагачыце ID арэнай ў чымусь стойкім. Яго пазбіранне значыць пазбіранне можлівасці паўтарнага падключэння.
- Пераконтрольванце, сколькі коштае сэндбокс з станам і як дуго ён існуе, перш чым паспалагацца на працэсы тыпу „вернуцца завтра“.
Супаўязаная літэратура
- Агенты для паралельнага кодавання з Git Worktrees, дырэктар і Antigravity 2.0 — Як агент-коордынатор, git worktrees для кожнага агента і тракты, базаваныя на задачах, дазволяюць стварыць дзесятак функцыяй SRE за апошнія пяць гадзін, а таксама даюць наставы па пытаннях HITL і правілах чыстай кансалідаціі.
- Перадача завадзей Apps Script у Linux Sandbox агента Gemini Managed Agent — Як Google Apps Script можа кераваць стойкім Linux sandbox, перадаваць файлы ў Drive за дапамою ggsrun, абходзіць ліміты па розмеру 50 MB і токенах, а таксама запускаць задачы Playwright, FFmpeg і esbuild.