1. 簡介
直覺式程式開發 (使用 AI 代理根據自然語言提示詞編寫程式碼) 可讓開發人員從程式碼撰寫者轉變為協調人員和審查人員。我們仰賴準備完善的脈絡,並信任 AI 代理程式會為我們完成所有事情,可能從撰寫規格文件開始,直到確保程式碼符合所有要求為止。風險:在快速疊代週期中,功能性程式碼未經過徹底的安全審查就獲得核准。現代代理程式通常會預設產生安全程式碼,但「通常」不等於「一律」,而且累積的安全性漏洞會透過手動審查。
本程式碼研究室將說明如何使用 Antigravity 做為審查者,解決上述問題:在開發期間透過 CLI 進行互動 (您審查、修正,然後 PR),以及在持續整合中透過 SDK 自動執行 (代理程式會審查每個提取要求,並將結果發布為註解)
探索內容
您對「潛在客戶 CRM」應用程式進行了 vibe 編碼,AI 代理為您建構了完整堆疊:Express 後端、SQLite 資料庫、React 前端。這項功能可正常運作。然後,您要求代理商新增兩項功能:待開發客戶搜尋功能,以及可匯入/匯出管理員統計資料的批次作業。兩位代理人都很快就送達。程式碼會執行、功能函式,以及 PR 準備就緒。
但問題是,您並未編寫這段程式碼。你已核准要求。您如何確定搜尋端點不會受到 SQL 注入攻擊?您如何確定管理員路徑沒有硬式編碼密碼?您不需要這麼做,而且逐行閱讀 AI 生成的程式碼,會抵銷您當初選擇直覺式程式開發所帶來的速度優勢。
本程式碼研究室提供兩種解決方法:
- 案例 1 - 互動式審查:查看有安全漏洞的功能分支,使用具備代理程式技能的 Antigravity CLI 審查差異、修正問題,並建立乾淨的 PR。
- 案例 2 - 自動審查:設定由 Antigravity SDK 支援的 GitHub 動作,自動審查 PR、以註解形式發布結構化發現,並在開發人員對審查提出後續問題時做出回應。

課程內容
- 直覺式程式開發可能造成的安全風險,以及自動審查為何能發現手動審查遺漏的問題
- 如何安裝及使用社群維護的代理程式技能,讓 Antigravity CLI 具備深入的安全性和程式碼審查專業知識
- 如何以互動方式使用 CLI 檢查功能分支差異、修正安全漏洞,以及建立乾淨的 PR
- 如何使用 Antigravity SDK,透過宣告式安全政策和生命週期掛鉤,建構唯讀程式碼審查代理程式
- 如何將審查代理部署為 GitHub Action,審查提取要求並將結果發布為提取要求註解
必要條件
- Google Cloud 帳戶
- GitHub 帳戶
- 熟悉終端機、版本控管和 CI/CD 的基本知識
2. 環境設定
這個步驟會分叉 Leads CRM 應用程式存放區、在 Cloud Shell 中複製該存放區、設定 Antigravity CLI,並進行驗證。
為存放區建立分支
您需要存放區的副本,因為您將使用 GitHub Actions 推送提交內容並建立 PR。
前往下列存放區
然後按一下「Fork」。在建立分支頁面中,取消勾選「只複製 main 分支版本」核取方塊,因為您需要將其他功能分支版本 (feature/lead-search 和 feature/bulk-operations) 納入分支。


開啟 Cloud Shell
在瀏覽器中開啟 Cloud Shell。Cloud Shell 提供預先設定的環境,內含本程式碼研究室所需的所有工具。系統出現提示時,請點選「授權」。
然後依序點選「View」(檢視) ->「Terminal」(終端機),開啟終端機。介面應與下圖類似:

這會是我們的主要介面,頂端是 IDE,底部是終端機
透過 GitHub 進行驗證
根據預設,Cloud Shell 不會設定 GitHub 憑證,但已安裝 gh CLI。設定驗證方法,以便稍後推送提交內容及建立 PR:
gh auth login

選取「Github.com」
選取 HTTPS ( 如果您已熟悉其他機制,也可以選擇該機制)

然後選擇 Y

