Memory
What RobotMoney knows about a tenant, where it came from, and how to query it.
This page is optional for headless integrations.
RobotMoney holds, per tenant, a continuously updated record of every financial fact it has seen: transactions, balances, accounts, counterparties, obligations, invoices, contracts, on-chain transfers. You can query it as structured data or in natural language.
Two Ways to Read It
// Structured.
const txns = await brain.ledger.transactions.list({ from: "2025-09-01" });
// Natural language.
const answer = await brain.wiki.question({
question: "What did we spend on AWS last month?",
});Both reach the same underlying record. Structured queries are precise and predictable. Natural-language questions are forgiving and discoverable. Use structured for code paths you'll hit often; use natural language for the questions you wouldn't have thought to filter for.
What Goes In
RobotMoney ingests from any source the tenant authorizes:
Banks and processors
Plaid, direct bank APIs, Stripe, Adyen
On-chain
Wallets via Alchemy, contract event streams
ERPs
NetSuite, SAP, Dynamics
Accounting
QuickBooks, Xero
Payroll
Gusto, Rippling, ADP
Documents
Email-attached invoices, CSV/PDF uploads
Agent contributions
Transcripts, signed contracts, observations from external agents
You connect a source once. RobotMoney handles the rest: pulling, parsing, normalizing, indexing, keeping it current.
Citations on Every Claim
Every answer RobotMoney gives carries citations back to source evidence.
You can render those citations in your UI as clickable proof. Open one and RobotMoney returns the underlying transaction, invoice, or document.
What "Continuously Updated" Means
New transaction lands at a bank
Webhook arrives; record updates within seconds
Invoice paid
Obligation closes; counterparty's payment history updates
Counterparty merged
Duplicate entities resolve; relationships rewrite
New month begins
Rolling summaries regenerate
There's no batch job you wait for. The memory is current.
What "Tenant-Isolated" Means
Each tenant has its own logical record. Cross-tenant access is impossible by construction:
Storage
Per-tenant database partitions and Azure Blob prefixes
Encryption
Source credentials use a single AES-256-GCM key loaded from Azure Key Vault in production or BRAIN_SOURCE_CREDENTIAL_KEY outside production
Authorization
Every API call carries a tenant; cross-tenant reads return 404
You'll never accidentally surface one customer's data in another customer's response.
Memory Compounds
The longer RobotMoney runs for a tenant, the better it gets:
First days
Counterparty profiles emerge; basic narrative anchors form
First months
Rolling baselines mature; anomaly detection becomes possible
First year
Year-over-year comparisons unlock; vendor history is deep
Multi-year
Cross-period narratives are durable; switching costs are real
Where This Lives in the Protocol
If you want to look under the hood, memory is built from three of RobotMoney's six layers:
Raw
Lossless ingestion of the original evidence
Ledger
Deterministic structuring into immutable records
Wiki
Continuously regenerated human-readable memory
Related
The rules that govern action on memory
Policy
Who can read memory
Agents
Proving RobotMoney's claims
Proof
Last updated
