npx skills add ...
npx skills add moonlight-lupin/agent-skills --skill media-analyzer
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.
npx skills add moonlight-lupin/agent-skills --skill media-analyzer
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.
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:
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.
From this skill directory:
Save scan output and generate a report:
Review the loaded-language dictionary:
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.
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:
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.
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:
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.
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:
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.
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:
Script support: The script can count questions and loaded words that may indicate framing. Framing judgment requires analyst or LLM review.
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:
Script support: The script cannot know what is missing. Use a web search tool to identify available context, primary sources, timelines, and caveats.
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:
Script support: scripts/analyze.py detects fear words, outrage words, pity appeals, appeal-to-authority phrases, and urgency phrases.
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.
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.
Run rule-based analysis:
The scan reports:
Completion criterion: analysis.json exists and includes the article's word count, technique count, and bias-signal spectrum score.
Use contextual research for what the script cannot know:
Completion criterion: the analyst can state what relevant context was checked and whether missing context was detected, not detected, or uncertain.
Generate a draft report:
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."
Reports should follow this structure:
Use the spectrum as an intensity scale for observable bias signals, not a political label:
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:
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.
Critical rules:
See references/neutrality-rules.md for the full checklist.
python scripts/analyze.py wordlist --format tablepython scripts/analyze.py scan --input article.md --output analysis.jsonpython scripts/analyze.py report --scan analysis.json --output report.md# 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 biasNeutral ──── Slight lean ──── Clear lean ──── Partisan ──── Propaganda