Weekly competitive scan — searches ProductHunt, HN Show HN, and GitHub Trending for product launches matching the operator's startup idea backlog. Flags when someone ships an idea from the list.
Instal·la
npx skillscat add atrium-hermes/atrium-lighthouse/launch-radar Instal·la des del registre de SkillsCat.
${var} — Optional idea category filter (e.g. "crypto", "AI", "DeFi"). If empty, scans top-priority unexecuted ideas across all categories.
Today is ${today}. Read memory/MEMORY.md before starting. If soul/SOUL.md + soul/STYLE.md exist and are populated, read them to match the operator's voice; otherwise use a clear, direct, neutral tone.
Why this skill exists
Idea backlogs sit in memory/topics/startup-ideas.md. idea-validator screens them statically. idea-pipeline checks what the operator has shipped. Nothing checks what the market shipped this week. When someone launches in your idea territory, you want to know — so you can sharpen the angle, accelerate, or step aside. This closes that gap.
Steps
1. Load the idea backlog
Read memory/topics/startup-ideas.md. If it doesn't exist, log LAUNCH_RADAR_SKIP: no backlog at memory/topics/startup-ideas.md and stop.
Read memory/topics/startup-ideas-screened.md if it exists — extract ideas with viability >= 8 or date within last 60 days.
Build the priority list: up to 15 ideas ordered by (viability desc, recency desc). If ${var} is set, filter by category/domain match first.
For each idea, extract 2–3 search keywords (core noun + differentiator, e.g. "AI agent payments micropayments" or "coordination market reflexive prediction").
2. Scan for recent launches
For each idea in the priority list:
ProductHunt search:
WebSearch: "[keyword1] [keyword2] site:producthunt.com"HN Show HN search:
WebSearch: "Show HN [keyword1] [keyword2] site:news.ycombinator.com"You don't need to fetch every URL. Read the search snippet — title, visible traction (upvotes/points), and date from the result. That's enough to classify.
3. Score competitive signals
For each idea, classify based on what you found:
- active competition — launched in the last 60 days AND has 100+ upvotes/points → someone shipped this and it's getting traction
- prior art — launched > 60 days ago OR fewer than 50 upvotes/points → exists, no breakout signal
- open — no relevant match found on either platform
4. Update competitive intel file
Read memory/topics/startup-ideas-market.md (create if missing — empty file is fine).
This file persists scan results across runs. Upsert entries for ideas scanned this run — update existing entries, add new ones. Do not overwrite unrelated entries.
Format per entry:
## [Idea Name]
- **Last scanned:** ${today}
- **ProductHunt:** [product title / upvote count / launch date — or "none found"]
- **HN Show HN:** [title / points / date — or "none found"]
- **Signal:** active / prior art / open
- **Note:** [1 sentence on competitive posture]5. Write the report
Write to articles/launch-radar-${today}.md:
# Launch Radar — ${today}
**Ideas scanned:** N | **Active competition:** N | **Prior art:** N | **Open:** N
## Active Competition (Watch / Differentiate)
### [Idea Name]
**What shipped:** [product name] on [platform], [upvotes/points], [date]
**Posture:** [1–2 sentences — why this matters or doesn't]
**Call:** watch / differentiate (sharpen the angle, find a wedge they missed, or step aside)
### ...
## Prior Art (Exists, No Traction)
### [Idea Name]
**What exists:** [product name] on [platform], [upvotes/points], [date]
**Posture:** [why this is weak signal]
**Call:** still worth building / needs sharper angle
### ...
## Open (No Launches Found)
- [Idea Name] — [one-liner]
- ...
---
*Source: ProductHunt + HN Show HN search | Ideas from memory/topics/startup-ideas.md | Generated by launch-radar*6. Send notification
Write to .pending-notify-temp/launch-radar-${today}.md (create dir if needed), then:
mkdir -p .pending-notify-temp
./notify -f .pending-notify-temp/launch-radar-${today}.mdNotification format — match the operator's voice if soul files are populated, otherwise direct and neutral:
launch radar — ${today}
N ideas scanned. N with active competition. N still open.
active competition (watch / differentiate):
[for each: "• [idea name] — [product] launched [date], [N] upvotes"]
prior art (weak signal):
[for each: "• [idea name] — [product] exists, [N] upvotes [date]"]
still wide open:
[comma-separated or bullet list of idea names]Keep under 2500 chars. If nothing in "active competition", skip that section. If zero active competitions, the "still open" list is still worth sending — it's positive signal.
7. Log to memory/logs/${today}.md
Append:
## Launch Radar
- **Ideas scanned:** N
- **Active competition:** N (names if any)
- **Prior art:** N (names if any)
- **Open:** N
- **Market intel updated:** memory/topics/startup-ideas-market.md
- **Notification:** sent
- LAUNCH_RADAR_OKIf fewer than 2 ideas were found in the backlog: log LAUNCH_RADAR_SKIP: backlog empty or filtered to <2 ideas and stop without notifying.
Required Env Vars
None. All search via built-in WebSearch tool. Local file reads via Read tool. No curl, no prefetch script, no external auth.
Sandbox Note
All external search done via WebSearch (built-in Claude tool — bypasses GitHub Actions sandbox network restrictions). No curl or prefetch needed. gh CLI not required.