<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mpsb-agntcy-slim-02" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="agent-slim">Secure Low-Latency Interactive Messaging (SLIM)</title>
    <seriesInfo name="Internet-Draft" value="draft-mpsb-agntcy-slim-02"/>
    <author fullname="Luca Muscariello">
      <organization>Cisco</organization>
      <address>
        <email>lumuscar@cisco.com</email>
      </address>
    </author>
    <author fullname="Michele Papalini">
      <organization>Cisco</organization>
      <address>
        <email>micpapal@cisco.com</email>
      </address>
    </author>
    <author fullname="Mauro Sardara">
      <organization>Cisco</organization>
      <address>
        <email>msardara@cisco.com</email>
      </address>
    </author>
    <author fullname="Sam Betts">
      <organization>Cisco</organization>
      <address>
        <email>sambetts@cisco.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="07"/>
    <keyword>AI</keyword>
    <keyword>Agentic AI</keyword>
    <keyword>Communications</keyword>
    <keyword>Realtime</keyword>
    <abstract>
      <?line 84?>

<t>This document specifies the Secure Low-Latency Interactive Messaging
(SLIM), a protocol designed to support real-time interactive AI applications at
scale. SLIM provides the transport layer for agent protocols (for example, A2A
and MCP), combining gRPC over HTTP/2 and HTTP/3 with secure messaging, group
communication, and native RPC semantics. The protocol provides mechanisms for
connection management, stream multiplexing, and flow control while maintaining
compatibility with existing gRPC deployments and supporting end-to-end
encryption via MLS.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/agntcy/slim-spec"/>.</t>
    </note>
  </front>
  <middle>
    <?line 95?>

<section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="introduction">
      <name>Introduction</name>
      <section anchor="summary">
        <name>Summary</name>
        <t>The Secure Low-Latency Interactive Messaging (SLIM) protocol addresses the
unique communication requirements of modern AI agentic applications by providing
a secure, scalable, and efficient messaging infrastructure. SLIM combines the
reliability and performance of gRPC with secure messaging and group
communication, creating a comprehensive solution for interactive AI application
communication.</t>
        <t>At its core, SLIM consists of three primary components: data plane routing
nodes that forward messages based on metadata, session-layer clients that manage
secure group state and reliability, and application endpoints that publish and
receive encrypted content. The protocol leverages Message Layer Security (MLS)
for end-to-end encryption, ensuring that messages remain confidential even when
passing through intermediate nodes or experiencing TLS termination along the
communication path.</t>
        <t>The architecture is built around a distributed network of routing nodes, each
maintaining connection and subscription tables to enable efficient message
routing. A control plane orchestrates the system, handling node discovery,
configuration management, and administrative operations. This separation of
control, session, and data planes allows for scalable deployment while keeping
routing nodes lightweight.</t>
        <t>SLIM employs a hierarchical naming system based on Decentralized Identifiers
(DIDs) to ensure globally unique, secure, and routable names. The name structure
follows a <tt>organization/namespace/service/instance</tt> pattern, supporting anycast
and unicast routing as well as service discovery. This naming scheme supports
both decentralized and federated authentication models, enabling flexible
deployment across different organizational boundaries while maintaining
security and interoperability.</t>
        <t>The protocol includes a session layer that abstracts the complexity of MLS
operations and messaging infrastructure from applications, providing secure
point-to-point and group sessions plus native Remote Procedure Call (RPC)
semantics via SRPC (SLIM RPC). SRPC enables request/response and streaming RPC
directly over SLIM's secure messaging fabric (see <xref target="SRPC"/>), while handling
authentication, encryption, connection management, and fault recovery
automatically. This design enables developers to focus on application logic
rather than the underlying messaging complexities.</t>
        <t>Security is fundamental to SLIM's design, with authentication and authorization
handled through MLS groups, cryptographic client identities, and configurable
access policies. The protocol supports deployment in various environments, from
data center workloads to mobile applications, while maintaining
consistent security guarantees and low-latency performance characteristics.</t>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>SLIM is designed to work as a messaging layer for applications running as
workloads in a data center, but also running in a browser or mobile device while
guaranteeing end-to-end security and low-latency communication.</t>
      <t>SLIM employs a two-tier security architecture. At the <strong>network layer</strong>, HTTP/2
