English · 简体中文 · Español · 日本語 · 한국어 · Português (Brasil) · Français · Deutsch · Русский · العربية · हिन्दी · Italiano
A sommelier in your pocket, always by your side.
Shelves, menus, wine cellars: wherever you are, it knows what to recommend.
A skill for AI agents. OpenClaw, Hermes Agent, OpenCode, Claude Code, Cursor, and beyond. A virtual sommelier specialized in beers and wines that learns your personal tastes and suggests the best choice from any shelf, menu, or list. Free, open-source, self-hosted.
At the restaurant, at the pub, at the wine shop, at the supermarket: the problem is always the same. Dozens of options and no certainty about what to pick that is truly suited to your tastes.
You could ask the waiter, open five tabs on your phone, or hope that the prettiest name is also the best. Or you can ask your AI agent — and it already knows what you like.
drinks-sommelier teaches any AI agent to act as a personal sommelier. The agent:
- Learns your taste preferences, once and for all
- Analyzes any input: photo of a shelf, digital menus, lists of names written by the user
- Searches for updated information on each product
- Compares each product against your taste profile
- Tells you exactly what to pick — and why
All in a transparent, honest, free way and without inventing anything.
-
Learns your tastes over time. The more you use the skill, the more the agent knows your palate. Each interaction refines the profile.
-
Beers and wines in a single skill. You do not need to install two separate skills. The agent handles both categories, automatically recognizing what it is analyzing.
-
Analysis from images and text. Take a photo of a shelf, a menu, a wine list. Or write a list. The agent extracts only the relevant products (beers and wines), ignoring everything else.
-
No hallucinations. The agent has the absolute prohibition of using its own pre-training knowledge. Each product is promptly researched on the web before being evaluated.
-
Preference index 0-100%. Each suggestion has a clear score that says how well a product fits your tastes. No half measures.
-
Persistent taste profile. Your preferences are saved in readable and editable text files. They are not lost between one session and the next.
-
Agent-guided setup. The first time, the agent asks you the right questions to understand your tastes, without leaving you in front of manual configurations.
-
Open-source, MIT license. Free, no subscriptions, no API keys, no limits. You can use it, modify it, distribute it.
-
Works with any AI agent. Written for OpenCode, but easily convertible for OpenClaw, Hermes Agent, Claude Code, Cursor, GitHub Copilot, and any other agent. Show this README to your agent for a simple and automatic conversion.
-
Fully customizable. SKILL.md is a text file. Add rules, modify criteria, adapt it to your workflow.
⭐ Enjoying drinks-sommelier? Star the repo, follow the project, and help it grow. The best recommendations are the ones you share — suggestions and contributions are always welcome.
The process is divided into 5 phases, executed in sequence by the agent each time it is queried.
The first time the skill is loaded, the agent checks whether the paragraphs "User's tastes for beers" and "User's tastes for wines" in SKILL.md have already been filled in.
If they have not, the agent opens the file data/SETUP.md which contains:
- Guiding questions to gather preferences (sweet/bitter, alcohol content, liked and disliked styles, etc.)
- Examples of correctly filled-in paragraphs
- Examples of populated
data/files
The agent asks you the questions, collects the answers, and modifies
the two taste paragraphs in SKILL.md. If during the
setup the user mentions specific products, the agent
records them in the corresponding data/ files (optional
operation but useful to refine the profile).
You can also fill in the paragraphs by hand, if you prefer.
The files data/known-preferred-beers.md and data/known-preferred-wines.md
are optional and contain specific products you have already evaluated
in the past. The more complete they are, the more the agent understands your nuances.
The agent identifies what you have available and in what format:
- Text: extracts the names of beers and wines from a written list
- Image: analyzes the photo (shelf, menu, wine list) and recognizes only products that are beers or wines. Completely ignores: spirits, liquors, snacks, meals, desserts, sodas, accessories. Anything that is not beer or wine.
- Mixed: if you send both text and images, it analyzes everything.
If the input is not clear, the agent asks before proceeding.
The agent has the absolute prohibition of using its own pre-training knowledge to evaluate a product. It could be obsolete, imprecise, or worse: invented. For this reason, it performs a targeted web search on each and every identified product.
What the agent searches for:
| Category | Collected information |
|---|---|
| Beers | Style, alcohol content, sweetness, bitterness (IBU), body, aromatic notes, ingredients |
| Wines | Grape variety, appellation, production area, vintage, body, acidity, tannicity, alcohol content, sweetness notes |
If a product is not findable online, the agent honestly states it and does not invent characteristics.
The agent compares each product against your taste profile, which has two distinct levels:
- Taste rules — the general guidelines you have written in the taste paragraphs (e.g. "sweet beers", "wines not too sweet", "alcohol content ≤ 9°"). They are binding.
- Products in data/ files — concrete examples of beers and wines that you liked or disliked. They serve to calibrate the taste rules (e.g. if you love beer X and hate Y, the agent understands what you mean by "sweet" and "bitter").
The agent assigns a preference index from 0 to 100%:
| Index | Meaning |
|---|---|
| 90-100% | Product perfect for your tastes |
| 70-89% | Excellent, slight discrepancies |
| 50-69% | Acceptable, but not optimal |
| 30-49% | Poorly suited to your tastes |
| 0-29% | To avoid |
If you have indicated a food context, the agent also evaluates the food pairing (secondary priority).
The agent structures the response clearly:
- First choice: the best product with preference index and explanation of why it is suitable for your tastes
- Alternatives (if present): in descending order of preference
- Pairings: food pairing suggestions for the products
- Products to avoid: those that clearly do not respect your tastes, with explanation
drinks-sommelier/
├── README.md ← This file
├── LICENSE ← MIT License
├── .gitignore
├── img/ ← Logo and graphic assets
├── i18n/ ← Translations
└── skills/
└── drinks-sommelier/ ← The actual skill
├── SKILL.md ← Complete instructions for the agent
│ (frontmatter, tastes, operations,
│ edge cases, best practices, examples,
│ preference updates)
└── data/
├── SETUP.md ← Initial setup guide
│ (used only on first launch)
├── known-preferred-beers.md ← Liked and disliked beers
│ (to be filled in with use)
└── known-preferred-wines.md ← Liked and disliked wines
(to be filled in with use)
You can install the skill in two ways:
npx skills add Johell1NS/drinks-sommelier --skill drinks-sommeliergit clone https://github.com/Johell1NS/drinks-sommelier.gitNote: unlike
npx skills add, git clone does not know where your agent's skills are stored. You need to place the skill in the correct path for your agent (e.g., OpenCode uses~/.config/opencode/skills/, other agents may differ). Once it's there, the agent detects it automatically.
The skill needs to know your tastes to work. You can configure it in two ways:
After installing the skill, ask your agent something like
"Help me configure the drinks-sommelier skill". The agent will load
SKILL.md, find the taste paragraphs still to be filled in, and
guide you through the initial setup using data/SETUP.md.
Alternatively, simply ask for a beer or wine recommendation: the agent will automatically detect that the skill is not initialized and will ask you the right questions.
Open SKILL.md and fill in the paragraphs:
User's tastes for beers
I prefer sweet and not bitter beers.
They must not exceed 9° alcohol by volume.
I like Belgian styles and fruity beers.
I dislike IPAs, stouts, and beers that are too bitter.
User's tastes for wines
I prefer red wines that are not too sweet.
For whites, I prefer vermentino and sauvignon.
I like wines with good acidity and freshness.
I dislike passito or fortified wines.
You can also populate the files data/known-preferred-beers.md and
data/known-preferred-wines.md with specific products you have
already tried and evaluated. This part is optional but useful
for refining the profile.
Example — data/known-preferred-beers.md
# LIKED BEERS
- Kwak
- Triple Karmeliet
- La Trappe Blond
- Flea Margherita
# DISLIKED BEERS
- Any IPA
- Stout
- Beers with alcohol content above 9°
Example — data/known-preferred-wines.md
# LIKED WINES
- Vermentino Costamolino
- Syrah Soraia Casale Valle Chiesa
- Rebeca Firriato
# DISLIKED WINES
- Passito wines
- Fortified wines
Every time you express a judgment on a product ("I like this one",
"I don't like this one"), the agent automatically updates the
data/ files. The taste rules in the SKILL.md paragraphs, on the other hand,
are updated only with your explicit confirmation, because
they are binding for future evaluations.
You take a photo of a wine shop shelf. The agent identifies the wines, researches them all on the web, compares them against your profile. It tells you which one to pick, why, and what to pair it with.
You take a photo of a pub's beer menu. The agent ignores cocktails, spirits, etc... analyzes only the beers, searches for information on each one. It suggests the beer most suited to your tastes.
You write "I have these wines: Chianti Classico, Vermentino Costamolino, Amarone. And these beers: Kwak, local craft IPA, Leffe Blonde." The agent evaluates both categories and tells you what the best choice is overall.
"I need to get a wine for a dinner, what do you recommend?" The agent does not invent. It asks what you have available, what kind of dinner, and if you already have any wines in mind.
After a suggestion you say "I really liked that beer". The agent adds it to your favorites and updates the profile to be even more precise next time.
-
It does not provide professional tasting evaluations. The suggestions are based on objective data (style, alcohol content, bitterness) and on declared preferences. It does not replace a human sommelier in formal contexts.
-
It does not handle other beverages. Spirits, cocktails, liquors, sodas, non-alcoholic drinks — anything that is not beer or wine is ignored.
drinks-sommelier works with any web search tool your agent natively supports. If your agent already has reliable web search capabilities, you do not need anything else.
However, if you want to ensure thorough, anti-bot-resistant searches every time (especially useful when product pages are behind anti-bot systems), consider installing the companion browser-search skill. It searches dozens of engines simultaneously and helps the agent find product information even when standard tools struggle.
MIT
