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

ScriptPurpose
auth.tsOne-time OAuth 2.0 PKCE flow; writes .tokens.json
client.tsAuthenticated fetch wrapper with auto-refresh
list-members.tsPrint all members of the Intel list
fetch.tsSource-side filter via /2/tweets/search/recent
pull.tsFetch + persist to SQLite (idempotent on tweet id)
classify.tsPer-tweet classification via Ollama (tool-use-style structured output)
digest.tsPer-day markdown digest grouped by category
run-daily.shOrchestrator 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

IDNameStatus
M-1OAuth 2.0 user-context auth (PKCE)
M-2Source-side filtered fetch
M-3SQLite storage with idempotent inserts
M-4Local LLM classifier (Ollama)
M-5Markdown digest grouped by category
M-6Daily launchd schedule
M-7Email delivery⬜ Parked
M-8Classification accuracy refinement⬜ Backlog