and HTTP/3 serve as the thin waist of the communication stack, providing
hop-by-hop TLS 1.3 encryption and eliminating message transcoding along the
path. HTTP/2 is chosen deliberately: it integrates with the existing
infrastructure ecosystem—load balancers, API gateways, CDNs, and observability
tooling—without exposing message content to those components. At the <strong>content
layer</strong>, MLS <xref target="RFC9420"/> <xref target="RFC9750"/> provides an application-layer encryption
envelope around every message payload. Because MLS encryption is independent of
the TLS session, terminating a TLS connection at an intermediate routing node
does not compromise confidentiality—routing nodes see only metadata and an
opaque encrypted blob. This zero-trust intermediary property is what
distinguishes SLIM from protocols that provide only transport-layer security
(where relay nodes must decrypt content to route it).</t>
      <t>Authentication and authorization are handled at the application level and can be
managed in a decentralized or federated way or a mix of both.</t>
      <t>In SLIM there are three main communication elements: routing nodes (data plane),
session-layer clients, and application endpoints that publish and receive
messages.</t>
      <t>A producer (also called a "publisher") is an endpoint that encapsulates content
in SLIM messages for transport within the SLIM message network of nodes. A
producer <bcp14>MUST</bcp14> belong to an MLS group to encrypt messages that can be decrypted
by message consumers who are members of the same group, as specified by the MLS
protocol. Once a SLIM message is encrypted, it can be published under a routable
name, which is human-readable and hierarchical. This routable channel name is
used by intermediate nodes to store and forward messages within the same
channel, allowing consumers to retrieve messages using this name.</t>
      <t>A routable name is a name prefix that is stored in a forwarding table (FIB).
This enables requests to reach the producer and fetch a response, if one exists.</t>
      <figure anchor="fig-general-arch">
        <name>Main components of the SLIM architecture.</name>
        <artwork><![CDATA[
 +-------------+         +---------------------+         +-------------+
 | Producer 1  |         |                     |         | Consumer 1  |
 +-------------+         |    Routing Node     |         +-------------+
                         |                     |<------->| Consumer 2  |
 +-------------+         |                     |         +-------------+
 | Producer 2  |-------->|                     |<------->| Consumer 3  |
 +-------------+         +---------------------+         +-------------+

          |                        ^   ^   ^
          |                        |   |   |
          |                        |   |   |
          |                        |   |   |
          v                        |   |   |
 +------------------------+        |   |   |
 | MLS Authentication     |<-------+---+---+
 | Service                |
 +------------------------+

 Legend:
 - Producers publish to topics via routing nodes.
 - Consumers subscribe to topics via routing nodes.
 - MLS Authentication Service handles group authentication
   and key management.
 - Encryption group coincides with the topic identifier.
]]></artwork>
      </figure>
      <t>Secure group members are clients as described in <xref target="RFC9750"/> which can write
messages as producers or read messages as consumers. Most of the time, clients
are able to read and write messages in the same secure group. Clients join
secure groups as described in the MLS standard <xref target="RFC9750"/> via an
authentication service and by exchanging messages via the delivery service. In
the SLIM architecture, the SLIM nodes constitute the data-plane infrastructure
that is responsible for delivering messages in a secure group via a logical
SLIM channel. MLS commit messages are exchanged directly using the SLIM routing
nodes.</t>
      <section anchor="routing-nodes-data-plane">
        <name>Routing Nodes (Data Plane)</name>
        <t>Routing nodes are fundamental components of the SLIM architecture that forward
messages using metadata without inspecting payloads. They fulfill several
critical functions in the messaging infrastructure. At their core, nodes
efficiently route messages between connected clients while handling the
distribution and delivery of messages across the network infrastructure.</t>
        <figure anchor="fig-node-network">
          <name>SLIM routing node network topology.</name>
          <artwork><![CDATA[
    Producer A              Producer B              Producer C
        |                       |                       |
        v                       v                       v
   +----------+            +----------+            +----------+
   |  Node 1  |<---------->|  Node 2  |<---------->|  Node 3  |
   +----------+            +----------+            +----------+
        ^                       ^                       ^
        |                       |                       |
        v                       v                       v
   +----------+            +----------+            +----------+
   |  Node 4  |<---------->|  Node 5  |<---------->|  Node 6  |
   +----------+            +----------+            +----------+
        ^                       ^                       ^
        |                       |                       |
    Consumer X             Consumer Y             Consumer Z

Legend:
- Each Node maintains connection and subscription tables
- Bidirectional arrows represent inter-node communication paths
- Producers and Consumers connect to their local nodes
- Messages are routed through the node network based on subscriptions
]]></artwork>
        </figure>
        <t>The node architecture relies on two essential data structures that work in
concert. The connection table forms the foundation for tracking all active
client connections and their states, maintaining crucial metadata about each
connected client. Alongside it, the subscription table manages topic
subscriptions and implements message filtering rules, determining which messages
should be delivered to which clients.</t>
        <t>Through this dual-table architecture, routing nodes can effectively coordinate
