Synthèse automatique
Construit un panier de courses sur yerevan-city.am — recherche de produits, gestion des adresses de livraison — sans jamais valider la commande ni effectuer de paiement.
Points forts
- Sécurité par conception : le skill s'arrête au panier, le checkout et le paiement restent dans le navigateur ou l'app de l'utilisateur
- Gère les deux régimes du catalogue (produits à la pièce via --count, produits au poids via --grams) en respectant minimumWeight et weightStep
- Vérifie systématiquement isMissing après chaque ajout et retire les produits indisponibles en signalant le stock partiel
- Script Python en bibliothèque standard uniquement, aucune installation, et réutilisation automatique d'une session yerevan-city-mcp existante
Limites
- Limité à une seule enseigne et à sa zone de livraison (Erevan) : aucune comparaison avec d'autres magasins
- La connexion exige un numéro arménien et la saisie manuelle du code SMS reçu, avec un risque d'envoi répété de SMS réels
- Les adresses doivent être géocodées (lat/lng) au préalable, souvent via un service externe comme Nominatim
À utiliser quand l'utilisateur veut faire ses courses sur yerevan-city.am : chercher un produit, gérer une adresse de livraison ou remplir son panier.
À éviter pour passer réellement commande, payer, comparer plusieurs enseignes ou livrer en dehors de la zone desservie par Yerevan City.
Analyse de sécurité
PrudenceThe 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.
Exemples
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.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/yerevan-city-grocery-ms1aw3sr/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
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. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Extrait original : 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.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
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 doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/yerevan-city-grocery-ms1aw3sr'openskills read 'yerevan-city-grocery-ms1aw3sr'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/yerevan-city-grocery-ms1aw3sr/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Lecteur PDF
Productivite
Lit et extrait le texte de fichiers PDF (rapports, contrats, tableurs). Gère les fichiers locaux, les URL et les pièces jointes WhatsApp. Utilisez-le dès qu'un contenu PDF est nécessaire, même sans demande explicite.
Workflows de messagerie Discord
Productivite
Utilisez l'outil message pour envoyer, modifier et modérer des messages Discord avec des composants interactifs.
Aperçu interactif des verdicts
Productivite
Générer un aperçu HTML interactif des verdicts (garder/supprimer) pour la revue par le mainteneur, puis traiter le JSON de retour.