1. Introducción
El vibe coding, que consiste en usar agentes de IA para escribir código a partir de instrucciones en lenguaje natural, cambia el rol del desarrollador de autor a orquestador y revisor. Confiamos en que los agentes de IA hagan todo por nosotros, desde la elaboración de los documentos de especificaciones hasta la garantía de que el código satisfaga todos los requisitos. El riesgo es que, en los ciclos de iteración rápidos, se aprueba el código funcional sin una revisión de seguridad exhaustiva. Los agentes modernos suelen producir código seguro de forma predeterminada, pero "suelen" no significa "siempre", y las vulnerabilidades acumuladas se filtran a través de la revisión manual.
En este codelab, se abordan esos problemas enseñando dos enfoques para usar Antigravity como revisor: de forma interactiva durante el desarrollo con la CLI (revisas, corriges y, luego, envías la PR) y de forma automática en la integración continua con el SDK (el agente revisa cada solicitud de extracción y publica los resultados como comentario).
Qué explorarás
Codificaste con vibraciones una app de CRM de clientes potenciales: un agente de IA creó la pila completa por ti: backend de Express, base de datos de SQLite y frontend de React. Funciona. Luego, le pediste al agente que agregara dos funciones nuevas: una función de búsqueda de clientes potenciales y una función de importación y exportación masiva con estadísticas de administrador. El agente entregó ambos resultados rápidamente. El código se ejecuta, la función de características y las PR están listas.
Pero aquí está el problema: no escribiste este código. Tú la aprobaste. ¿Cómo sabes que el extremo de búsqueda no es vulnerable a la inyección de SQL? ¿Cómo sabes que la ruta de administrador no tiene una contraseña codificada? No es necesario, y leer cada línea de código generado por IA anula la ventaja de velocidad que te hizo escribir código de forma intuitiva en primer lugar.
En este codelab, se te ofrecen dos formas de resolver este problema:
- Caso 1: Revisión interactiva: Extrae una rama de funciones con vulnerabilidades, usa la CLI de Antigravity mejorada con habilidades de agente para revisar la diferencia, corrige los problemas y crea una PR limpia.
- Caso 2: Revisión automatizada: Configura una acción de GitHub potenciada por el SDK de Antigravity que revise automáticamente las PR, publique hallazgos estructurados como comentarios y responda cuando los desarrolladores hagan preguntas de seguimiento sobre la revisión.

Qué aprenderás
- Cómo la codificación de ambiente puede generar riesgos de seguridad y por qué la revisión automatizada detecta lo que la revisión manual no
- Cómo instalar y usar habilidades de agentes mantenidas por la comunidad para brindarle a la CLI de Antigravity experiencia en seguridad y revisión de código
- Cómo usar la CLI de forma interactiva para revisar la diferencia de una rama de función, corregir vulnerabilidades y crear una PR limpia
- Cómo usar el SDK de Antigravity para compilar un agente de revisión de código de solo lectura con políticas de seguridad declarativas y hooks de ciclo de vida
- Cómo implementar el agente de revisión como una acción de GitHub que revisa las PR y publica el resultado como un comentario de PR
Requisitos previos
- Una cuenta de Google Cloud
- Una cuenta de GitHub
- Conocimientos básicos de la terminal, el control de versiones y la CI/CD
2. Configuración del entorno
En este paso, se bifurca el repo de la app de CRM de clientes potenciales, se clona en Cloud Shell, se configura la CLI de Antigravity y se realiza la autenticación.
Bifurca el repositorio
Necesitas tu propia copia del repositorio porque enviarás confirmaciones y crearás solicitudes de extracción con GitHub Actions.
Ve al siguiente repositorio
Luego, haz clic en Fork. En la página de creación de la bifurcación, desmarca la casilla de verificación "Copiar solo la rama main", ya que necesitas que las otras ramas de funciones (feature/lead-search y feature/bulk-operations) se incluyan en tu bifurcación.


