Atrium-Hermes

launch-radar

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.

Atrium-Hermes 0 Actualitzat fa 4 mesos
GitHub

Instal·la

npx skillscat add atrium-hermes/atrium-lighthouse/launch-radar

Instal·la des del registre de SkillsCat.

SKILL.md

${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}.md

Notification 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_OK

If 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.