repos
/ taproot main

taproot

mirror

The 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

10.0 KB · 179 lines · markdown Raw History
  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.