然後選擇 Login with a web browser
**,**系統會要求您複製一次性代碼,並在瀏覽器中開啟登入頁面時輸入該代碼,您可以在終端機中 Ctrl + Click 網址,開啟 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
這表示您已在 Cloud Shell 中成功設定 GitHub 帳戶驗證。
複製已分支的存放區
接著,請複製分支存放區。將 <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 CLI
接著,請確認 Antigravity CLI 已預先安裝在 Cloud Shell 中。確認是否適用:
agy --version
您應該會看到已安裝的 Antigravity CLI 版本,例如 1.0.13
如果您尚未驗證 Antigravity CLI,可以前往這個程式碼研究室,查看更詳細的驗證程序。
此時,您應該已具備下列項目:
- 複製的分支存放區
- 兩個功能分支都可見
agy指令可用且已通過驗證
3. 問題 - Vibe 編碼功能中隱藏的安全漏洞
情境如下:團隊成員使用 AI 代理,在待開發客戶 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 CLI 進行互動式審查
在完成 Vibe 編碼工作階段、檢查剛編寫的程式碼,或審查隊友的提取要求後,最適合進行互動式 CLI 審查。如果我們談論的是氛圍編碼,AI 代理程式會快速生成您的功能程式碼,但您可能無法完全瞭解生成的每一行程式碼,且代理程式可能會針對功能進行最佳化,但不一定會針對安全性進行最佳化,具體情況取決於您開發功能時的環境設定。
在這個情境中,我們有這些含有安全漏洞的程式碼,並會運用 Antigravity CLI 和程式碼審查技能,以互動方式審查程式碼。當開發人員的角色從編寫程式碼轉為核准 AI 生成的程式碼時,可能會出現漏洞,而這個代理審查代理模式可偵測到這些漏洞。如果您要審查自己手動編寫的程式碼,或是在程式碼通過 CI 之前審查隊友的分支版本,也適用這項功能。你可以控制對話:要求代理專注於特定檔案、深入瞭解發現的內容,或立即套用修正。
即使沒有代理程式技能,Antigravity CLI 仍可審查程式碼,但會依據一般訓練知識,因此可能會遺漏特定領域的模式,或在不同工作階段套用不一致的審查條件。代理程式技能可為代理程式提供結構化劇本:五軸審查品質、嚴重程度標籤優先順序。無論提示詞如何措辭,審查作業都會重複進行,且十分詳盡。
這個步驟會使用 Antigravity CLI 和代理程式技能,檢查 feature/lead-search 分支版本、修正安全漏洞,並建立乾淨的 PR。
查看功能分支版本
首先,請將分支切換為 Case 1 分支:
git checkout feature/lead-search
接著,我們將使用代理程式技能升級 Antigravity CLI,以進行審查
什麼是代理程式技能
技能是宣告式 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 CLI 中驗證技能
啟動 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 做為互動式審查員。這項技能為模型提供結構化方法,也就是五軸程式碼審查。無論您是審查 AI 生成的程式碼、自己的程式碼,還是隊友的貢獻,都可以使用這項功能。在下一節中,我們將自動執行所有這些流程,以 GitHub 為例,在程式碼存放區中將其做為可擴充的自動化程序
5. 案例 2:使用 Antigravity SDK 自動審查 - 第 1 部分 ( 建立代理程式)
這個步驟會使用 Antigravity SDK 建構自動審查代理程式,並將其部署為 GitHub 動作,然後針對第二個功能分支進行測試。代理會視需要審查 PR,並將發現的問題以 PR 註解的形式發布。
為何要進行自動審查
開發人員主動審查時,互動式 CLI 審查 (案例 1) 適用。團隊需要對每個 PR 自動執行審查,隨時偵測任何貢獻者或工具的問題。Antigravity SDK (google-antigravity) 提供與 CLI 相同的代理程式執行階段,以 Python 程式庫的形式提供。政策和掛鉤是在程式碼中設定。
GitHub Actions 是 GitHub 內建的持續整合/持續開發 (CI/CD) 平台。系統會因應存放區事件 (例如開啟 PR、推送提交或張貼留言),執行以 YAML 定義的自動化指令碼工作流程。工作流程會在 GitHub 代管的虛擬機器上執行,並可存取存放區程式碼。在本例中,您會使用 GitHub Action,在每次建立 PR 時執行安全性審查代理程式。
自動審查流程如下:

Antigravity SDK ( google-antigravity) 提供與 CLI 相同的代理程式執行階段,做為 Python 程式庫。您會編寫 Python 指令碼,使用政策和掛鉤設定代理程式,在 GitHub 動作中執行該指令碼,然後將結果發布為 PR 註解。
取得 Gemini API 金鑰
開始之前,我們需要 Gemini API 金鑰,供 Antigravity SDK 使用。前往 Google AI Studio API 金鑰,建立 API 金鑰,並視需要複製 API 金鑰

這組金鑰會在您於本機執行審查代理程式時使用,稍後也會做為 GitHub Actions 密鑰
第 A 部分:建構評論代理
現在,針對案例 2,請將目前的工作目錄切換至 feature/bulk-operations 分支:
git checkout feature/bulk-operations
這是情境中的第二個功能分支,可將大量匯入/匯出端點和管理員統計資料資訊主頁新增至 CRM 應用程式。
設定 Python 專案
Antigravity SDK 目前僅支援 Python,因此我們需要 Python 環境才能開發。我們會使用 uv 做為 Python 專案管理員。uv 是以 Rust 編寫的快速 Python 套件和專案管理員 ( 文件)。本程式碼研究室會使用這個函式庫,以求快速簡便。如果您在本教學課程中使用 Cloud Shell,執行個體中已預先安裝這項工具。如要在本機安裝,請參閱這篇教學課程。
使用 uv 為評論代理程式初始化 Python 專案:
uv init code_review_agent
uv add --project code_review_agent google-antigravity==0.1.7
系統會建立新目錄 code_review_agent,其中包含必要的程式碼審查代理程式檔案。
安裝評論技能
審查代理商需要與案件 1 相同的安全性和程式碼審查技能。將這些檔案安裝到 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_toolshook 會提供第二層,只允許透過run_command傳送git指令。 - Git 差異比較範圍:代理程式會執行
git diff main...HEAD,只檢查變更的程式碼,而不是整個程式碼集。 - 結構化輸出內容 (含備援機制):
response_schema=ReviewResult會透過 SDK 的完成工具強制執行 JSON 結構。如果剖析失敗,備用廣告鏈會嘗試剖析text()為 JSON,然後傳回原始文字。 - 驗證後備機制:如果可用,則使用
GEMINI_API_KEY,否則透過應用程式預設憑證回復為 Vertex AI。 - 檔案輸出:將格式化 Markdown 發現項目寫入
code_review.md,GitHub Action 會讀取這個檔案,稍後以 PR 註解的形式發布
測試評論代理
從專案根目錄進行測試。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 動作設定
6. 案例 2:使用 Antigravity SDK 自動審查 - 第 2 部分 ( 設定 GitHub 動作)
開始之前,請先刪除先前產生的 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 時,工作流程會自動觸發。這個指令會簽出具有完整 Git 記錄的 PR 分支 (git diff main...HEAD 需要此記錄),執行審查代理程式,將結果寫入 code_review.md,並將檔案內容發布為 PR 註解。
現在,請提交所有變更並推送至 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 按鈕附近檢查這些動作

您可以點選正在執行的動作來查看詳細資料,完成後,系統會將審查結果發布為 Pull Request 註解,如下所示

8. 總結
恭喜!
您已建構兩個完整的程式碼審查工作流程,可偵測直覺式程式開發功能中的安全漏洞:
- 案例 1 (互動式):Antigravity CLI 搭配代理程式技能,審查了功能分支差異,找出 SQL 注入和其他安全漏洞,並按照 OWASP 模式修正,最後產生乾淨的 PR。
- 案例 2 (自動):Antigravity SDK 支援 GitHub Action,可自動審查每個 PR,並以 PR 註解的形式發布結構化安全性發現。
您已經瞭解的內容
- 為何「直覺式程式開發」會造成安全風險,以及自動審查為何能發現手動審查遺漏的問題
- 如何安裝及使用代理程式技能,為 Antigravity CLI 提供結構化安全專業知識
- 如何以互動方式查看功能分支差異、修正問題,以及建立乾淨的 PR
- 如何使用 Antigravity SDK,透過預設拒絕政策和生命週期掛鉤,建構唯讀評論代理程式
- 如何以 GitHub Action 形式部署自動審查管線,並提供互動式後續追蹤支援
清理
關閉 PR
前往 GitHub 中每個提取要求的 Fork,然後按一下「Close pull request」。請勿合併 feature/bulk-operations PR,因為其中仍包含未修補的易受攻擊程式碼。
刪除分叉存放區 (選用)
如果不再需要該分支,請前往 GitHub 上的分支:依序點選「Settings」-> 捲動至「Danger Zone」->「Delete this repository」。
後續步驟
- Antigravity CLI 外掛程式和技能:建立自訂技能和外掛程式
- Antigravity CLI 權限和沙箱 - 精細的工具政策和 OS 層級的沙箱
- Antigravity SDK Hook 和政策 - 進階模式 (速率限制、錯誤復原、中介軟體)
- Antigravity SDK 範例 -
agent_middleware.py適用於生產模式