Why agents make the tenancy problem sharper
Ordinary SaaS multi-tenancy is already hard. Agents make it harder for three concrete reasons.
They carry cross-cutting context. An agent stitches together memory, past runs, tool results and a live request. A single place where the code reaches for "the org" and finds the wrong one taints everything downstream: the memory it writes, the summary it returns, the next decision it makes.
They act, not just answer. A read leak is bad. An agent that resolves to the wrong tenant can also write, dispatch a tool, or spend a budget against the wrong account. The blast radius is actions, not just rows.
They lean on defaults. The most common real cause is not a clever attack. It is a fallback. A background job with no request context reaches for org_id || 'default', and now every tenant's work is tagged to one shared bucket: the same lineage, the same ledger, the same crystallised "learning".
We have found exactly this shape in our own code and fixed it; it is the boring failure that ships, not the exotic one.