Spezifikationsgesteuerte ADK-Agentenentwicklung mit Antigravity und Spec-kit

1. Einführung

Wenn Sie einem vorhandenen Agenten Funktionen hinzufügen – in der Regel eine neue datenbankgestützte Funktion –, müssen Sie Boilerplate-Code schreiben, Integrationen einrichten und dafür sorgen, dass alles mit den Mustern im Code übereinstimmt. Antigravity beschleunigt jede Phase dieses Prozesses: Es analysiert Ihre Codebasis, um den erforderlichen Kontext zu erstellen, erstellt strukturierte Spezifikationen und Implementierungspläne zur Überprüfung und führt die Codeänderungen aus. Dabei wird es von Fachwissen geleitet, das Sie als wiederverwendbare Skills und eine Projektkonstitution erfassen können, die nicht verhandelbare Grundsätze durchsetzt. In diesem Codelab wird eine Möglichkeit vorgestellt, das Spec-driven Development-Paradigma von Antigravity zu optimieren, indem ein neuer Zyklus eingeführt wird, um die Spezifikationsdokumentation, die sich stark auf spec-kit bezieht, zu verbessern.

Aufgaben

Eine lokal ausgeführte Restaurant-Concierge-Anwendung mit Reservierungsbuchung, die über einen vollständigen SDD-Zyklus hinzugefügt wurde:

  • Reservierungsbuchung: Gäste buchen Tische und prüfen Reservierungen. Dies wird durch neue MCP Toolbox-Datenbanktools und eine Cloud SQL-Tabelle reservations unterstützt.
  • (Herausforderung): Entwickeln Sie eine eigene Benutzeroberfläche für den Agent.
  • (Challenge): Mit dem Antigravity-Agent in Google Cloud bereitstellen

Der Startercode enthält einen funktionierenden ADK-Agenten mit Menüsuche (Stichwort + semantisch über MCP Toolbox) und Erfassung von Ernährungspräferenzen (über ToolContext). Sie können die Funktion erweitern, ohne Anwendungscode manuell zu schreiben. Antigravity übernimmt die Implementierung basierend auf Ihren Spezifikationen.

404869b603fff6ab.png

Lerninhalte

  • Projektkontext so booten, dass Antigravity einen vorhandenen Codebase versteht
  • So erstellen Sie Antigravity-Skills, die Domainwissen enthalten (z.B. ADK-Codelab-Muster) zur Wiederverwendung
  • Festlegen einer Projektverfassung, anhand derer die SDD-Workflows während der Planung und Analyse validiert werden
  • SDD-Workflows (Spec-Driven Development) in Antigravity verwenden, um systematisch Funktionen hinzuzufügen
  • ADK-Agenten mit neuen datenbankgestützten Tools über die MCP Toolbox erweitern

Vorbereitung

2. Umgebung einrichten

In diesem Schritt wird das Starter-Repository geklont, die Authentifizierung bei Google Cloud durchgeführt, eine Cloud SQL-Datenbank bereitgestellt und Ihre lokale Antigravity-Umgebung vorbereitet.

Starter-Repository klonen

Öffnen Sie ein Terminal in Antigravity (oder das Systemterminal). Klonen Sie das Begleit-Repository und wechseln Sie in das Verzeichnis:

git clone https://github.com/alphinside/sdd-adk-antigravity-starter.git sdd-adk-agents-agy
cd sdd-adk-agents-agy

Öffnen Sie das geklonte Repository in Antigravity. Datei -> Ordner öffnen -> wählen Sie das geklonte Verzeichnis sdd-adk-agents-agy aus.

Entfernen Sie die Upstream-Fernbedienung. In den SDD-Workflows werden Git-Branches für Funktionsspezifikationen erstellt. Durch das Entfernen des Remote-Repository wird verhindert, dass versehentlich in das Starter-Repository übertragen wird:

git remote remove origin

Erforderliche Komponenten installieren

Führen Sie das Skript für die Voraussetzungen aus. Es wird geprüft, ob git, curl, gcloud, uv, Python 3.12 und die MCP Toolbox installiert sind. Falls nicht, werden sie installiert:

bash scripts/setup_prerequisites.sh

2aa671856eee1085.png

Mit Google Cloud authentifizieren

Führen Sie zwei Authentifizierungsbefehle aus. Beide öffnen einen Browser für OAuth:

gcloud auth login
gcloud auth application-default login

Da Sie lokal mit Antigravity arbeiten, authentifizieren Sie sich manuell. auth login authentifiziert die gcloud-Befehlszeile. application-default login authentifiziert Google Cloud SDKs, die von Ihrer Anwendung verwendet werden. Sowohl die Vertex AI-Aufrufe des ADK als auch der Cloud SQL-Python-Connector basieren auf Standardanmeldedaten für Anwendungen.

Google Cloud-Projekt einrichten

Schreiben Sie die Standortvariablen in .env, bevor Sie das Skript zur Projekteinrichtung ausführen:

