MalloryEstate Briefing
M·061Reference
← All briefings

Estate

How It Works

Eight numbered flows — from a single chat turn to a Hermes-built pull request — each showing the edge-local invariant in practice.

Dated 2026-06-15Programme Estate

Situation

This document walks through Mallory's key operational flows as short numbered sequences, each cross-referencing the components in 02-architecture.md. It's the clearest place to see the edge-local invariant actually operating: every flow either runs entirely at the edge from stores it already holds, or hands work off asynchronously to the Hub/Tower without ever blocking a turn on their availability.

The flows span the everyday (a chat/voice turn, in-conversation recall) through the proactive (nudges, briefings) to the async and delegated (deep research digs, Hermes building a reviewed PR, Hermes's own activity digest) and the context layer that threads through all of them (mode resolution).

Key decisions

Turn never blocks on home infra

If signals are stale or the Hub is down, the context-assembly step still runs from whatever the edge last held, and an availability note makes the gaps explicit rather than hanging or erroring.

Recall stays edge-local

Vault notes are searchable at the edge only because the Hub mirrors them into vault_notes via periodic /vault/sync pushes — recall never calls out to the vault live.

Nudges: dedupe first, then gate

Duplicates are dropped by dedupeKey before the mode gate runs; high priority always interrupts, low never does, otherwise the active mode maps the nudge to interrupt/batch/defer, still subject to quiet hours and a soft/hard cap.

Updates, not chat, for proactive output

Briefings and nudges are recorded to the Updates surface, deliberately not the chat feed, keeping the conversation calm.

Digs are async by construction

A deep-research turn enqueues a D1 investigation record and returns immediately; the Hub's research worker claims and completes it, pushing a cited report back inbound.

Hermes digest sync is read-only today

Hermes's own activity (commits + vault-lane notes) is dedup-ledgered into hermes_events and surfaced as a read-through feed — the estate does not yet delegate to Hermes live.

Mode resolution precedence

Manual override (auto-expiring at 04:00) beats a Hub-pushed calendar hint, which beats a routine weekday/hours default; the resolver is designed to be extensible with new hint sources (e.g. device signals) without downstream changes.

Architecture

Eight flows, each a short sequence across the Worker, Hub, and (for two flows) Hermes.

1. Chat/voice turn
Classifier picks turn type + needed signals; Worker assembles context, streams the Anthropic reply, renders rich-content fences as attachments, optionally synthesises voice via ElevenLabs.
2. Recall / search
D1 FTS5 over messages + vault notes, BM25 + recency + soft hat-bias, cited sources shown with deep-links.
3. Proactive nudge → push
Hub POSTs /nudge; dedupe → mode gate → teaser composed in-persona → notify() fans out over web-push + FCM; every nudge recorded in the nudges ledger.
4. Briefing / EOD
Scheduled Worker ticks compose a persona-voiced summary from current signals into Updates; EOD also does housekeeping.
5. Async dig
Classifier flags deep research; Worker enqueues, returns immediately; Hub's research worker does web + vault synthesis and pushes a cited report back.
6. Hermes as dev-driver
Hermes reads a plan, implements + tests + commits under its own identity, opens a PR; a reviewer approves; deploy happens on explicit request.
7. Hermes → edge digest sync
A Tower cron gathers Hermes's own commits/notes, POSTs /hermes/digest; Worker dedup-ledgers events and voices a one-line summary per new event.
8. Mode resolution
Activity × hat resolved edge-side by precedence (override > calendar hint > routine default); feeds the nudge gate, persona context line, and recall hat-bias.
spec · docs/estate/03-how-it-works.md
Mallory · Estate briefing