The whole protocol, one level below the spec.
A readable tour of the resource model and the interactions between resources. When you want the normative detail — the field-by-field schemas and the MUST/SHOULD language — the spec and schema.oasp.dev are one click further.
Everything follows from one distinction
One Conversation , published once, rides a succession of disposable Sessions — upgraded in place ( migrate ), retired cleanly ( drain), even across providers — with its full lineage and audit trail preserved throughout.
Eight resources and their fields
A closed set. Every OASP system is some arrangement of these and the references between them.
The versioned contract an agent is deployed from — its interface, tools, and behavior at a fixed version. Conversations pin to it.
A running instance of an AgentDefinition at some endpoint. Sessions are opened against a Deployment; multiple Deployments of different versions can coexist.
The durable, user-facing thread. Published once, it persists across every Session it rides on and holds the reference to its session lineage and its Principal.
A disposable, provider-side execution context bound to one Deployment. Created by publish or migrate; retired by drain. Points back to the Session it upgraded from.
An append-only record on a Session — a send, a stream chunk, a tool-call. Sequenced per Session; the ordered log that reconstructs what happened.
An identity acting in the system — user, agent, or service — placed by five scope dimensions and carrying an IdP-agnostic claims bag. Detailed on Identity & Audit →
A scoped, on-behalf-of grant with containment — the object that lets an agent Principal act for a user Principal, bounded to a scope it cannot exceed.
The normative record of a consequential action — who, as whom, what, when, and against which Session lineage. A conformant Server MUST emit these.
Five interactions between resources
Opens a Conversation on a Deployment and its first Session. This is where the durable thread and its identity begin.
Upgrades the Conversation onto a new Session — a new runtime or version — preserving lineage. The user never sees a seam.
Retires a Session cleanly: stop accepting new work, let in-flight work finish, then move to drained. No dropped state.
Reads Events as they append to the active Session — the live view of the thread, across any migration.
Appends an Event to whichever Session is currently active. Callers address the Conversation; OASP routes to the Session.
The two state machines
A Conversation is active from publish until it is explicitly archived. It never depends on any single Session being alive.
migrate spawns a fresh active Session; drain walks the old one through draining to drained.