message delivery while maintaining optimal system performance. The connection
and subscription mechanisms work together seamlessly to ensure reliable message
routing, proper client tracking, and efficient subscription management across
the distributed system. Each node operates autonomously while participating in
the broader network, creating a resilient and scalable messaging infrastructure.</t>
        <section anchor="connection-table">
          <name>Connection Table</name>
          <t>The connection table serves as a fundamental data structure within the
SLIM routing node architecture, maintaining a comprehensive registry of both
client-to-node and node-to-node connections. Each entry in the table contains
essential metadata about connected endpoints, including their unique
identifiers, connection timestamps, authentication status, and current state
information.</t>
          <t>For client connections, the table tracks end-user applications that connect to
receive or send messages through the system. For node connections, it maintains
the network fabric topology by recording inter-node relationships and routing
paths. This dual-purpose nature enables SLIM to manage both the edge
connectivity with clients and the internal communication infrastructure between
nodes.</t>
          <t>Connection states are dynamically tracked and updated to reflect the real-time
status of each endpoint. This includes monitoring whether clients or nodes are
actively connected, temporarily disconnected, or in various intermediate states.
The table maintains crucial session information such as endpoint capabilities,
protocol versions, and quality of service parameters that influence message
handling.</t>
          <t>By maintaining this detailed connection state, the table enables efficient
routing decisions across the entire network fabric. It provides each routing
node with immediate access to both client and node status information, allowing
for rapid determination of message delivery paths and handling of
connection-related events. The connection table also plays a vital role in
system reliability by tracking connection health and enabling quick detection of
disconnections or network issues at both the client and node levels.</t>
          <t>A connection table maps location-independent channel names to connections to
remote nodes. The mapping is used to forward messages towards nodes that can
either route messages or consume them in case consumers are directly connected
to the node.</t>
          <t>Channel names are encoded as human-readable hierarchical names for efficient
table lookup operations.</t>
        </section>
        <section anchor="subscription-table-and-matching">
          <name>Subscription Table and Matching</name>
          <t>The subscription table is used to map channel subscriptions to neighboring
nodes. It manages the distribution of messages based on subscriptions and
ensures efficient delivery of messages.
A message carries the data to be delivered as well as the channel name and the
address locator of the message producer.</t>
          <t>The control plane manages the configuration and updates of the connection and
