Crawl and summarize newsletter posts from Nonzero and the NZN Network.

When Invoked

1. Ask what to summarize

If the user provides args (e.g. /nznet nonzero 30d), skip asking.

Otherwise, read ~/Documents/Projects/Nonzero/nzn-network.md and print a numbered list of all newsletters as plain text:

Which newsletter(s)? Reply with numbers (e.g. "1", "1,3,5", or "all")

  1. Nonzero (Robert Wright)
  2. Small Potatoes (Paul Bloom)
  3. Foreign Exchanges
  ...etc (full list from nzn-network.md)

Time period? (e.g. 7d, 14d, 30d, or a date range)

Do NOT use AskUserQuestion — just print the list and wait for the user to type their selection. Parse their reply (numbers, comma-separated, or "all") and the period.

2. Crawl the archive

For each selected newsletter:

  1. Open the archive page via agent-browser with the Substack profile: agent-browser close agent-browser --profile ~/.agent-browser/substack open "<url>/archive"
  2. Extract post URLs and dates from the archive HTML (grep for href and datetime attributes).
  3. Filter to posts within the requested time period.

3. Read posts

ALWAYS use agent-browser. NEVER use WebFetch. Agent-browser has Nikita's paid Substack login and returns the actual article text, not an AI summary. WebFetch has no auth and produces lossy summaries.

For each post, sequentially: 1. agent-browser close (if needed) 2. agent-browser --profile ~/.agent-browser/substack open "<post-url>" 3. agent-browser get text "article" to extract the text

Access tracking: Mark each post with one of: - [full] — got the complete article text - [free preview] — hit a paywall, only got the preview text above it - [title only] — only title and date available (no content extracted)

Always include these markers so the user knows exactly what was read vs. inferred.

4. Present results (three-step flow)

Step A — One-line index. List every post from every newsletter, grouped by newsletter. Each entry is one substantive full sentence describing the post's argument or content. Consistent depth — no post gets a paragraph, no post gets a fragment. Include the access marker.

Step B — Bob's highlights. Flag which posts seem most relevant to Nonzero's territory (AI, foreign policy, tribalism, cognitive bias, meditation/mindfulness, evolution of cooperation). Briefly say why each is relevant. This helps Nikita decide what to surface to Bob.

Step C — Ask. Ask if the user wants fuller summaries of any specific items, or wants to save as-is.

5. Save

When the user is ready, save to ~/Documents/Projects/Nonzero/summaries/{date}-{newsletter-slug}-{period}.md

Access Notes

  • agent-browser profile: ~/.agent-browser/substack (Nikita's Substack login)
  • ~/Documents/Projects/Nonzero/nzn-network.md tracks which newsletters have full paid access vs. free preview only
  • Auto-update access status: If a post hits a paywall on a newsletter marked full in nzn-network.md, update it to free preview only. If access works on one marked free preview only, update it to full. This keeps the file current across runs.
  • If agent-browser cookies expire (you get logged out), tell the user to re-login: agent-browser --headed --profile ~/.agent-browser/substack open "https://substack.com/sign-in"

Tone

Informational. Neutral summaries that capture Bob's arguments faithfully without editorializing.

$ARGUMENTS