Protocol Design

AEP Protocol Design Draft

Protocol Name

Working name: AEP — Agent Event Protocol.

Expanded scope: asynchronous events, async tool lifecycle, context events, memory events, and agent coordination messages.

Core Message Envelope

Every AEP event uses a common envelope.

{
  "aep_version": "0.1",
  "id": "evt_01JZ0000000000000000000000",
  "type": "tool.call.progress",
  "source": "tool:web_crawler",
  "target": "agent:researcher",
  "topic": "tasks.task_01",
  "session_id": "sess_01",
  "conversation_id": "conv_01",
  "task_id": "task_01",
  "correlation_id": "corr_01",
  "causation_id": "evt_01JYZZZZZZZZZZZZZZZZZZZZZZ",
  "created_at": "2026-07-09T10:00:00Z",
  "expires_at": null,
  "delivery": {
    "mode": "at_least_once",
    "sequence": 42,
    "cursor": "stream_01:42"
  },
  "payload_schema": "https://schemas.axisrobo.com/tool.call.progress.v1.json",
  "payload": {
    "message": "Indexed 120 of 500 pages",
    "progress": 0.24
  }
}

Required Envelope Fields

Recommended Envelope Fields

Event Type Naming

Event types use dotted namespaces:

domain.object.action

Examples:

Standard Event Families

Session Events

Capability Events

Subscription Events

Delivery Events

Async Tool Events

Task Events

Context Events

Memory Events

Agent Message Events

Environment Events

Belief Events

Freshness Events

Delegation Events

Interruption Events

Compensation Events

Provenance Events

Async Tool Lifecycle

An async tool call is a task-like stream.

tool.call.requested
tool.call.accepted
tool.call.started
tool.call.progress
tool.call.output
tool.call.completed

Failure path:

tool.call.requested
tool.call.accepted
tool.call.started
tool.call.failed

Cancellation path:

tool.call.cancel.requested
tool.call.cancelled

Subscription Model

A subscription describes what a consumer wants to receive.

{
  "types": ["memory.*", "tool.call.*"],
  "source": ["memory:main", "tool:web_crawler"],
  "target": "agent:researcher",
  "conversation_id": "conv_01",
  "from_cursor": "stream_01:12",
  "delivery_mode": "at_least_once"
}

Subscriptions may filter by:

Delivery Semantics

The protocol should define delivery modes but leave implementation to transports.

Valid modes:

AEP should avoid promising strict exactly-once delivery. Instead, every event has a stable ID so consumers can deduplicate.

Error Model

Errors should be events, not only transport failures.

Standard error payload:

{
  "code": "tool_timeout",
  "message": "Crawler exceeded the configured timeout",
  "retryable": true,
  "details": {}
}

Versioning

AEP should version:

The envelope should remain stable across minor versions.

Minimal V0.1 Surface

The first useful version should include: