Агент Antigravity — это универсальный управляемый агент, работающий через API Gemini. Один вызов API предоставляет вам агента, который выполняет логические рассуждения, код, управляет файлами и просматривает веб-страницы внутри вашей собственной защищенной песочницы Linux, размещенной Google.
Она работает на флэш-памяти Gemini 3.5 и использует ту же инфраструктуру, что и Antigravity IDE. Доступна через Interactions API и Google AI Studio .
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input="Read Hacker News, summarize the top 10 stories, and save the results as a PDF.",
environment="remote",
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: "Read Hacker News, summarize the top 10 stories, and save the results as a PDF.",
environment: "remote",
}, { timeout: 300000 });
console.log(interaction.output_text);
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-05-2026",
"input": "Read Hacker News, summarize the top 10 stories, and save the results as a PDF.",
"environment": "remote"
}'
Возможности
Каждый вызов позволяет развернуть песочницу Linux и запустить цикл использования инструмента. Агент планирует действия, наблюдает за результатами и повторяет процесс до тех пор, пока задача не будет выполнена.
- Выполнение кода: запуск команд Bash, Python и Node.js. Установка пакетов, запуск тестов, сборка приложений.
- Управление файлами: чтение, запись, редактирование, поиск и отображение файлов в изолированной среде. Файлы сохраняются при последующих взаимодействиях.
- Доступ к интернету: поиск в Google и получение данных по URL-адресам.
- Сжатие контекста: Автоматическое сжатие контекста (запускается при объеме ~135 тыс. токенов) для поддержки длительных многоходовых сессий без потери контекста или превышения лимита токенов.
Инструкции по использованию в несколько ходов и потоковой передаче см. в разделе «Быстрый старт» .
Поддерживаемые инструменты
По умолчанию агент имеет доступ к code_execution , google_search и url_context . Инструменты файловой системы включаются автоматически при указании параметра environment . Вы также можете определить пользовательские функции для подключения агента к вашим собственным API и инструментам. Параметр tools необходимо указывать только при настройке или ограничении набора по умолчанию, а также при добавлении пользовательских функций.
| Инструмент | Тип значения | Описание |
|---|---|---|
| Выполнение кода | code_execution | Выполнение команд оболочки (bash, Python, Node) с захватом стандартного вывода/ошибок. |
| Поиск Google | google_search | Поищите в открытом доступе в интернете. |
| Контекст URL | url_context | Загружать и читать веб-страницы. |
| Файловая система | (включается через environment ) | Чтение, запись, редактирование, поиск и отображение файлов в песочнице. Отдельный тип инструмента отсутствует; включается автоматически при настройке environment . |
| Пользовательские функции | function | Определите пользовательские функции, которые агент может запросить для выполнения. См. раздел «Вызов функций» . |
| Удаленный MCP-сервер | mcp_server | Зарегистрируйте внешние серверы протокола контекста модели (MCP) в качестве инструментов. См. Серверы MCP . |
Чтобы ограничить использование агентом определенных инструментов, передавайте только те, которые вам необходимы:
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input="Search for the latest AI research papers on reasoning and summarize them.",
environment="remote",
tools=[
{"type": "google_search"},
{"type": "url_context"},
],
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: "Search for the latest AI research papers on reasoning and summarize them.",
environment: "remote",
tools: [
{ type: "google_search" },
{ type: "url_context" },
],
}, { timeout: 300000 });
console.log(interaction.output_text);
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-05-2026",
"input": "Search for the latest AI research papers on reasoning and summarize them.",
"environment": "remote",
"tools": [
{"type": "google_search"},
{"type": "url_context"}
]
}'
Мультимодальный ввод
Агент Antigravity поддерживает многомодальный ввод данных. В настоящее время поддерживаются только text и image входные данные. Изображения должны предоставляться в виде встроенных строк, закодированных в base64 ( data ).
Python
import base64
from google import genai
client = genai.Client()
with open("path/to/chart.png", "rb") as f:
image_bytes = f.read()
interaction_inline = client.interactions.create(
agent="antigravity-preview-05-2026",
input=[
{"type": "text", "text": "Analyze this chart and summarize the trends."},
{
"type": "image",
"data": base64.b64encode(image_bytes).decode("utf-8"),
"mime_type": "image/png",
},
],
environment="remote",
)
JavaScript
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
const client = new GoogleGenAI({});
const base64Image = fs.readFileSync("path/to/chart.png", { encoding: "base64" });
const interactionInline = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: [
{ type: "text", text: "Analyze this chart and summarize the trends." },
{
type: "image",
data: base64Image,
mime_type: "image/png",
},
],
environment: "remote",
}, { timeout: 300000 });
ОТДЫХ
BASE64_IMAGE=$(base64 -w0 /path/to/chart.png)
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d "{
\"agent\": \"antigravity-preview-05-2026\",
\"input\": [
{\"type\": \"text\", \"text\": \"Analyze this chart and summarize the trends.\"},
{
\"type\": \"image\",
\"mime_type\": \"image/png\",
\"data\": \"$BASE64_IMAGE\"
}
],
\"environment\": \"remote\"
}"
Вызов функции
Вызов функций позволяет подключать агента Antigravity к внешним API и базам данных, определяя пользовательские инструменты, которые агент может вызывать. Общие сведения см. в разделе «Вызов функций с помощью API Gemini» .
Следующий пример демонстрирует взаимодействие в два этапа. Сначала агент запрашивает вызов пользовательской функции get_weather , а клиент выполняет её и возвращает результат на втором этапе.
Python
from google import genai
client = genai.Client()
# 1. Define the custom function
get_weather_tool = {
"type": "function",
"name": "get_weather",
"description": "Gets the current weather for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and country, e.g. San Francisco, USA",
}
},
"required": ["location"],
},
}
# 2. Call the agent with the custom tool (Turn 1)
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input="What is the weather in Tokyo?",
environment="remote",
tools=[
{"type": "code_execution"}, # Enable default code execution
get_weather_tool, # Add custom function
],
)
# Check if the agent requested a function call
if interaction.status == "requires_action":
# Find function calls that do not have a matching function result.
# Filesystem tools (like write_file) are also represented as function calls
# but are executed automatically by the environment.
executed_calls = {step.call_id for step in interaction.steps if step.type == "function_result"}
pending_calls = [step for step in interaction.steps if step.type == "function_call" and step.id not in executed_calls]
if pending_calls:
fc_step = pending_calls[0]
print(f"Function to call: {fc_step.name} (ID: {fc_step.id})")
print(f"Arguments: {fc_step.arguments}")
# 3. Execute the function locally (simulated get_weather()) and send the result back (Turn 2)
function_result = {
"temperature": 23,
"unit": "celsius"
}
final_interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
previous_interaction_id=interaction.id, # Reference the interaction ID
environment=interaction.environment_id,
input=[
{
"type": "function_result",
"name": fc_step.name,
"call_id": fc_step.id,
"result": function_result,
}
],
)
print(final_interaction.output_text)
# Output: The current weather in Tokyo, Japan is 23°C (Celsius).
else:
print("No pending function calls.")
else:
print(f"Interaction completed with status: {interaction.status}")
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
// 1. Define the custom function
const get_weather_tool = {
type: "function",
name: "get_weather",
description: "Gets the current weather for a given location.",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "The city and country, e.g. San Francisco, USA",
},
},
required: ["location"],
},
};
// 2. Call the agent with the custom tool (Turn 1)
const interaction = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: "What is the weather in Tokyo?",
environment: "remote",
tools: [
{ type: "code_execution" },
get_weather_tool,
],
}, { timeout: 300000 });
if (interaction.status === "requires_action") {
// Find function calls that do not have a matching function result.
// Filesystem tools (like write_file) are also represented as function calls
// but are executed automatically by the environment.
const executedCalls = new Set(
interaction.steps
.filter(s => s.type === "function_result")
.map(s => s.call_id)
);
const pendingCalls = interaction.steps.filter(
s => s.type === "function_call" && !executedCalls.has(s.id)
);
if (pendingCalls.length > 0) {
const fcStep = pendingCalls[0];
console.log(`Function to call: ${fcStep.name} (ID: ${fcStep.id})`);
// 3. Execute the function locally (simulated get_weather()) and send the result back (Turn 2)
const functionResult = {
temperature: 23,
unit: "celsius"
};
const finalInteraction = await client.interactions.create({
agent: "antigravity-preview-05-2026",
previous_interaction_id: interaction.id, // Reference the interaction ID
environment: interaction.environment_id,
input: [
{
type: "function_result",
name: fcStep.name,
call_id: fcStep.id,
result: functionResult,
}
],
}, { timeout: 300000 });
console.log(finalInteraction.output_text);
} else {
console.log("No pending function calls.");
}
} else {
console.log(`Interaction completed with status: ${interaction.status}`);
}
ОТДЫХ
# 1. Turn 1: Request function call
RESPONSE=$(curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-05-2026",
"input": "What is the weather in Tokyo?",
"environment": "remote",
"tools": [
{"type": "code_execution"},
{
"type": "function",
"name": "get_weather",
"description": "Gets the current weather for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
},
"required": ["location"]
}
}
]
}')
# Extract interaction ID, environment ID, and call ID (requires jq)
INTERACTION_ID=$(echo $RESPONSE | jq -r '.id')
ENVIRONMENT_ID=$(echo $RESPONSE | jq -r '.environment_id')
CALL_ID=$(echo $RESPONSE | jq -r '.steps[] | select(.type=="function_call") | .id')
# 2. Turn 2: Send function result back using variables
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d "{
\"agent\": \"antigravity-preview-05-2026\",
\"previous_interaction_id\": \"$INTERACTION_ID\",
\"environment\": \"$ENVIRONMENT_ID\",
\"input\": [
{
\"type\": \"function_result\",
\"name\": \"get_weather\",
\"call_id\": \"$CALL_ID\",
\"result\": {
\"temperature\": 23,
\"unit\": \"celsius\"
}
}
]
}"
Серверы MCP
Вы можете подключить агента Antigravity к внешним инструментам, зарегистрировав удаленные серверы протокола контекста модели (MCP). Агент поддерживает удаленные серверы MCP по потоковому протоколу HTTP.
При регистрации сервера MCP необходимо указать следующие поля в массиве tools :
| Поле | Тип | Необходимый | Описание |
|---|---|---|---|
type | нить | Да | Должно быть "mcp_server" . |
name | нить | Да | Уникальный идентификатор сервера. Должен быть строго в нижнем регистре и состоять из букв и цифр (соответствует ^[a-z0-9_-]+$ ). |
url | нить | Да | URL-адрес конечной точки удаленного сервера MCP. |
headers | объект | Нет | Пользовательские заголовки (например, аутентификация), отправляемые вместе с запросами. |
allowed_tools | множество | Нет | Список разрешенных к выполнению названий инструментов. Если список опущен, разрешены все инструменты. |
Python
from google import genai
client = genai.Client()
# Register a remote HTTP MCP server
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input="What is the weather in Tokyo?",
environment="remote",
tools=[{
"type": "mcp_server",
"name": "weather", # Must be lowercase
"url": "https://gemini-api-demos.uc.r.appspot.com/mcp"
}]
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: "What is the weather in Tokyo?",
environment: "remote",
tools: [{
type: "mcp_server",
name: "weather", // Must be lowercase
url: "https://gemini-api-demos.uc.r.appspot.com/mcp"
}]
}, { timeout: 300000 });
console.log(interaction.output_text);
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-05-2026",
"input": "What is the weather in Tokyo?",
"environment": "remote",
"tools": [{
"type": "mcp_server",
"name": "weather",
"url": "https://gemini-api-demos.uc.r.appspot.com/mcp"
}]
}'
Настройка агента
Вы можете расширить возможности агента Antigravity, настроив его инструкции, инструменты и окружение. Агент поддерживает подход к настройке, основанный на файловой системе: вы можете монтировать файлы, такие как AGENTS.md с инструкциями и навыками, в папку .agents/skills/ непосредственно в песочницу или передавать конфигурацию непосредственно во время взаимодействия. Вы можете изменять конфигурацию непосредственно в процессе работы, а затем сохранять ее как управляемый агент, когда будете готовы.
Подробную информацию о создании пользовательских агентов см. в разделе «Создание управляемых агентов» .
Фоновое выполнение
Задачи агента, требующие многоэтапного анализа, выполнения кода или работы с файлами, могут занимать минуты. Используйте background=True для асинхронного выполнения взаимодействия. API немедленно возвращает идентификатор взаимодействия, который вы будете опрашивать до тех пор, пока статус не будет completed или failed .
Python
import time
from google import genai
client = genai.Client()
# 1. Start the interaction in the background
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input="Run a complex analysis on the repository.",
environment="remote",
background=True,
)
print(f"Interaction started in background: {interaction.id}")
# 2. Poll for completion
while interaction.status == "in_progress":
time.sleep(5)
interaction = client.interactions.get(id=interaction.id)
if interaction.status == "completed":
print(interaction.output_text)
else:
print(f"Finished with status: {interaction.status}")
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: "Run a complex analysis on the repository.",
environment: "remote",
background: true,
});
console.log(`Interaction started in background: ${interaction.id}`);
let result = interaction;
while (result.status === "in_progress") {
await new Promise(resolve => setTimeout(resolve, 5000));
result = await client.interactions.get(interaction.id);
}
if (result.status === "completed") {
console.log(result.output_text);
} else {
console.log(`Finished with status: ${result.status}`);
}
ОТДЫХ
# 1. Start the interaction in the background
RESPONSE=$(curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Api-Revision: 2026-05-20" \
-d '{
"agent": "antigravity-preview-05-2026",
"input": "Run a complex analysis on the repository.",
"environment": "remote",
"background": true
}')
INTERACTION_ID=$(echo $RESPONSE | jq -r '.id')
# 2. Poll for results (repeat until status is "completed")
curl -s -X GET "https://generativelanguage.googleapis.com/v1beta/interactions/$INTERACTION_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Для фонового выполнения требуется store=True , который является значением по умолчанию. Для получения информации об обновлении хода выполнения в реальном времени во время фонового выполнения см. раздел «Потоковая передача фоновых взаимодействий» .
Вы можете отменить выполняющееся фоновое взаимодействие, используя метод cancel .
Python
client.interactions.cancel(id="INTERACTION_ID")
JavaScript
await client.interactions.cancel("INTERACTION_ID");
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions/INTERACTION_ID:cancel" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Многоходовое выполнение с фоновым выполнением
Когда фоновое взаимодействие включает в себя инструменты, сохраняющие состояние (например, выполнение кода в песочнице), используйте environment_id из завершенного взаимодействия, чтобы продолжить работу в той же среде. Это гарантирует, что агент продолжит с того места, где остановился, со всеми файлами и состоянием в целости и сохранности.
Python
import time
from google import genai
client = genai.Client()
# First turn: run a task in the background
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input="Clone https://github.com/google/generative-ai-python and run its tests.",
environment="remote",
background=True,
)
while interaction.status == "in_progress":
time.sleep(5)
interaction = client.interactions.get(id=interaction.id)
# Second turn: continue in the same environment
followup = client.interactions.create(
agent="antigravity-preview-05-2026",
input="Fix any failing tests and re-run them.",
previous_interaction_id=interaction.id,
environment=interaction.environment_id,
background=True,
)
while followup.status == "in_progress":
time.sleep(5)
followup = client.interactions.get(id=followup.id)
print(followup.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
// First turn: run a task in the background
let interaction = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: "Clone https://github.com/google/generative-ai-python and run its tests.",
environment: "remote",
background: true,
});
while (interaction.status === "in_progress") {
await new Promise(resolve => setTimeout(resolve, 5000));
interaction = await client.interactions.get(interaction.id);
}
// Second turn: continue in the same environment
let followup = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: "Fix any failing tests and re-run them.",
previous_interaction_id: interaction.id,
environment: interaction.environment_id,
background: true,
});
while (followup.status === "in_progress") {
await new Promise(resolve => setTimeout(resolve, 5000));
followup = await client.interactions.get(followup.id);
}
console.log(followup.output_text);
ОТДЫХ
# 1. Start first interaction in the background
RESPONSE=$(curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Api-Revision: 2026-05-20" \
-d '{
"agent": "antigravity-preview-05-2026",
"input": "Clone https://github.com/google/generative-ai-python and run its tests.",
"environment": "remote",
"background": true
}')
INTERACTION_ID=$(echo $RESPONSE | jq -r '.id')
# 2. Poll until completed (repeat until status is "completed")
RESULT=$(curl -s -X GET "https://generativelanguage.googleapis.com/v1beta/interactions/$INTERACTION_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY")
ENVIRONMENT_ID=$(echo $RESULT | jq -r '.environment_id')
# 3. Continue in the same environment
curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Api-Revision: 2026-05-20" \
-d "{
\"agent\": \"antigravity-preview-05-2026\",
\"input\": \"Fix any failing tests and re-run them.\",
\"previous_interaction_id\": \"$INTERACTION_ID\",
\"environment\": \"$ENVIRONMENT_ID\",
\"background\": true
}"
Окружающая среда
Каждый вызов создает или повторно использует песочницу Linux. Параметр environment может принимать три формы:
| Форма | Описание |
|---|---|
"remote" | Создайте новую песочницу с настройками по умолчанию. |
"env_abc123" | Используйте существующую среду по идентификатору, сохранив все файлы и состояние. |
{...} | Полный файл EnvironmentConfig с пользовательскими источниками и сетевыми правилами. |
Подробную информацию об источниках (Git, GCS, встроенные системы), сети, жизненном цикле и ограничениях ресурсов см. в разделе «Окружения» .
Триггеры
Триггеры позволяют запланировать автоматический запуск агента по расписанию cron. Триггер связывает агента, среду, приглашение командной строки и расписание в постоянный ресурс, который срабатывает без ручного вмешательства. При каждом запуске используется одна и та же среда, поэтому файлы, созданные в одном запуске, сохраняются и становятся видимыми для следующего.
Создайте триггер
Создайте триггер, указав расписание cron, часовой пояс и конфигурацию взаимодействия. Триггер будет active и сработает в следующее подходящее время cron. Сохраните полученный id для управления триггером в последующих вызовах.
Python
from google import genai
client = genai.Client()
trigger = client.triggers.create(
schedule="0 9 * * *",
time_zone="America/Argentina/Buenos_Aires",
display_name="issue-solver",
interaction={
"agent": "antigravity-preview-05-2026",
"input": "Review open PRs in my-org/my-app for new comments and address feedback. Close issues whose PRs were merged. Then check for new issues labeled 'accepted', skip any already tracked in /workspace/solved-issues/, fix the rest, and open a PR for each. Save reports to /workspace/solved-issues/.",
"environment": {
"type": "remote",
"network": {
"allowlist": [
{
"domain": "api.github.com",
"transform": {
"Authorization": "Bearer ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
},
{"domain": "github.com"},
]
},
},
},
)
print(f"Trigger created: {trigger.id}")
print(f"Next run: {trigger.next_run_time}")
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const trigger = await client.triggers.create({
schedule: "0 9 * * *",
time_zone: "America/Argentina/Buenos_Aires",
display_name: "issue-solver",
interaction: {
agent: "antigravity-preview-05-2026",
input: [{
type: "text",
text: "Review open PRs in my-org/my-app for new comments and address feedback. Close issues whose PRs were merged. Then check for new issues labeled 'accepted', skip any already tracked in /workspace/solved-issues/, fix the rest, and open a PR for each. Save reports to /workspace/solved-issues/.",
}],
environment: {
type: "remote",
network: {
allowlist: [
{
domain: "api.github.com",
transform: {
"Authorization": "Bearer ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
},
{ domain: "github.com" },
],
},
},
},
});
console.log(`Trigger created: ${trigger.id}`);
console.log(`Next run: ${trigger.next_run_time}`);
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/triggers" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"schedule": "0 9 * * *",
"time_zone": "America/Argentina/Buenos_Aires",
"display_name": "issue-solver",
"interaction": {
"agent": "antigravity-preview-05-2026",
"input": [{"type": "text", "text": "Review open PRs in my-org/my-app for new comments and address feedback. Close issues whose PRs were merged. Then check for new issues labeled accepted, skip any already tracked in /workspace/solved-issues/, fix the rest, and open a PR for each. Save reports to /workspace/solved-issues/."}],
"environment": {
"type": "remote",
"network": {
"allowlist": [
{
"domain": "api.github.com",
"transform": {
"Authorization": "Bearer ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
},
{"domain": "github.com"}
]
}
}
}
}'
Запрос CreateTrigger принимает следующие поля:
| Поле | Тип | Необходимый | Описание |
|---|---|---|---|
schedule | нить | Да | Формула Cron (например, 0 * * * * для почасового выполнения, 0 9 * * 1-5 для утренних заданий в будние дни). |
time_zone | нить | Да | Часовой пояс IANA (например, UTC , America/Argentina/Buenos_Aires ). |
display_name | нить | Нет | Удобочитаемое название для триггера. |
max_consecutive_failures | целое число | Нет | Максимальное количество сбоев до автоматической приостановки срабатывания триггера. По умолчанию: 5. |
execution_timeout_seconds | целое число | Нет | Время ожидания выполнения в секундах. По умолчанию: 600. |
interaction | объект | Да | Объект CreateInteractionRequest определяет агента, входные данные, инструменты и среду. |
Ответ включает следующие ключевые поля:
| Поле | Тип | Описание |
|---|---|---|
id | нить | Уникальный идентификатор триггера. Используйте его во всех последующих операциях. |
status | нить | Текущее состояние: active , paused или disabled . |
next_run_time | нить | Метка времени ISO 8601 следующего запланированного выполнения. |
consecutive_failure_count | целое число | Количество последовательных неудачных выполнений с момента последнего успешного завершения. |
Список триггеров
Получите все триггеры, связанные с вашим проектом.
Python
triggers = client.triggers.list()
for trigger in triggers.triggers:
print(f"{trigger.id}: {trigger.display_name} ({trigger.status})")
JavaScript
const triggers = await client.triggers.list();
for (const trigger of triggers.triggers) {
console.log(`${trigger.id}: ${trigger.display_name} (${trigger.status})`);
}
ОТДЫХ
curl -X GET "https://generativelanguage.googleapis.com/v1beta/triggers" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Возьмите спусковой крючок
Получите полную конфигурацию и текущее состояние отдельного триггера.
Python
trigger = client.triggers.get(id="TRIGGER_ID")
print(f"Schedule: {trigger.schedule}")
print(f"Next run: {trigger.next_run_time}")
JavaScript
const trigger = await client.triggers.get("TRIGGER_ID");
console.log(`Schedule: ${trigger.schedule}`);
console.log(`Next run: ${trigger.next_run_time}`);
ОТДЫХ
curl -X GET "https://generativelanguage.googleapis.com/v1beta/triggers/TRIGGER_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Пауза и возобновление
Вы можете приостановить выполнение триггера, чтобы остановить запланированные операции, и возобновить его, чтобы повторно активировать расписание. Приостановка не влияет на выполнение операций вручную.
Python
# Pause
client.triggers.update(id="TRIGGER_ID", status="paused")
# Resume
client.triggers.update(id="TRIGGER_ID", status="active")
JavaScript
// Pause
await client.triggers.update("TRIGGER_ID", { status: "paused" });
// Resume
await client.triggers.update("TRIGGER_ID", { status: "active" });
ОТДЫХ
# Pause
curl -X PATCH "https://generativelanguage.googleapis.com/v1beta/triggers/TRIGGER_ID" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{"status": "paused"}'
# Resume
curl -X PATCH "https://generativelanguage.googleapis.com/v1beta/triggers/TRIGGER_ID" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{"status": "active"}'
Удалить триггер
Удалить триггер навсегда. История предыдущих выполнений не удаляется.
Python
client.triggers.delete(id="TRIGGER_ID")
JavaScript
await client.triggers.delete("TRIGGER_ID");
ОТДЫХ
curl -X DELETE "https://generativelanguage.googleapis.com/v1beta/triggers/TRIGGER_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Немедленно запустите триггер.
Запускайте триггер по требованию, не дожидаясь следующего запланированного времени. Это работает, даже если триггер приостановлен.
Python
client.triggers.run(trigger_id="TRIGGER_ID")
JavaScript
await client.triggers.run("TRIGGER_ID");
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/triggers/TRIGGER_ID/executions" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Список выполнений
Просмотрите историю выполнения триггера. Каждое выполнение включает в себя status , временные метки, interaction_id который можно использовать для получения полного вывода взаимодействия, и environment_id подтверждающий, что все запуски используют одну и ту же песочницу.
Python
executions = client.triggers.list_executions(trigger_id="TRIGGER_ID")
for ex in executions.trigger_executions:
print(f"{ex.id}: {ex.status} ({ex.start_time} - {ex.end_time})")
# Fetch the full interaction for an execution
interaction = client.interactions.get(id=ex.interaction_id)
print(interaction.output_text)
JavaScript
const executions = await client.triggers.listExecutions("TRIGGER_ID");
for (const ex of executions.trigger_executions) {
console.log(`${ex.id}: ${ex.status} (${ex.start_time} - ${ex.end_time})`);
}
// Fetch the full interaction for an execution
const interaction = await client.interactions.get(ex.interaction_id);
console.log(interaction.output_text);
ОТДЫХ
curl -X GET "https://generativelanguage.googleapis.com/v1beta/triggers/TRIGGER_ID/executions" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Наличие и цены
Агент Antigravity доступен в режиме предварительного просмотра через API Interactions в Google AI Studio и API Gemini как для бесплатных, так и для платных проектов.
Ценообразование основано на модели оплаты по мере использования, зависящей от базовых токенов модели Gemini и инструментов, используемых агентом. В отличие от стандартного запроса в чате, который выдает один результат, взаимодействие в Antigravity представляет собой агентский рабочий процесс. Один запрос запускает автономный цикл рассуждений, выполнения инструментов, запуска кода и управления файлами. Проекты бесплатного уровня включают бесплатное ограничение количества запросов и квоту использования.
Взаимодействие антигравитации запускает многооборотные автономные циклы и может потреблять значительное количество токенов. Установите ограничения на использование токенов в вашем запросе. Вы также можете отслеживать прогресс в режиме реального времени с помощью потоковой передачи SSE или отменять выполняющиеся запросы.
Бюджетный контроль
Установите max_total_tokens в agent_config (с "type": "antigravity" ), чтобы ограничить общее количество токенов (входные + выходные + аналитические), которые может использовать взаимодействие. Кэшированные токены не учитываются в этом лимите. Когда агент достигает лимита, взаимодействие останавливается и возвращает status: "incomplete" . Лимит установлен по принципу "максимальных усилий": фактическое использование может немного превышать его в зависимости от того, когда агент проверяет бюджет между шагами.
Установите бюджет для запроса на взаимодействие в agent_config рядом с agent и input .
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
agent="antigravity-preview-05-2026",
input="Analyze the dataset in /workspace/data.csv and generate a summary report.",
agent_config={
"type": "antigravity",
"max_total_tokens": 50000
},
environment={
"type": "remote",
"sources": [
{
"type": "inline",
"target": "/workspace/data.csv",
"content": "id,name,value\n1,alpha,100\n2,beta,200\n",
}
],
}
)
print(f"Status: {interaction.status}") # "incomplete" if budget was hit
print(f"Tokens used: {interaction.usage.total_tokens}")
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: "Analyze the dataset in /workspace/data.csv and generate a summary report.",
agent_config: {
type: "antigravity",
max_total_tokens: 50000
},
environment: {
type: "remote",
sources: [
{
type: "inline",
target: "/workspace/data.csv",
content: "id,name,value\n1,alpha,100\n2,beta,200\n",
},
],
},
});
console.log(`Status: ${interaction.status}`);
console.log(`Tokens used: ${interaction.usage.total_tokens}`);
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-05-2026",
"input": "Analyze the dataset in /workspace/data.csv and generate a summary report.",
"agent_config": {
"type": "antigravity",
"max_total_tokens": 50000
},
"environment": {
"type": "remote",
"sources": [
{
"type": "inline",
"target": "/workspace/data.csv",
"content": "id,name,value\n1,alpha,100\n2,beta,200\n"
}
]
}
}'
Продолжение незавершенного взаимодействия
Когда взаимодействие возвращает status: "incomplete" , работа и контекст агента сохраняются. Отправьте новое взаимодействие, ссылаясь на исходный id взаимодействия и environment_id , чтобы продолжить с того места, где оно было прервано. Новому взаимодействию присваивается собственный бюджет max_total_tokens .
Python
# Continue from where the agent stopped
continuation = client.interactions.create(
agent="antigravity-preview-05-2026",
input="continue",
previous_interaction_id=interaction.id,
environment=interaction.environment_id,
agent_config={
"type": "antigravity",
"max_total_tokens": 50000
}
)
print(f"Status: {continuation.status}")
JavaScript
const continuation = await client.interactions.create({
agent: "antigravity-preview-05-2026",
input: "continue",
previous_interaction_id: interaction.id,
environment: interaction.environment_id,
agent_config: {
type: "antigravity",
max_total_tokens: 50000
}
});
console.log(`Status: ${continuation.status}`);
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"agent": "antigravity-preview-05-2026",
"input": "continue",
"previous_interaction_id": "INTERACTION_ID",
"environment": "ENVIRONMENT_ID",
"agent_config": {
"type": "antigravity",
"max_total_tokens": 50000
}
}'
Ориентировочные затраты
Затраты варьируются в зависимости от сложности задачи. Агент самостоятельно определяет необходимое количество вызовов инструментов, выполнений кода и операций с файлами. Приведенные ниже оценки основаны на результатах выполнения.
| Категория задачи | Входные токены | Выходные токены | Типичная стоимость |
|---|---|---|---|
| Исследования и обобщение информации | 100 тыс.–500 тыс. | 10k–40k | 0,30–1,00 долл. США |
| Создание документов и контента | 100 тыс.–500 тыс. | 15–50 тыс. | 0,30–1,30 долл. |
| Проектирование процессов и систем | 100 тыс.–400 тыс. | 10–30 тыс. | 0,25–0,80 долл. США |
| Обработка и анализ данных | 300к–3М | 30 тыс.–150 тыс. | 0,70–3,25 долл. США |
Как правило, 50–70% входных токенов кэшируются. Сложные агентные рабочие процессы с множеством вызовов инструментов могут накапливать 3–5 миллионов токенов за одно взаимодействие, что обходится примерно в 5 долларов.
В течение периода предварительного просмотра плата за вычислительные ресурсы среды (процессор, память, выполнение в песочнице) не взимается .
Ограничения
- Статус предварительного просмотра: Агент антигравитации и API взаимодействий. Функции и схемы могут изменяться.
- Неподдерживаемая конфигурация генерации: следующие параметры не поддерживаются и возвращают ошибку 400:
temperature,top_p,top_k,stop_sequences,max_output_tokens. - Структурированный вывод: Агент Antigravity не поддерживает структурированный вывод.
- Недоступные инструменты:
file_search,computer_useиgoogle_mapsпока не поддерживаются. - Ограничения удаленного MCP: транспорт Server-Sent Events (SSE) не поддерживается (используйте Streamable HTTP). Кроме того,
nameсервера должно быть строго в нижнем регистре и состоять из букв и цифр (использование заглавных букв приводит к стандартной ошибке400 Bad Request). - Инструмент для работы с файловой системой: В настоящий момент такого инструмента нет. Он является частью
environment. - Требование к хранилищу: Для выполнения агента с
background=Trueтребуетсяstore=True. - Вызов функций только в режиме сохранения состояния: Вызов функций поддерживается только в режиме сохранения состояния. Для продолжения хода необходимо использовать
previous_interaction_id; восстановление истории вручную (режим без сохранения состояния) не поддерживается. - Неподдерживаемые типы мультимодальных данных. В настоящее время не поддерживаются аудио-, видео- и документные входные данные. Допускаются только текст и изображения.
Что дальше?
- Быстрый старт : многоэтапные диалоги и потоковая передача данных.
- Создание пользовательских агентов : пользовательские инструкции, навыки и сохранение агентов.
- Среда : конфигурация песочницы, источники, сеть.
- Deep Research Agent : выполнение длительных исследовательских задач.
- API для взаимодействия : базовый API.