No updates detected yet. GitHub releases will appear here.
An AI agent that finds the shared world between people who've drifted apart, using Qloo's taste graph to bridge different tastes and plan their next time together. Built for the Qloo Agentic Hackathon.
翻訳待ち
Loading the full README.
Read the full README ↗An AI agent that finds the shared world between people who have drifted apart, then plans their next time together.
Built for the Qloo Agentic Hackathon.
Live demo: https://commonground-agent.vercel.app
Click Watch a live example to see the agent plan Sunday lunch for Gogo Thandi and her three grandkids, no typing needed. Then try it with your own people.
A gogo who loves Jim Reeves. Grandkids who love Burna Boy, Lucky Dube and Ladysmith Black Mambazo. They love each other, but Sunday lunch runs out of things to say. About 1 in 6 people worldwide experience loneliness (WHO, 2025), and often the people we love are right there. We've just run out of things to share.
Common Ground takes a few favourites from each person and uses Qloo's taste graph to find:
Adding interests is a search over Qloo: type a name, optionally narrow it with a category button, and pick the right match from the labelled results ("Tyla · Public figure · South African singer-songwriter"). A namesake isn't hidden as a duplicate: Tyla the South African singer still shows next to Tyla the English rock musician.
Each person can add their own favourites. After adding yours, tap Invite them to add theirs: your picks travel inside a link (no accounts, no database) that you send on WhatsApp. The other person opens it, sees your card filled in, adds theirs and gets the plan. Links are checked strictly when opened, and anything that doesn't look like a genuine invite is ignored.
Your connections are kept. Every connection with a plan is saved on your device and listed on the home page ("Gogo Thandi, Sipho, Lerato and Ayanda · Visit 3 · planned 2 days ago"). Open one to go straight back to its plan, past visits and what the agent has learned; starting a new one never wipes the old ones. Tastes change, so you can edit anyone's favourites at any time and either go back to the current plan or tap Update our plan; the agent keeps what it learned from past visits.
After the visit you tap what landed. The agent folds that into everyone's taste and plans the next visit.
Works for 2 to 5 people: grandparent and grandchildren, couples who've grown distant, parents and teens, carers and residents, and two people about to go on a first date who want something to talk about.
A plain LLM guesses at what a 75-year-old Jim Reeves fan and a 16-year-old Burna Boy fan might both enjoy. Qloo knows. Four Qloo calls do the work:
| What | Qloo call |
|---|---|
| Resolve "Brenda Fassie" to a real entity, optionally within a category (Music, Films, TV shows, Books, Podcasts, Food & places, Travel, Sport & brands, Famous people) | GET /search with types |
| Bridges: one blended signal from everyone's favourites | GET /v2/insights with signal.interests.entities=A,B,C |
| Swaps: take person A's world, re-rank it by everyone else's taste | GET /v2/insights with filter.results.entities |
| Real places nearby | GET /v2/insights with filter.type=urn:entity:place, filter.location=POINT(lon lat) and a 15 km filter.location.radius |
Evidence is enforced in code, not just in the prompt. Every bridge and swap must point at an entity id that a Qloo call actually returned during that run, or it is dropped before anyone sees it. Things the people already love are dropped too, so every suggestion is a discovery. Everything on screen is labelled From Qloo data or Agent's idea.
Places must be somewhere you'd spend an afternoon. Qloo's nearby results include schools, radio stations and holiday villas, so the server keeps only places whose Qloo categories are restaurants, cafés, bars, venues, museums, parks, markets and the like.
Places are searched by exact coordinates. Qloo matches place names loosely (a text search for "Durban" returned cafés in Durbanville, Cape Town), so the location box suggests real towns as you type and sends the chosen town's coordinates.
lib/agent.js runs a tool-calling loop on Gemini, in rounds:
This is the beginning of the README. Read the rest at the original. Read the full README ↗