1. Pengantar
Dalam codelab ini, Anda akan membangun aplikasi web retail dengan Asisten Belanja AI terintegrasi menggunakan Agent Development Kit (ADK) Google. Anda akan menggunakan Google Antigravity IDE (IDE agentik Google) untuk membuat alur kerja pengembangan berbasis pengujian (TDD) yang aman.
Daripada memperlakukan keamanan sebagai gerbang tahap akhir, Anda akan belajar "menggeser keamanan ke kiri" hingga titik awal kode. Anda akan menerapkan standar pengembangan, mengotomatiskan pemodelan ancaman STRIDE, dan membatasi tindakan agen dengan hook pra-commit git dan hook eksekusi khusus agen.
Yang akan Anda lakukan
- Buat dan bangun agen asisten belanja ADK 2.0 menggunakan Antigravity IDE dan
agents-cli. - Siapkan standar coding aman level project menggunakan file konteks persisten (
CONTEXT.md). - Membangun dan memanggil Keterampilan Pemodelan Ancaman STRIDE tingkat ruang kerja kustom di Antigravity IDE.
- Terapkan perlindungan keamanan secara langsung selama Fase Rencana TDD.
- Menulis pengujian keamanan berbasis hasil di Pytest menggunakan Antigravity.
- Konfigurasi hook pra-commit Git untuk mengotomatiskan pemindaian Semgrep dengan loop perbaikan lokal di Antigravity.
Yang Anda butuhkan
- Browser web seperti Chrome
- Memahami Python, Pytest, dan perintah terminal dasar
- IDE Google Antigravity diinstal. Lihat situs resmi.
- Pengelola paket uv telah diinstal. Lihat panduan pemasangan UV.
- Alat command line Git terinstal. Git digunakan secara eksklusif untuk kontrol versi lokal di lab ini, sehingga akun GitHub tidak diperlukan. Lihat panduan penginstalan Git.
Codelab ini ditujukan bagi developer dari semua level, termasuk pemula. Seluruh lab akan memerlukan waktu sekitar 60 menit untuk diselesaikan.
Menyiapkan Autentikasi & Lingkungan
Berikan kredensial autentikasi Anda agar agen dapat memanggil model Gemini. Dapatkan kunci Gemini API standar dari Google AI Studio dan ekspor di sesi terminal IDE Anda:
export GEMINI_API_KEY="your_api_key_here"
export GOOGLE_GENAI_USE_ENTERPRISE=FALSE
2. Menyiapkan Workspace dan Toolchain
Pertama, inisialisasi ruang kerja project dan instal toolchain pengelolaan agen yang mendasarinya. Untuk melakukannya, kita akan meminta Antigravity IDE mengotomatiskan proses penyiapan.
👉 Perintah ke Antigravity:
Help me set up my local project workspace. Please:
1. Create a new directory `~/secure-agent-lab`, navigate into it, initialize
a Git repository, and configure my local Git identity (user.name:
"Kaggle Student", user.email: "student@example.com").
2. Create and activate a Python virtual environment using `uv`.
3. Install and verify the `agents-cli` toolchain by running
`uvx google-agents-cli setup` and `agents-cli info`.
Yang akan terjadi: Antigravity akan menjalankan perintah terminal yang diperlukan atas nama Anda, membuat repositori Git yang bersih, dan menginstal keterampilan ADK pendamping ke IDE Anda.
3. Membuat Struktur Project Agen ADK
Pada fase ini, kami memandu Antigravity untuk menggunakan agents-cli guna membuat struktur project agen ADK 2.0 yang berfungsi penuh bernama shopping-assistant. Kita akan menginstruksikan Antigravity untuk mendesain asisten retail dengan alat penukaran diskon.
Catatan: Untuk menunjukkan keunggulan hook gating otomatis, dalam perintah ini, kami secara eksplisit menginstruksikan Antigravity untuk menyertakan kerentanan simulasi: kunci API tiruan yang di-hardcode dan digunakan untuk pengembangan lokal.
👉 Perintah ke Antigravity:
Use `agents-cli` to scaffold a new ADK 2.0 agent project called
`shopping-assistant`. The workflow should act as an AI shopping assistant
for a retail store. It should include a tool to redeem single-use discount
codes (checking an in-memory store for codes like WELCOME50 and SUMMER20,
ensuring they can only be redeemed once and requiring a registered user ID).
Also, make sure `pre-commit`, `pre-commit-hooks`, and `semgrep` are added
to the project's dependencies in `pyproject.toml` and installed. Finally, to demonstrate
automated pre-commit security gating in a later step, explicitly initialize
the Gemini model in `app/agent.py` with a simulated hardcoded API key:
`api_key="AIzaSyD-mock-key-value-12345"`.
Yang diharapkan: Antigravity akan mengeksekusi agents-cli scaffold create shopping-assistant --adk, mengonfigurasi pyproject.toml, dan menerapkan logika agen.
4. Mempelajari Kode Agen
👉 Minta Antigravity menjelaskan kode yang dihasilkan:
Read and explain the project structure of my new shopping-assistant agent.
Walk me through how `app/agent.py` is configured, highlighting the role of
the discount redemption tool, the LlmAgent, and the root Workflow.
Di Antigravity IDE, file project yang baru dibuat ditampilkan langsung di panel tambahan (sisi kiri). Anda dapat melihat shopping-assistant/app/agent.py di sana atau membukanya dari penjelajah file IDE.
# shopping-assistant/app/agent.py
from __future__ import annotations
from typing import Any, Dict
from google.adk.agents.context import Context
from google.adk.apps.app import App
from google.adk.events.event import Event
from google.adk.workflow import Edge, Workflow
from google.adk.workflow.agents.llm_agent import LlmAgent
from google.adk.models.google_llm import Gemini
from google.adk.workflow.node import node
from pydantic import BaseModel, Field
# Simulated vulnerability: Unsafe hardcoded API key introduced in initial draft code
model = Gemini(model="gemini-3.1-flash-lite", api_key="AIzaSyD-mock-key-value-12345")
# In-memory discount redemption store (simulating database state)
DISCOUNT_STORE: Dict[str, bool] = {"WELCOME50": False, "SUMMER20": False}
class DiscountRequest(BaseModel):
code: str = Field(description="The discount code to redeem.")
user_id: str = Field(description="The ID of the user requesting redemption.")
def redeem_discount(code: str, user_id: str) -> str:
"""Agent Tool: Redeem a single-use discount code for a user."""
if code not in DISCOUNT_STORE:
return "Error: Invalid discount code."
if DISCOUNT_STORE[code]:
return "Error: Discount code has already been redeemed."
if not user_id or user_id.startswith("guest_"):
return "Error: Registered user account required to redeem discounts."
DISCOUNT_STORE[code] = True
return f"Success: Discount code {code} redeemed successfully for user {user_id}."
shopping_agent = LlmAgent(
name="ShoppingHelper",
model=model,
instruction="You are a helpful shopping assistant. Use your tools to redeem discount codes for users.",
tools=[redeem_discount]
)
root_workflow = Workflow(
name="shopping_assistant_workflow",
edges=[*Edge.chain('START', shopping_agent)]
)
app = App(
name="shopping_assistant",
root_agent=root_workflow
)
Praktik Terbaik Produksi: Konkurensi & Kondisi Race
Dalam logika alat, kita memeriksa kamus dalam memori (DISCOUNT_STORE) dan mengubah statusnya. Dalam lingkungan produksi multi-thread dengan database nyata, dua permintaan serentak dapat membaca kode sebagai belum ditukarkan sebelum salah satu penulisan di-commit, sehingga menyebabkan kerentanan penukaran ganda. Dalam produksi, selalu gunakan penguncian pesimis (misalnya, .with_for_update()) atau pembuatan versi optimis untuk memastikan isolasi transaksi.
Memeriksa Grafik Agen Awal
Untuk memverifikasi bahwa grafik agen yang baru di-scaffold dikompilasi dengan benar, kita dapat meminta Antigravity untuk menjalankan linter dan menguji agen atas nama kita.
👉 Perintah ke Antigravity:
Run `agents-cli lint` on our `shopping-assistant` project to verify syntax and
refactor if any issues.
Yang diharapkan: Antigravity akan menjalankan agents-cli lint dan agents-cli lint --fix untuk memperbaiki masalah lint atau pemformatan yang terdeteksi.
5. Membuat Aturan Khusus Project
Untuk mencegah memori aktif agen Anda kelebihan beban dengan ribuan halaman dokumentasi keamanan umum—yang menyebabkan pembusukan konteks dan latensi penalaran, Anda harus membuat "jalan yang mulus" dari konvensi aman yang telah disetujui sebelumnya. Di Antigravity IDE, Anda dapat membuat batasan ini dengan membuat file konteks persisten.
👉 Perintah ke Antigravity:
Create a customization directory named `shopping-assistant/.agents` and
create a file `shopping-assistant/.agents/CONTEXT.md` defining our secure
coding standards:
# Local Project Context & Secure Coding Standards
## Core Paved Roads
We systematically address common vulnerability classes by guiding the agent
to use our pre-configured, secure-by-default helper patterns instead of
writing raw implementation logic from scratch.
1. **Tool Input Validation**: Every agent tool must validate incoming
parameters against strict Pydantic schemas rather than parsing raw
dictionaries or strings.
2. **No Shell Execution**: Never use `run_command` or raw shell execution
tools unless explicitly approved by `hooks.json`.
3. **Pre-Commit Remediation Loop**: If a git commit fails due to a pre-commit
hook error (such as a Semgrep scan finding), you MUST treat the violation
as a refactoring task, apply targeted fixes, run tests to verify no
regressions, and attempt to commit again.
Proses selanjutnya: Antigravity akan membuat direktori .agents/ dan file CONTEXT.md, lalu menampilkannya langsung di panel tambahan untuk Anda tinjau.
6. Mengonfigurasi Hook Pembatasan Lokal
Untuk mencegah kode atau rahasia yang tidak aman keluar dari workstation Anda, konfigurasi gerbang otomatis di batas lingkungan pengembangan Anda sebelum melakukan commit kode. Kita akan meminta Antigravity untuk membuat konfigurasi hook, lalu menginstalnya menggunakan terminal.
1. Hook Pra-Commit Git
Untuk memastikan analisis statis kami menangkap kredensial simulasi secara andal dan memblokir commit yang tidak aman, kami akan menentukan aturan Semgrep kustom dan mengonfigurasi hook pra-commit Git untuk menerapkannya.
Menentukan Aturan Semgrep Kustom
Aturan Semgrep default (--config auto) tidak menandai kunci tiruan yang berisi kata-kata seperti "mock" atau tanda hubung karena skor keyakinan yang rendah. Untuk mendeteksi kunci API yang di-hardcode secara andal, kita akan membuat file aturan lokal kustom yang menggunakan pemindaian regex langsung, bukan aturan generik.
👉 Perintah ke Antigravity:
Create a custom Semgrep rules file `shopping-assistant/.semgrep/rules.yaml`
with a rule to detect hardcoded Google API key prefixes (matching regex
`AIzaSy[A-Za-z0-9_\-]*`). Configure it for Python files with an error severity
and a clear security warning message.
Yang akan terjadi: Antigravity akan membuat shopping-assistant/.semgrep/rules.yaml yang menentukan aturan pemindaian kustom kita. Tinjau definisi aturan yang dihasilkan:
# shopping-assistant/.semgrep/rules.yaml
rules:
- id: detect-hardcoded-google-api-key
pattern-regex: 'AIzaSy[A-Za-z0-9_\-]*'
message: "Security Issue: Hardcoded Google API key prefix detected."
languages:
- python
severity: ERROR
Mengonfigurasi Hook Pra-Commit
Selanjutnya, konfigurasi hook pra-commit Git untuk menjalankan aturan Semgrep kustom kita. Saat menjalankan hook dalam tata letak subdirektori, jalur ke konfigurasi lokal harus relatif terhadap direktori root repositori Git (shopping-assistant/.semgrep/rules.yaml), bukan subdirektori project.
👉 Perintah ke Antigravity:
Create a `shopping-assistant/.pre-commit-config.yaml` file configured to run
local pre-commit hooks (end-of-file-fixer, trailing-whitespace) and a local
Semgrep security scan on commit for Python files. Ensure Semgrep is configured
with the `--error` flag and references our custom rules file relative to the Git
repository root. Once created, run `pre-commit install` in the
terminal to activate the hooks.
Yang akan terjadi: Antigravity akan membuat shopping-assistant/.pre-commit-config.yaml dan menjalankan pre-commit install untuk Anda. Tinjau konfigurasi yang dihasilkan:
# shopping-assistant/.pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: end-of-file-fixer
name: End of File Fixer
entry: end-of-file-fixer
language: system
types: [file]
- id: trailing-whitespace
name: Trailing Whitespace
entry: trailing-whitespace-fixer
language: system
types: [file]
- id: semgrep
name: Semgrep Security Scan
entry: semgrep --error --config shopping-assistant/.semgrep/rules.yaml
language: system
types: [python]
Konfigurasi ini memastikan bahwa meskipun agen berjalan dalam mode non-interaktif yang sepenuhnya otonom, gerbang pra-commit akan diaktifkan dan memblokir commit apa pun yang gagal dalam pemindaian analisis statis.
Perintah Eksekusi Langsung (Untuk Verifikasi Manual)
Untuk memverifikasi penyiapan analisis statis secara manual tanpa memicu siklus hook commit penuh, Anda dapat menjalankan pemeriksaan ini langsung dari terminal.
Melalui pra-commit (dari direktori "shopping-assistant"):
uv run pre-commit run semgrep --all-files
Langsung melalui Semgrep (dari direktori "shopping-assistant"):
uv run semgrep --error --config .semgrep/rules.yaml app/agent.py
2. Hook Agen Antigravity Bawaan
Untuk pembatasan di tengah perjalanan yang lebih dalam, konfigurasi hook agen di shopping-assistant/.agents/hooks.json. Tidak seperti hook git, hook agen mencegat Antigravity sebelum dapat menjalankan alat penting (seperti menjalankan perintah shell) di sistem Anda.
👉 Perintah ke Antigravity:
Create a `shopping-assistant/.agents/hooks.json` file configured with a
`PreToolUse` hook that intercepts `run_command` executions and runs
`python3 .agents/scripts/validate_tool_call.py` with a 10-second timeout.
Proses selanjutnya: Antigravitasi akan membuat shopping-assistant/.agents/hooks.json. Tinjau konfigurasi yang dihasilkan:
{
"enabled": true,
"PreToolUse": [
{
"matcher": "run_command",
"command": "python3 .agents/scripts/validate_tool_call.py",
"timeout": 10
}
]
}
Selanjutnya, minta Antigravity untuk membuat skrip validasi alat pokok yang dirujuk oleh hook kita.
👉 Perintah ke Antigravity:
Create the script `shopping-assistant/.agents/scripts/validate_tool_call.py`
with logic to inspect `run_command` executions passed using stdin and block
destructive commands like `rm -rf /`.
Yang akan terjadi: Antigravity akan menghasilkan shopping-assistant/.agents/scripts/validate_tool_call.py, mirip dengan yang di bawah. Tinjau skrip validasi yang dihasilkan:
# shopping-assistant/.agents/scripts/validate_tool_call.py
import sys
import json
def main():
try:
context = json.load(sys.stdin)
command = context.get("tool_args", {}).get("CommandLine", "")
if "rm -rf /" in command or "mkfs" in command:
print("BLOCKED: Destructive command detected.", file=sys.stderr)
sys.exit(1)
print("APPROVED: Command validation passed.")
sys.exit(0)
except Exception as e:
print(f"Validation error: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
Kompromi Hook
- Git Hooks: Native untuk kontrol versi; berjalan meskipun agen berjalan dalam mode non-interaktif yang sepenuhnya otonom. Namun, pemeriksaan ini dapat dilewati menggunakan flag
--no-verifyselama commit. - Hook Agen: Merekam peristiwa di tengah lintasan untuk memblokir perintah alat yang berbahaya, tetapi tidak melindungi repositori jika developer melewati IDE.
Gerbang lokal memperkuat kebiasaan baik developer dan membantu mendeteksi kerentanan secara instan. Namun, ingatlah bahwa gerbang lokal dapat dilewati, yang berarti pipeline CI/CD terpencil dan terisolasi Anda tetap menjadi penghalang keamanan utama yang tidak dapat dilewati.
7. Menerapkan Keterampilan Pembuatan Model Ancaman STRIDE
Sekarang, Anda akan memberikan pengetahuan khusus arsitek keamanan kepada Antigravity. Keterampilan antigravitasi adalah direktori Markdown deklaratif modular yang menginstruksikan agen cara menjalankan tugas penalaran multi-langkah. Antigravitasi otomatis menemukan keterampilan apa pun yang ditempatkan di .agents/skills/.
👉 Perintah ke Antigravity:
Create a local skill directory
`shopping-assistant/.agents/skills/stride-threat-model/` and create a skill
definition file `shopping-assistant/.agents/skills/stride-threat-model/SKILL.md`
with the following content:
---
name: stride-threat-model
description: Performs a systematic STRIDE threat modeling assessment on the
current project's codebase and architecture. Use this when starting a new
implementation phase or reviewing existing components.
---
# STRIDE Threat Modeling Skill
## Goal
Guide the agent to analyze the workspace directory structure, configuration
files, and code files to produce a structured `threat_model.md` assessment.
## Instructions
1. **Analyze System Boundaries**: Map the entry points (tools, workflows,
prompts) and data storage layers.
2. **STRIDE Evaluation**: Evaluate the system against the six STRIDE pillars:
- **Spoofing**: Are caller identity boundaries verified before executing
sensitive tool logic?
- **Tampering**: Can users manipulate data flows, parameters, or underlying
state?
- **Repudiation**: Are critical transactions securely logged?
- **Information Disclosure**: Are we risking leakage of PII, internal tokens,
or raw stack traces?
- **Denial of Service**: Are there rate limits on expensive database or LLM
queries?
- **Elevation of Privilege**: Can an unauthenticated user bypass access
control to reach privileged tool actions?
3. **Output**: Generate a highly structured `threat_model.md` saved directly
into the workspace root.
Yang akan terjadi: Antigravity akan membuat direktori keterampilan kustom dan file SKILL.md.
Sekarang, mari jalankan skill yang baru dibuat untuk mengevaluasi grafik project aktif Anda (shopping-assistant/app/agent.py).
👉 Perintah ke Antigravity:
Run stride-threat-model on our shopping-assistant agent graph.
Yang akan terjadi: Antigravity akan mencocokkan maksud Anda, memuat petunjuk penilaian ancaman sesuai permintaan dari direktori skill lokal Anda, menganalisis file agent.py yang ada, dan membuat threat_model.md terstruktur langsung di root shopping-assistant Anda. Pendekatan ini menjaga konteks kerja sehari-hari Anda tetap bersih dan ringan sekaligus memberi Anda akses instan ke alasan keamanan ahli.
8. Menyaring Fase Rencana TDD
Sebelum menerapkan fitur lebih lanjut atau memfaktorkan ulang kode, Antigravity menggunakan pemahaman codebase semantiknya untuk memetakan perubahan dalam checklist implementation_plan.md dan task.md. Untuk memaksa Antigravity mendesain keamanan sejak awal, kita mengonfigurasi aturan sistem di .agents/CONTEXT.md yang membatasi persetujuan rencana.
👉 Perintah ke Antigravity:
Append the following TDD planning gate instruction to the bottom of
`shopping-assistant/.agents/CONTEXT.md`:
## TDD Planning Gate
During the Plan phase, you must decompose the workspace task into logical,
modular stages. Every implementation plan MUST include a dedicated
**Security Boundaries & Assertions** section outlining specific edge cases
that could exploit the feature.
Yang dapat diharapkan: Antigravity akan diperbarui shopping-assistant/.agents/CONTEXT.md dengan aturan gerbang perencanaan baru.
Saat Anda meminta Antigravity untuk membangun atau memfaktorkan ulang fitur dalam langkah-langkah berikutnya, Antigravity akan otomatis menganalisis aturan ini dan menyajikan rencana penerapan dengan perincian keamanan yang jelas. Anda dapat meninjau rencana ini langsung di dialog interaktif atau panel tambahan Antigravity, tempat Anda harus mengklik Lanjutkan atau Setujui sebelum pembuatan kode dimulai.
Menguji Gerbang Perencanaan (Opsional)
Untuk mengamati gerbang perencanaan ini beraksi sekarang, coba berikan perintah Antigravity dengan salah satu permintaan fitur berikut. Alih-alih langsung membuat kode, Antigravity akan memasuki fase Rencana dan menampilkan implementation_plan.md yang menampilkan perincian Batasan & Pernyataan Keamanan yang mendetail (misalnya, mengidentifikasi kondisi persaingan, eskalasi hak istimewa yang tidak sah, atau nilai poin negatif) untuk Anda tinjau.
👉 Perintah ke Antigravity (Pilih salah satu untuk diuji):
Plan a new agent tool `award_loyalty_points` that awards points to a user's
account after a successful purchase.
Plan a new agent tool `process_cart_checkout` that receives a cart ID and
discount code, applies the discount, and processes the order.
Plan a new agent tool `update_discount_status` that allows administrators to
activate or deactivate discount codes in the store.
9. Menulis Pengujian Terisolasi Berbasis Hasil
Sekarang kami memandu Antigravity untuk menulis pengujian keamanan yang komprehensif untuk alat agen ADK yang ada. Untuk memastikan pengujian keamanan kami tangguh dan realistis, kami menyusunnya berdasarkan dua prinsip inti:
- Tegaskan hasil, bukan interaksi: Tegaskan string yang ditampilkan akhir dan mutasi status, bukan menulis tiruan yang rapuh yang memata-matai panggilan helper internal.
- Menerapkan Pembatasan Ketat: Memverifikasi bahwa alat menerapkan batas logika bisnis eksplisit (seperti penukaran sekali pakai dan aturan pengguna terdaftar).
👉 Perintah ke Antigravity:
Use `agents-cli` and pytest to generate an outcome-based security test suite
in `shopping-assistant/tests/test_agent.py`. Inspect `app/agent.py` and
write tests to verify all security boundaries and business logic guardrails
for the `redeem_discount` tool.
Yang akan terjadi: Antigravity akan menghasilkan shopping-assistant/tests/test_agent.py, mirip dengan yang di bawah. Tinjau file pengujian yang dihasilkan:
# shopping-assistant/tests/test_agent.py
import pytest
from app.agent import redeem_discount, DISCOUNT_STORE
@pytest.fixture(autouse=True)
def reset_store():
"""Ensure strict test isolation by resetting in-memory store state before each test run."""
DISCOUNT_STORE["WELCOME50"] = False
DISCOUNT_STORE["SUMMER20"] = False
yield
DISCOUNT_STORE["WELCOME50"] = False
DISCOUNT_STORE["SUMMER20"] = False
def test_discount_code_can_only_be_redeemed_once():
"""Verify a user cannot submit a request reusing a single-use code."""
# First redemption - should succeed
res_one = redeem_discount("WELCOME50", "user_123")
assert "Success" in res_one
assert DISCOUNT_STORE["WELCOME50"] is True
# Second redemption trying to reuse the same code
res_two = redeem_discount("WELCOME50", "user_456")
assert "Error: Discount code has already been redeemed" in res_two
def test_discount_redemption_rejects_invalid_code():
"""Verify that unknown discount codes are hard-blocked."""
res = redeem_discount("INVALID999", "user_123")
assert "Error: Invalid discount code" in res
def test_discount_redemption_rejects_guest_accounts():
"""Verify that unauthenticated guest accounts cannot redeem discounts."""
res = redeem_discount("SUMMER20", "guest_999")
assert "Error: Registered user account required" in res
assert DISCOUNT_STORE["SUMMER20"] is False
Verifikasi Fase HIJAU TDD
Untuk memverifikasi bahwa pengujian keamanan yang baru dibuat berhasil lulus terhadap penerapan agent.py yang ada, minta Antigravity untuk menjalankan pytest atas nama Anda.
👉 Perintah ke Antigravity:
Run `uv run pytest tests/test_agent.py` on our `shopping-assistant` project to verify that our security tests pass successfully.
Yang akan terjadi: Antigravity akan menjalankan uv run pytest tests/test_agent.py di terminal. Semua kasus pengujian berhasil lulus. Batas aplikasi logis kini aman, tetapi kita harus memastikan pemindai statis kita mendeteksi kunci API yang di-hardcode selama commit.
10. Memverifikasi Pembatasan dan Koreksi Mandiri Agen
Setelah pengujian berwarna hijau, Anda memasuki Fase Refaktor dan Commit. Di sinilah pemindaian keamanan lokal dan hook pra-commit kami memverifikasi bahwa tidak ada repo yang meninggalkan workstation dengan kerentanan, dan Antigravity menunjukkan kemampuan koreksi mandirinya yang otonom.
- Di terminal, buka direktori project dan lakukan commit kode menggunakan
uv rununtuk memastikan biner hook pra-commit lokal aktif di PATH Anda:cd ~/secure-agent-lab/shopping-assistant git add . uv run git commit -m "feat: implement shopping assistant agent" - Perhatikan bahwa commit gagal karena hook pra-commit Git menjalankan Semgrep secara otomatis:
Semgrep Security Scan....................................................Failed - hookid: semgrep app/agent.py Security Issue: Hardcoded Google API key prefix detected.
- Dipandu oleh aturan Pre-Commit Remediation Loop yang dikonfigurasi di
.agents/CONTEXT.md, Antigravity secara otomatis mencegat kegagalan pra-commit di terminal IDE, membaca log error Semgrep, dan memulai langkah refactoring untuk beralih dari kunci API yang di-hardcode ke pengambilan kunci secara aman. - Tinjau kode yang difaktorkan ulang yang dihasilkan oleh Antigravity di
shopping-assistant/app/agent.pyuntuk mengatasi kebocoran kunci API. - Antigravity otomatis menjalankan
pytestuntuk memverifikasi bahwa pengujian masih lulus. - Antigravity akan mencoba melakukan commit lagi atas nama Anda. Jika identitas Git lokal Anda dikonfigurasi dan repo diinisialisasi, pemindaian akan lulus, dan commit akan berhasil.
Hal ini menunjukkan kemampuan inti menggabungkan TDD dengan hook pra-commit lokal dan loop agen. Daripada menunggu kegagalan CI/CD jarak jauh, agen tetap bertanggung jawab secara lokal, memfaktorkan ulang kodenya agar aman secara default sebelum kode tersebut di-push.
11. Menjalankan dan Menguji Agen Secara Lokal
Setelah batas keamanan diverifikasi dan diterapkan, jalankan agen ADK secara lokal menggunakan kunci Gemini API yang diekspor untuk berinteraksi dengannya di playground lokal.
- Di terminal Anda, pastikan Kunci Gemini API Anda diekspor di lingkungan Anda:
echo $GEMINI_API_KEY # Verify your key is exported - Luncurkan platform pengembangan lokal untuk agen Anda:
Anda akan melihat output yang menunjukkan bahwa server playground lokal berjalan di port 8080:cd ~/secure-agent-lab/shopping-assistant agents-cli playground* Serving ADK Playground * Running on http://127.0.0.1:8080/dev-ui/?app=app
- Buka URL yang diberikan di browser web Anda untuk mulai melakukan chat dengan agen Asisten Shopping Anda secara interaktif. Coba minta untuk menukarkan kode diskon:
Agen akan memproses permintaan Anda menggunakan eksekusi model Gemini dan mencoba menukarkan diskon.Can you redeem the discount code WELCOME50 for user user_123?
12. Pembersihan
Untuk membersihkan workstation dan menghindari resource atau rahasia yang tidak diinginkan di lingkungan lokal, ikuti langkah-langkah pembersihan berikut.
- Hentikan Server Lokal: Jika server playground Anda masih berjalan, hentikan di terminal dengan menekan
Ctrl + C. - Hapus File Project Lokal: Hapus direktori project lokal dari komputer Anda:
rm -rf ~/secure-agent-lab
13. Selamat
Selamat! Anda telah berhasil membuat siklus proses pengembangan yang aman dan berbasis pengujian menggunakan Google Antigravity IDE, membangun agen asisten belanja ADK 2.0 murni, dan memverifikasinya secara lokal.
Yang telah Anda pelajari
- Cara membuat struktur dan mengintegrasikan agen ADK 2.0 (ADK) menggunakan Antigravity IDE dan
agents-cli. - Cara menyiapkan standar coding aman level project menggunakan
CONTEXT.md. - Cara membuat dan menjalankan Keterampilan Pemodelan Ancaman STRIDE kustom di Antigravity IDE.
- Cara membatasi fase perencanaan agen AI untuk menerapkan batas keamanan.
- Cara menerapkan pengujian keamanan berbasis hasil yang terisolasi menggunakan pytest.
- Cara menjalankan dan menguji aplikasi berbasis agen secara lokal.
- Perbedaan dan pertimbangan antara hook Git dan hook eksekusi khusus agen.
Langkah berikutnya
- Baca Panduan Penyesuaian Antigravitasi untuk konfigurasi lanjutan.
- Baca selengkapnya tentang Pemodelan Ancaman STRIDE.
- Terapkan aturan Semgrep yang disesuaikan dengan kebijakan keamanan organisasi Anda.
Dapatkan badge Agen AI 5 Hari Kaggle 🎉
Sudah menyelesaikan lab ini sebagai bagian dari Kursus Intensif Vibe Coding dengan Agen AI 5 Hari dari Google di Kaggle? Klaim badge penyelesaian Anda: