taproot
mirrorThe dotfiles and containers I use to set up a machine for development, one container to write code in and another that runs a local coding model on the desktop's GPU.
alpine-linuxcaddydevelopment-environmentdockerdotfileshomelabinfrastructureneovimserver-configurationtmux
1---
2name: roundup
3description: Fast, spin-stripped news + markets briefing for Isaac, delivered as a diff since the last roundup. Invoke when Isaac says "roundup", asks "what's new / what did I miss", or wants a quick news/markets catch-up. Fans out across the political spectrum (NPR/BBC/CNN/Fox/Google News/AP/Reuters), market data (indexes/crypto/commodities), local NC, work-talk sports (NASCAR/F1/soccer), PC gaming (big releases + hyped indies), and watercooler feeds (Hacker News), filters hard to only what matters, and reads the previous roundup from code/memory/roundups/ to report only what changed, then saves and commits the new one.
4---
5
6# Roundup: spin-stripped news + markets, as a diff
7
8A roundup is a fast, skimmable briefing of what actually matters since the **last**
9roundup. The whole point is the diff: how far markets moved, what developed in stories
10already told, and what is genuinely new. Old news Isaac has already seen is noise.
11
12State lives in the [[memory]] vault at `~/code/memory/roundups/`, one file per run named
13`YYYY-MM-DD-HHMM.md`. Read the newest one first to get the baseline, deliver the diff,
14then write and commit a fresh file. It is git-versioned so the baseline survives across
15sessions and machines.
16
17## What Isaac wants (the filter)
18
19Only important news. Be ruthless. **Keep:** market-moving events, major political/policy,
20major world events (war, elections, disasters of scale), anything touching **local NC /
21Yadkin Valley / Elkin / Jonesville**, and curated sports for work talk. **Drop:** human
22interest oddities (the Florida-man-eaten-by-a-croc genre), single-victim crime, celebrity
23gossip, viral fluff, anything that does not move money, policy, or his actual life.
24
25Cross-source corroboration is the importance test: if NPR + BBC + Fox + Google all lead
26with it, it is real and important. If only one outlet has it and it is not local to him,
27it is probably not worth a line.
28
29**Sports caveat.** Isaac does not personally care about sports, he tracks them only to
30talk with coworkers. Coworkers follow **NASCAR, F1, and soccer ("football", the World Cup
31included)**. So the sports section is small and tuned to exactly those three: latest
32result, next event, any standings shift. Skip US "football", MLB, NBA, etc. unless a
33genuinely huge story (championship, major trade).
34
35**Spin-stripping.** Pull the same story from across the spectrum and rewrite one neutral
36line with loaded language removed (no "slams", "blasts", "destroys", no editorializing
37adjectives). Then cite which sources carried it so Isaac can judge. The job is a fair,
38balanced headline + one-line summary, not any outlet's framing.
39
40## How to run it (fast = parallel fan-out)
41
42Speed matters most. Do **not** fetch sources one at a time in the main thread. Fan out to
43parallel subagents in a single message, each owning one cluster, each returning a compact
44pre-filtered, spin-stripped digest (markdown bullets with sources). The main thread only
45merges, dedups, computes market deltas, formats, and saves. This keeps wall-clock low and
46main context clean.
47
48### Step 0 — baseline
49
50```bash
51date '+%a %Y-%m-%d %H:%M' # the real timestamp for this run
52ls -1 ~/code/memory/roundups/ | tail -1 # newest prior roundup (lexical sort works)
53```
54
55Read that newest file. From it grab: the prior **timestamp** (for "last roundup was N ago"),
56the prior **market levels** (to compute deltas), and the **tracked stories** list (to report
57developments). If the folder is empty, this is the first roundup: say so, give a full
58baseline, mark nothing as a diff.
59
60### Step 1 — fan out (one message, parallel `Agent` calls)
61
62Give every subagent: the current time, the prior timestamp, the keep/drop filter above,
63the spin-strip rule, and "report only what changed since <prior timestamp>, flag each item
64[NEW] or [DEV]." Suggested clusters and good fast sources (these are RSS/JSON feeds: clean
65headlines, no partisan article body. Fetch with WebFetch, fall back to WebSearch or Google
66News RSS if one is down):
67
681. **World + US + politics** (the core cross-spectrum strip)
69 - NPR: `https://feeds.npr.org/1001/rss.xml`
70 - BBC World: `https://feeds.bbci.co.uk/news/world/rss.xml`, BBC US/Canada: `https://feeds.bbci.co.uk/news/world/us_and_canada/rss.xml`
71 - CNN top: `http://rss.cnn.com/rss/cnn_topstories.rss`
72 - Fox latest: `https://moxie.foxnews.com/google-publisher/latest.xml`
73 - Google News top: `https://news.google.com/rss` (and AP/Reuters surface here for a neutral anchor)
742. **Markets** (capture exact numbers for the diff)
75 - Indexes (S&P 500, Nasdaq, Dow): WebSearch "S&P 500 Nasdaq Dow today" for current level + day %, reliable.
76 - Crypto (BTC, ETH): `https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd&include_24hr_change=true` (fast, no key).
77 - Commodities (gold, WTI crude): WebSearch "gold price WTI crude oil today".
78 - One line on *why* the tape moved (Fed, CPI, earnings, geopolitics).
793. **Local NC** (Yadkin Valley / Elkin / Jonesville / Surry & Wilkes counties, NC statewide if big)
80 - WebSearch "Elkin NC news", "Yadkin Valley news", "North Carolina news today". Weather only if severe (Isaac has had storm power outages).
814. **Sports for work talk** (NASCAR, F1, soccer/World Cup ONLY)
82 - ESPN F1: `https://www.espn.com/espn/rss/rpm/news`, ESPN soccer: `https://www.espn.com/espn/rss/soccer/news`, NASCAR via WebSearch "NASCAR Cup last race result next race". Latest result + next event + any standings shift, one line each.
835. **Gaming** (PC gaming, big releases/announcements, hyped indies, Isaac plays PC and tracks what's new and hyped)
84 - PC Gamer: `https://www.pcgamer.com/rss/`, Rock Paper Shotgun: `https://www.rockpapershotgun.com/feed`, Eurogamer: `https://www.eurogamer.net/feed`, IGN games: `https://feeds.feedburner.com/ign/games-all`.
85 - Steam: `https://store.steampowered.com/feeds/news.xml`, plus WebSearch "Steam top sellers this week" and "most wishlisted Steam games" for what's actually hyped right now.
86 - KEEP: notable new releases and firm release dates, major studio/industry news (acquisitions, engine/platform shifts, big game-changing patches), and genuinely hyped indie games (strong wishlist/early-access buzz, breakout launches). DROP: console-exclusive minutiae Isaac can't play on PC, mobile/gacha, esports match scores, routine patch notes, and review-score churn. A few bullets max, one neutral line each + (sources).
876. **Watercooler** (Hacker News only, genuinely notable items)
88 - Hacker News front page: `https://hnrss.org/frontpage` (or `https://hacker-news.firebaseio.com/v0/topstories.json`). Surface only items with real signal (a major outage, a tech/industry shift, a story the mainstream feeds missed), not memes.
89 - Reddit is intentionally NOT used. Tested 2026-06-27: Reddit blocks this container's datacenter IP at the network level (403/429 + "blocked by network security") on the JSON API, the `.rss` feed, old.reddit, and a full headless Chromium with a spoofed browser UA. The block is IP-based, so neither a user-agent nor a real browser bypasses it. The only working path would be the authenticated OAuth API (client_id/secret), which we have not set up. Do not waste a fetch attempt on Reddit, since r/news and r/worldnews largely duplicate the mainstream feeds anyway.
90
91Scale the fan-out to the ask: a quick "what'd I miss" can be 3 agents (news+politics,
92markets, sports), and a fuller catch-up after days away uses all six. Drop a cluster Isaac
93says he does not want.
94
95### Step 2 — merge and diff
96
97Dedup the same story across clusters into one neutral line with all sources. Compute market
98deltas vs the prior file (absolute + %, and direction arrows). For each prior tracked story,
99either report the development [DEV] or omit it if dead. Mark genuinely new stories [NEW].
100Cut anything failing the keep/drop filter.
101
102### Step 3 — deliver (skimmable, tight)
103
104Use markers and keep lines to one each. Lead with the diff. Example shape:
105
106```
107# Roundup — Sat Jun 27, 2:30pm (last: 8h ago, Fri 6:00pm)
108
109## Markets (since last)
110S&P 500 5,432 ▲0.8% (+43) Nasdaq 17,9xx ▲1.1% Dow 39,xxx ▲0.3%
111BTC $61.2k ▼2.1% ETH $3.3k ▼1.4% Gold $2,3xx ▲0.4% WTI $79 ▲1.2%
112> one line: why the tape moved.
113
114## Top stories
115- [NEW] Neutral one-line headline. (NPR, BBC, Fox)
116- [DEV] Story from last time: what changed. (AP, Reuters)
117
118## Politics
119- [NEW] ... (CNN, Fox, Google)
120
121## Local (NC / Yadkin Valley)
122- ... (Elkin Tribune, WXII)
123
124## Sports — work talk
125- F1: last result / next race. (ESPN)
126- NASCAR: ... (ESPN)
127- Soccer: ... World Cup if live. (BBC Sport)
128
129## Gaming
130- [NEW] big release / studio news / hyped indie, one line. (PC Gamer, RPS)
131
132## Watercooler (HN)
133- ... (Hacker News)
134```
135
136If a section has nothing worth reporting, drop the whole section. Brevity over completeness.
137
138### Step 4 — save state + commit
139
140Write `~/code/memory/roundups/YYYY-MM-DD-HHMM.md` (timestamp from Step 0). Include a machine-
141readable **Snapshot** block the next run reads as baseline, then the delivered roundup:
142
143```markdown
144---
145title: Roundup 2026-06-27 1430
146type: roundup
147created: 2026-06-27T14:30
148tags: [roundup]
149---
150
151## Snapshot (baseline for next diff)
152
153Markets: S&P 500 5432.10 | Nasdaq 17912 | Dow 39044 | BTC 61200 (-2.1%) | ETH 3310 | Gold 2345 | WTI 79.10
154
155Tracked stories:
156- us-budget-talks: ongoing — <one-line current state>
157- <slug>: ongoing|resolved — <state>
158
159## Delivered
160
161<the exact roundup text sent to Isaac>
162```
163
164Then commit (no `Co-Authored-By`, present tense, `memory:` prefix):
165
166```bash
167git -C ~/code/memory add -A && git -C ~/code/memory commit -m "memory: roundup YYYY-MM-DD HHMM"
168```
169
170## Notes
171
172- Roundups are **not** indexed in `index.md` (too frequent, would churn it). The skill finds
173 the latest by sorting the `roundups/` folder. `index.md` carries one static pointer line.
174- No em/en dashes in prose (workspace convention). Use commas, periods, colons, parentheses.
175- Times and dates from the real `date` command, not guessed.
176- If a feed 404s or rate-limits, fall back to a Google News RSS topic feed or a WebSearch;
177 never block the whole roundup on one dead source. Note in passing if a major source was
178 unreachable.