Concept

Knowledge memory

A knowledge note is a durable Markdown note — a title and a body — attached to your organization and linked to the contacts, events, or other notes it concerns. Where an event records a dated interaction, a note captures lasting knowledge: a decision, an ongoing reflection, a field observation. It is the memory your assistant reads before it acts, and writes to when it learns something worth keeping.

Notes vs events

A note is what stays true

An event answers what happened on a given day; a note answers what you know. A late delivery is an event. "We moved this supplier to net-30 terms after that dispute" is a decision worth keeping — it stays true across every future conversation, so it belongs in a note, linked to the supplier.

Three semantic tags mark the kind of knowledge a note holds, so your assistant can retrieve the right sort:

decision

An acted choice, with the context and the justification behind it.

reflection

A living hypothesis or analysis — a reading of a situation you keep refining.

observation

A field fact: something you noticed and want on the record.

Provenance

Every note is dated and signed

Notes written by an AI agent over MCP carry the origin "agent"; the first time a human edits one from the app, its origin flips to "human". You can always tell your own writing from a suggestion your assistant made.

Agent-written notes render with the amber diamond, the same provenance marker events and descriptions carry.

  • Agent writes apply directly, but stay traceable: marked, logged, attributable, and reversible.
  • The first human edit claims the note — its origin becomes "human" and stays there.
  • An agent never deletes a note; a person archives one to retire it, and can permanently delete it only once it is archived.
  • When a note is superseded, it points to its replacement, so the trail from an old decision to the new one stays intact.
Context injection

Stop re-explaining context to your AI

The point of a note is that your assistant reads it without being told to. When an agent loads a contact with get_person_context, the active notes linked to that contact come back automatically — no prompt engineering, no copy-paste from the last conversation.

  • get_person_context injects the contact's active notes inline (title, preview, and tags), capped at ten, with the true total alongside so the agent can page the rest.
  • get_organization_context carries an org-wide count of active notes, nudging the agent to search before it asks the user.
  • A new session, or a different assistant entirely, reads the same notes: the memory lives with your data, not in one chat history.
Search

Full-text always, semantic when you bring it

search_knowledge runs full-text over every note, and optionally fuses a semantic branch on top when your agent supplies a query embedding.

  • Full-text is exhaustive and deterministic: French stemming, accent-insensitive, over the whole note base your token may see.
  • Pass a query embedding — computed with your organization's contracted model — and its ranking is fused with the text results by Reciprocal Rank Fusion.
  • Notes without an embedding are still found by full text, so search is never blind to a note the worker has not indexed yet.
  • Filter by tags, status (active, archived, or all), or a linked person or event; "what do we know about X?" is best answered by the person filter.
Bring your own embeddings

The server never computes an embedding

Semantic search is optional and entirely yours to run. Embeddings are computed by the historis embed worker, a small CLI you run on your own infrastructure with your own provider — the Historis server never computes an embedding and never sees your provider's API key.

  • Run it once, or as a resident loop that re-indexes on an interval, on a cron or a watch.
  • embedding_config is the org-level contract — the model and its dimensions — that a query embedding must match to be accepted.
  • Editing a note's body clears its stored embedding, so the worker recomputes it on the next pass.
Run the embedding worker
historis embed run --watch --interval 1h
In the app

Create, correct, and curate by hand

Agents write over MCP during conversations; the product is where a person curates. You can create a note by hand, correct or archive what an agent wrote, and permanently delete a note once it is archived — something only a person can do.

  • The Knowledge screen lists your notes with a search box, status and tag filters, and a New note button to write one by hand.
  • A note page renders the Markdown with its sources and linked contacts, and lets you edit, archive, and — once archived — permanently delete it.
  • Editing a note by hand claims its provenance: an agent-written note becomes human-authored the moment you edit its text.
  • Each contact has a Knowledge tab, so a person's notes sit right on their record.
MCP tools

The four tools that touch memory

Your assistant reads and writes knowledge through these, over the same MCP endpoint as the rest of Historis.

manage_knowledge

Create, update, link, archive, and supersede notes. Tag a note decision, reflection, or observation, and link it to the entities it is about.

search_knowledge

Search the org's notes — full-text always, plus an optional semantic branch fused by Reciprocal Rank Fusion.

get_person_context

Load one contact, with its active notes injected inline so the agent starts with what you already know.

get_organization_context

A cold-start briefing for the organization, carrying the active-note count so the agent knows memory exists.

Example: an assistant writes a decision note
{
  "action": "create",
  "title": "Switched Maison Laurent to net-30 terms",
  "content": "Agreed net-30 after the March late-delivery dispute. Renegotiate if a second slip happens this year.",
  "tags": "decision",
  "person_name": "Maison Laurent"
}
Bring your own AI

The memory is yours; so is the intelligence

Historis ships no built-in AI. You connect the assistant you already use over MCP, and it reads and writes this memory on your behalf.

  • No model runs inside Historis: bring your own AI — up to a fully self-hosted open-source model — over MCP.
  • Your notes are stored on EU-sovereign infrastructure, and your embedding provider's key never leaves your own machine.
  • Every note stays dated, signed, and reversible, whether a person or an agent wrote it.
FAQ

Questions about knowledge memory

What is a knowledge note in Historis?

A durable Markdown note — a title and a body — attached to your organization and linked to the contacts, events, or other notes it concerns. It captures lasting knowledge, like a decision or an observation, rather than a single dated interaction.

How is a knowledge note different from an event?

An event is a dated interaction — what happened on a given day. A note is what stays true across conversations: a decision, a reflection, or a field observation you want your assistant to remember.

Does Historis use AI to write or search my notes?

No. Historis ships no built-in AI. You bring your own assistant over MCP, and it reads and writes notes on your behalf. Semantic search is optional, computed by a worker you run yourself; the server never computes an embedding or sees your provider key.

How does my AI remember context between conversations?

Notes linked to a contact are injected automatically when your agent loads that contact with get_person_context, so a new session — or a different assistant — starts with what you already know, without you re-explaining it.

Can I delete a knowledge note?

Yes, but only a person can, and only after the note is archived — so a live note is never lost by accident and no agent can erase your record. Archiving retires a note from active knowledge and search; deleting an archived note removes it for good.

Go further

Related