subscription tables.</t>
          <figure anchor="fig-message-structure">
            <name>SLIM message structure carrying channel name, address locator, and data.</name>
            <artwork><![CDATA[
+-------------------------------------------------------------+
|                    SLIM Message Structure                   |
+-------------------------------------------------------------+
| Channel Name   | Address Locator   |      Data Payload       |
+-------------------------------------------------------------+
| "/foo/bar"     | 192.0.2.10:12345 |   { ... application ... |
|                |                  |         data ... }      |
+-------------------------------------------------------------+

Legend:
- Channel Name: Identifies the logical channel/topic for routing.
- Address Locator: Specifies the producer's network address.
- Data Payload: Contains the actual message content.
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="control-plane">
        <name>Control Plane</name>
        <t>The control plane is responsible for the management and orchestration of
SLIM messaging nodes and their interconnections. It handles the configuration,
provisioning, and monitoring of nodes, ensuring that the messaging
infrastructure operates smoothly and efficiently.</t>
        <t>Key functions of the control plane include:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Node Discovery and Registration</strong>: New messaging nodes discover
each other and register their presence with the control plane. This
enables the control plane to maintain an up-to-date view of the
messaging infrastructure.</t>
          </li>
          <li>
            <t><strong>Configuration Management</strong>: The control plane distributes
configuration updates to messaging nodes, including connection and
subscription table updates. This ensures consistent and correct
routing behavior across the node network.</t>
          </li>
          <li>
            <t><strong>Monitoring and Analytics</strong>: The control plane collects and
analyzes telemetry data from messaging nodes, providing insights
into system performance, message flow, and potential issues.</t>
          </li>
          <li>
            <t><strong>Security and Access Control</strong>: The control plane manages
security policies, authentication, and authorization of nodes and
clients, ensuring a secure messaging environment.</t>
          </li>
        </ul>
        <t>By centralizing these management functions, the control plane enhances
the overall reliability, security, and performance of the SLIM messaging
infrastructure. It enables efficient scaling, dynamic reconfiguration,
and proactive maintenance of the node network.</t>
      </section>
      <section anchor="session-layer">
        <name>Session Layer</name>
        <t>The session layer serves as a critical abstraction component that bridges
application frameworks with the underlying SLIM messaging infrastructure. It
provides a unified interface that simplifies the complexity of secure messaging
while handling the details of MLS client operations and message distribution.</t>
        <section anchor="core-responsibilities">
          <name>Core Responsibilities</name>
          <t>The session layer encapsulates several key functionalities:</t>
          <t><strong>MLS Client Operations</strong>: The layer implements comprehensive MLS client
functionality including authentication procedures, message encryption and
decryption, key management, and group membership operations. It handles the
complex cryptographic operations transparently from the application perspective.</t>
          <t><strong>Channel Management</strong>: It provides seamless channel subscription and
unsubscription capabilities, managing the lifecycle of channel memberships and
maintaining subscription state across connection interruptions or node
failures.</t>
          <t><strong>Message Abstraction</strong>: The session layer abstracts message passing between
applications and the SLIM message distribution network, handling message
formatting, routing, and delivery confirmation while providing simple send and
receive primitives to applications.</t>
          <t><strong>Configuration Abstraction</strong>: It eliminates the need for applications to
manage complex configuration details required to connect to SLIM nodes,
automatically handling node discovery, connection establishment, and
subscription management.</t>
        </section>
        <section anchor="api-design-principles">
          <name>API Design Principles</name>
          <t>The session layer API is designed with the following principles:</t>
          <ul spacing="normal">
            <li>
              <t>Simplicity: Applications interact with the messaging system through
intuitive publish/subscribe operations without needing to understand the
underlying MLS or routing complexities.</t>
            </li>
            <li>
              <t>Asynchronous Operations: All messaging operations are designed to be
non-blocking, supporting high-performance applications.</t>
            </li>
            <li>
              <t>Framework Agnostic: The API provides language bindings and framework
adapters for various application development environments, ensuring broad
compatibility across different technology stacks.</t>
            </li>
            <li>
              <t>Error Handling: Comprehensive error reporting and recovery mechanisms
help applications handle communication issues and authentication failures.</t>
            </li>
          </ul>
        </section>
        <section anchor="session-management">
          <name>Session Management</name>
          <t>The session layer maintains persistent session state at the client across network
disconnections and node failures. It implements automatic reconnection logic,
subscription recovery, and message queuing to ensure reliable message delivery
even in unstable network conditions. Session persistence includes maintaining
MLS group membership state, channel subscriptions, and pending message queues.</t>
        </section>
      </section>
      <section anchor="naming-considerations">
        <name>Naming Considerations</name>
        <t>SLIM requires several types of identifiers: node names, channel names,
and client locators.</t>
        <t>Node names are used for secure onboarding and authentication. Node names do not
have aggregation requirements and therefore use decentralized identifiers:</t>
        <t><tt>
node name A: did:key(node_A)
</tt></t>
        <t>A channel name identifies a messaging group and must be routable; that is, it
must include a globally unique network prefix that can be aggregated for
scalable lookups and message forwarding.</t>
        <t>A group in SLIM is an MLS group with a moderator client responsible for adding
and removing group members. The moderator is identified by a cryptographic
public key as defined in MLS <xref target="RFC9750"/>, and in SLIM, also by a decentralized
identifier derived as the hash of the public key <xref target="DID-W3C"/>.</t>
        <t>By naming entities with hashes <xref target="RFC6920"/>, SLIM achieves secure and globally
unique naming, enabling the creation of permissionless systems where channel
names and client names can be distributed across administrative boundaries. W3C
DIDs are optional but can be used when hash links are employed and conform to
the Named Information <xref target="RFC6920"/> standard, referencing the IANA registry
<xref target="NI-Registry"/>.</t>
        <t>SLIM routable name prefixes and client names can use different DID methods
which have different resolution systems such as did:web <xref target="DID-Web"/>, did:key
<xref target="DID-Key"/> or did:plc <xref target="DID-ATProto"/>. See <xref target="DID-Methods"/> for well-known DID
methods.</t>
        <t>The naming structure follows these patterns:</t>
        <t><tt>
client locator: did:key(org)/namespace(org)/service/did:key(client)
channel name: did:key(org)/namespace(org)/service/did:key(moderator)
</tt></t>
        <t>Where the moderator is the special client that has the role to create a channel,
add actual application clients and remove them from the group.
As mentioned above the moderator is a data plane client which is a decentralized
instance of the MLS delivery service as described in <xref target="RFC9420"/>.</t>
        <t>The hierarchical structure is required to maximize aggregation in subscription
tables, which can aggregate multiple names under name prefixes such as
organization identifiers, organization namespaces, and services.</t>
      </section>
      <section anchor="deployment-considerations">
        <name>Deployment Considerations</name>
        <t>SLIM helps the deployment of agentic AI applications where a combination of
data streams, tools and LLMs are combined to create a distributed multi-agent
systems that can solve problems via AI.</t>
        <t>These applications work as SLIM clients and <bcp14>MAY</bcp14> expose a service to the secure
group. The channel and client naming structure combined allows for service
discovery capabilities by binding the application a specific application
namespace and service name.</t>
      </section>
    </section>
    <section anchor="rpc-in-agentic-protocols-and-relationship-to-messaging">
      <name>RPC in Agentic Protocols and Relationship to Messaging</name>
      <t>Most agent-facing interfaces in use today—such as A2A and the Model Context
Protocol (MCP)—are Remote Procedure Call (RPC) oriented. They expose synchronous
request/response semantics for tool invocation, resource listing, and capability
execution. This section clarifies how RPC relates to asynchronous messaging and
how the two paradigms interoperate in agentic systems.</t>
      <section anchor="rpc-vs-messaging-synchronous-vs-asynchronous">
        <name>RPC vs. Messaging: Synchronous vs. Asynchronous</name>
        <ul spacing="normal">
          <li>
            <t><strong>RPC (A2A, MCP)</strong>: The caller issues a request and blocks or awaits a timely
response. Semantics emphasize tightly scoped operations (for example, “call tool
X with parameters Y”) with bounded latency and explicit error contracts.</t>
          </li>
          <li>
            <t><strong>Messaging (AMQP, MQTT, NATS, Kafka, SLIM)</strong>: Decoupled producers and
consumers communicate via topics, subjects, or queues. Delivery can be
one-to-one, one-to-many, or many-to-many, with loose coupling, buffering, and
retries. Producers are not inherently blocked by consumers.</t>
          </li>
        </ul>
        <t>In practice, agentic applications need both: synchronous tool invocations for
interactivity and asynchronous channels for streaming output, progress,
coordination, and fan-out/fan-in patterns.</t>
      </section>
      <section anchor="challenges-of-rpc-over-messaging">
        <name>Challenges of RPC over Messaging</name>
        <t>Bridging synchronous RPC semantics with asynchronous messaging infrastructure
introduces several challenges:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Request/Response Correlation</strong>: Messaging systems are inherently decoupled
and do not guarantee a direct response path. Implementing RPC requires
correlating requests and responses, often using unique identifiers and temporary
reply channels.</t>
          </li>
          <li>
            <t><strong>Latency and Ordering</strong>: Messaging layers may introduce variable delivery
latency and do not guarantee strict ordering, which can complicate synchronous
RPC expectations.</t>
          </li>
          <li>
            <t><strong>Error Handling</strong>: Messaging systems may buffer, retry, or drop messages,
making it difficult to propagate errors and timeouts in a way that matches RPC
contracts.</t>
          </li>
          <li>
            <t><strong>Streaming and Multiplexing</strong>: Supporting streaming RPC (e.g., bidirectional
or server/client streaming) over messaging requires careful management of stream
lifecycles, backpressure, and multiplexing multiple logical RPCs over shared
channels.</t>
          </li>
          <li>
            <t><strong>Security and Authorization</strong>: Ensuring that only authorized parties can
invoke or respond to RPCs, and that all messages are authenticated and
encrypted, is more complex in a distributed, group-based messaging environment.</t>
          </li>
        </ul>
        <t>The SRPC capability in SLIM addresses these challenges by providing a native,
secure, and streaming RPC abstraction directly over the SLIM messaging layer, as
described in the following section.</t>
      </section>
      <section anchor="remote-procedure-calls-over-slim-srpc">
        <name>Remote Procedure Calls over SLIM (SRPC)</name>
        <t>SLIM natively supports Remote Procedure Calls (RPC) through its SRPC (SLIM RPC)
capability, enabling efficient, secure, and flexible communication patterns for
distributed and agentic applications. SRPC is designed to provide gRPC-like
streaming RPC semantics directly over the SLIM transport, leveraging SLIM's
secure, multiplexed, and group-oriented messaging infrastructure.</t>
        <section anchor="overview">
          <name>Overview</name>
          <t>SRPC allows applications to define and invoke remote procedures using familiar
gRPC patterns, including unary calls, client streaming, server streaming, and
bidirectional streaming. This enables developers to build complex, stateful, and
interactive workflows between distributed agents, services, and tools, all while
benefiting from SLIM's end-to-end security and group membership features.</t>
        </section>
        <section anchor="key-features">
          <name>Key Features</name>
          <ul spacing="normal">
            <li>
              <t><strong>Streaming RPC Support</strong>: SRPC supports all gRPC streaming modes, allowing
for flexible data exchange patterns such as real-time data feeds, interactive
sessions, and collaborative workflows.</t>
            </li>
            <li>
              <t><strong>Multiplexed Transport</strong>: Multiple concurrent RPC streams can be established
over a single SLIM connection, reducing overhead and improving resource
efficiency.</t>
            </li>
            <li>
              <t><strong>Secure Group Communication</strong>: SRPC leverages SLIM's MLS-based security
model, ensuring that all RPC calls and responses are encrypted and authenticated
within the context of secure groups.</t>
            </li>
            <li>
              <t><strong>Protocol Buffers Integration</strong>: Service definitions and message schemas are
specified using Protocol Buffers, enabling strong typing and interoperability
across languages and platforms.</t>
            </li>
          </ul>
        </section>
        <section anchor="architecture">
          <name>Architecture</name>
          <t>SRPC is implemented as a protocol extension and a set of client/server libraries
that integrate with the SLIM session layer. Developers define service interfaces
using Protocol Buffers, and code generation tools produce client and server
stubs that handle message serialization, stream management, and invocation logic
over SLIM channels.</t>
          <t>The SRPC protocol manages the lifecycle of RPC streams, including initiation,
message exchange, error handling, and stream termination. It ensures that all
communication adheres to SLIM's security and routing policies, and that group
membership and authorization are enforced for each RPC interaction.</t>
        </section>
        <section anchor="benefits-for-agentic-applications">
          <name>Benefits for Agentic Applications</name>
          <t>By providing native, streaming RPC capabilities, SRPC enables agentic AI
applications and distributed systems to:</t>
          <ul spacing="normal">
            <li>
              <t>Orchestrate complex, multi-step workflows across multiple agents and services.</t>
            </li>
            <li>
              <t>Exchange large or continuous data streams efficiently and securely.</t>
            </li>
            <li>
              <t>Implement interactive, real-time collaboration between distributed components.</t>
            </li>
            <li>
              <t>Simplify integration with existing gRPC-based tools and ecosystems.</t>
            </li>
          </ul>
          <t>SRPC makes it possible to build robust, scalable, and secure agentic
applications that fully leverage the power of SLIM's messaging and group
communication model.</t>
        </section>
        <section anchor="slim-naming-in-srpc">
          <name>SLIM Naming in SRPC</name>
          <t>SRPC derives per-service and per-handler routing names directly from the
structured SLIM naming scheme to enable efficient subscription and message
dispatch without requiring application developers to manually manage channel
names.</t>
          <t>Each application participating in a secure SLIM group already has a hierarchical
SLIM name composed of multiple components (organization identifier, namespace,
service, and client/moderator key). SRPC appends a handler-qualified suffix to
the service component to form unique, routable identifiers for RPC methods.</t>
          <t>Service interface definitions (e.g., Protocol Buffers) describe one or more RPC
handlers supporting the four common gRPC communication patterns:</t>
          <ul spacing="normal">
            <li>
              <t>Unary → Unary</t>
            </li>
            <li>
              <t>Unary → Stream</t>
            </li>
            <li>
              <t>Stream → Unary</t>
            </li>
            <li>
              <t>Stream → Stream (bidirectional)</t>
            </li>
          </ul>
          <t>For every handler declared inside a service, SRPC generates a method routing
token using the pattern:</t>
          <t><tt>
{package}.{service}-{handler}
</tt></t>
          <t>Example: Given a protobuf package <tt>example_service</tt> and service <tt>Test</tt> with
handlers <tt>ExampleUnaryUnary</tt>, <tt>ExampleUnaryStream</tt>, <tt>ExampleStreamUnary</tt>,
<tt>ExampleStreamStream</tt>, the generated handler tokens are:</t>
          <ul spacing="normal">
            <li>
              <t>example_service.Test-ExampleUnaryUnary</t>
            </li>
            <li>
              <t>example_service.Test-ExampleUnaryStream</t>
            </li>
            <li>
              <t>example_service.Test-ExampleStreamUnary</t>
            </li>
            <li>
              <t>example_service.Test-ExampleStreamStream</t>
            </li>
          </ul>
          <t>SRPC then embeds the handler token into the second component (service segment)
of the full SLIM name for routing. If the original SLIM application name
components <tt>c[i]</tt> are:</t>
          <t><tt>
c[0]/c[1]/c[2]/c[3]
</tt></t>
          <t>The subscribed name for a specific handler becomes:</t>
          <t><tt>
c[0]/c[1]/c[2]-example_service.Test-ExampleUnaryUnary/c[3]
</tt></t>
          <t>This transformation yields a distinct, hierarchical, and aggregatable name per
RPC method while preserving the organizational and namespace prefix structure
needed for subscription table aggregation. Applications exposing SRPC services
automatically subscribe to all derived handler names; the SRPC library manages
these subscriptions and maps incoming messages to the corresponding generated
server stub functions. Developers implement only the handler logic exactly as
with conventional gRPC, without manual SLIM channel management.</t>
          <t>Benefits of this naming approach:
- Deterministic and collision-resistant per-method naming.
- Preserves hierarchical aggregation for routing efficiency.
- Avoids separate discovery round-trips for method endpoints.
- Enables capability advertisement to reference method names directly.
- Simplifies multi-service deployments—adding a new handler produces a single
new routable token.</t>
          <t>This integration of SRPC handler naming with SLIM's hierarchical naming model
ensures consistent, secure, and scalable routing semantics for RPC traffic
within agentic groups.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>SLIM's security architecture uses a two-tier model. At the network layer,
HTTP/2 with TLS 1.3 provides mandatory hop-by-hop encryption. At the content
layer, MLS <xref target="RFC9420"/> <xref target="RFC9750"/> provides an application-layer encryption
envelope that is independent of the underlying TLS sessions. Routing nodes
operate as zero-trust intermediaries: they forward opaque encrypted blobs and
cannot access message content even after TLS termination.</t>
      <t>Implementors <bcp14>MUST</bcp14> validate MLS KeyPackages before use and <bcp14>MUST</bcp14> reject stale or
expired credentials. OAuth bearer tokens used for authentication <bcp14>MUST</bcp14> be
short-lived and subject to server-side revocation to enable immediate ejection
of compromised or malicious agents.</t>
      <t>The security properties of the DID methods used for node and client naming
depend on the security of their respective resolution infrastructure. Operators
<bcp14>SHOULD</bcp14> prefer DID methods whose resolution is auditable and tamper-evident.</t>
      <t>Forward secrecy and post-compromise security are provided by MLS's ratcheting
mechanism. Implementors <bcp14>MUST</bcp14> ensure that MLS epoch transitions are applied
correctly and that removed members cannot decrypt messages sent after their
removal.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="DID-W3C" target="https://www.w3.org/TR/did-core/">
          <front>
            <title>Decentralized Identifiers (DIDs) v1.0</title>
            <author initials="W. C. C." surname="Group" fullname="W3C Credentials Community Group">
              <organization/>
            </author>
            <date year="2022" month="July" day="19"/>
          </front>
        </reference>
        <reference anchor="NI-Registry" target="https://www.iana.org/assignments/named-information/named-information.xhtml">
          <front>
            <title>Named Information Hash Algorithm Registry</title>
            <author initials="" surname="IANA" fullname="IANA">
              <organization/>
            </author>
            <date year="2013" month="August" day="01"/>
          </front>
        </reference>
        <reference anchor="DID-Methods" target="https://www.w3.org/TR/did-extensions-methods/">
          <front>
            <title>Known DID Methods in the Decentralized Identifier Ecosystem</title>
            <author initials="W. C. C." surname="Group" fullname="W3C Credentials Community Group">
              <organization/>
            </author>
            <date year="2025" month="April" day="29"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9420">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="R. Robert" initials="R." surname="Robert"/>
            <author fullname="J. Millican" initials="J." surname="Millican"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9420"/>
          <seriesInfo name="DOI" value="10.17487/RFC9420"/>
        </reference>
        <reference anchor="RFC9750">
          <front>
            <title>The Messaging Layer Security (MLS) Architecture</title>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="S. Inguva" initials="S." surname="Inguva"/>
            <author fullname="A. Duric" initials="A." surname="Duric"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>The Messaging Layer Security (MLS) protocol (RFC 9420) provides a group key agreement protocol for messaging applications. MLS is designed to protect against eavesdropping, tampering, and message forgery, and to provide forward secrecy (FS) and post-compromise security (PCS).</t>
              <t>This document describes the architecture for using MLS in a general secure group messaging infrastructure and defines the security goals for MLS. It provides guidance on building a group messaging system and discusses security and privacy trade-offs offered by multiple security mechanisms that are part of the MLS protocol (e.g., frequency of public encryption key rotation). The document also provides guidance for parts of the infrastructure that are not standardized by MLS and are instead left to the application.</t>
              <t>While the recommendations of this document are not mandatory to follow in order to interoperate at the protocol level, they affect the overall security guarantees that are achieved by a messaging application. This is especially true in the case of active adversaries that are able to compromise clients, the Delivery Service (DS), or the Authentication Service (AS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9750"/>
          <seriesInfo name="DOI" value="10.17487/RFC9750"/>
        </reference>
        <reference anchor="RFC6920">
          <front>
            <title>Naming Things with Hashes</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="D. Kutscher" initials="D." surname="Kutscher"/>
            <author fullname="C. Dannewitz" initials="C." surname="Dannewitz"/>
            <author fullname="B. Ohlman" initials="B." surname="Ohlman"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document defines a set of ways to identify a thing (a digital object in this case) using the output from a hash function. It specifies a new URI scheme for this purpose, a way to map these to HTTP URLs, and binary and human-speakable formats for these names. The various formats are designed to support, but not require, a strong link to the referenced object, such that the referenced object may be authenticated to the same degree as the reference to it. The reason for this work is to standardise current uses of hash outputs in URLs and to support new information-centric applications and other uses of hash outputs in protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6920"/>
          <seriesInfo name="DOI" value="10.17487/RFC6920"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="SRPC" target="https://github.com/agntcy/slim/blob/main/data-plane/slimrpc-compiler/README.md">
          <front>
            <title>SLIM RPC (SRPC) Reference</title>
            <author initials="" surname="AGNTCY" fullname="AGNTCY">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="DID-Key" target="https://w3c-ccg.github.io/did-method-key/">
          <front>
            <title>The did:key Method v0.7: A DID Method for Static Cryptographic Keys</title>
            <author initials="W. C. C." surname="Group" fullname="W3C Credentials Community Group">
              <organization/>
            </author>
            <date year="2025" month="March" day="26"/>
          </front>
        </reference>
        <reference anchor="DID-ATProto" target="https://atproto.wiki/en/wiki/reference/identifiers/did">
          <front>
            <title>Decentralized Identifiers (DIDs) in the AT Protocol</title>
            <author initials="B. P." surname="Community" fullname="Bluesky/AT Protocol Community">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="DID-Web" target="https://w3c-ccg.github.io/did-method-web/">
          <front>
            <title>The did:web Method Specification</title>
            <author initials="W. C. C." surname="Group" fullname="W3C Credentials Community Group">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9V965LbVpLm//MUWPlHSzLJ0sV9cU1vz5YubiusktSq6pjx
dvSMQOCQRAsEYACsEq1WR//aB9iYnzMR8yz7KP0km19mnhvIkuUYz0SMwpaq
QOAgT5683zifz81YjbU9zW5d2GLX2+x5ez1/no+2KfbZs2a0fV6M1ZXNzu0w
5OuqWWe3L54/O79zy+TLZW+v6Ml8bZtxPtTV9pYp6NF12+9Ps6pZtcaUbdHk
W1q/7PPVON92w3Ker5ux2PMD83sPzLBbbqthqNpm3HcWD5a2s/RXM5pmt13a
/tSUtOxp9uDeg1/M7/2S/jNF2wy2GXbDabbK68EaAuSh+SzLe5uf0r/Xbf92
3be77pR24dfLLvy7zFu7p5vKU5PNs7Nn/Df2URX62+N2u901FW2I7h5w5bXN
67HaWmPy3bhpCSwzNxn9We3qWnb5fFfk2fluKPK+snXd8sdtv86b6nte6DR7
XA2FXLfbvKpPs3q35Qf+V4FPFkW7PVj2vCo2trbZq7zL66qpPmXZbVV0uP1j
y+a7vs0u8r7M+/yT1hzk3mjNg0Uv8m32yI7j8CkLDjmdL90bL9i0/TYHzdHR
ZE+ePZn/w8PHp/yQI9UntqCT6gkV39sye4aTrVaV7YfsNt0/3Mmu7i/u3eJH
POE8AOHc/5IvuuPL+M88E8DpNdnj3vJqRFKOAMZ99lsQkkCQ92s7nmabceyG
05OT6+vrxfXDBe3y5PL1SVmV86Lt7Qnd++LZ/LVdV8NIvJAA/4JeRkATd/A2
2yb7Oh822VlNbFONm23mHks3cP/h/N6v5vfuf2QDz85enN0IZZU3OcOZE/mv
my3tcjjBc+W8CrAcXlm824zbWk/i3NJ7yyHd0DdNe93g40w/Jg7Oxo3Nbjqm
7GnRDvthtNvJGf18fu+L+YP//DOy70i+QQgM862AfGKM8ZsWyrt4/WpCdpB7
GV0lCUh/36GDWtmeBKW99RGIz3774vLxt0cBW9Nx75Yg+hMRiScQiSfLul2e
EHs0J4SYfN7VeWP5k74riLy2XVXb/uT107Mn508X21KP5hs7obNLOgHa7CnJ
OT2Y7Ore4pcEUXRWGW05uxhziL3H/b4b23Wfdxv6jdYbDo/n4fzBL37q43lI
uyrWC8VG1fIRybnMCfgT3eDZ5au+HdsfKQmUFM8uM366aOuPHdajemeHt/uT
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

-->

</rfc>
