尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證An agent that turns what you love into what you do. Built with Qloo and Claude for the Qloo Agentic Hackathon.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗An agent that turns what you love into what you do. Tap a few favorite shows, songs, books and games, swipe through a few activities, and Echo plans one real thing to do near you, matched to your taste with Qloo. It checks in afterwards and plans the next one better. It can also plan with friends, including friends who don't use Echo.
Built for the Qloo Agentic Hackathon.
People know their taste in media precisely and their taste in going out barely at all. "What should I do this weekend?" ends in the same three places, or a list of generic "top 10 things to do" that knows nothing about you. Picking up a new hobby is worse: you don't know where to start, what's nearby, or whether you'd like it.
Echo uses the one thing people can describe easily, what they love, and Qloo's cross-domain taste graph to answer the question they can't: where to go, and what to try.
| Onboarding in about a minute | Tap titles from a shuffled grid with real cover art; Qloo suggests more as you tap. Add anything missing by typing or speaking. Pick your area. Swipe through activities: want to try, already do, or not for me. |
| Your echo | A taste profile written from Qloo's analysis: a summary, traits you can confirm or dismiss, leanings, and picks across film, TV, books, music and podcasts, each with a "because you like…" reason. Shareable as an image. |
| One thing for you | Every day home proposes one concrete plan, such as "Tomorrow, 6pm: Halo Pottery". Say "I'm in" or ask for another. |
| Plans on request | Ask in your own words ("pottery Tuesday evening, somewhere quiet"). Watch the agent work: places appear as it finds them, and it says what it set aside and why. |
| The plan | One pick plus a backup you can swap, hours checked for that day, one-tap calendar (the event carries a check-in link), and a link friends can answer with "I'm in". |
| Check-ins | "Did you go?" with quick answers. Echo replies, notes what it learned ("prefers open studio over classes") and suggests what's next. |
| Six-week hobby plans | Turn a first visit into dated steps. Each step can find a place for itself, and after each one Echo rewrites the rest based on how it went. |
| With friends | Compare tastes (shared ground and differences from Qloo's Analysis Compare), then let each person's Echo talk it over and agree on a plan, scored for every person. Friends without Echo can be added from a few things they love. |
| Voice | Talk to Echo on home, in requests and in check-ins. After you speak, it answers out loud in a natural voice. |
| Use with AI | Copy your echo as a prompt for any assistant. |
Claude reasons and writes. Qloo supplies the places and the taste matching. Every recommendation traces back to a Qloo result; the model never invents a place.
Planning a mission (src/lib/plans/planner.ts). Claude Sonnet runs as a tool-using agent:
find_places calls Qloo Insights (filter.type=urn:entity:place, a category tag, the person's taste entities as signals, feature.explainability). It returns nearby places ranked by affinity, with why each one matches.search_categories calls Qloo Tags when a request names something outside the known categories.rule_out) and submits a plan (finish_plan).Every tool call is streamed to the screen as a step and a place card.
Elsewhere:
Models are chosen per agent in src/lib/ai/models.ts: Sonnet where reasoning matters, Haiku where speed and cost matter. Structured outputs are used throughout.
Browser (Next.js client) Vercel (Next.js API routes) Services
───────────────────────── ──────────────────────────── ─────────────────
Onboarding, home, plans, ──▶ guard: session, per-user limits, ──▶ Claude (Sonnet, Haiku)
friends, check-ins global daily spend cap Qloo API
localStorage + sync ──▶ planner / group / coach agents ──▶ OpenStreetMap (Overpass, Nominatim)
Web Speech (listen) Qloo client: cache, budget, OpenAI TTS (Echo's voice)
rate limiting ──▶ Supabase Postgres
src/lib/qloo): every response is cached in Postgres and shared across serverless instances. Live calls are spaced to Qloo's 5-per-second limit and retried once on errors, and identical concurrent requests share a call. A daily cap and a monthly reserve stop spending before the quota runs out. Without QLOO_LIVE=1 the client only serves the cache, so development never spends quota by accident.src/lib/api/guard.ts, src/lib/ai/spend.ts):
Requires Node 22+.
npm install
cp .env.local.example .env.local
npm run dev
Then fill in .env.local:
ANTHROPIC_API_KEYQLOO_API_KEY (hackathon keys work on https://hackathon.api.qloo.com)OPENAI_API_KEY for the natural voice (without it, the browser's voice is used)Live Qloo calls are off by default. Set QLOO_LIVE=1 to make them; with it off, Echo only uses cached responses and OpenStreetMap.
With Supabase configured, create the tables with:
npm run db:migrate
Checks:
npm test
npm run typecheck
Other scripts: npm run qloo:probe (exercises each Qloo endpoint once and saves responses locally), npm run qloo:seed (loads those responses into the local cache for offline work), npm run claude:check and npm run db:check.
Qloo response data stays out of the repo: results/ and .cache/ are gitignored.
src/app/ screens and API routes (onboarding, home, plan, friends, echo, api/*)
src/lib/qloo/ Qloo client, cache, budget, response normalization
src/lib/plans/ planner agent, group planning, coach, time and calendar helpers
src/lib/profile/ profile building, taste card, background re-checks
src/lib/places/ OpenStreetMap opening-hours parsing
src/lib/ai/ Anthropic client with metered spend, model choices, prices
src/lib/voice/ text-to-speech with its own budget
supabase/migrations Postgres schema, row-level security, RPCs
MIT