Skip to content

Gate

The gate is the cost governor. Everything is archived; the gate decides what the dream pass even looks at. It is deterministic code — no model, ever — so "hey" costs nothing and a newsletter never reaches an expensive call.

Messages

A message passes on any of: a temporal token (weekday, "tonight," "tomorrow," a time, a date), a question mark, a first-person commitment verb, a top-tier sender, an availability state, an invitation, a wiki attribute, a known contact in a 1:1 thread, a full-stream source (iMessage), or your own commitment or directive. Most chatter fails everything and is archived for search at zero model cost.

memcal gatecheck --stream groupme --limit 40   # what is passing and rejecting
memcal top alice                               # alice always passes the gate

Email is a sender problem

"AWS re:Invent night is tomorrow" and "poker is tomorrow" are lexically identical. Nothing in the text separates them, so the gate keys on the sender using free signals: List-Unsubscribe, List-ID, Precedence: bulk, provider category labels, and whether the address has been seen before.

An unknown sender gets one decision — ignore, archive-only, or process — and after that it is a table lookup forever:

memcal senders                       # the email gate table
memcal senders vendor@example.com ignore
memcal mail                          # what is queued, by priority

Automatic relevance sets a priority, never a verdict. Low-priority mail is read after everything else in bounded batches and stays searchable the whole time. The only thing that keeps a sender out entirely is an explicit ignore — and a blocked sender's body is never fetched or stored.

Mutes and blocks

Muting shapes priority and presentation, never collection. memcal block (sender or stream/thread) means never spending a model call there again; the archive rows remain. Platform mutes (a muted Slack channel, an archived Telegram dialog) are recorded with the platform's own note and handled per MEMCAL_PLATFORM_MUTE.

What the gate does not do

New-activity detection never depends solely on passing the keyword gate: "Actually, use my new place" can matter in a known event thread even though it carries no temporal token. Thread association for freshness uses evidence links and bounded candidate retrieval, not the gate — the gate governs model cost, not relevance.