An agent is one studded brick-stack. What makes it safe stays per-agent and un-shareable; the machinery underneath is shared code. You compose a mesh the way you build with Lego: the studs are a contract, so any emitter fits any receiver that honors it.
Amber cells carry the safety guarantee and are the agent's alone. Teal cells are the same broker/airlock code that sits under every agent. The studs on top are how it connects.
The trading-agent set. One agent's emitter is another's receiver: a brokered peer.publish lands at the receiver's airlock as sender-class=peer-agent. Same studs, so they just fit.
Same code, config differs. The two traders run one program; only provider and rung change. A signal is data: the trader re-decides under its own polarity, so "approved peer" never means "believed peer." And a brick can even live on a different cloud: the studs are the wire contract, not the transport, as long as it's a real safe-agents broker enforcing provenance.
Two agents, full isolation by default: identical stacks. To spend fewer resources you widen a mechanism brick under the trust cells, but a shared brick still keeps each principal's chain separate inside it.
Isolated (today). One runtime, one principal, one un-forkable chain per agent: independent blast radius. Cost: N queues + N drains.
Multiplexed (a deployment dial). One drain serves many principals with far fewer resources. The trust cells above stay separate, and the shared brick still holds each chain apart inside it: now an in-process discipline instead of an AWS boundary. You widened the mechanism, not the boundary.
The rule. Some bricks can never widen: principal, turn/taint, trust-map, audit chain. Everything you gain by multiplexing, you gain under those cells, never through them. Isolated-vs-multiplexed is a per-deployment risk call, not part of the agent contract.