Abra Cloud Shell
Abre Cloud Shell en tu navegador. Cloud Shell proporciona un entorno preconfigurado con todas las herramientas que necesitas para este codelab. Haz clic en Autorizar cuando se te solicite
Luego, haz clic en "Ver" -> "Terminal" para abrir la terminal.Tu interfaz debería verse similar a esta:

Esta será nuestra interfaz principal, con el IDE en la parte superior y la terminal en la parte inferior.
Cómo autenticarse con GitHub
De forma predeterminada, Cloud Shell no tiene configuradas las credenciales de GitHub, pero ya tiene instalada la CLI de gh. Configura la autenticación para que puedas enviar confirmaciones y crear solicitudes de extracción más adelante:
gh auth login

Seleccionar Github.com
Selecciona HTTPS ( o, si ya conoces otro mecanismo, puedes elegirlo).

Luego, elige Y.

Luego, elige Login with a web browser.
**,**Se te pedirá que copies el código de un solo uso y lo ingreses cuando abras la página de acceso en el navegador. Puedes hacer Ctrl + Click en la URL de la terminal para abrir la URL de https://github.com/login/device. Se te pedirá que selecciones la cuenta a la que quieres acceder y que ingreses el código.

Después de eso, vuelve a la página de la consola de Cloud Shell y verás el resultado de la terminal de la siguiente manera:
✓ 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
Esto significa que configuraste correctamente la autenticación de tu cuenta de GitHub en Cloud Shell.
Clona el repositorio bifurcado
A continuación, clonemos el repositorio bifurcado. Reemplaza <YOUR_GITHUB_USERNAME> por tu nombre de usuario de 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
Verifica las ramas de funciones
Después de eso, verifica que ambas ramas de funciones con vulnerabilidades compiladas previamente estén disponibles en el repositorio remoto:
git branch -a | grep feature/
Deberías ver el siguiente resultado:
remotes/origin/feature/bulk-operations remotes/origin/feature/bulk-operations-solution remotes/origin/feature/email-composer remotes/origin/feature/lead-search
Verifica la CLI de Antigravity
A continuación, verificaremos que la CLI de Antigravity esté preinstalada en Cloud Shell. Verifica que esté disponible:
agy --version
Deberías ver la versión de la CLI de Antigravity instalada, p. ej., 1.0.13.
Ahora, si aún no autenticaste la CLI de Antigravity, puedes consultar este codelab para ver el proceso de autenticación con más detalle.
En este punto, deberías tener lo siguiente:
- El repo bifurcado se clonó.
- Ambas ramas de funciones son visibles.
- El comando
agyestá disponible y autenticado
3. El problema: Vulnerabilidades ocultas en las funciones codificadas con Vibe
Aquí tienes la situación: Un compañero de equipo usó un agente de IA para agregar dos funciones a la app de CRM de clientes potenciales: una función de búsqueda de clientes potenciales y operaciones de importación y exportación masivas. Ambas funciones operan correctamente. Ambos se enviaron rápidamente sin una revisión de seguridad. Revisarás ambas ramas antes de que se combinen: una de forma interactiva con la CLI y otra automáticamente con una acción de GitHub.
Examina la primera rama de funciones
Revisa la diferencia en feature/lead-search:
git diff main...origin/feature/lead-search
Esta rama agrega un extremo de búsqueda. Analiza el diff. Deberías detectar problemas como la concatenación de cadenas en consultas de SQL, la falta de validación de entrada, el registro de depuración que filtra detalles de la consulta y los mensajes de error sin procesar expuestos al cliente.
+ 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" });
+ }
...
Examina la segunda rama de la función
git diff main...origin/feature/bulk-operations
Esta rama agrega extremos de importación y exportación masivas, y un panel de estadísticas del administrador. Las vulnerabilidades aquí incluyen credenciales de administrador codificadas, extremos de administrador no autenticados, falta de validación de entrada en la importación masiva y riesgo de recorrido de ruta en el manejo de nombres de archivos de exportación.
...
+ 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" });
+ }
...
Ambas ramas agregan funciones. Ambos tienen problemas de seguridad. La pregunta es cómo detectarlos: de forma manual con la CLI (caso 1) o automáticamente con una acción de GitHub (caso 2).
4. Caso 1 : Revisión interactiva con la CLI de Antigravity
La revisión interactiva de la CLI es más valiosa justo después de una sesión de codificación de ambiente, cuando revisas el código que acabas de escribir o cuando revisas la solicitud de extracción de tus compañeros de equipo. Si hablamos de code vibing, un agente de IA generó el código de tu función rápidamente, pero es posible que no comprendas completamente cada línea que produjo, y el agente podría estar optimizado para la funcionalidad, y no necesariamente para la seguridad, según la configuración del contexto mientras desarrollas la función.
En esta situación, tenemos esos códigos con vulnerabilidades de seguridad y utilizaremos la CLI de Antigravity con habilidades de revisión de código para revisar el código de forma interactiva. Este patrón de revisión de agentes detecta vulnerabilidades que se pasan por alto cuando el rol del desarrollador cambia de escribir código a aprobar código generado por IA. También se aplica cuando revisas tu propio código escrito manualmente o la rama de un compañero de equipo antes de que pase por la CI. Tú controlas la conversación: pídele al agente que se enfoque en archivos específicos, que profundice en un hallazgo o que aplique correcciones de inmediato.
Sin habilidades de agente, la CLI de Antigravity aún puede revisar el código, pero se basa en su conocimiento general de entrenamiento, por lo que puede omitir patrones específicos del dominio o aplicar criterios de revisión incoherentes en las sesiones. Las habilidades del agente le brindan un manual estructurado: revisión de cinco ejes para la calidad y etiquetado de gravedad para la priorización. La revisión se vuelve repetible y exhaustiva, independientemente de cómo formules la instrucción.
En este paso, se usa la CLI de Antigravity con habilidades de agente para revisar la rama feature/lead-search, corregir las vulnerabilidades y crear una PR limpia.
Consulta la rama de la función
Primero, cambiemos nuestra rama a la rama Case 1:
git checkout feature/lead-search
A continuación, actualizaremos nuestra CLI de Antigravity con las habilidades de agente para realizar la revisión.
Qué son las habilidades de los agentes
Las habilidades son archivos de Markdown declarativos que le brindan al agente experiencia especializada. Una vez instaladas, se convierten en comandos de barra (p.ej., /code-review-and-quality). Piensa en ellas como si le dieras a un agente de uso general la guía de seguridad de un ingeniero sénior.
Las habilidades son portátiles entre los agentes (Antigravity, Claude Code, Cursor, etc.) y se pueden compartir a través de Git. En el caso de la CLI de Antigravity, las habilidades del espacio de trabajo (proyecto o local) se encuentran en .agents/skills/ en la raíz del proyecto. Mientras que las habilidades globales se encuentran en ~/.gemini/config/skills/. Obtén más información en esta documentación.
Para demostrar las capacidades de las habilidades del agente, este codelab usará la habilidad de revisión de código de addyosmani/agent-skills:
code-review-and-quality: Revisión de cinco ejes (corrección, legibilidad, arquitectura, seguridad y rendimiento) con etiquetado de gravedad.
Instala la habilidad del agente de revisión de código
Con el siguiente comando, la habilidad se instalará en .agents/skills/ de forma predeterminada en el directorio de trabajo actual, una instalación a nivel del espacio de trabajo. Esto significa que se convierten en parte del repositorio y se pueden confirmar junto con tu código, de modo que cada desarrollador (y canalización de CI) del proyecto obtenga las mismas habilidades de revisión automáticamente.
npx skills add addyosmani/agent-skills --skill code-review-and-quality -y
A continuación, se muestra la habilidad detallada que se puede inspeccionar en el archivo .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.
Funciones clave:
- Revisiones en cinco ejes: corrección, legibilidad, arquitectura, seguridad y rendimiento
- Etiqueta los hallazgos según la gravedad para que primero corrijas los problemas críticos
- Aplica el estándar de aprobación: "Aprobar cuando definitivamente mejore el estado general del código, incluso si no es perfecto".
Ahora estamos listos para ejecutar algunas acciones. Verifiquemos la habilidad en la CLI de Antigravity
Lanza AGY y verifica las habilidades
Ejecutemos la CLI de Antigravity
agy --dangerously-skip-permissions
Luego, ejecuta el siguiente comando:
/skills
Deberías ver las 2 habilidades que se muestran así en Workspace skills

