1. Pengantar
Vibe coding — menggunakan agen AI untuk menulis kode dari perintah bahasa alami — mengubah peran developer dari penulis menjadi pengelola dan peninjau. Kita mengandalkan penyiapan konteks yang sempurna dan memercayai agen AI untuk melakukan semua hal untuk kita, yang mungkin dimulai dari menyusun dokumen spesifikasi hingga memastikan kode memenuhi semua persyaratan. Risikonya: dalam siklus iterasi yang cepat, kode fungsional disetujui tanpa peninjauan keamanan yang menyeluruh. Agen modern sering kali menghasilkan kode yang aman secara default, tetapi "sering kali" tidak berarti "selalu", dan kerentanan yang terakumulasi lolos dari peninjauan manual.
Codelab ini mengatasi masalah tersebut dengan mengajarkan dua pendekatan untuk menggunakan Antigravity sebagai peninjau: secara interaktif selama pengembangan dengan CLI (Anda meninjau, memperbaiki, lalu membuat PR), dan secara otomatis dalam Integrasi Berkelanjutan dengan SDK (agen meninjau setiap Permintaan Pull dan memposting hasilnya sebagai komentar)
Yang akan Anda jelajahi
Anda telah mengodekan aplikasi CRM Prospek — agen AI membangun stack lengkap untuk Anda: backend Express, database SQLite, frontend React. Berhasil. Kemudian, Anda meminta agen untuk menambahkan dua fitur baru: fungsi penelusuran prospek dan impor/ekspor massal dengan statistik admin. Agen memberikan kedua hasil dengan cepat. Kode berjalan, fitur berfungsi, dan PR siap.
Namun, inilah masalahnya: Anda tidak menulis kode ini. Anda menyetujuinya. Bagaimana Anda tahu bahwa endpoint penelusuran tidak rentan terhadap injeksi SQL? Bagaimana Anda tahu bahwa rute admin tidak memiliki sandi yang di-hardcode? Anda tidak perlu melakukannya — dan membaca setiap baris kode buatan AI akan menghilangkan keunggulan kecepatan yang membuat Anda melakukan pengkodean insting sejak awal.
Codelab ini memberi Anda dua cara untuk menyelesaikannya:
- Kasus 1 – Peninjauan interaktif: Periksa cabang fitur dengan kerentanan, gunakan Antigravity CLI yang ditingkatkan dengan kemampuan agen untuk meninjau perbedaan, perbaiki masalah, dan buat PR yang bersih.
- Kasus 2 – Peninjauan otomatis: Siapkan GitHub Action yang didukung oleh Antigravity SDK yang secara otomatis meninjau PR, memposting temuan terstruktur sebagai komentar, dan merespons saat developer mengajukan pertanyaan lanjutan tentang peninjauan.

Yang akan Anda pelajari
- Cara vibe coding dapat menimbulkan risiko keamanan dan alasan peninjauan otomatis menangkap apa yang terlewat oleh peninjauan manual
- Cara menginstal dan menggunakan kemampuan agen yang dikelola komunitas untuk memberikan keahlian peninjauan kode dan keamanan mendalam pada Antigravity CLI
- Cara menggunakan CLI secara interaktif untuk meninjau perbedaan cabang fitur, memperbaiki kerentanan, dan membuat PR yang bersih
- Cara menggunakan Antigravity SDK untuk membuat agen peninjauan kode hanya baca dengan kebijakan keamanan deklaratif dan hook siklus proses
- Cara men-deploy agen peninjauan sebagai GitHub Action yang meninjau PR dan memposting hasilnya sebagai komentar PR
Prasyarat
- Akun Google Cloud
- Akun GitHub
- Pemahaman dasar tentang Terminal, Kontrol Versi, dan CI/CD
2. Penyiapan Lingkungan
Langkah ini akan membuat fork repo aplikasi Leads CRM, meng-clone-nya di Cloud Shell, menyiapkan Antigravity CLI, dan melakukan autentikasi.
Buat fork repositori
Anda memerlukan salinan repo Anda sendiri karena Anda akan mengirimkan commit dan membuat PR dengan GitHub Actions.
Buka repositori berikut
Kemudian, klik Fork. Di halaman pembuatan fork, hapus centang pada kotak "Salin cabang main saja" — Anda memerlukan cabang fitur lainnya (feature/lead-search dan feature/bulk-operations) yang disertakan dalam fork Anda.


