A team of agents that remembers
A team of agents without shared memory is a team with amnesia: the support agent learns the customer upgraded, and the billing agent asks them to confirm their plan an hour later. The obvious fix — one shared vector store everyone reads and writes — trades amnesia for a worse disease: every agent sees everything, and nobody can say afterwards who wrote what.
Smara's answer is pools. A pool is a named, shared slice of memory that lives alongside each agent's private memory, not instead of it. Access is per-API-key: a key holds pool:support-fleet:read or :writegrants, write implies read, and a key without the grant cannot see the pool exists. Reads combine private memory with exactly the pools the caller requests — so an agent's context is its own history plus its team's, never a stranger's.
Every record still carries full provenance — which session wrote it, which extraction produced it, which actor — so “who told the team this?” stays answerable inside a shared pool. The pool rows live in the same Spanner tables as everything else, which means shared writes get the same transactional guarantees as private ones: two agents recording into one pool cannot race each other into a corrupted state.
Webhooks close the loop for systems that are not agents. Register an endpoint and Smara notifies it on memory changes — fact created, fact superseded, consolidation completed. Payloads are HMAC-signed and carry ids only, never content: your endpoint proves the event happened, then fetches what it is authorized to fetch. An endpoint that keeps failing is disabled automatically and flagged in the portal rather than retried forever.
The newest layer is content policy. Mark a key deny:domain:personaland it never receives personal-domain memories — and, deliberately, never receives unclassified ones either, because an unlabeled memory must not slip through a policy meant to restrict. Combined with pools, this gives a team shape you cannot build on a shared vector store: the research agents share a pool, the client-facing agent reads it through a key that structurally cannot surface anyone's personal context.
Pools, grants, webhooks, and key policies are all live — portal tabs of the same names. The two-agent demo takes about a minute: one key writes a fact into a pool, the second key sees it in context, a third key without the grant does not.