Help us improve
Share bugs, ideas, or general feedback.
From media-diet
Operate Media Diet v2 from Claude Code. Activate when the user asks to scan a social feed, analyze algorithmic bias, inspect a profile, or compare feeds across platforms or time. The browser extension handles all browser interaction; Claude Code reads the structured output and generates analysis.
npx claudepluginhub nategarelik/claude-hackathon-team-52How this skill is triggered — by the user, by Claude, or both
Slash command
/media-diet:socialmeshThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Media Diet v2 is an algorithm intelligence platform. A browser extension scans social feeds via direct DOM access and writes structured data to the local filesystem. Claude Code reads that data, synthesizes AlgorithmProfiles, generates AgenticHarnesses, and produces reports. There is no Python backend, no Playwright, and no vault.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Share bugs, ideas, or general feedback.
Media Diet v2 is an algorithm intelligence platform. A browser extension scans social feeds via direct DOM access and writes structured data to the local filesystem. Claude Code reads that data, synthesizes AlgorithmProfiles, generates AgenticHarnesses, and produces reports. There is no Python backend, no Playwright, and no vault.
The extension exposes a WebSocket server on localhost:9242 and writes a file fallback for environments where WebSocket is unavailable.
ws://localhost:9242
Send JSON messages:
{"type": "scan", "platform": "instagram", "options": {"depth": 30}}
{"type": "status"}
{"type": "get_profile", "platform": "instagram"}
Receive JSON responses:
{"type": "scan_complete", "platform": "instagram", "scan_id": "abc123", "item_count": 47}
{"type": "status", "connected_extension": true, "available_platforms": ["instagram", "youtube"]}
{"type": "profile", "platform": "instagram", "data": {...}}
When WebSocket is unavailable, write a command file and poll for the response:
data/extension-bridge/commands/<uuid>.jsondata/extension-bridge/responses/<uuid>.jsonThe extension polls for command files every 2 seconds. Poll the response file until it appears (max 60 seconds), then delete both files.
Command file shape:
{"id": "<uuid>", "type": "scan", "platform": "instagram", "options": {"depth": 30}}
Response file shape:
{"id": "<uuid>", "type": "scan_complete", "platform": "instagram", "scan_id": "abc123", "item_count": 47}
All data is relative to the repository root. These directories are git-ignored.
data/
extension-bridge/
commands/ # outbound requests to the extension
responses/ # inbound responses from the extension
scans/
<platform>/
<scan_id>.json # raw scan output from the extension
profiles/
<platform>/
latest.json # most recent synthesized AlgorithmProfile
<timestamp>.json # historical profiles
harnesses/
<platform>/
latest.json # most recent AgenticHarness
<timestamp>.json # historical harnesses
reports/
<timestamp>.md # rendered editorial reports
Each data/scans/<platform>/<scan_id>.json file contains:
{
"scan_id": "abc123",
"platform": "instagram",
"scanned_at": "2026-04-16T12:00:00Z",
"item_count": 47,
"items": [
{
"id": "...",
"author": "...",
"author_handle": "...",
"content": "...",
"url": "...",
"media_type": "image|video|text",
"engagement": {"likes": 0, "comments": 0, "shares": 0},
"topics": [],
"ts": "..."
}
],
"feed_metadata": {
"scroll_depth": 30,
"duration_ms": 12000
}
}
data/profiles/<platform>/latest.json:
{
"platform": "instagram",
"synthesized_at": "2026-04-16T12:00:00Z",
"source_scan_id": "abc123",
"lean_score": 0.3,
"echo_index": 0.7,
"dominant_topics": ["cooking", "travel", "politics"],
"top_authors": [{"handle": "...", "weight": 0.12, "bias_contribution": 0.04}],
"mirrors": ["accounts amplifying existing views"],
"doors": ["accounts that would broaden the feed"],
"algorithm_signals": {
"recency_bias": 0.6,
"engagement_bias": 0.8,
"topic_concentration": 0.5
}
}
data/harnesses/<platform>/latest.json:
{
"platform": "instagram",
"generated_at": "2026-04-16T12:00:00Z",
"source_profile_synthesized_at": "2026-04-16T12:00:00Z",
"tools": [
{
"name": "analyze_feed_bias",
"description": "...",
"input_schema": {...},
"analysis_prompt": "Given this profile context: <embedded_profile>, analyze..."
}
],
"system_prompt": "You are analyzing an Instagram feed with the following algorithmic profile: ..."
}
The system_prompt field is the pre-embedded context loaded into a mesh-analyst sub-agent.
scan_complete. The raw scan lands in data/scans/<platform>/.AlgorithmProfile. Write it to data/profiles/<platform>/latest.json and a timestamped copy.AgenticHarness — a set of tool definitions with embedded profile context as analysis prompts. Write to data/harnesses/<platform>/latest.json.mesh-analyst sub-agents. Pass the harness system_prompt as their system context. Each analyst answers a specific question (bias, topic mix, echo index, etc.).data/reports/<timestamp>.md.instagram, youtube, x, facebook, github
/mesh-scan <platform> to generate its first profile and harness./mesh — natural-language entry point and router/mesh-scan <platform> — trigger extension scan, synthesize profile and harness/mesh-bias — load latest profile, run analysis, produce bias report/mesh-status — list available profiles per platform and their ages/mesh-tools — list generated harness tools for all platforms/mesh-compare — compare profiles across platforms or across time