Buka Cloud Shell
Buka Cloud Shell di browser Anda. Cloud Shell menyediakan lingkungan yang telah dikonfigurasi sebelumnya dengan semua alat yang Anda perlukan untuk codelab ini. Klik Authorize saat diminta untuk
Kemudian, klik "View" -> "Terminal" untuk membuka terminal.Antarmuka Anda akan terlihat mirip dengan ini

Ini akan menjadi antarmuka utama kita, IDE di atas, terminal di bawah
Mengautentikasi dengan GitHub
Secara default, Cloud Shell tidak memiliki kredensial GitHub yang dikonfigurasi secara default, tetapi sudah menginstal gh CLI. Siapkan autentikasi agar Anda dapat mengirimkan commit dan membuat PR nanti:
gh auth login

Pilih Github.com
Pilih HTTPS ( atau jika Anda sudah memahami mekanisme lainnya, silakan pilih mekanisme tersebut)

Kemudian, pilih Y

Kemudian, pilih Login with a web browser
**,**Anda akan diminta untuk menyalin kode sekali pakai dan memasukkannya saat membuka halaman login di browser. Anda dapat Ctrl + Click URL di terminal untuk membuka URL https://github.com/login/device. Anda akan diminta untuk memilih akun yang ingin Anda gunakan untuk login dan memasukkan kode.

