On this page
← Back to the blog
Artificial Intelligence10 min read

What I Learned from Building a Kaggle AI Agents Project

Building Clinical AI Kit for Google and Kaggle's AI Agents capstone: a Google ADK multi-agent system for clinicians, from product concept and Claude Design prototypes to a deployed, fully documented application.

Clinical AI Kit is my attempt to create a system where clinicians can inspect the evidence, tools, uncertainty, and approval boundaries behind every result. You can find all the relevant information about it here:

Tools Used

Phase

Tools

Research and ideation

Kaggle AI Agents course notebooks, Google ADK documentation, reference ADK samples.

AI collaboration

Claude Code, Claude Design, Codex, Antigravity, AI-assisted requirements critique, reusable agent skills and a standardized AI harness.

Product design

Claude Design, Google Stitch screen exports, design tokens, component prompts

Agent development

Python 3.11, Google ADK, Gemini, Pydantic, MCP, A2A

Product development

FastAPI, React, TypeScript, Vite, React Router, Plotly

Data and retrieval

SQLite, SQLAlchemy, Vertex AI embeddings, Vertex AI Ranking API, deterministic keyword fallback

Documents and images

PyMuPDF, Pillow, Gemini multimodal processing

Documentation

Obsidian, Draw.io, JSON Canvas, generated LLM Wiki, Swagger, ReDoc

Verification

pytest, pytest-asyncio, ADK eval, Vitest, Testing Library, Ruff

Packaging and deployment

uv, npm, Docker, Cloud Build, Cloud Run, Vertex AI Agent Engine configuration

Where the Idea Began

If you have ever worked with me, you’d know I am a huge fan of healthcare-based products. I studied psychology and specialized in mental health. One of the longest projects I worked on was a system that helped clinicians treat patients with sleep apnea.

I also previously vibe-coded/engineered another project agenticlibrary.net (which is due for an update), but I never had the motivation to turn one of my ideas into a proper healthcare project.

That was until Google and Kaggle’s “AI Agents: Intensive Vibe Coding Capstone Project” was announced, and I realized I wanted to create a capstone project that would fulfill all the criteria while also having my personal touch.

Product Concept

Anyone who has created an AI project will know that the initial results will be mostly rubbish, regardless of whether you decided to do it with an AI Coding Agent like Claude Code or Codex, or with a pre-built tool like Lovable, Bolt, Base 44, or similar.

This is because, as good as coding agents are right now, they still take the easy route: creating something from known patterns in their training data, but they don't properly search for what similar products look like.

And quite honestly, everyone and their grandmother has seen a RAG-based system in 2026. It was a new solution back in 2023~ but not anymore.

I also didn’t think that a single agentic workflow made sense, because AI without a proper use case and a problem to solve is only a flashy demo without real substance.

Hence why I thought back to the time I helped create another healthcare system that clinicians would use. That got me thinking about how information-dense it was, the number of tabs and navigation options, and the need to store everything in one place.

This is how Clinician AI Kit came to be. The premise is that the system will act as the command center for a clinician who wants more information about their patients.

Back-and-forth with AI

As I worked alone on this capstone project, I didn’t really get to brainstorm with someone else. That’s when AI came into the picture. While I had the original idea, I had a back-and-forth discussion with Claude to grill my idea using the grill-me skill, which required me to reconsider many aspects of the project as I went.

Simply put, while the original idea had substance, it lacked many of the finer details that would make the application usable; it wasn't technically sound and had many missing components that made the agents unusable in the state I had imagined.

After an hour-long session brainstorming how the application would look, I decided to use Claude Design to visualize the idea as a high-fidelity prototype.

Why Is It Different?

Flashy demos and AI-generated websites rely on a lot of non-existent social proof and testimonials, and on a “premium glassmorphism” feel. This one here began by answering the question, “What would a clinical AI product look like if every important action were inspectable?”

And the answers narrowed down to “It must be the overall clinician platform with all the information a clinician would use anyway, while still having access to all the AI functionality they are supposed to.

Screenshot from initial dashboard of Clinical AI Kit
Screenshot from initial dashboard of Clinical AI Kit

That also resulted in building three separate Agentic AI solutions that are tightly integrated with the existing information from the platform:

  1. A clinician-patient session extraction capability that allows a clinician to upload their session images or PDFs, extract all structured information from them, and use it immediately, while still providing confidence and source evidence.
  2. A Patient-specific multi-model RAG system where a clinician can ask a patient-specific question and receive a cited answer grounded in clinician notes, documents, images, and based on patient data retained in a vector database.
  3. A database intelligence capability allowing clinicians to ask a question about the hospital’s patient cohort and get a generated read-only SQL query that provides users with patient data and a Pydantic-based visualization from the dataset.

If you were to visualize this whole thing, it would look something like this:

Clinical AI Kit multi-agent hierarchy diagram: a root orchestrator delegating to image-extraction, patient Q&A, and database-intelligence pipelines totalling 22 LLM agents.

While the capabilities don’t promise HIPAA-compliant data handling, as this is just a POC, the application uses HIPAA-aware design patterns and can be extended into a functional application.

Design Phase with Claude Design

As anyone who has read enough hype articles and seen LinkedIn influencers talk about how big spec-driven development and proper planning is, I thought, “hey, why not directly go for a one-shot prompt to create the overall website?

A failure of a one-shot prompt.
A failure of a one-shot prompt.

Needless to say, the final results were pathetically bad. It churned out a generic, AI-sloppy page.

Generic dark-themed landing page branded CLARA, produced by the failed one-shot prompt.

So instead, I worked on a version with Google’s Stitch and created multiple variations with a proper design language (and tokens) file to support UI creation.

Google Stitch canvas showing many Clinical Intelligence Command Center screen variations.

This resulted in a much better initial set of artifacts (or few-shot examples) for Claude Design to follow before building any high-fidelity prototype.

Column of Claude Design screen artifacts used as few-shot examples for the high-fidelity prototype.

In hindsight, if I were making this project from scratch again, I would first create the initial screens, then build a Design System for Claude to consume, create a proper Claude Design, and move to implementation.

Project Scaffolding and Technology Stack

While working on the initial panels and application design, I also set up the project’s scaffolding.

The first decision was to make an overall Architecture choice for what the application would look like despite the fancy Google ADK design, and I decided on this:

  1. React clinical interface,
  2. FastAPI product and policy layer,
  3. Google ADK agent runtime,
  4. Tools, retrieval, persistence, MCP, A2A, and audit.

While I would have loved to show you the exact /grill-with-docs, the conversation is long gone, and Claude Code refused to locate the session itself. To summarize, though, the project’s overall tech stack and decisions didn’t come from my own whim (purely because I was the only one working on this project with no external feedback) but came from a back-and-forth discussion alongside Opus 4.6 (since I still think it was better than 4.7 and 4.8 at the time). The final decision regarding the application resulted in this:

Layer

Stack

Agent framework

Google ADK 2.3+, LlmAgent, SequentialAgent, LoopAgent

Models

Gemini 3.1 tiers through centralized llm.build_model()

Backend

Python 3.11, FastAPI, Uvicorn, Pydantic

Persistence

SQLite, SQLAlchemy, tenant-scoped repositories

Retrieval

gemini-embedding-001, Vertex AI Ranking API, keyword fallback

Interoperability

FastMCP over JSON-RPC/stdio, A2A server

Frontend

React, TypeScript, Vite, React Router

Visualization

Plotly, interactive SVG/PNG diagram viewer

Document processing

PyMuPDF, Pillow, Gemini multimodal analysis

Security

ADK callbacks, deterministic regex scanning, scoped tool validation

Observability

OpenTelemetry, OTLP/Cloud Trace, structured JSON logs, audit events

Testing

pytest, pytest-asyncio, ADK eval, Vitest, Testing Library

Documentation

Obsidian, Draw.io, JSON Canvas, generated HTML and LLM Wiki

Deployment

Multi-stage Docker, Cloud Build, Cloud Run, Agent Engine configuration

In addition to creating my own version of the Karpathy Wiki, Swagger, and Redoc documentation, I used an adjusted version of Agents365-ai/drawio-skill, which helped me create the application's overall architecture diagrams and understand what the project will look like upon completion. This also resulted in the structure of the application’s harness, which looked like this:

Component

What it is

Location

Rules and skills

Reusable project rules for brevity, engineering, security, and testing, plus skills for deployment, testing, diagrams, and Obsidian

.agents/rules/, .agents/skills/

Security and testing conventions

Three-layer callback pipeline covering input, tools, and output; deterministic pytest conventions with model tests gated by an API key

.agents/rules/security.md, .agents/rules/testing.md

Specialized review agents

Read-focused subagents scoped to harness integrity, ADK state and memory, security boundaries, and deterministic verification

.agents/agents/

Pre-commit verification

A single command that runs formatting, harness auditing, and pytest before commit

.agents/commands/pre-commit-gate.md

Automatic wiki synchronization

A deterministic, idempotent script that regenerates the Obsidian Project Wiki after each work turn

scripts/sync_wiki.py

Generated inventories

Machine-managed pages covering modules, tests, the changelog, and documentation drift; these should not be edited manually

Project Wiki/_generated/

End-to-End Documentation of the Project

Resource

Link

Purpose

Kaggle writeup

Clinical AI Kit — Kaggle Writeup

Published project submission

GitHub repository

Google-Capstone-Project

Canonical source repository

Interactive application

Clinical AI Kit

Main deployed application

Interactive diagram atlas

Architecture Diagram Atlas

Embedded architecture visualizations

Documentation hub

Project Documentation

Central entry point for all documentation

LLM Wiki

LLM-Oriented Wiki

Architecture documentation optimized for LLM navigation

Project Wiki

Project Wiki

Human-readable Obsidian project documentation

Documentation guide

How to Access Documentation

Guide to every documentation surface

Swagger

Swagger API Console

Interactive API documentation

ReDoc

ReDoc API Specification

Readable API reference

Application workflows

Resource

Link

Purpose

Evidence extraction

Session Image Extraction

PDF and image extraction with human review

Multimodal Q&A

Patient Q&A

Patient-scoped answers with evidence and citations

Database intelligence

Population Insights

Natural-language cohort analysis with inspectable SQL

Clinician dashboard

Dashboard

Main clinical command center

Patient search

Patients

Synthetic patient-record exploration

Clinical inbox

Clinical Inbox

Notifications, reviews and audit activity

Agent configuration

Agent Configuration

Agent topology and configuration surface

Developer console

Developer Console

Documentation and API development tools

API and operational endpoints

Resource

Link

Purpose

Agent catalog

Public Agent Topology

Root orchestrator and 21-specialist catalog

OpenAPI schema

openapi.json

Machine-readable API contract

Service health

Health Endpoint

Cloud Run liveness check

Component readiness

Readiness Endpoint

Database, storage, and runtime readiness

System health

System Component Health

Detailed component status

Extended API health

V2 Health

Extended database and storage diagnostics

Source code and technical evidence

Resource

Link

Demonstrates

Project README

README

Problem, solution, architecture, and setup

System architecture

Architecture Documentation

Full system design

ADK agent package

capstone_agent

Agents, tools, memory, security, and observability

Agent orchestration

orchestration.py

SequentialAgent and LoopAgent pipelines

Root agent

agent.py

Root orchestrator and agent routing

Clinical tools

tools.py

Production agent tool layer

Security callbacks

callbacks.py

Input, tool and output security boundaries

Security implementation

security.py

Injection, secret and PII detection

Memory architecture

memory.py

Session and long-term memory governance

Context engineering

context.py

Token budgeting and deterministic compaction

MCP server

MCP Implementation

FastMCP interoperability

FastAPI application

clinical_app

Product API and deterministic runtime

React frontend

frontend

React, Vite and TypeScript application

Project Wiki source

Project Wiki

Obsidian knowledge base

Deployment guide

Deployment README

Cloud Run and Agent Engine deployment

Cloud Build pipeline

cloudbuild.yaml

Automated build and Cloud Run release

Dockerfile

Production Dockerfile

Multi-stage application container

Evaluation suite

ADK Evaluations

Model-dependent evaluation assets

Automated tests

Test Suite

Security, behavioral and integration testing

Agent skills

Project Skills

Reusable deployment, testing and documentation workflows

License

Apache 2.0 License

Open-source licensing

Resource

Link

Your writeup

Clinical AI Kit

Competition

AI Agents: Intensive Vibe Coding Capstone Project

Competition writeups

All Project Writeups

Closing Thoughts

This was a really fun Agentic vibe-coding competition to be a part of, even though I didn't win.

I would most likely repeat something like that in the future as I improve my skill set (and when I am not full of work-related tasks to do, as I am now).

In closing, the Clinical AI Kit began as an attempt to create a vibe-coded product based on multi-modal agent (MAS) architecture that allows clinicians to organize their fragmented clinical data. The result isn’t a medical device application, nor is it HIPAA-compliant. Still, it shows you can use Google ADK to orchestrate agents that help a human find the exact information they need and the exact references it came from.

If anyone wants to play around with the project or extend it, the repo is available here: Google-Capstone-Project.

ai-agentsgoogle-adkkagglevibe-codingclaudeproduct-managemententerprise-architecture