moonlight-lupin/agent-skills/media-analyzer

Claude Code and agent skill by moonlight-lupin/agent-skills

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Use when an article or media piece needs rhetorical or technique-focused analysis — detects rhetorical tools (loaded language, cherry-picking, source selection bias, framing, omission, emotional appeals, false balance) in articles and produces a structured analysis report. Identifies specific techniques without labeling political positions.

Install

npx vskill@latest install moonlight-lupin/agent-skills/media-analyzer

SKILL.md

Media Analyzer

Overview

Media Analyzer is a technique-focused workflow for reading news articles, opinion pieces, press releases, and other media with a critical but neutral lens. Media texts often use rhetorical choices to shape perception: emotionally charged verbs, selective statistics, source mixes, framing metaphors, omissions, emotional appeals, and disproportionate presentation of evidence. This skill identifies those observable techniques systematically without deciding which political position is correct.

Use this skill when the goal is to understand how a text guides interpretation. Do not use it to label an outlet, author, or article as left-wing, right-wing, conservative, liberal, pro-X, or anti-Y. The output is a structured analysis report that surfaces technique usage and leaves conclusions to the reader.

Core Principle: Detect Techniques, Not Positions

The central rule is: DETECT TECHNIQUES, NOT POSITIONS.

Never label a source as "left-wing," "right-wing," "conservative," "liberal," or "biased toward X." Instead, identify specific rhetorical tools:

  • loaded words and their neutral alternatives;
  • source types quoted or omitted;
  • statistics cited and relevant data not cited;
  • framing devices such as metaphor, naming choices, presupposition, or loaded questions;
  • emotional appeal patterns;
  • false balance between positions with unequal evidence weight.

A valid finding says: "The article uses three high-intensity verbs in the first four paragraphs." An invalid finding says: "The article is biased against the policy." Keep the analysis observable, specific, and politically direction-neutral.

Quick Start

From this skill directory:

bash
python scripts/analyze.py scan --input article.md

Save scan output and generate a report:

bash
python scripts/analyze.py scan --input article.md --output analysis.json
python scripts/analyze.py report --scan analysis.json --output report.md

Review the loaded-language dictionary:

bash
python scripts/analyze.py wordlist --format table

Completion criterion: the report lists detected technique signals, identifies where contextual research is still required, explains the bias-signal spectrum as intensity only, and avoids political-direction labels.

The 7 Technique Categories

1. Loaded Language

Definition: Emotionally charged verbs, adjectives, nouns, or modifiers replace neutral wording and guide the reader's reaction.

Detection criteria: Compare word choice against neutral alternatives. Ask whether the same factual event could be reported with less emotional force.

Examples:

  • "slammed" vs. "responded";
  • "devastating" vs. "significant";
  • "blasted" vs. "criticized."

Script support: scripts/analyze.py counts loaded words against a built-in word list of aggressive verbs, emotional adjectives, dismissive terms, and framing words. Each detected instance includes paragraph context and a neutral alternative.

2. Cherry-Picking

Definition: Citing only data, examples, or time periods that support a thesis while leaving out readily available qualifying or conflicting data.

Detection criteria: Compare cited statistics against available data on the topic. Check time windows, baselines, revisions, uncertainty, and representative comparison groups.

Examples:

  • citing one month of sales growth while omitting the annual decline;
  • highlighting one school result without district-wide comparison;
  • reporting a single survey question while omitting the full survey context.

Script support: The script does not verify cherry-picking. Use it to scan the article, then use a web search tool and web extraction tool to locate primary data and compare what exists against what was cited.

3. Source Selection Bias

Definition: Quoting or paraphrasing sources from only one institutional type or perspective when the topic has relevant perspectives beyond that group.

Detection criteria: Count and categorize quoted or attributed sources by institutional type: official, expert, citizen, organization, or unknown. Then assess whether the source mix fits the topic.

Examples:

  • a transit article quotes only agency officials and no riders or independent planners;
  • a workplace article quotes only management and no employees or outside labor experts;
  • a product safety story quotes only a manufacturer and no regulator or customer.

Script support: scripts/analyze.py extracts attribution patterns such as "according to X," "X stated," "said X," and quoted statements followed by attribution. It categorizes source mentions by keyword.

4. Framing

Definition: Presenting information in a way that guides interpretation through naming, metaphor, order, headline wording, presupposition, or question structure.

Detection criteria: Identify framing devices such as metaphor, presupposition, loaded questions, and naming choices.

Examples:

  • "rightsizing" frames job cuts as correcting a size error;
  • "gaming industry" vs. "gambling industry" uses different naming frames for the same businesses;
  • "streamlining" presupposes the existing process was inefficient;
  • "Why did the plan fail?" presupposes failure before demonstrating it.

Script support: The script can count questions and loaded words that may indicate framing. Framing judgment requires analyst or LLM review.

5. Omission

Definition: Relevant context is left out in a way that changes how readers understand the article.

Detection criteria: Check what topics, baselines, time periods, caveats, or primary-source context are absent but relevant.

Examples:

  • incident counts without a baseline rate;
  • budget changes without inflation-adjusted context;
  • study results without sample size or limitations.

Script support: The script cannot know what is missing. Use a web search tool to identify available context, primary sources, timelines, and caveats.

