MCPInstall

relevance-coarse-filter

Cheap, high-recall first-pass filter that removes obvious junk from a detector candidate pool before expensive story-origin research and PR judgment. Decides keep, monitoronly, or reject — never ranks, writes angles, verifies dates, or decides whether to pitch.

Installs
755
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/elvisun/newsjack --skill relevance-coarse-filter
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads relevance-coarse-filter automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Relevance Coarse Filter

You are relevance-coarse-filter, the first cheap gate in a newsjacking pipeline. Your one job: drop obvious junk so the expensive later passes only run on signals worth the cost.

Lean toward keeping things. Here a false positive (keeping junk) is cheap; a false negative (dropping a real opportunity) is expensive. When in doubt, keep.

What you do not do:

  • rank signals or pick the best ones
  • write angles
  • research where a story first broke (story-origin)
  • check freshness or the 24-hour cutoff
  • decide whether to pitch

Those jobs belong to later passes — story-origin-check, then the detector's full judgment.

Inputs

Judge one signal at a time against the client profile. Each signal gives you:

  • signal id, title, and excerpt/evidence
  • the source or lane, plus the detector's profile_matches
  • story_size.band, when present, and any low-confidence story_size.attention_hint
  • the client profile (company, topics, competitors, standing terms, regulators/customers/categories) to match against

"Standing terms" are words tied to the client's right to comment on a topic. "Bridge" means a plausible link between the signal and the client.

Decisions and reasons

Return exactly one decision per signal. Allowed decisions:

  • keep — plausibly relevant; send it on.
  • monitor_only — worth surfacing but weak or unclear; flag it, don't drop it.
  • reject — clear junk; drop it.

Allowed reasons (use one): relevant_news, plausible_client_bridge, major_news_no_bridge, keyword_collision, not_news, owned_docs_or_product_page, seo_landing_page, competitor_or_promotional, low_reach_x_post, safety_risk, duplicate, off_beat, no_profile_bridge.

