What it does
slop-filtered-brief takes a topic and returns a research brief built only from sources that read as human-authored.
{
"topic": "x402 payment protocol adoption",
"recency": "month"
}
returns the surviving sources grouped by type, plus a count of what was excluded:
{
"kept_sources": [
{ "type": "web", "title": "Adoption picks up", "url": "https://human-blog.example/post-1", "snippet": "...", "ai_checked": true }
],
"excluded_ai_generated": [{ "url_or_handle": "https://content-farm.example/post-2", "probability_ai_generated": 0.9 }],
"counts": { "web": 1, "news": 1, "x": 1, "excluded_ai": 1, "unscored": 1 }
}
Why
Our other research composites (research-radar, research-topic-scan, news-digest) aggregate everything a search leg returns. That's the right default when a buyer wants breadth. This one is for the opposite job: a research agent that doesn't want to burn its own context, or its own citation, on a source a detector would flag as AI-generated filler. It runs web-search, news-search, and x-search, then sends every candidate source with enough text through ai-content-detector and drops anything scored 0.65 or higher probability of being AI-generated, the same threshold the detector itself uses for a "likely_ai" verdict.
Degradation
web-search is the required leg, if it fails the call fails with a 424. news-search and x-search (skippable with include_x: false) are optional and degrade the response instead of failing it. The ai-content-detector calls are optional per source too: a detector timeout or error keeps that source in the brief, unscored, rather than silently dropping it or excluding it on a call we couldn't actually make. Sources too short to score (mostly bare headlines from news search) are kept the same way, we can't judge what we can't measure.
This is a style-signal heuristic, not a forensic AI-detection tool. Treat the excluded_ai_generated count as a quality signal for triage, not a legal or academic finding.
Price: $0.06.