| name | competitive-monitoring |
| description | Monitors competitor activity: new releases, feature announcements, pricing changes, funding rounds, acquisitions. Produces a competitive update report that feeds into the synthesis layer.
|
| agents | {"primary":"research-agent","supporting":[]} |
| inputs | ["discovery-config.yaml (competitors list)",".factory/discovery/competitive-baseline.md (last known state)"] |
| outputs | [".factory/discovery/competitive-update-YYYY-MM-DD.md",".factory/discovery/competitive-baseline.md (updated)"] |
Competitive Monitoring
Monitors competitor activity continuously between discovery runs. Detects
changes in the competitive landscape -- new releases, pricing shifts, funding,
acquisitions, shutdowns, and new entrants -- and produces a structured
competitive update report.
Trigger
- Scheduled -- weekly or as configured in
discovery-config.yaml schedule.competitive_monitoring
- Manual -- human requests "Check competitor activity for [product]"
- Event-driven -- triggered by news alerts or discovery engine
Prerequisites
discovery-config.yaml exists with products[*].competitors configured
.factory/discovery/competitive-baseline.md exists (or will be created on first run)
research-agent is the canonical MCP caller (DF-002); this skill spawns it for delegated research calls. Its primary tool is perplexity_research (deep research, backed by sonar-deep-research), with perplexity_search/perplexity_ask for quick lookups
Monitoring Targets
For each competitor in discovery-config.yaml:
| Signal | How Detected | Urgency |
|---|
| New feature/release | perplexity_research: "[competitor] release notes [month year]" | HIGH if overlaps with our roadmap |
| Pricing change | perplexity_search: "[competitor] pricing" vs baseline | MEDIUM |
| Funding round | perplexity_search: "[competitor] funding" | LOW (info only) |
| Acquisition | perplexity_search: "[competitor] acquired" | HIGH (market shift) |
| Shutdown/pivot | perplexity_search: "[competitor] shutdown OR pivot" | HIGH (opportunity) |
| New competitor | perplexity_research: "[domain] new startup 2026" | MEDIUM |
Monitoring Workflow
Step 1: Load Competitor List
Read discovery-config.yaml and extract the competitors array for the target
product. If no competitors are configured, exit with no-op.
Step 2: Load Competitive Baseline
Read .factory/discovery/competitive-baseline.md for the last known state of
each competitor. If the file does not exist (first run), the monitoring run
establishes the baseline.
# Competitive Baseline
## Last Updated: YYYY-MM-DD
### Competitor A
- **Latest Known Release:** vX.Y.Z (YYYY-MM-DD)
- **Key Features:** [list]
- **Pricing:** [current pricing model]
- **Funding Status:** [last known round]
- **Status:** active
### Competitor B
- ...
Step 3: Research Each Competitor
For each competitor, spawn research-agent to run these queries (deep perplexity_research for release/feature scans; perplexity_search for the single-fact baseline checks):
-
Release check: "[competitor] release notes [current month] [current year]"
- Compare against baseline's
Latest Known Release
- If new release detected: extract version, date, key features
-
Pricing check: "[competitor] pricing [current year]"
- Compare against baseline's
Pricing
- Flag changes in pricing model, tiers, or pricing levels
-
Funding check: "[competitor] funding round [current year]"
- Compare against baseline's
Funding Status
- Note amount, investors, valuation if available
-
Acquisition check: "[competitor] acquired OR acquisition [current year]"
- Detect if competitor was acquired or acquired another company
-
Shutdown/pivot check: "[competitor] shutdown OR pivot OR closing [current year]"
- Detect if competitor is shutting down or pivoting strategy
Step 4: Scan for New Entrants
Research the product's domain for new competitors (deep research — this is an open-ended landscape scan, not a single-fact lookup):
- perplexity_research: "[product domain] new startup [current year]"
- perplexity_research: "[product domain] new tool launch [current year]"
- Compare against known competitor list
Step 5: Classify Urgency
For each detected change, assign urgency:
| Urgency | Criteria |
|---|
| HIGH | Competitor ships feature our customers are requesting; competitor acquired; competitor shuts down (opportunity) |
| MEDIUM | Pricing change; new entrant in our space; funding round (signals acceleration) |
| LOW | Minor release; informational funding news; no direct impact on our roadmap |
Step 6: Produce Competitive Update
Write .factory/discovery/competitive-update-YYYY-MM-DD.md:
---
document_type: competitive-update
date: YYYY-MM-DD
product: [product-name]
competitors_monitored: [N]
changes_detected: [N]
---
# Competitive Update: YYYY-MM-DD
## Changes Detected
| Competitor | Change | Date | Urgency | Implication |
|-----------|--------|------|---------|------------|
| [name] | [change] | [date] | HIGH/MED/LOW | [what it means for us] |
## No Change (stable competitors)
[List competitors with no detected changes]
## New Entrants
[Any new competitors detected]
Step 7: Update Baseline
Update .factory/discovery/competitive-baseline.md with any newly detected
state changes. Preserve history: append a ## Change Log section at the bottom
of each competitor entry.
Quality Gate
Failure Modes
- If a data source is unavailable (Perplexity timeout, API error): do not silently skip — per the research-agent's mandatory-MCP gate, flag the source as UNAVAILABLE with the verbatim error, continue with remaining sources, and note the gap in the report
- If no changes detected for any competitor: produce a "no change" report (not a silent no-op)
- If a new entrant cannot be verified: mark as UNVERIFIED and include in report with caveat
Quality Criteria