| name | critical-reception |
| description | Query Metacritic, GameSpot, and TVGuide (resolved and read via Bright Data) for a personality's existing game/film/TV adaptation, extracting critic/user scores, narrative themes critics highlighted, and reception debates. Use when generate-psych-profile or backlog-ranking want a critical-reception signal on top of gather-citations' facts and fandom-lore's fan interpretation. |
| metadata | {"agent":"research-factcheck","source":"Project Atlas Agent Skills Manifest (Critical Reception enrichment)","layer":"L5-content-verify"} |
critical-reception
Harvest professional critic/audience reception for a personality's existing adaptation and
structure it into signal the narrative stage can use -- without ever storing the raw review text.
When to use
- Hidden Legends Discovery flagged an
existing_adaptation (title + type) for a discovered
personality -- this skill only runs when that field is present. Most discoveries won't have
one; skip entirely rather than guessing a source_work.
- Distinct from
fandom-lore: this is keyed by the work (the specific film/game/TV series),
not the subject directly -- a character doesn't have a Metascore, the release does.
Sources (spec §5.5 mapping, Critical Reception enrichment)
- Bright Data (live) via the
brightdata MCP server -- same vendor as gather-citations/
fetch-signals/fandom-lore, no new vendor: search_engine to resolve each of
site:metacritic.com, site:gamespot.com, site:tvguide.com for <source_work>, then
scrape_as_markdown on whichever resolve (not every work will be covered by all three).
Function signature (manifest contract)
def critical_reception(subject: str, source_work: str) -> dict:
"""Return structured critical/audience reception signal for a personality's adaptation, or
an empty/zero-confidence result if none of the three sources cover it."""
Inputs / Outputs
- Input:
subject, source_work.
- Output:
{subject, source_work, sources_resolved[], critic_score?, user_score?, score_divergence_note?, narrative_themes[], reception_debates[], coverage_confidence, provenance: "critical_reception"} -- see hermes/agents/critical-reception/schema.json.
Copyright-safe rule (spec §2.5)
Scraped review/score pages are a transient input to the extraction call only -- never write raw
review text to storage. Persist only the structured signal, each theme/debate backed by a short
(<25 word) paraphrase in evidence, never a verbatim quote.
Provenance rule
Tagged provenance: "critical_reception" -- a third tier distinct from gather-citations'
canon_fact and fandom-lore's fan_interpretation. This is professional critical opinion, not
verified fact and not fan headcanon; downstream agents hedge it accordingly ("critics noted...").
Implementation
- Resolve sources: call
brightdata's search_engine three times (site:metacritic.com <source_work>, site:gamespot.com <source_work>, site:tvguide.com <source_work>). Keep
whichever of the three actually resolve to that domain -- not all three will exist for every
work (e.g. TVGuide won't cover a game).
- If none resolve, stop here and return
{subject, source_work, sources_resolved: [], narrative_themes: [], reception_debates: [], coverage_confidence: 0, provenance: "critical_reception"} directly -- don't invoke the LLM to invent a critic's
opinion for a work none of the three cover.
- Read each resolved page: call
brightdata's scrape_as_markdown on each.
- Call the
hermes-bridge MCP tool run_judgment_agent(insight_type="critical-reception", query=<ask>, context={"subject": subject, "source_work": source_work, "sources_resolved": [...], "scraped_content": [...]}). Hits Hermes's POST /v1/agents/critical-reception
(hermes/agents/critical-reception/), same self-correcting LLM loop / mock-fallback pattern
as gather-citations/fandom-lore -- real retrieved content into context from the start.
Backend dependency
- API keys: Bright Data is live (already wired for
gather-citations/fetch-signals/
fandom-lore) -- no new vendor, no new budget line.
- Writing structured signal to the graph (Railway) has the same stubbed status as
gather-citations'/fandom-lore's output until the Postgres/AGE backbone is wired.
Model
deepseek-direct/deepseek-chat for extraction. Multiple scraped pages per call -- apply Jina
Reader-style compression if combined content exceeds prompt budget (spec §11.3).