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.

antigravity_multi_turn.py
"""
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.

antigravity_reuse.py
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/activate

Install dependencies

uv pip install -U agno google-genai sqlalchemy

Export 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.py

Full source: cookbook/90_models/google/gemini_interactions/antigravity_multi_turn.py