How The Loop is made
A wiki the model maintains; a persona it can't talk past. Three Claude Code sessions a day, each ending itself via /goal. No third-party API keys.
The thesis
The newsletter is whatever the wiki says. The wiki is what the model maintained yesterday. The drafter is a thin renderer on top.
Three sessions, one substrate
Three Claude Code sessions run nightly. Each is a self-terminating routine that ends via /goal. They share one substrate: a markdown wiki the model edits in place.
data-collection writes candidate pages from raw items. wiki-cleanup grades them — promotes, dedupes, expires. newsletter-generation reads the wiki, never the raw items. The drafter sees what the model already shaped.
The wiki is the architecture
Karpathy's LLM wiki pattern, made concrete. Raw sources are immutable — items.jsonl, post-dedup, SHA-stamped. The wiki is what the model writes on top: candidate pages with cross-refs and source SHAs, a nightly lint that flags orphans, contradictions, and claims a newer source supersedes.
The tedious part of maintaining a knowledge base is not the reading or the thinking — it's the bookkeeping. — Karpathy
The point is compounding. "This rhymes with the open-weights catch-up" is a cheap lookup over a graph the model has been editing for months — not a vector search over loose documents that arrive blindfolded to every query. RAG, structurally, can't do this; it forgets between sentences. The persona accrues credibility because the wiki accrues memory.
The moves
- Personas are configs, not code. One drafter, seven reviewers — eight markdown files. Skeptical-analyst, fact-checker, plain-english editor, continuity-reviewer, devil-on-shoulder, the-bartender, the-historian. Swap any by editing a file. Claude Code's Agent tool dispatches them in parallel and severity-flags the diff.
- Bets have state. Every predictive claim becomes a
CLM-NNNNwith confidence delta and resolution horizon. Expired claims surface at the next run. Crow gets eaten on the front page, not in a correction footer. - Three-whys, recorded. Before the take crystallizes, the drafter writes its three "why"s to
drafts/issue-N/scratch/three-whys.md. One reviewer checks the chain. The receipts are in the repo. - Subscription-bound. No embeddings, no search API, no third-party inference key. Opus drafts. Sonnet reviews. Haiku ingests. Synthadoc's MCP runs in the same session.
- No human edits between draft and publish. Once reviewers clear, it ships. Wrong calls land in the next day's Reckoning, not in a quiet edit.
The stack
- Engine: newsletter-loop (AGPLv3) — Python, click CLI, pydantic configs, plugin contracts for sources and publishers, CLM state machine, SKILL.md driver.
- Wiki spine: synthadoc — local-first knowledge compiler, source dedup, ingest manifest, lint pass. MCP server, claude-code provider.
- Instance: the-loop-newsletter — persona, source list, the wiki, the archive.
- Render: this site (Next.js + Vercel). Markdown → HTML, RSS,
llms.txt.
How to read an issue
- The Reckoning when it leads — old bets just resolved.
- The take — load-bearing opinion, three-whys deep.
- Also worth knowing — scanning surface.
- Open bets — every CLM has a confidence delta and a resolution horizon.
Feedback
If a take is wrong, the next issue will hear about it. DM or email. Every issue's review-summary lives next to its draft.md.