Google Antigravity SDK for building AI agents
Project description
Google Antigravity SDK
The Google Antigravity SDK is a Python SDK for building AI agents powered by Antigravity and Gemini. It provides a secure, scalable, and stateful infrastructure layer that abstracts the agentic loop, letting you focus on what your agent does rather than how it runs.
Installation
pip install google-antigravity
[!IMPORTANT] The Google Antigravity SDK relies on a compiled runtime binary that is included in the platform-specific wheels published to PyPI. Cloning this repository alone is not sufficient to run the SDK. Always install from PyPI with
pip install google-antigravityto obtain the binary.
Quickstart
Get started by running one of the examples/, such as the
hello_world example with:
export GEMINI_API_KEY="your_api_key_here"
python ./examples/getting_started/hello_world.py
Concepts
Simple Agent
The Agent class is the easiest way to get started. It manages the full
lifecycle — binary discovery, tool wiring, hook registration, and policy
defaults — behind a single async context manager.
The system_instructions parameter is optional.
import asyncio
from google.antigravity import Agent, LocalAgentConfig
async def main():
config = LocalAgentConfig(
system_instructions="You are an expert assistant for codebase navigation.",
# api_key="your_api_key_here",
)
async with Agent(config) as agent:
response = await agent.chat("What files are in the current directory?")
print(await response.text())
async def run():
await main()
if __name__ == "__main__":
asyncio.run(run())
Streaming Responses
To stream agent output in real-time (e.g., for fluid UI or console applications), simply iterate over the ChatResponse object using an async for loop. The stream wrapper natively yields conversational str text tokens as they arrive, with zero network overhead:
import asyncio
import sys
from google.antigravity import Agent, LocalAgentConfig
async def main():
config = LocalAgentConfig()
async with Agent(config) as agent:
# Returns instantly — does not block
response = await agent.chat("Write a short poem about space.")
async for token in response:
sys.stdout.write(token)
sys.stdout.flush()
print()
asyncio.run(main())
Sugared Thoughts & Tool Call Streams (Advanced)
For more complex use cases, you can also stream internal model reasoning/thinking or intercept tool call dispatches in real-time using dedicated async stream properties:
# 1. Stream reasoning/thinking deltas
async for thought in response.thoughts:
show_thinking_bubble(thought)
# 2. Stream strongly-typed ToolCall events
async for call in response.tool_calls:
show_executing_spinner(call.name)
By default, Agent runs in read-only mode for safety. Pass
capabilities=CapabilitiesConfig() to enable all tools (including writes).
Interactive Loop
from google.antigravity import Agent, LocalAgentConfig, CapabilitiesConfig
from google.antigravity.utils.interactive import run_interactive_loop
config = LocalAgentConfig(
# api_key="your_api_key_here",
capabilities=CapabilitiesConfig(),
)
async with Agent(config) as agent:
await run_interactive_loop(agent)
Advanced Usage with Conversation
For full control over the connection lifecycle, use Conversation with a
ConnectionStrategy directly. Conversation is a stateful session that
accumulates step history, provides a chat() convenience method, and exposes
state introspection:
import asyncio
from google.antigravity.connections.local import LocalConnectionStrategy
from google.antigravity.conversation.conversation import Conversation
from google.antigravity.tools.tool_runner import ToolRunner
from google.antigravity.types import GeminiConfig
async def main():
tool_runner = ToolRunner()
strategy = LocalConnectionStrategy(
tool_runner=tool_runner,
# gemini_config=GeminiConfig(api_key="your_api_key_here"),
)
async with Conversation.create(strategy) as conversation:
# High-level: one-call send + collect
response = await conversation.chat("What files are here?")
print(await response.text())
# Step history accumulates automatically
print(f"Total steps: {len(conversation.history)}")
print(f"Turns: {conversation.turn_count}")
print(f"Last response: {conversation.last_response}")
# Low-level: streaming steps
await conversation.send("Tell me more.")
async for step in conversation.receive_steps():
if step.is_complete_response:
print(step.content)
asyncio.run(main())
Features
Multimodal Ingestion
Pass rich multimedia file attachments (images, videos, audio, and documents) to the agent alongside textual instruction prompt lists.
You can attach assets directly using content classes (perfect for in-memory bytes) or conveniently from a filesystem path (which automatically resolves types and guesses MIME formats):
from google.antigravity import Agent, LocalAgentConfig
from google.antigravity.types import Image, from_file
config = LocalAgentConfig(system_instructions="You are an expert software architect.")
async with Agent(config) as agent:
# 1. Flat filesystem shortcut (automatically resolves as types.Document)
pdf_spec = from_file("spec.pdf")
# 2. Direct constructor instantiation (perfect for in-memory raw bytes)
chart_image = Image(
data=b"raw_png_bytes_here",
mime_type="image/png",
description="Architecture blueprint"
)
# Send a mixed list of text instructions and content classes
prompt = [
"Analyze this chart against the specification and list three security vulnerabilities:",
chart_image,
pdf_spec
]
response = await agent.chat(prompt)
print(await response.text())
Custom Tools
Register Python functions as tools that the agent can call:
def get_weather(city: str) -> str:
"""Returns the current weather for a city."""
return f"It's sunny in {city}."
config = LocalAgentConfig(
tools=[get_weather],
)
async with Agent(config) as agent:
response = await agent.chat("What's the weather in Tokyo?")
MCP Integration
Connect to external MCP servers and expose their tools to the agent:
from google.antigravity import Agent, LocalAgentConfig
from google.antigravity.types import McpStdioServer
config = LocalAgentConfig(
mcp_servers=[McpStdioServer(command="npx", args=["my-mcp-server"])],
)
async with Agent(config) as agent:
response = await agent.chat("Use the MCP tools to help me.")
Hooks and Policies
Control agent behavior with a declarative policy system:
from google.antigravity import Agent, LocalAgentConfig, CapabilitiesConfig
from google.antigravity.hooks.policy import deny, allow, ask_user, enforce
from google.antigravity.utils.interactive import run_interactive_loop
policies = [
deny("*"), # Block all tools by default
allow("view_file"), # Allow reading files
ask_user("run_command", handler=my_handler), # Ask before running commands
]
config = LocalAgentConfig(
capabilities=CapabilitiesConfig(),
policies=policies,
)
async with Agent(config) as agent:
await run_interactive_loop(agent)
Triggers
Run background tasks that react to external events and push messages into the agent:
from google.antigravity import Agent, LocalAgentConfig
from google.antigravity.triggers import every
from google.antigravity.utils.interactive import run_interactive_loop
async def check_status(ctx):
await ctx.send("Check the deployment status.")
config = LocalAgentConfig(
triggers=[every(60, check_status)],
)
async with Agent(config) as agent:
await run_interactive_loop(agent)
Architecture
The SDK follows a three-layer architecture:
| Layer | Purpose | Key Classes |
|---|---|---|
| Layer 1 — Simplified | High-level, batteries-included entry point | Agent |
| Layer 2 — Session | Stateful session with history and convenience methods | Conversation, ChatResponse, Step, ToolCall, AgentConfig, HookRunner, ToolRunner, TriggerRunner |
| Layer 3 — Adapter | Transport and backend abstraction | Connection, ConnectionStrategy, LocalConnection |
Component Documentation
For more detailed documentation on specific components, see:
- Agent — High-level, batteries-included entry point.
- Connections — Transport and backend abstraction.
- Conversation — Stateful session management.
- Hooks — Agent lifecycle interception and policies.
- MCP — Model Context Protocol integration.
- Tools — In-process tool execution.
- Triggers — Background tasks and external events.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file google_antigravity-0.1.0-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: google_antigravity-0.1.0-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 42.5 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
291b072c0c29df86eb6c3c880fc5606f913be062900665c6bd482466d6d4873d
|
|
| MD5 |
3d1ec20e83696d5a23b342d50fc2d1d2
|
|
| BLAKE2b-256 |
df70812e0ef107fa1b71c3079eab7162928b0695ce59646e19ea32bfb2a21ab7
|
Provenance
The following attestation bundles were made for google_antigravity-0.1.0-py3-none-manylinux_2_17_x86_64.whl:
Publisher:
google-antigravity-py@oss-exit-gate-prod.iam.gserviceaccount.com
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
google_antigravity-0.1.0-py3-none-manylinux_2_17_x86_64.whl -
Subject digest:
291b072c0c29df86eb6c3c880fc5606f913be062900665c6bd482466d6d4873d - Sigstore transparency entry: 1574445803
- Sigstore integration time:
-
Token Issuer:
https://accounts.google.com -
Service Account:
google-antigravity-py@oss-exit-gate-prod.iam.gserviceaccount.com
-
Statement type:
File details
Details for the file google_antigravity-0.1.0-py3-none-manylinux_2_17_aarch64.whl.
File metadata
- Download URL: google_antigravity-0.1.0-py3-none-manylinux_2_17_aarch64.whl
- Upload date:
- Size: 38.8 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a56fc3a489f0c47c6a6fd439d35199b837a1e4eadaa64726288c026715b24fd
|
|
| MD5 |
f93eddef15a0300c758869285325b12d
|
|
| BLAKE2b-256 |
216bba0147caab068ab7a3f76ed88b0f831aed859efdeded4f9e4dd3bf006ca8
|
Provenance
The following attestation bundles were made for google_antigravity-0.1.0-py3-none-manylinux_2_17_aarch64.whl:
Publisher:
google-antigravity-py@oss-exit-gate-prod.iam.gserviceaccount.com
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
google_antigravity-0.1.0-py3-none-manylinux_2_17_aarch64.whl -
Subject digest:
7a56fc3a489f0c47c6a6fd439d35199b837a1e4eadaa64726288c026715b24fd - Sigstore transparency entry: 1574445767
- Sigstore integration time:
-
Token Issuer:
https://accounts.google.com -
Service Account:
google-antigravity-py@oss-exit-gate-prod.iam.gserviceaccount.com
-
Statement type:
File details
Details for the file google_antigravity-0.1.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: google_antigravity-0.1.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 34.4 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
066b4a64e7f20899edb10028af1d1cf113616fd2c0fcbf3374018343f9b9067b
|
|
| MD5 |
c6324dab33002d08775c94b606d7918c
|
|
| BLAKE2b-256 |
59281008e2d5ee2a2209a7bc3821cde154417ac47f9e4c64f3e9931cbf8d088e
|
Provenance
The following attestation bundles were made for google_antigravity-0.1.0-py3-none-macosx_11_0_arm64.whl:
Publisher:
google-antigravity-py@oss-exit-gate-prod.iam.gserviceaccount.com
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
google_antigravity-0.1.0-py3-none-macosx_11_0_arm64.whl -
Subject digest:
066b4a64e7f20899edb10028af1d1cf113616fd2c0fcbf3374018343f9b9067b - Sigstore transparency entry: 1574445723
- Sigstore integration time:
-
Token Issuer:
https://accounts.google.com -
Service Account:
google-antigravity-py@oss-exit-gate-prod.iam.gserviceaccount.com
-
Statement type: