Inspiration

AI is moving rapidly, and the industry is struggling to migrate its UI into a real agentic experience: something beyond chatbots and their usage patterns. My question was always the same. How can interaction with an AI feel natural, carry a meaning deep enough to connect with me, and spread across the whole spectrum of my actions, not just one narrow task?

Most of what we do is linked to our habits, our way of thinking, and how we relate to our own memories. Many things shape our behavior and we do not know why, or what they are, or maybe we do not even want to know about them.

That is why I created this app. I did not want it to solve a single problem. I pointed it at life and memory itself, because we humans, in the end, are a collection of memories and the events that happened to us.

What it does

The keepers are CAG agents: each one holds its own set of memories, one per layer of your life. The music you hear, the podcasts you consume, the movies you watch, the dreams that impact you, your diet, your workout routine, your meetings at work. Each keeper captures who you are in those moments.

Then the orchestrator does exactly what humans do: it consolidates by dreaming. Every night, with the help of a knowledge graph, the island connects all your life layers holistically and reveals the aspects you are more afraid of, the things you should be attentive to, the ones you are intentionally avoiding. Dark keepers are born from those patterns, and the system walks with you on the journey of actually facing them.

And on ordinary days, keepers simply remember for you:

"Hey, that movie I saw like three weeks ago, the guy on an airplane, what was the name of it?"

"What was that thing John asked me to do that was urgent?"

The answer comes back instantly, grounded in the books your keepers actually wrote from your own memories.

It is deliberately not a chatbot. You do not prompt it, you talk to it and navigate it. To break the monotony, the app is gamified: your knowledge of your own life is a living village, with keepers walking around, remembering, and dreaming about you, ready whenever you need to consult them.

Privacy first

The system is flexible enough to run its frontend on the cloud while your data stays yours: your conversations, your memories, and the whole knowledge graph can live on a local Gemma model. If you are willing to trade a frontier model for your daily usage, Google's Gemma open weights run the entire system on your own hardware. Same code, three model tiers: Gemini on Vertex AI, local Gemma on llama.cpp, and a deterministic fake tier that keeps every test offline.

How I built it

The project is a set of isolated boxes, each with its own contract: whoever uses a box reads its contract, never its code.

  • Gemini 3.5 on Vertex AI (global endpoint): keeper replies, cross-keeper synthesis, dream prose
  • Google ADK + GenAI SDK: a root "monument" agent that owns no corpus and calls each keeper as a tool (call and return, so it can fan out and synthesize across keepers); dream agents fan out nightly
  • Cloud Run: one service serving both the three.js frontend and the FastAPI engine
  • Firestore: worlds, keepers, books, sessions, dream runs
  • Pub/Sub + Cloud Scheduler: the nightly dream is real infrastructure, a push subscription into the consolidation job
  • Gemma on llama.cpp: the local tier
  • three.js SPA with no build step, FastAPI, Docker; the whole stack runs locally on the official Firestore emulator at zero cost

Challenges I ran into

  • Gemini 3.x publisher models return 404 on regional Vertex endpoints; they only resolve on the global endpoint, and finding that took real log archaeology.
  • The obvious multi-agent shape (agent transfer) moves control into one keeper and kills cross-keeper synthesis. The design that works is a root that holds nothing and calls keepers as tools.
  • Cloud Run throttles CPU after the response returns, so dreaming could not be a background thread. Moving it to Pub/Sub made it slower to build and better designed.
  • A $150 credit budget forces discipline: usage meters, caps, scale to zero, and a kill switch that detaches billing at a hard line.

What I learned

Consolidation is architecture, not metaphor: session compaction is literally the sleep mechanic, and the nightly fan-out plus synthesis is a multi-agent pattern doing something genuinely human. Per-keeper isolation beats one big context in groundedness. And a three-tier model gateway made development free, the demo reproducible anywhere, and privacy a real option instead of a promise.

Built With

Share this project:

Updates

posted an update

Shipped. What is integrated and running:

Gemini 3.5 Flash on Vertex AI, global endpoint. Every keeper reply, every cross-keeper synthesis, every line of dream prose.

Google ADK with the GenAI SDK. A root agent that holds no corpus and calls each keeper as a tool, so one question fans out across every shelf and comes back as one answer. Agent transfer would have trapped control inside a single keeper and killed that.

Cloud Run. One service for the three.js island and the FastAPI engine, same URL.

Firestore. The only store: worlds, keepers, books, sessions, dream runs.

Pub/Sub and Cloud Scheduler. The nightly dream is infrastructure, not a background thread: Scheduler publishes at 03:00, tired keepers publish their own events, a push subscription delivers both into the consolidation run.

Cloud Text-to-Speech and Cloud Speech-to-Text. Hold T in any dialog and the keeper answers in her own voice.

Gemma open weights on llama.cpp. One env var swaps the brain from Gemini to your own machine. Same code, same island, memories never leave your hardware. A third deterministic tier keeps every test offline.

Cloud Build, Artifact Registry, Cloud Logging, Cloud Billing. Source deploys from GitHub, and a budget event that detaches billing at a hard line.

Outside Google, keepers read what you point them at: YouTube and podcast transcripts, MusicBrainz song facts, LRCLIB lyrics, Gutendex books, OMDb and Wikipedia film plots. They store what they write, never a copy of the source.

802 contract tests against the real FastAPI app and the real ADK runner. Runs are capped at 12 model calls, stop on a repeated tool call, and every flow has a deterministic fallback, so a bad model answer never breaks the game.

AllThingsAgenticHackathon

Log in or sign up for Devpost to join the conversation.

Submission history