Temporal Layers
The three layers
Akashik does not treat all memory as equal. Every MemoryUnit is tagged with a temporal layer that describes its semantic position in the workflow — not when it was created, but what kind of memory it represents.
| Layer | Semantic meaning | Examples |
|---|---|---|
| Past | Concluded, immutable context | Research findings, resolved decisions, completed tasks |
| Present | Active, current working memory | Ongoing hypotheses, in-progress analysis, live task state |
| Future | Planned, anticipated, projected | Scheduled actions, expected outcomes, pending decisions |
Why temporal layers matter
Without temporal structure, memory collapses into a flat list. An agent attuning to the Field receives findings from concluded work mixed with active deliberation mixed with future projections — with no way to weight them differently.
Temporal layers give the attunement engine a critical signal. An agent focused on current decision-making weights present units more heavily. An agent producing a forward plan integrates future units. An agent reviewing what happened focuses on past.
Setting temporal position
temporal_layer on a MemoryUnit and temporal_bias on ATTUNE are Level 2+ extensions. They are not part of the Level 0–1 MemoryUnit or Scope schemas. The formal mechanism at Level 2+ is the temporal_layers array in the Scope passed to ATTUNE. The field-level tagging shown below represents planned extension behaviour.Temporal position is declared at record time:
// A completed finding — past
await researcher.record({
type: 'finding',
content: 'Segment A has 3 dominant players',
temporal_layer: 'past',
intent: { purpose: 'Capture competitive landscape' }
})
// An active hypothesis — present
await analyst.record({
type: 'hypothesis',
content: 'Segment B may be underserved',
temporal_layer: 'present',
intent: { purpose: 'Guide further research' }
})
// A planned action — future
await orchestrator.record({
type: 'instruction',
content: 'Validate Segment B assumption with primary research',
temporal_layer: 'future',
intent: { purpose: 'Direct next research phase' }
})
Temporal layers in attunement
At Level 2+, agents include temporal_layers in their Scope to shift relevance scoring toward specific layers without excluding others. This is the formal spec mechanism:
const context = await agent.attune({
scope: {
role: 'analyst',
max_units: 10,
temporal_layers: ['present'] // prioritise active working memory
}
})
Memory evolution
MemoryUnits are not static. A hypothesis in present may be resolved into a finding and moved to past. A planned action in future may become an active instruction in present. The Field tracks these transitions and maintains provenance through the lifecycle.
This is distinct from deletion — Akashik does not erase memory. It evolves it, with a full audit trail.