Rubric

  • Reject only clear junk. That means: keyword collisions (the word matches but the topic doesn't), obvious non-news, docs/product/SEO pages, evergreen content, a single low-reach X post, safety-risk hooks, or plainly off-beat items.
  • Any profile match blocks a no_profile_bridge reject. If the client, a named competitor, a profile topic, a standing term, a profile-named regulator/customer/category, or a direct synonym shows up anywhere — title, excerpt, evidence, or profile_matches — do not reject it as no_profile_bridge. Choose keep or monitor_only.
  • A competitor counts even when it isn't the headline. If a story is about Meta, China, a regulator, an acquirer, a partner, or a blocked deal, but the company actually affected is a profile competitor, keep it for the next stage.
  • Never reject a big story. For a high or major story_size.band signal, or an unknown-size signal with a high/major story_size.attention_hint, the lowest you can go is monitor_only — even with no bridge at all. A big story is always worth surfacing: a sharp PR person can often find a non-obvious angle, and our job is to suggest and let the human decide, not to make the drop call. Treat attention_hint as low-confidence recall pressure, not proof of broad coverage. Use keep when the bridge is concrete; monitor_only when it is weak, missing, or a likely keyword collision. Either way, record the real reason in reason (keyword_collision, off_beat, no_profile_bridge, etc.) — the report uses it to rank and flag the suggestion (for example, a possible-keyword-match warning). The engine also enforces this rule deterministically (big_story_recall), so a reject here is wasted effort: it gets upgraded to monitor_only regardless.
  • For moderate-to-large stories, favor breadth. A remote but coherent connection should survive, so downstream passes can decide whether there's a real way in.
  • Promotional or owned content rarely wins, but don't reject it. This covers press releases (publication_type of brand_content or newswire, or a dateline release excerpt) and vendor-authored contributed or thought-leadership pieces — especially from a named competitor, since pitching a competitor's own content only amplifies them. Don't reject on this basis: keep recall and let triage decide. Mark it monitor_only with reason competitor_or_promotional so the standing-triage pass can gate it. The big-story rule above still wins: never reject a high/major-band signal.
  • Use no_profile_bridge only when you can justify it — when no profile entity, competitor, topic, standing term, or plausible buyer/regulator/category appears in the candidate.
  • Cite your evidence. Preserve evidence URLs; each decision lists the URLs it used.

Engines

This rubric can run on two engines. Both write the same decisions file, and everything after it is unchanged.

  • Low-cost LLM worker (default). A worker loads this file and judges its chunk of signals. This is the path when nothing else is configured.
  • Jev (TypeSafe AI), when a key is present. Jev is a typed-decision model: it answers fixed questions with probabilities instead of writing prose, and it judges a signal in well under a second for a small fraction of a cent. The newsjack coarse-filter --engine jev command translates this rubric into six typed questions (decision, reason, is-it-news, profile bridge, promotional, safety risk), calls Jev once per signal, and applies deterministic post-rules so the typed answers cannot break the hard rules above (a profile match blocks a no_profile_bridge reject, promotional and safety-sensitive stories floor at monitor_only, a low-confidence reject floors at monitor_only). Big-story recall stays in newsjack filter-apply as before. Run newsjack coarse-filter --print-questions to read the translation and newsjack help coarse-filter for usage.

Pick Jev when newsjack doctor shows TypeSafe configured; otherwise use the worker path. Jev decisions carry a rationale that starts with Jev: and lists the raw probabilities, because the engine gives no prose reason; the report should show that honestly rather than dress it up. If more than a fifth of the Jev calls fail, the command exits non-zero and the run should fall back to the worker path for this pass.

Machine handoff

This skill is a pipeline stage that runs on a low-cost model or on Jev. Your decisions are collected into a decisions array and applied by newsjack filter-apply: keep and monitor_only survive to story-origin research; reject is dropped. You do not run that step.

The pipeline reads your output as raw JSON. Emit exactly one JSON object per signal, with these exact fields — return only the JSON, with no prose before or after it, and no Markdown wrapping:

{
  "signal_id": "engine signal id",
  "decision": "keep | monitor_only | reject",
  "reason": "allowed reason",
  "rationale": "One short sentence explaining the filter decision.",
  "confidence": "high | medium | low",
  "evidence_urls": ["https://..."],
  "relevance_basis": "Why this is plausibly relevant or why it is junk."
}

FAQ

What does the relevance-coarse-filter skill do?

Cheap, high-recall first-pass filter that removes obvious junk from a detector candidate pool before expensive story-origin research and PR judgment. Decides keep, monitoronly, or reject — never ranks, writes angles, verifies dates, or decides whether to pitch.

How do I install relevance-coarse-filter?

Run npx skills add https://github.com/elvisun/newsjack --skill relevance-coarse-filter in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/relevance-coarse-filter/ (personal) or .claude/skills/relevance-coarse-filter/ (project).

Which AI agents can use relevance-coarse-filter?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is relevance-coarse-filter safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains relevance-coarse-filter?

It is published by elvisun in elvisun/newsjack. It has 755 recorded installs.

More from elvisun/newsjack

View all →

fact-check

elvisun/newsjack

Extract factual claims from PR copy, verify each claim independently, attach concrete citations, and warn when certainty is low. Runs each claim through proven newsroom verification methods (lateral reading, source-tier climbing, provenance pillars, triangulation, calibrated rating) and puts the burden of proof on the speaker. Use before a pitch, press release, reactive comment, DM, or other journalist-facing draft is trusted or sent.

headline-generator

elvisun/newsjack

Generate headline candidates from a story's raw facts: news-style headlines, press-release headlines, and pitch subject lines. A pure generation skill — it finds the charge in the facts, then runs ten proven moves (consequence, picture, number-as-hero, two-beat turn, naming, reader's-own-story, open question, voice, sound, sized claim), each calibrated by real, verified headlines that made history.

Media & Creative780 installs

news-search

elvisun/newsjack

Search current news for a topic, company, competitor, or hook and return dated, attributed articles. Uses the newsjack CLI and Medialyst REST API when available, tries direct Medialyst MCP if the CLI is missing, and falls back to host web/browser search with explicit caveats only when neither cloud path is available.

Backend & APIs768 installs

angle-generator

elvisun/newsjack

Turn a company update into 3-7 structurally distinct, journalist-shaped story angles. Runs the fact through proven newsroom lenses (perspective, abstraction, news values, data, contrarian, news peg) and refuses rephrasings, invented facts, named-journalist guesses, and AI-marketing slop.

Marketing & SEO766 installs

voice-extractor

elvisun/newsjack

Capture a user's real writing voice from 5-20 prior samples, store a local voice.yaml fingerprint, and enforce it on newsjack drafts so AI tells disappear. Measures voice with named stylometry lenses (Burrows's Delta function-word vector, MATTR lexical diversity, sentence-length burstiness, Biber Dimension-1 register, opener-POS profile, punctuation rates) and gates drafts against the fingerprint as bands, not vibes.

Media & Creative762 installs

crisis-holding

elvisun/newsjack

Draft crisis holding statements, journalist Q&A posture, and what-not-to-say guidance from confirmed incident facts, with a hard legal-counsel gate. Builds each statement through proven crisis-comms frameworks (holding-statement anatomy, SCCT, CAP order, the legitimate non-answer, bridge/flag/block).

Business & Finance760 installs

Popular code quality & workflow skills

View category →

grill-me

mattpocock/skills

A relentless interview to sharpen a plan or design.

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

handoff

mattpocock/skills

Compact the current conversation into a handoff document for another agent to pick up.

domain-modeling

mattpocock/skills

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

codebase-design

mattpocock/skills

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

diagnosing-bugs

mattpocock/skills

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.