Ejecuta la revisión de código de la diferencia de la función
Invoca la skill de seguridad y pídele que revise tu rama. Escribe esta instrucción:
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.
El agente detecta la habilidad code-review-and-quality pertinente y la activa automáticamente. Lee el diff, identifica vulnerabilidades y escribe los resultados con un plan de corrección propuesto en code_review.md.

Una vez que finalice el análisis, verás que se creó el archivo code_review.md en tu directorio de trabajo y podrás inspeccionarlo en el editor.


Revisa cada hallazgo y la corrección propuesta. Cuando estés satisfecho con el plan, pídele al agente que lo aplique:
Apply the proposed fixes from code_review.md
El agente lee el plan y aplica cada corrección planificada a los archivos fuente.

Ahora, si quieres, puedes verificar si la app se ejecuta correctamente o no después de la corrección. Para ello, instala las dependencias y ejecútala.
npm install
npm run dev
La aplicación debería ejecutarse correctamente. De lo contrario, puedes iterar y pedirle a la CLI de Antigravity que lo corrija.
Confirma los cambios y crea una PR
Ahora, si quieres, puedes enviar los cambios a tu propio repositorio. Antes de pasar al siguiente caso, primero confirmemos los cambios en la rama actual.
Primero, debemos configurar tu identidad de Git (reemplaza con tu nombre y correo electrónico) si aún no lo hiciste:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
Luego, confirma los cambios.
git add .
git commit -m "fix: address security vulnerabilities in lead search feature"
Ya usaste la CLI de Antigravity como revisor interactivo. Las habilidades le proporcionaron una metodología estructurada: la revisión de código de cinco ejes. Esto funciona cuando eres el desarrollador que revisa el código generado por IA, tu propio código o la contribución de un compañero de equipo. En la siguiente sección, automatizaremos todo este flujo para convertirlo en un proceso automatizado escalable en tu repositorio de código usando GitHub como ejemplo.
5. Caso 2 : Revisión automatizada con el SDK de Antigravity, parte 1 ( creación del agente)
En este paso, se compila un agente de revisión automatizado con el SDK de Antigravity, se implementa como una acción de GitHub y se prueba con la segunda rama de funciones. El agente revisa las PR a pedido y publica los hallazgos como comentarios en las PR.
Por qué se realiza una revisión automática
La revisión interactiva de la CLI (caso 1) funciona cuando un desarrollador realiza una revisión activa. Los equipos necesitan una revisión que se ejecute automáticamente en cada PR para detectar problemas de cualquier colaborador, herramienta y en cualquier momento. El SDK de Antigravity (google-antigravity) proporciona el mismo tiempo de ejecución del agente que la CLI, como una biblioteca de Python. Las políticas y los hooks se configuran en el código.
GitHub Actions es la plataforma integrada de integración continua y desarrollo continuo (CI/CD) de GitHub. Ejecuta flujos de trabajo (secuencias de comandos automatizadas definidas en YAML) en respuesta a eventos del repositorio, como abrir una PR, enviar una confirmación o publicar un comentario. Los flujos de trabajo se ejecutan en máquinas virtuales alojadas en GitHub y tienen acceso al código del repositorio. En este caso, usarás una acción de GitHub para ejecutar un agente de revisión de seguridad cada vez que se cree una PR.
Así funciona el flujo de revisión automática:

