'I vibe-coded a personal restaurant reservation agent'
A guest post.
I’m in the throes of end-of-school-year parenting, so please enjoy this guest post from Ryan Sarver, a restaurant-obsessed, Amsterdam-based investor that I’ve known for over a decade. Ryan wrote on Medium about his experience creating an agent to book reservations on his behalf, and I’m happy to share details (lots of details!) with Expedite readers.
Ryan told me that he hasn’t run into any trouble with reservations services — I’ve heard reports of agents being flagged as bots and banned — but, he said, “I only do it for my own use, so I probably don’t hit them that much to make it a problem.”
How I went from ‘wouldn’t it be cool if?’ to a fully functional AI agent that finds, checks, monitors, and books restaurants, from my phone, in a single weekend:
I stopped checking. I built something to check for me. It got me an impossible table in nine days.
I am, genuinely, someone who cares too much about restaurants. When I’m traveling to a city, I’m doing recon weeks in advance, triangulating across sources, trying to land the right table at the right place for the right night. It’s one of the real pleasures of life, and I take it seriously.
The problem: the tooling is broken. There are too many reservation platforms that have carved out different swaths of the restaurant world, and they don’t talk to each other. You have to remember which restaurants are on which system, bounce between apps, and (most maddeningly) if you want a table at that place everyone’s talking about and it’s full, there’s no good way to know when a slot opens up short of refreshing it manually like a maniac.
So I built a solution. And the interesting part of the story isn’t the reservation agent itself. It’s how I built it, and what that reveals about where AI tooling is right now.
The Build: A /resi Skill for OpenClaw
OpenClaw’s skills are essentially modules: a folder with a SKILL.md describing the capability and the CLI tooling the agent should use. When I message my agent, it reads the relevant skills and decides which to invoke.
I wanted a single skill that handled everything restaurant-related. I called it /resi.
The core functions I needed:
1. Restaurant search: given a city, date, party size, and time window, find available tables across the major reservation platforms. Not “here’s a list of restaurants,” but actual availability right now.
2. Open times lookup: for a specific restaurant I already know I want, what’s available? Give me the slots.
3. Availability monitor: this is the killer feature. Tell the system I want a table at Restaurant X on Date Y for N people, and have it poll until something opens, then notify me immediately via WhatsApp.
I opened Claude Code, described what I wanted, and started iterating.
“I want to build a CLI tool that can search restaurant availability, check open times for a specific restaurant, and set up a monitor that polls and notifies me when a slot opens. It needs to work across [Platform A] and [Platform B]. The output should be clean JSON so an LLM can parse it.”
And then Claude Code just… built it. Not all at once. We went back and forth, debugged auth flows, handled rate limiting, structured the outputs. But the arc from “idea” to “working CLI” was measured in hours, not days. I didn’t write most of the code. I directed it, reviewed it, and made judgment calls.
The resulting skill has three clean CLI entry points:
resi search --city amsterdam --date 2026-03-15 --party 2 --time “20:00”
resi open-times --restaurant “Restaurant Name” --date 2026-03-15 --party 2
resi monitor --restaurant “Restaurant Name” --date 2026-03-15 --party 2 --notify whatsappThe monitor function runs as a background process on my local machine. When a slot opens, it fires a WhatsApp message to me directly. I’ve already snagged two tables I would have missed entirely.
What This Actually Looks Like in Practice
From my phone, I can now message my agent things like:
“Find me a good table in Amsterdam for Saturday night, 2 people, anywhere from 8 to 10pm.”
The agent invokes resi search, parses the results, filters for places that match my taste profile (it knows my restaurant list, a curated CSV of around 50 Amsterdam spots I’ve fed into its knowledge base), and comes back with a ranked list of available tables with times and direct booking links.
Or:
“Set up a monitor for [that impossible-to-get restaurant] on the 22nd for 2 people.”
It spins up the background monitor. I go about my life. My phone buzzes when something opens.
This is the kind of thing that used to require either a premium third-party service, a lot of manual effort, or knowing someone. Now it’s a WhatsApp message.
The Bigger Point: What Vibe Coding Actually Means
I want to be careful here, because “vibe coding” has become a bit of a meme, and like most memes, it’s half right and half misleading.
The half that’s right: you genuinely can build functional, useful software without being a professional developer. The tooling has crossed a threshold. I came up with the restaurant agent idea, described what I wanted in plain English, and Claude Code produced working code. The iteration loops were fast. The bugs got fixed. The thing works.
The half that’s misleading: this is not magic, and it is not zero-effort. What I actually brought to this:
Product intuition. I knew exactly what I wanted to build and why. I’d thought through the UX: what the agent should say, what edge cases to handle, what “done” looked like. Inspected HTML, nudged it, edited it.
System architecture sense. Knowing to keep the CLI outputs as clean JSON for LLM consumption, knowing to separate the monitor as a background process, knowing how to structure a skill in OpenClaw.
Debugging judgment. When Claude Code produced something that didn’t work, I had enough context to diagnose why and redirect. It’s less like having a junior dev write code for you and more like pair programming with someone very fast and very literal.
What I didn’t need: deep expertise in any of the APIs I was hitting, fluency in the specific language patterns Claude used, or patience for reading through documentation. Claude Code handled all of that.
The net effect is a dramatic compression of the “idea to working software” timeline. Probably 10x for someone like me. Maybe 3–5x for a senior engineer who’d have built it faster anyway.
But honestly, the metric that matters most to me isn’t speed. It’s that building software is fun again.
For a long time, the part I dreaded wasn’t the idea or the product thinking. It was everything before you could actually see something work: setting up the environment, getting dependencies right, remembering syntax, fighting config. The activation energy to go from “I want to build X” to “I am building X” was high enough that a lot of ideas just died in the gap.
That gap is basically gone now. I can dream something up, act like a good product and engineering manager directing a very capable team, and watch it get built. The creative loop is tight. The fun part is almost the whole thing.
Why This Matters (and Who This Is For)
If you’re a hacker, a founder, or a technical leader who has ever had the experience of knowing exactly what tool you want but not having the time or bandwidth to build it, this is your moment.
The combination of OpenClaw as persistent infrastructure, Claude Code for fast iteration on the actual build, and Claude as the reasoning layer that ties it all together is genuinely powerful in a way that feels qualitatively different from “AI helps me write code faster.”
I have a personal agent now. It runs on hardware I control, with data that stays private, and it’s extensible because the skills system is just files. Every new workflow I want is a new skill. I’m building one now for travel planning, but that’s another post.
The restaurant agent cost me a weekend of focused time and a few dollars in API calls. It has already returned value that I’d have happily paid $30/month for as a subscription. That math is going to keep getting more favorable.
Building Your Own
If you want to try this yourself:
Get OpenClaw running locally and connect it to WhatsApp or Telegram. The setup wizard handles most of the complexity, and running it on a Mac with always-on power is all you need.
Build the CLI tool first using Claude Code before you think about the skill wrapper. Describe the functions you want, let Claude Code iterate, and focus your energy on reviewing outputs and catching edge cases. Aim for clean JSON output so the agent can parse results without friction.
Write the
SKILL.mdlast. Once the CLI works, describing it to the agent is straightforward. TheSKILL.mdjust tells OpenClaw what the skill does and how to invoke it. Claude figures out the rest.
For the restaurant piece specifically, the core challenge is handling auth against the reservation platforms gracefully and building a polling mechanism that doesn’t hammer their servers. Claude Code knows how to do both. Just be clear about what you want and iterate on the edge cases.
What’s Really Going On Here
Step back from the restaurant agent for a second and look at what’s actually been assembled.
OpenClaw is a persistent agent that lives in your chat interface and knows everything about you: your calendar, your preferences, your history, your communication patterns, your files. It’s always on, always accessible from your phone, and it accumulates context over time. That alone is powerful.
Claude Code lets you vibe code a new action layer on top of that in an afternoon. Whatever you can describe, you can build. The CLI becomes a skill. The skill becomes something your agent can invoke on your behalf, from anywhere, triggered by a natural language message.
The combination is what’s special. You’re not just automating a task. You’re extending what your agent can do in the world, backed by everything it already knows about you. The restaurant agent works better because it knows my taste profile. A travel planning skill will work better because it knows my calendar. Every new capability compounds on the context that’s already there.
That’s the architecture worth getting excited about. The restaurant reservations are just a fun place to start.



