尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證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.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 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:
find_bridges across several categories, find_places), all at once.find_swaps from every person, starting with whoever was served least. A real run: "The bridges leaned towards classic Afro-jazz and gospel, so I am exploring what from Sipho's modern Afrobeats universe Gogo Thandi and the family would love."submit_plan. The server attaches the real Qloo entities, drops anything without evidence, and adds counts (Qloo lookups, rounds).The agent is visible, not hidden behind a spinner. Every lookup carries the agent's own one-line reason, the trail is grouped into rounds, and the results open with an Agent's notes card: what it explored, what it noticed, how it balanced the group, and what it changed after the last visit.
Each step streams to the browser, so you watch the agent research.
Built to survive a free tier. Gemini's free quota is per model per day, so the agent walks a list of six models and hands over when one is busy or out of quota. Identical requests (like the live example) replay the last plan from memory in a few seconds instead of spending quota. Qloo lookups are queued (at most 4 at a time, because the hackathon key rate-limits bursts), retried on a rate limit or dropped connection, and cached per server instance.
Needs Node 20+, a Qloo hackathon API key and a Gemini API key.
cp .env.example .env # then fill in QLOO_API_KEY and GEMINI_API_KEY
npm run dev # http://localhost:3100
npm test # offline unit tests (agent loop, evidence rule, model fallback, input checks, Qloo queue, invite links)
npm run test:live # live smoke check against Qloo
No build step and no dependencies: plain HTML/CSS/JS in public/, two serverless functions in api/.
Import the repo into Vercel, add QLOO_API_KEY and GEMINI_API_KEY as environment variables, deploy. vercel.json sets no framework (so Vercel serves public/ as static files instead of guessing a Node server) and gives the agent up to 5 minutes per run.
MIT licensed. See LICENSE.