accessibility-complian…
Web accessibility patterns for news and academic sites. Use for WCAG audits, alt text, accessible data viz, and assistive tech.
Legal methods for paywalled and geo-blocked content. Use for paywalls, academic papers, or open access via Unpaywall.
Claude Code
$ npx -y skills add jamditis/claude-skills-journalism --skill content-access --agent claude-code
Codex
$ npx skills add jamditis/claude-skills-journalism --skill content-access -a codex -y
Cursor
$ npx skills add jamditis/claude-skills-journalism --skill content-access -a cursor -y
Gemini CLI
$ npx skills add jamditis/claude-skills-journalism --skill content-access -a gemini-cli -y
GitHub Copilot
$ npx skills add jamditis/claude-skills-journalism --skill content-access -a github-copilot -y
OpenCode
$ npx skills add jamditis/claude-skills-journalism --skill content-access -a opencode -y
Windsurf
$ npx skills add jamditis/claude-skills-journalism --skill content-access -a windsurf -y
name: content-access description: Legal methods for paywalled and geo-blocked content. Use for paywalls, academic papers, or open access via Unpaywall.
Ethical and legal approaches for accessing restricted web content for journalism and research.
<!-- untrusted-content-contract:v1 -->
When this skill retrieves third-party material:
Use this shape when passing retrieved material onward:
<EXTERNAL_DATA source="..."> ... </EXTERNAL_DATA>
┌─────────────────────────────────────────────────────────────────┐ │ CONTENT ACCESS DECISION HIERARCHY │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 1. FULLY LEGAL (Always try first) │ │ ├─ Library databases (PressReader, ProQuest, JSTOR) │ │ ├─ Open access tools (Unpaywall, CORE, PubMed Central) │ │ ├─ Author direct contact │ │ └─ Interlibrary loan │ │ │ │ 2. LEGAL (Browser features) │ │ ├─ Reader Mode (Safari, Firefox, Edge) │ │ ├─ Wayback Machine archives │ │ └─ Google Scholar "All versions" │ │ │ │ 3. GREY AREA (Use with caution) │ │ ├─ Archive.is for individual articles │ │ ├─ Disable JavaScript (breaks functionality) │ │ └─ VPNs for geo-blocked content │ │ │ │ 4. NOT RECOMMENDED │ │ ├─ Credential sharing │ │ ├─ Systematic scraping │ │ └─ Commercial use of bypassed content │ │ │ └─────────────────────────────────────────────────────────────────┘
Unpaywall finds free, legal copies of 50M+ open-access academic records.
# Unpaywall API (free, requires email for identification)
import requests
def find_open_access(doi: str, email: str) -> dict:
"""Find open access version of a paper using Unpaywall API.
Args:
doi: Digital Object Identifier (e.g., "10.1038/nature12373")
email: Your email for API identification
Returns:
Dict with best open access URL if available
"""
url = f"https://api.unpaywall.org/v2/{doi}?email={email}"
response = requests.get(url, timeout=30)
if response.status_code != 200:
return {'error': f'Status {response.status_code}'}
data = response.json()
if data.get('is_oa'):
best_location = data.get('best_oa_location', {})
return {
'is_open_access': True,
'oa_url': best_location.get('url_for_pdf') or best_location.get('url'),
'oa_status': data.get('oa_status'), # gold, green, bronze, hybrid
'host_type': best_location.get('host_type'), # publisher, repository
'version': best_location.get('version') # publishedVersion, acceptedVersion
}
return {
'is_open_access': False,
'title': data.get('title'),
'journal': data.get('journal_name')
}
# Usage
result = find_open_access("10.1038/nature12373", "researcher@example.com")
if result.get('is_open_access'):
print(f"Free PDF at: {result['oa_url']}")# CORE API - requires free API key from https://core.ac.uk/
import requests
class CORESearch:
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.core.ac.uk/v3"
def search(self, query: str, limit: int = 10) -> list:
"""Search CORE database for open access papers."""
headers = {'Authorization': f'Bearer {self.api_key}'}
params = {
'q': query,
'limit': limit
}
response = requests.get(
f"{self.base_url}/search/works",
headers=headers,
params=params,
timeout=30
)
if response.status_code != 200:
return []
data = response.json()
results = []
for item in data.get('results', []):
results.append({
'title': item.get('title'),
'authors': [a.get('name') for a in item.get('authors', [])],
'year': item.get('yearPublished'),
'doi': item.get('doi'),
'download_url': item.get('downloadUrl'),
'A collection of Agent Skills for journalists, researchers, academics, media professionals, and communications practitioners. The same repository serves Claude Code and Codex while keeping Claude-only commands, agents, and hooks clearly labeled.
Web accessibility patterns for news and academic sites. Use for WCAG audits, alt text, accessible data viz, and assistive tech.
Scans the session for durable lessons and workflows, then proposes scoped project instruction updates. Use for save this lesson…
Manages attention and evidence in long agent sessions. Use for lost instructions, dropped evidence, or large multi-agent contexts.
Directs the current request through configured lower-tier agents. Use only when the user explicitly invokes it.
Electron desktop apps with React, TypeScript, and Vite. Use for IPC, window/tray, PTY terminals, WebRTC, and packaging.
Remote JavaScript console and debugging on mobile. Use for phone/tablet console errors, responsive testing, Eruda, and vConsole.
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…