Setelah itu, kembali ke halaman konsol Cloud Shell dan Anda akan melihat output terminal seperti ini
✓ 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
Artinya, Anda telah berhasil menyiapkan autentikasi akun GitHub di Cloud Shell.
Membuat clone repositori yang Anda buat fork-nya
Selanjutnya, buat clone repositori yang Anda buat fork-nya. Ganti <YOUR_GITHUB_USERNAME> dengan nama pengguna GitHub Anda:
git clone https://github.com/<YOUR_GITHUB_USERNAME>/leads-crm-app-demo.git
cloudshell workspace leads-crm-app-demo && cd leads-crm-app-demo
Memverifikasi cabang fitur
Setelah itu, pastikan kedua cabang fitur dengan kerentanan bawaan tersedia di remote:
git branch -a | grep feature/
Anda akan melihat output berikut:
remotes/origin/feature/bulk-operations remotes/origin/feature/bulk-operations-solution remotes/origin/feature/email-composer remotes/origin/feature/lead-search
Verifikasi Antigravity CLI
Selanjutnya, mari kita verifikasi bahwa Antigravity CLI sudah terinstal di Cloud Shell. Pastikan tersedia:
agy --version
Anda akan melihat versi Antigravity CLI yang terinstal, misalnya 1.0.13
Sekarang, jika Anda belum mengautentikasi Antigravity CLI, Anda dapat membuka codelab ini untuk melihat proses autentikasi secara lebih mendetail.
Pada tahap ini, Anda akan memiliki hal berikut:
- repo yang di-fork di-clone
- kedua cabang fitur terlihat
- Perintah
agytersedia dan diautentikasi
3. Masalah – Kerentanan yang Tersembunyi di Fitur yang Dikodekan dengan Vibe
Berikut skenarionya: rekan tim menggunakan agen AI untuk menambahkan dua fitur ke aplikasi CRM Prospek — fungsi penelusuran prospek dan operasi impor/ekspor massal. Kedua fitur berfungsi. Keduanya dikirim dengan cepat tanpa peninjauan keamanan. Anda akan meninjau kedua cabang sebelum digabungkan — satu secara interaktif dengan CLI, satu lagi secara otomatis dengan GitHub Action.
Periksa cabang fitur pertama
Tinjau perbedaan pada feature/lead-search:
git diff main...origin/feature/lead-search
Cabang ini menambahkan endpoint penelusuran. Pindai perbedaan — Anda akan menemukan masalah seperti penggabungan string dalam kueri SQL, validasi input yang tidak ada, logging debug yang membocorkan detail kueri, dan pesan error mentah yang diekspos ke klien.
+ 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" });
+ }
...
Periksa cabang fitur kedua
git diff main...origin/feature/bulk-operations
Cabang ini menambahkan endpoint impor/ekspor massal dan dasbor statistik admin. Kerentanan di sini mencakup kredensial admin yang dikodekan secara permanen, endpoint admin yang tidak diautentikasi, tidak ada validasi input pada impor massal, dan risiko path traversal dalam penanganan nama file ekspor.
...
+ 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" });
+ }
...
Kedua cabang menambahkan fitur fungsional. Keduanya memiliki masalah keamanan. Pertanyaannya adalah cara menangkapnya — secara manual dengan CLI (Kasus 1) atau secara otomatis dengan GitHub Action (Kasus 2).
4. Kasus 1 : Peninjauan Interaktif dengan Antigravity CLI
Peninjauan CLI interaktif paling berguna tepat setelah sesi vibe coding, meninjau kode yang baru saja Anda tulis, atau meninjau permintaan pull rekan tim Anda. Jika kita berbicara tentang vibe-coding, agen AI menghasilkan kode fitur Anda dengan cepat, tetapi Anda mungkin tidak sepenuhnya memahami setiap baris yang dihasilkan, dan agen mungkin dioptimalkan untuk fungsi, dan belum tentu keamanan, bergantung pada konfigurasi konteks saat Anda mengembangkan fitur.
Dalam skenario ini, kita memiliki kode dengan kerentanan keamanan dan akan menggunakan Antigravity CLI dengan keterampilan peninjauan kode untuk meninjau kode secara interaktif. Pola agen meninjau agen ini menangkap kerentanan yang lolos saat peran developer beralih dari menulis kode menjadi menyetujui kode yang dihasilkan AI. Hal ini juga berlaku saat meninjau kode yang ditulis secara manual atau cabang rekan setim sebelum melalui CI. Anda mengontrol percakapan: minta agen untuk berfokus pada file tertentu, mempelajari temuan lebih dalam, atau menerapkan perbaikan secara langsung.
Tanpa keterampilan agen, Antigravity CLI masih dapat meninjau kode, tetapi mengandalkan pengetahuan pelatihan umumnya, yang mungkin melewatkan pola khusus domain atau menerapkan kriteria peninjauan yang tidak konsisten di seluruh sesi. Keterampilan agen memberi agen playbook terstruktur: peninjauan lima sumbu untuk kualitas, pemberian label tingkat keparahan untuk penentuan prioritas. Peninjauan menjadi dapat diulang dan menyeluruh, terlepas dari cara Anda menyusun perintah.
Langkah ini menggunakan Antigravity CLI dengan kemampuan agen untuk meninjau cabang feature/lead-search, memperbaiki kerentanan, dan membuat PR yang bersih.
Periksa cabang fitur
Pertama, mari kita ubah cabang ke cabang Case 1:
git checkout feature/lead-search
Selanjutnya, mari upgrade Antigravity CLI dengan agent skills untuk melakukan peninjauan
Apa itu keterampilan agen
Keahlian adalah file markdown deklaratif yang memberikan keahlian khusus kepada agen. Setelah diinstal, perintah ini akan menjadi perintah garis miring (misalnya, /code-review-and-quality). Anggap saja perintah ini memberikan playbook keamanan engineer senior kepada agen tujuan umum.
Keahlian dapat digunakan di berbagai agen (Antigravity, Claude Code, Cursor, dll.) dan dapat dibagikan melalui Git. Untuk Antigravity CLI, kemampuan ruang kerja (project/lokal) berada di .agents/skills/ di root project. Sementara itu, keahlian global berada di ~/.gemini/config/skills/. Lihat selengkapnya di dokumentasi ini
Untuk mendemonstrasikan kemampuan keterampilan agen, codelab ini akan menggunakan keterampilan peninjauan kode dari addyosmani/agent-skills:
code-review-and-quality– Peninjauan lima sumbu (kebenaran, keterbacaan, arsitektur, keamanan, performa) dengan pemberian label tingkat keparahan.
Menginstal kemampuan agen peninjauan kode
Dengan menggunakan perintah di bawah, skill akan diinstal ke .agents/skills/ secara default di direktori kerja saat ini — penginstalan tingkat ruang kerja. Artinya, file tersebut menjadi bagian dari repositori dan dapat di-commit bersama kode Anda, sehingga setiap developer (dan pipeline CI) dalam project akan mendapatkan keterampilan peninjauan yang sama secara otomatis.
npx skills add addyosmani/agent-skills --skill code-review-and-quality -y
Berikut adalah keterampilan mendetail yang dapat diperiksa pada file .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.
Kemampuan utama:
- Peninjauan di lima sumbu: ketepatan, keterbacaan, arsitektur, keamanan, dan performa
- Memberi label pada temuan berdasarkan tingkat keparahan sehingga Anda dapat memperbaiki masalah kritis terlebih dahulu
- Menerapkan standar persetujuan: "setujui jika pasti meningkatkan kualitas kode secara keseluruhan, meskipun tidak sempurna"
Sekarang kita siap melakukan beberapa eksekusi. Mari kita verifikasi skill di Antigravity CLI
Meluncurkan AGY dan memverifikasi keterampilan
Mari jalankan Antigravity CLI
agy --dangerously-skip-permissions
Kemudian, jalankan perintah berikut
/skills
Anda akan melihat 2 skill yang ditampilkan seperti ini di bagian Workspace skills