echo "GOOGLE_CLOUD_LOCATION=global" > .env
echo "REGION=us-central1" >> .env
  • GOOGLE_CLOUD_LOCATION=global wird für Vertex AI-/Gemini API-Aufrufe verwendet.
  • REGION=us-central1 wird für Cloud SQL und andere GCP-Infrastrukturen verwendet.

Laden Sie das Projekt-Setupskript herunter und führen Sie es aus. Damit wird ein Google Cloud-Projekt mit Testabrechnung erstellt oder validiert und die Projekt-ID in .env gespeichert. Anschließend wird die Quelle angegeben:

curl -sL https://raw.githubusercontent.com/alphinside/cloud-trial-project-setup/main/setup_verify_trial_project.sh -o setup_verify_trial_project.sh

bash setup_verify_trial_project.sh && source .env

Aktivieren Sie die erforderlichen APIs:

gcloud services enable \
  aiplatform.googleapis.com \
  sqladmin.googleapis.com \
  compute.googleapis.com \
  cloudresourcemanager.googleapis.com

Cloud SQL bereitstellen

Legen Sie das Datenbankpasswort fest und fügen Sie es .env hinzu:

export DB_PASSWORD=codelabpassword
echo "DB_PASSWORD=${DB_PASSWORD}" >> .env

Cloud SQL-Instanz erstellen:

gcloud sql instances create restaurant-db \
  --database-version=POSTGRES_17 \
  --edition=ENTERPRISE \
  --region=${REGION} \
  --availability-type=ZONAL \
  --tier=db-custom-1-3840 \
  --root-password=${DB_PASSWORD} \
  --enable-google-ml-integration \
  --database-flags cloudsql.enable_google_ml_integration=on &

Die db-custom-1-3840-Stufe ist die Mindestanforderung für die Vertex AI ML-Integration. Mit dem Flag --enable-google-ml-integration kann Cloud SQL Gemini-Embedding-Modelle direkt über SQL aufrufen. Dies ist die Grundlage für die semantische Suche.

Abhängigkeiten installieren

Öffnen Sie einen neuen Terminaltab. Achten Sie darauf, dass Sie sich weiterhin im Projektverzeichnis des geklonten Repositorys befinden, und laden Sie die Umgebungsvariablen neu:

source .env

Wir verwenden uv als Python-Projektmanager. uv ist ein schneller Python-Paket- und Projektmanager, der in Rust geschrieben wurde ( Dokumentation ). In diesem Codelab wird er aus Gründen der Geschwindigkeit und Einfachheit verwendet. Installieren Sie die Python-Abhängigkeiten:

uv sync

Aktualisieren Sie dann die Datei .env des ADK-Agents mit Ihrer Projektkonfiguration:

cat > restaurant_concierge/.env <<EOF
GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT}
GOOGLE_CLOUD_LOCATION=global
GOOGLE_GENAI_USE_VERTEXAI=True
EOF

Jetzt sollten wir alle erforderlichen ADK-Agent-Starter-Repos haben, mit denen wir arbeiten können. Im nächsten Abschnitt geht es um Antigravity und die spezifikationsgetriebene Entwicklung.

3. Startercode ansehen und spezifikationsgetriebene Entwicklung verstehen

In diesem Schritt wird die Struktur des Startcodes erläutert, die Spec-Driven Development-Methodik vorgestellt, die Datenbank mit Daten gefüllt und geprüft, ob der Basis-Agent funktioniert, bevor Sie ihn erweitern.

Projektstruktur

Öffnen Sie das geklonte Repository-Projekt im Antigravity-Editor und sehen Sie sich das Verzeichnislayout an:

sdd-adk-agents-agy/
├── .agents/
│   ├── workflows/                 # SDD slash commands (/speckit.*) – manual trigger
│   │   ├── speckit.specify.md
│   │   ├── speckit.clarify.md
│   │   ├── speckit.plan.md
│   │   ├── speckit.tasks.md
│   │   ├── speckit.analyze.md
│   │   ├── speckit.implement.md
│   │   ├── speckit.checklist.md
│   │   └── speckit.constitution.md
│   ├── skills/                   # Antigravity skills (loaded on demand, agent determined)
│   │   ├── adk-agent-development/
│   │   │   ├── SKILL.md     # ADK patterns
│   │   │   └── examples/
│   │   │       ├── basic_agent.py
│   │   │       ├── Dockerfile
│   │   │       ├── server.py
│   │   │       ├── stateful_agent.py
│   │   │       ├── toolbox_agent.py
│   │   │       ├── tools_agent.py
│   │   │       └── tools.yaml
│   │   └── repo-research/
│   │       └── SKILL.md     # Repo analysis 
│   └── rules/               # Always-active context
├── .specify/                # spec-kit SDD templates and memory
│   ├── memory/constitution.md
│   ├── templates/
│   └── scripts/
├── restaurant_concierge/    # ADK agent package
│   ├── __init__.py
│   ├── agent.py             # LlmAgent + ToolContext tools + Toolbox integration
│   └── .env                 # Vertex AI configuration
├── server.py                # FastAPI server wrapping the agent
├── tools.yaml               # MCP Toolbox tool definitions
├── scripts/                 # Setup scripts
└── pyproject.toml

Schlüsseldateien

Dateien für die Agentenanwendung

  • restaurant_concierge/agent.py: Der Kern-Agent. Eine LlmAgent, die Datenbanktools der MCP Toolbox mit der ToolContext-basierten Erfassung von Ernährungspräferenzen kombiniert. Der Agent lädt alle Tools vom Toolbox-Server und fügt zwei Python-Funktionen (save_dietary_preference, get_dietary_preferences) hinzu, die ToolContext zum Verwalten des Status verwenden.
  • tools.yaml – Definitionen von MCP-Toolbox-Tools. Es sind drei Menü-Suchtools definiert: die Stichwortsuche (search_menu), die semantische Suche über pgvector (semantic_search_menu) und der Kategoriefilter (get_menu_by_category). Es sind noch keine Reservierungstools vorhanden. Diese fügen Sie später hinzu.
  • server.py: Ein minimaler FastAPI-Server, der zeigt, wie Sie als FastAPI-Objekt auf das ADK zugreifen können. get_fast_api_app() aus dem ADK bietet integrierte Endpunkte, darunter /run_sse für SSE-Streaming und APIs für die Sitzungsverwaltung.

Antigravity-Dateien

  • .agents/skills/adk-agent-development/SKILL.md: Ein vorkonfigurierter Skill ( von Antigravity generiert), der komprimierte Referenzmuster aus allen vier ADK-Codelabs enthält. Sie ist derzeit inaktiv (YAML-Frontmatter fehlt). Sie müssen sie später aktualisieren. Antigravity lädt diesen Skill automatisch, wenn es Arbeit im Zusammenhang mit ADK-Agent-Funktionen und ihren Beispielen erkennt. Dieses Wissen leitet Antigravity bei der Planung der Reservierungsfunktion.
  • .agents/skills/repo-research/SKILL.md: Eine Skill, mit der Antigravity lernt, ein Repository inkrementell zu analysieren und ein strukturiertes Projektkontextdokument zu erstellen. Dabei wird ein 4-Phasen-Ansatz verwendet: Oberflächenscan (nur Verzeichnisbaum), Konfigurations- und Metadatendateien, Einstiegspunkte und Datenmodelle sowie gezielte Analysen. In jeder Phase werden die Ergebnisse gespeichert, bevor mit der nächsten fortgefahren wird. Wie beim ADK-Skill ist er inaktiv, bis Sie später YAML-Frontmatter hinzufügen. Nach der Aktivierung können Sie das Tool aufrufen, um .agents/rules/project-context.md zu generieren – ein umfassendes Onboarding-Dokument, das Architektur, Laufzeitabhängigkeiten, API-Oberfläche und Domänen-Glossar abdeckt.

Spec-Driven Development: von der integrierten Planung von Antigravity bis hin zu strukturiertem SDD

KI-Code-Assistenten erleichtern das Generieren von Code aus einem Prompt. Das Risiko: Sie beschreiben eine Funktion in einem Satz, der Assistent schreibt Hunderte von Zeilen und Sie akzeptieren sie, weil sie richtig aussieht. Das wird auch als „Vibe Coding“ bezeichnet. Sie steuern die KI dabei intuitiv und akzeptieren oder lehnen die Ausgabe ab, je nachdem, ob sie zu funktionieren scheint. Es ist schnell für Prototypen und Einwegskripts. Das funktioniert nicht mehr, wenn die Codebasis wächst, wenn Funktionen interagieren oder wenn Sie Wochen später Code noch einmal aufrufen und nicht mehr nachvollziehen können, warum eine Entscheidung getroffen wurde.

b2a0753229d08ef3.png

Spec-Driven Development (SDD) gibt diesem Zyklus eine Struktur. Bevor Code generiert wird, schreiben Sie eine Spezifikation: Was macht das Feature, für wen ist es gedacht und was sind die Erfolgskriterien? Der KI-Assistent arbeitet auf Grundlage dieser Spezifikation – und Sie auch, wenn Sie die Ausgabe überprüfen. Die Spezifikation wird zur einzigen Quelle der Wahrheit für den Intent. Wenn der Code von der Spezifikation abweicht, wird dies bei der Überprüfung festgestellt. Wenn sich die Anforderungen ändern, aktualisieren Sie zuerst die Spezifikation und generieren Sie sie dann neu. Entscheidungen werden dokumentiert, nicht improvisiert.

Das ist ein echter Kompromiss: SDD ist pro Funktion langsamer als die Vibe-Codierung. Sie schreiben Dokumente, bevor Sie Code schreiben. Aber die Vorteile summieren sich: Jede zukünftige Änderung am Code hat Kontext, jede KI-generierte Implementierung hat einen überprüfbaren Vertrag und Sie können Mitarbeiter (menschlich oder KI) einarbeiten, indem Sie sie auf Spezifikationen verweisen, anstatt Entscheidungen aus dem Gedächtnis zu erklären.

Antigravity folgt bereits den Prinzipien der spezifikationsgesteuerten Entwicklung. Wenn Sie den Agent in den Planungsmodus versetzen, werden zwei Artefakte erstellt, bevor Code geschrieben wird:

  • Implementierungsplan: Eine Übersicht über den vorgeschlagenen technischen Ansatz, Dateiänderungen und Architektur-Entscheidungen 632169a236bc62cc.png
  • Aufgabenliste: eine strukturierte Aufschlüsselung von Arbeitselementen

795e47f4d98ae074.png

Antigravity fordert Sie auf, diese Artefakte vor der Ausführung zu überprüfen und zu genehmigen. Dieser Planungs- und Implementierungszyklus ist das Herzstück der spezifikationsgesteuerten Entwicklung: Spezifikationen leiten den Code und nicht umgekehrt.

In diesem Codelab wird diese Grundlage mit einem meinungsbasierten, versionskontrollierten Workflow auf Basis von spec-kit – einem spezifikationsbasierten Entwicklungs-Framework von GitHub – weiter ausgebaut. Jedes Feature durchläuft eine Pipeline, in der jedes Artefakt ein eigenständiges Dokument ist, das Sie in git überprüfen, bearbeiten und nachverfolgen können. Die Pipeline umfasst zwei optionale Quality-Gate-Phasen („Klären“ und „Analysieren“), in denen Probleme erkannt werden, bevor sie zu Implementierungsproblemen werden:

Phase

Artefakt

Purpose

/speckit.specify

spec.md

Definieren Sie, WAS entwickelt werden soll (nutzerorientiert, technologieunabhängig).

/speckit.clarify (optional)

Aktualisiert: spec.md

Unterbestimmte Bereiche identifizieren, gezielte Fragen zur Klärung stellen, Antworten wieder in die Spezifikation aufnehmen

/speckit.plan

plan.md, data-model.md, research.md

Entwerfen, WIE es erstellt werden soll (technischer Ansatz, Datenmodelle, Recherche)

/speckit.tasks

tasks.md

Plan in geordnete, umsetzbare Schritte unterteilen

/speckit.analyze (optional)

Analysebericht

Aufgaben vor der Implementierung auf Risiken, Lücken oder fehlende Grenzfälle prüfen

/speckit.implement

Codeänderungen

Führen Sie die Aufgaben aus und haken Sie jede ab.

c0164b540ee0afa1.png

Jedes Artefakt wird als Datei in specs/<feature-branch>/ gespeichert, in Git versioniert und kann wiederverwendet werden. Wenn eine Unterhaltung unterbrochen wird oder Sie später noch einmal auf Entscheidungen zurückgreifen möchten, sind die Spezifikationsdokumente immer verfügbar und nicht in einem Chatverlauf verborgen.

Das Starter-Repository enthält diese SDD-Workflows in .agents/workflows/ und Vorlagen in .specify/templates/. Sie werden später verwendet, um dem Agent Funktionen hinzuzufügen.

4. Cloud SQL-Einrichtung abschließen und dafür sorgen, dass der Base Agent funktioniert

Wechseln Sie zurück zum Terminaltab, auf dem der Befehl zum Erstellen der Cloud SQL-Instanz ausgeführt wird. Prüfen Sie nach Abschluss, ob die Instanz bereit ist:

gcloud sql instances describe restaurant-db --format="value(state)"

Wenn in der Ausgabe RUNNABLE angezeigt wird, fahren Sie fort. Wenn PENDING_CREATE angezeigt wird, warten Sie einen Moment und führen Sie den Befehl noch einmal aus.

Gewähren Sie dem Cloud SQL-Dienstkonto Zugriff auf Vertex AI (erforderlich für die In-Database-Embedding-Funktion):

SERVICE_ACCOUNT=$(gcloud sql instances describe restaurant-db --format="value(serviceAccountEmailAddress)")

gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/aiplatform.user" \
  --quiet

Erstellen Sie die Datenbank:

gcloud sql databases create restaurant_db --instance=restaurant-db

Die Ausgabe sollte so aussehen:

Creating Cloud SQL database...done.
Created database [restaurant_db].
instance: restaurant-db
name: restaurant_db
project: <your-project-id>

Daten in die Datenbank einlesen

Laden Sie Ihre Umgebungsvariablen und führen Sie das Datenbank-Seed-Skript aus, um das Schema zu erstellen und 16 Menüelemente einzufügen:

source .env
uv run python scripts/seed_db.py

Erwartete Ausgabe:

Creating extensions...
Creating menu_items table...
Inserting 16 menu items...
Seeded 16 menu items.
Done.

Vektoreinbettungen für die semantische Suche generieren:

uv run python scripts/generate_embeddings.py

Erwartete Ausgabe:

Generating embeddings for 16 menu items...
Generated embeddings for 16 menu items.

Dazu wird die integrierte embedding()-Funktion von Cloud SQL (über die google_ml_integration-Erweiterung) verwendet, um gemini-embedding-001 direkt über SQL aufzurufen. Die 3.072-dimensionalen Vektoren werden in der Spalte embedding von menu_items gespeichert. Es ist kein anwendungsseitiger Einbettungscode erforderlich.

Basis-Agent testen

Starten Sie die MCP Toolbox als Hintergrundprozess:

set -a; source .env; set +a # Export env variables to child process
toolbox --tools-file tools.yaml --address 127.0.0.1 --port 5000 &

Die Toolbox stellt Datenbanktools über HTTP bereit. Der Agent stellt über http://127.0.0.1:5000 eine Verbindung her.

Starten Sie die ADK-Entwicklungsoberfläche:

uv run adk web .

Öffnen Sie die Entwickler-UI in Ihrem Browser. Testen Sie den Agent dann mit diesen Prompts:

What appetizers do you have?
I'm vegetarian
Can I make a reservation for tomorrow?

fc693b9435b93493.png

Beenden Sie die ADK-Entwicklungsoberfläche zweimal mit Ctrl+C. Lassen Sie die Toolbox im Hintergrund laufen. Sie benötigen sie später noch einmal.

5. Projektkontext mit Antigravity bootstrappen

Nun simulieren wir die Situation mit einer Bedingung, die unserem Arbeitsalltag „etwas näher“ kommt:

  • Schlecht verwaltetes Repository
  • README veraltet
  • Dokumentationen werden nicht häufig aktualisiert

Als Erstes erstellen wir in solchen Fällen in der Regel eine Karte oder einen Kontext für das Projekt, an dem Antigravity arbeiten soll. In diesem Schritt wird ein Beispiel für einen Ansatz gezeigt, mit dem Antigravity ein umfassendes Verständnis einer vorhandenen Codebasis vermittelt werden kann. Dazu wird ein Skill erstellt, der das Repository analysiert und ein Projektkontextdokument generiert.

Außerdem wird die Projektverfassung eingerichtet – die nicht verhandelbaren Grundsätze, anhand derer die SDD-Workflows validiert werden. Zusammen liefern sie Antigravity den Kontext und die Einschränkungen, die für die SDD-Zyklen später erforderlich sind.

Die Antigravity-Kontexthierarchie

Antigravity verwendet drei Kontextebenen mit jeweils unterschiedlichem Umfang:

  • Regeln (.agents/rules/): Immer aktive Anweisungen. In jeder Unterhaltung in diesem Arbeitsbereich sind sie zu sehen ( sofern Sie sie aktiviert haben). Verwenden Sie Regeln für projektweiten Kontext wie Architektur-Entscheidungen, Codierungsstandards oder Informationen zum Technologiestack.
  • Kompetenzen (.agents/skills/): On-Demand-Wissen. Antigravity lädt einen Skill nur, wenn die aktuelle Aufgabe mit dem Feld description des Skills übereinstimmt. Skills für fachbereichsspezifisches Referenzmaterial verwenden
  • Workflows (.agents/workflows/): Gespeicherte Prompts, die mit /-Befehlen ausgelöst werden. Verwenden Sie Workflows für wiederholbare mehrstufige Prozesse wie die SDD-Pipeline.

Fähigkeiten aktivieren

Das Starter-Repository enthält zwei vorgefertigte Skills in .agents/skills/. Sie enthalten detaillierte Anleitungen, beginnen aber mit TODO(codelab)-Kommentaren anstelle des erforderlichen YAML-Frontmatter. Ohne Frontmatter kann Antigravity sie nicht erkennen.

Für Antigravity-Skills ist oben in der Datei ein YAML-Frontmatter-Block mit zwei Feldern erforderlich:

  • name: Eine eindeutige Kennung für den Skill.
  • description: Eine Zusammenfassung in natürlicher Sprache, die Antigravity abgleicht, um zu entscheiden, welcher Skill für eine bestimmte Anfrage geladen werden soll.

Öffnen

.agents/skills/adk-agent-development/SKILL.md

im Editor. Ersetzen Sie die beiden TODO(codelab)-Kommentarzeilen oben durch dieses Frontmatter:

---
name: adk-agent-development
description: Comprehensive guide for building, developing, and deploying AI agents using Google's Agent Development Kit (ADK) with Gemini models, covering agent creation, tools, state management, persistence, deployment, and database integration via MCP Toolbox.
---

Öffnen

.agents/skills/repo-research/SKILL.md

im Editor. Ersetzen Sie die beiden TODO(codelab)-Kommentarzeilen oben durch dieses Frontmatter:

---
name: repo-research
description: Analyze a repository's structure, technologies, and patterns to create or update a project context document. Use when asked to research, analyze, or understand a codebase.
---

Prüfen Sie, ob beide Skills gültige Frontmatter haben:

head -4 .agents/skills/adk-agent-development/SKILL.md
head -4 .agents/skills/repo-research/SKILL.md

Jedes sollte ----Trennzeichen enthalten, die die Felder name: und description: umschließen. Wenn die Trennzeichen oder Felder fehlen, erkennt Antigravity den Skill nicht.

Beide Skills werden bei Bedarf geladen. Antigravity gleicht Ihre Anfrage mit dem Feld description ab und ruft die vollständigen Anweisungen nur bei Bedarf ab.

Projektkontext generieren

Prüfen Sie, ob das Verzeichnis „rules“ vorhanden ist:

mkdir -p .agents/rules

Starten Sie im Agent Manager/Chat-Feld von Antigravity (im Editormodus drücken Sie ctrl + L) eine neue Unterhaltung. Typ:

Research this repository and create a project context document

Antigravity ordnet Ihre Anfrage dem Skill repo-research zu und beginnt mit der systematischen Analyse der Codebasis. Es liest Konfigurationsdateien, Quellcode und Dokumentation und füllt dann die Vorlage für den Projektkontext mit den Ergebnissen.

Öffnen Sie nach Abschluss des Vorgangs .agents/rules/project-context.md im Editor. Es enthält konkrete Informationen zum Projekt: Technologiestack (Python 3.12, ADK, MCP Toolbox, Cloud SQL), Projektstruktur, Datenmodell (Tabelle „menu_items“ mit pgvector) und externe Integrationen.

9949388b3e1f401a.png

Projektkonstitution festlegen

In den SDD-Workflows wird während der Planung und Analyse auf eine Projektverfassung unter .specify/memory/constitution.md verwiesen. Im /speckit.plan-Workflow wird eine „Constitution Check“-Prüfung durchgeführt und /speckit.analyze kennzeichnet Verstöße als CRITICAL. Wenn die Verfassung als leere Vorlage mit Platzhalter-Tokens belassen wird, gibt es nichts, woran die Prüfungen vorgenommen werden können. Pläne und Analysen werden ohne Schutzmaßnahmen ausgeführt.

In der Verfassung werden nicht verhandelbare Projektgrundsätze definiert. Dies ist ein kleines Repository, das von einem einzelnen Entwickler verwaltet wird. Die Verfassung sollte diesen Umfang widerspiegeln. Halten Sie die Dinge einfach und einheitlich und vermeiden Sie eine Überentwicklung.

Starten Sie im Agent Manager von Antigravity eine neue Unterhaltung. Führen Sie den Workflow für die Verfassung aus:

/speckit.constitution This is a small restaurant concierge ADK agent maintained by one developer. Set 3 principles: (1) All database operations go through MCP Toolbox tool definitions in tools.yaml  no raw SQL in Python code, no ORM. (2) Session state uses ADK ToolContext  no custom state management, no external state stores. (3) Keep it simple  follow existing file and naming conventions exactly.

Antigravity füllt die Verfassungsvorlage mit konkreten Grundsätzen, weist eine Version (1.0.0) zu und führt eine Konsistenzprüfung für die SDD-Vorlagen durch.

Sehen Sie sich die generierte Verfassung unter .specify/memory/constitution.md an. Prüfen Sie, ob die drei Grundsätze vorhanden und klar formuliert sind.

276113749cd30834.png

6. SDD Cycle – Funktion „Reservierung hinzufügen“

In diesem Schritt wird ein vollständiger SDD-Zyklus durchlaufen, um dem Restaurant-Concierge-Agenten die Reservierungsbuchung hinzuzufügen. Sie führen Antigravity durch die einzelnen Phasen – Spezifizieren, Klären, Planen, Aufgaben, Analysieren, Implementieren – und beobachten, wie jedes Artefakt auf dem vorherigen aufbaut. Das ist der Kern des Codelabs.

Funktion angeben

Starten Sie im Agent Manager von Antigravity eine neue Unterhaltung. Geben Sie den Workflow-Befehl /speckit.specify mit einer Funktionsbeschreibung ein:

/speckit.specify Add reservation booking capability to the restaurant concierge agent. Guests should be able to make a table reservation by providing their name, party size, date, and time. They should also be able to check existing reservations. The agent should confirm reservation details before booking and handle special requests (e.g., "window seat", "birthday celebration").

Antigravity erstellt einen Feature-Branch, generiert ein Spezifikationsdokument und führt eine Qualitätsvalidierung durch. Wenn Antigravity Fragen zur Klärung stellt, beantworten Sie diese anhand der obigen Funktionsbeschreibung.

Die Spezifikation konzentriert sich auf WAS und WARUM, nicht auf WIE. Es wird die Nutzerfreundlichkeit beschrieben („Gäste können eine Reservierung vornehmen, indem sie ihren Namen, die Anzahl der Personen, das Datum und die Uhrzeit angeben“), ohne SQL-Tabellen, tools.yaml oder ADK-APIs zu erwähnen. Details zur Implementierung folgen in der Planungsphase.

Sehen Sie sich die generierte Spezifikation unter specs/<branch-name>/spec.md an. Prüfen Sie, ob die funktionalen Anforderungen und Erfolgskriterien berücksichtigt werden.

4ea3f72f9dfb4d35.png

Spezifikation erläutern (optional)

Führen Sie den Workflow „Clarify“ aus, um unterbestimmte Bereiche in der Spezifikation zu identifizieren und zu beheben:

/speckit.clarify

Antigravity scannt die Spezifikation nach Unklarheiten, fehlenden Akzeptanzkriterien und unzureichend spezifizierten Anforderungen. Es werden gezielte Fragen zur Klärung gestellt, die jeweils mit einer kurzen Auswahl oder Formulierung beantwortet werden können. Ihre Antworten werden direkt in die Spezifikation codiert, sodass sie präziser ist, bevor die Planung beginnt.

Implementierung planen

Planungsworkflow ausführen:

/speckit.plan

Antigravity generiert einen technischen Plan in zwei Phasen:

  1. Recherchevorgang: Unbekannte Aspekte der vorhandenen Codebasis werden geklärt und research.md wird generiert.
  2. Entwurfsphase: Erstellt data-model.md (Definition der Reservierungseinheit) und aktualisiert project-context.md.

Antigravity sollte bei der Planung die adk-agent-development-Fähigkeit nutzen. Prüfen Sie die wichtigsten Artefakte:

  • specs/<branch-name>/plan.md – der technische Ansatz: welche Dateien geändert werden müssen, welche Muster zu befolgen sind
  • specs/<branch-name>/data-model.md: die Definition der Reservierungsentität (Spalten, Typen, Beziehungen)
  • specs/<branch-name>/research.md – getroffene Entscheidungen und Begründung

d9996ccbb3211078.png

Aufgaben generieren

Workflow „Aufgaben“ ausführen

/speckit.tasks

Antigravity unterteilt den Plan in eine geordnete Aufgabenliste in specs/<branch-name>/tasks.md. Aufgaben folgen einem strengen Checklistenformat mit IDs, Prioritätsmarkierungen und Dateipfaden, z. B.:

- [ ] [T001] [P] Create reservations table schema in scripts/seed_db.py
- [ ] [T002] [P] Add create_reservation tool to tools.yaml
- [ ] [T003] [P] Add list_reservations tool to tools.yaml
- [ ] [T004] [P] Update agent instruction in restaurant_concierge/agent.py

Aufgaben sind in Phasen unterteilt: Einrichtung → Grundlagen → User-Storys → Optimierung. Sehen Sie sich die Aufgabenliste an, um zu verstehen, was erstellt und geändert wird.

9fcdb822d8279ddf.png

Aufgaben analysieren (optional)

Führen Sie den Analyse-Workflow aus, um die Aufgaben auf Risiken und Lücken zu prüfen:

/speckit.analyze

Antigravity vergleicht die Aufgabenliste mit der Spezifikation und dem Plan und sucht nach fehlenden Grenzfalltests, Aufgaben, die in Konflikt stehen könnten, oder Lücken zwischen den Anforderungen der Spezifikation und der geplanten Arbeit. Beheben Sie kritische Probleme, bevor Sie die Implementierung vornehmen.

7. Implementieren

Führen Sie den Implementierungsworkflow aus:

/speckit.implement

Antigravity präsentiert einen endgültigen Implementierungsplan und ein Aufgabenartefakt. Prüfen und genehmigen Sie sie, um fortzufahren.

adc1e3d098bd1638.png

306448e70f61ab51.png

Antigravity führt die Aufgaben aus und hakt jede ab, sobald sie erledigt ist. Wenn der Vorgang abgeschlossen ist, wird der vollständige Walkthrough angezeigt.

48cc7752817a54c7.png

Codeänderungen testen

Prüfen Sie nach Abschluss der Implementierung, ob die wichtigsten Änderungen vorgenommen wurden. Die genauen Dateinamen und Inhalte können variieren, aber diese Muster sollten wie in tools.yaml und agent.py vorhanden sein:

# Verify reservation tools were added to tools.yaml
grep -i "reservation" tools.yaml

Die Ausgabe sieht ungefähr so aus:

...
get_reservations_by_name:
      Retrieve all reservations for a guest by their name. Uses case-insensitive
      SELECT id, guest_name, party_size, reservation_datetime, special_requests, created_at
      FROM reservations
      ORDER BY reservation_datetime DESC
...

Und für agent.py

# Verify agent instruction was updated
grep -i "reservation" restaurant_concierge/agent.py

# Check what files changed
git diff --name-only

Vielleicht finden Sie Änderungen wie diese:

...
- **Table Reservations**: Help guests book a table or check their existing reservations.
## Reservation Booking Rules
When a guest wants to make a reservation, collect ALL of the following before confirming:
**IMPORTANT**: Before calling `book_reservation`, you MUST:
- Only call `book_reservation` after the guest says "yes" or "confirm"
## Checking Reservations
When a guest asks to check their reservations:
- Use `get_reservations_by_name` to find their bookings
        book_reservation,