6. Emotional Appeals

Definition: Appeals to fear, outrage, pity, anger, urgency, or authority that may steer reader response or substitute for evidence.

Detection criteria: Identify emotional manipulation patterns and compare their intensity against the evidence provided.

Examples:

  • "think of the children" used as a debate-closing appeal;
  • fear-mongering language such as "catastrophe" without scale or likelihood;
  • outrage manufacturing through repeated scandal terms without proportional evidence.

Script support: scripts/analyze.py detects fear words, outrage words, pity appeals, appeal-to-authority phrases, and urgency phrases.

7. False Balance

Definition: Presenting unequal evidence positions as equivalent.

Detection criteria: Compare the weight given to majority and minority positions, including source expertise, evidence quality, and consensus level.

Example: If 97% of relevant scientists say X and 3% say Y, an article gives equal space to both without explaining the evidence imbalance.

Script support: Source counts can suggest a space-allocation pattern, but false-balance analysis requires contextual research into evidence weight.

The 4-Stage Pipeline

1. Extract

Pull the article text into Markdown or plain text. Identify the title, author, publication date, source URL if available, sources cited, direct quotes, and visible statistics.

Completion criterion: the article text is available locally and source metadata is recorded if available.

2. Scan

Run rule-based analysis:

bash
python scripts/analyze.py scan --input article.md --output analysis.json

The scan reports:

  • loaded-language count and instances;
  • source mention extraction and source-type counts;
  • emotional appeal patterns;
  • paragraph count, average sentence length, questions, and exclamation marks;
  • technique-count intensity score.

Completion criterion: analysis.json exists and includes the article's word count, technique count, and bias-signal spectrum score.

3. Contextualize

Use contextual research for what the script cannot know:

  • Cherry-picking: use web search to find primary datasets, longer time series, revisions, and independent summaries.
  • Omission: search for relevant baselines, caveats, event history, and missing affected groups.
  • False balance: compare evidence weight, source expertise, and consensus level.
  • Framing: review headline, lead, order, naming choices, and presupposed questions.

Completion criterion: the analyst can state what relevant context was checked and whether missing context was detected, not detected, or uncertain.

4. Report

Generate a draft report:

bash
python scripts/analyze.py report --scan analysis.json --output report.md

Then fill in context-dependent sections using the contextual research. Use templates/analysis-report.md when writing a report manually.

Completion criterion: the final report contains specific instances, a bias-signal spectrum, and a "What's Missing" section populated from research or marked "not detected / insufficient context."

Output Format

Reports should follow this structure:

markdown
# Media Analysis Report
## Source: [title or filename]
## Overview
-Word count: N
-Techniques detected: N
-Bias-signal spectrum: [Neutral/Slight lean/Clear lean/Partisan]
-Spectrum note: intensity of observable rhetorical and source-selection signals; not ideology or political direction.
## Techniques Detected
### 1. Loaded Language (N instances)
-"slammed" (para 3) — neutral alternative: "responded"
-"devastating" (para 7) — neutral alternative: "significant"
### 2. Source Selection (N sources)
-Official: 2, Expert: 1, Citizen: 1, Organization: 0, Unknown: 0
-[Any source-type concentration noted]
### 3. Emotional Appeals (N instances)
-Fear-based: 1
-Appeal to authority: 1
## Bias-Signal Spectrum
Neutral ──── Slight lean ──── Clear lean ──── Partisan ──── Propaganda
↑ here
This spectrum rates the density and intensity of observable rhetorical tools, framing choices, and source-selection signals. It does not label the outlet, author, article, or political position.
## What's Missing
[Contextual research findings: relevant context omitted, not detected, or uncertain]
## Notes
-Analysis detects techniques, not political positions
-Intensity rating reflects density of rhetorical tools, not direction of bias

The Bias-Signal Spectrum

Use the spectrum as an intensity scale for observable bias signals, not a political label:

text
Neutral ──── Slight lean ──── Clear lean ──── Partisan ──── Propaganda

The score rates density and intensity of rhetorical tools, framing choices, source-selection patterns, and other observable signals. It does not say what direction the article leans. The script counts signals only for things that are unusual in neutral copy — normal journalism must not score:

  • loaded-language hits (any) → 1 signal;
  • single-perspective sourcing (3+ sources, all one type) → 1 signal — plain attribution never counts;
  • distinct emotional-appeal patterns → up to 2 signals (capped, so a wordlist pile-up alone can't reach "Partisan");
  • 2+ rhetorical questions → 1 signal (a single question is ordinary);
  • any exclamation marks → 1 signal (rare in straight news copy).

The total maps to the label:

  • 0 signals → Neutral;
  • 1-2 signals → Slight lean;
  • 3-4 signals → Clear lean;
  • 5+ signals → Partisan.

Reserve the word "Propaganda" for exceptional human-reviewed cases with dense, coordinated technique usage and strong evidence that informational accuracy is subordinated to persuasion. Do not apply it casually.

Neutrality Rules

Critical rules:

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
76
Repository forks
12
7-day trend score
22

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/moonlight-lupin/agent-skills/media-analyzer/badge)](https://verified-skill.com/skills/moonlight-lupin/agent-skills/media-analyzer)

Something wrong with this skill or its page? Tell us.