1. Введение
Vibe-кодирование — использование ИИ-агентов для написания кода на основе подсказок на естественном языке — смещает роль разработчика с автора на координатора и рецензента. Мы полагаемся на подготовку идеального контекста и доверяем ИИ-агентам делать все за нас, начиная с составления спецификаций и заканчивая обеспечением соответствия кода всем требованиям. Риск: в быстрых итерационных циклах функциональный код утверждается без тщательной проверки безопасности. Современные агенты часто создают безопасный код по умолчанию, но «часто» — это не «всегда», и накопленные уязвимости ускользают от ручной проверки.
В этом практическом занятии рассматриваются эти проблемы путем обучения двум подходам к использованию Antigravity в качестве рецензента: интерактивно во время разработки с помощью CLI (вы проверяете, исправляете, а затем отправляете запрос на слияние) и автоматически в рамках непрерывной интеграции с SDK (агент проверяет каждый запрос на слияние и публикует результаты в виде комментария).
Что вы изучите
Вы создали CRM-приложение для управления лидами с помощью VibeCode — и ИИ-агент разработал для вас полный стек: бэкенд на Express, база данных SQLite, фронтенд на React. Всё работает. Затем вы попросили агента добавить две новые функции: функцию поиска лидов и массовый импорт/экспорт со статистикой администратора. Агент быстро выполнил обе задачи. Код работает, функции функционируют, и запросы на слияние готовы.
Но вот в чем проблема: вы не писали этот код. Вы его одобрили. Откуда вы знаете, что конечная точка поиска не уязвима для SQL-инъекций? Откуда вы знаете, что в административном интерфейсе нет жестко закодированного пароля? Никак — и чтение каждой строки кода, сгенерированного ИИ, сводит на нет преимущество в скорости, которое изначально и побудило вас использовать Vibe Code.
В этом практическом задании представлены два способа решения:
- Пример 1 – Интерактивный анализ : Переключитесь на ветку разработки с обнаруженными уязвимостями, используйте CLI Antigravity с поддержкой навыков агента для анализа различий, исправления ошибок и создания корректного запроса на слияние (PR).
- Вариант 2 – Автоматизированная проверка : Настройте GitHub Action на базе Antigravity SDK, который автоматически проверяет запросы на слияние (PR), публикует структурированные результаты в комментариях и отвечает на дополнительные вопросы разработчиков по результатам проверки.

Что вы узнаете
- Как программирование с использованием Vibe может создавать риски безопасности и почему автоматизированная проверка выявляет то, что упускает ручная проверка.
- Как установить и использовать поддерживаемые сообществом навыки агента, чтобы обеспечить Antigravity CLI углубленным анализом безопасности и кода.
- Как использовать интерфейс командной строки в интерактивном режиме для просмотра различий в ветке разработки, исправления уязвимостей и создания корректного запроса на слияние.
- Как использовать SDK Antigravity для создания агента проверки кода только для чтения с декларативными политиками безопасности и механизмами управления жизненным циклом.
- Как развернуть агент проверки в виде GitHub Action, который проверяет запросы на слияние и публикует результат в виде комментария к запросу на слияние?
Предварительные требования
- Учетная запись Google Cloud
- Аккаунт на GitHub
- Базовые навыки работы с терминалом, системами контроля версий и CI/CD.
2. Настройка среды
На этом этапе создается форк репозитория приложения Leads CRM, клонируется он в Cloud Shell, настраивается Antigravity CLI и выполняется аутентификация.
Создайте форк репозитория.
Вам понадобится собственная копия репозитория, поскольку вы будете отправлять коммиты и создавать запросы на слияние (PR) с помощью GitHub Actions.
Перейдите в следующий репозиторий.
Затем нажмите «Создать форк» . На странице создания форка снимите флажок «Копировать только main ветку» — в ваш форк необходимо включить другие ветки разработки ( feature/lead-search и feature/bulk-operations ).


