intel — Personal Intel Digest
Status: Live (v0) Cadence: Daily at 08:00 local via launchd Started: 2026-05-11
Goal
Replace ad-hoc tab-scrolling on VC/tech-journo X with a curated daily digest. Pull from a private X List, classify each tweet by signal type, drop noise, produce a markdown brief that’s read once and done.
Technical
- Code:
~/projects/intel/(TypeScript, tsx + better-sqlite3, no git remote yet) - DB:
~/topaz/intel/tweets.db(SQLite, WAL) - Digests:
~/topaz/intel/digests/YYYY-MM-DD.md - Logs:
~/topaz/intel/logs/ - Scheduler:
~/Library/LaunchAgents/com.davidtingle.intel.daily.plist(08:00 daily) - LLM: Ollama qwen2.5:7b on localhost (14B doesn’t fit on this Mac’s GPU)
- X app:
startup_intel(separate from DealDeck’s X app); Pay-Per-Use account; OAuth 2.0 user-context with PKCE (private list requires it)
Components
| Script | Purpose |
|---|---|
auth.ts | One-time OAuth 2.0 PKCE flow; writes .tokens.json |
client.ts | Authenticated fetch wrapper with auto-refresh |
list-members.ts | Print all members of the Intel list |
fetch.ts | Source-side filter via /2/tweets/search/recent |
pull.ts | Fetch + persist to SQLite (idempotent on tweet id) |
classify.ts | Per-tweet classification via Ollama (tool-use-style structured output) |
digest.ts | Per-day markdown digest grouped by category |
run-daily.sh | Orchestrator invoked by launchd |
Source filter
8 included from the 18-member Intel list. Edit authors.json to add/remove.
Included: tbpn, ArfurRock, KawzInvests, FadeCapital, MollySOShea, jemimacmcevoy, Katie_Roof, Techmeme.
Categories
funding_confirmed · funding_speculation · people · product · macro · market_take · noise (excluded from digest).
Known limitations
- 7B’s instruction-following on “don’t invent facts” is weak. Mitigated by rendering the source tweet text under every synthesis bullet so the reader can sanity-check.
- launchd only fires when the Mac is awake. Catches up on wake within the same calendar day; if asleep across the 08:00 window the run will trigger slightly late.
- No email delivery (parked).
Milestones
| ID | Name | Status |
|---|---|---|
| M-1 | OAuth 2.0 user-context auth (PKCE) | ✅ |
| M-2 | Source-side filtered fetch | ✅ |
| M-3 | SQLite storage with idempotent inserts | ✅ |
| M-4 | Local LLM classifier (Ollama) | ✅ |
| M-5 | Markdown digest grouped by category | ✅ |
| M-6 | Daily launchd schedule | ✅ |
| M-7 | Email delivery | ⬜ Parked |
| M-8 | Classification accuracy refinement | ⬜ Backlog |