Antigravity
Run Google's Managed Agents (Gemini API) as an AgentOS agent using AntigravityAgent.
AntigravityAgent wraps Managed Agents in the Gemini API so a Google-managed,
sandboxed agent can be served through AgentOS. A single API call spins up a secure Linux environment where the agent
plans, executes code, searches the web, and reads/writes files. AgentOS handles sessions, streaming, and the UI.
Save the following as antigravity_agent.py. After the Install step, start it with python antigravity_agent.py. Later snippets are alternatives or fragments using the same imports.
from agno.agents.antigravity import AntigravityAgent
from agno.db.sqlite import SqliteDb
from agno.os import AgentOS
agent = AntigravityAgent(name="Antigravity")
agent_os = AgentOS(
agents=[agent],
db=SqliteDb(db_file="tmp/agentos.db"),
)
app = agent_os.get_app()
if __name__ == "__main__":
agent_os.serve(app="antigravity_agent:app", reload=True)Install
uv pip install "agno[os]"
export GEMINI_API_KEY=...Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
name | str | None | Display name for the agent. |
id | str | None | Unique identifier. Auto-generated from name if unset. |
api_key | str | None | Gemini API key. Falls back to GEMINI_API_KEY. |
base_url | str | Gemini v1beta | API base URL. |
agent | str | "antigravity-preview-05-2026" | Base agent identifier sent to the API, or a custom agent name. |
sources | List[Dict] | None | GCS / repository / inline sources to seed the sandbox on the first turn. |
custom_agent_name | str | None | Register/invoke a named custom agent instead of the base agent. |
custom_agent_instructions | str | None | System instructions for the custom agent definition. |
custom_agent_description | str | None | Description for the custom agent definition. |
timeout | int | 600 | Per-request timeout in seconds. |
db | BaseDb | None | Database for session persistence. Required for cross-turn sandbox reuse. |
Concepts
Sessions and environment persistence
Each interaction provisions a managed Linux sandbox and returns an environment_id. When a db is configured,
AntigravityAgent persists that id (and the previous interaction id) in the session, so subsequent turns with the
same session_id request reuse of that sandbox. Reuse is subject to provider retention: inactive environments expire after seven days, and an expired environment ID returns 404.
Without a db, every turn provisions a fresh sandbox (no cross-turn reuse).
from agno.agents.antigravity import AntigravityAgent
from agno.db.sqlite import SqliteDb
agent = AntigravityAgent(name="Antigravity", db=SqliteDb(db_file="tmp/antigravity.db"))
agent.print_response("Write a file notes.txt containing 'hello'.", session_id="s1")
agent.print_response("Read notes.txt back to me.", session_id="s1") # same sandboxSeeding the environment with sources
Pass sources to preload files into the sandbox before the agent runs. Three source types are supported:
inline content, Google Cloud Storage, and Git repositories.
agent = AntigravityAgent(
name="Antigravity",
sources=[
{"type": "inline", "content": "agno is an agent framework", "target": "/workspace/about.txt"},
# {"type": "gcs", "source": "gs://my-bucket/data/", "target": "/data"},
# {"type": "repository", "source": "https://github.com/user/repo", "target": "/repo"},
],
)The provider source limits are 1 MB per inline file and 2 MB total. Agno's directory helper still applies its own 75 KB per-file limit and skips larger or binary files.
Custom agents
Register the custom agent through the provider's current registration API, then pass its existing ID to Agno:
agent = AntigravityAgent(name="Haiku Bot", agent="your_registered_agent_id")
agent.print_response("Topic: autumn.")The current ensure_custom_agent() helper sends name and instructions, while the provider registration contract uses id and system_instruction. Automatic custom registration is an upstream compatibility dependency; use a provider-registered ID until the adapter is aligned. The base agent example above does not use this helper.
Defining an agent from a directory
from_agent_directory builds an agent from a local folder following the Managed Agents layout:
agent.yaml (id, base_agent, description, system_instruction), AGENTS.md (overrides
system_instruction), workspace/ (mounted at the sandbox root), and skills/ (mounted under
/.agents/skills/). The default register=True calls the registration helper described above. Use register=False to inspect a local definition without registration; this does not create a usable remote custom agent.
Create my-agent/agent.yaml first:
id: my-haiku-agent
base_agent: antigravity-preview-05-2026
system_instruction: Answer with a haiku.from agno.agents.antigravity import AntigravityAgent
agent = AntigravityAgent.from_agent_directory("./my-agent", register=False)
print(agent.custom_agent_name)Register the definition through the provider API before invoking that custom ID.
Downloading an environment snapshot
Pull the sandbox filesystem (after a run modified it) as a tar archive.
agent = AntigravityAgent(name="Antigravity", db=SqliteDb(db_file="tmp/antigravity.db"))
agent.print_response("Create /workspace/report.md", stream=False, session_id="s1")
agent.download_environment_snapshot("snapshot.tar", session_id="s1")Examples
AgentOS deployment
Serve an Antigravity agent through AgentOS with persisted sessions.
Standalone usage
Call the agent directly with .run() and .print_response().
Sessions
Reuse the sandbox across turns with session_id.
Environment sources
Preload files into the sandbox from inline / GCS / repo sources.
Custom agents
Register and invoke a named custom agent.
Agent from a directory
Define an agent from agent.yaml + AGENTS.md + workspace/ + skills/.
Environment snapshot
Download the sandbox filesystem as a tar archive.