Steven Gonsalvez

Software Engineer


CEREBRO


machine-read, human-curated

CEREBRO is a pipeline, not a person with a bookmark folder. It runs once every morning, reads a few hundred candidate items across every channel below, throws away almost all of them, and writes what is left up as a briefing. This page is the colophon: what it reads, how it decides, and what every number on the section actually means. Nothing on this page is typed in by hand: every figure is computed from the published corpus when the site is built, so it is accurate the morning after it changes.

How a briefing is made

  1. Collect

    Every enabled channel runs concurrently in its own thread and is isolated from the others: Hacker News and Show HN, YC launches and requests for startups, subreddits and tracked Reddit users, GitHub trending, tracked developers, star-velocity and natural-language repo search, an RSS set, pinned seed URLs, a Swipe index, X, and a newsletter mailbox. A channel that errors is logged and skipped; it can never take the run down.

  2. Junk gate

    Deliberately lenient. It drops only obvious non-content: an empty or under-four-character title, or a title that is more than half non-ASCII. Real relevance filtering is the triage pass, which is cheap enough to over-feed, so the gate errs towards keeping things.

  3. Deduplicate

    URLs are canonicalised first (tracking parameters stripped, host lowercased, fragment and trailing slash dropped), so the same story arriving from four channels collapses to one. Near-duplicates are then caught with a 63-bit simhash at a Hamming distance of 3 or less, which matches a rewritten headline about the same thing. Both checks run against a rolling 14-day watermark of everything already seen, so yesterday’s story does not reappear today.

  4. Pre-rank

    A cheap, model-free interest score trims the survivors to a fixed ceiling before a single token is spent. This is the stage that keeps the daily cost on the next page where it is rather than an order of magnitude higher.

  5. Triage

    Claude Haiku reads what is left and scores each candidate for relevance, with a one-line reason. Anything below the 0.50 bar is dropped. The score and the reason both survive onto the signal note, which is why you can see them in the archive: the model’s own justification is published alongside its verdict rather than hidden behind it.

  6. Extract

    Only the survivors are fetched and parsed for their article text, and only the top slice of them. That extracted text is used to write the briefing and is then discarded; it is never published. See “What is published, and what is never published” below.

  7. Enrich

    For items with a Hacker News thread, the discussion is summarised into a short community take: what the room actually said, not what the headline claimed.

  8. Digest

    Claude Sonnet writes the briefing itself: the sections, the one-line summaries and the groupings you read on the daily page. The run’s token and cost meter is written into the note’s frontmatter, which is where the cost page gets its numbers.

What is published, and what is never published

The pipeline fetches and parses the body of every article it keeps, because the digest model needs it to write an honest summary. None of that text is published here. A signal note on this site is exactly ten fields (its hash, title, category, tags, source channel, relevance score, the triage model’s one-line reason, the community take, the original URL and the capture timestamp), and the loader that reads it assigns those ten by name. There is no spread, no passthrough, and no field on the type for a body, so scraped prose is not stripped at render: it is unreachable by construction. A build-time scan of the generated output for verbatim sentences from real scraped bodies runs on every deploy and fails the build on a single hit.

What you get instead is the link. Every headline in the archive points at the original, and reading the original is the intended outcome.

What the numbers mean

Score
The triage model’s relevance judgement for that item, on the day it was read. Anything under 0.50 never reaches a briefing, so the published range is narrower than the model’s range: across the whole corpus the scores actually published run from 0.50 to 0.95. It is a filter threshold, not a quality grade, and it is not comparable across days.
Fetched vs in briefing
Each briefing carries a per-channel ledger. Fetched is how many items that channel returned that morning; in briefing is how many survived the whole funnel. The ratio is the interesting part, and it is usually brutal; see the source ledger. A channel with a zero row still appears: a channel that returned nothing is information too.
Count, and the quiet days
A briefing’s count is the number of signals it kept. 7 of the 62 briefings published so far kept nothing at all. Those days are still published, deliberately: a pipeline that only shows you the days it found something is a pipeline you cannot calibrate. Across every briefing, 1,371 signals have been kept.
Channels
12 channels appear in at least one briefing’s ledger, and 9 of them have contributed at least one signal that was kept. Both numbers are counted from the corpus rather than from the configuration, so a channel added tomorrow appears here the morning after its first briefing rather than when someone remembers to edit this page.
Cost
Every run meters its own token use and dollar spend and writes them into the briefing’s frontmatter. Those are summed on the cost page. They are the model spend of this pipeline and nothing else.

By the numbers

Briefings
62
Signals kept
929
Channels listed
12
Categories
4
Score range
0.50–0.95
Quiet days
7