adk-fundamentals
The ADK Fundamentals skill teaches Google's Agent Development Kit, a Python framework for building production AI agents with Vertex AI. It covers required environment setup using uv package manager with Python 3.13+, Vertex AI configuration through environment variables, and canonical agent patterns including basic initialization and tool implementation with Pydantic schemas. Use this skill when setting up new ADK-based projects or learning structured agent development practices.
git clone --depth 1 https://github.com/majiayu000/claude-skill-registry /tmp/adk-fundamentals && cp -r /tmp/adk-fundamentals/skills/agent/adk-fundamentals ~/.claude/skills/adk-fundamentalsSKILL.md
# ADK Fundamentals: Agent Scaffolding and Setup
## Core Principles
The Google Agent Development Kit (ADK) is an open-source Python framework for building production-grade AI agents with Vertex AI integration. ADK provides structured patterns for tool creation, state management, and multi-agent orchestration.
## Environment Setup (Required Pattern)
### Step 1: Create Python Environment with uv
ADK requires Python 3.13+ and modern dependency management. Use `uv` for fast, reliable environment setup:
```bash
# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create new project directory
mkdir my-agent-project
cd my-agent-project
# Initialize Python 3.13 project
uv init --python 3.13
# Install ADK
uv pip install google-adk
# Install supporting libraries
uv pip install pydantic>=2.12 python-dotenv asyncio
```
### Step 2: Configure Vertex AI Environment
Create a `.env` file for Vertex AI configuration:
```bash
# .env
GOOGLE_CLOUD_PROJECT=your-gcp-project-id
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_GENAI_USE_VERTEXAI=True
# Optional: Authentication
GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
```
Load environment variables in your code:
```python
from dotenv import load_dotenv
import os
load_dotenv()
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
LOCATION = os.getenv("GOOGLE_CLOUD_LOCATION", "us-central1")
```
## Basic Agent Structure (Canonical Pattern)
### Minimal ADK Agent
```python
"""
Example ADK agent with Vertex AI integration.
"""
import asyncio
from google import genai
from google.genai import types
async def main() -> None:
"""Run the basic ADK agent."""
# Initialize Vertex AI client
client = genai.Client(
vertexai=True,
project=PROJECT_ID,
location=LOCATION
)
# Create a simple agent
model_id = "gemini-2.0-flash-exp"
# Generate response
response = await client.aio.models.generate_content(
model=model_id,
contents="Hello, how can you help me today?"
)
print(response.text)
if __name__ == "__main__":
asyncio.run(main())
```
### Agent with Tools (Production Pattern)
```python
"""
ADK agent with custom tools.
"""
import asyncio
from typing import Annotated
from pydantic import BaseModel, ConfigDict, Field
from google import genai
from google.genai import types
# Define tool schema with Pydantic (MANDATORY)
class WeatherRequest(BaseModel):
"""Request schema for weather tool."""
model_config = ConfigDict(strict=True, frozen=True)
location: str = Field(description="City name or location")
units: str = Field(
default="celsius",
description="Temperature units: celsius or fahrenheit"
)
# Define tool function (MUST be async for I/O)
async def get_weather(request: WeatherRequest) -> dict[str, any]:
"""
Get current weather for a location.
Args:
request: Weather request with location and units
Returns:
Weather data dictionary
"""
# Simulate API call (replace with actual weather API)
return {
"location": request.location,
"temperature": 22,
"units": request.units,
"conditions": "sunny"
}
async def main() -> None:
"""Run agent with tools."""
client = genai.Client(vertexai=True)
# Create tool from function
weather_tool = types.Tool(
function_declarations=[
types.FunctionDeclaration(
name="get_weather",
description="Get current weather for a location",
parameters=WeatherRequest.model_json_schema()
)
]
)
# Create agent with tools
model = "gemini-2.0-flash-exp"
chat = client.aio.chats.create(
model=model,
config=types.GenerateContentConfig(
tools=[weather_tool],
temperature=0.7
)
)
# Send message
response = await chat.send_message(
"What's the weather in San Francisco?"
)
# Handle tool calls
if response.candidates[0].content.parts:
for part in response.candidates[0].content.parts:
if part.function_call:
# Execute tool
result = await get_weather(
WeatherRequest(**part.function_call.args)
)
# Send result back to agent
response = await chat.send_message(
types.Content(
parts=[types.Part(
function_response=types.FunctionResponse(
name=part.function_call.name,
response=result
)
)]
)
)
print(response.text)
if __name__ == "__main__":
asyncio.run(main())
```
## Project Directory Structure (Recommended)
Organize ADK projects with clear separation:
```
my-adk-agent/
├── .env # Environment configuration
├── .env.example # Template for environment variables
├── pyproject.toml # Python dependencies (uv)
├── README.md # Project documentation
├── src/
│ ├── __init__.py
│ ├── agent.py # Main agent definition
│ ├── tools/
│ │ ├── __init__.py
│ │ ├── weather.py # Weather tool
│ │ └── search.py # Search tool
│ ├── schemas/
│ │ ├── __init__.py
│ │ └── models.py # Pydantic schemas
│ └── config.py # Configuration management
└── tests/
├── __init__.py
├── test_agent.py
└── test_tools.py
```
## Key ADK Concepts
### 1. LlmAgent vs WorkflowAgent
**LlmAgent**: For dynamic, reasoning-based tasks
- Model decides next action based on context
- Suitable for open-ended conversations
- Flexible tool selection
**WorkflowAgent**: For deterministic processes
- Hardcoded execution flow
- Suitable for repeatable workflows
- Predictable behavior
### 2. Session State
Share dataUse when you need to install the embedded robot agents into either .cursor/agents or .claude/agents, selecting the destination interactively and copying the embedded agent definitions from project assets. This should trigger for requests such as Install embedded agents; Bootstrap .cursor/agents; Bootstrap .claude/agents; Copy robot agents. Part of cursor-rules-java project
Use when you need to generate an AGENTS.md file for a Java repository — covering project conventions, tech stack, file structure, commands, Git workflow, and contributor boundaries — through a modular, step-based interactive process that adapts to your specific project needs. This should trigger for requests such as Create AGENTS.md; Update AGENTS.md file; Add agent instructions. Part of cursor-rules-java project
>
Generated skill from request: trinity auto-boot validator
Create your OpenAI Agents SDK skill in one prompt, then learn to improve it throughout the chapter
Create your OpenAI Agents SDK skill in one prompt, then learn to improve it throughout the chapter
Create your Google Agent Development Kit skill in one prompt, then learn to improve it throughout the chapter