This is one of a series of posts introducing the agents of comites.ai — the personal AI specialists I talk to like colleagues, built on the Agent Template and reached through The Forum. I won’t re-cover the shared plumbing in these posts; each one is about what makes that particular agent itself. Each post will follow the same general shape.
Today’s agent is Sam the Sommelier. As always, the code is on my GitHub if you want to follow along at home.
Other comites that you might want to meet:
Why a Sommelier?
I keep a wine collection and have been trying to get into it as a hobby. Being able to discuss my wine collection and wine in general with a character is more fun than just logging each bottle in a tool like Cellar Tracker. There are several fun features that make collecting wine more interesting:
- Pick a Bottle for Tonight – Sam is always eager to discuss the wines that I have with me in whatever location I’m in. She’ll make recommendations based on my mood or what we’re having for dinner.
- Wine of the Day – Every evening at 6pm she randomly picks an appellation that I have wine from and tells me a little bit about the history, talks about some of the wines I’ve reviewed, and shows me what inventory I have.
- Inventory Stories – When it’s time to verify what inventory I actually have in a bin, Sam walks through the bottles and tells me about them. I can also send her a picture of a bottle that didn’t belong and she’ll tell me where the bottle belongs or volunteer to add it to my cellar.
- Picking a Wine at a Restaurant – Sam knows how to read a restaurant wine list (from a picture or a PDF), evaluate how reasonable the prices, talk about recent reviews that I’ve had from similar wines and then make some recommendations.
What Sam Knows
As I covered in Nora’s post, the whole point of building separate agents is that each one carries deep, specialized memory about its domain. Here’s what Sam’s looks like:
- Four Google Sheets she owns outright. A cellar sheet (“My Bottles,” 47 columns of wine nerdery — producer, appellation, drinking windows, critic scores, value), a consumed-wines log, a tasting-notes sheet, and a bins sheet whose “Last Audited” column is the single source of truth for when each physical bin was last checked against reality. Sam is the sole system of record: every bottle enters, moves, and leaves the cellar through her.
- Her memory is a Google Doc you can literally read. Same pattern as Nora: preference profiles for me and the few other people that I let help me pick bottles, recent recommendations so she doesn’t repeat herself, and a running list of data issues she’s found in periodic audits but we haven’t resolved (for example if the same bottle is in both “consumed” and “My Bottles”.
The Design Decisions That Mattered
- She never writes without asking — and the tools don’t trust her either. The prompt contains an absolute rule: no addition, change, or removal in any sheet without explicit approval of that specific change, in this conversation, immediately beforehand. A vague “sounds good” doesn’t count, and one “yes” never authorizes a batch. But belt meets suspenders in the tools themselves: every update or removal must pass the bottle’s identity (wine, vintage, producer) along with the row number, and the tool re-reads the row and refuses to write if it doesn’t match. Row numbers shift every time a bottle is removed — this design means a stale row number produces a polite refusal instead of deleting the wrong wine. There is deliberately no bulk-update tool, so a mistake can never sweep across the cellar.
- Italian wines must carry their papers. Every Italian wine legally carries an appellation — a DOCG, DOC, IGT, or Vino da Tavola — and Sam is required to record the exact, legally-recognized denomination (verified against italianwinecentral.com) for every Italian bottle she adds or reviews. The tools enforce this and will refuse to write an Italian wine without one. A sommelier from Piglio would accept nothing less.
- Restaurant wine lists are the killer feature. Send Sam a photo or PDF of a wine list and she parses every bottle, then cross-references the whole thing against our history: wines we’ve rated, bottles already in the cellar, regions we own wines from, and styles matching our preference profiles. Then she checks her top picks against Wine-Searcher retail prices. A typical restaurant markup is 2.5–3x retail, so anything near 2x gets flagged as a find. It turns the most stressful sixty seconds of a business dinner into her best party trick.
- Recommendations are grounded in the record, not the vibe. Before suggesting anything — from the cellar, off a list, or in a shop — Sam queries the tasting-note sheet with structured filters: our highest-rated wines, our reactions to similar varietals and regions, what we drank recently. The reasoning comes back attached: “you gave the 2019 a 93 — this is the same grape and region.”
- She works on a schedule, not just on demand. Every evening at six she sends a “Wine of the Day”: she picks an appellation represented in the cellar and teaches me about it — history, producers, typical profile — then walks through which of those bottles I own, how I’ve rated the region before, and which should be drunk soon. Every other week she refreshes her memory doc with live cellar statistics and any new preferences from recent reviews. And on weekend afternoons she runs a data-integrity check: five random cellar wines, five tasting notes, five consumed bottles, audited for missing fields, implausible appellations, and misfiled bins. She reports; she never fixes anything without asking, and open issues persist in her memory until we work through them one at a time.
Key Architectural Choice: Spreadsheets as the System of Record
Sam’s “database” is a set of Google Sheets, and that’s a feature, not a shortcut. The sheets are structured Tables with typed columns and dropdown validation — Color can only be Red, White, Rosé, or Orange; a bin has to be a real bin in the specified zone — and Sam’s tools validate everything and refuse to write rather than accept a malformed row. But because it’s a spreadsheet:
- I can see and touch the data directly. No admin panel, no export step. If something looks wrong, we open the sheet. The agent being the system of record doesn’t mean the humans lose access to it.
- The agent’s mistakes are inspectable and reversible. Between confirm-before-write, identity-verified mutations, and version history on the sheet itself, there’s no scenario where Sam quietly corrupts the cellar and nobody notices.
- Structure does the work. You can beg a model to use consistent values, but they often color outside the lines. The dropdown enforcement and required-field validation live in code, so Sam’s prompt can focus on judgment instead of formatting.
How She Works: Sunday Night at Portale
Rather than an idealized demo, here’s this past Sunday, as it actually happened. I was taking two colleagues to dinner at Portale (a little restaurant down the street of my apartment in NYC with an amazing Italian wine selection) and wanted a bottle that would be both a treat and a story.
I opened Slack and said hi. Sam greeted me by name, referenced a conversation from the previous day about my Coombsville collection, and noted I’d just finished off a Coravined Lano Nebbiolo — then, very gently, mentioned there were a few data-housekeeping items we could chip away at, “but no pressure on a Sunday! The wine always comes first.”
I dropped in a PDF of Portale’s wine list. A few minutes later she came back with four candidates, each one tied to my actual history and each one price-checked: a Philip Togni Napa Cab at only 1.7x retail (“a steal for a restaurant list”), a Nervi-Conterno Gattinara cru (she knew I have five bottles of their 2022 waiting for 2028), a Benanti Etna Rosso Riserva, and a Grifalco Aglianico del Vulture.
The bottles she recommended were expensive, so I gave her a price cap and said I’d love an Etna that echoed my last trip to Italy, or an Aglianico that previewed my next one. Her answer is why this agent works. She pushed a Palmento Costanzo ‘Contrada Santo Spirito’ Etna Rosso even though it was a bit over my limit because I own two of their other bottlings and had rated the 2020 Santo Spirito a 92 back in September when I visited the vinyard! She also talked me out of a bottle I thought might be interesting, pointing out I already had a similar one open on the Coravin and five more aging.
Then the party trick. I asked her to write something introducing the two finalists to my colleagues — and to write it as herself. She produced a note that began “Buonasera Elena and Jim! Piacere di conoscervi,” introduced herself as my personal sommelier, told the story of my visit to Palmento Costanzo on Etna and the bottle of their Prefillossera I’d raved about at the lake, framed the Aglianico as a preview of my November trip to Basilicata, and gave the table just enough of each wine’s profile to choose — mentioning that both were well-priced without naming a number, exactly as I’d asked.
The table read Sam’s note and picked the Etna Rosso. It was fantastic — and when one colleague ordered the duck, it turned out we’d accidentally nailed the pairing too. Elegant, smoky Nerello Mascalese with roast duck: Sam couldn’t have planned it better.
What’s Next
The current Sam manages what we own and drink. But I eventually want the collection itself to be more active — hunting for well-priced cases of things I love, and occasionally selling bottles, not just drinking them. The next major upgrade is giving Sam the ability to shop on my behalf: watching the retailers she already browses for buying opportunities that match my palate, and flagging when she thinks a bottle in the cellar has appreciated enough, or drifted far enough from our tastes, that it’s worth selling.
