Memory
Everything the brain knows lives on this host, under ~/.contextful. Data gets in one way: ingest → scrub → synthesize → index — and it gets out one way, through capability-filtered brain.query.
Ingest pipeline
1
Ingest
Connector payloads arrive on-host via sync ingest — nothing is fetched cloud-side.
2
Scrub
Inbound secrets and card PANs are stripped before anything is persisted.
3
Synthesize
Raw events are folded into per-team, per-period views with provenance.
4
Index
Rows land in the brain index — SQLite + FTS5 under ~/.contextful.
5
Serve
brain.query authorizes every field and row against the caller's token first.
Indexed views
| view | rows | columns |
|---|---|---|
| stripe/spend_by_team | 4 | teamperiodgrossnet |
| stripe/finance_private | 4 | teamperiodgrossnetdiscount_tiercreditsemployee_salary |
Recent ingest activity
- okstripe · invoice.paid → spend_by_team · +4 rows (period 2026-05) · 2 min ago
- blockscrub · card PAN detected in payload → redacted before persist · 2 min ago
- okstripe · credit_note.created → finance_private · credits updated · 9 min ago
- okexa · world memory refresh → 6 documents cached on-host · 14 min ago
- infodaydream · linked “Q3 AI Spend Review” ↔ vendor-consolidation (shared vendors) · 31 min ago
- infocron · nightly synthesis pass → 2 views re-rolled, 0 anomalies · 1 h ago
Red chips are finance-private fields — they are indexed here, but a brain.query only returns them when the caller’s capability token grants the field, and employee_salary has no approval path at all.