Door 2 — The Shopping Agent That Beat Costco and Instacart at Once

Door 2 — The Shopping Agent That Beat Costco and Instacart at Once

Three lists, two stores, one fridge inventory. The agent that closed the loop. 60 minutes returned per week, and a small dignity I had not realized I had lost.


The Hour I Never Had

Sunday, March 22, 2026. 1:14 p.m. The kitchen island.

The meal plan was done. Door 1 was four weeks old. I had ninety minutes back on Sunday morning, and I had spent forty of them reading on the back deck and the rest making the kids waffles. I felt, for the first time in maybe two years, that the week ahead was something I had a hand in shaping rather than something that was happening to me.

Then I opened AnyList to do the grocery order, and the feeling collapsed.

The list ChatGPT had given me had 47 items on it. That part was fine. The problem was that 16 of those items were almost certainly already in my house and I did not know which 16. The freezer had a chicken breast situation that I had been ignoring since February. The pantry had four boxes of pasta because I kept buying pasta on the assumption that we were out of pasta. The cheese drawer in the fridge had three open blocks of sharp cheddar from three different shopping trips, and at least one of them had a spot on it that I did not want to investigate.

To do the grocery order properly I needed to:

  1. Open the fridge and take an actual inventory.
  2. Open the pantry and take an actual inventory.
  3. Open the chest freezer in the basement and take an actual inventory.
  4. Cross-reference all three against the 47-item list.
  5. Split the remaining items between Costco (cheaper for bulk staples), Cub Foods (better produce), and Target (Maya-runs-in-with-Vivaan-after-preschool convenience).
  6. Place an Instacart order for whichever store was making the same-day cutoff, drive to whichever store I was going to in person, and remember to bring the Costco card that lived in Karthik’s wallet, not mine.

This took me, on a representative Sunday: forty minutes of inventory plus twenty-five minutes of list-splitting plus fifteen minutes of Instacart fees-and-substitutions plus a thirty-minute drive on Monday to Costco. Total: about 110 minutes per week, and the part I hated was not the time. The part I hated was that every single one of those minutes required me to be the one holding the entire picture in my head.

Karthik had offered, in 2023 and again in 2024, to take over groceries. I had handed it to him for six weeks each time. Both times I took it back, because the grocery process was not actually grocery-shopping, it was a metabolic chain that included the meal plan, the kids’ lunch boxes, the dog’s prescription food, the upcoming birthday-party gift requirements, the pediatrician-recommended snacks for Vivaan’s preschool nut-free zone, and the four bottles of pinot noir we wanted to have on hand for Karthik’s sister’s visit at the end of the month. He could not hold the whole chain. Not because he was lazy. Because the chain lived in my head and I had never written it down.

Door 2 was the door that asked: what if the chain didn’t have to live in my head?


The Door I Didn’t Know Was There

Wednesday, March 25, 2026. 10:42 p.m. Karthik was asleep. I was on the couch with my laptop, googling “smart fridge 2026 worth it” because I had convinced myself that the answer was a $4,200 Samsung with a camera inside it. (It wasn’t. The cameras have a 17% photo-recognition error rate on cheese, per a 2025 Wirecutter review I had open in another tab.)

I closed the tab. I opened ChatGPT. I typed, in frustration:

Why can’t an AI just look at a photo of my fridge and tell me what’s in it?

ChatGPT said: I can do that. Want to try?

I took a photo of the inside of my fridge with my phone. Three shelves, two drawers, the door. I uploaded it. I asked: what do you see?

It came back with a list. 23 items. It identified the open block of cheddar (correctly), the half-eaten container of strawberries (correctly), the three different jars of mustard (correctly, including which was Dijon and which was the German one Karthik liked), the carton of oat milk (correctly), and a Tupperware in the back that it labeled as “unidentified leftover, possibly rice-based, not visible enough to confirm” — which I then opened and confirmed was, in fact, two-week-old rice that I threw out immediately.

I sat on the couch and laughed out loud. Karthik shouted from the bedroom, “Are you okay?” I said, “Yes, I’m fine, sorry.”

The door was the same kind of door as Door 1. I had been told for three years that the answer to fridge inventory was a smart fridge. The smart fridge was the wrong artifact. The right answer was: take a picture and ask. I already owned the camera. I already owned the AI. The friction had been zero this entire time and I had been planning to spend $4,200 on the wrong solution.


The Build (in 4 Prompts)

Prompt 1 — The Inventory Agent (set up once)

I created a second ChatGPT project: “Mom OS — Shopping Agent.” First message:

You are my household inventory and shopping agent. Your job is to take photos of my fridge, freezer, and pantry, identify what’s there, cross-reference against a grocery list, and produce a final purchase list split by store.

Stores I shop at, in priority order: 1. Costco (Maple Grove): bulk staples, meat, paper goods, large produce, wine. Trip every 2 weeks. Karthik or I go in person. 2. Cub Foods (Edina): weekly produce, dairy, bread. Instacart preferred (delivery in 2 hours). 3. Target (France Ave): emergency / small items / kids’ specifics. In-person only because I’m there anyway twice a week.

When I send you photos, do this: 1. List every item you see, with confidence rating (high/medium/low). 2. Estimate quantity remaining where possible (e.g., “milk: ~half gallon”). 3. Flag any items that look spoiled, expired, or that I should investigate. 4. When I then paste a grocery list, cross out items I already have enough of, ADD items I’m running low on but didn’t list, and produce three sub-lists: (a) Costco trip, (b) Cub Foods Instacart, © Target pickup. 5. Estimate total cost per sub-list using current Twin Cities pricing.

Confirm.

Confirmed. The photo-recognition was good enough on the first try that I didn’t bother with brand-specific training.

Prompt 2 — The Sunday Photo Burst

Every Sunday at 10 a.m., after the meal plan is finalized, I do one thing: I open the fridge, take three photos (top shelf + middle shelf, bottom shelf + drawers, door), I open the freezer, take two photos, I open the pantry, take three photos. Eight photos total. Two minutes.

I send them to the Shopping Agent with one line: Inventory check. Then cross-reference against this week’s grocery list, which is below. And I paste the AnyList output from Door 1.

Prompt 3 — The Three Sub-Lists

The agent returns within 30 seconds:

  • Costco list (8–14 items, only included if it’s a Costco week): toilet paper, paper towels, ground beef in bulk, rotisserie chicken, the big tub of plain Greek yogurt, dishwasher pods, the giant bag of frozen wild blueberries, wine.
  • Cub Foods Instacart list (15–25 items): produce, dairy, deli, bread, anything specific to that week’s dinners.
  • Target pickup list (3–7 items): kid-specific items I need before tomorrow morning. Aanya’s specific brand of strawberry yogurt. Vivaan’s egg-free pancake mix. The construction paper for Tuesday’s school project I had forgotten about.

The first time the agent did this, it correctly identified that I was about to buy a third bottle of the same olive oil I already had two of in the pantry. It saved me $14 that Sunday. By the end of the third month, the agent had saved me about $73/month in duplicate-buying alone, which is not life-changing money but is the most satisfying $73 I have ever recovered.

Prompt 4 — The Friday Restock Audible

Friday at 4:30 p.m., on my way home from work, I send one prompt:

We’re going into the weekend. Anything we’re critically low on for the next two days? I can stop at Target on the way home if needed.

The agent looks at the most recent inventory + the meal plan + the days remaining and tells me: You’ll be fine until Sunday — actually, grab a half-gallon of milk because Aanya goes through it faster than I projected, and you’re at about 2 cups left.

That prompt has prevented exactly one weekend-morning Target run per week, on average. Forty minutes returned, every Saturday morning, because I no longer drive to Target before 9 a.m. on a Saturday holding a five-year-old’s hand while he has not eaten breakfast yet.


The First Failure

Week 3, Sunday, April 5. The agent looked at my freezer photo and confidently identified a “package of frozen ground turkey, approximately 1.3 lbs” on the second shelf. I crossed ground turkey off my Cub Foods list. I cooked Tuesday’s planned turkey-and-zucchini meatballs.

Tuesday, 6:15 p.m., I opened the freezer and pulled out the package. It was not ground turkey. It was a bag of frozen pierogi from a Polish deli I had visited in November and forgotten about. The package was the same size, shape, and approximate color as a 1.3 lb tube of Jennie-O ground turkey, photographed from the angle the freezer light hit it. The agent had pattern-matched with high confidence and been completely wrong.

I made spaghetti instead. The kids did not know the difference. Karthik ate cauliflower rice with marinara and called it “fine.” But I added two rules to the agent that night:

  1. Anything in the freezer must be confirmed at the moment of cooking, not at the moment of inventory. The agent now flags every freezer item with the line: “Freezer items: confirm physically before cooking. AI vision through freezer frost is unreliable.”
  2. The agent does not auto-decrement. If I tell the agent I “have ground turkey,” the agent does not assume I have enough — it asks me how much. I would rather type three extra characters than make turkey-meatball substitutions on a Tuesday at 6:15.

The pierogi, by the way, were excellent. I made them the following Saturday. The agent suggested a sour-cream-and-dill side that Karthik allowed himself to eat because he was on a planned keto break that weekend.


The Boundary I Set

The agent does not place orders.

I considered, briefly, hooking the Shopping Agent up to the Instacart API via Zapier so that the Cub Foods list would auto-submit at 10:45 a.m. every Sunday. I built it. I tested it once. It worked perfectly. I unhooked it the same afternoon.

The reason: I want to be the human who reviews the cart before money leaves my account. Not because the agent is going to defraud me — it isn’t — but because the cart is a 90-second intimate audit of what I am about to feed my family for a week. I want to see it. I want to feel a little surprise at how much we go through. I want to remember that this is real food going into real bodies that I love.

Auto-submission would have saved me 90 seconds per week. It would have cost me a small ritual I had not realized I valued. The math wasn’t close.


The Hour, Returned

Door 2 returned, in measured time:

  • 35 minutes per week previously spent on inventory (now: 2 minutes of photo-taking)
  • 25 minutes per week previously spent on list-splitting (now: 0 minutes — the agent does it)
  • 1 emergency Target run per week, eliminated (averaging ~26 minutes per week saved)
  • About $73/month in duplicate-purchase prevention

Total: about 60 minutes per week of real, recovered, accountable time.

But that’s not what I want to tell you about Door 2.

What I want to tell you about Door 2 is that on Sunday, June 7, 2026 — which was the first weekend after Vivaan’s preschool let out for the summer — I sent the photos at 10:00 a.m. while I was making coffee. The agent came back at 10:01 a.m. with the lists. Karthik came down at 10:08 a.m. and said, “I can do the Costco run today, want me to?”

I said, “Sure.”

Karthik picked up the Costco list off the counter — it was on a printed Post-it that I had run off from the agent’s output — and he drove away with both kids buckled in, and I had the house to myself for two hours and eleven minutes on a Saturday morning, and I did not do anything productive with that time at all.

The reason that mattered: the reason Karthik had not done the Costco run before was not because he didn’t want to. It was because I had never been able to give him a list that he could just take. My lists were always partial, because the rest of the list lived in my head. The agent’s list was complete. He could carry the list out the door. I did not have to be the bottleneck for him to participate.

This is the second-order benefit of Door 2 that I did not anticipate. It was not just the time. It was that, for the first time in our marriage, I was able to hand my husband a complete artifact of household labor that he could execute end-to-end without coming back to ask me four clarifying questions.

He did, that day, come back to ask me one clarifying question, by text, from the Costco aisle: “You said the big yogurt or the medium yogurt?” I texted back “big.” He bought big. The world turned.

I sat on the deck. The lilacs were past peak now. I read another forty pages of the Lahiri novel. By the time they came back I had finished the book.

— Maya