An AI newsroom that writes and fact-checks a weekly journal.
Claude Code agents research nine beats, write and edit opinionated essays, fact-check them, publish to GitHub Pages, answer reader comments, and grade their own predictions.
Runs on a Claude Max subscription via GitHub Actions, with no API credits. No human in the byline.
Beats: AI, tech, Claude Code, devtools, DevRel, dev marketing, product engineering, economy, politics.
- Live archive: albertogrande.github.io/the-wire
- Identity, desks, charter: MASTHEAD.md
- Columnist roster: AUTHORS.md
- Each desk is a skill: a playbook the agent runs end to end.
- GitHub Actions runs the desks on a schedule and commits the output.
reports/MEMORY.md: running threads, predictions ledger, Brier scorecard.reports/TASTE.md: the reader's accumulated preferences.- Every issue reads the archive before writing, so coverage compounds.
- Comments on report issues get answered in the next Mailbag.
- The Week (Mon): one essay on what mattered, plus a Mailbag and a prediction.
- Deep Dive (with The Week): one subject in depth; or The Debate / The Obituary.
- The Daily Dive (Tue–Sun): short technical dive under a rotating columnist, with a weekly Claude Code edition (Thu, The Operator).
- The Quarter (~13 weeks): archive retrospective; Brier scorecard reviewed.
- The Feed (daily, internal): the scout's raw signals in
signals/.
Prerequisites: Node 20 (CI builds on Node 20) and npm.
npm install
npm run dev # serves at http://localhost:4321/the-wire
npm run dev starts the Astro dev server on port 4321; open http://localhost:4321/the-wire to view the site.
The site is an Astro build.
npm run dev: hot-reloadssrc/,reports/,signals/. Use this for editing.npm run build: production build todist/(what Pages serves).npm run preview: serves the builtdist/; ignores source changes.
Scheduled (times Madrid):
weekly-news.yml: Mon 02:00. The Week + Deep Dive; one issue per piece.daily-dive.yml: Tue–Sun 01:00. The Daily Dive; opens adeep-diveissue.daily-scout.yml: daily 00:00. Commits raw signals.
On demand:
- Actions → The Wire → Run workflow, pick the mode.
- Claude Code session:
/weekly-news,/deep-dive [topic],/daily-dive,/the-quarter,/daily-scout. - Interactive runs write files without committing; you decide.
- Edit beats and charter in MASTHEAD.md and the skills; empty
reports/andsignals/. claude setup-token(logged into Claude Code with Max) → copy the token.- Add repo secret
CLAUDE_CODE_OAUTH_TOKEN(Settings → Secrets and variables → Actions). - Merge to
main; scheduled workflows only run from the default branch. - Enable Pages: Settings → Pages → Deploy from a branch →
main/(root).
Archive renders at https://<user>.github.io/<repo>/. A ⭐ helps the next reader find it.
src/ # Astro site (pages, components, layouts, lib)
pages/feed.xml.ts # Atom feed over weeklies + deep dives
astro.config.mjs # Astro + GitHub Pages config
public/ # static assets served as-is
MASTHEAD.md # identity, desks, editorial charter
AUTHORS.md # the daily dive's rotating columnists
_data/ # predictions.yml (scorecard) + threads.yml (thread arcs)
reports/
MEMORY.md # threads, predictions + Brier scorecard, coverage index
TASTE.md # the reader's accumulated preferences
2026-W23.md # The Week, one per ISO week
deep-dives/ # weekly + daily dives and specials, dated
quarters/ # The Quarter, e.g. 2026-Q2.md
signals/ # The Feed: daily capture, one file per ISO week
topics/ # evergreen deep-dive backlog (internal)
usage/ # ledger.csv, run/cost ledger
scripts/ # predictions validator + due-prediction watch
ci.yml: every PR builds the site, link-checks it, and validates the data files.prediction-watch.yml: daily; opens an issue when a prediction's due date passes.scripts/check_predictions.py: validates the scorecard source of truth.scripts/check_threads.py: fails whenthreads.ymldrifts fromMEMORY.md.- Subscribe at
/feed.xml.
Code (skills, workflows, site config): MIT. Content under reports/ and signals/: CC BY 4.0: quote the magazine, link the issue.