尚未检测到更新。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