Jalankan peninjauan kode diff fitur
Panggil skill keamanan dan minta skill tersebut untuk meninjau cabang Anda. Ketik perintah ini:
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.
Agen mendeteksi skill code-review-and-quality yang relevan dan mengaktifkannya secara otomatis. Alat ini membaca perbedaan, mengidentifikasi kerentanan, dan menulis temuan dengan rencana perbaikan yang diusulkan ke code_review.md.

Setelah selesai memindai, Anda akan melihat file code_review.md yang dibuat di direktori kerja dan dapat memeriksanya di editor


Tinjau setiap temuan dan perbaikan yang diusulkan. Setelah Anda puas dengan rencana tersebut, minta agen untuk menerapkannya:
Apply the proposed fixes from code_review.md
Agen membaca rencana dan menerapkan setiap perbaikan yang direncanakan ke file sumber.

Sekarang, jika mau, Anda dapat memeriksa apakah aplikasi berjalan dengan benar atau tidak setelah perbaikan dengan menginstal dependensi dan menjalankannya
npm install
npm run dev
Aplikasi akan berjalan dengan benar. Jika tidak, Anda dapat melakukan iterasi dan meminta Antigravity CLI untuk memperbaikinya
Lakukan commit dan buat PR
Sekarang, Anda dapat mengirimkan perubahan ke repositori Anda sendiri jika mau. Sebelum melanjutkan ke kasus berikutnya, mari kita lakukan commit perubahan ke cabang saat ini terlebih dahulu.
Pertama, kita perlu mengonfigurasi identitas Git Anda (ganti dengan nama dan email Anda sendiri) jika Anda belum melakukannya:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
Kemudian, lakukan commit perubahan
git add .
git commit -m "fix: address security vulnerabilities in lead search feature"
Sekarang, Anda telah menggunakan Antigravity CLI sebagai peninjau interaktif. Keterampilan tersebut memberikan metodologi terstruktur — tinjauan kode lima sumbu. Fitur ini berfungsi saat Anda adalah developer yang meninjau kode buatan AI, kode Anda sendiri, atau kontribusi rekan tim. Di bagian berikutnya, kita akan mengotomatiskan semua alur ini untuk menjadikannya sebagai proses otomatis yang dapat diskalakan di repositori kode Anda dengan menggunakan GitHub sebagai contoh
5. Kasus 2 : Peninjauan Otomatis dengan Antigravity SDK - Bagian 1 ( Membuat Agen)
Langkah ini membangun agen peninjauan otomatis menggunakan Antigravity SDK, men-deploy-nya sebagai GitHub Action, dan mengujinya terhadap cabang fitur kedua. Agen meninjau PR sesuai permintaan dan memposting temuan sebagai komentar PR.
Alasan peninjauan otomatis
Peninjauan CLI interaktif (Kasus 1) berfungsi saat developer secara aktif melakukan peninjauan. Tim memerlukan peninjauan yang berjalan secara otomatis di setiap PR — menangkap masalah dari kontributor, alat, dan kapan saja. Antigravity SDK (google-antigravity) menyediakan runtime agen yang sama seperti CLI, sebagai library Python. Kebijakan dan hook dikonfigurasi dalam kode.
GitHub Actions adalah platform Continuous Integration/Continuous Development (CI/CD) bawaan GitHub. Alur kerja ini menjalankan skrip otomatis yang ditentukan dalam YAML sebagai respons terhadap peristiwa repositori seperti membuka PR, mengirimkan commit, atau memposting komentar. Alur kerja berjalan di mesin virtual yang dihosting GitHub dan memiliki akses ke kode repositori. Dalam hal ini, Anda menggunakan GitHub Action untuk menjalankan agen peninjauan keamanan setiap kali permintaan pull dibuat.
Berikut cara kerja alur peninjauan otomatis:

Antigravity SDK ( google-antigravity) menyediakan runtime agen yang sama seperti CLI, sebagai library Python. Anda menulis skrip Python yang mengonfigurasi agen dengan kebijakan dan hook, menjalankannya di dalam GitHub Action, dan memposting hasilnya sebagai komentar PR.
Mendapatkan kunci Gemini API
Sebelum memulai, kita akan memerlukan Kunci API Gemini untuk digunakan oleh Antigravity SDK. Buka Kunci API Google AI Studio, buat kunci API, dan salin Kunci API kapan pun diperlukan

Kunci ini akan digunakan saat menjalankan agen peninjauan secara lokal dan sebagai secret GitHub Actions nanti
Bagian A: Membangun agen ulasan
Sekarang, untuk Kasus 2, alihkan direktori kerja Anda saat ini ke cabang feature/bulk-operations:
git checkout feature/bulk-operations
Ini adalah cabang fitur kedua dari skenario — cabang ini menambahkan endpoint impor/ekspor massal dan dasbor statistik admin ke aplikasi CRM.
Menyiapkan project Python
Antigravity SDK saat ini hanya tersedia di Python, sehingga kita memerlukan lingkungan Python untuk mengembangkannya. Kita akan menggunakan uv untuk pengelola project Python. uv adalah pengelola paket dan project Python yang cepat dan ditulis dalam Rust ( docs). Codelab ini menggunakannya untuk kecepatan dan kesederhanaan. Jika Anda menggunakan Cloud Shell untuk tutorial ini, alat tersebut sudah diinstal sebelumnya di instance. Lihat tutorial ini jika Anda ingin menginstalnya untuk lokal
Lakukan inisialisasi project Python untuk agen peninjau menggunakan uv:
uv init code_review_agent
uv add --project code_review_agent google-antigravity==0.1.7
Tindakan ini akan membuat direktori baru code_review_agent yang akan berisi file agen peninjauan kode yang diperlukan.
Menginstal keterampilan ulasan
Agen peninjau memerlukan keterampilan keamanan dan peninjauan kode yang sama dengan yang digunakan dalam Kasus 1. Instal ke code_review_agent/skills/ sehingga agen SDK memuatnya saat runtime:
npx skills add addyosmani/agent-skills --skill code-review-and-quality -y
cp -r .agents/skills code_review_agent/skills
Membuat agen ulasan
Sekarang, mari kita buat code_review_agent/review_agent.py . Jalankan perintah berikut
cloudshell edit code_review_agent/review_agent.py
Kemudian, salin konten berikut ke file
#!/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))
Menjelaskan keputusan desain utama dalam agen ini:
- Kebijakan tolak secara default:
policy.deny_all()memblokir semuanya, lalu secara khusus mengizinkan alat pembacaan file hanya buka danrun_command(untuk git). - Penerapan di dua lapisan: kebijakan membatasi di tingkat framework, dan hook
enforce_safe_toolsmenyediakan lapisan kedua — hanya mengizinkan perintahgitmelaluirun_command. - Pencakupan diff Git: agen menjalankan
git diff main...HEADuntuk meninjau hanya kode yang diubah, bukan seluruh codebase. - Output terstruktur dengan penggantian:
response_schema=ReviewResultmenerapkan struktur JSON melalui alat penyelesaian SDK. Jika penguraian gagal, rantai penggantian akan mencoba menguraitext()sebagai JSON, lalu menampilkan teks mentah. - Penggantian autentikasi: menggunakan
GEMINI_API_KEYjika tersedia, atau melakukan penggantian ke Vertex AI melalui Kredensial Default Aplikasi. - Output file: menulis temuan markdown yang diformat ke
code_review.md— GitHub Action membaca file ini dan mempostingnya sebagai komentar PR nanti
Menguji agen ulasan
Uji dari root project. SDK akan membaca GEMINI_API_KEY dari lingkungan, jadi mari kita masukkan kunci ke lingkungan
export GEMINI_API_KEY=YOUR_API_KEY
Kemudian, jalankan perintah berikut untuk menjalankannya secara lokal
uv run --project code_review_agent code_review_agent/review_agent.py .
Saat berjalan, alat ini akan menampilkan beberapa output konsol yang menjelaskan alat yang sedang digunakannya. Anda dapat melihatnya saat mengakses keterampilan agen security-and-hardening dan 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'] ...
Agen menjalankan git diff main...HEAD, meninjau hanya kode yang diubah, menulis temuan yang diformat ke code_review.md, dan mencetak JSON terstruktur ke konsol. Anda dapat memeriksa code_review.md yang ditulis di editor seperti yang ditunjukkan di bawah

