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.