Agent perspective and epistemic isolation
Mesh hosts many agents in one control plane, but co-residency is an operational fact, not shared cognition.Multi-agent hosting is operational multiplexing, not shared cognition.Each
RuntimeAgent experiences the world through its own perspective: its own actors, connector identities, conversations, messages, memory, and prompt history. Another participant may happen to be a RuntimeAgent hosted by the same Mesh deployment, an agent hosted somewhere else, a human, or a service. That distinction is not part of the participant’s conversational identity and must not be inferred from Mesh’s internal topology.
The portability test
The boundary is correct when this remains true:Moving another participant from this Mesh deployment to a completely unrelated implementation must not change anything the current agent can observe, retrieve, remember, or infer about that participant, provided the participant’s external connector behavior remains the same.If moving Daedalus out of the deployment changes Lyra’s prompt, memory, addressing behavior, or available context, Mesh has leaked control-plane knowledge across the perspective boundary.
Control plane versus perspective
The Mesh control plane necessarily knows facts that an agent must not receive as conversational context. For example, it may know that a Slack connector identity belongs to aRuntimeAgent it hosts. That knowledge is legitimate for:
- routing inbound events to the correct runtime
- recognizing an agent’s own connector identity
- preventing self-echoes and pathological execution loops
- enforcing authorization, budgets, and concurrency
- auditing causal chains and operational behavior
- administering agents and connectors
- scheduling and supervising one RuntimeAgent’s internal WorkGraph
runtime_agent_id, private state, tool grants, model configuration, memory, or the fact that the participant is hosted by Mesh unless that fact was learned through the external conversation like any other fact.
Actor is intentionally opaque
AnActor means: a participant as known within one RuntimeAgent’s perspective.
Mesh does not classify an Actor as human, agent, or service. The graph records identity and behavior that the current perspective actually observed, not an ontological claim about what sits behind a connector account.
This means Actor.kind does not belong in the model.
Self-recognition is the one deliberate exception. A RuntimeAgent may use its own connector credentials and connector identity to recognize itself. That privileged recognition does not extend to peers.
For Lyra:
- Lyra’s own Slack identity ->
self - Daedalus’s Slack identity ->
Actor - an externally hosted bot ->
Actor - Victor ->
Actor
Perspectives do not share actors
Actor identity is stable across connectors only within one RuntimeAgent’s perspective. If Lyra and Daedalus both interact with Victor, Mesh must allow these to be distinct graph identities:actors and connector_identities carry the owning runtime_agent_id, connectors is unique per perspective, and composite foreign keys require an identity’s Actor and Connector to belong to the same RuntimeAgent — so a cross-perspective link is not storable. See data-model.md.
In particular this holds when two RuntimeAgents share external connector topology: the same Slack workspace, the same conversation namespace, even the same external user id. Nothing about the boundary depends on their installs having been configured with different values. An earlier implementation carried the boundary in the conversation namespace alone, which meant an ordinary configuration choice — leaving a second install’s namespace unset — silently merged both agents’ actors and history.
Conversations and messages are observations
The same external event may legitimately exist once in each RuntimeAgent’s perspective that observed it. For example:Memory and context isolation
Memory belongs to the RuntimeAgent that learned it. The context resolver must begin with a RuntimeAgent/perspective and remain inside that boundary for the entire read. It may retrieve:- actors known to this perspective
- conversations observed by this perspective
- messages observed by this perspective
- memory written by this RuntimeAgent
- versioned profile/tool state belonging to this RuntimeAgent
WorkGraph workers stay inside the perspective
runtime/work-graph.md lets one RuntimeAgent decompose a complex objective into bounded worker executions. Those workers are not additional RuntimeAgents.
If Lyra creates three parallel research nodes, Mesh has not created three new coworkers. It has created three temporary execution contexts owned by Lyra’s root Run.
A worker:
- uses Lyra’s perspective as its only eligible knowledge source
- receives a deliberately bounded subset of Lyra’s context
- may receive only a subset of Lyra’s tools and authority
- has no connector identity of its own
- does not appear as an Actor
- does not own separate long-term memory
- does not gain privileged knowledge about other co-resident RuntimeAgents
Agent-to-agent interaction
Mesh-hosted agents communicate through connectors exactly as unrelated participants do. If Lyra speaks to Daedalus in Slack, Daedalus receives a Slack-authored participant message. There is no private Mesh side channel that gives either runtime a richer conversational representation of the other. The control plane may retain hidden causal provenance for safety and auditability. For example, it may know that an effectful Lyra run was triggered by a message emitted by a Daedalus run. That provenance may constrain authorization, cycle depth, budgets, or loop prevention, but it must not become prompt context unless the same fact is externally observable. WorkGraph workers are different because they are not peers. They are internal execution children of one RuntimeAgent. Their parent/child relationship is legitimate control-plane context for scheduling, budget, authorization, artifact routing, and auditability. It still does not create new conversational actors.Guardrails
- do not classify Actors as human, agent, or service
- do not expose RuntimeAgent identity through the conversation graph
- do not share Actors, memory, or conversation state between RuntimeAgent perspectives
- do not let co-residency change an agent’s observable world
- do not use control-plane identity mappings as model context
- do not bootstrap one agent’s cross-connector identity links from another’s
- do not treat a per-install configuration value (namespace, workspace id) as the isolation boundary; ownership is an explicit key
- self-recognition is privileged; peer-recognition is not
- do not optimize duplicated external observations by collapsing their perspective-specific semantics
- do not model WorkGraph workers as RuntimeAgents or Actors
- do not give a child worker a broader perspective, tool set, or authority than its parent RuntimeAgent