People/<them>/Inbox/ — where their assistant summarizes it, extracts decisions and action items, and files it. This page is about the step before that: how a transcript, an email, or a voice memo actually gets into the Inbox.brain ingest command is the safe, server-side way to do it.brain ingestbrain ingest writes one provenance-stamped note into a person's Inbox in the master vault and commits it. It is the single code path that lets an outside channel drop a note into someone's private space — so all the safety checks live here, not in any channel:12echo "Client agreed to renew. Follow up Monday." \ | brain ingest --master /srv/brain/master --person bob --source chat --title "Renewal call"
People/bob/Inbox/2026-07-08-renewal-call.md:1234567--- title: Renewal call source: chat from: bob created: 2026-07-08 --- Client agreed to renew. Follow up Monday.
brain cycle compiles that note into bob's vault — and, because of the compiler, only bob's. From there the assistant protocol in the master AGENTS.md routes it out of the Inbox. See the CLI reference for every flag.--from <email>, the address must match a person's email in org.yaml; an unrecognized sender is rejected, never guessed onto someone.--- in the title, sender, or source is rejected, so channel input can't inject frontmatter keys.Brain Ingest <ingest@brain.local> identity, distinct from authenticated write-backs.brain ingest call. None of them ship as a running service; they're patterns you wire up with tools you already have.brain ingest:123# invoked by your mail pipe with the parsed message on stdin brain ingest --master /srv/brain/master \ --from "$SENDER_EMAIL" --title "$SUBJECT" --source email
email: in org.yaml so --from can resolve them. Anything they can email — a forwarded thread, a note to self — becomes an Inbox item. The recipe supplies plain text; brain ingest does not parse raw .eml or attachments.1brain ingest --master /srv/brain/master --person bob --source chat
1transcribe memo.m4a | brain ingest --master /srv/brain/master --person bob --source voice
1brain ingest --master /srv/brain/master --person bob --file "$DROPPED_FILE" --source upload
--file, the original filename is recorded as original-name and, absent --title, becomes the note's title.1brain webhook --master /srv/brain/master
_meta/webhook.yaml (server-only, never compiled into any vault):1234567891011121314sources: - id: fathom-alice # POST /hook/fathom-alice person: alice # every delivery lands in alice's Inbox verify: standard-webhooks # HMAC signatures (Fathom, Composio, …) secret_env: WEBHOOK_FATHOM_ALICE_SECRET source: fathom # provenance label on the note body_field: transcript # payload field holding the note text - id: zapier-intake route: sender-email # resolve the person from the payload's email_field: email # email via org.yaml — unknown senders refused verify: token # shared-secret header, for senders that can't sign secret_env: WEBHOOK_ZAPIER_TOKEN source: zapier
standard-webhooks checks the Standard Webhooks HMAC signature (with replay protection) that Fathom, Composio, and a growing list of providers send; token checks a shared secret in the Authorization: Bearer or X-Brain-Token header for platforms like Zapier and Make that can add headers but not sign requests. Duplicate deliveries (providers retry) are detected by webhook-id and ingested once. Each source is also rate limited — 60 accepted deliveries per minute by default, tunable per source with rate_limit — so even a leaked secret can only trickle notes in, not flood an Inbox. Refused deliveries get a retryable 429, so providers redeliver them and nothing is lost.brain ingest primitive as every other channel — same constructed path, same write-permission check, same frontmatter sanitizing, same audit commit. The receiver decides who may deliver; it never decides where bytes land.127.0.0.1 by default. To accept deliveries from the internet, put a TLS reverse proxy (Caddy, nginx) in front and point providers at https://your-host/hook/<source-id>. brain doctor checks that webhook.yaml parses, its people exist, and every secret variable is set.brain init scaffolds a commented _meta/webhook.yaml.example you can copy and fill in, brain status reminds you when intake isn't configured yet, and deploy/brain-box/ ships a ready-to-install systemd unit (brain-webhook.service) and Caddy snippet (Caddyfile.webhook). That snippet assumes Caddy terminates TLS itself; if your box sits behind edge-terminated TLS (a CDN plus an outbound-only tunnel), use the adapted wiring under "Fronting the receiver" in the reference deployment instead.brain dashboard is itself a capture surface: a Capture composer in the header writes a note straight into your Inbox, and the composer names the exact destination (People/<you>/Inbox) before you save. It reuses the same constructed-path, sanitized-frontmatter, symlink-refusing builder as brain ingest — the difference is only where the note lands first. Under the admin (master) lens it calls brain ingest directly and commits immediately; under a person's own vault lens (the compiled slice, which has no master to write) it writes into that slice's People/<you>/Inbox/, and the next brain cycle's write-back carries it to master — the same trust boundary Obsidian edits already pass through.Company/Intel/ — one flat page per subject, every claim cited [source](URL), as of YYYY-MM. The source is the URL when there is one, or the publication, title, or uploaded filename when there isn't; the date is the source's own, or captured YYYY-MM (today's) when the source shows none. The full text or file never enters the vault — the citation is the record. The person's own take on the piece stays in their People/<person>/Notes/.Notes/. Those pages carry no folder convention saying "this came from somewhere else", so the agent marks them explicitly — distilled: <URL or title> in frontmatter — and cites the claims the same way. brain doctor holds those pages to the same rule as Intel (citations: no dated citation, or a newest one over 12 months old), and brain doctor --net can go further and check whether the cited source still resolves. See brain doctor.Company/Intel/Portugal.md) with mode: create, linked both ways with related pages and from the Intel/Home.md map.mode: append to add its note under a divider, or mode: patch carrying the complete revised page when the update reshapes more than one section. Either way the target is the existing page itself — no separate file, no addendum to fold in later.<Name> — updates YYYY-MM.md file in Company/Intel/ is legacy
unfolded work from the old addendum flow, not something a current agent
should create. brain doctor flags it as a warning — fold it into the main
page and delete it by hand if you spot one.