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.
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:
An acted choice, with the context and the justification behind it.
A living hypothesis or analysis — a reading of a situation you keep refining.
A field fact: something you noticed and want on the record.
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.
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.
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.
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.
historis embed run --watch --interval 1h
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.
The four tools that touch memory
Your assistant reads and writes knowledge through these, over the same MCP endpoint as the rest of Historis.
Create, update, link, archive, and supersede notes. Tag a note decision, reflection, or observation, and link it to the entities it is about.
Search the org's notes — full-text always, plus an optional semantic branch fused by Reciprocal Rank Fusion.
Load one contact, with its active notes injected inline so the agent starts with what you already know.
A cold-start briefing for the organization, carrying the active-note count so the agent knows memory exists.
{
"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"
}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.
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.