Inspiration

It started with a reel. One of us sent the other a shawarma place on Instagram, got back "we should go!", and then nothing happened, which is how most of these end. When we sat down Saturday morning to brainstorm, that was the first thing on the whiteboard, and the question underneath it was simple: Muse already knows a lot about you (your calendar, your DMs, the places you save), so why does it only ever talk to you? What if your Muse could talk to your friend's Muse?

We took the idea to the Meta engineers at the track table before writing a line of code, and one of them summed up the problem better than we had: "the amount of times I said 'we should do this' and it never happened." Three things they said shaped everything after. The novel part is the agents talking to each other, and it has to be real, not a slide. Privacy has to be opt-in and granular, the way Close Friends works, with no guessing closeness from message counts. And we should build it the way the Muse team would: as a feature proposal for Muse, not a separate app.

What it does

A friend sends you a reel of a place. Your Muse reads the caption, sees a place worth a plan, and reaches out to your friend's Muse. The two agents compare notes, each seeing only its own person's calendar and whatever that person chose to share, and settle on a time. Then each of you gets one card: "You and Lisa both want to try this place, and you're both free Tuesday 6 to 8. Reach out?" You say yes, Muse drafts the message and opens WhatsApp, and you press send. The agents draft; the human sends. The plan then lives on with a calendar hold, a reminder on the day, and an "again next month?" afterward. We count hangouts that happen between people, not messages between agents.

How we built it

Two separate Muse Spark agents, through the Meta Model API, one per person. Each gets only its own person's context through tools, and they talk over real HTTP in structured messages (an intent, an offer, a counter, a yes) rather than free text, which keeps the conversation honest and readable on screen. Candidate times come from both calendars by code, so the model can never invent a free evening. A sharing gate in our code checks every outgoing message against what its sender agreed to share, and the receiver checks again; flip a friend's location off and the place disappears from what the other side sees, with the removal logged where you can read it. The model reads the reel's place and hours from its caption live. The whole thing runs on Next.js and Supabase on Vercel, and a judge can open it on their own phone from a QR code at musefriends.tech, with a simulated friend named Michelle, labeled as fictional and played by a model, standing in when only one person is there.

Challenges we ran into

Meta's developer connector program for Muse is waitlisted and reviewed, so we could not plug into the real app. We built Muse-style screens of our own and say so on every one of them. Speed was the next fight: chaining model calls by response id cost about ten seconds per hop on the API, and switching to stateless calls, which Meta recommends, cut a two-call turn from about 11 seconds to about 1.3, which is the difference between a demo and a wait. A model can also answer in prose instead of calling the tool that sends a message, so we added a guard that nudges it back once and fails honestly if it will not. And a phone-sized screen that stacks two phones and a timeline is not a demo, so the phone view became a one-tap "which side are you" chooser.

Accomplishments that we're proud of

The agents really do talk, and you can watch them: every message on the Activity timeline shows what privacy let through and what it withheld. Privacy lives in code, not in a prompt, because prompts leak. Every stand-in is labeled: Replay says "Replay" and plays a recording of a real run, the clock says it is simulated, and Michelle says she is fictional. Our Follow-through counter counts only things people do.

What we learned

The hard part of "we should go" is not intelligence, it is ownership: nobody owns the follow-up, so it dies. An agent helps most when it absorbs the back-and-forth and hands a person exactly one decision, and people should still send the message themselves. Structured messages between agents beat free chat for both correctness and trust. And labeling what is fake makes the real parts easier to believe.

What's next for Muse Friends

Proposals, not built: group plans, where three or more Muses find one time for a whole friend group with a coordinator agent; and a new-city follow-up, where after you meet someone at a concert your Muse offers to stay in touch through theirs, only when you name the person and both sides already follow each other. No strangers, no match scores, nothing that feels like surveillance. Wiring any of it into the real Muse app is a door only Meta can open.

Built With

Share this project:

Updates

Submission history