blog-cover-image-cli
Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search…
Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.
$ npx -y skills add Varnan-Tech/opendirectory --skill app-store-review-arbitrage --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/app-store-review-arbitrageContext preview
The summary Claude sees to decide when to auto-load this skill.
Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.
name: app-store-review-arbitrage description: "Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities." version: 1.0.0 compatibility: [claude-code, gemini-cli, github-copilot]
Convert a competitor's App Store or Google Play URL into a one-session GTM brief: ranked complaint clusters, a broken promise map, landing page headlines, and ad copy directions — all sourced from verbatim reviews.
---
These rules apply throughout all steps. Violating any of them fails Self-QA (Step 6).
1. **Every quote must be verbatim.** No paraphrase, no grammar correction, no cleaning. Exact reviewer words only. 2. **No fabricated statistics.** Do not write "40% faster" or "2× more reliable" unless a reviewer explicitly used similar language. The Self-QA step checks for uncited percentages. 3. **Cluster names must use reviewer language.** Study the anti-pattern table in Step 3. 4. **Every headline and ad copy direction must cite its source cluster.** Format: `[cluster: "cluster-name"]`. 5. **Section 2 is always present** in the output — even when degraded. Never skip or omit it. 6. **No banned words** in any generated copy: powerful, robust, seamless, innovative, game-changing, streamline, leverage, revolutionize, transform.
---
Accept a natural language prompt containing one app URL. Extract the URL.
**Platform detection:**
**ID extraction (do this before calling the script):**
| Platform | What to extract | How | |---|---|---| | App Store | Numeric `app_id` | Digits after `/id` in the URL | | App Store | `country` | 2-letter code after `apps.apple.com/` (e.g., `us`, `gb`) | | Google Play | `package_name` | Value of `id=` query parameter |
Persist the extracted values — you will need them for the output filename in Step 7.
If `product_context` was provided in the user's prompt (what their own product does), store it — used to personalise copy in Step 5.
---
Run the full fetch script:
python3 scripts/fetch_reviews.py "{app_url}" --output {tmpdir}/asr-raw.json*(Note: Replace `{tmpdir}` with your operating system's temp directory, e.g., `/tmp` on macOS/Linux or `C:\Temp` on Windows).*
This fetches both the store description metadata and the reviews.
If the script fails, read the error from stderr. Common causes:
The script will print collection progress to stderr. Wait for it to complete. After completion, read `{tmpdir}/asr-raw.json` and display the collection summary to the user:
✓ Collected [N] reviews ([N] low-star 1–3★) from [platform] Date range: [oldest] to [newest] Package: [iTunes API | google-play-scraper]
**Check the exit code:**
**Gate 1 — Low signal stop:** If the script exits with code 2, read the `gate_message` from `{tmpdir}/asr-raw.json` and surface it to the user verbatim. Do not proceed to Step 3. Do not produce a partial brief.
---
Load `low_star_reviews` from `{tmpdir}/asr-raw.json`.
Cluster all low-star reviews into **4–6 named complaint themes.** Apply this formula to score each review:
complaint_weight = (4 - rating) × recency_factor recency_factor: review age ≤ 90 days → 1.0 review age 91–365 days → 0.7 review age > 365 days → 0.4
`review age` = (today's date) − (review `date` field) in days.
`cluster_score` = sum of `complaint_weight` for all reviews in the cluster.
**Cluster naming — critical rule:**
You will want to write abstract names. Resist. Use the exact verb and noun from reviews.
| ❌ Abstracted (wrong) | ✅ Reviewer language (correct) | |---|---| | "Stability issues" | "Crashes when exporting to PDF" | | "Sync problems" | "Data lost after sync between phone and desktop" | | "Monetisation friction" | "Paywall appears after 3 days, not 14 as promised" | | "Performance degradation" | "App freezes every time I search" | | "Onboarding issues" | "Can't figure out how to invite a teammate" |
**Rules:**
**Gate 2 — Minimum cluster size:** After discarding sub-3-review clusters, check how many clusters remain.
**Gate 3 — Low-confidence flag:** If fewer than 3 clusters remain:
> ⚠ **LOW CONFIDENCE:** Only [N] complaint cluster(s) met the minimum evidence threshold (≥ 3 supporting reviews). Output reflects limited data. Consider a competitor with more reviews, or broaden the rating filter.
**Tier c
AI Agent Skills built for Founders who hate Marketing
Repo: Varnan-Tech/opendirectory
Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search…
World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming…
Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing…
Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source…
Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.
Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities),…