1. 简介
氛围编程是指使用 AI 智能体根据自然语言提示编写代码,这种做法可将开发者的角色从作者转变为编排者和审核者。我们依靠准备完美的上下文,并信任 AI 代理会为我们完成所有事情,从撰写规范文档开始,直到确保代码满足所有要求。风险:在快速迭代周期中,功能性代码未经全面的安全审核即获得批准。现代代理通常默认生成安全代码,但“通常”并不意味着“总是”,并且累积的漏洞会通过人工审核。
此 Codelab 介绍了两种使用 Antigravity 作为审核者的方案,以解决上述问题:在开发期间通过 CLI 以交互方式使用(您审核、修复,然后提交 PR),以及在持续集成中通过 SDK 自动使用(智能体审核每个拉取请求并将结果作为注释发布)
探索内容
您对潜在客户 CRM 应用进行了氛围编码,AI 智能体为您构建了整个堆栈:Express 后端、SQLite 数据库、React 前端。它能正常运行。然后,您要求代理添加两项新功能:潜在客户搜索功能和包含管理员统计信息的批量导入/导出功能。该代理商的送货速度都很快。代码运行正常,功能正常,PR 已准备就绪。
但问题在于:您并未编写此代码。您已批准。您如何知道搜索端点不会受到 SQL 注入的攻击?您如何知道管理员路由没有硬编码的密码?您不必这样做,因为阅读 AI 生成的每一行代码会抵消您最初选择“感觉编码”所带来的速度优势。
此 Codelab 提供了两种解决此问题的方法:
- 情形 1 - 交互式审核:检出存在漏洞的功能分支,使用通过代理技能增强的 Antigravity CLI 审核差异、修复问题并创建干净的 PR。
- 情形 2 - 自动化审核:设置由 Antigravity SDK 提供支持的 GitHub Action,该 Action 可自动审核 PR、以注释形式发布结构化发现结果,并在开发者针对审核提出后续问题时做出回应。

学习内容
- 氛围编程 (vibe coding) 可能带来的安全风险,以及自动审核为何能发现人工审核遗漏的问题
- 如何安装和使用社区维护的代理技能,让 Antigravity CLI 具备深度的安全和代码审核专业知识
- 如何以交互方式使用 CLI 来查看功能分支差异、修复漏洞并创建干净的 PR
- 如何使用 Antigravity SDK 构建一个具有声明式安全政策和生命周期钩子的只读代码审核代理
- 如何将审核代理部署为 GitHub Action,以审核 PR 并将结果发布为 PR 注释
前提条件
- Google Cloud 账号
- GitHub 账号
- 基本熟悉终端、版本控制和 CI/CD
2. 环境设置
此步骤会派生 Leads CRM 应用代码库,在 Cloud Shell 中克隆该代码库,设置 Antigravity CLI 并进行身份验证。
创建代码库分支
您需要拥有自己的代码库副本,因为您将使用 GitHub Actions 推送提交并创建 PR。
前往以下代码库
然后,点击创建分支。在派生创建页面上,取消选中“仅复制 main 分支”复选框,因为您需要将其他功能分支(feature/lead-search 和 feature/bulk-operations)包含在派生中。


打开 Cloud Shell
在浏览器中打开 Cloud Shell。Cloud Shell 提供了一个预配置的环境,其中包含本 Codelab 所需的所有工具。在系统提示时点击授权,以
然后,依次点击“查看” ->“终端”,打开终端。您的界面应与下图类似

这将是我们的主要界面,顶部是 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 进行身份验证,可以前往此 Codelab 详细了解身份验证流程。
此时,您应具备以下条件:
- 克隆的分支代码库
- 两个功能分支均可见
agy命令可用且已通过身份验证
3. 问题 - 隐藏在 Vibe 编码功能中的漏洞
以下是相关场景:一位团队成员使用 AI 智能体为 Leads CRM 应用添加了两项功能:潜在客户搜索功能和批量导入/导出操作。这两个功能均可正常使用。这两款产品在未经安全审核的情况下就快速发布了。您将审核合并前的两个分支,一个通过 CLI 以交互方式审核,另一个通过 GitHub 操作自动审核。
检查第一个功能分支
查看 feature/lead-search 上的差异:
git diff main...origin/feature/lead-search
此分支添加了搜索端点。扫描 diff(差异比较) - 您应该能发现 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 进行交互式审核
在完成氛围编码会话、查看您刚刚编写的代码或查看队友的拉取请求后,交互式 CLI 审核最有价值。如果我们在讨论氛围编程 (vibe coding),那么 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/ 中。如需了解详情,请参阅此文档
为了演示智能体技能功能,此 Codelab 将使用 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
您应该会看到 2 项技能显示在 Workspace 技能下方,如下所示

