code/shop-research/SKILL.md
Researches products across Amazon, Google Shopping, and relevant specialty sites using the Claude-in-Chrome browser extension. Finds candidates matching user-specified criteria (gift, gadget, gear, home goods, etc.), captures screenshots and key data per candidate, then generates a modern 2026 HTML report with pros/cons, review highlights, metrics, and recommendations. Saves each research session to its own semantically-named folder. Learns from user feedback over time — preferences, favored brands, budget style, and thumbs-up/down on past picks personalize future searches. Use when the user wants to shop for something, compare products, find a gift, or research purchases before buying.
npx skillsauth add mostafa-drz/claude-skills shop-researchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
On startup, use Read to load ~/.claude/skills/shop-research/preferences.md. If missing, treat as first-run (see First-time detection below).
Defaults when no preferences exist:
output-root: ~/Desktop/shop-research/ (confirmed on first run)default-sites: amazon, google-shoppingmax-candidates: 5currency: USDtone: friendly-cli (terse, direct, warm — not corporate)open-report: true (auto-open the HTML report when done)Also load ~/.claude/skills/shop-research/feedback-journal.md if present — it contains thumbs-up/down on past recommendations. Summarize its signal (e.g., "prefers minimal aesthetic", "avoids fast-fashion brands") and carry that into ranking.
On startup, use Bash to detect: today's date (date +%Y-%m-%d), and whether ~/Desktop/shop-research/ exists (ls or absence).
Check $ARGUMENTS:
help → show help, stopconfig → run config flow, stopreset → delete preferences + feedback journal, confirm, stopfeedback → collect thumbs-up/down on the most recent research (see Feedback section), stophistory → list recent research folders with titles and dates, stopsetup or preflight → run the Chrome extension setup/onboarding flow (see Setup section), stopshop-research — Product research across Amazon, Google & specialty sites with a 2026 HTML report
Usage:
/shop-research [what to find] Interactive research
/shop-research [...] --for <recipient> Who is this for? (e.g., "mom, loves gardening")
/shop-research [...] --budget <range> e.g., "under $50", "$100-200"
/shop-research [...] --sites <list> Override default sites (amazon,google,etsy,rei,...)
/shop-research [...] --max-candidates <N> How many finalists to include (default 5)
/shop-research [...] --notes <text> Extra criteria, preferences, exclusions
/shop-research config Set preferences
/shop-research reset Clear preferences + feedback journal
/shop-research feedback Rate the last research (teaches the skill)
/shop-research history List past research folders
/shop-research setup Walk through Chrome extension setup
/shop-research help This help
Examples:
/shop-research "birthday gift for my dad — loves woodworking, under $75"
/shop-research "standing desk" --budget "$300-600" --notes "manual crank ok, no glass tops"
/shop-research "running shoes" --for "me, neutral arch, marathon training" --sites amazon,rei
Output:
{output-root}/{YYYY-MM-DD}-{kebab-title}/
├── report.html ← modern 2026 single-file report (open in browser)
├── data.json ← structured data (products, reviews, scores)
├── candidates/
│ ├── {slug-1}/
│ │ ├── hero.png ← product image
│ │ ├── page.png ← screenshot of listing
│ │ └── notes.md
│ └── ...
└── sources.md ← all URLs visited + reasoning trail
Current preferences:
(loaded from preferences.md)
Use AskUserQuestion to collect:
~/Desktop/shop-research/)Save to ~/.claude/skills/shop-research/preferences.md in the format:
# /shop-research preferences
Updated: {date}
## Defaults
- output-root: {path}
- default-sites: {comma-list}
- max-candidates: {N}
- currency: {USD|EUR|...}
- amazon-tld: {com|co.uk|...}
- tone: {friendly-cli|detailed|minimal}
- exclusions: {free text}
## Profile (optional — the user can edit)
- Favored brands:
- Avoided brands:
- Aesthetic: (minimal, maximalist, vintage, etc.)
- Sustainability: (important / nice-to-have / not a factor)
- Gift-giving style: (practical / sentimental / experiential)
## Learned
- (auto-appended as patterns emerge)
After saving, confirm with a warm one-liner: "Saved. I'll remember these for next time — and I'll keep learning as you give feedback."
Delete both ~/.claude/skills/shop-research/preferences.md and ~/.claude/skills/shop-research/feedback-journal.md. Confirm: "All cleared. I'll start fresh on the next research."
If no preferences file exists, show a warm onboarding (not a blocker):
First time running /shop-research — quick intro:
I search Amazon, Google Shopping, and specialty sites in a real Chrome
window you control. For each research I create a folder on your Desktop
with screenshots, a data.json, and a single-file HTML report you can open
anywhere.
I get smarter over time. After each research you can run `/shop-research
feedback` to tell me what worked — I save that and factor it into future picks.
To browse the web, I need the Claude in Chrome extension. If you haven't
set it up yet, run: /shop-research setup
Otherwise, continue and I'll auto-check the connection.
Then proceed to Step 0 (preflight). After the first successful research, ask inline if they want to save any quick prefs (budget style, aesthetic, sustainability priority) — don't force the full config flow.
When invoked as /shop-research setup (or when Step 0 preflight fails and the user asks for help), walk through the Chrome extension setup. Reference: the official docs at https://code.claude.com/docs/en/chrome.
Before we go:
1. Browser Google Chrome or Microsoft Edge
(Brave, Arc, other Chromium browsers: not yet supported)
Windows WSL: not supported
2. Plan A direct Anthropic plan — Pro, Max, Team, or Enterprise
(Free tier and third-party providers like Bedrock/Vertex
don't have Chrome integration)
3. Claude Code Version 2.0.73 or higher
Check: claude --version
4. Extension "Claude" by Anthropic, version 1.0.36 or higher
Install:
https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn
After install, pin it via the puzzle-piece icon.
Use Bash to run claude --version and surface the result so the user knows where they stand.
Tell the user exactly what to type (they run these themselves — you can't run slash commands for them):
Next:
A. Inside Claude Code, type: /chrome
Select "Enable" — or "Enabled by default" to auto-enable every session.
B. To verify, type: /mcp
Look for "claude-in-chrome" in the list.
C. Site permissions are managed inside the Chrome extension itself
(click the extension icon → settings). At minimum, allow:
amazon.com, google.com, shopping.google.com
Plus any specialty sites you plan to search (etsy.com, rei.com, etc.)
If the user reports trouble, walk through in this order (from the official docs):
| Symptom | Fix |
|---|---|
| "Extension not detected" | Open chrome://extensions, confirm it's installed and enabled. Update if version < 1.0.36. |
| "Browser extension is not connected" | Restart Chrome and Claude Code, then run /chrome → "Reconnect extension". |
| Works once, then dies after a pause | Extension service worker went idle. Run /chrome → "Reconnect extension". |
| "Receiving end does not exist" | Same as above — reconnect. |
| "No tab available" | Ask Claude to create a new tab, then retry. |
| First-time connection fails | Restart Chrome — the native messaging host config is picked up on Chrome startup. |
Native messaging host config (only relevant if deeper troubleshooting needed):
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json~/Library/Application Support/Microsoft Edge/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json~/.config/google-chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.jsonOnce the user says they're set up, run the preflight (Step 0 below). If it passes, say:
Connection good. You're ready — try:
/shop-research "birthday gift for my dad — loves woodworking, under $75"
Before anything else, verify the Claude-in-Chrome extension is connected. Without it, the research can't run.
mcp__claude-in-chrome__tabs_context_mcp.Hmm — the Claude-in-Chrome extension isn't responding.
Common causes:
• Extension not installed → https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn
• Chrome integration not enabled in this session → run /chrome and select "Enable"
• Extension idle → run /chrome → "Reconnect extension"
• First time ever → restart Chrome once after enabling, then retry
Need the full walkthrough? Run: /shop-research setup
Then stop. Don't attempt the research without a working extension — it will only produce an empty folder.
One retry allowed: after showing the message, if the user replies "retry" or "try again", call tabs_context_mcp once more. If it still fails, route them to /shop-research setup.
Parse $ARGUMENTS for:
--flag (e.g., "birthday gift for my dad — woodworking")--for <recipient> — who it's for (include context about them)--budget <range> — budget constraint--sites <list> — override default sites--max-candidates <N> — override default candidate count--notes <text> — additional criteria or exclusionsIf what is missing or vague, ask ONE concise AskUserQuestion with 2-4 clarifying options (recipient, vibe, budget). Don't interrogate — pick the one clarification that most shapes the search.
If you have feedback-journal.md, mention in one line which past signal is shaping this: e.g., "Biasing toward [X] based on past thumbs-up."
Before opening the browser, draft a plan and show it:
Plan:
├── Query strategies: [2-3 search phrasings]
├── Sites: {default-sites or --sites override}
├── Shortlist target: {max-candidates} candidates
└── Scoring criteria: [3-5 factors derived from the ask]
Reply 'go' to start, or tweak any of the above.
Wait for confirmation (or a tweak). This is the only hard gate — keep it fast.
Generate a slug from the ask: {YYYY-MM-DD}-{kebab-summary-max-60chars}. Examples:
2026-04-18-dad-birthday-woodworking-under-752026-04-18-standing-desk-300-600mkdir -p {output-root}/{slug}/candidates
Clear policy: only the per-research folder is created fresh. Never delete sibling folders or anything outside {output-root}/{slug}/.
tabs_context_mcp first to see what tabs exist — never reuse a prior session's tab IDs.tabs_create_mcp as needed (Amazon search URL + Google Shopping URL to start).resize_window to a predictable viewport (e.g., 1440x900) for consistent screenshots.For each site in the plan:
https://www.amazon.com/s?k=<url-encoded-query>).javascript_tool: return an array of {title, url, price, rating, reviewCount, imageUrl} from the top results. Prefer structured extraction over raw get_page_text.javascript_tool to extract the main image URL, then curl -L -o {candidates}/{slug}/hero.png "<url>".javascript_tool to capture the visible viewport as PNG (via html2canvas loaded dynamically, or serialize as data-URL and decode with Bash). Save as {candidates}/{slug}/page.png. If capture fails, log and continue — the hero image alone is sufficient.{candidates}/{slug}/notes.md — one short file per candidate with all extracted fields.Cross-source reviews (optional, adds depth): for each finalist, run one WebSearch for "<product name>" review to surface independent reviews (Wirecutter, Reddit, YouTube summaries). Quote 1-2 excerpts in the report.
Graceful degradation: if a site blocks extraction, log the issue in sources.md and skip — don't abort the whole research.
Compute a composite score per candidate (0-100) from the scoring criteria. Produce:
Write data.json with the full structured data: candidates, scores, picks, sources, query metadata.
Generate a single self-contained report.html (no external JS dependencies — inline everything). Aesthetic targets:
prefers-color-scheme — CSS variables onlyStructure:
~/.claude/skills/shop-research/icon.svg at ~32px next to the H1 with color: var(--accent) so it themes with light/dark mode. The icon is the grid-pick mark — a 3×3 dot grid with one cell haloed, signaling "N candidates → one pick" which matches this skill's behavior./shop-research feedbackReference ~/.claude/skills/shop-research/reference/report-template.html if it exists (load on demand; otherwise generate from scratch following the aesthetic above).
sources.md — every URL visited + one-line rationale per decision.Done — {N} candidates researched in {duration}
Top pick: {title} → ${price}
Runner-up: {title}
Budget pick: {title}
Folder: {output-root}/{slug}/
Report: {output-root}/{slug}/report.html
Open it? (y/N) — or rate with: /shop-research feedback
If open-report: true, run open {output-root}/{slug}/report.html.
End with a soft prompt (not a blocker):
When you've had a look, run
/shop-research feedbackand tell me what worked. I'll keep getting sharper at your taste.
When invoked as /shop-research feedback:
{output-root}/.~/.claude/skills/shop-research/feedback-journal.md:## {research slug} — {date}
- Verdict: {yes/caveats/no}
- Weight more: {factors}
- Avoid: {free text}
- Signal extracted: {one-line generalization, e.g., "prefers quieter/minimal aesthetic over bold"}
## Learned section of preferences.md. Mention the promotion: "Noticed you consistently avoid X — saving that as a standing preference."The journal is human-editable. Respect whatever the user writes there directly.
{YYYY-MM-DD}-{kebab-summary} — 60 chars max in the summary half{kebab-product-short-name} — 40 chars max, derived from product title (not a counter)-2, -3 — if two candidates would collide, differentiate by brand or model numbertabs_context_mcp first; always create a new tab with tabs_create_mcp rather than reusing one from a prior sessionjavascript_tool returning clean JSON over dumping get_page_text. Smaller context, higher accuracydevelopment
--- name: triage-board description: >- Generates a structured triage artifact from the current conversation's findings — a self-contained Desktop folder with a JSON Schema, schema-conformant report.json, prose markdown, and a single-file HTML viewer. Viewer ships with MD / CSV / JSON download buttons in the header and a per-finding "Copy as Markdown" action that produces a GitHub/Linear/Notion-ready ticket block. Stateless — triage state lives in the user's ticket system, not in the
development
Runs a beginner-mind end-to-end UI audit of any running app — local dev server, staging, production, or a specific URL. Drives Chrome through every interactive element on the target surface, collects structured findings (severity, category, where, symptom, impact, repro, triage), and hands the result off to `/triage-board` which produces the Desktop folder (schema + JSON + Markdown + single-file HTML viewer with MD/CSV/JSON exports and a per-finding Copy as Markdown button). Use when you want fresh-eyes verification of a feature, page, modal, flow, branch, or whole app — before shipping, before review, before a demo, or any time the UI deserves a careful poke.
development
Reviews the user's past Claude Code conversations from a wellbeing perspective — sentiment, tone, emotional arc, recurring patterns — and generates a supportive, science-grounded report in both Markdown and HTML. Default lookback is 48 hours across all projects. Uses recognised emotion frameworks (Plutchik, Ekman, Russell's circumplex, Pennebaker linguistic markers) and cites the science behind every observation. Learns the user's baseline tone over time so future reports flag genuine shifts, not noise. Use when the user asks for an emotional/wellbeing recap, mood check, sentiment review, or wants to understand their own ups and downs across recent work sessions.
development
--- name: workflow-advisor description: >- Analyzes recent Claude Code conversations and local Claude state (skills, settings, memory files, CLAUDE.md), researches the latest Claude Code features and best practices online, and suggests one workflow improvement at a time with reasoning and a concrete action item. Can save accepted suggestions to memory for tracking. Use when you want to discover underused Claude Code features, improve your development workflow, stay current with the lat