newsjack 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mcp.json +9 -0
- package/.newsjack-npm +1 -0
- package/COMMIT +1 -0
- package/LICENSE +21 -0
- package/README.md +133 -0
- package/VERSION +1 -0
- package/bin/newsjack +74 -0
- package/package.json +37 -0
- package/skills/.gitkeep +0 -0
- package/skills/ETHICS.md +265 -0
- package/skills/WHY-NOT-SPAM.md +257 -0
- package/skills/angle-generator/SKILL.md +224 -0
- package/skills/angle-generator/examples.md +517 -0
- package/skills/angle-generator/rubric.md +219 -0
- package/skills/coverage-tracker/SKILL.md +124 -0
- package/skills/coverage-tracker-setup/SKILL.md +84 -0
- package/skills/crisis-holding/SKILL.md +336 -0
- package/skills/crisis-holding/examples.md +302 -0
- package/skills/crisis-holding/rubric.md +218 -0
- package/skills/fact-check/SKILL.md +212 -0
- package/skills/fact-check/examples.md +195 -0
- package/skills/fact-check/rubric.md +228 -0
- package/skills/journalist-fit-check/SKILL.md +199 -0
- package/skills/journalist-fit-check/examples.md +271 -0
- package/skills/journalist-fit-check/rubric.md +251 -0
- package/skills/meanest-editor/SKILL.md +112 -0
- package/skills/meanest-editor/examples.md +331 -0
- package/skills/meanest-editor/rubric.md +275 -0
- package/skills/media-list-manager/SKILL.md +204 -0
- package/skills/media-list-manager/examples.md +88 -0
- package/skills/media-list-manager/rubric.md +67 -0
- package/skills/news-search/SKILL.md +56 -0
- package/skills/newsjack-detector/SKILL.md +286 -0
- package/skills/newsjack-detector/examples.md +118 -0
- package/skills/newsjack-detector/references/engine-cli.md +29 -0
- package/skills/newsjack-detector/references/harness-routing.md +38 -0
- package/skills/newsjack-detector/references/rss-feeds.json +106 -0
- package/skills/newsjack-detector/rubric.md +160 -0
- package/skills/newsjack-monitor-setup/SKILL.md +202 -0
- package/skills/newsjack-monitor-setup/examples.md +106 -0
- package/skills/newsjack-triage/SKILL.md +98 -0
- package/skills/newsworthiness-check/SKILL.md +179 -0
- package/skills/newsworthiness-check/examples.md +232 -0
- package/skills/newsworthiness-check/rubric.md +218 -0
- package/skills/pr-strategist/SKILL.md +304 -0
- package/skills/reactive-comment/SKILL.md +297 -0
- package/skills/reactive-comment/examples.md +284 -0
- package/skills/reactive-comment/rubric.md +280 -0
- package/skills/relevance-coarse-filter/SKILL.md +61 -0
- package/skills/story-origin-check/SKILL.md +160 -0
- package/skills/voice-extractor/SKILL.md +330 -0
- package/skills/voice-extractor/examples.md +227 -0
- package/skills/voice-extractor/rubric.md +251 -0
- package/skills-manifest.json +254 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# Angle Generator Rubric
|
|
2
|
+
|
|
3
|
+
Use this rubric to evaluate an `angle-generator` output before it leaves the agent. Every criterion is scored 0-2.
|
|
4
|
+
|
|
5
|
+
- **0** - Missing, broken, or actively unsafe.
|
|
6
|
+
- **1** - Present but weak, generic, or partially unsupported.
|
|
7
|
+
- **2** - Solid, specific, and faithful to the skill.
|
|
8
|
+
|
|
9
|
+
Total possible: 20 points.
|
|
10
|
+
|
|
11
|
+
| Points | Verdict |
|
|
12
|
+
|--------|---------|
|
|
13
|
+
| 18-20 | **ship** |
|
|
14
|
+
| 14-17 | **revise** |
|
|
15
|
+
| 8-13 | **regenerate** |
|
|
16
|
+
| 0-7 | **refuse / ask for better input** |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 1. Input Completeness And Now Anchor
|
|
21
|
+
|
|
22
|
+
**Source trace:** `Prompt scaffolding > Process`, `Hard rules`, `Decay reasoning`; `Rubric / checks / banned lists > Decay sanity check`.
|
|
23
|
+
|
|
24
|
+
The output must respect the input contract. `context.current_time` is required; the agent cannot infer "now" from model memory.
|
|
25
|
+
|
|
26
|
+
**Score 0:** Missing `current_time` is ignored, weak facts are padded into angles, or the output proceeds on generic input like "new UI" without asking questions.
|
|
27
|
+
|
|
28
|
+
**Score 1:** Anchors on `current_time` but still produces thin angles from thin facts.
|
|
29
|
+
|
|
30
|
+
**Score 2:** Refuses or narrows the output when facts are insufficient; uses `current_time` and supplied signals as the only basis for urgency.
|
|
31
|
+
|
|
32
|
+
Red flags:
|
|
33
|
+
|
|
34
|
+
- "Today" or "this week" with no supplied timestamp.
|
|
35
|
+
- Generic facts treated as news.
|
|
36
|
+
- Calendar or signal hooks force-fit to unrelated updates.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 2. Fact Traceability / Hallucination Gate
|
|
41
|
+
|
|
42
|
+
**Source trace:** `Hard rules > You do not invent facts`; `Rubric / checks / banned lists > Hallucination gate`.
|
|
43
|
+
|
|
44
|
+
Every angle must identify which user-supplied facts it uses. Missing evidence belongs in `required_proof`, not in the headline or rationale.
|
|
45
|
+
|
|
46
|
+
**Score 0:** Invents statistics, named people, organizations, customer results, market claims, or regulatory details.
|
|
47
|
+
|
|
48
|
+
**Score 1:** Mostly grounded but includes unsupported context as if factual, or `facts_used` is vague.
|
|
49
|
+
|
|
50
|
+
**Score 2:** Every substantive claim traces to `update.facts`, provided links, company fields, or explicit signal payloads; missing evidence is cleanly flagged.
|
|
51
|
+
|
|
52
|
+
Red flags:
|
|
53
|
+
|
|
54
|
+
- `facts_used` is empty.
|
|
55
|
+
- A statistic appears that was not in the input.
|
|
56
|
+
- "Research shows" or "analysts say" with no provided source.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 3. Structural Distinctness
|
|
61
|
+
|
|
62
|
+
**Source trace:** `Hard rules > You enforce structural distinctness`; `Rubric / checks / banned lists > Distinctness check`; `Sample I/O > Example 4`.
|
|
63
|
+
|
|
64
|
+
The set must contain different story shapes, not rephrasings for different inboxes.
|
|
65
|
+
|
|
66
|
+
**Score 0:** Multiple angles share the same headline frame, protagonist, story type, and journalist shape.
|
|
67
|
+
|
|
68
|
+
**Score 1:** Some distinction exists, but the set still contains filler variants or beat-swapped clones.
|
|
69
|
+
|
|
70
|
+
**Score 2:** Each kept angle has a distinct protagonist, beat, story type, proof path, or timing frame; duplicates are killed and logged.
|
|
71
|
+
|
|
72
|
+
Red flags:
|
|
73
|
+
|
|
74
|
+
- "Another angle" is the main differentiator.
|
|
75
|
+
- Same `story_type` plus same `beat_description`.
|
|
76
|
+
- More than 65% conceptual overlap between headline frames.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 4. Journalist Shape
|
|
81
|
+
|
|
82
|
+
**Source trace:** `Journalist-shape rubric`; `Hard rules > You do not invent journalists`; `Pains addressed > Pitch volume + irrelevance`.
|
|
83
|
+
|
|
84
|
+
An angle is not real until a plausible beat can be named. The skill names the shape, not a specific journalist.
|
|
85
|
+
|
|
86
|
+
**Score 0:** Uses generic targets like "tech journalist" or names specific journalists without verification.
|
|
87
|
+
|
|
88
|
+
**Score 1:** Beat is present but broad; `evidence_they_care` is generic or could apply to any outlet.
|
|
89
|
+
|
|
90
|
+
**Score 2:** Beat, outlet archetype, timely reason, and `do_not_target` are specific enough to guide the next skill.
|
|
91
|
+
|
|
92
|
+
Red flags:
|
|
93
|
+
|
|
94
|
+
- "This would appeal to journalists who care about startups."
|
|
95
|
+
- No `do_not_target`.
|
|
96
|
+
- Named journalists appear in the output.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 5. Why-Now And Decay
|
|
101
|
+
|
|
102
|
+
**Source trace:** `Decay reasoning`; `Hard rules > You tag every angle with decay`; `Rubric / checks / banned lists > Decay sanity check`.
|
|
103
|
+
|
|
104
|
+
The output must be honest about urgency.
|
|
105
|
+
|
|
106
|
+
**Score 0:** Claims breaking urgency without a supplied signal, or omits decay.
|
|
107
|
+
|
|
108
|
+
**Score 1:** Decay is present but generic; `why_now` is a vague trend or repeats the update date.
|
|
109
|
+
|
|
110
|
+
**Score 2:** `why_now` names the real time hook or says `EVERGREEN, NOT TIME-PRESSURED`; decay matches the source of urgency.
|
|
111
|
+
|
|
112
|
+
Red flags:
|
|
113
|
+
|
|
114
|
+
- `30min` or `4hr` with no `signal_from_newsjack_detector`.
|
|
115
|
+
- `evergreen` on a company update without an uncomfortable question.
|
|
116
|
+
- "In today's market" as the peg.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 6. Anti-Slop Pass
|
|
121
|
+
|
|
122
|
+
**Source trace:** `Banned words and structures`; `Rubric / checks / banned lists > Anti-slop regex pass`; `Secondary signal - Reads like a bot wrote it`.
|
|
123
|
+
|
|
124
|
+
The output must reject AI-marketing language before the user sees it.
|
|
125
|
+
|
|
126
|
+
**Score 0:** Kept angles contain banned terms or press-release framing.
|
|
127
|
+
|
|
128
|
+
**Score 1:** Mostly clean but one field still leans on puffery or generic phrasing.
|
|
129
|
+
|
|
130
|
+
**Score 2:** Headline frames, `why_now`, `distinctness_check`, and `evidence_they_care` are concrete and free of banned structures.
|
|
131
|
+
|
|
132
|
+
Red flags:
|
|
133
|
+
|
|
134
|
+
- "innovative platform", "future of X", "game-changing", "excited to announce".
|
|
135
|
+
- "It's not just X, it's Y."
|
|
136
|
+
- Placeholder leftovers such as `[COMPANY]`.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 7. Required Proof
|
|
141
|
+
|
|
142
|
+
**Source trace:** `What "an angle" means`; `Hard rules > You ask uncomfortable questions`; `Rubric / checks / banned lists > Per-angle proof requirement`.
|
|
143
|
+
|
|
144
|
+
The skill must show what evidence makes the angle pitchable.
|
|
145
|
+
|
|
146
|
+
**Score 0:** Proof is absent, generic, or asks for evidence after already making the claim.
|
|
147
|
+
|
|
148
|
+
**Score 1:** Proof exists but is not specific enough to guide the user.
|
|
149
|
+
|
|
150
|
+
**Score 2:** Each angle lists concrete proof; `data`, `customer-story`, `contrarian`, and `exec-spotlight` angles have at least one required proof item.
|
|
151
|
+
|
|
152
|
+
Red flags:
|
|
153
|
+
|
|
154
|
+
- "Need more data" with no description of what data.
|
|
155
|
+
- Contrarian angle with no stated conventional wisdom to challenge.
|
|
156
|
+
- Customer story with no customer proof requirement.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 8. Refused Angles
|
|
161
|
+
|
|
162
|
+
**Source trace:** `Hard rules > You output the refused angles`; `Refusal patterns`; `Sample I/O`.
|
|
163
|
+
|
|
164
|
+
Refusal is part of the product. The user should see what died and why.
|
|
165
|
+
|
|
166
|
+
**Score 0:** No `refused_angles` field, or bad angles are kept instead of killed.
|
|
167
|
+
|
|
168
|
+
**Score 1:** Refused angles are listed but reasons are vague or outside the allowed values.
|
|
169
|
+
|
|
170
|
+
**Score 2:** Refused angles use allowed reasons and teach the user what not to pitch.
|
|
171
|
+
|
|
172
|
+
Allowed refusal reasons:
|
|
173
|
+
|
|
174
|
+
- `duplicate`
|
|
175
|
+
- `slop`
|
|
176
|
+
- `hallucinated_fact`
|
|
177
|
+
- `no_journalist_shape`
|
|
178
|
+
- `no_why_now_but_required`
|
|
179
|
+
- `off-beat`
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 9. Uncomfortable Questions And Next Skill
|
|
184
|
+
|
|
185
|
+
**Source trace:** `Hard rules > You ask uncomfortable questions`; `When to call other skills`; `Open questions / risks > brand risk of being too refusenik`.
|
|
186
|
+
|
|
187
|
+
The skill should be tough without stranding the user.
|
|
188
|
+
|
|
189
|
+
**Score 0:** No questions when proof gaps are obvious, or the output ends without a next move.
|
|
190
|
+
|
|
191
|
+
**Score 1:** Questions exist but are broad, soft, or disconnected from the angles.
|
|
192
|
+
|
|
193
|
+
**Score 2:** Questions expose the exact missing facts that determine whether the angles are real; `follow_up_suggestions` names the right next skill or `null`.
|
|
194
|
+
|
|
195
|
+
Red flags:
|
|
196
|
+
|
|
197
|
+
- "Can you provide more details?"
|
|
198
|
+
- Recommending `meanest-editor` before there is an angle or draft.
|
|
199
|
+
- Calling a media-list skill before journalist shapes exist.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 10. Output Contract
|
|
204
|
+
|
|
205
|
+
**Source trace:** `Output schema`; `Prompt scaffolding > Output format`.
|
|
206
|
+
|
|
207
|
+
The final output must be machine-usable.
|
|
208
|
+
|
|
209
|
+
**Score 0:** Prose summary instead of JSON, missing top-level keys, or invalid JSON.
|
|
210
|
+
|
|
211
|
+
**Score 1:** JSON is valid but fields are missing, renamed, or filled with vague placeholders.
|
|
212
|
+
|
|
213
|
+
**Score 2:** Valid JSON with `angles`, `refused_angles`, `uncomfortable_questions`, and `follow_up_suggestions`; each angle includes all required fields.
|
|
214
|
+
|
|
215
|
+
Red flags:
|
|
216
|
+
|
|
217
|
+
- Preamble such as "Here are your angles."
|
|
218
|
+
- Markdown bullets instead of the schema.
|
|
219
|
+
- `anti_slop_pass` omitted or set without actual anti-slop compliance.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: coverage-tracker
|
|
3
|
+
description: "Run 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."
|
|
4
|
+
when_to_use: "User wants to run coverage alerts, check new mentions, track press coverage, monitor brand/company keyword coverage, or execute a previously configured coverage tracker."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Coverage Tracker
|
|
8
|
+
|
|
9
|
+
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.
|
|
10
|
+
|
|
11
|
+
This is not `newsjack-detector`. Do not score newsjacking opportunities, generate angles, assess standing, or use monitor profiles.
|
|
12
|
+
|
|
13
|
+
## Workflow
|
|
14
|
+
|
|
15
|
+
1. **Find the tracker.**
|
|
16
|
+
- If the user gave a slug, run `newsjack coverage status <slug>`.
|
|
17
|
+
- If working in a source checkout, prefer `bin/newsjack`.
|
|
18
|
+
- If no slug is given, ask which tracker to run unless local context makes it obvious.
|
|
19
|
+
- Read the returned `config_path`.
|
|
20
|
+
|
|
21
|
+
2. **Search each keyword.**
|
|
22
|
+
- 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`.
|
|
23
|
+
- For each keyword, call `news-search` with exactly:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
"keyword" after:YYYY-MM-DD
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- If the keyword has aliases, search each alias the same way, but keep the original keyword entry attached.
|
|
30
|
+
- Keep dated, attributed article fields from `news-search`: `title`, `url`, `outlet`, `author`, `published_at`, and snippet/summary when available.
|
|
31
|
+
|
|
32
|
+
3. **Dedupe and check stored decisions before using the LLM.**
|
|
33
|
+
- Dedupe exact canonical URLs first, then obvious same-article duplicates by title/outlet/date.
|
|
34
|
+
- 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:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"items": [
|
|
39
|
+
{
|
|
40
|
+
"keyword": "profound",
|
|
41
|
+
"title": "Article title",
|
|
42
|
+
"url": "https://...",
|
|
43
|
+
"outlet": "Outlet",
|
|
44
|
+
"author": "Author or null",
|
|
45
|
+
"published_at": "2026-06-05T12:00:00Z",
|
|
46
|
+
"snippet": "Search snippet or summary"
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
- Run:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
newsjack coverage check <slug> --input candidates.json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- 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.
|
|
59
|
+
- Classify only `unknown_items`.
|
|
60
|
+
|
|
61
|
+
4. **LLM classify unknown items.**
|
|
62
|
+
- Use the keyword's `means` field as the authority for entity matching.
|
|
63
|
+
- Reject generic-word usage and wrong entities, especially for ambiguous keywords like `profound`.
|
|
64
|
+
- Do not alert from title/snippet keyword presence alone. When the snippet leaves the verdict unclear, read the article before deciding.
|
|
65
|
+
|
|
66
|
+
Use these verdicts:
|
|
67
|
+
|
|
68
|
+
- `real_feature`: the article is substantially about the intended entity/product/person. Alert.
|
|
69
|
+
- `substantive_mention`: meaningful paragraph-level mention, but not a feature. Save, normally no alert.
|
|
70
|
+
- `passing_mention`: brief mention only. Save, no alert.
|
|
71
|
+
- `wrong_entity`: the keyword refers to something else. Save, no alert.
|
|
72
|
+
- `junk`: SEO, scraper, duplicate landing page, job post, docs/help page, or non-news. Save, no alert.
|
|
73
|
+
- `uncertain`: insufficient evidence. Save, no alert.
|
|
74
|
+
|
|
75
|
+
5. **Record only newly classified unknown items.**
|
|
76
|
+
If there are no `unknown_items`, skip `coverage record` and report from the `coverage check` result.
|
|
77
|
+
|
|
78
|
+
If you classified new items, write the minimum `decisions.json` needed by the CLI:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"items": [
|
|
83
|
+
{
|
|
84
|
+
"keyword": "profound",
|
|
85
|
+
"title": "Article title",
|
|
86
|
+
"url": "https://...",
|
|
87
|
+
"outlet": "Outlet",
|
|
88
|
+
"author": "Author or null",
|
|
89
|
+
"published_at": "2026-06-05T12:00:00Z",
|
|
90
|
+
"verdict": "real_feature",
|
|
91
|
+
"confidence": "high",
|
|
92
|
+
"alert": true,
|
|
93
|
+
"rationale": "Why this is about the intended keyword."
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Include every newly classified unknown item, not only alerts. Saving rejects lets future runs skip them through `coverage check`.
|
|
100
|
+
|
|
101
|
+
6. **Persist decisions and suppress repeat alerts.**
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
newsjack coverage record <slug> --input decisions.json
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Add `--run-dir RUN_DIR` only when you already created a run folder for harness provenance. Read the command's JSON stdout directly. Do not write `record.json` unless the user or harness explicitly wants artifacts. Only articles in `new_alerts` are newly alertable; previously alerted URLs must not be re-alerted.
|
|
108
|
+
|
|
109
|
+
7. **Deliver the result to the user.**
|
|
110
|
+
SQLite is the durable record. Do not write a separate report file; compose a short, readable message straight to the user from `coverage check` and, when run, `coverage record`:
|
|
111
|
+
- If `new_alerts` is non-empty, lead with the new real coverage items.
|
|
112
|
+
- If there are no new alerts, say there is no new confirmed coverage.
|
|
113
|
+
- Include a short run summary: keywords searched, since date, candidate count, skipped-known count, newly judged count, new alert count.
|
|
114
|
+
- Include a quiet "Filtered" line with counts by verdict, including prior decisions from known items, not a dump of every junk item.
|
|
115
|
+
- Use clickable links.
|
|
116
|
+
|
|
117
|
+
This skill is meant to run unattended on a schedule, so the message must stand alone — the user should not have to open any file to understand the run.
|
|
118
|
+
|
|
119
|
+
## Output Discipline
|
|
120
|
+
|
|
121
|
+
- Do not invent publication dates, outlets, or authors. If `news-search` cannot recover a date, classify cautiously.
|
|
122
|
+
- Do not use story-origin or freshness gates; this is not a newsjack opportunity scan.
|
|
123
|
+
- Do not call `angle-generator`, `journalist-fit-check`, or `meanest-editor`.
|
|
124
|
+
- Do not install native cron. Recurrence belongs to the agent harness.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: coverage-tracker-setup
|
|
3
|
+
description: "Set up a lightweight Google Alerts-style coverage tracker for any number of keywords. Creates a tracker config with each keyword and what it actually means, then hands recurrence to the user's agent harness."
|
|
4
|
+
when_to_use: "User wants to create, configure, or update coverage alerts, brand/company mention tracking, Google Alert-style monitoring, or keyword coverage tracking. Use this instead of newsjack-monitor-setup when the job is to track coverage of the user's own keywords rather than find newsjacking opportunities."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Coverage Tracker Setup
|
|
8
|
+
|
|
9
|
+
Create a simple keyword tracker for `coverage-tracker`. This workflow is intentionally separate from newsjack monitor profiles: coverage tracking answers "did my keyword get real coverage?", not "can this client newsjack a broader story?"
|
|
10
|
+
|
|
11
|
+
## Inputs
|
|
12
|
+
|
|
13
|
+
Ask only for missing facts:
|
|
14
|
+
|
|
15
|
+
- tracker name
|
|
16
|
+
- any number of keywords
|
|
17
|
+
- one short `means` snippet per keyword: what entity/product/person the keyword should refer to
|
|
18
|
+
- optional exclusions for ambiguous terms
|
|
19
|
+
- cadence preference for the agent harness: daily morning, twice daily, or hourly
|
|
20
|
+
|
|
21
|
+
Do not ask for standing, spokespeople, competitors, proof assets, RSS feeds, target beats, or PR angles. Those belong to newsjacking, not coverage tracking.
|
|
22
|
+
|
|
23
|
+
## Setup Workflow
|
|
24
|
+
|
|
25
|
+
1. Build a tiny tracker JSON:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"name": "Profound",
|
|
30
|
+
"lookback_days": 2,
|
|
31
|
+
"keywords": [
|
|
32
|
+
{
|
|
33
|
+
"keyword": "profound",
|
|
34
|
+
"means": "Profound, the AI search analytics company.",
|
|
35
|
+
"exclude_hints": ["generic adjective uses"]
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`keywords` may contain any number of entries. Keep each `means` field concrete enough that a later LLM pass can reject wrong-entity and generic mentions.
|
|
42
|
+
|
|
43
|
+
2. Save it with the CLI:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
newsjack coverage init <slug> --config tracker.json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
In a source checkout, prefer `bin/newsjack` from the repo root. Use `--force` only when the user explicitly wants to overwrite the existing tracker config.
|
|
50
|
+
|
|
51
|
+
3. Set up recurrence in the agent harness, not native cron. If the runtime exposes a scheduling feature, schedule this prompt:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
Use the coverage-tracker skill for <slug>.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
If no scheduling tool is available, tell the user exactly which prompt to schedule in Claude, Codex, Hermes, OpenClaw, or their chosen harness. Do not install system cron, launchd, systemd timers, or other native schedulers.
|
|
58
|
+
|
|
59
|
+
4. Run once immediately if the user asked for a working setup, or if this is an end-to-end setup flow. Use `coverage-tracker` for the new slug and relay its first-run result to the user.
|
|
60
|
+
|
|
61
|
+
## Updating Existing Trackers
|
|
62
|
+
|
|
63
|
+
Run:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
newsjack coverage status <slug>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Read the `config_path`, edit the tracker JSON, then re-run:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
newsjack coverage init <slug> --config tracker.json --force
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Only change the keyword aperture or meaning snippet. Alert decisions are stored in SQLite by `coverage-tracker`; do not edit those by hand.
|
|
76
|
+
|
|
77
|
+
## Output
|
|
78
|
+
|
|
79
|
+
When setup is complete, tell the user:
|
|
80
|
+
|
|
81
|
+
- tracker slug
|
|
82
|
+
- config path
|
|
83
|
+
- schedule prompt/cadence
|
|
84
|
+
- first-run result if you ran it
|