El SDK de Antigravity ( google-antigravity) proporciona el mismo tiempo de ejecución del agente que la CLI, como una biblioteca de Python. Escribes una secuencia de comandos de Python que configura el agente con políticas y hooks, la ejecutas dentro de una acción de GitHub y publicas los resultados como un comentario de solicitud de extracción.
Obtén una clave de API de Gemini
Antes de comenzar, necesitaremos la clave de la API de Gemini para que la consuma el SDK de Antigravity. Ve a Clave de API de Google AI Studio, crea una clave de API y, cuando sea necesario, podrás copiarla.

Esta clave se usará cuando ejecutes el agente de revisión de forma local y como un secreto de GitHub Actions más adelante.
Parte A: Crea el agente de revisión
Ahora, para el caso 2, cambia tu directorio de trabajo actual a la rama feature/bulk-operations:
git checkout feature/bulk-operations
Esta es la segunda rama de funciones del caso práctico: agrega extremos de importación y exportación masivas, y un panel de estadísticas del administrador a la app de CRM.
Configura el proyecto de Python
Actualmente, el SDK de Antigravity solo está disponible en Python, por lo que necesitaremos un entorno de Python para desarrollarlo. Usaremos uv para nuestro administrador de proyectos de Python. uv es un administrador de proyectos y paquetes de Python rápido escrito en Rust ( documentos). En este codelab, se usa para mayor velocidad y simplicidad. Si usas Cloud Shell para este instructivo, ya está preinstalado en la instancia. Consulta este instructivo si deseas instalarlo en tu
Inicializa un proyecto de Python para el agente de revisión con uv:
uv init code_review_agent
uv add --project code_review_agent google-antigravity==0.1.7
Se creará un directorio nuevo code_review_agent que contendrá los archivos necesarios del agente de revisión de código.
Instala las habilidades de revisión
El agente de revisión necesita las mismas habilidades de revisión de seguridad y código que se usan en el caso 1. Instálalos en code_review_agent/skills/ para que el agente del SDK los cargue en el tiempo de ejecución:
npx skills add addyosmani/agent-skills --skill code-review-and-quality -y
cp -r .agents/skills code_review_agent/skills
Crea el agente de revisión
Ahora, creemos code_review_agent/review_agent.py . Ejecuta el siguiente comando:
cloudshell edit code_review_agent/review_agent.py
Luego, copia el siguiente contenido en el archivo
#!/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))
Veamos las decisiones clave de diseño de este agente:
- Políticas de denegación predeterminada:
policy.deny_all()bloquea todo y, luego, permite específicamente solo las herramientas de lectura de archivos abiertos yrun_command(para git). - Aplicación en dos capas: Las políticas restringen a nivel del framework, y el gancho
enforce_safe_toolsproporciona una segunda capa, ya que solo permite comandosgita través derun_command. - Alcance de la diferencia de Git: El agente ejecuta
git diff main...HEADpara revisar solo el código modificado, no toda la base de código. - Salida estructurada con resguardo:
response_schema=ReviewResultaplica la estructura JSON a través de la herramienta de finalización del SDK. Si falla el análisis, la cadena de resguardo intenta analizartext()como JSON y, luego, devuelve texto sin procesar. - Reserva de autenticación: Usa
GEMINI_API_KEYsi está disponible; de lo contrario, recurre a Vertex AI a través de las credenciales predeterminadas de la aplicación. - Salida de archivo: Escribe los hallazgos de Markdown con formato en
code_review.md. La acción de GitHub lee este archivo y lo publica como un comentario de PR más adelante.
Prueba el agente de revisión
Prueba desde la raíz del proyecto. El SDK leerá GEMINI_API_KEY del entorno, por lo que colocaremos la clave en el entorno.
export GEMINI_API_KEY=YOUR_API_KEY
Luego, ejecuta el siguiente comando para ejecutarlo de forma local:
uv run --project code_review_agent code_review_agent/review_agent.py .
Mientras se ejecuta, mostrará algunos resultados de la consola que explican qué herramientas usa actualmente. Y puedes notarlo accediendo a las habilidades del agente security-and-hardening y 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'] ...
El agente ejecuta git diff main...HEAD, revisa solo el código modificado, escribe los hallazgos con formato en code_review.md y, luego, imprime el JSON estructurado en la consola. Puedes inspeccionar el code_review.md escrito en el editor como se muestra a continuación.

