-
-
Sign Up: User Authorized Connections -- Location and Screen Time
-
Main dashboard page to give users an overview of what they have accomplished.
-
User Login/Sign Up Page
-
Celebration After Goal Met
-
Sharing Goals with Friends
-
Sign Up: User Authorized Connections -- Google Calendar
-
User can update their connections and privacy.
-
Real-time updates sent to your friends about what goals they have accomplished.
-
Type "hang out" and agents deliberate -- based on your schedule -- which times would work best. One can select the time.
Inspiration
After graduation, our friend group scattered to San Francisco, Austin, Seattle and New York. Within a few months the group chat that used to buzz all day went quiet. Nobody stopped caring; keeping up just took effort that nobody had. Someone would hit a big goal and never mention it. "We should catch up!" turned into a running joke, because finding a time across four time zones and four busy schedules never happened.
We asked a simple question: what if every friend had an agent that did that work for them, noticing the wins worth sharing and handling the logistics, so the friendship just had to show up?
Why "Waggle"?
Honeybees have their own group chat: the waggle dance. When a forager finds something good, she flies back to the hive and dances a figure-eight. The angle of her "waggle" points toward the spot relative to the sun, and how long she waggles says how far away it is. Her hive-mates read the dance and fly there together. (Karl von Frisch decoded the dance and shared the 1973 Nobel Prize for it.)
That's what we wanted for scattered friends: a way to say here's where I've been and what I found, so the whole group can find its way back together. In Waggle, your agent does the dance for you. It shares your wins and points your friends to a time and place to meet.
What it does
Waggle gives every friend their own AI agent.
- Wins get shared without anyone remembering to post. Reach a goal, like your fourth run of the week, and your agent posts the win to your friends. They react and reply in real time, and confetti goes off on everyone's screen.
- "Let's catch up" actually turns into plans. When someone says it, a coordinator agent asks each friend's agent for their week. It finds times everyone is free, plans around someone's exam week, and notices when two friends live within 20 miles of each other. Then Claude searches the web for specific ideas, like a pizza spot in Berkeley, a watch party for a new release, or a game night, using what people said in the chat. Friends vote, and the plan locks in.
- Privacy is built into how the agents work. For each source (calendar, Canvas, photos, Screen Time) you choose Share wins, Planning only or Off. "Planning only" data shapes plans but never appears in chat. Calendar event titles and deadline names stay private; agents only exchange free/busy. Our live Agent Network screen shows every request and reply between agents, including what each one kept private.
- It's friends only. You can only message, or make groups with, people who are your friends, and chats are visible only to their members.
How we built it
- SpacetimeDB is the backbone. Friends, chats, goals, plans and votes live in one TypeScript module that syncs to every client in real time. The privacy rules are enforced in the database's own logic: private tables, per-viewer views, and an agent that can only speak for friends who have allowed it.
- Fetch.ai uAgents run one agent per friend plus a coordinator. When someone asks to catch up, the coordinator messages each friend's agent, and each one replies with only what its person allows. The coordinator also speaks the Agent Chat Protocol, so it's reachable on ASI:One.
- Claude does the thinking. Claude Opus with web search proposes timely, specific ideas from the chat, the date and people's locations. It decides whether a moment is worth sharing and writes the post. Claude Haiku gives demo characters fast, in-character replies.
- A Python FastAPI service handles Google Calendar sign-in (with refresh tokens), Canvas deadlines, photo locations and Screen Time screenshots. OpenStreetMap geocoding provides the "you two live close" check.
- Two clients: a React + Vite web app, and an Expo / React Native iPhone app with native calendar, photo and Screen Time access. Both have guided setup that triggers the real permission prompts.
Challenges we ran into
- Making privacy real, not just a setting. It's easy to promise "we only share what you allow" and hard to enforce it. We moved every rule into the database itself: private tables, per-viewer views, consent checks before data is stored, and agent-only actions.
- Agents that feel alive, not robotic. The first version of the planner only suggested "video call at 6 PM." Getting specific, current ideas meant combining web search, geocoding, chat context and free/busy data. We also had to fit all of it under a 30-second limit so people aren't left waiting in the chat.
- A goal-win bug that spammed every chat. Logging in synced goals that were already done, and the agents celebrated all of them. We fixed it by only celebrating goals the agent actually saw go from in progress to done.
- The unglamorous parts:
- Xcode 27 broke our iOS build (new scene-lifecycle requirements and deployment targets).
- Free hosting puts background agents to sleep.
- Accounts kept their old login token when we switched servers, and the new server rejected it.
What we learned
- Agents are most useful when they handle logistics between people, not when they replace the people.
- Privacy is something you design for from the start, at the data layer, not something you add later.
- Real-time sync changes how a social app feels. Seeing reactions and votes land instantly is what makes it feel like a group chat and not a form.
- Showing the agents' work (who asked whom, what was shared, what stayed private) builds more trust than any privacy policy. Like a waggle dance, the signal is only useful if the rest of the hive can read it.
What's next
- Bring Apple Health back, redesigned.
- Calendar invites when a plan locks in.
- Check-on-me nudges, where a trusted friend gets a gentle heads-up when someone has had a rough week.
- Letting the agents learn each group's favorite kinds of hangouts.
Built With
- agentverse
- anthropic
- asi-one
- canvas-lms
- claude
- expo.io
- fastapi
- fetch.ai
- google-auth
- google-calendar-api
- healthkit
- openstreetmap
- python
- react
- react-native
- render
- screen-time-api
- spacetimedb
- typescript
- uagents
- uvicorn
- vercel
- vite
Log in or sign up for Devpost to join the conversation.