...

Die Änderungen sollten sich auf das Seed-Datenbankskript auswirken. Versuchen wir, es auszuführen.

source .env
uv run python scripts/seed_db.py

Das aktualisierte Skript sollte die Tabelle reservations erstellen, falls sie noch nicht vorhanden ist. Sie sollten eine Ausgabe sehen, die bestätigt, dass die neue Tabelle erstellt wurde (die vorhandenen menu_items-Daten bleiben erhalten).

Wenn bis zu diesem Punkt alles gut läuft, können wir die Funktion in der Entwickler-UI des ADK-Agents testen. Starten Sie die Toolbox neu, um die neuen Tooldefinitionen in tools.yaml zu übernehmen. Beenden Sie alle vorhandenen Toolbox-Prozesse und starten Sie einen neuen:

pkill -f toolbox 2>/dev/null
toolbox --tools-file tools.yaml --address 127.0.0.1 --port 5000 &

Starten Sie die ADK-Entwicklungsoberfläche:

uv run adk web .

Öffnen Sie http://localhost:8000 in Ihrem Browser und testen Sie mit diesen Prompts:

I'd like to book a table for 4 people on Friday at 7pm under the name Timmy
Do I have any upcoming reservations?

d9815389df37ed1a.png

f38a944851e28c29.png

Beenden Sie nun die ADK-Entwicklungsoberfläche mit Ctrl+C (zweimal).

8. Herausforderungen (optional)

Sie kennen jetzt den gesamten SDD-Workflow. So testen Sie es:

  • Führen Sie einen zweiten SDD-Zyklus aus, um eine Webchat-Oberfläche für den Restaurant-Concierge zu erstellen – diesmal ohne Schritt-für-Schritt-Anleitung.
  • Agent für das Produktionsszenario in Cloud Run bereitstellen

Hinweise

  • Das Projekt hat kein Frontend-Framework. Antigravity sollte reines HTML/CSS/JS vorschlagen. Wenn React oder Ähnliches vorgeschlagen wird, sollte es auf Einfachheit ausgerichtet werden (das Prinzip „Keep it simple“ Ihrer Verfassung sollte dies auffangen).
  • Der ADK-Server stellt /run_sse für das Streaming und /apps/{app_name}/users/{user_id}/sessions für die Sitzungsverwaltung bereit. Antigravity ermittelt diese aus dem Projektkontext.
  • Starten Sie den Server nach der Implementierung mit uv run uvicorn server:app --host 0.0.0.0 --port 8080 (nicht adk web), damit die Bereitstellung statischer Dateien funktioniert.
  • Testen Sie unter http://localhost:8080/static/index.html.
  • In den Referenz-Codelabs wird bereits gezeigt, wie ADK-Agenten bereitgestellt und beibehalten werden. Gib Antigravity Referenzen dazu!

9. Glückwunsch!

Sie haben einen ADK-Agenten für Restaurant-Concierge-Dienste mit der Reservierungsbuchung erweitert – vollständig über die SDD-Workflows von Antigravity, ohne Anwendungscode manuell zu schreiben.

Was Sie erstellt haben

  • Ein ADK-Agent für Restaurant-Concierge mit Menüsuche, semantischer Suche, Erfassung von Ernährungspräferenzen und Reservierungsbuchung
  • Eine Antigravity-Skill für die Repository-Recherche, die ein Projektkontextdokument generiert und verwaltet
  • Eine Projektverfassung, die nicht verhandelbare Grundsätze während der Planung und Analyse durchsetzt
  • Ein vollständiger SDD-Zyklus, der den Workflow „Spezifizieren → Klären → Planen → Aufgaben → Analysieren → Implementieren“ veranschaulicht

Das haben Sie gelernt

  • Spezifikationsgesteuerte Entwicklungsworkflows in Antigravity verwenden, um einer vorhandenen Codebasis systematisch Funktionen hinzuzufügen
  • Antigravity-Skills erstellen, die Domainwissen für die Wiederverwendung in Unterhaltungen bündeln
  • So wird der Projektkontext so eingerichtet, dass Antigravity fundierte Entscheidungen zu Architektur, Mustern und Technologie treffen kann
  • Festlegen einer Projektverfassung, anhand derer die SDD-Workflows validiert werden
  • ADK-Agenten mit neuen datenbankgestützten Tools über die MCP Toolbox erweitern

Bereinigen

Beenden Sie alle laufenden lokalen Prozesse (Toolbox):

pkill -f toolbox 2>/dev/null

Löschen Sie die Cloud SQL-Instanz, um laufende Gebühren zu vermeiden:

gcloud sql instances delete restaurant-db --quiet

Optional: Gesamtes Projekt löschen:

gcloud projects delete $GOOGLE_CLOUD_PROJECT