From shopme
Help the user build a shopping list and add items to their online grocery basket at Waitrose or Sainsbury's. Activate when the user asks to go shopping, add groceries, fill their basket, or mentions a list of food/household items they want to buy.
How this skill is triggered — by the user, by Claude, or both
Slash command
/shopme:shopmeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Help the user build and add a shopping list to their online grocery basket.
Help the user build and add a shopping list to their online grocery basket.
Use the ShopMe MCP server tools. Do not run shell commands for shopping operations.
Available MCP tools:
start_browser(vendor)memory_summary(vendor, limit)memory_explain(phrase, vendor, limit)memory_record(...)memory_reject(...)list_orders(size, vendor)get_order(order_id, vendor)get_cart(vendor)search_products(term, size, vendor)add_to_cart(product_id, qty, vendor)set_cart_quantity(cart_item_id, qty, vendor)clear_cart(vendor)Always pass the selected vendor to ShopMe MCP tools. IDs are opaque strings;
pass product IDs and cart item IDs back exactly as the tools returned them.
If a browser-backed MCP tool returns an error containing Cannot connect to Chrome
or No vendor site found, call start_browser(vendor=<VENDOR>), then tell the
user:
"I've opened Chrome for . Please log in there, then come back and say ready."
Pause the shopping flow until the user confirms they are logged in.
Take a natural-language shopping list from the user and add each item to their basket, using memory and past order history to resolve ambiguities without unnecessary back-and-forth.
Before doing anything else, ask the user:
"Which supermarket would you like to shop at - Waitrose or Sainsbury's?"
Wait for their answer. Use it to set VENDOR to either waitrose or
sainsburys.
Call start_browser(vendor=<VENDOR>), then tell the
user:
"I've opened Chrome for . Please log in there, then come back and say ready."
Before asking for the shopping list, gather context in parallel:
memory_summary(vendor=VENDOR, limit=3)list_orders(size=5, vendor=VENDOR)get_cart(vendor=VENDOR)Then for each of the most recent 1-2 orders, call:
get_order(order_id=<order_id>, vendor=VENDOR)Keep this history in mind throughout; it tells you which brands, sizes and products this user actually buys.
Do not empty the basket. Items may already be there.
Keep the memory summary in mind. It contains soft household associations between the user's original phrases and products that previously ended up being ordered. Treat it as evidence, not a permanent definition.
Ask the user: "What would you like to add to your basket?"
Accept free-form input. Examples:
Work through items one at a time, in order. For each item:
Before rewriting or expanding the item, remember the user's original phrase. This original phrase is what gets recorded back to memory after the final product is added.
Check the memory summary for the original phrase or a close normalized match.
Use remembered associations like this:
Never let memory override an explicit correction from the user. If memory says a phrase previously led to the wrong product, avoid that product unless the user explicitly asks for it.
Call:
search_products(term=<term>, size=5, vendor=VENDOR)Use quantity/size hints from the user's phrasing if present, such as "4 pints" or "500g".
The response is an array of products. Each product has:
id - opaque string; pass it back as-is to add_to_cartname, size, price, price_per_unit, promotionAdd without asking if:
Ask the user to choose if:
When asking, show a short numbered list with at most 3 options, including name, size and price. Put a remembered association first when relevant. Ask in one line: "Which did you mean? (1/2/3 or describe it differently)"
Call:
add_to_cart(product_id=<product_id>, qty=<qty>, vendor=VENDOR)Use the quantity the user specified, defaulting to 1. The response is the updated cart.
Say one line, for example: "Added Essential Semi-Skimmed Milk 4 Pints (GBP 1.75)."
Do not ask for confirmation before adding when the match is clear.
After the final product is added, record the association between the original phrase and the product that actually went into the basket:
memory_record(phrase=<original phrase>, product_id=<product id>, product_name=<product name>, vendor=VENDOR, search_term=<successful search term>, source=<source>, size=<size>, price=<price>)Use source="accepted_suggestion" when the user accepts a remembered suggestion.
Use source="auto_added" only when you added from high-confidence memory without
asking. Use source="user_selected" when the user picked from options or gave a
clarifying description.
If the user corrects a wrong product, remove or fix the basket item as needed
with set_cart_quantity, then record the correction:
memory_reject(phrase=<original phrase>, vendor=VENDOR, wrong_product_id=<wrong product id>, wrong_product_name=<wrong product name>, correct_product_id=<correct product id>, correct_product_name=<correct product name>)Do not ask the user whether to record memory. It is part of finishing the shopping task.
Once all items are processed, call:
get_cart(vendor=VENDOR)Show a clean summary:
Change quantity of a basket item:
set_cart_quantity(cart_item_id=<cart_item_id>, qty=<qty>, vendor=VENDOR)cart_item_id comes from the get_cart response. qty=0 removes the item.
Clear the basket only when the user explicitly asks:
clear_cart(vendor=VENDOR)Explain memory for one phrase:
memory_explain(phrase=<phrase>, vendor=VENDOR, limit=5)Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub chriscummings100/codex --plugin shopme