MemoryUnit
MemoryUnit
The MemoryUnit is the atomic unit of knowledge in the protocol. Every finding, decision, observation, question, or intention recorded by an agent is a MemoryUnit. It is immutable once committed — a committed unit's content MUST NOT be modified. To update or correct information, an agent records a new unit with a supersedes or correction relation pointing to the original.
Two properties distinguish Akashik memory units from generic data storage:
- Intent is required. Every unit MUST include an
intentfield declaring why it was recorded. A unit without intent is invalid and MUST be rejected by the Field. - Confidence is explicit. At Level 1+, every committed unit MUST include a confidence score and reasoning. This creates an auditable chain where certainty is transparent.
Schema
{
"id": "<string>",
"mode": "draft | committed",
"type": "<MemoryType>",
"content": "<string>",
"intent": {
"purpose": "<string>",
"task_id": "<string | null>",
"question": "<string | null>"
},
"confidence": {
"score": "<number>",
"reasoning": "<string>",
"evidence": ["<string>"],
"assumptions": ["<string>"]
},
"source": {
"agent_id": "<string>",
"agent_role": "<string>",
"session_id": "<string | null>",
"timestamp": "<ISO 8601>"
},
"relations": ["<Relation>"],
"status": "active | draft | superseded | retracted | contested | pending_enrichment",
"epoch": "<number>"
}
Field Reference
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Auto-generated by the Field. Agents MUST NOT set this. |
mode | string | ✓ | "draft" or "committed" — affects validation rules. |
type | string | ✓ | Semantic category. See MemoryType below. |
content | string | ✓ | The knowledge payload. Must be non-empty. |
intent.purpose | string | ✓ | Why this unit was recorded. REQUIRED at all levels and modes. |
intent.task_id | string or null | The task this unit serves. | |
intent.question | string or null | The question this unit answers or asks. | |
confidence.score | number | Level 1+ committed | Certainty between 0.0 and 1.0. |
confidence.reasoning | string | Level 1+ committed | Why this confidence score was assigned. |
confidence.evidence | string | Sources supporting the content. | |
confidence.assumptions | string | What is assumed to be true for this unit to hold. | |
source | object | ✓ | Auto-generated by the Field. Agents MUST NOT set this. |
relations | Relation | Links to other memory units. See Relation below. | |
status | string | ✓ | Auto-set by the Field. See status values below. |
epoch | integer | ✓ | Logical clock value. Auto-assigned by the Field. |
Required Fields by Mode and Level
| Field | Draft (all levels) | Committed — Level 0 | Committed — Level 1+ |
|---|---|---|---|
type | REQUIRED | REQUIRED | REQUIRED |
content | REQUIRED | REQUIRED | REQUIRED |
intent.purpose | REQUIRED | REQUIRED | REQUIRED |
confidence.score | — | — | REQUIRED |
confidence.reasoning | — | — | REQUIRED |
relations | — | — | — |
The Field MUST auto-generate id, epoch, source.agent_id, source.agent_role, source.timestamp, and status on every RECORD. Agents MUST NOT set these fields.
Mode Behavior
Draft mode allows lightweight, low-ceremony recording. The Field or a downstream agent MAY enrich a draft into a committed unit by adding confidence and metadata. The Field MUST set status to "draft".
Committed mode enforces full validation. At Level 0, intent.purpose is the only required field beyond type and content. At Level 1+, confidence.score and confidence.reasoning are also required. The Field MUST set status to "active".
Status Values
| Status | Description |
|---|---|
active | The memory unit is valid and visible for attunement. |
draft | Recorded in draft mode. Awaiting enrichment before full use. |
superseded | Replaced by a newer memory unit via a supersedes relation. |
retracted | Explicitly withdrawn by an agent or human operator. |
contested | Involved in an unresolved conflict. |
pending_enrichment | Committed but embedding generation or enrichment failed; queued for retry. |
MemoryType
MemoryType is the semantic category of a memory unit. Implementations MUST support at minimum: finding, decision, observation, and question.
MemoryType = "finding" | "decision" | "observation" | "intention"
| "assumption" | "constraint" | "question" | "contradiction"
| "synthesis" | "correction" | "human_directive"
| Type | Description |
|---|---|
finding | A discovered fact or data point |
decision | A choice made by an agent or human |
observation | A subjective assessment or interpretation |
intention | A declared plan or next step |
assumption | Something taken as true without verification |
constraint | A limitation or boundary condition |
question | An open question that needs answering |
contradiction | An explicit flag that two findings conflict |
synthesis | A combination of multiple findings into a conclusion |
correction | An explicit correction of a prior memory unit |
human_directive | Input from a human operator |
Implementations MAY extend this set with additional types. Extended types MUST use a namespace prefix (e.g., acme:custom-type).
Relation
A Relation links a memory unit to another, building a knowledge graph inside the Field.
{
"type": "<RelationType>",
"target_id": "<string>",
"description": "<string | null>"
}
RelationType = "supports" | "contradicts" | "depends_on" | "supersedes"
| "caused_by" | "elaborates" | "answers" | "blocks" | "informs"
| Type | Description |
|---|---|
supports | This unit provides evidence for the target |
contradicts | This unit conflicts with the target — triggers conflict detection at Level 1+ |
depends_on | This unit assumes the target is true |
supersedes | This unit replaces the target; target MUST transition to superseded |
caused_by | This unit exists because of the target |
elaborates | This unit adds detail to the target |
answers | This unit answers a question posed by the target |
blocks | This unit prevents progress on the target |
informs | This unit provides useful context for the target |
contradicts, the Field MUST create a Conflict object (Level 1+).JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://akashikprotocol.com/schema/0.1.0/memory-unit.json",
"type": "object",
"required": ["id", "mode", "type", "content", "intent", "source", "status", "epoch"],
"properties": {
"id": { "type": "string", "minLength": 1 },
"mode": { "type": "string", "enum": ["draft", "committed"] },
"type": {
"type": "string",
"enum": ["finding", "decision", "observation", "intention", "assumption", "constraint", "question", "contradiction", "synthesis", "correction", "human_directive"]
},
"content": { "type": "string", "minLength": 1 },
"intent": {
"type": "object",
"required": ["purpose"],
"properties": {
"purpose": { "type": "string", "minLength": 1 },
"task_id": { "type": ["string", "null"] },
"question": { "type": ["string", "null"] }
}
},
"confidence": {
"type": "object",
"properties": {
"score": { "type": "number", "minimum": 0.0, "maximum": 1.0 },
"reasoning": { "type": "string", "minLength": 1 },
"evidence": { "type": "array", "items": { "type": "string" } },
"assumptions": { "type": "array", "items": { "type": "string" } }
}
},
"source": {
"type": "object",
"required": ["agent_id", "agent_role", "timestamp"],
"properties": {
"agent_id": { "type": "string" },
"agent_role": { "type": "string" },
"session_id": { "type": ["string", "null"] },
"timestamp": { "type": "string", "format": "date-time" }
}
},
"relations": {
"type": "array",
"items": {
"type": "object",
"required": ["type", "target_id"],
"properties": {
"type": {
"type": "string",
"enum": ["supports", "contradicts", "depends_on", "supersedes", "caused_by", "elaborates", "answers", "blocks", "informs"]
},
"target_id": { "type": "string" },
"description": { "type": ["string", "null"] }
}
}
},
"status": {
"type": "string",
"enum": ["active", "draft", "superseded", "retracted", "contested", "pending_enrichment"]
},
"epoch": { "type": "integer", "minimum": 0 }
}
}