Localmente, ya funciona. Ahora pasemos a la siguiente parte. Cómo crear la configuración de la acción de GitHub
6. Caso 2 : Revisión automatizada con el SDK de Antigravity, parte 2 ( cómo configurar GitHub Actions)
Antes de comenzar, borremos el archivo code_review.md que se produjo anteriormente, si existe.
rm -f code_review.md
Ahora, deberemos crear el archivo de configuración YAML de la acción de GitHub.
mkdir -p .github/workflows
cloudshell edit .github/workflows/code_review.yml
Luego, agrega el siguiente contenido al archivo.
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
});
El flujo de trabajo se activará automáticamente cuando se abra o actualice una PR. Extrae la rama de la PR con el historial completo de Git (necesario para git diff main...HEAD), ejecuta el agente de revisión que escribe los hallazgos en code_review.md y publica el contenido del archivo como un comentario de la PR.
Ahora confirmemos todos los cambios y enviémoslos al repositorio remoto de GitHub. Ya estamos listos para probar esta integración.
git add .
git commit -m "Add AI code security-quality review agent and GitHub Action"
git push origin feature/bulk-operations
7. Caso 2 : Revisión automatizada con el SDK de Antigravity, parte 3 (prueba de la revisión de código automatizada)
Ahora, ve a la página web de tu repositorio bifurcado https://github.com/<YOUR_GITHUB_USERNAME>/leads-crm-app-demo y haz clic en Settings.

