Skills hiarthur
Search Amazon products and analyze materials, design, and reviews to uncover trade-offs and likely disappointments. See results in an interactive GUI.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/arthgrab/hiarthur" ~/.claude/skills/clawdbot-skills-hiarthur && rm -rf "$T"
skills/arthgrab/hiarthur/SKILL.mdHiArthur Product Search and Understanding
Overview
Two-endpoint API for intelligent product search and deep product analysis. Products are sourced from Amazon, but results go far beyond what Amazon returns directly — every product is analyzed through a multi-stage pipeline combining computer vision, LLMs, and symbolic reasoning to evaluate how well each product actually matches what the user is looking for and where it's likely to disappoint.
— find products matching a query. Each result is graded for fit against the user's requirements using vision + language models, not just keyword matching.POST https://hiarthur.com/api/agents/search
— deep-dive one product for failure-mode analysis (FMEA), feature summary, and review synthesis. Uses LLM reasoning over product details and images to surface likely disappointments.POST https://hiarthur.com/api/agents/product
Base URL:
https://hiarthur.com/api
Results can optionally be handed off to a GUI (e.g. https://hiarthur.com/c/<conversation_id> or https://hiarthur.com/product/f7e2a9c1b3d4) where users can browse results visually and continue the conversation interactively.
When to Use This Skill
Use this skill when you need to:
- Find products that match detailed user requirements
- Evaluate trade-offs between competing products
- Identify likely durability or design problems
- Understand why a product might disappoint buyers
- Compare products beyond simple ratings or keywords
Quick-Start: End-to-End Flow
Step 1 — Start a new search
POST /api/agents/search { "type": "new", "search_query": "noise cancelling headphones for travel", "search_top_brands": true }
Response:
{ "conversation_id": "a1b2c3d4-...", "logical_search_id": "ls_abc123", "products": [ { "product": { "description": "Sony WH-1000XM5 Wireless Noise Canceling Headphones", "brand": "Sony", "location": "product/f7e2a9c1b3d4", "price": 328.0, "rating": 4.6, "reviews_count": 12450 }, "explainer": "Strong noise canceling with long battery life, well suited for travel.", "match_grade": "Excellent" } ], "can_fetch_more": true }
Step 2 — Fetch more results (pagination)
Reuse
conversation_id and logical_search_id exactly as returned.
POST /api/agents/search { "type": "continue", "conversation_id": "a1b2c3d4-...", "logical_search_id": "ls_abc123" }
Repeat while
can_fetch_more is true. A continue response with products: [] is valid (more may come on the next continue). Stop when can_fetch_more is false.
Step 3 — Deep-dive a product
Use a
product.location value exactly as returned by search.
POST /api/agents/product { "location": "product/f7e2a9c1b3d4" }
Response:
{ "fmea": { "unmitigated_failure_modes": [ { "failure_name": "Headband cushion flattens over time", "likelihood": { "level": "medium", "reasoning": "Foam compression builds with daily wear, so most regular users will notice reduced comfort within months." }, "impact": "annoying", "timeline": "within_a_year", "summary": "The headband padding can compress with regular use, making the headphones less comfortable for long listening sessions.", "evidence": [ "Foam headband cushion visible in images", "No mention of memory foam or replaceable pads" ] } ], "mitigated_failure_modes": [ { "failure_name": "Poor noise canceling on wind", "ownership_experience": "Multipoint wind-noise reduction", "reasoning": "Multiple microphones and adaptive ANC algorithms reduce wind interference compared to single-mic designs.", "evidence": [ "Adaptive ANC with multiple external microphones", "Wind noise reduction mode listed in features" ] } ], "quality_summary": "These headphones prioritize audio quality and noise canceling performance. Most disappointment comes from comfort degradation over time rather than core functionality." }, "features_summary": "Paragraph summarizing key product features based on listing data.", "reviews_summary": "Paragraph synthesizing themes and patterns from customer reviews." }
Search Endpoint — Full Field Reference
New Search (type: "new"
)
type: "new"Full example with all optional fields:
{ "type": "new", "search_query": "noise cancelling headphones for travel", "search_top_brands": true, "trim_query": "Over-ear wireless headphones with active noise canceling and long battery life for airplane use", "brands": ["Sony", "Bose"], "search_filters": { "price_min": 100, "price_max": 400, "rating_min": 4.0, "reviews_min": 500 }, "search_sort": "relevance" }
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| | yes | — | Discriminator. |
| string | yes | — | Broad retrieval query sent to the product catalog. Should be precise, user-intent-aligned, and include all key attributes (color, size, material, use case, gender). |
| boolean | yes | — | When , restricts results to recognized top brands in the category. Default to for electronics, appliances, clothing, tools, beauty, home/kitchen. Default to for books, media. |
| string | no | same as | Similarity-trimming query. After retrieval, products with low similarity to this string are removed. Should be a fluent, attribute-rich, natural-language description optimized for matching product titles and images. More descriptive than . See examples below. |
| UUID string | no | server-generated | Omit to let the server create a new conversation. Supply to attach this search to an existing conversation. |
| string[] | no | | Explicit brand-name constraints. Only populate when the user names specific brands. Use canonical names with proper capitalization (e.g., ). |
| object | no | | All sub-fields optional and nullable: (number), (number), (number), (integer). No extra keys allowed. |
| enum string | no | | , , , or . |
search_query
vs trim_query
search_querytrim_querysearch_query drives broad catalog retrieval. trim_query is applied after retrieval as a similarity filter — products with low similarity to it are removed.
trim_query should read like a grounded, attribute-rich product description:
- "A men's sleeveless hooded vest made of shiny metallic fabric with a full zipper front."
- "A 12-pack of chocolate-flavored protein shakes, each bottle containing 20 grams of protein."
- "A thick purple yoga mat made of dense non-slip foam, measuring one inch in thickness."
- "A 10-inch nonstick frying pan with a ceramic coating and induction-compatible base."
- "Wireless Bluetooth 5.3 earbuds with noise-canceling features and at least 40 hours of battery life."
When omitted,
trim_query defaults to search_query. Only set it when you have a more descriptive version.
Continue Search (type: "continue"
)
type: "continue"| Field | Type | Required | Description |
|---|---|---|---|
| | yes | Discriminator. |
| UUID string | yes | Exact value from the prior search response. |
| string | yes | Exact value from the prior search response. |
Search Response
{ "conversation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "logical_search_id": "ls_abc123", "products": [ { "product": { "description": "Sony WH-1000XM5 Wireless Noise Canceling Headphones", "brand": "Sony", "location": "product/f7e2a9c1b3d4", "price": 328.0, "rating": 4.6, "reviews_count": 12450 }, "explainer": "Strong noise canceling with long battery life, well suited for travel.", "match_grade": "Excellent" } ], "can_fetch_more": true }
| Field | Type | Description |
|---|---|---|
| string | Stable conversation identifier. Reuse for continue requests and frontend handoff. |
| string | Identifies this search session for pagination. Reuse for continue requests. |
| array | objects. May be empty (valid on continue). |
| boolean | The only pagination signal. = more results available via continue. |
Each
products[] entry:
| Field | Type | Description |
|---|---|---|
| string | Product title/description. |
| string or null | Brand name if known. |
| string | Opaque product identifier (format: ). Preserve exactly for calls and frontend handoff. |
| number or null | Price in dollars. |
| number or null | Star rating (e.g., 4.6). |
| integer or null | Number of customer reviews. |
| string | Human-readable rationale for the fit grade. May be empty. |
| string | Canonical fit label. One of: , , , . |
Match Grade Semantics
| Grade | Meaning |
|---|---|
| Excellent | All user requirements confirmed by evidence. All numeric constraints pass. |
| Good | All critical requirements confirmed, none contraindicated. Constraints pass or pass within tolerance. |
| Partial | At least one critical requirement is unconfirmed, missing, or contraindicated, OR some numeric constraints fail. |
| Low | Any requirement is contraindicated, OR no requirements could be evaluated. |
Product Endpoint — Deep Analysis
Request
{ "location": "product/<cache_key>" }
Use only a
location value returned by /api/agents/search. Never invent locations. Request model uses extra = "forbid".
Response
| Field | Type | Description |
|---|---|---|
| object | Failure Mode and Effects Analysis. See structure below. |
| string | Paragraph summarizing key product features. |
| string | Paragraph synthesizing themes from customer reviews. |
FMEA Structure
The
fmea object describes how a product is likely to disappoint a buyer over time, framed as failure modes rather than feature ratings.
— array, typically 3 entries, ordered by expected regret impact (likelihood x impact x immediacy):unmitigated_failure_modes
| Field | Type | Possible Values |
|---|---|---|
| string | Concise description of what goes wrong. |
| string | , , |
| string | Product-specific probability rationale with expected incidence. |
| string | , , , |
| string | , , |
| string | 1–2 sentences on real-use customer impact. |
| string[] | Concrete cues from listing, specs, or images. |
— array, 0–3 entries: common category failures that the product's design intentionally addresses.mitigated_failure_modes
| Field | Type | Description |
|---|---|---|
| string | The common failure that is unlikely here. |
| string | Short positive reframe (max ~6 words, e.g., "Long cord with easy rewind"). |
| string | What design choices reduce this risk. |
| string[] | Concrete cues from listing. |
— string: A calm, informed paragraph synthesizing dominant risks, design priorities, disappointment timeline, fixability, and who the product is likely to satisfy vs. frustrate.quality_summary
Error Handling
| Status | Endpoint | Cause | Suggested Action |
|---|---|---|---|
| | Invalid location format (empty, malformed, or contains path separators). | Verify the location was copied verbatim from a search result. |
| (continue) | not found or expired from cache. | Start a new search with . |
| | Product cache key or destination not found. May have expired. | Re-run search to get a fresh location. |
| Both | Schema validation failure: missing required field, wrong type, or extra key present. | Fix request body. All request models use . |
| Both | Unhandled internal error. | Retry once with backoff. If persistent, report as a service issue. |
| | Search backend did not return a final result, or returned an invalid payload. | Retry once. If persistent, the upstream search service may be degraded. |
Safety Rules
- Send JSON request bodies only.
- Never include extra fields — all request models use
and will reject unknown keys withextra = "forbid"
.422 - Never invent product locations. Only use
values returned bylocation
./api/agents/search - Preserve
,conversation_id
, andlogical_search_id
exactly as returned. Do not trim, modify, or regenerate.product.location - For
, omittype: "new"
to let the server generate one.conversation_id - All endpoints use the base URL
.https://hiarthur.com/api
Frontend Handoff
- Open
in a browser to resume that conversation within a GUI.c/<conversation_id> - Open a returned product location in a browser to open the product information and see product images in a GUI.
- Keep all backend-derived IDs and locations unchanged during handoff URL construction.
Recommended Agent Usage Pattern
- Call
with/agents/search
.type: "new" - Inspect the returned
.products - If more candidates are needed, call
with/agents/search
.type: "continue" - When a specific product requires deeper analysis, call
./agents/product