Automated summary
Builds a grocery cart on yerevan-city.am — product search and delivery address management — without ever placing an order or taking payment.
Strengths
- Safe by design: the skill stops at the cart, leaving checkout and payment to the user's own browser or app
- Handles both catalogue modes (piece-counted items with --count, weight-based items with --grams) and honours minimumWeight and weightStep
- Checks isMissing after every add, removes unavailable items and reports partial stock to the user
- Pure Python standard-library script, nothing to install, and it automatically reuses an existing yerevan-city-mcp session
Limitations
- Single-store scope tied to Yerevan City's delivery area in Yerevan; no cross-retailer comparison
- Login requires an Armenian phone number and manual entry of the SMS code, and repeated login-request calls send real SMS messages
- Delivery addresses must be geocoded (lat/lng) beforehand, typically through an external service such as Nominatim
Use it when the user wants to shop on yerevan-city.am: search for a product, manage a delivery address, or fill their cart.
Avoid it for actually placing or paying for an order, comparing several supermarkets, or delivering outside Yerevan City's service area.
Security analysis
CautionThe SKILL.md itself is well-behaved: no destructive commands, no curl|sh, no obfuscation, no secret exfiltration, and it deliberately stops short of checkout/payment. However it invokes an unauditable Python script via Bash that makes authenticated network calls to a shop API, handles phone numbers/SMS codes, and persists session tokens to disk — legitimate but powerful, hence caution rather than safe.
- •Uses Bash + Read with a Python helper script (scripts/yerevan_city.py) whose source is not included in SKILL.md, so the actual network calls, credential handling, and file writes cannot be audited from this file alone.
- •Handles personal data: user's Armenian phone number and one-time SMS code, plus a persisted session in ~/.yerevan-city-skill/session.json and reuse of an existing yerevan-city-mcp session (session credentials written to disk).
- •Sends the user's delivery address to a third-party geocoding service (Nominatim/OpenStreetMap) as part of the address-add flow.
- •Login instructions warn against guessing codes or spamming login-request, and the skill explicitly refuses to place orders or pay — reducing financial risk.
Examples
Order 2 litres of milk, a loaf of bread and 1 kg of tomatoes from yerevan-city to my Tumanyan 1 apartment.What's in my yerevan-city cart right now?Find fresh tomatoes on yerevan-city.am and add 500 g to my cart — tell me if there's a minimum weight.name: yerevan-city description: Order groceries from yerevan-city.am — search products, manage delivery addresses, build a cart. Use when the user asks to order groceries, buy food in Yerevan, add products to their yerevan-city cart, or mentions yerevan-city.am / City Supermarket. allowed-tools: [Bash, Read]
Yerevan City Grocery Skill
Build a grocery cart on yerevan-city.am from conversation.
Safe by design: never places an order or pays — only builds the cart. Checkout and payment always stay with the user, in their own browser or app.
When to Use
- "Order milk and bread" / "добавь молоко в корзину"
- "What's in my yerevan-city cart?"
- "Find tomatoes on yerevan-city"
- Any grocery shopping request for Yerevan City / City Supermarket
Setup
All commands run through one script (Python 3 stdlib only, no install needed):
SCRIPT="$CLAUDE_PROJECT_DIR/scripts/yerevan_city.py" # or path where this skill is installed
python3 "$SCRIPT" --help
If the skill is installed under ~/.claude/skills/yerevan-city/, use
python3 ~/.claude/skills/yerevan-city/scripts/yerevan_city.py.
Login Flow (one-time)
Session persists in ~/.yerevan-city-skill/session.json; an existing
yerevan-city-mcp session is reused automatically. Only log in when a
command fails with "No active yerevan-city.am session".
- Ask the user for their Armenian phone number.
python3 "$SCRIPT" login-request --phone +37441234567- Ask the user for the SMS code they received.
python3 "$SCRIPT" login-confirm --phone +37441234567 --code 1234
Never guess the code. Never trigger login-request repeatedly — each call sends a real SMS.
Commands
python3 "$SCRIPT" search --query "milk" [--page 1] # free-text catalogue search
python3 "$SCRIPT" account # profile: name, bonus card, default address
python3 "$SCRIPT" addresses # saved delivery addresses
python3 "$SCRIPT" address-add --city Yerevan --street Tumanyan --building 1 \
--apartment 1 --floor 1 --lat 40.1811 --lng 44.5136 # create address (become session default)
python3 "$SCRIPT" address-update --id 45 ... # same flags as address-add, plus --id
python3 "$SCRIPT" add --product-id 123 --count 2 --address-id 45 # piece-counted product
python3 "$SCRIPT" add --product-id 456 --grams 500 --address-id 45 # weight-based product
python3 "$SCRIPT" remove --product-id 123 --address-id 45
python3 "$SCRIPT" cart --address-id 45
python3 "$SCRIPT" logout
Rules to Follow
- Address first. The cart is scoped to a delivery address. Login stores the
account's default address in the session automatically; run
addressesto check. If the list is empty, ask the user for their address (city, street, building, apartment, floor) and create it withaddress-add— geocode lat/lng first (e.g. Nominatim:https://nominatim.openstreetmap.org/search?q=<street>+<building>,+Yerevan&format=json). Pass the addressidas--address-idto add/remove/cart calls (or rely on the session default). - Count vs grams. Products with
isKilogram: falseare added with--count(pieces). Products withisKilogram: trueare added with--grams; respectminimumWeightandweightStepfrom search results (both in grams) — fresh meat is typically 1000g minimum, loose produce 300–800g. If the user asks for less than the minimum, tell them the forced minimum and get their OK before adding. - Check
isMissingafter every add. The API accepts adds for out-of-stock products and only reports it viaisMissingon the returnedaddedItem. IfisMissingis true, the product will NOT be delivered: immediatelyremoveit, tell the user it's unavailable (mentionavailableCount/availableWeightif partial stock exists), and suggest an alternative from search results if there's an obvious one. Never leave an out-of-stock item in the cart silently. - Always report totals. After adding items or showing the cart, state
totalPriceanddeliveryFeetogether as the full amount to pay (prices are in Armenian drams, AMD). - Before declaring the cart ready, run
cartand clean up any item withisMissing: trueviaremove. - Never place an order. The script cannot check out, and you must not try to via the website. Tell the user to finish checkout in their own browser or app.
Example Session
User: order 2 bottles of milk and half a kilo of cheese
1. python3 "$SCRIPT" addresses → default address id 45
2. python3 "$SCRIPT" search --query "milk" → pick product, isKilogram false
3. python3 "$SCRIPT" add --product-id 111 --count 2 --address-id 45
→ check addedItem.isMissing, note totalPrice
4. python3 "$SCRIPT" search --query "cheese" → pick product, isKilogram true
5. python3 "$SCRIPT" add --product-id 222 --grams 500 --address-id 45
6. python3 "$SCRIPT" cart --address-id 45 → verify, report total + delivery fee
Notes
- Product names come in three languages (
nameEn,nameRu,nameArm) — match against whichever language the user used. English queries sometimes miss items that Russian ones find (e.g. "стейк", "чеснок", "вырезка") — retry in another language before concluding a product doesn't exist. - The shop API misspells two address fields:
bulidingandappartment. The script's--building/--apartmentflags map to them — don't "fix" the spelling in the API payloads. - The user's bonus card lives on the account profile (
accountcommand,bonusCardNumber) and applies at checkout automatically — no cart action needed. - Unofficial, educational project; not affiliated with Yerevan City / City Supermarket. Non-commercial license — see LICENSE.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/yerevan-city-grocery-ms1aw3sr/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/yerevan-city-grocery-ms1aw3sr' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/yerevan-city-grocery-ms1aw3sr/download' --output '.skill-downloads/yerevan-city-grocery-ms1aw3sr/SKILL.md.part' && mv '.skill-downloads/yerevan-city-grocery-ms1aw3sr/SKILL.md.part' '.skill-downloads/yerevan-city-grocery-ms1aw3sr/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
Original excerpt: Setup
All commands run through one script (Python 3 stdlib only, no install needed):
SCRIPT="$CLAUDE_PROJECT_DIR/scripts/yerevan_city.py" # or path where this skill is installed
python3 "$SCRIPT" --help
If the skill is installed under ~/.claude/skills/yerevan-city/, use
python3 ~/.claude/skills/yerevan-city/scripts/yerevan_city.py.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/yerevan-city-grocery-ms1aw3sr/SKILL.md' && test -s '.skill-downloads/yerevan-city-grocery-ms1aw3sr/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/yerevan-city' && cp -R '.skill-downloads/yerevan-city-grocery-ms1aw3sr' '.claude/skills/yerevan-city'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/yerevan-city-grocery-ms1aw3sr'openskills read 'yerevan-city-grocery-ms1aw3sr'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/yerevan-city-grocery-ms1aw3sr/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
PDF Reader
Productivity
Read and extract text from PDF files, including documents, reports, contracts, and spreadsheets. Works with local files, URLs, and WhatsApp attachments. Use whenever PDF content is needed, even if not explicitly requested.
Discord Messaging Workflows
Productivity
Use the message tool to send, edit, and moderate Discord messages with interactive components.
Interactive Verdict Preview
Productivity
Generate an interactive HTML preview of keep/drop verdicts for maintainer review, then process the pasted feedback JSON.