Luego, en el panel izquierdo, busca Secrets and variables, haz clic y selecciona Actions.

Luego, haz clic en New repository secret para configurar el secreto de GEMINI_API_KEY.

Después de eso, selecciona Pull Request y crea una nueva solicitud de extracción desde la rama feature/bulk_operations a la rama main de tu propio repositorio.


Después de crear la solicitud de extracción, se ejecutarán las acciones de GitHub que puedes inspeccionar en el menú Checks o cerca del botón Merge pull request.

Puedes hacer clic en las acciones en ejecución para ver los detalles y, cuando terminen, se publicarán los resultados de la revisión como un comentario de solicitud de extracción, como se muestra a continuación.

8. Conclusión
¡Felicitaciones!
Compilaste dos flujos de trabajo completos de revisión de código para detectar vulnerabilidades de seguridad en las funciones codificadas con Vibe:
- Caso 1 (interactivo): La CLI de Antigravity con habilidades de agente revisó un diff de una rama de funciones, identificó la inyección de SQL y otras vulnerabilidades, las corrigió siguiendo los patrones de OWASP y produjo una PR limpia.
- Caso 2 (automatizado): El SDK de Antigravity impulsó una acción de GitHub que revisa automáticamente cada PR y publica hallazgos de seguridad estructurados como comentarios de PR.
Qué aprendiste
- Cómo la codificación de ambiente crea riesgos de seguridad y por qué la revisión automatizada detecta lo que la revisión manual no
- Cómo instalar y usar habilidades de agentes para brindarle a la CLI de Antigravity experiencia estructurada en seguridad
- Cómo revisar de forma interactiva la diferencia de una rama de función, corregir problemas y crear una PR limpia
- Cómo compilar un agente de revisión de solo lectura con el SDK de Antigravity usando políticas de denegación predeterminada y hooks de ciclo de vida
- Cómo implementar una canalización de revisión automatizada como una acción de GitHub con asistencia interactiva de seguimiento
Realiza una limpieza
Cierra las PR
Ve a cada PR de tu bifurcación en GitHub y haz clic en Cerrar solicitud de extracción. No combines la PR feature/bulk-operations, ya que aún contiene el código vulnerable sin parches.
Borra el repositorio bifurcado (opcional)
Si ya no necesitas la bifurcación, ve a tu bifurcación en GitHub: Configuración -> desplázate hasta Zona de peligro -> Borrar este repositorio.
Próximos pasos
- Complementos y habilidades de la CLI de Antigravity: Crea habilidades y complementos personalizados
- Permisos y zona de pruebas de la CLI de Antigravity: Políticas de herramientas detalladas y zona de pruebas a nivel del SO
- SDK de Antigravity: Hooks y políticas: Patrones avanzados (limitación de frecuencia, recuperación de errores, middleware)
- Ejemplos del SDK de Antigravity:
agent_middleware.pypara patrones de producción