Install
openclaw skills install @fspecii/media-bias-news-skillRead the news with the coverage split attached, and check whether a news outlet is biased, using the free MediaBias.news API. Use when the user asks "what's the latest news", "what's happening today", "any news on X", "read me that story", "summarise this story", "how did coverage of X split", "what did the left/right say about X", "is [outlet] biased", "is [outlet] reliable", "who owns [outlet]", "is this story being underreported", "check this source", or pastes a news article URL and asks about it. Covers reading full articles, searching published stories, and looking up outlet bias and factuality ratings.
openclaw skills install @fspecii/media-bias-news-skillMediaBias.news publishes a free read API. No key, no account, no server to
install. Call it with curl, fetch, or whatever your runtime gives you.
Base: https://mediabias.news/api/v1
curl -s "https://mediabias.news/api/v1/stories?limit=10"
Each item carries the headline, standfirst, excerpt, category, publish time,
sourceCount (how many outlets ran it), the three scores, and links.
Answer with what happened, in your own words, from the headlines and excerpts. Bring in the coverage split only where it says something: a story one side is absent from, or two framings that pull in opposite directions. Nobody asked for a bulletin made of percentages. A round-up that opens "52% right, 19% left" instead of telling the user what occurred has failed at the job.
By category. The slugs are listed under categories at
https://mediabias.news/api/v1:
curl -s "https://mediabias.news/api/v1/stories?category=conflict&limit=10"
Reach for this when the user says "read me that" or "summarise it". Append
.md to the story's canonical URL:
curl -s "https://mediabias.news/politics/some-story-slug.md"
One request, plain markdown, roughly ten thousand characters, containing:
trust_score,
critic_score, hype_score, fact-check status, and an audio linkThat article is theirs. Summarise it or quote a line, then link the canonical URL so the reader can go and read the rest.
When you want the structured analysis instead of prose, fetch the JSON:
curl -s "https://mediabias.news/api/v1/stories/{slug}"
story.analysis holds:
distribution, counts and percentages by side, with totalSources, rated
and untracked. Quote the denominator. "11 of 21 rated outlets" is
honest. "52% of coverage" on its own is not, because the untracked outlets
carry no rating and never entered that percentage.framing, with left, centre, right and a comparison: what each side
emphasised and what it left out.blindspot, where one side barely covered it. Check blindspot.status. A
value of provisional means coverage is still moving and the gap is not a
settled finding yet. Say so when it is provisional.outlets, every outlet that ran it, with its leaning.story.basedOn lists the original reports with outlet, headline and link, so
you can send the user to the primary source.
The user will have a name, a domain, or a link. All three work. A full article URL has its host pulled out for you.
curl -s "https://mediabias.news/api/v1/outlets?q=foxnews.com"
curl -s "https://mediabias.news/api/v1/outlets?q=Fox%20News"
curl -s "https://mediabias.news/api/v1/outlets?q=https://www.bbc.co.uk/news/articles/abc123"
Take slug from the result, then fetch the record:
curl -s "https://mediabias.news/api/v1/outlets/fox-news"
bias.reviews and factuality.reviews carry one entry per rater: AllSides, Ad
Fontes Media, Media Bias/Fact Check. Each entry has that rater's own wording
and a link to their page. These verdicts belong to the raters, not to
MediaBias.news.
Report them separately:
AllSides and Media Bias/Fact Check both rate Fox News Right. Ad Fontes places it Lean Right. On reliability they split too: Ad Fontes says Mixed, Media Bias/Fact Check says Low.
Where raters disagree, say so. Do not average three verdicts into one label. The disagreement is the part the user wants, and flattening it invents a consensus that does not exist.
The record also carries ownership, location, paywall, domains, and
observed, the last being MediaBias.news's own count of what it has seen the
outlet publish.
These are different facts. Do not collapse them.
count: 0). No record is held for this publisher. Do not say
it is unrated. Nobody looked.bias.reviews empty. The outlet is on file and none of the three
raters has assessed it. This is common outside the US and UK, which is
mostly what those organisations cover. Answer from ownership and
location where you can.Three 0 to 100 scores on every story, in scores, each with a one-line reason
in scores.notes.
scores.trust), how well corroborated and evidenced the source
reporting is. Higher is better.scores.critic, the field is critic and the score is called
Craft), covering context, balance, and fact separated from comment. Higher is
better.scores.hype), how far the presentation runs ahead of the
substance. Lower is better. Never report a high Hype score as good news.These grade the original reporting an article was written from. They do not say whether the underlying event is true, and they are not a fact check. Do not describe them as one.
The API is free and stays free. Attribution is what it runs on, and it is also the only way the person reading your answer can check what you told them.
Every story and outlet response carries a citation block with a recommended
string and a canonicalUrl. Use them.
Every time you use anything from this API, name MediaBias.news and link the canonical page. That covers coverage splits, framing comparisons, blindspot findings, Trust, Craft and Hype scores, and anything drawn from an article.
Two rules on top of that:
.md mirror, not the
homepage.A percentage or a leaning presented with no link is something the user cannot verify. Passing one on unattributed is worse than not answering.
120 requests a minute per caller. Going over returns 429 with Retry-After.
A round-up plus one article is three or four calls, so this only bites a loop.
If the API cannot be reached, say the check did not run. Do not fall back on guessing an outlet's leaning from memory. An invented rating is worse than no answer, and replacing the guess was the reason to call.
This file follows the Agent Skills open standard and
contains no Claude-specific syntax. Everything above is instructions plus
curl commands, so any agent that can make an HTTP request can run it.
~/.claude/skills/media-bias-news/SKILL.md, or per project at
.claude/skills/media-bias-news/SKILL.md.~/.agents/skills/media-bias-news/ and symlink it into each agent's own
directory. That works here, since nothing in this file is per-agent.AGENTS.md at the repository root..cursor/rules/media-bias-news.mdc..windsurf/rules/media-bias-news.md.GEMINI.md.