Whim · Hack the North 2026
Whim
An iMessage agent for plans and games
Whim is an agent you can add to an iMessage group chat to help plan trips, shop, and generate games. It shares interactive cards that everyone in the chat can use.
The native iMessage widgets were distributed through TestFlight. The public website shows the companion web experience.
- My role
- Agent tools and full-stack development
- When
- September 2026
- Team
- Lucian Lavric, Karan Anand, Sheng Chang Li, and me
- Built with
The idea
We built Whim at Hack the North because we wanted to see how much we could do without leaving iMessage. Group chats are already where people make plans, so we wanted to let them actually do something with those plans there too.
My work
Seeing what the agent was actually doing
The main thing I built was a telemetry dashboard to help us build and debug Whim. There were so many tools, APIs, and connections that it was hard to tell what was breaking or why a run was taking so long. Each run had its own tab, with turns, tool calls, inputs, and responses shown as nodes in a trace. I integrated Sentry and tracked turn timings, token usage per run, and p95 model response latency. We could open a run, look through each step, and see where the time was going and what had failed.
Deciding when to search or fetch a page
Browserbase had APIs for web search and fetching a page. I used Jev, a lightweight classification model from Typesafe, to score which one made sense for what the agent was trying to do. I wanted to avoid spending more on browser calls than we needed to.
Browser tools and tying things together
I integrated Browserbase and connected skills and APIs from browse.sh so the agent could find hiking routes, DoorDash menus, and other information needed for group plans. I also connected the agent, native iMessage widgets, and web app into a shared experience.
The web app and iMessage sync
I built the whole web app, including the frontend, and connected it to what was happening in iMessage. Users signed up with their phone number. Whenever the group finished building a trip or generated a widget, we hit an API to save it in the database and link it to their account.
Debugging an agent run
Here, a request to generate a pool game hit an HTTP 403 during Jev relevance scoring. The dashboard brings the error, run timings, and activity trace together.

The signup page
Users enter a phone number, then continue setup over iMessage.

Planning a trip
The group asks for a trip, votes on flights, and gets shopping suggestions.
Generating a game
A request for blackjack becomes a playable iMessage card.
How it fits together
We ran the agent on Cloudflare Workers and gave each chat a Durable Object to keep its conversation history and plan state. Linq connected it to iMessage, and OpenAI handled reasoning and tool calls. We built the native widgets in SwiftUI and had the model generate structured game definitions that our runtime checked before running.
Hack the North 2026
- Best Use of Linq
- Cloudflare: Best Agent with a Brain