Gemini Interactions - Antigravity multi-turn
Continue an Antigravity interaction across turns.
Continue the conversation and explicitly reuse the sandbox. Agno stores the interaction ID in assistant-message metadata, but the current parser does not retain the returned environment ID. Retrieve it after the first run and pass it on subsequent requests as shown below.
"""
Gemini Interactions - Antigravity multi-turn
=============================================
Continue an Antigravity interaction across turns. Each response carries an
interaction_id; the next turn references it via `previous_interaction_id`
so the API only receives the new user message. The server keeps the sandbox
state (files written, packages installed, browser history) attached to the
interaction chain - subsequent turns build on what the agent already did.
Persisting the interaction_id requires a db (e.g. SqliteDb): the assistant
message stores it under provider_data, and the next turn reads it back.
Note on `environment`: when continuing a chain, the existing sandbox is
already attached server-side. Re-sending `environment="remote"` is safe
(the API treats it as a hint that's reconciled against the running env);
if you want to be explicit, swap to the returned `env_<id>` after the
first turn to make the reuse intent unambiguous.
"""
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.google import GeminiInteractions
agent = Agent(
model=GeminiInteractions(
agent="antigravity-preview-05-2026",
environment="remote",
),
add_history_to_context=True,
db=SqliteDb(db_file="tmp/data.db"),
markdown=True,
)
if __name__ == "__main__":
# Turn 1 - kick off the project. The agent provisions a sandbox, writes
# files, and produces an initial artifact.
agent.print_response(
"Plot the growth of global solar energy generation over the last "
"decade and save the plot as solar.png in the sandbox."
)
# Turn 2 - iterate on the artifact. The sandbox and solar.png are still
# there from turn 1.
agent.print_response(
"Take solar.png and produce a 3-slide HTML deck that embeds it, "
"with a title slide and a short takeaway per slide."
)
# Turn 3 - critique and revise. The agent can see the deck it just made.
agent.print_response(
"Review the deck for clarity and tighten the takeaways. Save the "
"revised version as deck_v2.html."
)Current adaptation
Use this adaptation to send both previous_interaction_id (through stored history) and the returned environment ID. Keep this mutable model instance private to this sequential conversation. Expired environments require a new sandbox; do not assume an old ID remains usable.
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.google import GeminiInteractions
model = GeminiInteractions(agent="antigravity-preview-05-2026", environment="remote")
agent = Agent(
model=model,
db=SqliteDb(db_file="tmp/antigravity.db"),
add_history_to_context=True,
markdown=True,
)
first = agent.run("Plot global solar generation over the last decade and save solar.png.")
print(first.content)
interaction_id = next(
(
message.provider_data.get("interaction_id")
for message in reversed(first.messages or [])
if message.role == "assistant" and message.provider_data
and message.provider_data.get("interaction_id")
),
None,
)
if not interaction_id:
raise RuntimeError("The first run returned no interaction ID")
interaction = model.get_client().interactions.get(id=interaction_id)
if not interaction.environment_id:
raise RuntimeError("The first interaction returned no environment ID")
model.environment = interaction.environment_id
agent.print_response("Use solar.png to create a three-slide HTML deck.")
agent.print_response("Tighten the deck's takeaways and save deck_v2.html.")Run the Example
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U agno google-genai sqlalchemyExport your Google API key
export GOOGLE_API_KEY="your_google_api_key_here"Run the example
Save the current adaptation as antigravity_reuse.py, then run:
python antigravity_reuse.pyFull source: cookbook/90_models/google/gemini_interactions/antigravity_multi_turn.py