Docs / Protocol

The Mara protocol.

A small, versioned specification for agent-tool-memory communication.

Overview

Mara defines four primitives — Step, Tool, Memory, and Transport — and the events that flow between them.

Step

A Step is the smallest unit of work. It has a typed input, a typed output, and a stable identifier. Steps are immutable once committed.

type Step = {
  id: string;
  kind: "think" | "tool" | "memory.read" | "memory.write";
  input: unknown;
  output: unknown;
  ts: number;
};

Transport

Steps move over a transport. The reference transport is JSON over HTTP, but anything ordered and lossless will do — gRPC, WebTransport, a SQLite log.

Versioning

The protocol uses semver at the document level. Breaking changes ship as a new major. Runtimes negotiate version on connect.