| Internet-Draft | SAMP | August 2026 |
| Efstathiou | Expires 18 February 2027 | [Page] |
The Simple Agent Management Protocol (SAMP) defines a lightweight management-plane protocol for heterogeneous AI agents. SAMP allows a management system to discover agents, query their state, receive events, subscribe to event streams, and optionally configure or execute explicitly exposed operations under policy control.¶
SAMP is inspired by operational management protocols such as SNMP, but it is designed for AI-agent-specific concepts such as dynamic profiles, autonomy classes, enrollment, trust states, and policy-gated execution. It is not an agent-to-agent communication protocol, an agent tool-use protocol, or an agent framework specification.¶
This document defines SAMP version 0.1 as an Experimental protocol suitable for controlled environments and independent interoperability testing.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 18 February 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
AI agents are increasingly deployed as long-running services, assistants, automation workers, coding agents, operational copilots, and autonomous or semi-autonomous control loops. These agents are commonly built with different frameworks, runtime environments, model providers, memory systems, and tool interfaces. Operators need a consistent way to observe and manage these agents without depending on framework-specific APIs.¶
SAMP defines a management-plane interface between a SAMP Manager and a SAMP Agent. The protocol covers discovery, enrollment, heartbeat, state query, asynchronous event notification, subscription, configuration, and controlled execution.¶
SAMP deliberately does not define how agents reason, how models are selected, how tools are invoked, or how agents communicate with each other. Those concerns belong to other layers.¶
This document specifies SAMP version 0.1, intended for controlled environments such as private data centers, research labs, and operator networks where a management system needs visibility into and control of AI agents. SAMP v0.1 is not intended for untrusted networks without additional security mechanisms.¶
SAMP v0.1 defines:¶
SAMP v0.1 does NOT define:¶
SAMP occupies the AI agent management plane. It is intended to coexist with existing management, telemetry, tool, and agent-communication protocols.¶
| Layer | Protocol | Purpose |
|---|---|---|
| Tool use | MCP | Agent-to-tool invocation |
| Agent communication | A2A / ACP | Agent-to-agent collaboration |
| Observability | OpenTelemetry | Traces, metrics, logs |
| Telemetry agent management | OpAMP | Manage data-collection agents |
| AI agent management | SAMP | Manage autonomous/semi-autonomous AI agents |
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The following terms are defined for use in this document:¶
The basic SAMP architecture contains a manager and one or more agents:¶
+--------------+ SAMP +--------------+ | SAMP Manager | <-----------------> | SAMP Agent | | | | | | Registry | | Profile | | Policy | | State | | Scheduler | | Capabilities | +--------------+ +--------------+¶
A SAMP Agent maintains a SAMP Profile and exposes SAMP operations. A SAMP Manager maintains a registry, evaluates trust, applies policy, and initiates management operations.¶
SAMP is a management protocol. It does not require a specific agent framework, model provider, orchestration system, memory backend, or tool protocol.¶
SAMP Manager:¶
SAMP Agent:¶
An agent announces itself with DISCOVER. The manager validates the identity, profile, authentication material, and any pre-registration data before assigning a trust state.¶
The following trust states are defined:¶
Trust transitions are controlled by the manager. Agents MUST NOT self-promote to trusted.¶
The following transitions are normative:¶
CONFIG and EXEC MUST NOT be accepted before trusted state is established. QUERY and PUSH MAY be accepted from quarantined agents at manager discretion.¶
Enrollment is the process by which a manager evaluates an announced agent and assigns an initial trust state. SAMP v0.1 supports the following enrollment methods:¶
The enrollment method is a manager-side policy decision. The agent supplies authentication material; the manager decides.¶
Agents need to locate a manager before sending DISCOVER. SAMP v0.1 supports the following bootstrap methods:¶
Bootstrap method selection is an implementation decision. The protocol does not mandate a specific bootstrap mechanism.¶
A SAMP Profile describes the agent as a managed entity. It includes:¶
The following fields MUST be present in every SAMP Profile:¶
| Field | Type | Description |
|---|---|---|
| agent_id | string | Unique agent identifier |
| name | string | Human-readable agent name |
| agent_version | string | Agent software version |
| profile_version | string | SAMP profile schema version |
| agent_type | string | Framework type (e.g., openclaw, hermes, custom) |
| autonomy_class | string | Autonomy classification (see Section 6) |
A profile organizes exposed data into categories. Each category contains named fields with declared types.¶
Supported field types in SAMP v0.1:¶
| Type | JSON representation |
|---|---|
| string | JSON string |
| int | JSON number (integer) |
| float | JSON number |
| boolean | JSON boolean |
| timestamp | JSON string in RFC 3339 format |
| object | JSON object |
| array | JSON array |
Every profile MUST include a system category with at least the following fields:¶
| Field | Type | Description |
|---|---|---|
| system.status | string | Current operational status |
| system.uptime | int | Uptime in seconds |
| system.version | string | Agent software version |
| system.last_seen | timestamp | Last heartbeat or interaction time |
Managers MUST validate a profile before trusting an agent. Validation includes:¶
Managers MUST NOT fetch arbitrary external profile URLs from untrusted DISCOVER payloads. Profiles SHOULD be sent inline or retrieved only from manager-approved locations.¶
Profiles are authored as TOML in SAMP version 0.1 for human readability. Implementations MAY represent the profile internally as structured JSON or another equivalent data model. The on-the-wire encoding of profile data in SAMP PDUs is JSON.¶
Every SAMP Agent declares an autonomy_class in its profile. The following initial classes are defined:¶
The autonomy class is an input to policy. It MUST NOT grant permission by itself. Manager policy remains authoritative.¶
An agent with advisory autonomy class SHOULD NOT advertise CONFIG or EXEC capabilities. A manager SHOULD reject CONFIG or EXEC attempts targeting an advisory agent.¶
SAMP version 0.1 defines the following PDU types:¶
Each PDU has a direction field indicating its role:¶
| Direction | Meaning |
|---|---|
| request | Initiates an operation |
| response | Responds to a request |
| notification | Unsolicited asynchronous message |
| error | Error response to a request |
| PDU Type | Pattern | Initiator |
|---|---|---|
| PING | request - response | Agent |
| DISCOVER | request - response (DISCOVER_ACK) | Agent |
| QUERY | request - response | Manager |
| PUSH | notification (no response) | Agent |
| SUBSCRIBE | request - response | Manager |
| UNSUBSCRIBE | request - response | Manager |
| CONFIG | request - response | Manager |
| EXEC | request - response | Manager |
All PDUs exchanged between a manager and an agent MUST be authenticated when authentication is enabled. See Section 9 for details.¶
Managers SHOULD rate-limit DISCOVER messages from unknown agents to prevent discovery flooding. A manager MAY maintain a pending-agent quota and reject excess discoveries with a rate_limited error.¶
When a manager sends SUBSCRIBE, the agent allocates a subscription and returns a subscription_id in the response. Subsequent PUSH PDUs related to that subscription include the subscription_id in the envelope.¶
Subscriptions have a manager-defined or agent-defined time-to-live (TTL). A subscription that is not renewed within its TTL expires automatically. Managers SHOULD renew subscriptions before expiry.¶
UNSUBSCRIBE cancels an active subscription. The agent stops sending PUSH PDUs for the cancelled subscription.¶
Subscription persistence across agent restarts is NOT required in SAMP v0.1. Subscriptions do not survive agent reconnect unless the agent implementation explicitly supports persistence.¶
All SAMP messages use a common PDU envelope encoded as UTF-8 JSON [RFC8259] in SAMP version 0.1.¶
The following table defines the envelope fields:¶
| Field | Type | Presence | Description |
|---|---|---|---|
| version | string | Required | Protocol version, e.g., "0.1" |
| type | string | Required | PDU type (see Section 7) |
| direction | string | Required | One of request, response, notification, error |
| agent_id | string | Required | Identifier of the managed agent |
| timestamp | string | Required | UTC timestamp in RFC 3339 format [RFC3339] |
| request_id | string | Required | UUID for correlation and replay protection [RFC9562] |
| payload | object | Required | PDU-specific JSON object. Empty payloads encode as {}. |
| signature | string | Conditional | HMAC-SHA256 signature (see Section 9). Required when authentication is enabled. |
| sequence | int | Optional | Sequence number for ordered streams |
| subscription_id | string | Optional | Subscription identifier for SUBSCRIBE/UNSUBSCRIBE/PUSH |
A response or error PDU MUST include the same request_id as the request it corresponds to. This allows both parties to correlate requests and responses without relying on transport-level correlation.¶
Receivers SHOULD validate that timestamps are within an acceptable clock skew window (e.g., plus or minus 300 seconds). PDUs with timestamps outside the window SHOULD be rejected with a replay_detected error when replay protection is enabled.¶
The sequence field is OPTIONAL. When present, it provides ordering for streams of PDUs (e.g., subscription event streams). Sequence numbers are per-subscription and start at 1. Receivers MAY detect gaps but MUST NOT reject PDUs solely for sequence gaps in SAMP v0.1.¶
Request payload:¶
{}¶
Response payload:¶
{"status": "operational"}¶
The status field in the response is a free-form string indicating the agent's self-reported status (e.g., "operational", "degraded").¶
Request payload:¶
{
"profile": { /* full SAMP Profile object */ },
"endpoint": "https://agent.example/samp",
"capabilities": ["query", "push", "exec"]
}¶
The profile field contains the full SAMP Profile. The endpoint field contains the agent's SAMP endpoint URL. The capabilities array lists the PDU operations the agent supports.¶
Response (DISCOVER_ACK) payload:¶
{
"state": "trusted",
"manager_version": "0.1",
"assigned_id": "agent-001"
}¶
The state field contains the manager-assigned trust state. The manager_version field contains the manager's SAMP version. The assigned_id field is optional and MAY be used when the manager assigns or overrides the agent identifier.¶
If enrollment is rejected, the response payload contains:¶
{
"state": "rejected",
"reason": "profile_invalid"
}¶
Request payload:¶
{
"fields": ["system.status", "system.uptime", "model.primary"]
}¶
The fields array contains one or more dotted-path field identifiers from the agent's profile categories. The agent returns values for fields it supports and reports unknown_field for unsupported fields.¶
Response payload:¶
{
"values": {
"system.status": "operational",
"system.uptime": 86400
},
"unknown": ["model.primary"]
}¶
The values object contains the resolved field values. The unknown array lists requested fields that the agent does not expose. If all requested fields are unknown, the response is an error with code unknown_field.¶
Notification payload:¶
{
"event": "status_change",
"data": {
"old_status": "operational",
"new_status": "degraded"
},
"category": "system"
}¶
The event field is the event type. The data field is an arbitrary JSON object with event-specific content. The category field indicates the profile category the event relates to.¶
PUSH PDUs use direction: "notification". No response is expected unless the manager explicitly requests acknowledgment.¶
Request payload:¶
{
"event_types": ["status_change", "alert"],
"category": "system",
"ttl_seconds": 300
}¶
The event_types array filters the subscription to specific event types. An empty array or omitted field subscribes to all events in the specified category. The ttl_seconds field requests a subscription time-to-live.¶
Response payload:¶
{
"subscription_id": "sub-abc123",
"ttl_seconds": 300,
"renew_before": "2026-08-14T09:05:00Z"
}¶
Request payload:¶
{"subscription_id": "sub-abc123"}¶
Response payload:¶
{"cancelled": true}¶
Request payload:¶
{
"fields": {
"model.fallback": "kimi-k2.6",
"system.log_level": "debug"
},
"scope": "agent"
}¶
The fields object contains the configuration key-value pairs to apply. Keys are dotted-path identifiers. The scope field is either "agent" (agent-wide) or "session" (current session only). The default scope is "agent".¶
Response payload:¶
{
"applied": ["model.fallback", "system.log_level"],
"rejected": []
}¶
The applied array lists fields that were successfully changed. The rejected array lists fields that were rejected, with optional reasons:¶
{
"applied": ["system.log_level"],
"rejected": [
{"field": "model.fallback", "reason": "read_only"}
]
}¶
CONFIG is disabled unless explicitly supported by the agent profile and allowed by manager policy. The agent MUST validate each field against its profile-declared writable fields.¶
Request payload:¶
{
"command": "session_reset",
"params": {
"session_id": "sess-001"
}
}¶
The command field names an executable operation from the agent's profile exec_policy.allowed_commands. The params object contains typed parameters matching the command's declared schema.¶
Response payload:¶
{
"result": "success",
"output": {
"reset": true
}
}¶
If the command is rejected, the response contains:¶
{
"result": "exec_disabled",
"detail": "EXEC is not enabled for this agent"
}¶
EXEC is disabled by default. It MUST be explicitly enabled per agent and per command in the profile. Parameters MUST have typed schemas; free-form arguments are not allowed.¶
When an error occurs, the response PDU has direction: "error" and the payload contains an error object:¶
{
"version": "0.1",
"type": "query",
"direction": "error",
"agent_id": "agent-001",
"timestamp": "2026-08-14T09:00:01Z",
"request_id": "24f8587c-4c4b-4e41-9f47-222c0f5f8b8b",
"payload": {
"error": {
"code": "unknown_field",
"detail": "Field 'model.primary' is not exposed",
"timestamp": "2026-08-14T09:00:01Z"
}
}
}¶
The error payload object has the following fields:¶
| Field | Type | Presence | Description |
|---|---|---|---|
| code | string | Required | Error code (see Section 8.4) |
| detail | string | Optional | Human-readable error detail |
| timestamp | string | Required | UTC timestamp in RFC 3339 format |
The following error codes are defined for SAMP v0.1:¶
| Code | Description |
|---|---|
| malformed_pdu | The PDU is not valid JSON or is missing required envelope fields |
| unknown_type | The PDU type is not recognized |
| invalid_value | A field value is invalid (e.g., wrong type, out of range) |
| schema_mismatch | The payload does not match the expected schema for the PDU type |
| version_unsupported | The protocol version is not supported |
| profile_invalid | The profile is missing required fields or is otherwise invalid |
| auth_failed | Authentication failed (missing or invalid signature) |
| replay_detected | The request_id was previously seen with different request content, or the PDU violates the replay-window policy |
| unknown_field | A requested field is not exposed by the agent |
| exec_disabled | EXEC is not enabled for this agent or command |
| config_disabled | CONFIG is not enabled for this agent |
| policy_denied | Manager policy denies the requested operation |
| rate_limited | The receiver is rate-limiting requests |
| back_pressure | The receiver is overloaded and cannot process the request |
| bootstrap_failed | Agent bootstrap or enrollment failed |
| internal_error | An internal error occurred on the receiver side |
SAMP v0.1 uses shared-secret authentication with HMAC-SHA256 [RFC2104] [RFC6234].¶
SAMP distinguishes between:¶
When authentication is enabled:¶
SAMP v0.1 uses a single shared secret per manager-agent pair. Key identification (e.g., key IDs) is not defined in v0.1. Future versions MAY introduce key identification for multi-key support.¶
Key distribution is out of band. Implementations SHOULD store shared secrets in a secrets manager, not in plaintext configuration files.¶
SAMP v0.1 uses the JSON Canonicalization Scheme (JCS) defined in [RFC8785] for computing HMAC signatures.¶
The signature field contains the lowercase hex-encoded HMAC-SHA256 digest.¶
Example signature value: a1b2c3d4e5f6... (64 hex characters).¶
SAMP does not apply Unicode normalization during signing or verification. JSON strings are preserved exactly as they appear in the PDU object. The sender MUST NOT modify or normalize JSON string values before applying JCS canonicalization. The receiver MUST NOT modify or normalize JSON string values before verifying the signature.¶
Different Unicode code-point sequences produce different canonical bytes and therefore different HMAC signatures. If an implementation needs a specific normalization form (e.g., NFC) for application-level consistency, it MUST apply normalization before constructing the PDU object, not as a signing step.¶
SAMP defines protocol semantics and message envelopes independently from the underlying transport.¶
SAMP v0.1 requires HTTP [RFC9110] as the baseline transport.¶
All SAMP PDUs are sent as HTTP POST requests with a JSON body containing the PDU envelope. Responses are returned in the HTTP response body.¶
For agent-to-manager PDUs (PING, DISCOVER, PUSH), the agent sends an HTTP POST to the manager's SAMP endpoint.¶
For manager-to-agent PDUs (QUERY, CONFIG, EXEC, SUBSCRIBE, UNSUBSCRIBE), the manager sends an HTTP POST to the agent's SAMP endpoint.¶
The Content-Type header MUST be application/json.¶
Implementations MAY choose any endpoint path. The agent's SAMP endpoint URL is advertised in the DISCOVER payload's endpoint field. The manager's SAMP endpoint URL is configured during agent bootstrap.¶
Recommended conventional paths: Manager: POST /samp (accepts all PDU types); Agent: POST /samp (accepts all PDU types).¶
SAMP uses HTTP status codes as follows:¶
| HTTP Status | Meaning |
|---|---|
| 200 OK | Successful request or response |
| 400 Bad Request | Malformed PDU or invalid JSON |
| 401 Unauthorized | Authentication failed |
| 403 Forbidden | Policy denied |
| 404 Not Found | Unknown agent or endpoint |
| 409 Conflict | Replay detected or state conflict |
| 429 Too Many Requests | Rate limited |
| 500 Internal Server Error | Internal error |
| 503 Service Unavailable | Back-pressure or overload |
The SAMP error envelope in the response body provides the precise error code. The HTTP status code is a transport-level indicator; the SAMP error code is authoritative.¶
WebSocket support is OPTIONAL in SAMP v0.1. WebSocket is primarily useful for:¶
When WebSocket is used:¶
WebSocket transport is NOT required for any conformance tier in v0.1.¶
Implementations MAY retry failed requests with exponential backoff. Retries of the same request MUST use the same request_id as the original attempt. The receiver SHOULD cache the request digest and the corresponding response for a limited time period.¶
The request digest is SHA-256 over the RFC 8785 canonical bytes of the PDU with the signature field removed. This is the same canonicalization used for HMAC signing (see Section 9.4), with the addition of a SHA-256 hash over the canonical bytes.¶
Non-idempotent operations, especially EXEC, SHOULD NOT be retried unless the receiver supports safe cached-response behavior for that operation type.¶
SAMP version 0.1 defines four conformance tiers:¶
All tiers MUST support:¶
Implementations claiming a conformance tier SHOULD be validated against a test suite covering:¶
A reference test suite is planned but not yet available. Implementers SHOULD publish interoperability test results.¶
SAMP v0.1 is designed for controlled environments. The following threats are identified:¶
A rogue manager could send unauthorized QUERY, CONFIG, or EXEC PDUs to an agent.¶
Mitigations in v0.1:¶
Future: Per-agent public key authentication and mTLS.¶
A rogue agent could announce itself with DISCOVER and provide false profile information.¶
Mitigations in v0.1:¶
Future: Signed profiles and certificate-based identity.¶
The shared secret used for HMAC authentication could be stolen.¶
Mitigations in v0.1:¶
Future: Per-agent public key authentication (Ed25519).¶
An attacker could capture and replay a valid PDU.¶
Mitigations in v0.1:¶
Limitations: Replay cache is in-memory in v0.1; persistence is future work. Cache size is implementation-defined.¶
An agent could advertise a profile with false capabilities or autonomy class to gain elevated permissions.¶
Mitigations in v0.1:¶
A manager with valid credentials could send unauthorized CONFIG or EXEC to an agent.¶
Mitigations in v0.1:¶
An attacker could attempt to force use of a weaker protocol version.¶
Mitigations in v0.1:¶
An agent could flood a manager with PUSH events or DISCOVER messages.¶
Mitigations in v0.1:¶
A rogue agent could attempt to overwrite or evict legitimate agent entries in the manager's registry.¶
Mitigations in v0.1:¶
Implementations SHOULD log all CONFIG and EXEC operations, including: Timestamp, Agent ID, Manager ID (if identifiable), Operation details (field changes, command, parameters), and Result (success/failure).¶
Audit logs SHOULD be tamper-evident and stored separately from the system being managed.¶
Managers and agents SHOULD implement rate limiting for incoming PDUs. Rate limiting MAY be applied per-agent, per-PDU-type, or globally. Excess requests SHOULD be rejected with rate_limited or back_pressure errors.¶
The initial trust establishment between a manager and an agent is a critical moment. SAMP v0.1 supports: Manual approval by the operator, Pre-shared enrollment tokens, and Public key thumbprint matching.¶
Future versions MAY support certificate-based enrollment and automated trust establishment.¶
Shared secrets SHOULD be rotated periodically. Rotation frequency is a deployment decision. Tokens SHOULD be stored in a secrets manager (e.g., HashiCorp Vault, AWS Secrets Manager) rather than plaintext files.¶
Token rotation in v0.1 requires out-of-band coordination between the manager and agent. Automated rotation is future work.¶
| Threat | v0.1 Mitigation | Future Enhancement |
|---|---|---|
| Rogue managers | Manager allow-list, HMAC | mTLS, per-agent keys |
| Rogue agents | Profile validation, enrollment | Signed profiles, cert identity |
| Credential theft | Secrets manager, rotation | Per-agent Ed25519 keys |
| Replay | request_id cache, timestamp | Persistent cache, sequence validation |
| Profile spoofing | Manager policy authoritative | Signed profiles |
| Unauthorized EXEC/CONFIG | Disabled by default, policy | RBAC, OPA integration |
| Version downgrade | Reject unsupported versions | Version negotiation |
| Flooding | Rate limiting, back-pressure | Flow-control protocol |
| Registry poisoning | Auth-required updates | Signed registrations |
SAMP profiles and query responses can expose sensitive information about an agent, including: Framework details and version, Model names and provider information, Configuration values, Active sessions, Tool availability, Memory backends, Operational state, and Uptime and availability patterns.¶
Managers and agents SHOULD minimize exposed fields. Profiles SHOULD include only fields necessary for management. QUERY responses SHOULD not include secrets, credentials, prompt contents, private user data, or tool outputs unless explicitly required and authorized.¶
PUSH events can contain operationally sensitive information, including: Status changes revealing operational patterns, Error details exposing internal architecture, Performance metrics revealing capacity or load, and Configuration changes revealing business logic.¶
Operators SHOULD classify and filter events before exporting them to telemetry, logging, or ticketing systems. Events containing user data MUST be handled according to applicable data protection regulations.¶
Agents SHOULD expose the minimum profile data necessary for management. Managers SHOULD query only the fields they need. Bulk profile export or full-state queries SHOULD be restricted to authorized operators.¶
SAMP audit logs and event stores may contain sensitive operational data. Logs SHOULD be: Access-controlled, Retained according to a defined policy, Protected against tampering, and Sanitized before sharing or export.¶
SAMP deployments SHOULD place managers and agents on a dedicated management network or equivalent restricted trust boundary. Firewall rules SHOULD limit SAMP traffic to known managers and agents.¶
Agents SHOULD maintain an allow-list of authorized manager addresses. Managers SHOULD maintain an allow-list or pre-registration registry for expected agents.¶
SAMP v0.1 targets single-agent interactions. A single manager MAY manage multiple agents, but fleet-scale bulk operations are not defined in v0.1. Deployments needing fleet-scale operations SHOULD use external orchestration (e.g., scripts, configuration management) layered on top of SAMP.¶
Scaling approaches compatible with v0.1:¶
Federation, multi-manager conflict resolution, and transactional configuration are future work.¶
SAMP management traffic SHOULD itself be observable. Implementations SHOULD log: PDU counts and types, Error rates, Authentication failures, Latency metrics, and Agent registration and trust transitions.¶
This metadata MAY be exported to OpenTelemetry or similar observability systems.¶
This document requests the creation of a SAMP registry group under the "IANA Considerations" framework of [RFC8126].¶
Registry Name: SAMP PDU Types¶
Registration Policy: Specification Required¶
Expert Review Guidelines: The designated expert SHOULD verify that new PDU types include a clear name, description, payload schema, direction semantics, error handling, and security considerations.¶
Initial assignments:¶
| Value | Description | Reference |
|---|---|---|
| ping | Agent heartbeat | This document |
| discover | Agent self-announcement | This document |
| discover_ack | Manager response to DISCOVER | This document |
| query | State query | This document |
| push | Asynchronous event notification | This document |
| subscribe | Event subscription | This document |
| unsubscribe | Cancel subscription | This document |
| config | Configuration change | This document |
| exec | Execute operation | This document |
Registry Name: SAMP Error Codes¶
Registration Policy: Specification Required¶
Expert Review Guidelines: The designated expert SHOULD verify that new error codes include a clear name, description, and handling guidance.¶
Initial assignments:¶
| Value | Description | Reference |
|---|---|---|
| malformed_pdu | Invalid JSON or missing required fields | This document |
| unknown_type | Unrecognized PDU type | This document |
| invalid_value | Invalid field value | This document |
| schema_mismatch | Payload schema validation failure | This document |
| version_unsupported | Unsupported protocol version | This document |
| profile_invalid | Invalid or incomplete profile | This document |
| auth_failed | Authentication failure | This document |
| replay_detected | Replay attack detected | This document |
| unknown_field | Unknown field requested | This document |
| exec_disabled | EXEC not enabled | This document |
| config_disabled | CONFIG not enabled | This document |
| policy_denied | Manager policy denies operation | This document |
| rate_limited | Rate limiting in effect | This document |
| back_pressure | Receiver overloaded | This document |
| bootstrap_failed | Enrollment/bootstrap failure | This document |
| internal_error | Internal receiver error | This document |
Registry Name: SAMP Autonomy Classes¶
Registration Policy: Specification Required¶
| Value | Description | Reference |
|---|---|---|
| advisory | Read-only observation only | This document |
| operational-readonly | Observation and self-configuration | This document |
| operational-write | Configuration allowed, limited execution | This document |
| critical-write | Configuration and execution under strict policy | This document |
Registry Name: SAMP Trust States¶
Registration Policy: Specification Required¶
| Value | Description | Reference |
|---|---|---|
| discovered | Agent announced, not yet evaluated | This document |
| pending | Manager awaiting trust decision | This document |
| trusted | Manager accepted agent | This document |
| quarantined | Isolated for observation | This document |
| rejected | Manager refused agent | This document |
| offline | Agent unreachable | This document |
| stale | Agent missed heartbeats beyond threshold | This document |
| revoked | Trust explicitly revoked | This document |
Registry Name: SAMP Profile Namespaces¶
Registration Policy: Specification Required¶
No initial assignments are made. The system category is defined in this document but is not a registry entry; it is a required profile category. Future profile namespaces (e.g., model, tools, memory) MAY be registered as implementations define them.¶
This document does NOT request a media type registration. SAMP PDUs use application/json [RFC8259] as the content type. A dedicated SAMP media type (e.g., application/samp+json) MAY be requested in a future version if warranted.¶
This section records implementation status for early review and will be removed before publication as an RFC.¶
At the time of writing, the following implementations exist:¶
The Python PoC signs raw request body bytes rather than canonical JSON. This is a known deviation from the specification in this document. The PoC SHOULD be updated to use RFC 8785 canonicalization for interoperability.¶
SUBSCRIBE and UNSUBSCRIBE are defined in this specification but are not implemented in either the Rust or Python PoC as of the time of writing.¶
This initial draft leaves the following questions open:¶
The following items are definitively deferred for v0.1:¶
agent_id = "selefkos-jr" name = "Selefkos Junior" agent_version = "2026.5.20" profile_version = "0.1" agent_type = "openclaw" autonomy_class = "operational-readonly" [system] status = "operational" uptime = 86400 version = "2026.5.20" last_seen = "2026-08-14T09:00:00Z" [model] primary = "glm-5.2" fallback = "kimi-k2.6" [exec_policy] enabled = false allowed_commands = [] dangerous_commands = [] require_ack = true cooldown = 60 max_per_minute = 5 scope = "agent" audit = true¶
Agent Manager
| |
|--- DISCOVER (request) ------->|
| {profile, endpoint, |
| capabilities} |
| |
|<-- DISCOVER_ACK (response) ---|
| {state: "trusted", |
| manager_version: "0.1"} |
| |
¶
Manager Agent
| |
|--- QUERY (request) ---------->|
| {fields: [ |
| "system.status", |
| "system.uptime"]} |
| |
|<-- QUERY (response) ---------|
| {values: { |
| "system.status": "ok", |
| "system.uptime": 3600}, |
| unknown: []} |
| |
¶
Manager Agent
| |
|--- SUBSCRIBE (request) ------>|
| {event_types: ["alert"], |
| category: "system", |
| ttl_seconds: 300} |
| |
|<-- SUBSCRIBE (response) ------|
| {subscription_id: "sub-1", |
| ttl_seconds: 300} |
| |
|<-- PUSH (notification) -------|
| {event: "alert", |
| subscription_id: "sub-1", |
| data: {...}} |
| |
|--- UNSUBSCRIBE (request) ---->|
| {subscription_id: "sub-1"} |
| |
|<-- UNSUBSCRIBE (response) ----|
| {cancelled: true} |
| |
¶
| Term | Definition |
|---|---|
| SAMP | Simple Agent Management Protocol |
| PDU | Protocol Data Unit |
| Manager | System that manages agents via SAMP |
| Agent | AI agent exposing a SAMP interface |
| Profile | Structured declaration of agent identity and capabilities |
| Trust State | Manager-assigned state for an agent |
| Autonomy Class | Advisory risk classification for an agent |
| Enrollment | Process of evaluating and accepting an agent |
| Conformance Tier | Level of protocol support claimed by an implementation |