$npx -y skills add elvisun/newsjack --skill journalist-fit-checkGate a pitch against one journalist at a time. Runs the pair through proven media-relations checks (last-10-bylines audit, 90-day topic sweep, beat-vs-angle-vs-one-off, the 5 forms of journalism, source-mirror, stated-preferences, database triangulation) and returns fit, soft-fit
| 1 | # Journalist Fit Check |
| 2 | |
| 3 | This is the **Journalist Fit Check** skill inside newsjack.sh. It is the gatekeeper. It exists because too many pitches go to the wrong people: irrelevant stories, stale contacts, and mail-merge "personalization" sent to journalists who never asked for it. |
| 4 | |
| 5 | It checks **one journalist and one pitch at a time**, and gives you one of four answers: |
| 6 | |
| 7 | - **Fit** — pitch this person, the match is real. |
| 8 | - **Soft-fit** — close, but the pitch needs a few specific edits first. |
| 9 | - **No-fit** — wrong person, do not pitch. |
| 10 | - **Unknown** — not enough solid evidence to say yes or no. |
| 11 | |
| 12 | Every Fit, Soft-fit, or No-fit answer must point to a real, dated, recent article (a "byline" — a piece with this journalist's name on it) published in the last 90 days. No real recent piece, no confident answer. |
| 13 | |
| 14 | This skill is blunt on purpose. It will not soften a no or pad a maybe. A clear, specific answer beats a polite one. |
| 15 | |
| 16 | ## Boundaries |
| 17 | |
| 18 | - Do not build media lists. |
| 19 | - Do not rank journalists against each other. |
| 20 | - Do not send anything. |
| 21 | - Do not keep or trust a contact database. |
| 22 | - Do not call something a fit based on an outlet's category, a database tag, a bio, or a vibe. |
| 23 | - Do not make up articles, dates, titles, links, outlets, or social posts. |
| 24 | - Do not say **Soft-fit** when the honest answer is **Unknown**. |
| 25 | |
| 26 | If you ask about 20 or 50 journalists, this skill checks them one at a time. Stopping the mass-blast is someone else's job; this skill will never be the thing that greases a batch send. |
| 27 | |
| 28 | ## Required Inputs |
| 29 | |
| 30 | Accept one journalist identifier: |
| 31 | |
| 32 | - name + outlet |
| 33 | - profile URL |
| 34 | - recent byline URL |
| 35 | - a beat description (the topic area they cover) is useful context only; a beat on its own cannot identify a specific journalist and cannot produce an answer |
| 36 | |
| 37 | Accept one pitch: |
| 38 | |
| 39 | - full pitch text |
| 40 | - subject line if present |
| 41 | - body text as written |
| 42 | |
| 43 | Accept context: |
| 44 | |
| 45 | - `current_time_iso` (today's date and time) is required. Never guess what "now" is from memory. |
| 46 | - `client_or_subject` (who or what the pitch is about) is optional. |
| 47 | - `decay_stage` is optional; it carries over from breaking-news workflows to flag how fast a story is moving. |
| 48 | |
| 49 | If today's date and time is missing, the answer is **Unknown** (reason: missing current time). |
| 50 | |
| 51 | ## Retrieval |
| 52 | |
| 53 | Find the journalist's recent work using the best source available: |
| 54 | |
| 55 | - `medialyst` (the built-in media database) when you are logged in |
| 56 | - `host-agent-search` (public web search) otherwise |
| 57 | - `cache` only when you explicitly hand over saved article evidence |
| 58 | |
| 59 | Look in places that are likely to hold their current work: the outlet's author page, Google News or similar web results, the journalist's personal site, their Substack or newsletter archive, LinkedIn snippets, and their Twitter/X profile or specific posts when those can be opened. |
| 60 | |
| 61 | The answer must say which source it used. If no source turns up a named article with a date and a link, the answer is **Unknown**. |
| 62 | |
| 63 | ## The Checks — how to judge fit |
| 64 | |
| 65 | These are the actual methods media-relations practitioners use to test one journalist against one pitch. They replace "do your research" with specific moves. Run the pitch through them, gather the evidence, and let it drive the verdict. A real **Fit** needs all three of the triangulation axes (relevance, timing, format) to hold; two of three is a **Soft-fit**; a missing relevance axis is a **No-fit**. |
| 66 | |
| 67 | A single journalist will light up several checks at once. That convergence is the verdict — not any one check alone. |
| 68 | |
| 69 | ### 1. The Last-10-Bylines Audit — beat verification |
| 70 | |
| 71 | **Mechanic:** Don't trust the outlet section or the database beat label. Pull this journalist's last ~10 bylines and ask what percentage actually covers your topic. Below roughly 80% topic-hit across the recent window means the *targeting* is wrong, not the pitch wording. |
| 72 | |
| 73 | **Worked example:** Pitch = a new enterprise password manager. Journalist is tagged "Technology" at a national outlet, but their last 10 bylines are 7 on AI regulation, 2 on chip supply chains, 1 on a Big Tech earnings call. Cybersecurity-product = 0/10 in the recent window. → **No-fit** — right vertical label, wrong actual coverage. |
| 74 | |
| 75 | ### 2. The 90-Day Topic Sweep — recency / decay gate |
| 76 | |
| 77 | **Mechanic:** Start from the byline, not the outlet. Pull the last 90 days of *this journalist's* coverage on your specific topic. Coverage older than ~3 months is a red flag they've moved on; repo |