Открытая облачная оболочка
Откройте Cloud Shell в браузере. Cloud Shell предоставляет предварительно настроенную среду со всеми необходимыми инструментами для выполнения этого практического задания. При появлении запроса нажмите «Авторизовать».
Затем нажмите « Вид » -> « Терминал », чтобы открыть терминал. Ваш интерфейс должен выглядеть примерно так.

Это будет наш основной интерфейс: IDE сверху, терминал снизу.
Аутентификация через GitHub
По умолчанию в Cloud Shell не настроены учетные данные GitHub, однако там уже установлен gh CLI. Настройте аутентификацию, чтобы вы могли позже отправлять коммиты и создавать запросы на слияние:
gh auth login

Выберите Github.com
Выберите HTTPS (или, если вы уже знакомы с другим механизмом, можете выбрать его).

Затем выберите Y

Затем выберите Login with a web browser
Вам будет предложено скопировать одноразовый код и ввести его при открытии страницы входа в браузере. Вы также можете Ctrl + Click на URL-адресе в терминале, чтобы открыть URL-адрес https://github.com/login/device . Вам будет предложено выбрать учетную запись, в которую вы хотите войти, и ввести код.

После этого вернитесь на страницу консоли Cloud Shell, и вы увидите вывод терминала примерно такого вида.
✓ Authentication complete. - gh config set -h github.com git_protocol https ✓ Configured git protocol ! Authentication credentials saved in plain text ✓ Logged in as alphinside-joonix
Это означает, что вы успешно настроили аутентификацию своей учетной записи Github в Cloud Shell.
Клонируйте свой форкнутый репозиторий.
Далее, давайте клонируем ваш форкнутый репозиторий. Замените <YOUR_GITHUB_USERNAME> на ваше имя пользователя на GitHub:
git clone https://github.com/<YOUR_GITHUB_USERNAME>/leads-crm-app-demo.git
cloudshell workspace leads-crm-app-demo && cd leads-crm-app-demo
Проверьте ветки разработки функций.
После этого убедитесь, что обе ветки разработки с предварительно созданными уязвимостями доступны на удалённом репозитории:
git branch -a | grep feature/
Вы должны увидеть следующий результат.
remotes/origin/feature/bulk-operations remotes/origin/feature/bulk-operations-solution remotes/origin/feature/email-composer remotes/origin/feature/lead-search
Проверьте интерфейс командной строки Antigravity.
Далее, давайте убедимся, что Antigravity CLI предварительно установлен в Cloud Shell. Убедитесь, что он доступен:
agy --version
Вы должны увидеть версию установленного Antigravity CLI, например, 1.0.13
Если вы еще не прошли аутентификацию в Antigravity CLI, вы можете перейти к этому практическому руководству, чтобы подробнее ознакомиться с процессом аутентификации.
На данном этапе у вас должно быть следующее:
- форкнутый репозиторий
- Обе ветви имеют видимые особенности
- Команда
agyдоступна и аутентифицирована.
3. Проблема – уязвимости, скрывающиеся в функциях, разработанных с помощью Vibe Code.
Ситуация следующая: коллега использовал ИИ-агента для добавления двух функций в приложение Leads CRM — функции поиска лидов и операций массового импорта/экспорта. Обе функции работают. Обе были быстро внедрены без проверки безопасности. Вам предстоит проверить обе ветки перед их слиянием — одну интерактивно с помощью CLI, другую автоматически с помощью GitHub Action.
Изучите первую ветку разработки.
Просмотрите различия в feature/lead-search :
git diff main...origin/feature/lead-search
В этой ветке добавлена конечная точка поиска. Просмотрите изменения — вы должны обнаружить такие проблемы, как конкатенация строк в SQL-запросах, отсутствие проверки входных данных, отладочное логирование, раскрывающее детали запроса, и необработанные сообщения об ошибках, отображаемые клиенту.
+ app.get("/api/leads/search", (req, res) => {
+ const query = req.query.q as string;
+
+ if (!query) {
+ return res.status(400).json({ error: "Search query is required" });
+ }
...
Изучите вторую ветку разработки.
git diff main...origin/feature/bulk-operations
В этой ветке добавлены конечные точки для массового импорта/экспорта и панель статистики администратора. К уязвимостям относятся: жестко закодированные учетные данные администратора, неаутентифицированные конечные точки администратора, отсутствие проверки входных данных при массовом импорте и риск обхода пути при обработке имен файлов экспорта.
...
+ const ADMIN_PASSWORD = "admin123";
+
+ app.post("/api/admin/import", (req, res) => {
+ const { password, leads } = req.body;
+
+ if (password !== ADMIN_PASSWORD) {
+ return res.status(401).json({ error: "Invalid admin password" });
+ }
...
Обе ветки добавляют функциональные возможности. В обеих есть проблемы с безопасностью. Вопрос в том, как их обнаружить — вручную с помощью CLI (случай 1) или автоматически с помощью GitHub Action (случай 2).
4. Пример 1: Интерактивный обзор с использованием интерфейса командной строки Antigravity.
Интерактивный просмотр через командную строку наиболее ценен сразу после сеанса виртуального кодирования, когда вы проверяете только что написанный код или просматриваете запрос на слияние от коллег. Если мы говорим о виртуальном кодировании, то ИИ-агент быстро сгенерировал код для вашей функции — но вы можете не до конца понимать каждую строку, и агент может быть оптимизирован для функциональности, а не обязательно для безопасности, в зависимости от контекста во время разработки функции.
В этом сценарии у нас есть коды с уязвимостями безопасности, и мы будем использовать Antigravity CLI с навыками проверки кода для интерактивного анализа кода. Такой подход «агент проверяет агента» позволяет выявлять уязвимости, которые остаются незамеченными, когда роль разработчика меняется с написания кода на утверждение кода, сгенерированного ИИ. Он также применим при проверке собственного кода, написанного вручную, или ветки коллеги перед её прохождением через CI. Вы управляете процессом: можете попросить агента сосредоточиться на конкретных файлах, углубиться в обнаруженную уязвимость или немедленно применить исправления.
Без навыков агента Antigravity CLI всё ещё может проверять код, но полагается на свои общие знания, полученные в ходе обучения, которые могут упускать из виду специфические для предметной области шаблоны или применять непоследовательные критерии проверки в разных сессиях. Навыки агента предоставляют ему структурированный алгоритм действий: пятиосевая проверка качества, маркировка уровня серьёзности для определения приоритетов. Проверка становится воспроизводимой и тщательной независимо от того, как вы сформулируете запрос.
На этом этапе используется интерфейс командной строки Antigravity с навыками агента для проверки ветки feature/lead-search , устранения уязвимостей и создания корректного запроса на слияние (PR).
Ознакомьтесь с веткой разработки новых функций.
Для начала переключимся на ветку Case 1:
git checkout feature/lead-search
Далее обновим наш интерфейс командной строки Antigravity, добавив в него навыки агента для проведения проверки.
Что такое навыки агента?
Навыки — это декларативные файлы Markdown, которые наделяют агента специализированными знаниями. После установки они становятся командами с косой чертой (например, /code-review-and-quality ). Представьте, что они предоставляют универсальному агенту руководство по безопасности от опытного инженера.
Навыки переносимы между агентами (Antigravity, Claude Code, Cursor и т. д.) и могут быть использованы совместно через Git. Для Antigravity CLI навыки рабочей области (проекта/локальные) находятся в папке .agents/skills/ в корне проекта. В то время как глобальные навыки находятся в ~/.gemini/config/skills/ . Подробнее см. в этой документации.
Для демонстрации возможностей агента в этом практическом занятии будет использован навык проверки кода из библиотеки addyosmani/agent-skills :
-
code-review-and-quality– пятиосевая оценка (корректность, читаемость, архитектура, безопасность, производительность) с присвоением маркировки степени серьезности.
Установите навык агента проверки кода.
Используя приведенную ниже команду, навык будет установлен по умолчанию в папку .agents/skills/ в текущем рабочем каталоге — установка на уровне рабочей области. Это означает, что он станет частью репозитория и может быть добавлен в репозиторий вместе с вашим кодом, поэтому каждый разработчик (и конвейер CI) в проекте автоматически получит одни и те же навыки проверки.
npx skills add addyosmani/agent-skills --skill code-review-and-quality -y
Вот подробная информация о навыке, которую можно проверить в файле .agents/skills/code-review-and-quality/SKILL.md :
name: code-review-and-quality description: Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a human. Use when you need to assess code quality across multiple dimensions before it enters the main branch.
Основные возможности:
- Оценка проводилась по пяти направлениям: корректность, читаемость, архитектура, безопасность и производительность.
- Система помечает выявленные проблемы по степени серьезности, чтобы вы могли сначала устранить критические неполадки.
- Применяется стандарт утверждения: «утверждайте, если это определенно улучшает общее состояние кода, даже если это не идеально».
Теперь мы готовы приступить к выполнению. Давайте проверим навык в интерфейсе командной строки Antigravity.
Запустите AGY и проверьте навыки.
Давайте запустим Antigravity CLI.
agy --dangerously-skip-permissions
Затем выполните следующую команду.
/skills
В разделе «Навыки Workspace вы должны увидеть эти 2 навыка, отображаемые следующим образом.

Выполните проверку кода в соответствии с изменениями в функционале.
Запустите навык безопасности и попросите его проверить вашу ветку. Введите следующую команду:
Review the git diff between main and my current branch. Find any issues based on the agent skills that are appropriate for this. Write the findings and plan to fix them to code_review.md in the current working directory. Do not apply fixes yet.
Агент определяет соответствующий навык code-review-and-quality и автоматически активирует его. Он считывает различия в коде, выявляет уязвимости и записывает результаты вместе с предлагаемым планом исправления в code_review.md .

После завершения сканирования вы увидите созданный в вашей рабочей директории файл code_review.md , который сможете просмотреть в редакторе.


Проанализируйте каждое обнаруженное нарушение и предложенное решение. Как только вы будете удовлетворены планом, попросите агента его реализовать:
Apply the proposed fixes from code_review.md
Агент читает план и применяет каждое запланированное исправление к исходным файлам.

Теперь, при желании, вы можете проверить, корректно ли работает приложение после исправления, установив необходимые зависимости и запустив его.
npm install
npm run dev
Приложение должно работать корректно. Если нет, вы можете попробовать исправить это с помощью Antigravity CLI.
Сделайте коммит и создайте запрос на слияние (PR).
Теперь вы можете отправить изменения в свой собственный репозиторий, если хотите. Прежде чем перейти к следующему случаю, давайте сначала зафиксируем изменения в текущей ветке.
Сначала нам нужно настроить вашу учетную запись Git (замените на ваше имя и адрес электронной почты), если вы этого еще не сделали:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
Затем подтвердите изменения.
git add .
git commit -m "fix: address security vulnerabilities in lead search feature"
Теперь вы уже использовали Antigravity CLI в качестве интерактивного инструмента для проверки кода. Навыки, необходимые для работы с ним, обеспечили структурированную методологию — пятиосевую проверку кода. Это работает, когда вы являетесь разработчиком, проверяющим сгенерированный ИИ код, свой собственный или вклад коллеги. В следующем разделе мы автоматизируем весь этот процесс, чтобы сделать его масштабируемым автоматизированным процессом в вашем репозитории кода, используя Github в качестве примера.
5. Пример 2: Автоматизированная проверка с помощью Antigravity SDK — Часть 1 (Создание агента)
На этом этапе создается автоматизированный агент для проверки запросов на слияние (PR) с использованием SDK Antigravity, развертывается в качестве действия GitHub Action и тестируется на второй ветке разработки. Агент проверяет запросы на слияние по запросу и публикует результаты в виде комментариев к запросам.
Почему автоматизированная проверка?
Интерактивная проверка через CLI (вариант 1) работает, когда разработчик активно проверяет изменения. Командам необходима проверка, которая автоматически запускается для каждого запроса на слияние — выявляя проблемы от любого участника, с использованием любого инструмента, в любое время. SDK Antigravity ( google-antigravity ) предоставляет ту же среду выполнения агента, что и CLI, в виде библиотеки Python. Политики и хуки настраиваются в коде.
GitHub Actions — это встроенная платформа GitHub для непрерывной интеграции/непрерывной разработки (CI/CD). Она запускает рабочие процессы — автоматизированные скрипты, определенные в формате YAML, — в ответ на события в репозитории, такие как открытие запроса на слияние (PR), отправка коммита или публикация комментария. Рабочие процессы выполняются на виртуальных машинах, размещенных на GitHub, и имеют доступ к коду репозитория. В данном случае вы используете GitHub Action для запуска агента проверки безопасности каждый раз при создании запроса на слияние.
Вот как работает автоматизированный процесс проверки:

SDK Antigravity ( google-antigravity ) предоставляет ту же среду выполнения агента, что и CLI, в виде библиотеки Python. Вы пишете скрипт на Python, который настраивает агента с помощью политик и хуков, запускаете его внутри GitHub Action и публикуете результаты в виде комментария к запросу на слияние.
Получите ключ API Gemini
Прежде чем начать, нам понадобится ключ API Gemini для использования SDK Antigravity. Перейдите на страницу ключей API Google AI Studio и создайте ключ API, а при необходимости вы сможете скопировать его.

Этот ключ будет использоваться при локальном запуске агента проверки, а также в качестве секрета GitHub Actions в дальнейшем.
Часть А: Создание агента для проверки отзывов
Теперь перейдём ко второму варианту: переключим текущий рабочий каталог на ветку feature/bulk-operations .
git checkout feature/bulk-operations
Это вторая ветка разработки, основанная на данном сценарии, — она добавляет в CRM-приложение конечные точки для массового импорта/экспорта и панель административной статистики.
Настройте проект Python.
В настоящее время Antigravity SDK доступен только для Python, поэтому для его разработки нам потребуется среда Python. В качестве менеджера проектов на Python мы будем использовать uv . uv — это быстрый пакет Python и менеджер проектов, написанный на Rust ( документация ). В этом практическом занятии он используется для повышения скорости и простоты. Если вы используете Cloudshell для этого урока, он уже предустановлен в вашем экземпляре. Если вы хотите установить его локально, обратитесь к этому руководству .
Инициализируйте проект Python для агента проверки, используя uv :
uv init code_review_agent
uv add --project code_review_agent google-antigravity==0.1.7
Это создаст новую директорию code_review_agent , которая будет содержать необходимые файлы агента проверки кода.
Установите навыки проверки
Агенту проверки необходимы те же навыки в области безопасности и анализа кода, что и в первом случае. Установите их в папку code_review_agent/skills/ , чтобы агент SDK загружал их во время выполнения:
npx skills add addyosmani/agent-skills --skill code-review-and-quality -y
cp -r .agents/skills code_review_agent/skills
Создайте агента для проверки
Теперь давайте создадим code_review_agent/review_agent.py . Выполните следующую команду.
cloudshell edit code_review_agent/review_agent.py
Затем скопируйте следующее содержимое в файл.
#!/usr/bin/env python3
import asyncio
import json
import os
import sys
import pydantic
from google.antigravity import Agent, LocalAgentConfig, CapabilitiesConfig
from google.antigravity.hooks import hooks, policy
from google.antigravity import types
class Finding(pydantic.BaseModel):
file: str
line: int
severity: str
category: str
description: str
proposed_fix: str = ""
class ReviewResult(pydantic.BaseModel):
findings: list[Finding]
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
OUTPUT_FILE = "code_review.md"
SKILLS_PATHS = [
os.path.join(SCRIPT_DIR, "skills", "code-review-and-quality"),
]
review_policies = [
policy.deny_all(),
policy.allow("view_file"),
policy.allow("list_directory"),
policy.allow("search_directory"),
policy.allow("find_file"),
policy.allow("run_command"),
policy.allow("finish"),
]
@hooks.post_tool_call
async def log_tool_results(data: types.ToolResult):
result_str = str(data.result) if data.result else ""
preview = result_str[:200] + "..." if len(result_str) > 200 else result_str
print(f"[audit] tool={data.name} result_len={len(result_str)} error={data.error} preview={preview}", flush=True)
@hooks.pre_tool_call_decide
async def enforce_safe_tools(data: types.ToolCall) -> types.HookResult:
print(f"[audit] calling tool={data.name} args_keys={list(data.args.keys())}", flush=True)
if data.name == "run_command":
cmd = str(data.args.get("CommandLine", ""))
if not cmd.startswith("git "):
return types.HookResult(
allow=False,
message=f"Only git commands are allowed. Blocked: {cmd}"
)
return types.HookResult(allow=True)
async def review_code(target_dir: str) -> dict:
prompt = f"""Run `git diff main...HEAD -- ':!.github' ':!code_review_agent'` in {target_dir} to get the changes on this branch.
Review ONLY the changed code for security vulnerabilities and code quality issues.
"""
config_kwargs = dict(
system_instructions=(
"You are a code review agent. "
"You review code diffs for vulnerabilities and quality issues using the loaded skills. "
"You can run git commands to inspect the diff. "
"You NEVER modify files."
),
response_schema=ReviewResult,
skills_paths=SKILLS_PATHS,
policies=review_policies,
hooks=[log_tool_results, enforce_safe_tools],
)
if os.environ.get("GEMINI_API_KEY"):
config_kwargs["api_key"] = os.environ["GEMINI_API_KEY"]
else:
config_kwargs["vertex"] = True
config_kwargs["project"] = os.environ.get("GOOGLE_CLOUD_PROJECT")
config_kwargs["location"] = os.environ.get("GOOGLE_CLOUD_LOCATION", "global")
config = LocalAgentConfig(**config_kwargs)
async with Agent(config) as agent:
response = await agent.chat(prompt)
last_step = -1
final_text_chunks = []
async for chunk in response.chunks:
if isinstance(chunk, types.ToolCall):
final_text_chunks.clear()
if hasattr(chunk, "text") and hasattr(chunk, "step_index"):
if chunk.step_index != last_step:
final_text_chunks.clear()
last_step = chunk.step_index
final_text_chunks.append(chunk.text)
final_text = "".join(final_text_chunks)
if final_text:
print(final_text)
data = await response.structured_output()
if data and "findings" in data:
return {"findings": data["findings"]}
try:
parsed = json.loads(final_text)
if isinstance(parsed, list):
return {"findings": parsed}
if isinstance(parsed, dict) and "findings" in parsed:
return {"findings": parsed["findings"]}
except json.JSONDecodeError:
pass
return {"findings": final_text}
SEVERITY_EMOJI = {"critical": "🔴", "high": "🟠", "medium": "🟡", "low": "🔵"}
def format_markdown(result: dict) -> str:
findings = result.get("findings", [])
if isinstance(findings, str):
return f"## AI Security Review\n\n{findings}\n"
if not findings:
return "## AI Security Review\n\nNo security issues found.\n"
lines = ["## AI Security Review\n"]
for f in findings:
emoji = SEVERITY_EMOJI.get(f.get("severity", "").lower(), "⚪")
lines.append(f"### {emoji} [{f.get('severity', 'unknown').upper()}] {f.get('category', '')}\n")
lines.append(f"**{f.get('file', '')}:{f.get('line', '')}**\n")
lines.append(f"{f.get('description', '')}\n")
proposed_fix = f.get('proposed_fix', '')
if proposed_fix:
lines.append(f"**Proposed fix:** {proposed_fix}\n")
lines.append("---\n*Powered by Antigravity SDK*")
return "\n".join(lines)
if __name__ == "__main__":
target = sys.argv[1] if len(sys.argv) > 1 else "."
result = asyncio.run(review_code(target))
markdown = format_markdown(result)
with open(OUTPUT_FILE, "w") as f:
f.write(markdown)
print(f"Review written to {OUTPUT_FILE}")
print(json.dumps(result, indent=2))
Рассмотрим ключевые проектные решения в этом агенте:
- Политика запрета по умолчанию :
policy.deny_all()блокирует всё, а затем специально разрешает только открытые инструменты для чтения файлов иrun_command(для git). - Контроль на двух уровнях : политики ограничивают доступ на уровне фреймворка, а хук
enforce_safe_toolsобеспечивает второй уровень — разрешая только командыgitчерезrun_command. - Область видимости изменений в Git : агент запускает команду
git diff main...HEADдля проверки только измененного кода, а не всей кодовой базы. - Структурированный вывод с резервным вариантом :
response_schema=ReviewResultобеспечивает использование структуры JSON с помощью инструмента завершения SDK. Если парсинг не удается, резервная цепочка пытается преобразоватьtext()в JSON, а затем возвращает необработанный текст. - Резервный вариант аутентификации : используется
GEMINI_API_KEY, если он доступен, в противном случае используется Vertex AI с учетными данными приложения по умолчанию. - Вывод в файл : записывает результаты проверки в формате Markdown в файл
code_review.md— GitHub Action считывает этот файл и позже публикует его в качестве комментария к запросу на слияние.
Проверьте работу агента по проверке отзывов.
Протестируйте из корневой папки проекта. SDK будет считывать GEMINI_API_KEY из переменных окружения, поэтому давайте добавим ключ в переменные окружения.
export GEMINI_API_KEY=YOUR_API_KEY
Затем выполните следующую команду, чтобы запустить его локально.
uv run --project code_review_agent code_review_agent/review_agent.py .
Во время работы программа будет выводить в консоль информацию о том, какие инструменты она использует в данный момент. Вы также можете заметить, что она обращается к навыкам агента security-and-hardening а также code-review-and-quality
[audit] calling tool=view_file args_keys=['AbsolutePath', 'IsSkillFile'] [audit] tool=view_file result_len=47 error=None preview=Read security and hardening skill documentation [audit] calling tool=view_file args_keys=['AbsolutePath', 'IsSkillFile'] [audit] tool=view_file result_len=48 error=None preview=Read code review and quality skill documentation [audit] calling tool=run_command args_keys=['CommandLine', 'Cwd', 'WaitMsBeforeAsync'] ...
Агент запускает команду git diff main...HEAD , проверяет только измененный код, записывает отформатированные результаты в файл code_review.md и выводит структурированный JSON в консоль. Вы можете просмотреть созданный файл code_review.md в редакторе, как показано ниже.

Локально это уже работает, теперь перейдём к следующей части. Создание конфигурации Github Actions.
6. Пример 2: Автоматизированная проверка с помощью Antigravity SDK — Часть 2 (Настройка Github Actions)
Прежде чем начать, давайте удалим ранее созданный файл code_review.md , если он существует.
rm -f code_review.md
Теперь нам нужно будет создать конфигурационный файл Github Action в формате YAML.
mkdir -p .github/workflows
cloudshell edit .github/workflows/code_review.yml
Затем добавьте в файл следующее содержимое.
name: AI Code Security and Quality Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
container:
image: ghcr.io/astral-sh/uv:python3.12-bookworm
steps:
- name: Install git
run: apt-get update && apt-get install -y git
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run security review
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: |
git config --global --add safe.directory $GITHUB_WORKSPACE
uv run --project code_review_agent code_review_agent/review_agent.py .
- name: Post findings as PR comment
if: always()
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const body = fs.readFileSync('code_review.md', 'utf8');
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: body
});
Рабочий процесс будет запускаться автоматически при открытии или обновлении запроса на слияние (PR). Он переключается на ветку PR с полной историей Git (необходимой для команды git diff main...HEAD ), запускает агент проверки, который записывает результаты в файл code_review.md , и публикует содержимое файла в качестве комментария к запросу на слияние.
Теперь давайте зафиксируем все изменения и отправим их на удалённый репозиторий Github, мы готовы протестировать эту интеграцию.
git add .
git commit -m "Add AI code security-quality review agent and GitHub Action"
git push origin feature/bulk-operations
7. Пример 2: Автоматизированная проверка кода с помощью Antigravity SDK — Часть 3 (Тестирование автоматизированной проверки кода)
Теперь перейдём на страницу вашего форкнутого репозитория https://github.com/<YOUR_GITHUB_USERNAME>/leads-crm-app-demo и нажмём Settings

Затем на левой панели найдите Secrets and variables , щелкните по нему и выберите Actions

После этого нажмите кнопку New repository secret , чтобы настроить секрет GEMINI_API_KEY

После этого выберите Pull Request и создайте новый запрос на слияние из ветки feature/bulk_operations в main ветку вашего собственного репозитория.


После создания запроса на слияние будут запущены Github Actions, которые можно посмотреть в меню Checks или рядом с кнопкой « Merge pull request

Вы можете щелкнуть по выполняемым действиям, чтобы просмотреть подробности, а после завершения результаты проверки будут опубликованы в виде комментария к запросу на слияние, как показано ниже.

8. Подведение итогов
Поздравляем!
Вы разработали два полных рабочих процесса проверки кода для выявления уязвимостей безопасности в функциях, созданных с помощью Vibe:
- Пример 1 (интерактивный) : Antigravity CLI с использованием навыков агента проанализировал различия в ветке разработки, выявил уязвимости SQL-инъекций и другие уязвимости, исправил их в соответствии с шаблонами OWASP и создал корректный запрос на слияние.
- Вариант 2 (автоматизированный) : SDK Antigravity использовал GitHub Action, который автоматически проверяет каждый запрос на слияние (PR), публикуя структурированные результаты проверки безопасности в виде комментариев к запросу.
Что вы узнали
- Как кодирование с использованием Vibe создает риски безопасности и почему автоматизированная проверка выявляет то, что упускает ручная проверка.
- Как установить и использовать навыки агента для предоставления интерфейсу командной строки Antigravity структурированных экспертных знаний в области безопасности.
- Как в интерактивном режиме просмотреть различия в ветке разработки, исправить ошибки и создать корректный запрос на слияние.
- Как создать агент проверки только для чтения с помощью Antigravity SDK, используя политики запрета по умолчанию и хуки жизненного цикла.
- Как развернуть автоматизированный конвейер проверки в виде GitHub Action с интерактивной поддержкой последующих действий.
Уборка
Закройте запросы на слияние.
Перейдите к каждому запросу на слияние (PR) в вашем форке на GitHub и нажмите «Закрыть запрос на слияние» . Не объединяйте запрос на слияние feature/bulk-operations — он по-прежнему содержит неисправленный уязвимый код.
Удалите форкнутый репозиторий (необязательно).
Если вам больше не нужен этот форк, перейдите к нему на GitHub: Настройки -> прокрутите до раздела «Опасная зона» -> Удалить этот репозиторий .
Что дальше?
- Плагины и навыки Antigravity CLI – создавайте собственные навыки и плагины.
- Antigravity CLI: разрешения и песочница — детальная настройка политик инструментов и песочница на уровне операционной системы.
- Antigravity SDK: хуки и политики – расширенные шаблоны (ограничение скорости, восстановление после ошибок, промежуточное ПО)
- Примеры использования Antigravity SDK –
agent_middleware.pyдля моделирования производственных сценариев.