Skip to main content

Evidence

sxth-mind separates the belief state it owns (UserMind, ProjectMind, Nudge, persisted via Storage) from the raw evidence it rents — the messages, actions, and signals it reads to build context and derive beliefs.
Own the beliefs, rent the bytes. sxth-mind is the system of record for what it concludes about a user, not for the raw transcript. The transcript can live in your own database, a memory vendor (Mem0, Zep), or the bundled local store.
This keeps sxth-mind from competing with — or duplicating — wherever your data already lives.

The interface

An EvidenceSource is a read-mostly port. The only required methods are reads:
An Event is one piece of raw evidence:

Writes are optional

Many apps already log their own conversations. In that case sxth-mind only needs to readappend() defaults to a no-op:
Override append() when you want sxth-mind to capture raw turns for you:

Using it

Pass your source to the Mind (it defaults to a process-local store):
On each chat(), the Mind:
  1. Reads recent evidence via recent() to assemble the prompt.
  2. Calls the LLM.
  3. Appends the user and assistant turns via append() (a no-op if your app owns writes).
  4. Updates the owned belief state and persists it via Storage.

LocalEvidenceSource

The bundled default. In-memory, dependency-free, with naive substring search. Good for development and demos; data is lost when the process exits. Swap in a real source backed by your database or a memory vendor for production.

Where derived views live

The summary and topics that sxth-mind derives from a conversation are not evidence — they’re owned belief state, stored on ProjectMind as conversation_summary and topics. Raw messages stay in the evidence source; conclusions about them are owned by sxth-mind.