Restaurant owners are some of the most customer-obsessed operators I’ve ever met. They usually talk to their customers dozens of times a day. That closeness gives them a great understanding of what their customers need.
At Owner, we build products to help restaurants grow. Our customers range from highly technical operators running dozens of locations to owners who would rather spend their time making delicious food and taking care of guests than looking at a dashboard. Okay, all of them would rather take care of their guests than look at a dashboard.
When we set out to build Owner Agent, we wanted to show our customers the same care and thoughtfulness that they show their guests.
Running a restaurant is demanding. Our customers don’t always have the time to dig into how their business is doing.
And when they need to make a menu change or toggle off their online availability due to a big dinner rush, digging around in a dashboard or app is the last thing they want to do.
Our vision for Owner Agent: customers should be able to get anything they need from Owner as easily as sending a text.
We're getting there. Over the last two months, we’ve brought Owner Agent to GA, powered tens of thousands of conversations, and seen customer usage grow by ~30% week over week since launch.
This post walks through the product and architectural decisions behind Owner Agent, including how Owner Agent is integrated across Owner and how it’s set up to keep improving.
Where customers meet Owner Agent
Customers start using Owner Agent while they’re still becoming customers.
Our Grader helps restaurant owners understand how their website performs. It evaluates Google search visibility, CRO factors, and how the restaurant compares with its local competitors.
Through Grader, a swarm of agents researches the restaurant across the internet, gathering its brand identity, local details, menu, and photos. The Grader feeds our AI Website Builder, which rebuilds their website in near real time, turning it into a best-in-class website that will grow the restaurant’s sales.
Owner Agent is a companion throughout the experience, helping customers quickly refine their website in plain language.
Once they’re using Owner, customers can turn to Owner Agent in our dashboard and mobile app.
Some owners will never open a dashboard. From the app, they can make an operational change between lunch and dinner in one sentence and approve it on one card.
Others run several locations and want to go deeper. They can ask how their business is doing, and Owner Agent responds with insights from the restaurant’s data.
Learning from our first users
We started dogfooding Owner Agent with our customer-facing teams months before the public release.
They were some of the best early users we could have hoped for. They were vocal about what they needed and brought us the problems they were solving for customers. Their feedback helped us iterate quickly and see whether the agent was useful.
Menu setup is one of my favorite examples. Our launch team used to drag food photos into ChatGPT one at a time to figure out which menu item each photo represented. Now, they just drop a menu PDF and a Google Drive folder of photos into Owner Agent.
[Please don’t ask me what our launch team did before LLMs existed.]
We wanted to prioritize the capabilities that would make the biggest difference for customers. We looked to our hundreds of thousands of historical support cases.
With these cases, we could see what the owner asked for, how our team handled it, and how long it took. This gave us a starting point to understand what to build, and what to prioritize.
We built an “Eval Dash” to explore those cases and prioritized them by how much support time it takes to resolve them.
Most of those cases ask for the same handful of things in different combinations.
Once we grouped them, hundreds of thousands of cases came down to about 2,000 distinct operations, like changing hours or issuing a refund. Those 2,000 operations became the evals we test Owner Agent against.
Choosing our agent stack
We built Owner Agent on the Vercel AI SDK. It’s model agnostic, so we can move between providers and models as they improve without rewriting Owner Agent. It has great developer experience and support, and it’s one of the most widely adopted agent frameworks, so the patterns and answers our engineers need are usually already out there.
On top of the SDK, John Harlow, a senior engineer on our Agents team, built ownerTool.
The AI SDK’s tool describes something a model can call: a description, an input schema, and a function to run. That’s enough to call a function, but not enough to safely change a restaurant’s business. ownerTool makes every tool also declare who is allowed to run it, whether it reads or changes data, how much damage a wrong call could do, and whether the owner has to approve it first. With that, a product team can take an operation that already exists, like setting holiday hours, and give it to Owner Agent.
export const createSpecialHoursTool = ownerTool({
owner: {
identifier: 'create-special-hours',
authZ: ({ user }) => user.can('create', 'location.special-hours'),
effect: 'mutation',
consequence: 'major',
},
description: 'Create holiday hours or a one-day closure for a location.',
inputSchema: z.object({ locationId, day, month, year, hours }),
outputSchema: z.object({ specialHoursId, locationId, day, month, year }),
toolApproval: 'user-approval',
execute: (input) => SpecialHours.create(input),
})
authZchecks the same permissions the user has everywhere else in Owner. If they can’t create special hours in the dashboard, Owner Agent can’t create them either.effectsays whether the tool only reads data (query) or changes it (mutation).consequencesays how costly a wrong call would be, fromnonetocatastrophic. Looking up today’s sales is harmless. Closing a store on the wrong day ismajor, because it costs a day of sales.toolApprovalmakes Owner Agent stop and ask the owner before the tool runs.
That risk disclosure bubbles up through Owner Agent’s patterns of interaction framework, to determine when operations need extra confirmation.
Close Downtown for today
High impactTurn off ordering at Downtown for the rest of today. 6 scheduled orders are cancelled and refunded.
- “burst pipe, we’re closing for the day”
- Downtown · Online, DoorDash, Uber Eats
- Guests see “Closed today” on your site
Owner Agent as a client
Our historical support cases span the breadth of Owner’s products.
Our Agents team can’t build and maintain every capability on its own.
We treat Owner Agent as another client of our platform, alongside the dashboard and mobile app. Owner Agent calls the same services that power those surfaces, building on the same business logic and authorization patterns.
The Agents team owns the shared framework, approvals, observability, and eval infrastructure. Product teams know their domains and contribute the tools and capabilities to Owner Agent.
Our website team, for example, exposes the operations customers need to update their website.
We group capabilities into domains such as menu, website, and payments. A domain is how a product team ships a capability into Owner Agent as one unit, built with ownerDomain.
export const websiteDomain = ownerDomain({
name: 'website',
featureFlag,
enabledWhen: capabilityStatusIs('website-builder', 'active'),
instructions,
skills: ownerSkillSet({ websiteSkill }),
})
It bundles the domain’s tools, the instructions that tell Owner Agent how and when to use them, and skills for longer tasks. Importantly, every domain has a feature flag, so a team can roll it out restaurant by restaurant and turn it off instantly if something goes wrong. enabledWhen only loads a domain for restaurants that use that product, so a brand without our website builder never sees website tools.
Growing Owner Agent across the product
Making Owner Agent a client has shifted how our product teams work.
When a team ships a feature for customers, we now think about how customers can use it through Owner Agent.
As teams have contributed, Owner Agent has grown beyond its initial menu and website capabilities. As of October 2026, Owner Agent has 241 tools across 27 domains, including sales reporting, locations, and custom domains.
Owner Agent tools
241 tools across 27 domains
Tools Owner Agent can call, counted at the end of each week. Hover or drag to read a week, tap a domain to isolate it.
Week of Oct 26241
Show the data
| Week of | Website | Menu | Domains and DNS | Brand research | Locations and hours | Sales reporting | 21 other domains | Total |
|---|---|---|---|---|---|---|---|---|
| Apr 27 | 20 | 34 | 0 | 0 | 0 | 0 | 0 | 54 |
| May 4 | 20 | 34 | 0 | 0 | 0 | 0 | 0 | 54 |
| May 11 | 20 | 34 | 0 | 0 | 0 | 0 | 0 | 54 |
| May 18 | 20 | 34 | 0 | 0 | 0 | 0 | 0 | 54 |
| May 25 | 23 | 34 | 0 | 0 | 8 | 0 | 0 | 65 |
| Jun 1 | 23 | 34 | 0 | 0 | 7 | 1 | 3 | 68 |
| Jun 8 | 23 | 35 | 0 | 3 | 8 | 0 | 3 | 72 |
| Jun 15 | 29 | 35 | 0 | 16 | 5 | 0 | 3 | 88 |
| Jun 22 | 29 | 35 | 0 | 17 | 4 | 0 | 3 | 88 |
| Jun 29 | 29 | 37 | 0 | 19 | 4 | 0 | 3 | 92 |
| Jul 6 | 29 | 37 | 0 | 19 | 4 | 0 | 3 | 92 |
| Jul 13 | 29 | 37 | 0 | 19 | 4 | 0 | 13 | 102 |
| Jul 20 | 29 | 37 | 0 | 34 | 4 | 0 | 17 | 121 |
| Jul 27 | 31 | 37 | 0 | 35 | 4 | 0 | 22 | 129 |
| Aug 3 | 31 | 37 | 23 | 36 | 4 | 0 | 22 | 153 |
| Aug 10 | 31 | 37 | 23 | 35 | 8 | 0 | 22 | 156 |
| Aug 17 | 35 | 37 | 22 | 36 | 7 | 12 | 27 | 176 |
| Aug 24 | 36 | 37 | 23 | 36 | 7 | 12 | 39 | 190 |
| Aug 31 | 37 | 38 | 23 | 36 | 6 | 13 | 42 | 195 |
| Sep 7 | 39 | 38 | 23 | 35 | 8 | 11 | 44 | 198 |
| Sep 14 | 40 | 38 | 23 | 20 | 7 | 12 | 44 | 184 |
| Sep 21 | 41 | 38 | 23 | 20 | 7 | 12 | 52 | 193 |
| Sep 28 | 41 | 38 | 23 | 20 | 9 | 12 | 56 | 199 |
| Oct 5 | 44 | 38 | 25 | 20 | 9 | 12 | 59 | 207 |
| Oct 12 | 44 | 38 | 24 | 20 | 16 | 12 | 61 | 215 |
| Oct 19 | 44 | 40 | 28 | 20 | 17 | 14 | 76 | 239 |
| Oct 26 | 44 | 40 | 28 | 20 | 18 | 13 | 78 | 241 |
Owner Agent changes
829 merged PRs in 25 weeks
Merged Owner Agent pull requests per week, by kind. Hover or tap a week, tap a kind to isolate it.
Apr 27 to Oct 19829
Show the data
| Week of | New tools | Features | Fixes | Evals and prompts | Monitoring and upkeep | Total |
|---|---|---|---|---|---|---|
| Apr 27 | 0 | 1 | 0 | 5 | 3 | 9 |
| May 4 | 0 | 3 | 0 | 0 | 0 | 3 |
| May 11 | 0 | 11 | 1 | 1 | 0 | 13 |
| May 18 | 0 | 2 | 2 | 0 | 0 | 4 |
| May 25 | 0 | 4 | 4 | 0 | 0 | 8 |
| Jun 1 | 0 | 15 | 9 | 2 | 0 | 26 |
| Jun 8 | 0 | 16 | 1 | 1 | 0 | 18 |
| Jun 15 | 0 | 13 | 4 | 0 | 0 | 17 |
| Jun 22 | 0 | 11 | 7 | 1 | 1 | 20 |
| Jun 29 | 0 | 8 | 3 | 0 | 0 | 11 |
| Jul 6 | 0 | 10 | 5 | 4 | 1 | 20 |
| Jul 13 | 0 | 11 | 6 | 1 | 0 | 18 |
| Jul 20 | 0 | 17 | 0 | 0 | 1 | 18 |
| Jul 27 | 2 | 14 | 7 | 3 | 1 | 27 |
| Aug 3 | 5 | 16 | 2 | 2 | 2 | 27 |
| Aug 10 | 0 | 11 | 2 | 10 | 0 | 23 |
| Aug 17 | 7 | 15 | 11 | 10 | 8 | 51 |
| Aug 24 | 0 | 15 | 4 | 7 | 6 | 32 |
| Aug 31 | 0 | 31 | 7 | 1 | 1 | 40 |
| Sep 7 | 1 | 40 | 12 | 2 | 3 | 58 |
| Sep 14 | 1 | 43 | 21 | 2 | 6 | 73 |
| Sep 21 | 2 | 79 | 16 | 0 | 12 | 109 |
| Sep 28 | 1 | 42 | 8 | 3 | 11 | 65 |
| Oct 5 | 5 | 26 | 15 | 2 | 7 | 55 |
| Oct 12 | 23 | 35 | 18 | 2 | 6 | 84 |
Making Owner Agent’s actions understandable
Clarity of operation has been the biggest goal since we started building Owner Agent. It means that whenever Owner Agent proposes any action, it’s very clear what will happen when you hit “approve.” This is so important because tool call approvals are much more common in Owner Agent than in ChatGPT.
I think of it as UI design for a genie. The genie is going to grant whatever wish you make. But before the wish is granted, you need to make sure you understand what you’re getting out of the wish.
Cole Derochie, our Agents design lead, has designed patterns of interaction for clarity of operation.
He views an agent conversation as a stream of four kinds of moments. For each one, Claude, ChatGPT, Cursor, and the MCP spec have converged on a small set of shapes.
The agent shows what it’s doing.
- Item list retrieved1.2s
- Option groups retrieved640ms
- $0 items checked85ms
Before I change any live prices: every item, or a specific menu or category? Across all 48 items, $2 would also raise 12 add-ons and 3 $0 items like utensils.
Patterns in action
Owners often send requests like this one.
Remove the pollo taco from the menu at the Miramar location. Also add tomatillo as a salsa option there. In Atlanta, raise the price of guac by $1.
A card that says “update menu” doesn’t give our customers enough context to be confident that Owner Agent will make the changes they intend. Through our clarity of operation framework we:
- Get approval for every change. The card shows each item, location, and change, with the before and after in plain language. Owners can approve or reject each row on its own.
- Act with the same permissions as the user. Tools use the same RBAC as the rest of Owner.
- Hand off to a support rep when Owner Agent can’t finish the job. Our support reps pick up where Owner Agent left off, with the full conversation and context.
The feedback loop
When customers use Owner Agent in ways we haven’t built tools to handle yet, here’s what the feedback loop looks like to get Owner Agent working great for that use case the next time.
Traces, traces, traces. They live in Datadog, with the rest of our APM. We run online evals against our traces to identify opportunities for improvement in real time, as well as churn signals and other configurable alerting.
Owner Agent Insights is our online eval platform. We use an LLM to score production conversations to build metrics and trends, and to understand quality across capability, completeness, latency, feedback, and more. We measure approvals and rejections by tool, and give each domain a letter-grade score. A high rejection rate tells us something is off in the harness, the interface, or the model, and gives us a signal for where to improve.
Insights makes recommendations for new domains and tools based on that data. When owners keep asking for something Owner Agent can’t do, Insights writes it up as a Recommended Tool and alerts the team that owns that area in Slack.
Every failure becomes an eval. When Insights flags a failure, Forge, our internal platform for background coding agents, turns the conversation into an offline eval case, works on a solution, and runs the suite in Buildkite. We want the new case to pass, and enforce it going forward.
Scaling Owner Agent
At first, we gave the model every tool definition and every domain instruction on every request.
Do things that don’t scale, right?
Past 200 tools, that context bloat started to hurt quality and drive up cost, so we added tool search and skills.
With tool search, tool definitions stay out of the model’s context until Owner Agent asks for them. A request to raise the price of guac loads 3 menu tools, not all 241 tools.
Similarly, skills let us give Owner Agent instructions for a specific task without putting every instruction in every request.
John also wrote up these patterns and more, like routing and handoffs between agents, in Some agent patterns.
Running Owner Agent in the background
Owner Agent has to keep working after a customer closes the app or a request times out.
In these cases, we run it headless.
For example, an owner might ask Owner Agent to match 80 photos to their menu, and then lock their phone.
A background worker picks up the job with that user’s permissions. If something needs approval, it sends a push notification to the owner, and idles until the owner comes back to the conversation.
Lessons we’ve learned
- Start from requests customers have already made (support history) to anchor on known needed capabilities.
- Match the agent’s permissions to the user’s.
- Focus on clarity of operation. Make every change easy to confirm, with one row per change, plain language, and nothing happening before approval.
- Invest in observability at step 0.
- Build a self-improving agent. Turn every failure into an eval.
Proactive is the next frontier
Owner Agent is reactive today. The customer experience starts when Owner Agent is prompted.
We want Owner Agent to be a proactive partner in our customers’ growth.
Soon, it will notice opportunities to improve their business, bring those opportunities to the customer with context, and make the next step easy to approve.
We’re building toward the team of AI executives described in our Series C memo and Series D memo.
If you’re interested in building agents at scale and going deep with customers, we’re hiring.