# Feature Category Competitor Research

> Deep competitive enterprise research — filters competitors to those with enterprise tiers, researches feature releases (last 18 months) across specified categories via WebSearch+WebFetch only (G2, Reddit, changelogs, blogs, YouTube titles), then builds an Opportunity Solution Tree (Teresa Torres) and saves per-competitor + synthesis pages to Obsidian with diff mode support.

- **Type:** Skill
- **Install:** `agentstack add skill-lmiadowicz-claude-skills-feature-category-competitor-research`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [lmiadowicz](https://agentstack.voostack.com/s/lmiadowicz)
- **Installs:** 0
- **Category:** [Productivity](https://agentstack.voostack.com/c/productivity)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [lmiadowicz](https://github.com/lmiadowicz)
- **Source:** https://github.com/lmiadowicz/claude-skills/tree/main/feature-category-competitor-research

## Install

```sh
agentstack add skill-lmiadowicz-claude-skills-feature-category-competitor-research
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

Orchestrate deep competitive enterprise research by:
1. Filtering the competitor list — only those with an enterprise pricing tier proceed
2. Auto-discovering all public research sources per competitor via WebSearch (no browser automation, no Playwright, no yt-dlp)
3. Resolving research categories from --categories or a job description URL
4. Spawning parallel research agents (one per competitor) using only WebSearch + WebFetch
5. Running diff mode: appending new findings to existing Obsidian pages
6. Synthesizing findings into an Opportunity Solution Tree (Teresa Torres format)
7. Saving per-competitor pages + one synthesis report to Obsidian

**Orchestrator role:** Coordinate only. Do NOT research yourself. Spawn agents, monitor, synthesize.

**Tool constraint (CRITICAL):** This skill uses ONLY WebSearch and WebFetch for all web access.
No Playwright. No yt-dlp. No browser automation. No external CLI tools.
YouTube → search video titles via WebSearch. GitHub → search via WebSearch with site: filter. G2 → search with site:g2.com.

## CRITICAL: Language Rules

Detect the language of the user's input. ALL output (agent findings, synthesis, OST) MUST be in that same language.
- Polish input → everything in Polish with correct diacritics (ą, ć, ę, ł, ń, ó, ś, ź, ż — never omit)
- English input → everything in English

Include these rules verbatim in EVERY agent prompt.

User input: $ARGUMENTS

**Parameters:**
- `--competitors "A,B,C"` — Comma-separated list of competitor names (REQUIRED)
- `--my-product "Name"` — Your product to compare against (REQUIRED)
- `--categories "collab,RBAC,SSO"` — Feature categories to focus on (mutually exclusive with --job-url)
- `--job-url "https://..."` — Job description URL; skill extracts relevant categories automatically
- `--since YYYY-MM-DD` — Only surface features released after this date (default: 18 months ago)
- `--output ` — Output directory (overrides `$OBSIDIAN_VAULT`)

**Output path resolution (in order of precedence):**
1. `--output ` flag
2. `$OBSIDIAN_VAULT/Competitors/` environment variable
3. `./competitors-output/` (current directory fallback)

**Output locations (within output directory):**
- Per competitor page: `{OUTPUT_DIR}/{CompetitorName}.md`
- Synthesis + OST: `{OUTPUT_DIR}/_synthesis-{my-product-slug}-{YYYY-MM-DD}.md`
- Discovery manifest: `{OUTPUT_DIR}/_discovery-manifest.md`

## Step 1: Parse Arguments & Setup

Extract from `$ARGUMENTS`:
- `COMPETITORS_RAW` — comma-separated string, e.g. "Jira,Asana,Monday"
- `MY_PRODUCT` — e.g. "Linear"
- `CATEGORIES_RAW` — from --categories (may be empty)
- `JOB_URL` — from --job-url (may be empty)
- `SINCE_DATE` — from --since, default 18 months ago
- `OUTPUT_FLAG` — from --output (may be empty)

Compute SINCE_DATE if not provided:
```bash
SINCE_DATE=$(date -v-18m +%Y-%m-%d 2>/dev/null || date -d '18 months ago' +%Y-%m-%d)
TODAY=$(date +%Y-%m-%d)
```

Resolve output directory:
```bash
if [[ -n "${OUTPUT_FLAG}" ]]; then
  COMPETITORS_DIR="${OUTPUT_FLAG}"
elif [[ -n "${OBSIDIAN_VAULT}" ]]; then
  COMPETITORS_DIR="${OBSIDIAN_VAULT}/Competitors"
else
  COMPETITORS_DIR="$(pwd)/competitors-output"
fi
mkdir -p "${COMPETITORS_DIR}"
```

Split COMPETITORS_RAW into array by comma, trim whitespace per entry.

Inform user:
```
Feature Category Competitor Research

Product:     {MY_PRODUCT}
Competitors: {COMPETITORS_RAW}
Window:      {SINCE_DATE} → {TODAY}
Categories:  {CATEGORIES_RAW | "extracting from job URL" | "enterprise baseline"}
Output:      {COMPETITORS_DIR}
```

## Step 2: Resolve Research Categories

### If --job-url provided:
Fetch the URL:
```
WebFetch(url=JOB_URL, prompt="List all product features, technical capabilities, and enterprise requirements mentioned in this job description as a comma-separated list of research categories. Focus on: collaboration, security, admin features, compliance, integrations, and product-specific capabilities.")
```
Map to category names. Append to enterprise baseline below.

### Enterprise baseline (always included, deduplicated):
- `SSO/SAML` — single sign-on, SAML authentication
- `RBAC` — role-based access control, permissions, user roles
- `Admin Console` — seat management, usage analytics, org admin
- `Audit Logs` — activity logs, compliance trails
- `Real-time Collaboration` — multiplayer editing, live cursors, conflict resolution
- `Team Workspaces` — shared spaces, project/team management
- `Compliance` — SOC 2, GDPR, data residency, security certs
- `Integrations` — API, webhooks, third-party tools

Plus any extras from --categories or job URL (deduplicated).

Announce:
```
Research categories resolved ({N} total):
- {category}
...
```

## Step 3: Enterprise Tier Filter

Spawn ALL filter agents in ONE message. model=claude-haiku-4-5-20251001, run_in_background=true.

Each agent checks ONE competitor:

```
You are checking if {CompetitorName} has an enterprise pricing tier.

Steps (WebSearch + WebFetch only — no other tools):
1. WebSearch: "{CompetitorName} pricing enterprise plan"
2. WebFetch the pricing page URL from the result
3. Look for: "Enterprise" tier, "Contact Sales", custom pricing, SSO/SAML mention, admin features, or anything above "Business"/"Team" tier

Respond with EXACTLY ONE LINE — no other text:
ENTERPRISE_YES: {CompetitorName} | {pricing_page_url} | {evidence in max 15 words}
OR
ENTERPRISE_NO: {CompetitorName} | {reason in max 10 words}
```

After all complete, collect results. Keep only ENTERPRISE_YES.

Announce:
```
Enterprise Filter:

✓ Qualified: {CompetitorName} — {evidence}
✗ Filtered:  {CompetitorName} — {reason}

Proceeding with {N} competitors.
```

If zero pass: stop and inform user.

## Step 4: Source Discovery

Spawn ALL discovery agents in ONE message. model=claude-haiku-4-5-20251001, run_in_background=true.

Each agent discovers sources for ONE competitor using only WebSearch:

```
Discover research sources for {CompetitorName}. Use WebSearch only — no browser tools, no yt-dlp, no Playwright.

Run these 7 searches:
1. WebSearch: "{CompetitorName} changelog release notes"
2. WebSearch: "{CompetitorName} site:github.com"
3. WebSearch: "{CompetitorName} site:youtube.com official channel"
4. WebSearch: "{CompetitorName} site:g2.com reviews"
5. WebSearch: "{CompetitorName} site:reddit.com"
6. WebSearch: "{CompetitorName} product roadmap public"
7. WebSearch: "{CompetitorName} enterprise blog announcement"

Respond with EXACTLY this block — write NOT_FOUND if not found:
---
COMPETITOR: {CompetitorName}
DOMAIN: {main domain}
CHANGELOG: {url or NOT_FOUND}
GITHUB: {github.com/org url or NOT_FOUND}
YOUTUBE_SEARCH: "{CompetitorName} enterprise site:youtube.com"
G2_SEARCH: "site:g2.com {CompetitorName} reviews"
REDDIT_SEARCH: "site:reddit.com {CompetitorName}"
ROADMAP: {url or NOT_FOUND}
BLOG: {url or NOT_FOUND}
---
Nothing else.
```

After all complete, save manifest:
Write to `{COMPETITORS_DIR}/_discovery-manifest.md`:
```markdown
# Source Discovery Manifest
Generated: {TODAY} | Competitors: {N}

{paste each competitor's discovery block}
```

Announce:
```
Source discovery complete ({N} competitors).
Starting deep research...
```

## Step 5: Deep Research — Parallel Agents

**CRITICAL: Spawn ALL research agents in ONE message. model=claude-haiku-4-5-20251001, run_in_background=true.**

One agent per qualified competitor. This is DEEP research — minimum 20 WebSearch calls and 12 WebFetch calls per agent. Do not cut corners. Extract specific quotes, dates, user counts, version numbers. Every claim must have a source URL.

Agent prompt template (adapt per competitor with their discovered sources):

```
You are a senior competitive intelligence analyst. Your job is to produce an exhaustive, evidence-based profile of {CompetitorName} for {MY_PRODUCT}'s product team. This is NOT a surface-level summary — you must go deep into every source type and extract specific, actionable intelligence.

Use ONLY WebSearch and WebFetch. No Playwright, no yt-dlp, no browser automation, no CLI tools.

Competitor: {CompetitorName}
My product (for comparison): {MY_PRODUCT}
Research window: {SINCE_DATE} → {TODAY}
Research categories (investigate each thoroughly): {RESOLVED_CATEGORIES}
Output file: {COMPETITORS_DIR}/{CompetitorName}.md

Discovered source starting points:
- Domain: {DOMAIN}
- Changelog: {CHANGELOG_URL or NOT_FOUND}
- GitHub: {GITHUB_URL or NOT_FOUND}
- Roadmap: {ROADMAP_URL or NOT_FOUND}
- Blog: {BLOG_URL or NOT_FOUND}
Use these as starting points — follow links, search variants, go deeper.

CRITICAL — follow strictly:
1. Language: write in {DETECTED_LANGUAGE} with correct orthography and diacritics
2. Specificity over generality: never write "users complain about X" — write "14 of the last 30 G2 reviews mention X, with users specifically describing Y scenario"
3. Direct quotes: include verbatim user quotes from reviews (with source URL). At least 6 direct quotes in the Pain Points section.
4. Dates on everything: every feature release must have a date. Every review quote must have a year.
5. Cross-reference: if G2 says one thing and the official blog says another, flag the discrepancy explicitly.
6. No filler. No vague generalizations. If you don't know, say UNKNOWN and explain what you searched.
7. Bold key conclusions. Tables must have interpretation text.
8. Count things: "3 of 5 Reddit threads mention...", "Released in 4 separate changelog entries between MM/YY and MM/YY"

Execute these steps IN ORDER. Do not skip any. Track how many searches and fetches you've done.

---

**PHASE A — Changelog & Release Notes (target: 5 searches, 4 fetches)**

A1. If CHANGELOG_URL found:
    - WebFetch it fully. Extract EVERY entry that mentions: {RESOLVED_CATEGORIES}. Note exact dates and version numbers.
    - If the changelog is paginated, fetch the next page too.

A2. WebSearch: "{CompetitorName} changelog release notes enterprise {SINCE_YEAR}"
    WebFetch top 2 results. Extract all enterprise-related feature entries with dates.

A3. WebSearch: "{CompetitorName} site:{DOMAIN} blog enterprise release shipped"
    WebFetch top 2 results. Look for launch posts, "we shipped X" announcements.

A4. WebSearch: "{CompetitorName} SSO SAML launched shipped release"
    WebFetch top result. Note exact date, what was included, any limitations mentioned.

A5. WebSearch: "{CompetitorName} RBAC permissions roles admin console released {SINCE_YEAR} {TODAY_YEAR}"
    WebFetch top 2 results.

For each feature found: record name, exact date (YYYY-MM), version if available, what it does in 1 sentence, source URL.

---

**PHASE B — GitHub (target: 4 searches, 3 fetches)**

B1. If GITHUB_URL found:
    WebFetch {GITHUB_URL}/releases — extract ALL release entries from {SINCE_DATE} onwards. Note dates and feature descriptions exactly as written.

B2. WebSearch: "{CompetitorName} site:github.com releases enterprise security"
    WebFetch the releases page from the top result. Look for issues/PRs mentioning SSO, RBAC, audit, admin.

B3. WebSearch: "{CompetitorName} site:github.com issues enterprise feature request"
    WebFetch top result. Look for open feature requests that reveal what's MISSING or PLANNED.
    This is gold: upvoted GitHub issues = validated user demand.

B4. WebSearch: "{CompetitorName} site:github.com CHANGELOG.md"
    WebFetch if found. Extract enterprise-relevant entries.

For each GitHub finding: note if it's SHIPPED (release) or PLANNED (open issue/PR) and the date.

---

**PHASE C — YouTube Announcements (target: 4 searches, 0 fetches — titles + descriptions only)**

IMPORTANT: Do NOT fetch youtube.com/watch URLs. Extract intelligence from WebSearch result snippets only (titles, descriptions, publication dates). yt-dlp is NOT available.

C1. WebSearch: "{CompetitorName} enterprise features youtube {SINCE_YEAR}"
    From search snippets: extract video titles, upload dates, and any feature names mentioned in descriptions.

C2. WebSearch: "{CompetitorName} product update new feature youtube {TODAY_YEAR}"
    Same — titles and dates only from snippets.

C3. WebSearch: "{CompetitorName} admin SSO team collaboration tutorial youtube"
    Indicates which enterprise features exist (tutorials only exist for shipped features).

C4. WebSearch: "{CompetitorName} site:youtube.com enterprise team security"
    Extract video title list — each title is a signal about what features exist or were announced.

Output: list of video titles with dates. A tutorial video about SSO = confirmation SSO exists. An announcement video = note the feature name and date.

---

**PHASE D — G2 Reviews: Deep Pain Point Extraction (target: 6 searches, 5 fetches)**

Do not just read the main review page. Go deep into specific review categories and complaints.

D1. WebSearch: "site:g2.com {CompetitorName} reviews"
    WebFetch the top result. Read through individual review text. Extract:
    - Verbatim quotes from "Cons" sections (copy exact text)
    - Verbatim quotes from "What problems are you solving" sections
    - Star ratings distribution if visible
    Count how many reviews mention each pain point.

D2. WebSearch: "site:g2.com {CompetitorName} \"single sign-on\" OR \"SSO\" reviews"
    WebFetch. Extract exact quotes about SSO — present, missing, broken, partial.

D3. WebSearch: "site:g2.com {CompetitorName} \"admin\" OR \"permissions\" OR \"roles\" reviews"
    WebFetch. Extract exact quotes about admin features and access control.

D4. WebSearch: "site:g2.com {CompetitorName} \"collaboration\" OR \"real-time\" OR \"multiplayer\" reviews"
    WebFetch. Extract exact quotes.

D5. WebSearch: "{CompetitorName} reviews \"missing\" OR \"wish\" OR \"need\" enterprise features 2024 2025 2026"
    WebFetch top 2 results (may be blog posts, comparison articles, or review aggregators).

D6. WebSearch: "site:capterra.com {CompetitorName} reviews"
    WebFetch. Extract Cons sections verbatim. Note: Capterra sometimes has different user segments than G2.

For each pain point: count evidence ("mentioned in 4 G2 reviews", "2 Reddit threads"), quote at least one user verbatim, note if {CompetitorName} has acknowledged it officially.

---

**PHASE E — Reddit: Authentic User Voice (target: 6 searches, 5 fetches)**

E1. WebSearch: "site:reddit.com {CompetitorName} enterprise problem missing feature"
    WebFetch top 3 threads. Read top comments. Extract: specific feature requests, exact user language describing problems, upvote counts if visible.

E2. WebSearch: "site:reddit.com {CompetitorName} vs alternatives \"switched\" OR \"moved\" OR \"left\""
    WebFetch top 2 threads. Why are users switching away? What drove them to leave?

E3. WebSearch: "site:reddit.com {CompetitorName} SSO SAML admin permissions"
    WebFetch top 2 results. Extract exact user quotes about enterprise auth/permissions needs.

E4. WebSearch: "site:reddit.com {CompetitorName} {MY_PRODUCT} comparison"
    WebFetch top 2 results. What do users say when directly comparing the two products?

E5. WebSearch: "site:reddit.com {CompetitorName} 2025 2026 review experience"
    WebFetch top 2 results. Recent user sentiment — what's improved, what's still broken.

E6. WebSearch: "site:reddit.com {CompetitorName} team enterprise frustration"
    WebFetch top 2 results. Team-level and enterprise-specific frustrations.

For each Reddit thread: note the subreddit, post date, upvotes if visible, and pull verbatim quotes from comments (not paraphrases).

---

**PHASE F — Roadmap & Future Plans (target: 3 searches, 2 fetches)**

F1. If ROADMAP_URL found:
    WebFetch it. Extract ALL items — note which are "In Progress", "Planned", "Under Consideration".
    Enterprise-relevant items should be flagged explicitly.

F2. WebSearch: "{CompetitorName} roadmap enterprise 2025 2026 planned upcoming"
    WebFetch top 2 results. Look for: public roadmap links, interviews where founders mention upcoming features, investor update leaks, conference talks.

F3. WebSearch: "{CompetitorName} CEO CTO interview enterprise strategy {SINCE_YEAR}"
    WebFetch t

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [lmiadowicz](https://github.com/lmiadowicz)
- **Source:** [lmiadowicz/claude-skills](https://github.com/lmiadowicz/claude-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-lmiadowicz-claude-skills-feature-category-competitor-research
- Seller: https://agentstack.voostack.com/s/lmiadowicz
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
