company-radar — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited company-radar (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Competitive intelligence orchestrator. Takes company names, runs parallel research across 8+ platforms, scores each on a 0-100 heat scale, and produces a structured radar report with AI briefings.
This is an orchestration skill. It delegates data collection to existing opendirectory micro-skills and coordinates their output --- it doesn't replace them.
INPUT: Company name(s) / URL(s)
|
[1. Profile Phase] -- Web research to build company profiles
|
[2. Signal Collection] -- Parallel platform research (8 channels)
/ | | | | | \ \
GH TW RD HN PH YC WEB MEDIA
|
[3. Scoring Engine] -- 4-dimension heat score (0-100)
|
[4. AI Synthesis] -- Executive briefing generation
|
OUTPUT: Radar Report + Per-Company Deep Dives| Channel | Opendirectory Skill | What It Detects |
|---|---|---|
| GitHub | gh-issue-to-demand-signal + web search | Stars, forks, commits, releases, shipping velocity |
| Twitter/X | twitter-GTM-find-skill | Tweets, mentions, engagement, founder activity |
reddit-icp-monitor, reddit-post-engine | Community sentiment, pain points, buzz | |
| Hacker News | hackernews-intel | Story mentions, points, front-page signals |
| Product Hunt | producthunt-launch-kit | Launches, votes, maker activity |
| YC Jobs | yc-intent-radar-skill / yc-jobs-scraper | Job listings, hiring departments, growth signals |
| Web / Press | Tavily search + competitor-pr-finder | News, product announcements, funding |
| Pricing | pricing-finder | Pricing changes, tier updates, plan structure |
| Market Position | map-your-market | ICP, competitor landscape, messaging gaps |
| The agent will want to... | Why that's wrong |
|---|---|
| Run skills sequentially | All 8 signal channels are independent. Must run in parallel. |
| Hallucinate GitHub star counts or hiring numbers | Every data point must trace to a specific search result or skill output. No "approx 500 stars". |
| Skip the heat score computation | The radar report requires scored output, not just raw data dump. Heat score is the core differentiator. |
| Output incomplete reports because a skill failed | One failing channel does not block the full report. Score what you have, note gaps. |
| Use AI training knowledge for company descriptions | Every company description must come from live web research, not memory. |
| Forget to score activity levels from heat scores | Heat score has explicit thresholds: High (60+), Medium (30-59), Low (1-29), Dormant (0). |
Check that required API keys are accessible for the channels the user's platform supports:
if [ -z "$TAVILY_API_KEY" ]; then echo "TAVILY_API_KEY: NOT SET -- required for web enrichment"; else echo "TAVILY_API_KEY: configured"; fi
if [ -z "$GITHUB_TOKEN" ]; then echo "GITHUB_TOKEN: not set -- GitHub API rate limited to 60 req/hr"; else echo "GITHUB_TOKEN: configured"; fiThe specific skills being orchestrated have their own API key requirements. Check each skill's SKILL.md for details. Required for full operation:
TAVILY_API_KEY -- web search and company enrichment (get at app.tavily.com)GITHUB_TOKEN -- GitHub API access (get at github.com/settings/tokens)If TAVILY_API_KEY is missing: stop and tell the user. Without it, company profiling and web enrichment cannot operate.
Collect from the conversation:
companies: list of company names/URLs to track (required, min 1, max 10 per run)output_preference: "full report" (default), "alert-only", "briefing-only", or "heat-score-only" (leaderboard table + scores only, no deep dives)timeframe: "realtime" (default) or "last-week" or "last-month"If the user gives a single company name: still run full radar pipeline. Single-company radars are valid -- get the full profile.
If more than 10 companies: tell the user "Maximum 10 companies per radar scan. I'll run the first 10. Let me know if you want to swap any out."
Ask if any companies have specific known handles:
This saves research time. If unknown, the profile phase will discover them.
For each company, build a basic profile before running platform research.
For each company, run a Tavily search to discover:
[company name] official website twitter github linkedin producthunt yc foundersExtract from search results:
Output format: For each company, produce a profile object following references/company-profile-format.md.
Display the discovered profiles and ask the user to confirm or correct before proceeding.
## Discovered Company Profiles
| Company | Domain | Twitter | GitHub | YC Batch | Founders |
|---|---|---|---|---|---|
| ... | ... | ... | ... | ... | ... |
Correct any incorrect handles before I proceed to signal collection?Wait for user confirmation. Do not skip this step -- wrong handles produce wrong signals.
Now run research across all platforms in parallel for all confirmed companies.
For each platform, use the appropriate method. Run ALL platforms simultaneously -- do not sequence them.
#### GitHub Signal Use web search (Tavily) to find GitHub org, then search for:
github.com/[org] stars forks commitsExtract:
Or call gh-issue-to-demand-signal skill if you want deeper demand signal analysis from GitHub Issues.
#### Twitter/X Signal Use twitter-GTM-find-skill or Tavily search:
twitter.com/[handle] site:twitter.com [company] startupExtract:
#### Reddit Signal Use reddit-icp-monitor approach or Tavily search:
site:reddit.com [company name] [product category]Extract:
#### Hacker News Signal Use hackernews-intel approach or HN Algolia API search:
site:news.ycombinator.com [company name]Extract:
#### Product Hunt Signal Use producthunt-launch-kit approach or Tavily search:
site:producthunt.com [company name] productsExtract:
#### YC Jobs Signal Use yc-intent-radar-skill / yc-jobs-scraper approach or Tavily search:
site:workatastartup.com [company name] OR site:ycombinator.com/companies [company name]Extract:
#### Web / Press Signal Use Tavily search:
[company name] funding announcement product launch news 2026Extract:
#### Pricing Signal (optional, run if user wants pricing intel) Use pricing-finder skill or Tavily search:
[company name] pricing plans 2026Extract:
Use the bundled scripts/heat-score-calc.mjs to score each company. This script implements the 4-dimension scoring algorithm from references/heat-score-methodology.md.
Collect all signal data into a JSON file matching this schema:
{
"companies": [{
"name": "CompanyName",
"signals": {
"stars": null, "forks": null, "ph_votes": null,
"commits_week": null, "releases_month": null,
"active_shipping": false, "last_activity_days": null,
"tweets_24h": null, "mentions": null,
"reddit_posts": null, "reddit_score": null,
"hn_stories": null, "hn_points": null,
"youtube_videos": null,
"jobs": null, "dept_count": null,
"sentiment": null, "traction": null
}
}]
}Fill in each field with the discovered value. Leave null for anything not found — the script treats null as 0.
Then run:
node scripts/heat-score-calc.mjs --file signals.jsonOr pipe it:
echo '{"companies":[...]}' | node scripts/heat-score-calc.mjsThe script outputs JSON with per-company results:
{
"generated_at": "2026-05-29T...",
"company_count": 3,
"companies": [
{
"name": "Vercel",
"heat_score": 89,
"level": "High",
"dimensions": {
"authority": { "score": 25, "max": 25, "breakdown": {...} },
"shipping": { "score": 25, "max": 25, "breakdown": {...} },
"social": { "score": 17, "max": 25, "breakdown": {...} },
"growth": { "score": 22, "max": 25, "breakdown": {...} }
},
"alerts": [...]
}
]
}Each company includes:
heat_score — total 0-100level — High (60+), Medium (30-59), Low (1-29), Dormant (0)dimensions — per-dimension score with max and itemized breakdownalerts — auto-detected notable signalsThese are the formulas the script applies. They're documented here for transparency:
| Dimension | Signals | Max |
|---|---|---|
| Authority | GitHub stars (min(15, stars/1000*3)), forks (min(5, forks/200*2)), PH votes (min(5, votes/100*5)) | 25 |
| Shipping | Commits/week (min(10, commits*2)), releases/month (5 if >0), active flag (5), recency (5 if <7d, 3 if <30d) | 25 |
| Social | Tweets (5), mentions (5), Reddit posts (3) + score (2), HN stories (4) + points (3), YouTube (3) | 25 |
| Growth | Jobs (min(10, jobs*3)), dept diversity (min(5, dept_count*2)), AI sentiment (5), AI traction (5) | 25 |
references/heat-score-methodology.md.For each company scored above 0 (i.e., any signal detected), generate an AI executive briefing using the collected data.
The briefing must cover:
**Executive Brief: [Company Name]**
**Context:** 1-2 sentences on what they do and their market position
**Heat Score:** [score]/100 — [Activity Level]
**Recent Activity:**
- Product: key product or launch signals found
- Hiring: hiring status, departments, notable roles
- Community: sentiment summary from Reddit/HN/Twitter
**Threat Assessment:**
- Competitive threat level: [Low / Medium / High]
- Rationale: 2-3 sentences on why
**Key Signal (most important takeaway):**
One sentence on the single most important thing happening with this company.
**Data Confidence:**
What channels had good data vs what was missing.Rules:
Compile everything into the structured radar report format. Use references/radar-report-template.md for the exact output structure.
The report should include:
Output in markdown format, ready to copy into Slack, Notion, Google Docs, or email.
If the user wants ongoing monitoring:
This skill is an orchestrator — each run executes the full pipeline fresh.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.