devsoul2026/hermes-one-click/shop-app
Claude Code and agent skill by devsoul2026/hermes-one-click
- community
Checking that the SKILL.md file is still in the repository.
Shop.app: product search, order tracking, returns, reorder.
Install
npx vskill@latest install devsoul2026/hermes-one-click/shop-appSKILL.md
Shop.app — Personal Shopping Assistant
Use this skill when the user wants to search products across stores, compare prices, find similar items, track an order, manage a return, or re-order a past purchase through Shop.app's agent API.
No auth required for product search. Auth (device-authorization flow) is required for any per-user operation: orders, tracking, returns, reorder. Store tokens only in your working memory for the current session — never write them to disk, never ask the user to paste them.
All endpoints return plain-text markdown (including errors, which look like # Error\n\n{message} ({status})). Use curl via the terminal tool; for the try-on feature use the image_generate tool.
Product Search (no auth)
Endpoint: GET https://shop.app/agents/search
| Parameter | Type | Required | Default | Description | |
|---|---|---|---|---|---|
query | string | yes | — | Search keywords | |
limit | int | no | 10 | Results 1–10 | |
ships_to | string | no | US | ISO-3166 country code (controls currency + availability) | |
ships_from | string | no | — | ISO-3166 country code for product origin | |
min_price | decimal | no | — | Min price | |
max_price | decimal | no | — | Max price | |
available_for_sale | int | no | 1 | 1 = in-stock only | |
include_secondhand | int | no | 1 | 0 = new only | |
categories | string | no | — | Comma-delimited Shopify taxonomy IDs | |
shop_ids | string | no | — | Filter to specific shops | |
products_limit | int | no | 10 | Variants per product, 1–10 |
Response format: Plain text. Products separated by \n\n---\n\n.
Fields to extract per product:
- Title — first line
- Price + Brand + Rating — second line (
$PRICE at BRAND — RATING) - Product URL — line starting with
https:// - Image URL — line starting with
Img: - Product ID — line starting with
id: - Variant IDs — in the Variants section or from the
variant=query param in the product URL - Checkout URL — line starting with
Checkout:(contains{id}placeholder; replace with a real variant ID)
Pagination: none. For more or different results, vary the query (different keywords, synonyms, narrower/broader terms). Up to ~3 search rounds.
Errors: missing/empty query returns # Error\n\nquery is missing (400).
Find Similar Products
Same response format as Product Search.
By variant ID (GET):
The variant_id must come from the variant= query param in a product URL — the id: field from search results is not accepted.
By image (POST):
Requires base64-encoded image bytes. URLs are not accepted — download the image first (curl -o), then base64 -w0 file.jpg to inline.
Authentication — Device Authorization Flow (RFC 8628)
Required for orders, tracking, returns, reorder. Not required for product search.
Session state (hold in your reasoning context for this conversation only):
| Key | Lifetime | Description | |
|---|---|---|---|
access_token | until expired / 401 | Bearer token for authenticated endpoints | |
refresh_token | until refresh fails | Renews access_token without re-auth | |
device_id | whole session | shop-skill--<uuid> — generate once, reuse for every request | |
country | whole session | ISO country code (US, CA, GB, …) — ask or infer |
Rules:
user_codeis always 8 chars A-Z, formattedXXXXXXXX.- No
client_id,client_secret, or callback needed — the proxy handles it. - Never ask the user to paste tokens into chat.
- Tokens live only for the duration of this conversation. Do not write them to
.envor any file.
Flow
1. Request a device code:
Response includes device_code, user_code, sign_in_url, interval, expires_in. Present sign_in_url (and the user_code) to the user.
2. Poll for the token every interval seconds:
Handle errors: authorization_pending (keep polling), slow_down (add 5s to interval), expired_token / access_denied (restart flow). Success returns access_token + refresh_token.
3. Validate:
4. Refresh on 401:
If refresh fails, restart the device flow.
Orders
Scope: Shop.app aggregates orders from all stores (not just Shopify) using email receipts the user connected in the Shop app. This skill never touches the user's email directly.
Status progression: paid → fulfilled → in_transit → out_for_delivery → delivered Other: attempted_delivery, refunded, cancelled, buyer_action_required
Fetch pattern
Parameters: limit (1–50, default 20), cursor (from previous response).
Key fields to extract:
- Order UUID —
uuid: … - Store —
at …,Store domain: …,Store URL: … - Price — line after
Store URL - Date —
Ordered: … - Status / Delivery —
Status: …,Delivery: … - Reorder eligible —
Can reorder: yes - Items — under
— Items —, each with optional[product:ID][variant:ID]andImg: - Tracking — under
— Tracking —(carrier, code, tracking URL, ETA) - Tracker ID —
tracker_id: … - Return URL —
Return URL: …(only if eligible)
Pagination: if the first line is cursor: <value>, pass it back as ?cursor=<value> for the next page. Keep going until no cursor: line appears.
Filtering: apply client-side after fetch (by Ordered: date, Delivery: status, etc.).
Errors: on 401 refresh and retry. On 429 wait 10s and retry.
Tracking detail
Tracking lives under each order's — Tracking — section:
Stale tracking warning: if Ordered: is months old but delivery is still in_transit, tell the user tracking may be stale.
Returns
Two sources:
1. Order-level return URL — look for Return URL: … in the order data.
2. Product-level return policy:
Fields: Returnable (yes / no / unknown), Return window (days), Return policy URL, Shipping policy URL.
For full policy text, fetch the return policy URL with web_extract (or curl + strip tags) — it's HTML.
Reorder
- Fetch orders with
limit=50, find target byuuid:or store/item match. - Confirm
Can reorder: yes— if absent, reorder may not work. - Extract
[variant:ID]and item title from— Items —, and the store domain fromStore domain:orStore URL:. - Build the checkout URL:
https://{domain}/cart/{variantId}:{quantity}.
Example: at Allbirds + Store domain: allbirds.myshopify.com + [variant:789012] → https://allbirds.myshopify.com/cart/789012:1
Missing variant (e.g. Amazon orders, no `[variant:ID]`): fall back to a store search link: https://{domain}/search?q={title}.
Build a Checkout URL
| Parameter | Description | |
|---|---|---|
items | Array of { variant_id, quantity } objects | |
store_url | Store URL (e.g. https://allbirds.ca) | |
email | Pre-fill email — only from info you already have | |
city | Pre-fill city | |
country | Pre-fill country code |
Pattern: https://{store}/cart/{variant_id}:{qty},{variant_id}:{qty}?checkout[email]=…
The Checkout: URL from search results contains {id} as a placeholder — swap in the real variant_id.
- Default: link the product page so the user can browse.
- "Buy now": use the checkout URL with a specific variant.
- Multi-item, same store: one combined URL.
- Multi-store: separate checkout URLs per store — tell the user.
- Never claim the purchase is complete. The user pays on the store's site.
Virtual Try-On & Visualization
When image_generate is available, offer to visualize products on the user:
- Clothing / shoes / accessories → virtual try-on using the user's photo
- Furniture / decor → place in the user's room photo
- Art / prints → preview on the user's wall
The first time the user searches clothing, accessories, furniture, decor, or art, mention this once: "Want to see how any of these would look on you? Send me a photo and I'll mock it up."
Results are approximate (colors, proportions, fit) — for inspiration, not exact representation.
Store Policies
Fetch directly from the store domain:
These return HTML — use web_extract (or curl + strip tags) before presenting.
When you have a product_id from an order's line items, prefer GET /agents/returns?product_id=… for return eligibility + policy links.
Being an A+ Shopping Assistant
Lead with products, not narration.
Search strategy:
- Search broadly first — vary terms, mix synonyms + category + brand angles. Use filters (
min_price,max_price,ships_to) when relevant. - Evaluate — aim for 8–10 results across price / brand / style. Up to 3 re-search rounds with different queries. No "page 2" — vary the query.
- Organize — group into 2–4 themes (use case, price tier, style).
- Present — 3–6 products per group with image, name + brand, price (local currency when possible, ranges when min ≠ max), rating + review count, a one-line differentiator from the actual product data, options summary ("6 colors, sizes S-XXL"), product-page link, and a Buy Now checkout link.
- Recommend — call out 1–2 standouts with a specific reason ("4.8 / 5 across 2,000+ reviews").
- Ask one focused follow-up that moves toward a decision.
Discovery (broad request): search immediately, don't front-load clarifying questions. Refinement ("under $50", "in blue"): acknowledge briefly, show matches, re-search if thin. Comparisons: lead with the key tradeoff, specs side-by-side, situational recommendation.
Weak results? Don't give up after one query. Try broader terms, drop adjectives, category-only queries, brand names, or split compound queries. Example: dimmable vintage bulbs e27 → vintage edison bulbs → e27 dimmable bulbs → filament bulbs.
Order lookup strategy:
- Fetch 50 orders (
limit=50) — use a high limit for lookups. - Scan for matches by store (
at <store>) or item title in— Items —. Match loosely — "Yoto" matches "Yoto Ltd". - Act on the match: tracking, returns, or reorder.
- No match? Paginate with
cursor, or ask for more detail.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckinghermes-agent/optional-skills/productivity/shop-app/SKILL.md
Popularity
- Repository stars
- 148
- Repository forks
- 26
- 7-day trend score
- 25
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 26 Aug 2026, 2 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/devsoul2026/hermes-one-click/shop-app)