Secara lokal, fitur ini sudah berfungsi. Sekarang, mari kita lanjutkan ke bagian berikutnya. Membuat konfigurasi Github Action
6. Kasus 2 : Peninjauan Otomatis dengan Antigravity SDK - Bagian 2 ( Mengonfigurasi Tindakan Github)
Sebelum memulai, hapus file code_review.md yang dibuat sebelumnya jika ada.
rm -f code_review.md
Sekarang, kita perlu membuat file konfigurasi YAML Github Action.
mkdir -p .github/workflows
cloudshell edit .github/workflows/code_review.yml
Kemudian, tambahkan konten berikut ke file
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
});
Alur kerja akan dipicu secara otomatis saat PR dibuka atau diperbarui. Tindakan ini akan memeriksa cabang PR dengan histori git lengkap (diperlukan untuk git diff main...HEAD), menjalankan agen peninjauan yang menulis temuan ke code_review.md, dan memposting konten file sebagai komentar PR.
Sekarang, mari kita lakukan commit pada semua perubahan dan kirimkan ke remote GitHub. Kita siap menguji integrasi ini
git add .
git commit -m "Add AI code security-quality review agent and GitHub Action"
git push origin feature/bulk-operations
7. Kasus 2 : Peninjauan Otomatis dengan Antigravity SDK - Bagian 3 (Menguji Peninjauan Kode Otomatis)
Sekarang, buka halaman web repositori yang Anda buat dan klik Settingshttps://github.com/<YOUR_GITHUB_USERNAME>/leads-crm-app-demo

Kemudian, di panel kiri, cari Secrets and variables, lalu klik dan pilih Actions

Setelah itu, klik New repository secret untuk mengonfigurasi secret GEMINI_API_KEY

Setelah itu, pilih Pull Request dan buat Pull Request baru dari cabang feature/bulk_operations ke cabang main di repo Anda sendiri


Setelah permintaan pull dibuat, permintaan tersebut akan menjalankan Tindakan GitHub yang dapat Anda periksa di menu Checks atau di dekat tombol Merge pull request

Anda dapat mengklik Tindakan yang sedang berjalan untuk melihat detailnya dan setelah selesai, hasil peninjauan akan diposting sebagai komentar Permintaan Tarik seperti yang ditunjukkan di bawah

8. Penutup
Selamat!
Anda telah membuat dua alur kerja peninjauan kode lengkap untuk mendeteksi kerentanan keamanan dalam fitur yang dikodekan dengan vibe:
- Kasus 1 (Interaktif): Antigravity CLI dengan keterampilan agen meninjau perbedaan cabang fitur, mengidentifikasi injeksi SQL dan kerentanan lainnya, memperbaikinya dengan mengikuti pola OWASP, dan menghasilkan PR yang bersih.
- Kasus 2 (Otomatis): Antigravity SDK mendukung GitHub Action yang secara otomatis meninjau setiap PR, memposting temuan keamanan terstruktur sebagai komentar PR.
Yang telah Anda pelajari
- Cara vibe coding menciptakan risiko keamanan dan alasan peninjauan otomatis menangkap apa yang terlewat oleh peninjauan manual
- Cara menginstal dan menggunakan keterampilan agen untuk memberikan keahlian keamanan terstruktur pada Antigravity CLI
- Cara meninjau perbedaan cabang fitur secara interaktif, memperbaiki masalah, dan membuat PR yang bersih
- Cara membuat agen ulasan hanya baca dengan Antigravity SDK menggunakan kebijakan tolak secara default dan hook siklus proses
- Cara men-deploy pipeline peninjauan otomatis sebagai GitHub Action dengan dukungan tindak lanjut interaktif
Pembersihan
Tutup PR
Buka setiap permintaan pull di fork Anda di GitHub, lalu klik Close pull request. Jangan gabungkan PR feature/bulk-operations — PR tersebut masih berisi kode rentan yang belum di-patch.
Hapus repositori yang di-fork (opsional)
Jika Anda tidak lagi memerlukan fork, buka fork Anda di GitHub: Settings -> scroll ke Danger Zone -> Delete this repository.
Langkah berikutnya
- Plugin & Kemampuan Antigravity CLI – membuat kemampuan dan plugin kustom
- Izin & Sandbox Antigravity CLI – kebijakan alat terperinci dan sandbox tingkat OS
- Hook & Kebijakan Antigravity SDK – pola lanjutan (pembatasan frekuensi, pemulihan error, middleware)
- Contoh Antigravity SDK –
agent_middleware.pyuntuk pola produksi