Content OS

Discovery

Find articles worth writing about - source-first crawl plus optional search-first URL discovery.

Vertical: Digital · Status: ✅ Live Back to Digital · workflows index


Trigger

Daily morning cron sweep, plus manual fetch per tenant.

Flow

source crawl (configured sources)
   + search-first discovery (LLM-built queries -> Tavily)
        |
isArticleShapedUrl gate     <- rejects landing/hub pages
        |
extraction cascade: Readability -> Tavily -> Crawl4AI/Apify
        |
record scraperSource per row
        |
land as enrichmentStatus: pending

The URL gate

isArticleShapedUrl rejects landing and product pages (/savings-account, /blogs) before they ever reach the feed - only date-stamped, id-bearing or 4+-word-slug URLs pass.

Every row also records scraperSource (local | tavily | crawl4ai | apify | rss | html-fallback), so the extractor mix is queryable rather than guessed at.

Agents involved

Query generation is a small OpenAI call, capped at 700 output tokens and pinned to OpenAI - it must not fall through the script provider chain.

Gaps

Query generation does not learn from what got queued. Falls back to deterministic queries at the configured count when the LLM fails.

Roadmap source

Page 3 - Platform Discovery, Competition Research; page 1 Outside world DATA — see roadmap_ref_extracted.md.

Source: roadmap/workflows/digital/discovery/README.md