# How Memo works (/en/docs/memo/how-it-works)

This page explains what happens to your notes, mail and messages when Memo uses them: where the
text is kept, what an import does, how links and references work, and what an agent can and cannot
do. Read it when you want to know why Memo answers the way it does, or before you point it at
something private.

## The local store [#the-local-store]

Memo keeps everything in one file on your computer, the **local store** (`wirecat.db`). tg and max
save your Telegram and MAX messages in the same file, so Memo can answer about messages, mail and
notes together.

| Where it comes from | Who puts it in the local store |
| --- | --- |
| Telegram and MAX messages | tg and max, when they download your chats |
| Email | `memo mail <account> import` or `memo import` |
| Files in your note folders | `memo notes import` or `memo import` |
| Your own notes, tags, tasks, memories and facts | Memo, when you or your agent add them |

Memo never changes the original: your files stay as they are, and your mailbox is opened read-only.
The local store holds a copy of their text.

## What an import does [#what-an-import-does]

An import reads your folders and mail accounts and brings the local store up to date.

* **Only what changed is read.** A file that has the same size and change time as last time is
  skipped. Mail that is already stored is skipped. A second import is quick.
* **Edits keep history.** When you edit a note file, the local store keeps the old text as an
  earlier version.
* **Moves keep everything.** A file moved inside its folder keeps its links and tags.
* **Deletions are respected.** When you delete a file or an email, its text leaves the local store
  on the next import.
* **A safety stop.** If an import finds that most of a folder or mailbox is suddenly missing (for
  example, a disk that is not connected), it deletes nothing and tells you.
* **Search by meaning is prepared.** If the search model is on your computer, the import also
  prepares the new text for search by meaning. `--no-embed` skips this step.

Two imports never run at the same time, and one source that fails does not stop the others.

## Folders on more than one computer [#folders-on-more-than-one-computer]

When you add a folder, Memo gives it an ID (a short number) in the local store. Notes and links use
that ID, not the folder's path. If you use the same notes on another computer, `memo folders attach`
connects the ID to the folder's path there. Because the ID stays the same, the notes keep their
links and tags.

## Links between notes and people [#links-between-notes-and-people]

When Memo imports a note, it also reads the links in it:

* A link to another note in the folder becomes a link to that note.
* A link to a name, such as `[[Kai Sample]]` in Obsidian, becomes a link to that person as soon as
  someone with that name, nickname or username is in the local store. If two people have the same
  name, the link waits until you choose.
* A link written as a reference, such as `[Kai](person:7)` or `msg:telegram/1/77/42`, links straight
  to that person or message.

A name in ordinary text is **not** a link. Memo does not guess who a note is about from the words in
it.

## One person, several accounts [#one-person-several-accounts]

The same person can have a Telegram account, a MAX account and an email address. Memo treats them as
one person only after you link them, with `tg contacts link`[↗](/llms.mdx/docs/tg/commands-personal/content.md#tg-contacts-link "Command reference: tg contacts link") or `max contacts link`[↗](/llms.mdx/docs/max/commands-personal/content.md#max-contacts-link "Command reference: max contacts link"). A matching name
or email domain is never enough. This keeps one person's messages from being mixed with someone
else's.

## References [#references]

Every result names its source with a reference. You can copy a reference into another command to
tag it, write a note about it or use it as evidence.

| Reference | What it points to |
| --- | --- |
| `note:12` | A note you wrote in Memo |
| `document:3` | A file from one of your note folders |
| `msg:telegram/1/77/42` | One message: the messenger, the account, the chat and the message |
| `chat:…`, `contact:…` | A chat or a contact in one account |
| `person:…` | A person whose accounts you linked |
| `organization:…`, `project:…`, `task:…` | Your organizations, projects and tasks |
| `memory:…`, `fact:…` | A memory or a fact |
| `meeting:…` | A meeting saved in the local store |

A message reference includes the account, so the same message number in another account is a
different message.

## Search by words and by meaning [#search-by-words-and-by-meaning]

Memo always searches by words: it finds notes, mail and messages that contain every word you typed,
including other forms of the word. With the search model on your computer, it also searches by
meaning, so `holiday` can find a note about a vacation. The model runs on your computer; your text
is not sent anywhere for this. Each result says how it was found.

An empty result means only that the local store has nothing that matches. It does not prove that
something never happened: the chat may not be downloaded, or the folder may not be imported.

## Agents suggest, you decide [#agents-suggest-you-decide]

Your agent can add three kinds of records:

* a **memory**: something concluded, such as a preference;
* a **fact**: something that happened, such as a decision;
* a **proposed action**: something to do, such as a reply. It always waits until you approve or
  reject it. Approving it makes it a task for you. Memo never sends a message or an email.

What an app adds through the [MCP server](/llms.mdx/docs/memo/mcp/content.md) waits as **proposed** until you confirm the memory
or accept the fact. Through MCP, an agent cannot confirm, accept, approve or reject, and every call it
makes is written to the agent log (`memo agents log`), without the details it sent.

A memory or fact added with the `memo` command counts as yours and is confirmed at once: the command
cannot tell whether you or your agent typed it. Ask an agent with a terminal to show you the text and
its source before it adds anything.

## What can leave your computer [#what-can-leave-your-computer]

Nothing, unless you ask for it. `memo ask` prepares sources for your own agent by default. It sends
text to an AI provider only when you set one up and add `--model`, and to a remote provider only
with `--allow-remote` as well. What your agent does with the text it reads is up to that agent.
See [Security](/llms.mdx/docs/memo/security/content.md).
