competitor-launch-radar
Competitor-Launch-Radar scans Product Hunt and Hacker News weekly for newly launched AI agent frameworks outside the nine tracked by ai-framework-watch, deduplicating against local state to surface market entrants before they gain momentum. Use this skill to close the blind spot between curated framework monitoring and real-time public launches, ensuring early awareness of competitive frameworks that might otherwise go unnoticed until weeks after their initial launch.
git clone --depth 1 https://github.com/aaronjmars/aeon /tmp/competitor-launch-radar && cp -r /tmp/competitor-launch-radar/skills/competitor-launch-radar ~/.claude/skills/competitor-launch-radarSKILL.md
> **${var}** — Optional. `dry-run` skips notify (state still updates and article still writes). Empty = normal run.
Today is ${today}. `ai-framework-watch` tracks momentum across a known 9-framework cohort (aeon anchor + langgraph/crewai/autogen/llamaindex/mastra/smolagents/dspy/pydantic-ai). That cohort is intentionally curated — but in 2026 a brand-new agent framework can post to Product Hunt, get 400 upvotes, hit the HN front page, and accumulate users before earning a single GitHub star. This skill is the radar for that blind spot: weekly Monday scan of Product Hunt RSS + HN Algolia for **new entrants** matching agent-framework keywords, filtered against the existing cohort and an LRU dedup state so each launch fires exactly once.
Read `memory/MEMORY.md` for context.
Read the last 8 days of `memory/logs/` to dedupe entrants already featured this week.
Read `soul/SOUL.md` + `soul/STYLE.md` if populated to match voice.
## Why this exists
`ai-framework-watch` answers "what did the known cohort ship this week?" — momentum, releases, breaking changes. It cannot answer "did a new framework just launch?" because the watchlist is hardcoded by design (drift erodes week-over-week comparability). Without a second skill watching the public-launch surfaces, the operator only learns about a new entrant when it crosses into their Twitter feed weeks later. By that point the framework already has stars, integrations, and momentum the operator could have engaged earlier.
This skill closes the gap with a single weekly anchor — Monday 10:00 UTC, one digest, gated on signal — so new entrants surface the week they launch.
## Inputs
| Source | Purpose | Auth |
|--------|---------|------|
| `https://www.producthunt.com/feed` | Product Hunt RSS — all-categories feed, top daily launches | None (public RSS) |
| `https://hn.algolia.com/api/v1/search?tags=show_hn&query={kw}&hitsPerPage=50` | Hacker News Algolia API — Show HN and story search | None (keyless) |
| `memory/topics/competitor-launch-radar-state.json` | LRU dedup state — already-announced entrants | Local file |
No new secrets. Both data sources are public, keyless HTTP. Sandbox fallback: WebFetch (see Sandbox note).
Writes:
- `memory/topics/competitor-launch-radar-state.json` — LRU 200-entry `announced` array
- `articles/competitor-launch-radar-${today}.md` — digest article on non-QUIET runs
- `memory/logs/${today}.md` — one log block per run, even on QUIET
- Notification via `./notify` — only when a gate fires
## Watchlist suppression (already-known cohort)
Skip any candidate whose URL or text contains one of these slugs (case-insensitive substring match). These are tracked by `ai-framework-watch` already and are not "new entrants" by definition:
```
langgraph
crewai
autogen
llamaindex
mastra
smolagents
dspy
pydantic-ai
aeon
```
The suppression is structural: a Product Hunt post titled "LangGraph Studio v2" is not a new entrant, it's a known peer's product launch — `ai-framework-watch` will surface it via the release scan. Likewise an HN Show HN that mentions `crewai` in the title or URL is filtered out here.
## Keyword match list
Case-insensitive substring on title + tagline + description. Any one match qualifies a candidate (subject to suppression + noise floor + dedup):
```
agent framework
autonomous agent
agentic
multi-agent
mcp server
mcp client
ai agent
claude agent
llm agent
```
These are intentionally broad: the goal is high recall on the inbound side; classification (step 5) and dedup (step 6) do the precision work.
## Classification taxonomy
Each surviving match gets exactly one classification:
| Class | Heuristic | Meaning |
|-------|-----------|---------|
| `framework` | Description/tagline contains "framework", "library", "SDK", or the name matches the `agent-{x}`/`{x}-agent` pattern indicating a framework offering | Direct competitor to the cohort — the highest-signal class |
| `mcp` | Title/description mentions "MCP" or "model context protocol" | MCP server or tool — adjacent ecosystem, often a building block rather than competitor |
| `product` | None of the above, but a keyword matched | Agent-powered downstream product (e.g. an "AI agent for sales") |
Apply classes in order: `framework` wins over `mcp` wins over `product`. A candidate matching both "framework" and "MCP" is classed `framework` because the framework framing is the higher-signal one for the operator.
## State schema
`memory/topics/competitor-launch-radar-state.json`:
```json
{
"last_run": "2026-05-18",
"last_status": "COMPETITOR_LAUNCH_RADAR_OK",
"announced": [
{
"id": "ph:some-product-slug",
"name": "Some Product",
"url": "https://www.producthunt.com/posts/some-product-slug",
"class": "framework",
"score": 412,
"source": "producthunt",
"announced_at": "2026-05-18"
},
{
"id": "hn:39812345",
"name": "Show HN: foo-agent — a minimal agent framework",
"url": "https://news.ycombinator.com/item?id=39812345",
"class": "framework",
"score": 87,
"source": "hackernews",
"announced_at": "2026-05-18"
}
]
}
```
Key invariants:
- `id` is the canonical dedup key: `ph:{slug}` (extracted from `/posts/{slug}` URL) or `hn:{objectID}` (Algolia `objectID`).
- LRU cap: 200 entries. When the cap is hit, drop the oldest by `announced_at`. 200 entries × ~1 framework launch/week real-world rate ≈ 4 years of headroom; the cap is a guard, not an active rotation knob.
- Once an `id` is in `announced`, the entrant is suppressed forever (until manually evicted from state).
## Steps
### 0. Bootstrap
```bash
mkdir -p memory/topics articles
[ -f memory/topics/competitor-launch-radar-state.json ] || cat > memory/topics/competitor-launch-radar-state.json <<'EOF'
{"last_run":null,"last_status":null,"announced":[]}
EOF
```
If `jq empty memory/topics/competitor-launch-radar-state.json` fails (corrupt JSON from a prior aborted write), back the file up to `.bak`, reset toMention/keyword sweep on social platforms for [REPLACE: KEYWORDS] — trends, sentiment, top posts
5 concrete real-life actions, leverage-scored against open loops with specificity and anti-fluff gates
Curated AI-agent tweets, clustered into narratives with insight summaries
Tracker of AI agent substitution signals — which roles, companies, and industries show real headcount displacement. Named roles + real deployments only.
Competitive-intelligence digest on the AI agent framework space — momentum, releases, breaking changes across a curated watchlist
Cross-domain market pulse from AIXBT's free grounding endpoint — crypto, macro, tradfi, geopolitics. Refreshes taxonomy references (clusters, chains) as a bonus.
Pre-batch API provider health check — detects credit exhaustion or auth failure for every configured provider key before the scheduled batch runs, giving the operator a window to act before skills degrade
List a wallet's live ERC-20 token approvals on Base and flag unlimited / risky spender grants. Keyless via Base RPC (eth_getLogs + eth_call) — no explorer key needed.