Igor Syvets · Off-Work
Contact

When Claude Started Calling

I (sort of) taught Claude how to make phone calls. And it got weird.

When Claude Started Calling

I wanted to learn how to design for AI-first products. An AI chat improvement seemed to be a perfect candidate. Designing for free-form input is like hiking in the wilderness instead of a national park—no marked trails, just a compass. Users phrase requests unpredictably, and the AI takes unexpected turns.

As a base, I took the Claude mobile app, which I recreated with React. I didn’t want to think about branding and new styles, just build on top of an existing experience.

Chat Widgets

The text interface is nearly perfect for many cases, except for visualizing information. That’s why I decided that widgets can be a great way to show rich, interactive content.

I designed these components to be reusable: they could show all kinds of things: product details, web previews, API calls, etc.

Widget variations

Booking Flow

Inspired by my inability to book Don Angie at any time of the week, I thought restaurant booking via phone is an interesting case to solve.

(In some examples that follow, I actually use “Roberta’s” because I wanted to solve for multiple restaurant locations.)

My ideal flow: User asks to book a restaurant → AI asks additional questions → AI calls the restaurant → Reservation confirmed.

Implementation is where it gets interesting. I needed to provide an AI with ‘tools’ to do more than chat. Each tool required AI prompts and functions—one of the core aspects of building an agentic AI.

For place data, I used Google Maps integration. But the calling feature required something more creative.

I did not want to make actual calls (that’s too much for a proof-of-concept). Instead, I made two Claude instances talk to each other. One played the caller role, and the other acted as restaurant staff. The main Claude would collect your preferences and pass them to “Caller Claude,” who would talk with “Restaurant Claude” until they reached a conclusion.

Demo

Testing

Testing this led to some bizarre interactions. In early versions, I hadn’t yet built agents. Instead, Claude always received a response: “What’s your party size?” This would make it go back and forth: talking to me and calling again—it seemed like it was getting frustrated. I kind of felt bad making Claude question the reality.

Ethics

Claude acts ethically toward all parties, not just the requester. It would refuse to make obviously ridiculous calls, like asking for a McDonald’s birthday party at a restaurant.

Claude refuses requests

Validation

Claude is good at validating any data necessary to complete a request. I asked Caller Claude, “Just use 333 as my phone number,” but Restaurant Claude wouldn’t accept it and kept asking for a real number. (‘1–800-CLAUDE’ was a part of the system prompt.)

Claude needs a real phone number

Improvisation

In another scenario, I told Restaurant Claude we don’t have tables available for 5 and 6 PM. Caller Claude would improvise, asking about other available time slots or seating arrangements.

Claude refuses requests

Cakes

At one point, Caller Claude developed an obsession with cakes. Even for a casual Tuesday lunch, it would ask the restaurant to “provide a small celebration cake,” even though I had never asked for one. (Later, I figured out that Claude got confused by a too-specific system prompt involving a cake.)

Claude wants cake

Conclusion

Successful AI design requires working with real data and AI responses. Think of an AI agent as another player in a user journey. It uses tools and prompts as an interface, and designers should account for it too.