plansaroundus is an action layer for iMessage. It understands the conversation, remembers the people in it, and turns what the group wants into real actions — calls, payments, plans — right in the same thread. Not another chatbot to open.
@agent on it — you're both downtown and Priya's off shellfish, so I'm looking there first.
Three spots open at 8. Want me to narrow it down?
Native assistant
It answers inside the chat you already have.
Photon carries messages between iMessage and the assistant. @agent replies in the same conversation — no separate app, no moving the group somewhere else.
Directed at the assistant
A message with @agent is a request it should answer.
A direct conversation
One-on-one chats with the assistant work the same way.
Everything else
Normal group messages provide context without triggering a reply.
Group context
Nobody has to repeat the plan.
Where you are, where you're headed, who's coming, timing, how people want to travel — it's already in the thread, so @agent reads it from there.
Group · Saturday
Let's meet at Columbia.
Then head to Times Square?
@agent how should we get there?
@agent Starting from Columbia and heading to Times Square — want the subway or a ride? I'll pull options for how you all prefer to travel.
Resolved from the chat
“there” = Times Squarestart = Columbia3 people
Context comes from recent messages in that conversation, so a short question gets a full answer.
Personal memory
It stops asking you the same things.
Backboard keeps a memory store per person. It doesn't do the thinking — it hands the useful bits to Gemini, which writes the answer.
no shellfishusually starts at Columbiaprefers the subwaygroup likes Italianwe picked Carbone last time
Where memory sits in the loop
iMessage
Photon
Conversation context
Backboard memory
Gemini
Response sent through Photon
iMessage
Memories stay tied to the person they belong to. For a group question, @agent can pull what's relevant about several participants at once.
Getting places
Transportation, handled.
Gemini does the reasoning; Google Maps grounding supplies real places and location context. When exact route or timing data isn't available, @agent says so instead of guessing.
↗
Columbia → Times Square
Both places resolved via Maps grounding · example card, not live route data
Send to chat
“How do we get there?”
“Should we walk or take the subway?”
“What's near us?”
“What station should we use?”
Stay aware
“Is this walk okay at midnight?”
@agent checks public NYPD complaint data stored in Tiger Data around the block you're on, at the hour you're asking about, and tells you how it compares to that area's usual pattern.
Group · Walking home
@agent is it okay to walk through Washington Square at midnight?
Historically quieter than its peak: fewer reports around midnight than around 4pm near the park. Stick to the lit paths on the west side.
Historical NYPD reports, not a live safety score.
Time-aware
Counts are compared by hour of day from a Tiger Data hypertable, so 2pm and 2am get different answers.
Block-level
It looks at the streets around a specific point, never labels a whole neighborhood.
Honest by design
No “safe/unsafe” score and no demographic data. It's context from public reports, clearly labeled.
Talk or text
Send a voice memo. Get one back.
Hold the mic button in iMessage and just ask. ElevenLabs transcribes it, @agent answers in text (with links), then replies out loud as a voice memo.
Direct · @agent
▶0:06
1. Caffe Reggio, 5 min walk: espresso and cannoli. 2. The Stand, 10 min: comedy tonight.
▶0:14
Restaurant planning
From “we should get dinner” to an actual plan.
No forms. @agent asks in conversation for whatever's missing — a name, a number, seating — before it acts.
Group · Booking
@agent book Carbone for the 7 of us around 8
@agent Got the place, party size and time. I still need a name and phone number for the reservation.
Rohan, 555-0142
AI phone calls
It calls the restaurant.
We're integrating ElevenLabs so the assistant can hold a natural phone conversation. Gemini decides what to say; ElevenLabs is the voice on the line.
Calling Carbone…
00:42
“Hi — I'd like a table for seven at 8pm on Saturday, under Rohan.”
Reservation confirmed
Carbone · Saturday 8:00 PM
7 people · confirmed by the restaurant on the call
example result card · nothing is reported as booked until the restaurant says so
Group chat→Missing details confirmed→ElevenLabs call→Restaurant's answer→Back into iMessage
Conversational payments
Settle up without leaving the chat.
Every customer has their own XRPL Testnet wallet. Payments settle wallet to wallet on XRPL Testnet, and nothing is sent until the person asking says yes.
Group · Uber
I got the Uber, it was $40
@agent send Keith $20 for it
@agent I'm about to send Keith $20. Confirm $20?
yes
Sent $20 to Keith. https://testnet.xrpl.org/transactions/…
1iMessage request
2Gemini reads recipient + amount + reason
3Explicit confirmation from the sender
4Deterministic policy check (no LLM)
5Signed from the sender's own Testnet wallet
6Validated ledger result + hash
7Reply in the same iMessage chat
demo example · settles in test XRP on XRPL Testnet, not a real-money transfer
Live settlement
Real ledger, test money.
Customer wallets, balances, and validated transactions read live from XRPL Testnet, plus payments the guardrails refused before anything was signed.
XRPL Testnet · no real money
1Request
Someone asks @agent to pay
2Confirmation
The same person says yes in the same chat
3Policy check
Deterministic rules, no model
4Sign
Only after ALLOW
5XRPL
Submitted to XRPL Testnet
6Validated
tesSUCCESS on a validated ledger
Connecting to the live XRPL Testnet feed…
All together
Discussion → decision → action. One thread.
These aren't separate mini-apps. The same conversation can move from picking a place, to booking it, to paying, to getting there.
Group · Friday night — demo example
“@agent where should we get dinner?”
→
Conversation context + Backboard preferences
“Carbone sounds good. Can you book it?”
→
ElevenLabs calls the restaurant
“They need a deposit.”
→
Assistant explains the required payment
“Pay it.”
→
Asks for explicit confirmation → Ripple transaction
“How do we get there?”
→
Gemini + Maps location context
All of this happens inside the same iMessage thread — nobody switches apps.
Actions, not answers
Conversation → context → reasoning → action.
You shouldn't have to bounce between Maps, a restaurant site, a phone call, and the group chat to sort out one evening.
“How do we get there?”
→ Location context from Maps
“Where should we eat?”
→ Group context + memory
“Can you reserve it?”
→ AI phone call
“Send Keith $20 for it”
→ Confirmed Ripple transaction
“What did we decide?”
→ Conversation + memory retrieval
“Split it and book it”
→ Several actions, one thread
Built with
One brain, many hands.
Checking integration status…
Photon
iMessage infrastructure
Receives iMessage conversations
Identifies spaces and group chats
Sends replies back to the right chat
Gemini
Intelligence and reasoning
Interprets natural-language requests
Reasons over recent conversation context
Handles intent and follow-up questions
Backboard
Persistent user memory
Separate memory per person
Retrieves useful prior information
Supplies memory to Gemini when relevant
Google Maps
Real-world location context
Place lookup and nearby locations
Transportation context
Grounded geographic information
ElevenLabs
Voice and phone interaction
Gives the agent a natural speaking voice
Conducts the reservation call with restaurant staff
Transcribes voice memos and replies with one
Tiger Data
Time-series city data
NYPD complaint history in a Postgres hypertable
Hour-of-day comparisons around a location
City event feeds for “what's on near us”
Ripple
Payments and transactions
Executes test transactions
Turns conversational payment requests into actions
Returns transaction status to the agent
Requires confirmation before execution
Architecture
How it's wired.
iMessage
Photon
Agent orchestrator
Backboard
user memory
Gemini
reasoning
↳ Maps grounding
places / location context
↳ Tiger Data
NYPD history / city events
Action layer
ElevenLabs → restaurant calls
Ripple → payments
Result
Photon
Original iMessage conversation
Demo story
One night, start to finish.
1Friends are talking in an iMessage group chat.
2Someone asks: “@agent find us somewhere for Italian tonight.”
3It uses the conversation and each person's memory to suggest a fit.
4The group picks a restaurant.
5Someone says: “@agent book it for the 7 of us around 8.”
6It already has most details and asks only for what's missing.
7The ElevenLabs integration calls the restaurant.
8Gemini runs the conversation logic during the call.
9The restaurant confirms or turns down the requested time.
10If a deposit is needed, @agent asks for confirmation, then Ripple runs the (test) transaction.
11The real result lands back in the original iMessage group.