Tideline

Records & origins

Everything Tideline knows is a record in memory/facts.jsonl. A record is more than text: it carries the kind of fact it is, how durable it is, who wrote it, and the edges that connect it to the rest of your memory.

Segments#

The segment says what kind of fact this is. It sets the default tier, importance, and decay rate, and it decides whether the write-gate treats the fact as authoritative (owner-only) or descriptive.

SegmentMeaningAuthoritative?
identityWho you areYes (owner-only)
preferenceHow you want things doneYes (owner-only)
correctionAn explicit fix to a prior beliefYes (owner-only)
relationshipPeople in your lifeNo
projectWork, conventions, goalsNo
knowledgeDurable facts you statedNo
contextOngoing situational state (fades fast)No

Origin: owner vs. channel peer#

Every record is stamped with an origin. This is the load-bearing privacy boundary: owner memory and each channel peer's memory are scoped so one never surfaces in the other's recall.

MemoryRecordOrigin
type MemoryRecordOrigin =  | { kind: "owner" }  | {      kind: "channel";      channelId: string;       // which channel      conversationId: string;  // which conversation      sessionKey: string;      // which session      accountId?: string;      // multi-account channels    };
  • owner facts are recallable across all your sessions, and invisible to peers.
  • channel facts are recalled only when channel, conversation, and session all match — different chats from the same person stay isolated.
  • A legacy record with no origin is treated as owner (back-compat).

The record#

The fields that are live in v1:

FieldWhat it is
memoryIdStable unique id
contentThe fact (capped at 1000 chars)
segment / tierKind of fact / durability class
importance0..1, drives ranking and decay
decayRate, accessCount, lastAccessedAt, createdAtDecay + reinforcement bookkeeping
lifecycleactive / archived / pruned
createdByThe origin tag
sourceTypeProvenance — drives the write-gate and trust
linksTyped edges (see the link graph)
embeddingVector for the recall recovery lane
subjectKeySingle-value slot for auto-supersession
metadataOptional JSON sidecar

Reserved fields

Some fields are persisted but dormant in v1, reserved for later phases: confidence and status (epistemic trust), validFrom (bi-temporal valid-time; validTo is partially live and gates recall), and sourcePointers / modality / mediaPointer(cascade-purge and media). They're in the schema now so the data accrues before the features that use it land.

In the code

The full schema, segment defaults, and origin helpers are in src/agents/memory/records.ts.