运行功能差异的代码审核
调用安全技能,让其审核您的分支。输入以下提示:
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 技能并自动将其激活。它会读取 diff(差异比较),识别漏洞,并将发现结果以及建议的修复方案写入 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 Action,并针对第二个功能分支对其进行测试。代理会根据需要审核 PR,并将发现的问题以 PR 评论的形式发布。
自动审核的优势
当开发者主动审核时,交互式 CLI 审核(情形 1)会正常运行。团队需要一种可在每个 PR 上自动运行的审核,以便随时发现任何贡献者、任何工具带来的问题。Antigravity SDK (google-antigravity) 以 Python 库的形式提供与 CLI 相同的代理运行时。政策和钩子在代码中配置。
GitHub Actions 是 GitHub 的内置持续集成/持续开发 (CI/CD) 平台。它会运行工作流(以 YAML 形式定义的自动化脚本),以响应代码库事件,例如打开 PR、推送提交或发布评论。工作流在 GitHub 托管的虚拟机上运行,并且可以访问代码库代码。在这种情况下,您可以使用 GitHub Action 在每次创建 PR 时运行安全审核代理。
以下是自动审核流程的运作方式:

Antigravity SDK ( google-antigravity) 以 Python 库的形式提供与 CLI 相同的代理运行时。您编写一个使用政策和钩子配置代理的 Python 脚本,在 GitHub Action 中运行该脚本,并将结果作为 PR 注释发布。
获取 Gemini API 密钥
在开始之前,我们需要 Gemini API 密钥供 Antigravity SDK 使用。前往 Google AI Studio API 密钥,创建一个 API 密钥,并在需要时复制该 API 密钥

此密钥将在本地运行审核代理时使用,稍后还将用作 GitHub Actions Secret
第 A 部分:构建评价智能体
现在,对于情形 2,我们将当前工作目录切换到 feature/bulk-operations 分支:
git checkout feature/bulk-operations
这是该方案中的第二个功能分支,它为 CRM 应用添加了批量导入/导出端点和管理员统计信息信息中心。
设置 Python 项目
Antigravity SDK 目前仅提供 Python 版本,因此我们需要 Python 环境才能进行开发。我们将使用 uv 作为 Python 项目管理器。uv 是用 Rust 编写的快速 Python 软件包和项目管理器(文档)。此 Codelab 使用它来提高速度和简化操作。如果您在本教程中使用 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_tools钩子提供第二层限制,仅允许git命令通过run_command。 - Git diff 范围界定:代理运行
git diff main...HEAD以仅查看已更改的代码,而不是整个代码库。 - 提供结构化输出并支持回退:
response_schema=ReviewResult通过 SDK 的 finish 工具强制执行 JSON 结构。如果解析失败,后备广告链会尝试将text()解析为 JSON,然后返回原始文本。 - 身份验证回退:如果
GEMINI_API_KEY可用,则使用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 Action 配置
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 打开或更新时,工作流会自动触发。它会检出包含完整 Git 历史记录(git diff main...HEAD 所需)的 PR 分支,运行将结果写入 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 secret

之后,选择 Pull Request 并创建从分支 feature/bulk_operations 到您自己的代码库的 main 分支的新拉取请求


创建拉取请求后,系统会运行 GitHub Actions,您可以在 Checks 菜单或 Merge pull request 按钮附近检查这些操作

您可以点击正在运行的操作来查看详细信息,完成后,系统会以拉取请求注释的形式发布审核结果,如下所示

8. 总结
恭喜!
您构建了两个完整的代码审核工作流程,用于捕获振动编码功能中的安全漏洞:
- 案例 1(互动式):Antigravity CLI 具有代理技能,可查看功能分支差异,识别 SQL 注入和其他漏洞,按照 OWASP 模式修复这些漏洞,并生成干净的 PR。
- 情形 2(自动化):Antigravity SDK 为 GitHub 操作提供支持,该操作会自动审核每个 PR,并将结构化安全发现结果作为 PR 注释发布。
您学到的内容
- 氛围编程 (vibe coding) 如何带来安全风险,以及为什么自动审核可以发现人工审核遗漏的问题
- 如何安装和使用代理技能,为 Antigravity CLI 提供结构化的安全专业知识
- 如何以交互方式查看功能分支差异、修复问题并创建干净的 PR
- 如何使用 Antigravity SDK 通过默认拒绝政策和生命周期钩子构建只读审核代理
- 如何部署自动审核流水线作为 GitHub Action,并提供互动式后续支持
清理
关闭 PR
在 GitHub 中前往您 fork 的每个 PR,然后点击关闭拉取请求。请勿合并 feature/bulk-operations PR,因为它仍包含未修补的易受攻击的代码。
删除派生的代码库(可选)
如果您不再需要该派生版本,请前往 GitHub 上的派生版本,依次点击设置 -> 滚动到危险可用区 -> 删除此代码库。
后续操作
- Antigravity CLI 插件和技能 - 创建自定义技能和插件
- Antigravity CLI 权限和沙盒 - 精细的工具政策和操作系统级沙盒
- Antigravity SDK 钩子和政策 - 高级模式(速率限制、错误恢复、中间件)
- Antigravity SDK 示例 -
agent_middleware.py用于生产模式