The intersection model of user ∩ agent ∩ tenant is a clean framing, and I like that the request itself bounds scope (a summarize request yields read-only). One question: how would the gateway treat tool results that flow back into the context? Even with writes denied, a poisoned ticket could steer a later, legitimately in-scope call, so tagging retrieved content as untrusted and requiring a fresh scope check per call seems worth considering. Logging denied calls with the matching policy IDs also looks like a good injection-detection signal to alert on.