$npx -y skills add elvisun/newsjack --skill coverage-trackerRun a Google Alerts-style keyword coverage tracker. Uses news-search for recent keyword queries, lets the LLM dedupe and classify real features versus junk, stores decisions in SQLite, and alerts only on new real coverage.
| 1 | # Coverage Tracker |
| 2 | |
| 3 | Track whether configured keywords appeared in real coverage. Keep this simple: `news-search` collects dated article evidence, you dedupe and judge with the keyword's meaning snippet, and the CLI only stores config plus seen/alert state. |
| 4 | |
| 5 | This is not `newsjack-detector`. Do not score newsjacking opportunities, generate angles, assess standing, or use monitor profiles. |
| 6 | |
| 7 | ## Runtime Mode |
| 8 | |
| 9 | - **Full Mode:** Use this in Claude Code, Codex, OpenClaw, Hermes, or another capable agent harness with shell, filesystem, network, and local CLI access. Full Mode can read tracker config, check SQLite seen-state, record decisions, and suppress repeat alerts. |
| 10 | - **Limited Mode:** Use this in Claude.ai chat, ChatGPT chat, Claude Cowork, or any restricted runtime without shell/filesystem/CLI access. Do not attempt `curl`, `npm`, or on-demand CLI installation. Run a one-off manual coverage check from pasted/searchable evidence and disclose that no tracker config, SQLite state, or repeat suppression was used. |
| 11 | |
| 12 | **Before you decide you're in Limited Mode, check whether `newsjack` is installed.** It ships as a prebuilt, bundled binary — you do **not** need Go, a compiler, or any build/install step to run it. Never look for a Go toolchain, and never declare the CLI "missing" or tell the user they need a "Go environment" without running this check first: |
| 13 | |
| 14 | 1. Run `newsjack --version`. If it prints a version, you're in Full Mode — use plain `newsjack ...` for every command. |
| 15 | 2. If `newsjack` isn't on `PATH`, try the bundled location `~/.newsjack/bin/newsjack --version`. If that prints a version, use that full path in place of `newsjack` everywhere below. |
| 16 | 3. Only if **both** fail (and you genuinely have no shell) are you in Limited Mode. |
| 17 | |
| 18 | The bundled binary is almost always already installed — assume Full Mode and verify, don't assume it's missing. |
| 19 | |
| 20 | ## Workflow |
| 21 | |
| 22 | In Limited Mode, skip the CLI state steps and: |
| 23 | |
| 24 | 1. Ask for the keyword, what it means, lookback window, and any exclusions if they are not already present. |
| 25 | 2. Use pasted links first. If search tools are available, search the keyword plus a recency bound and keep dated, attributed article evidence when available. |
| 26 | 3. Dedupe obvious repeats by URL/title/outlet/date. |
| 27 | 4. Classify each item with the verdicts below. |
| 28 | 5. Return a short inline report with new likely coverage, filtered counts, and a Limited Mode caveat that repeat suppression was unavailable. |
| 29 | |
| 30 | In Full Mode, run the persistent workflow: |
| 31 | |
| 32 | 1. **Find the tracker.** |
| 33 | - If the user gave a slug, run `newsjack coverage status <slug>`. |
| 34 | - If working in a source checkout, prefer `bin/newsjack`. |
| 35 | - If no slug is given, ask which tracker to run unless local context makes it obvious. |
| 36 | - Read the returned `config_path`. |
| 37 | |
| 38 | 2. **Search each keyword.** |
| 39 | - Read the current date from the system (e.g. run `date`); do not recall it from memory. Compute `since_date` as that date minus `lookback_days` from the config, defaulting to `2`. |
| 40 | - For each keyword, call `news-search` with exactly: |
| 41 | |
| 42 | ```text |
| 43 | "keyword" after:YYYY-MM-DD |
| 44 | ``` |
| 45 | |
| 46 | - If the keyword has aliases, search each alias the same way, but keep the original keyword entry attached. |
| 47 | - Keep dated, attributed article fields from `news-search`: `title`, `url`, `outlet`, `author`, `published_at`, and snippet/summary when available. |
| 48 | |
| 49 | 3. **Dedupe and check stored decisions before using the LLM.** |
| 50 | - Dedupe exact canonical URLs first, then obvious same-article duplicates by title/outlet/date. |
| 51 | - Create a minimal candidate JSON file only because the CLI helper consumes a file. Put it in a temporary location, or in a timestamped run folder if your harness normally keeps run artifacts: |
| 52 | |
| 53 | ```json |
| 54 | { |
| 55 | "items": [ |
| 56 | { |
| 57 | "keyword": "profound", |
| 58 | "title": "Article title", |
| 59 | "url": "https://...", |
| 60 | "outlet": "Outlet", |
| 61 | "author": "Author or null", |
| 62 | "published_at": "2026-06-05T12:00:00Z", |
| 63 | "snippet": "Search snippet or summary" |
| 64 | } |
| 65 | ] |
| 66 | } |
| 67 | ``` |
| 68 | |
| 69 | - Run: |
| 70 | |
| 71 | ```bash |
| 72 | newsjack coverage check <slug> --input candidates.json |
| 73 | ``` |
| 74 | |
| 75 | - Do not reclassify `known_items` unless the user explicitly asks for a fresh review. Use their `prior_decision` to count filtered/known results and suppress repeat alerts. |
| 76 | - Classify only `unknown_items`. |
| 77 | |
| 78 | 4. **LLM classify unknown items.** |
| 79 | - Use the keyword's `means` field as the authority for entity matching. |
| 80 | - Reject generic-word usage and wrong entities, espe |