Creator · Varnan-Tech
Last updated · Sep 5, 2026
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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach
Creator · Varnan-Tech
Last updated · Sep 5, 2026
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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach
Creator · Varnan-Tech
Last updated · Sep 5, 2026
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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach
Creator · Varnan-Tech
Last updated · Sep 5, 2026
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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach
Do not auto-install
Install targets
Codex install prompt
Install the "competitor-pr-finder" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/competitor-pr-finder. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: 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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"varnan-tech-competitor-pr-finder","task":"Install competitor-pr-finder","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Deep research, source comparison, literature review, RAG, knowledge search, and reports.
Scenario
Research agents
I need my agent to research a topic, compare sources, and produce a concise report.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Maintenance
fresh
21d since push
Risk
Risky
Dependency or permission surface needs review
GitHub quality
635
75/100 Quality · 66/100 Trust
Coverage tags
Review notes
Dependency or permission surface needs review · Permission surface may require sandboxing
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
StrongSolid option that is likely worth shortlisting for production workflows.
Trust
Do not auto-installTrust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
Audit
RiskyA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Choose a stronger alternative or inspect the source manually before any install attempt.
Stars
635 GitHub stars
Repo activity
635 stars, 68 forks
Maintenance
21d since push
License
MIT
Install
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finderDo not use when
Alternative
1.9K Stars
npx skills add yanliudesign/mono-color-skill --skill mono-color
Alternative
61.0K Stars
npx skills add mvanhorn/last30days-skill -g
Alternative
38.4K Stars
npx skills add Imbad0202/academic-research-skills
Alternative
28.0K Stars
npx skills add assafelovic/gpt-researcher
Agent safety v2
This skill should not be selected by an agent without explicit human security review.
Do not auto-install. Inspect the source, dependencies, and permission surface first.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
high
Skill metadata references credentials, tokens, environment variables, or secret-bearing workflows.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/varnan-tech-competitor-pr-finder/install
Agent should check
Copy prompt
Task: Use competitor-pr-finder in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/varnan-tech-competitor-pr-finder/install
Install command: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/varnan-tech-competitor-pr-finder/install
LLM text format
/api/skills/varnan-tech-competitor-pr-finder/install?format=text
Find alternatives
/api/skills/search?q=competitor-pr-finder&limit=3
Agent prompt
Use competitor-pr-finder for this task. Review https://www.openagentskill.com/api/skills/varnan-tech-competitor-pr-finder/install, then install with: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finderRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/varnan-tech-competitor-pr-finder
LLM text
/api/registry/manifest/varnan-tech-competitor-pr-finder?format=text
Install alias
/api/registry/install/varnan-tech-competitor-pr-finder
Recommend
/api/registry/recommend?task=Use%20competitor-pr-finder%20in%20an%20agent%20workflow&limit=3
Agent fit
Research agents
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Use this as a leading candidate, then validate the README and install path in your own agent stack.
Role in stack
Primary pick
Primary fit
Research agents
Trust label
Production-ready
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Trust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
GitHub adoption
INFO635 GitHub stars
Stars/forks activity
INFO635 stars, 68 forks; issue activity unavailable in current metadata
Recent maintenance
PASS21d since push
License clarity
PASSMIT
Good signals
Review before install
Recommended action
Choose a stronger alternative or inspect the source manually before any install attempt.
Quality profile
Solid option that is likely worth shortlisting for production workflows.
Workflow fit
Investigate faster
I need my agent to research a topic, compare sources, and produce a concise report.
Collect structured data
I need my agent to scrape websites and extract structured data from pages.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Workflow fit
Find, compare, and synthesize
A workflow for agents that gather sources, compare claims, summarize long material, and draft useful research briefs.
Scrape, clean, and reuse web data
A practical workflow for agents that crawl public pages, extract clean content, normalize data, and hand it to downstream research or RAG workflows.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Alternative shortlist
Similar skills that may fit this task.
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
Academic Research Skills for Claude Code: research → write → review → revise → finalize
Run autonomous deep research over web and local sources
--- name: competitor-pr-finder description: '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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.' compatibility: [claude-code, gemini-cli, github-copilot] ---
# Competitor PR Finder
Give it your product URL. It finds your competitors, researches every PR channel they used (news, podcasts, communities), surfaces the channels that appear across multiple competitors (your proven targets), finds the journalist or host for each, and drafts a personalized cold pitch for your product at every tier-1 channel.
---
**Zero-hallucination policy:** Every channel, journalist name, story angle, and pitch detail in the output must trace to a specific Tavily search result or the fetched product page. This applies to: - Competitor names: must appear in Tavily search results, not AI training knowledge - Channel names: must have a URL in the search results - Journalist/host names: must appear verbatim in a Tavily snippet - Story angles: extracted from article/episode titles in search results only - Pitch drafts: reference specific evidence from search data + product analysis
---
## Common Mistakes
| The agent will want to... | Why that's wrong | |---|---| | Name a journalist from training knowledge | Every journalist name must trace to a search result snippet. Writing "Sarah Perez covers startups at TechCrunch" from memory is hallucination. | | List channels without evidence URLs | Every channel in the output must have at least one URL from the PR search results proving a competitor was featured there. | | Skip the competitor confirmation step | Always show discovered competitors and wait for the user to confirm. Wrong competitors = wasted searches and a useless output. | | Generate generic pitches ("We'd love to be featured") | Every pitch must reference a specific angle from the evidence AND a specific differentiator from the product analysis. | | Mark a channel as Tier 1 with only 1 competitor occurrence | Tier 1 = 3+ competitors. Tier 2 = exactly 2. Tier 3 = 1. Do not promote channels that haven't proven themselves. | | Use em dashes in output | Replace all em dashes (--) with hyphens. |
---
## Read Reference Files Before Each Run
```bash cat references/pr-channel-types.md cat references/pitch-guide.md cat references/tier-scoring.md ```
---
## Step 1: Setup Check
```bash echo "TAVILY_API_KEY: ${TAVILY_API_KEY:+set}${TAVILY_API_KEY:-NOT SET -- required}" echo "FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:+set}${FIRECRAWL_API_KEY:-not set, Tavily extract will be used as fallback}" ```
**If TAVILY_API_KEY is missing:** Stop immediately. Tell the user: "TAVILY_API_KEY is required to research competitors and find PR coverage. There is no fallback. Get it at app.tavily.com -- free tier: 1000 credits/month (about 43 full runs at ~23 searches/run). Add it to your .env file."
**If only FIRECRAWL_API_KEY is missing:** Continue. Tavily extract will be used for the URL fetch.
---
## Step 2: Parse Input
Collect from the conversation: - `product_url`: the URL to fetch (required, unless user pastes a description directly) - `product_name`: optional, derived from page if not provided - `geography`: optional -- US / Europe / global. Default: US
**If the user provides only a pasted description (no URL):** Skip Steps 3 and 4. Go directly to Step 4 (product analysis) using the pasted text as `product_content`. Set `page_source` to `user_description` and note in `data_quality_flags`.
**If neither URL nor description:** Ask: "What is the URL of your product or startup? Or paste a short description: what it does, who it is for, and what makes it different from competitors."
Derive product slug:
```bash PRODUCT_SLUG=$(python3 -c " from urllib.parse import urlparse import sys url = 'URL_HERE' if url.startswith('http'): host = urlparse(url).netloc.replace('www.', '') print(host.split('.')[0]) else: import re print(re.sub(r'[^a-z0-9]', '-', url[:30].lower()).strip('-')) ") echo "Product slug: $PRODUCT_SLUG" ```
---
## Step 3: Fetch Product Page
**Primary: Firecrawl (if FIRECRAWL_API_KEY is set)**
```bash curl -s -X POST https://api.firecrawl.dev/v1/scrape \ -H "Authorization: Bearer $FIRECRAWL_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "URL_HERE", "formats": ["markdown"], "onlyMainContent": true}' \ | python3 -c " import sys, json d = json.load(sys.stdin) content = d.get('data', {}).get('markdown', '') or d.get('markdown', '') print(f'Fetched via Firecrawl: {len(content)} characters') open('/tmp/cprf-product-raw.md', 'w').write(content) " ```
**Fallback: Tavily extract (if FIRECRAWL_API_KEY is not set)**
```bash curl -s -X POST https://api.tavily.com/extract \ -H "Content-Type: application/json" \ -d "{\"api_key\": \"$TAVILY_API_KEY\", \"urls\": [\"URL_HERE\"]}" \ | python3 -c " import sys, json d = json.load(sys.stdin) content = d.get('results', [{}])[0].get('raw_content', '') print(f'Fetched via Tavily extract: {len(content)} characters') open('/tmp/cprf-product-raw.md', 'w').write(content) " ```
**Checkpoint:**
```bash python3 -c " content = open('/tmp/cprf-product-raw.md').read() if len(content) < 200: print('ERROR: fewer than 200 characters fetched') else: print(f'Content OK: {len(content)} characters') " ```
**If content < 200 characters:** Stop fetching. Tell the user: "The product page returned no readable content -- the site is likely JavaScript-rendered and blocked the fetch. Please paste a short description directly: what it does, who it is for, and what makes it different."
---
## Step 4: Product Analysis (AI)
Print page content:
```bash python3 -c " content = open('/tmp/cprf-product-raw.md').read()[:5000] print('=== PRODUCT PAGE (first 5000 chars) ===') print(content) " ```
**AI instructions:** Analyze the product page above and extract:
- `product_name`: the product or company name - `one_line_description`: what it does, for whom, core value prop. Under 20 words. No marketing language. Example: "CI/CD automation for developer teams that self-host their pipelines." - `industry_taxonomy`: `l1` (top-level: e.g. developer tools / fintech / healthtech / consumer), `l2` (sector: e.g. devops / payments / telemedicine), `l3` (specific niche: e.g. CI/CD automation / embedded payments / async video consultation). Vague labels like "technology" alone are not acceptable. - `differentiators`: exactly 2-3 specific things that distinguish this product from generic competitors. These feed directly into the pitch drafts -- be specific. Example: ["Self-hosted pipeline runner -- no data leaves your infra", "Native support for monorepos with dynamic step generation"] - `icp`: `buyer_persona` (job title), `company_type`, `company_size` - `geography_bias`: US / Europe / global / unclear - `page_source`: "live_page" or "user_description"
Write to `/tmp/cprf-product-analysis.json`:
```bash python3 << 'PYEOF' import json
analysis = { # FILL from your analysis above "product_name": "", "one_line_description": "", "industry_taxonomy": {"l1": "", "l2": "", "l3": ""}, "differentiators": [], "icp": {"buyer_persona": "", "company_type": "", "company_size": ""}, "geography_bias": "US", "page_source": "live_page" }
json.dump(analysis, open('/tmp/cprf-product-analysis.json', 'w'), indent=2) print('Product analysis written.') PYEOF ```
Verify:
```bash python3 -c " import json a = json.load(open('/tmp/cprf-product-analysis.json')) print('Product:', a['product_name']) print('Industry:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3']) print('Differentiators:') for d in a['differentiators']: print(f' - {d}') " ```
---
## Step 4b: Phase 1 -- Competitor Discovery
```bash ls scripts/research.py 2>/dev/null && echo "script found" || echo "ERROR: scripts/research.py not found -- cannot continue" ```
```bash python3 scripts/research.py \ --phase discover \ --product-analysis /tmp/cprf-product-analysis.json \ --tavily-key "$TAVILY_API_KEY" \ --output /tmp/cprf-competitors-raw.json ```
Print results for AI review:
```bash python3 -c " import json data = json.load(open('/tmp/cprf-competitors-raw.json')) print(f'Searches run: {len(data[\"competitor_searches\"])}') for s in data['competitor_searches']: print(f'\nQuery: {s[\"query\"]}') print(f'Answer: {s.get(\"answer\",\"\")[:400]}') for r in s.get('results', [])[:5]: print(f' - {r[\"title\"]} | {r[\"url\"]}') print(f' {r.get(\"content\",\"\")[:200]}') " ```
**AI instructions:** Read the search results above. Pick exactly 5 competitor companies that: 1. Are named in the search result titles, answers, or snippets 2. Are in the same L3 niche as the product being analyzed 3. Are actual competing products (not agencies, consultancies, or list articles) 4. Are distinct from each other (not the same company under different names)
For each competitor write: `name`, `url` (from the search result where they appeared), `description` (one sentence from snippet), `source_url` (the search result URL where they were found).
---
## Step 5: Competitor Confirmation
**Show the discovered competitors to the user:**
```bash python3 << 'PYEOF' import json
analysis = json.load(open('/tmp/cprf-product-analysis.json'))
# FILL: 5 competitors from the search results above candidates = [ # {"name": str, "url": str, "description": str, "source_url": str} ]
print(f"\nFound 5 competitors for {analysis['product_name']} in {analysis['industry_taxonomy']['l3']}:\n") for i, c in enumerate(candidates, 1): print(f" {i}. {c['name']} -- {c['description']}") print(f" {c['url']}")
data = json.load(open('/tmp/cprf-competitors-raw.json')) data['competitor_candidates'] = candidates json.dump(data, open('/tmp/cprf-competitors-raw.json', 'w'), indent=2) PYEOF ```
Tell the user: "These are the 5 competitors I'll research for PR coverage. Add, remove, or swap any -- or say 'looks good' to continue."
**Wait for confirmation.** If the user edits the list (adds/removes/swaps), update the candidates accordingly. Then write the confirmed list:
```bash python3 << 'PYEOF' import json
# FILL: confirmed competitor list (after user review) confirmed = [ # {"name": str, "url": str} ]
json.dump({"confirmed_competitors": confirmed}, open('/tmp/cprf-competitors-confirmed.json', 'w'), indent=2) print(f"Confirmed {len(confirmed)} competitors for PR research.") for c in confirmed: print(f" - {c['name']} ({c['url']})") PYEOF ```
---
## Step 6: Three-Track PR Research (Phase 2)
```bash python3 scripts/research.py \ --phase pr-research \ --competitors /tmp/cprf-competitors-confirmed.json \ --product-analysis /tmp/cprf-product-analysis.json \ --tavily-key "$TAVILY_API_KEY" \ --output /tmp/cprf-pr-raw.json ```
This runs 3 searches per competitor (15 total): - **Track A (Editorial):** `"[competitor]" featured press coverage TechCrunch Forbes Wired article interview` - **Track B (Podcasts):** `"[competitor]" founder CEO podcast interview appeared on episode` - **Track C (Communities):** `"[competitor]" site:reddit.com OR site:news.ycombinator.com OR site:producthunt.com`
Print coverage summary:
```bash python3 -c " import json data = json.load(open('/tmp/cprf-pr-raw.json')) print(f'Competitors researched: {data[\"competitors_researched\"]}') print() for r in data['results']: print(f'{r[\"competitor\"]}:') for track, tdata in r['tracks'].items(): n = len(tdata.get('results'
Source provenance
Decision snapshot
635 GitHub stars
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for competitor-pr-finder, ready for a manual X post.
competitor-pr-finder: Give it your product URL or description. It finds your top 5 competitors, runs three-track PR... 635 stars https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=x
Listing + install path for competitor-pr-finder: https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=x Install: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to Varnan-Tech but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder/audit)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)Varnan-Tech
@varnan-tech
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Do not auto-install
mono-color
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
1.9K StarsLast30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
61.0K StarsAcademic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
38.4K StarsGPT Researcher
Run autonomous deep research over web and local sources
28.0K StarsDo not auto-install
Install targets
Codex install prompt
Install the "competitor-pr-finder" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/competitor-pr-finder. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: 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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"varnan-tech-competitor-pr-finder","task":"Install competitor-pr-finder","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Deep research, source comparison, literature review, RAG, knowledge search, and reports.
Scenario
Research agents
I need my agent to research a topic, compare sources, and produce a concise report.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Maintenance
fresh
21d since push
Risk
Risky
Dependency or permission surface needs review
GitHub quality
635
75/100 Quality · 66/100 Trust
Coverage tags
Review notes
Dependency or permission surface needs review · Permission surface may require sandboxing
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
StrongSolid option that is likely worth shortlisting for production workflows.
Trust
Do not auto-installTrust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
Audit
RiskyA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Choose a stronger alternative or inspect the source manually before any install attempt.
Stars
635 GitHub stars
Repo activity
635 stars, 68 forks
Maintenance
21d since push
License
MIT
Install
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finderDo not use when
Alternative
1.9K Stars
npx skills add yanliudesign/mono-color-skill --skill mono-color
Alternative
61.0K Stars
npx skills add mvanhorn/last30days-skill -g
Alternative
38.4K Stars
npx skills add Imbad0202/academic-research-skills
Alternative
28.0K Stars
npx skills add assafelovic/gpt-researcher
Agent safety v2
This skill should not be selected by an agent without explicit human security review.
Do not auto-install. Inspect the source, dependencies, and permission surface first.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
high
Skill metadata references credentials, tokens, environment variables, or secret-bearing workflows.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/varnan-tech-competitor-pr-finder/install
Agent should check
Copy prompt
Task: Use competitor-pr-finder in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/varnan-tech-competitor-pr-finder/install
Install command: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/varnan-tech-competitor-pr-finder/install
LLM text format
/api/skills/varnan-tech-competitor-pr-finder/install?format=text
Find alternatives
/api/skills/search?q=competitor-pr-finder&limit=3
Agent prompt
Use competitor-pr-finder for this task. Review https://www.openagentskill.com/api/skills/varnan-tech-competitor-pr-finder/install, then install with: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finderRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/varnan-tech-competitor-pr-finder
LLM text
/api/registry/manifest/varnan-tech-competitor-pr-finder?format=text
Install alias
/api/registry/install/varnan-tech-competitor-pr-finder
Recommend
/api/registry/recommend?task=Use%20competitor-pr-finder%20in%20an%20agent%20workflow&limit=3
Agent fit
Research agents
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Use this as a leading candidate, then validate the README and install path in your own agent stack.
Role in stack
Primary pick
Primary fit
Research agents
Trust label
Production-ready
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Trust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
GitHub adoption
INFO635 GitHub stars
Stars/forks activity
INFO635 stars, 68 forks; issue activity unavailable in current metadata
Recent maintenance
PASS21d since push
License clarity
PASSMIT
Good signals
Review before install
Recommended action
Choose a stronger alternative or inspect the source manually before any install attempt.
Quality profile
Solid option that is likely worth shortlisting for production workflows.
Workflow fit
Investigate faster
I need my agent to research a topic, compare sources, and produce a concise report.
Collect structured data
I need my agent to scrape websites and extract structured data from pages.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Workflow fit
Find, compare, and synthesize
A workflow for agents that gather sources, compare claims, summarize long material, and draft useful research briefs.
Scrape, clean, and reuse web data
A practical workflow for agents that crawl public pages, extract clean content, normalize data, and hand it to downstream research or RAG workflows.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Alternative shortlist
Similar skills that may fit this task.
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
Academic Research Skills for Claude Code: research → write → review → revise → finalize
Run autonomous deep research over web and local sources
--- name: competitor-pr-finder description: '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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.' compatibility: [claude-code, gemini-cli, github-copilot] ---
# Competitor PR Finder
Give it your product URL. It finds your competitors, researches every PR channel they used (news, podcasts, communities), surfaces the channels that appear across multiple competitors (your proven targets), finds the journalist or host for each, and drafts a personalized cold pitch for your product at every tier-1 channel.
---
**Zero-hallucination policy:** Every channel, journalist name, story angle, and pitch detail in the output must trace to a specific Tavily search result or the fetched product page. This applies to: - Competitor names: must appear in Tavily search results, not AI training knowledge - Channel names: must have a URL in the search results - Journalist/host names: must appear verbatim in a Tavily snippet - Story angles: extracted from article/episode titles in search results only - Pitch drafts: reference specific evidence from search data + product analysis
---
## Common Mistakes
| The agent will want to... | Why that's wrong | |---|---| | Name a journalist from training knowledge | Every journalist name must trace to a search result snippet. Writing "Sarah Perez covers startups at TechCrunch" from memory is hallucination. | | List channels without evidence URLs | Every channel in the output must have at least one URL from the PR search results proving a competitor was featured there. | | Skip the competitor confirmation step | Always show discovered competitors and wait for the user to confirm. Wrong competitors = wasted searches and a useless output. | | Generate generic pitches ("We'd love to be featured") | Every pitch must reference a specific angle from the evidence AND a specific differentiator from the product analysis. | | Mark a channel as Tier 1 with only 1 competitor occurrence | Tier 1 = 3+ competitors. Tier 2 = exactly 2. Tier 3 = 1. Do not promote channels that haven't proven themselves. | | Use em dashes in output | Replace all em dashes (--) with hyphens. |
---
## Read Reference Files Before Each Run
```bash cat references/pr-channel-types.md cat references/pitch-guide.md cat references/tier-scoring.md ```
---
## Step 1: Setup Check
```bash echo "TAVILY_API_KEY: ${TAVILY_API_KEY:+set}${TAVILY_API_KEY:-NOT SET -- required}" echo "FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:+set}${FIRECRAWL_API_KEY:-not set, Tavily extract will be used as fallback}" ```
**If TAVILY_API_KEY is missing:** Stop immediately. Tell the user: "TAVILY_API_KEY is required to research competitors and find PR coverage. There is no fallback. Get it at app.tavily.com -- free tier: 1000 credits/month (about 43 full runs at ~23 searches/run). Add it to your .env file."
**If only FIRECRAWL_API_KEY is missing:** Continue. Tavily extract will be used for the URL fetch.
---
## Step 2: Parse Input
Collect from the conversation: - `product_url`: the URL to fetch (required, unless user pastes a description directly) - `product_name`: optional, derived from page if not provided - `geography`: optional -- US / Europe / global. Default: US
**If the user provides only a pasted description (no URL):** Skip Steps 3 and 4. Go directly to Step 4 (product analysis) using the pasted text as `product_content`. Set `page_source` to `user_description` and note in `data_quality_flags`.
**If neither URL nor description:** Ask: "What is the URL of your product or startup? Or paste a short description: what it does, who it is for, and what makes it different from competitors."
Derive product slug:
```bash PRODUCT_SLUG=$(python3 -c " from urllib.parse import urlparse import sys url = 'URL_HERE' if url.startswith('http'): host = urlparse(url).netloc.replace('www.', '') print(host.split('.')[0]) else: import re print(re.sub(r'[^a-z0-9]', '-', url[:30].lower()).strip('-')) ") echo "Product slug: $PRODUCT_SLUG" ```
---
## Step 3: Fetch Product Page
**Primary: Firecrawl (if FIRECRAWL_API_KEY is set)**
```bash curl -s -X POST https://api.firecrawl.dev/v1/scrape \ -H "Authorization: Bearer $FIRECRAWL_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "URL_HERE", "formats": ["markdown"], "onlyMainContent": true}' \ | python3 -c " import sys, json d = json.load(sys.stdin) content = d.get('data', {}).get('markdown', '') or d.get('markdown', '') print(f'Fetched via Firecrawl: {len(content)} characters') open('/tmp/cprf-product-raw.md', 'w').write(content) " ```
**Fallback: Tavily extract (if FIRECRAWL_API_KEY is not set)**
```bash curl -s -X POST https://api.tavily.com/extract \ -H "Content-Type: application/json" \ -d "{\"api_key\": \"$TAVILY_API_KEY\", \"urls\": [\"URL_HERE\"]}" \ | python3 -c " import sys, json d = json.load(sys.stdin) content = d.get('results', [{}])[0].get('raw_content', '') print(f'Fetched via Tavily extract: {len(content)} characters') open('/tmp/cprf-product-raw.md', 'w').write(content) " ```
**Checkpoint:**
```bash python3 -c " content = open('/tmp/cprf-product-raw.md').read() if len(content) < 200: print('ERROR: fewer than 200 characters fetched') else: print(f'Content OK: {len(content)} characters') " ```
**If content < 200 characters:** Stop fetching. Tell the user: "The product page returned no readable content -- the site is likely JavaScript-rendered and blocked the fetch. Please paste a short description directly: what it does, who it is for, and what makes it different."
---
## Step 4: Product Analysis (AI)
Print page content:
```bash python3 -c " content = open('/tmp/cprf-product-raw.md').read()[:5000] print('=== PRODUCT PAGE (first 5000 chars) ===') print(content) " ```
**AI instructions:** Analyze the product page above and extract:
- `product_name`: the product or company name - `one_line_description`: what it does, for whom, core value prop. Under 20 words. No marketing language. Example: "CI/CD automation for developer teams that self-host their pipelines." - `industry_taxonomy`: `l1` (top-level: e.g. developer tools / fintech / healthtech / consumer), `l2` (sector: e.g. devops / payments / telemedicine), `l3` (specific niche: e.g. CI/CD automation / embedded payments / async video consultation). Vague labels like "technology" alone are not acceptable. - `differentiators`: exactly 2-3 specific things that distinguish this product from generic competitors. These feed directly into the pitch drafts -- be specific. Example: ["Self-hosted pipeline runner -- no data leaves your infra", "Native support for monorepos with dynamic step generation"] - `icp`: `buyer_persona` (job title), `company_type`, `company_size` - `geography_bias`: US / Europe / global / unclear - `page_source`: "live_page" or "user_description"
Write to `/tmp/cprf-product-analysis.json`:
```bash python3 << 'PYEOF' import json
analysis = { # FILL from your analysis above "product_name": "", "one_line_description": "", "industry_taxonomy": {"l1": "", "l2": "", "l3": ""}, "differentiators": [], "icp": {"buyer_persona": "", "company_type": "", "company_size": ""}, "geography_bias": "US", "page_source": "live_page" }
json.dump(analysis, open('/tmp/cprf-product-analysis.json', 'w'), indent=2) print('Product analysis written.') PYEOF ```
Verify:
```bash python3 -c " import json a = json.load(open('/tmp/cprf-product-analysis.json')) print('Product:', a['product_name']) print('Industry:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3']) print('Differentiators:') for d in a['differentiators']: print(f' - {d}') " ```
---
## Step 4b: Phase 1 -- Competitor Discovery
```bash ls scripts/research.py 2>/dev/null && echo "script found" || echo "ERROR: scripts/research.py not found -- cannot continue" ```
```bash python3 scripts/research.py \ --phase discover \ --product-analysis /tmp/cprf-product-analysis.json \ --tavily-key "$TAVILY_API_KEY" \ --output /tmp/cprf-competitors-raw.json ```
Print results for AI review:
```bash python3 -c " import json data = json.load(open('/tmp/cprf-competitors-raw.json')) print(f'Searches run: {len(data[\"competitor_searches\"])}') for s in data['competitor_searches']: print(f'\nQuery: {s[\"query\"]}') print(f'Answer: {s.get(\"answer\",\"\")[:400]}') for r in s.get('results', [])[:5]: print(f' - {r[\"title\"]} | {r[\"url\"]}') print(f' {r.get(\"content\",\"\")[:200]}') " ```
**AI instructions:** Read the search results above. Pick exactly 5 competitor companies that: 1. Are named in the search result titles, answers, or snippets 2. Are in the same L3 niche as the product being analyzed 3. Are actual competing products (not agencies, consultancies, or list articles) 4. Are distinct from each other (not the same company under different names)
For each competitor write: `name`, `url` (from the search result where they appeared), `description` (one sentence from snippet), `source_url` (the search result URL where they were found).
---
## Step 5: Competitor Confirmation
**Show the discovered competitors to the user:**
```bash python3 << 'PYEOF' import json
analysis = json.load(open('/tmp/cprf-product-analysis.json'))
# FILL: 5 competitors from the search results above candidates = [ # {"name": str, "url": str, "description": str, "source_url": str} ]
print(f"\nFound 5 competitors for {analysis['product_name']} in {analysis['industry_taxonomy']['l3']}:\n") for i, c in enumerate(candidates, 1): print(f" {i}. {c['name']} -- {c['description']}") print(f" {c['url']}")
data = json.load(open('/tmp/cprf-competitors-raw.json')) data['competitor_candidates'] = candidates json.dump(data, open('/tmp/cprf-competitors-raw.json', 'w'), indent=2) PYEOF ```
Tell the user: "These are the 5 competitors I'll research for PR coverage. Add, remove, or swap any -- or say 'looks good' to continue."
**Wait for confirmation.** If the user edits the list (adds/removes/swaps), update the candidates accordingly. Then write the confirmed list:
```bash python3 << 'PYEOF' import json
# FILL: confirmed competitor list (after user review) confirmed = [ # {"name": str, "url": str} ]
json.dump({"confirmed_competitors": confirmed}, open('/tmp/cprf-competitors-confirmed.json', 'w'), indent=2) print(f"Confirmed {len(confirmed)} competitors for PR research.") for c in confirmed: print(f" - {c['name']} ({c['url']})") PYEOF ```
---
## Step 6: Three-Track PR Research (Phase 2)
```bash python3 scripts/research.py \ --phase pr-research \ --competitors /tmp/cprf-competitors-confirmed.json \ --product-analysis /tmp/cprf-product-analysis.json \ --tavily-key "$TAVILY_API_KEY" \ --output /tmp/cprf-pr-raw.json ```
This runs 3 searches per competitor (15 total): - **Track A (Editorial):** `"[competitor]" featured press coverage TechCrunch Forbes Wired article interview` - **Track B (Podcasts):** `"[competitor]" founder CEO podcast interview appeared on episode` - **Track C (Communities):** `"[competitor]" site:reddit.com OR site:news.ycombinator.com OR site:producthunt.com`
Print coverage summary:
```bash python3 -c " import json data = json.load(open('/tmp/cprf-pr-raw.json')) print(f'Competitors researched: {data[\"competitors_researched\"]}') print() for r in data['results']: print(f'{r[\"competitor\"]}:') for track, tdata in r['tracks'].items(): n = len(tdata.get('results'
Source provenance
Decision snapshot
635 GitHub stars
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for competitor-pr-finder, ready for a manual X post.
competitor-pr-finder: Give it your product URL or description. It finds your top 5 competitors, runs three-track PR... 635 stars https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=x
Listing + install path for competitor-pr-finder: https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=x Install: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to Varnan-Tech but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder/audit)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)Varnan-Tech
@varnan-tech
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Do not auto-install
mono-color
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
1.9K StarsLast30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
61.0K StarsAcademic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
38.4K StarsGPT Researcher
Run autonomous deep research over web and local sources
28.0K StarsDo not auto-install
Install targets
Codex install prompt
Install the "competitor-pr-finder" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/competitor-pr-finder. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: 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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"varnan-tech-competitor-pr-finder","task":"Install competitor-pr-finder","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Deep research, source comparison, literature review, RAG, knowledge search, and reports.
Scenario
Research agents
I need my agent to research a topic, compare sources, and produce a concise report.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Maintenance
fresh
21d since push
Risk
Risky
Dependency or permission surface needs review
GitHub quality
635
75/100 Quality · 66/100 Trust
Coverage tags
Review notes
Dependency or permission surface needs review · Permission surface may require sandboxing
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
StrongSolid option that is likely worth shortlisting for production workflows.
Trust
Do not auto-installTrust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
Audit
RiskyA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Choose a stronger alternative or inspect the source manually before any install attempt.
Stars
635 GitHub stars
Repo activity
635 stars, 68 forks
Maintenance
21d since push
License
MIT
Install
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finderDo not use when
Alternative
1.9K Stars
npx skills add yanliudesign/mono-color-skill --skill mono-color
Alternative
61.0K Stars
npx skills add mvanhorn/last30days-skill -g
Alternative
38.4K Stars
npx skills add Imbad0202/academic-research-skills
Alternative
28.0K Stars
npx skills add assafelovic/gpt-researcher
Agent safety v2
This skill should not be selected by an agent without explicit human security review.
Do not auto-install. Inspect the source, dependencies, and permission surface first.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
high
Skill metadata references credentials, tokens, environment variables, or secret-bearing workflows.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/varnan-tech-competitor-pr-finder/install
Agent should check
Copy prompt
Task: Use competitor-pr-finder in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/varnan-tech-competitor-pr-finder/install
Install command: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/varnan-tech-competitor-pr-finder/install
LLM text format
/api/skills/varnan-tech-competitor-pr-finder/install?format=text
Find alternatives
/api/skills/search?q=competitor-pr-finder&limit=3
Agent prompt
Use competitor-pr-finder for this task. Review https://www.openagentskill.com/api/skills/varnan-tech-competitor-pr-finder/install, then install with: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finderRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/varnan-tech-competitor-pr-finder
LLM text
/api/registry/manifest/varnan-tech-competitor-pr-finder?format=text
Install alias
/api/registry/install/varnan-tech-competitor-pr-finder
Recommend
/api/registry/recommend?task=Use%20competitor-pr-finder%20in%20an%20agent%20workflow&limit=3
Agent fit
Research agents
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Use this as a leading candidate, then validate the README and install path in your own agent stack.
Role in stack
Primary pick
Primary fit
Research agents
Trust label
Production-ready
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Trust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
GitHub adoption
INFO635 GitHub stars
Stars/forks activity
INFO635 stars, 68 forks; issue activity unavailable in current metadata
Recent maintenance
PASS21d since push
License clarity
PASSMIT
Good signals
Review before install
Recommended action
Choose a stronger alternative or inspect the source manually before any install attempt.
Quality profile
Solid option that is likely worth shortlisting for production workflows.
Workflow fit
Investigate faster
I need my agent to research a topic, compare sources, and produce a concise report.
Collect structured data
I need my agent to scrape websites and extract structured data from pages.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Workflow fit
Find, compare, and synthesize
A workflow for agents that gather sources, compare claims, summarize long material, and draft useful research briefs.
Scrape, clean, and reuse web data
A practical workflow for agents that crawl public pages, extract clean content, normalize data, and hand it to downstream research or RAG workflows.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Alternative shortlist
Similar skills that may fit this task.
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
Academic Research Skills for Claude Code: research → write → review → revise → finalize
Run autonomous deep research over web and local sources
--- name: competitor-pr-finder description: '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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.' compatibility: [claude-code, gemini-cli, github-copilot] ---
# Competitor PR Finder
Give it your product URL. It finds your competitors, researches every PR channel they used (news, podcasts, communities), surfaces the channels that appear across multiple competitors (your proven targets), finds the journalist or host for each, and drafts a personalized cold pitch for your product at every tier-1 channel.
---
**Zero-hallucination policy:** Every channel, journalist name, story angle, and pitch detail in the output must trace to a specific Tavily search result or the fetched product page. This applies to: - Competitor names: must appear in Tavily search results, not AI training knowledge - Channel names: must have a URL in the search results - Journalist/host names: must appear verbatim in a Tavily snippet - Story angles: extracted from article/episode titles in search results only - Pitch drafts: reference specific evidence from search data + product analysis
---
## Common Mistakes
| The agent will want to... | Why that's wrong | |---|---| | Name a journalist from training knowledge | Every journalist name must trace to a search result snippet. Writing "Sarah Perez covers startups at TechCrunch" from memory is hallucination. | | List channels without evidence URLs | Every channel in the output must have at least one URL from the PR search results proving a competitor was featured there. | | Skip the competitor confirmation step | Always show discovered competitors and wait for the user to confirm. Wrong competitors = wasted searches and a useless output. | | Generate generic pitches ("We'd love to be featured") | Every pitch must reference a specific angle from the evidence AND a specific differentiator from the product analysis. | | Mark a channel as Tier 1 with only 1 competitor occurrence | Tier 1 = 3+ competitors. Tier 2 = exactly 2. Tier 3 = 1. Do not promote channels that haven't proven themselves. | | Use em dashes in output | Replace all em dashes (--) with hyphens. |
---
## Read Reference Files Before Each Run
```bash cat references/pr-channel-types.md cat references/pitch-guide.md cat references/tier-scoring.md ```
---
## Step 1: Setup Check
```bash echo "TAVILY_API_KEY: ${TAVILY_API_KEY:+set}${TAVILY_API_KEY:-NOT SET -- required}" echo "FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:+set}${FIRECRAWL_API_KEY:-not set, Tavily extract will be used as fallback}" ```
**If TAVILY_API_KEY is missing:** Stop immediately. Tell the user: "TAVILY_API_KEY is required to research competitors and find PR coverage. There is no fallback. Get it at app.tavily.com -- free tier: 1000 credits/month (about 43 full runs at ~23 searches/run). Add it to your .env file."
**If only FIRECRAWL_API_KEY is missing:** Continue. Tavily extract will be used for the URL fetch.
---
## Step 2: Parse Input
Collect from the conversation: - `product_url`: the URL to fetch (required, unless user pastes a description directly) - `product_name`: optional, derived from page if not provided - `geography`: optional -- US / Europe / global. Default: US
**If the user provides only a pasted description (no URL):** Skip Steps 3 and 4. Go directly to Step 4 (product analysis) using the pasted text as `product_content`. Set `page_source` to `user_description` and note in `data_quality_flags`.
**If neither URL nor description:** Ask: "What is the URL of your product or startup? Or paste a short description: what it does, who it is for, and what makes it different from competitors."
Derive product slug:
```bash PRODUCT_SLUG=$(python3 -c " from urllib.parse import urlparse import sys url = 'URL_HERE' if url.startswith('http'): host = urlparse(url).netloc.replace('www.', '') print(host.split('.')[0]) else: import re print(re.sub(r'[^a-z0-9]', '-', url[:30].lower()).strip('-')) ") echo "Product slug: $PRODUCT_SLUG" ```
---
## Step 3: Fetch Product Page
**Primary: Firecrawl (if FIRECRAWL_API_KEY is set)**
```bash curl -s -X POST https://api.firecrawl.dev/v1/scrape \ -H "Authorization: Bearer $FIRECRAWL_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "URL_HERE", "formats": ["markdown"], "onlyMainContent": true}' \ | python3 -c " import sys, json d = json.load(sys.stdin) content = d.get('data', {}).get('markdown', '') or d.get('markdown', '') print(f'Fetched via Firecrawl: {len(content)} characters') open('/tmp/cprf-product-raw.md', 'w').write(content) " ```
**Fallback: Tavily extract (if FIRECRAWL_API_KEY is not set)**
```bash curl -s -X POST https://api.tavily.com/extract \ -H "Content-Type: application/json" \ -d "{\"api_key\": \"$TAVILY_API_KEY\", \"urls\": [\"URL_HERE\"]}" \ | python3 -c " import sys, json d = json.load(sys.stdin) content = d.get('results', [{}])[0].get('raw_content', '') print(f'Fetched via Tavily extract: {len(content)} characters') open('/tmp/cprf-product-raw.md', 'w').write(content) " ```
**Checkpoint:**
```bash python3 -c " content = open('/tmp/cprf-product-raw.md').read() if len(content) < 200: print('ERROR: fewer than 200 characters fetched') else: print(f'Content OK: {len(content)} characters') " ```
**If content < 200 characters:** Stop fetching. Tell the user: "The product page returned no readable content -- the site is likely JavaScript-rendered and blocked the fetch. Please paste a short description directly: what it does, who it is for, and what makes it different."
---
## Step 4: Product Analysis (AI)
Print page content:
```bash python3 -c " content = open('/tmp/cprf-product-raw.md').read()[:5000] print('=== PRODUCT PAGE (first 5000 chars) ===') print(content) " ```
**AI instructions:** Analyze the product page above and extract:
- `product_name`: the product or company name - `one_line_description`: what it does, for whom, core value prop. Under 20 words. No marketing language. Example: "CI/CD automation for developer teams that self-host their pipelines." - `industry_taxonomy`: `l1` (top-level: e.g. developer tools / fintech / healthtech / consumer), `l2` (sector: e.g. devops / payments / telemedicine), `l3` (specific niche: e.g. CI/CD automation / embedded payments / async video consultation). Vague labels like "technology" alone are not acceptable. - `differentiators`: exactly 2-3 specific things that distinguish this product from generic competitors. These feed directly into the pitch drafts -- be specific. Example: ["Self-hosted pipeline runner -- no data leaves your infra", "Native support for monorepos with dynamic step generation"] - `icp`: `buyer_persona` (job title), `company_type`, `company_size` - `geography_bias`: US / Europe / global / unclear - `page_source`: "live_page" or "user_description"
Write to `/tmp/cprf-product-analysis.json`:
```bash python3 << 'PYEOF' import json
analysis = { # FILL from your analysis above "product_name": "", "one_line_description": "", "industry_taxonomy": {"l1": "", "l2": "", "l3": ""}, "differentiators": [], "icp": {"buyer_persona": "", "company_type": "", "company_size": ""}, "geography_bias": "US", "page_source": "live_page" }
json.dump(analysis, open('/tmp/cprf-product-analysis.json', 'w'), indent=2) print('Product analysis written.') PYEOF ```
Verify:
```bash python3 -c " import json a = json.load(open('/tmp/cprf-product-analysis.json')) print('Product:', a['product_name']) print('Industry:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3']) print('Differentiators:') for d in a['differentiators']: print(f' - {d}') " ```
---
## Step 4b: Phase 1 -- Competitor Discovery
```bash ls scripts/research.py 2>/dev/null && echo "script found" || echo "ERROR: scripts/research.py not found -- cannot continue" ```
```bash python3 scripts/research.py \ --phase discover \ --product-analysis /tmp/cprf-product-analysis.json \ --tavily-key "$TAVILY_API_KEY" \ --output /tmp/cprf-competitors-raw.json ```
Print results for AI review:
```bash python3 -c " import json data = json.load(open('/tmp/cprf-competitors-raw.json')) print(f'Searches run: {len(data[\"competitor_searches\"])}') for s in data['competitor_searches']: print(f'\nQuery: {s[\"query\"]}') print(f'Answer: {s.get(\"answer\",\"\")[:400]}') for r in s.get('results', [])[:5]: print(f' - {r[\"title\"]} | {r[\"url\"]}') print(f' {r.get(\"content\",\"\")[:200]}') " ```
**AI instructions:** Read the search results above. Pick exactly 5 competitor companies that: 1. Are named in the search result titles, answers, or snippets 2. Are in the same L3 niche as the product being analyzed 3. Are actual competing products (not agencies, consultancies, or list articles) 4. Are distinct from each other (not the same company under different names)
For each competitor write: `name`, `url` (from the search result where they appeared), `description` (one sentence from snippet), `source_url` (the search result URL where they were found).
---
## Step 5: Competitor Confirmation
**Show the discovered competitors to the user:**
```bash python3 << 'PYEOF' import json
analysis = json.load(open('/tmp/cprf-product-analysis.json'))
# FILL: 5 competitors from the search results above candidates = [ # {"name": str, "url": str, "description": str, "source_url": str} ]
print(f"\nFound 5 competitors for {analysis['product_name']} in {analysis['industry_taxonomy']['l3']}:\n") for i, c in enumerate(candidates, 1): print(f" {i}. {c['name']} -- {c['description']}") print(f" {c['url']}")
data = json.load(open('/tmp/cprf-competitors-raw.json')) data['competitor_candidates'] = candidates json.dump(data, open('/tmp/cprf-competitors-raw.json', 'w'), indent=2) PYEOF ```
Tell the user: "These are the 5 competitors I'll research for PR coverage. Add, remove, or swap any -- or say 'looks good' to continue."
**Wait for confirmation.** If the user edits the list (adds/removes/swaps), update the candidates accordingly. Then write the confirmed list:
```bash python3 << 'PYEOF' import json
# FILL: confirmed competitor list (after user review) confirmed = [ # {"name": str, "url": str} ]
json.dump({"confirmed_competitors": confirmed}, open('/tmp/cprf-competitors-confirmed.json', 'w'), indent=2) print(f"Confirmed {len(confirmed)} competitors for PR research.") for c in confirmed: print(f" - {c['name']} ({c['url']})") PYEOF ```
---
## Step 6: Three-Track PR Research (Phase 2)
```bash python3 scripts/research.py \ --phase pr-research \ --competitors /tmp/cprf-competitors-confirmed.json \ --product-analysis /tmp/cprf-product-analysis.json \ --tavily-key "$TAVILY_API_KEY" \ --output /tmp/cprf-pr-raw.json ```
This runs 3 searches per competitor (15 total): - **Track A (Editorial):** `"[competitor]" featured press coverage TechCrunch Forbes Wired article interview` - **Track B (Podcasts):** `"[competitor]" founder CEO podcast interview appeared on episode` - **Track C (Communities):** `"[competitor]" site:reddit.com OR site:news.ycombinator.com OR site:producthunt.com`
Print coverage summary:
```bash python3 -c " import json data = json.load(open('/tmp/cprf-pr-raw.json')) print(f'Competitors researched: {data[\"competitors_researched\"]}') print() for r in data['results']: print(f'{r[\"competitor\"]}:') for track, tdata in r['tracks'].items(): n = len(tdata.get('results'
Source provenance
Decision snapshot
635 GitHub stars
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for competitor-pr-finder, ready for a manual X post.
competitor-pr-finder: Give it your product URL or description. It finds your top 5 competitors, runs three-track PR... 635 stars https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=x
Listing + install path for competitor-pr-finder: https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=x Install: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to Varnan-Tech but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder/audit)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)Varnan-Tech
@varnan-tech
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Do not auto-install
mono-color
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
1.9K StarsLast30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
61.0K StarsAcademic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
38.4K StarsGPT Researcher
Run autonomous deep research over web and local sources
28.0K StarsDo not auto-install
Install targets
Codex install prompt
Install the "competitor-pr-finder" agent skill from https://github.com/Varnan-Tech/opendirectory/tree/main/skills/competitor-pr-finder. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: 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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"varnan-tech-competitor-pr-finder","task":"Install competitor-pr-finder","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Deep research, source comparison, literature review, RAG, knowledge search, and reports.
Scenario
Research agents
I need my agent to research a topic, compare sources, and produce a concise report.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Maintenance
fresh
21d since push
Risk
Risky
Dependency or permission surface needs review
GitHub quality
635
75/100 Quality · 66/100 Trust
Coverage tags
Review notes
Dependency or permission surface needs review · Permission surface may require sandboxing
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
StrongSolid option that is likely worth shortlisting for production workflows.
Trust
Do not auto-installTrust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
Audit
RiskyA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Choose a stronger alternative or inspect the source manually before any install attempt.
Stars
635 GitHub stars
Repo activity
635 stars, 68 forks
Maintenance
21d since push
License
MIT
Install
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finderDo not use when
Alternative
1.9K Stars
npx skills add yanliudesign/mono-color-skill --skill mono-color
Alternative
61.0K Stars
npx skills add mvanhorn/last30days-skill -g
Alternative
38.4K Stars
npx skills add Imbad0202/academic-research-skills
Alternative
28.0K Stars
npx skills add assafelovic/gpt-researcher
Agent safety v2
This skill should not be selected by an agent without explicit human security review.
Do not auto-install. Inspect the source, dependencies, and permission surface first.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
high
Skill metadata references credentials, tokens, environment variables, or secret-bearing workflows.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/varnan-tech-competitor-pr-finder/install
Agent should check
Copy prompt
Task: Use competitor-pr-finder in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20competitor-pr-finder%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/varnan-tech-competitor-pr-finder/install
Install command: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/varnan-tech-competitor-pr-finder/install
LLM text format
/api/skills/varnan-tech-competitor-pr-finder/install?format=text
Find alternatives
/api/skills/search?q=competitor-pr-finder&limit=3
Agent prompt
Use competitor-pr-finder for this task. Review https://www.openagentskill.com/api/skills/varnan-tech-competitor-pr-finder/install, then install with: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finderRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/varnan-tech-competitor-pr-finder
LLM text
/api/registry/manifest/varnan-tech-competitor-pr-finder?format=text
Install alias
/api/registry/install/varnan-tech-competitor-pr-finder
Recommend
/api/registry/recommend?task=Use%20competitor-pr-finder%20in%20an%20agent%20workflow&limit=3
Agent fit
Research agents
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Use this as a leading candidate, then validate the README and install path in your own agent stack.
Role in stack
Primary pick
Primary fit
Research agents
Trust label
Production-ready
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Trust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
GitHub adoption
INFO635 GitHub stars
Stars/forks activity
INFO635 stars, 68 forks; issue activity unavailable in current metadata
Recent maintenance
PASS21d since push
License clarity
PASSMIT
Good signals
Review before install
Recommended action
Choose a stronger alternative or inspect the source manually before any install attempt.
Quality profile
Solid option that is likely worth shortlisting for production workflows.
Workflow fit
Investigate faster
I need my agent to research a topic, compare sources, and produce a concise report.
Collect structured data
I need my agent to scrape websites and extract structured data from pages.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Workflow fit
Find, compare, and synthesize
A workflow for agents that gather sources, compare claims, summarize long material, and draft useful research briefs.
Scrape, clean, and reuse web data
A practical workflow for agents that crawl public pages, extract clean content, normalize data, and hand it to downstream research or RAG workflows.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Alternative shortlist
Similar skills that may fit this task.
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
Academic Research Skills for Claude Code: research → write → review → revise → finalize
Run autonomous deep research over web and local sources
--- name: competitor-pr-finder description: '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), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.' compatibility: [claude-code, gemini-cli, github-copilot] ---
# Competitor PR Finder
Give it your product URL. It finds your competitors, researches every PR channel they used (news, podcasts, communities), surfaces the channels that appear across multiple competitors (your proven targets), finds the journalist or host for each, and drafts a personalized cold pitch for your product at every tier-1 channel.
---
**Zero-hallucination policy:** Every channel, journalist name, story angle, and pitch detail in the output must trace to a specific Tavily search result or the fetched product page. This applies to: - Competitor names: must appear in Tavily search results, not AI training knowledge - Channel names: must have a URL in the search results - Journalist/host names: must appear verbatim in a Tavily snippet - Story angles: extracted from article/episode titles in search results only - Pitch drafts: reference specific evidence from search data + product analysis
---
## Common Mistakes
| The agent will want to... | Why that's wrong | |---|---| | Name a journalist from training knowledge | Every journalist name must trace to a search result snippet. Writing "Sarah Perez covers startups at TechCrunch" from memory is hallucination. | | List channels without evidence URLs | Every channel in the output must have at least one URL from the PR search results proving a competitor was featured there. | | Skip the competitor confirmation step | Always show discovered competitors and wait for the user to confirm. Wrong competitors = wasted searches and a useless output. | | Generate generic pitches ("We'd love to be featured") | Every pitch must reference a specific angle from the evidence AND a specific differentiator from the product analysis. | | Mark a channel as Tier 1 with only 1 competitor occurrence | Tier 1 = 3+ competitors. Tier 2 = exactly 2. Tier 3 = 1. Do not promote channels that haven't proven themselves. | | Use em dashes in output | Replace all em dashes (--) with hyphens. |
---
## Read Reference Files Before Each Run
```bash cat references/pr-channel-types.md cat references/pitch-guide.md cat references/tier-scoring.md ```
---
## Step 1: Setup Check
```bash echo "TAVILY_API_KEY: ${TAVILY_API_KEY:+set}${TAVILY_API_KEY:-NOT SET -- required}" echo "FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:+set}${FIRECRAWL_API_KEY:-not set, Tavily extract will be used as fallback}" ```
**If TAVILY_API_KEY is missing:** Stop immediately. Tell the user: "TAVILY_API_KEY is required to research competitors and find PR coverage. There is no fallback. Get it at app.tavily.com -- free tier: 1000 credits/month (about 43 full runs at ~23 searches/run). Add it to your .env file."
**If only FIRECRAWL_API_KEY is missing:** Continue. Tavily extract will be used for the URL fetch.
---
## Step 2: Parse Input
Collect from the conversation: - `product_url`: the URL to fetch (required, unless user pastes a description directly) - `product_name`: optional, derived from page if not provided - `geography`: optional -- US / Europe / global. Default: US
**If the user provides only a pasted description (no URL):** Skip Steps 3 and 4. Go directly to Step 4 (product analysis) using the pasted text as `product_content`. Set `page_source` to `user_description` and note in `data_quality_flags`.
**If neither URL nor description:** Ask: "What is the URL of your product or startup? Or paste a short description: what it does, who it is for, and what makes it different from competitors."
Derive product slug:
```bash PRODUCT_SLUG=$(python3 -c " from urllib.parse import urlparse import sys url = 'URL_HERE' if url.startswith('http'): host = urlparse(url).netloc.replace('www.', '') print(host.split('.')[0]) else: import re print(re.sub(r'[^a-z0-9]', '-', url[:30].lower()).strip('-')) ") echo "Product slug: $PRODUCT_SLUG" ```
---
## Step 3: Fetch Product Page
**Primary: Firecrawl (if FIRECRAWL_API_KEY is set)**
```bash curl -s -X POST https://api.firecrawl.dev/v1/scrape \ -H "Authorization: Bearer $FIRECRAWL_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "URL_HERE", "formats": ["markdown"], "onlyMainContent": true}' \ | python3 -c " import sys, json d = json.load(sys.stdin) content = d.get('data', {}).get('markdown', '') or d.get('markdown', '') print(f'Fetched via Firecrawl: {len(content)} characters') open('/tmp/cprf-product-raw.md', 'w').write(content) " ```
**Fallback: Tavily extract (if FIRECRAWL_API_KEY is not set)**
```bash curl -s -X POST https://api.tavily.com/extract \ -H "Content-Type: application/json" \ -d "{\"api_key\": \"$TAVILY_API_KEY\", \"urls\": [\"URL_HERE\"]}" \ | python3 -c " import sys, json d = json.load(sys.stdin) content = d.get('results', [{}])[0].get('raw_content', '') print(f'Fetched via Tavily extract: {len(content)} characters') open('/tmp/cprf-product-raw.md', 'w').write(content) " ```
**Checkpoint:**
```bash python3 -c " content = open('/tmp/cprf-product-raw.md').read() if len(content) < 200: print('ERROR: fewer than 200 characters fetched') else: print(f'Content OK: {len(content)} characters') " ```
**If content < 200 characters:** Stop fetching. Tell the user: "The product page returned no readable content -- the site is likely JavaScript-rendered and blocked the fetch. Please paste a short description directly: what it does, who it is for, and what makes it different."
---
## Step 4: Product Analysis (AI)
Print page content:
```bash python3 -c " content = open('/tmp/cprf-product-raw.md').read()[:5000] print('=== PRODUCT PAGE (first 5000 chars) ===') print(content) " ```
**AI instructions:** Analyze the product page above and extract:
- `product_name`: the product or company name - `one_line_description`: what it does, for whom, core value prop. Under 20 words. No marketing language. Example: "CI/CD automation for developer teams that self-host their pipelines." - `industry_taxonomy`: `l1` (top-level: e.g. developer tools / fintech / healthtech / consumer), `l2` (sector: e.g. devops / payments / telemedicine), `l3` (specific niche: e.g. CI/CD automation / embedded payments / async video consultation). Vague labels like "technology" alone are not acceptable. - `differentiators`: exactly 2-3 specific things that distinguish this product from generic competitors. These feed directly into the pitch drafts -- be specific. Example: ["Self-hosted pipeline runner -- no data leaves your infra", "Native support for monorepos with dynamic step generation"] - `icp`: `buyer_persona` (job title), `company_type`, `company_size` - `geography_bias`: US / Europe / global / unclear - `page_source`: "live_page" or "user_description"
Write to `/tmp/cprf-product-analysis.json`:
```bash python3 << 'PYEOF' import json
analysis = { # FILL from your analysis above "product_name": "", "one_line_description": "", "industry_taxonomy": {"l1": "", "l2": "", "l3": ""}, "differentiators": [], "icp": {"buyer_persona": "", "company_type": "", "company_size": ""}, "geography_bias": "US", "page_source": "live_page" }
json.dump(analysis, open('/tmp/cprf-product-analysis.json', 'w'), indent=2) print('Product analysis written.') PYEOF ```
Verify:
```bash python3 -c " import json a = json.load(open('/tmp/cprf-product-analysis.json')) print('Product:', a['product_name']) print('Industry:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3']) print('Differentiators:') for d in a['differentiators']: print(f' - {d}') " ```
---
## Step 4b: Phase 1 -- Competitor Discovery
```bash ls scripts/research.py 2>/dev/null && echo "script found" || echo "ERROR: scripts/research.py not found -- cannot continue" ```
```bash python3 scripts/research.py \ --phase discover \ --product-analysis /tmp/cprf-product-analysis.json \ --tavily-key "$TAVILY_API_KEY" \ --output /tmp/cprf-competitors-raw.json ```
Print results for AI review:
```bash python3 -c " import json data = json.load(open('/tmp/cprf-competitors-raw.json')) print(f'Searches run: {len(data[\"competitor_searches\"])}') for s in data['competitor_searches']: print(f'\nQuery: {s[\"query\"]}') print(f'Answer: {s.get(\"answer\",\"\")[:400]}') for r in s.get('results', [])[:5]: print(f' - {r[\"title\"]} | {r[\"url\"]}') print(f' {r.get(\"content\",\"\")[:200]}') " ```
**AI instructions:** Read the search results above. Pick exactly 5 competitor companies that: 1. Are named in the search result titles, answers, or snippets 2. Are in the same L3 niche as the product being analyzed 3. Are actual competing products (not agencies, consultancies, or list articles) 4. Are distinct from each other (not the same company under different names)
For each competitor write: `name`, `url` (from the search result where they appeared), `description` (one sentence from snippet), `source_url` (the search result URL where they were found).
---
## Step 5: Competitor Confirmation
**Show the discovered competitors to the user:**
```bash python3 << 'PYEOF' import json
analysis = json.load(open('/tmp/cprf-product-analysis.json'))
# FILL: 5 competitors from the search results above candidates = [ # {"name": str, "url": str, "description": str, "source_url": str} ]
print(f"\nFound 5 competitors for {analysis['product_name']} in {analysis['industry_taxonomy']['l3']}:\n") for i, c in enumerate(candidates, 1): print(f" {i}. {c['name']} -- {c['description']}") print(f" {c['url']}")
data = json.load(open('/tmp/cprf-competitors-raw.json')) data['competitor_candidates'] = candidates json.dump(data, open('/tmp/cprf-competitors-raw.json', 'w'), indent=2) PYEOF ```
Tell the user: "These are the 5 competitors I'll research for PR coverage. Add, remove, or swap any -- or say 'looks good' to continue."
**Wait for confirmation.** If the user edits the list (adds/removes/swaps), update the candidates accordingly. Then write the confirmed list:
```bash python3 << 'PYEOF' import json
# FILL: confirmed competitor list (after user review) confirmed = [ # {"name": str, "url": str} ]
json.dump({"confirmed_competitors": confirmed}, open('/tmp/cprf-competitors-confirmed.json', 'w'), indent=2) print(f"Confirmed {len(confirmed)} competitors for PR research.") for c in confirmed: print(f" - {c['name']} ({c['url']})") PYEOF ```
---
## Step 6: Three-Track PR Research (Phase 2)
```bash python3 scripts/research.py \ --phase pr-research \ --competitors /tmp/cprf-competitors-confirmed.json \ --product-analysis /tmp/cprf-product-analysis.json \ --tavily-key "$TAVILY_API_KEY" \ --output /tmp/cprf-pr-raw.json ```
This runs 3 searches per competitor (15 total): - **Track A (Editorial):** `"[competitor]" featured press coverage TechCrunch Forbes Wired article interview` - **Track B (Podcasts):** `"[competitor]" founder CEO podcast interview appeared on episode` - **Track C (Communities):** `"[competitor]" site:reddit.com OR site:news.ycombinator.com OR site:producthunt.com`
Print coverage summary:
```bash python3 -c " import json data = json.load(open('/tmp/cprf-pr-raw.json')) print(f'Competitors researched: {data[\"competitors_researched\"]}') print() for r in data['results']: print(f'{r[\"competitor\"]}:') for track, tdata in r['tracks'].items(): n = len(tdata.get('results'
Source provenance
Decision snapshot
635 GitHub stars
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for competitor-pr-finder, ready for a manual X post.
competitor-pr-finder: Give it your product URL or description. It finds your top 5 competitors, runs three-track PR... 635 stars https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=x
Listing + install path for competitor-pr-finder: https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=x Install: npx skills add Varnan-Tech/opendirectory --skill competitor-pr-finder
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to Varnan-Tech but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder/audit)
[](https://www.openagentskill.com/skills/varnan-tech-competitor-pr-finder?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)Varnan-Tech
@varnan-tech
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Do not auto-install
mono-color
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
1.9K StarsLast30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
61.0K StarsAcademic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
38.4K StarsGPT Researcher
Run autonomous deep research over web and local sources
28.0K StarsPermission surface
secrets or environment access, shell or command execution
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness
Permission surface
secrets or environment access, shell or command execution
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness
Permission surface
secrets or environment access, shell or command execution
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness
Permission surface
secrets or environment access, shell or command execution
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness