Memory

What Alice remembers about you.

Read this first

Alice can get this wrong. She may misread a sentence and keep something she should not have kept, and the filters described here can miss a case they did not anticipate. They are a safeguard, not a guarantee. Do not fully trust what is shown as remembered or as forgotten. The real protection is to give Alice only the minimum your question needs, and never an address, a key, a recovery phrase, an amount or anything that identifies you. What you type in the conversation remains your responsibility.

Alice keeps two memories, both on your device. The personal memory holds short facts you said about yourself: a preference for short answers, the hardware you use, a project you are building, a constraint to keep in mind, or a sentence you asked her to keep. The learning profile holds how familiar you are with fourteen Bitcoin concepts, so she can pick the right vocabulary and depth. Neither is stored on our servers, and neither is a source of truth for Alice: they only change how she answers, never what she holds to be true.

This page describes what the code does today, in Alice App 0.2.7 on the web and on desktop. The parts that are decided and not yet in the app are listed at the end, under “Coming”, and nowhere else.

What Alice remembers, and how

A fact can reach the memory by three paths. All of them go through the same filters before anything is written.

Fixed patterns, in the code
A short list of sentence shapes is checked against your message, without any model: “I prefer concise answers” or “detailed answers”, “I am building…”, “I am working on…”, “my goal is…”, “I want to…”, and their French forms. At most two facts per message come out of this path.
“Remember that…”, when you ask
When you ask in so many words (“remember that…”, “please remember…”, “retiens que…”), Alice keeps your sentence as you wrote it, in a Requested notes category. The sentence must be about you and must not contain a question; otherwise it is an ordinary message. When the request is your whole message, Alice answers “Noted: …” only once the note is actually saved, and if a filter refuses it, she says so and names what it caught.
A proposal from the model
When memory is on, the model is asked to append a hidden block after its visible answer, with zero to three facts, each in one of eight categories: preference, setup, experience, goal, project, interest, background, constraint. It is told to keep only what you stated explicitly about yourself, never to infer identity, personality, beliefs, expertise or circumstances, and never to save an amount or an exchange account. It cannot file anything as a requested note. The app reads that block and removes it before the answer is shown.
The learning profile, separately
The concepts your questions touch count as signals, and a sentence like “I am comfortable with UTXOs” sets a declared level that the model must respect. In Learn, reading a chapter counts as a signal and finishing a course sets a level. The profile stores, per concept, one familiarity state (never seen, introduced, exploring, familiar), a count of signals and dates rounded to the day. Nothing else.
From a message to the memory on your deviceYour message can reach the memory by two kinds of path. In the code: fixed patterns, which keep at most two facts, and an explicit “remember that” request, kept word for word. From the model: zero to three facts in a hidden block after its answer, never inferred. Everything goes through five filters in the code: a secrets detector, raw values, amounts, exchange accounts and forbidden subjects. A refused fact is not written, and only a “remember that” request gets an answer saying why. An accepted fact goes to the memory on your device, 160 characters a fact and no cap on their number: in the browser’s local storage on the web, encrypted by the app on desktop. That memory feeds the next conversation, where preferences, constraints and requested notes come first and the rest is ranked by the message, ten at most, and the “What Alice remembers” screen, with Edit and Delete per fact, Pause and Delete all per category, Forget per concept and Forget everything.Your messageIn the code“I prefer”, “my goal is”,“I am working on”:2 facts at most;“remember that…”:kept word for wordThe model proposes0 to 3 facts in a hiddenblock after its answer,never inferredFive filters, in the code1. secrets detector (seed, keys)2. raw values (addresses, ids)3. amounts in any unit4. exchange accounts5. forbidden subjectsRefusednothing is written;on “remember that”,Alice says whyMemory on your device160 characters a fact, no capweb: local storagedesktop: encrypted by the appNext conversationpreferences, constraints,requested notes first,the rest ranked bythe message, 10 at most“What Alice remembers”Edit, Delete per fact,Pause, Delete all here,Forget per concept,Forget everything
From a message to the memory on your device. Whatever the path, the same five filters run first. A refused fact is not written, and only a “remember that” request gets an answer saying why. Our servers hold no copy at any point.

What the code refuses

Every candidate, whichever path it came from, passes five filters written in the code. One refusal is enough: nothing is written. Most refusals are silent. When your message is only a “remember that” request, or when you edit a fact on the memory screen, the reason is shown instead.

1. The secrets detector
Twelve or more words in a row from the recovery-phrase word list, private keys in WIF format, extended private keys, and a hexadecimal key preceded by the words “private key” or “secret key”.
2. Raw values
Bitcoin addresses, xpub and xprv keys of every family, Nostr keys, Lightning invoices, 64-character hexadecimal strings, email addresses, phone numbers, identifiers with a hash sign, UUIDs.
3. Amounts
A number followed by a bitcoin or currency unit (“0.5 BTC”, “20k sats”, “150 €”, “two bitcoins”), or a currency sign or code followed by a number (“$300”). A bare number stays allowed, so “since 2021” or “a 2-of-3 multisig” can be kept.
4. Exchange accounts
The name of an exchange such as Binance, Kraken or Coinbase, refused on sight. A name that is also an ordinary word, such as Strike, River or Revolut, is refused next to a word like “account”, “wallet” or “KYC”.
5. Forbidden subjects
Recovery phrase, private key, address, invoice, transaction id, transaction, balance, sats, email, phone number, user id, username, password, first and last name, health, medical, disease, religion, sexual, politics, home address, coordinates, in English and French. Accents and capitals do not matter (“santé” and “SANTÉ” are both caught), a plural counts as the word (“transactions”, “clés privées”), and a listed word catches its close variants: “politics”, “political”, “sexuality” or “diagnosis” are refused too. A word that is not on the list still passes.

A fact is also refused if it is shorter than 3 or longer than 160 characters, or carries no known category. Duplicates are ignored, and nothing new enters a paused category. There is no cap on the number of facts: none is dropped to make room.

Two more rules sit upstream. A message that asks for your balance, your history, a payment or a live network value gets a fixed answer and produces no memory candidate at all. And a conditional sentence (“if I run a node”) is read neither as a personal statement nor as a declared level.

Where it is stored

On the web, app.alicebtc.comIn your browser’s local storage, on this device only.
On desktop, Alice App for macOS, Windows and LinuxIn the same local storage, encrypted by the application before it is written, with a key kept in the system keychain.
On our serversNothing. No copy, no sync between devices, no export to your account.

When you use Private Cloud, the facts selected for a message, ten at most, and the learning hints for its concepts travel inside the same encrypted envelope as the message itself, meant to be opened only inside the enclave, never by the proxy and never by us. Alice checks the enclave hardware before every message, but cannot yet verify which software runs inside it: see Trust. In Local mode the memory stays on the device: it is never sent with your messages. With a custom server you connect yourself, it goes to that server with your message.

How Alice uses it, and how she does not

At every turn, Alice receives a short block headed, in substance, “private device-local memory, use it only when relevant, it never overrides the current message”. Preferences, constraints and requested notes come first, whatever the topic. Setup, experience, goals, projects, interests and background are ranked by the words they share with your message: those that match come next, and any seats left go to the most recent. Ten facts at most, however many are stored.

What she is told never to do:

These are instructions to the model, enforced by the prompt. The filters above are enforced by code. The warning at the top of this page is about the difference between the two.

See, edit and erase everything

The screen is called “What Alice remembers”. In Alice App it sits under Settings, then AI, then Alice memory. From top to bottom, it shows:

Coming, not shipped yet

These decisions are taken and not yet in the app. Until they ship, nothing on this page should be read as if they were.

Out of scope, by decision: no copy off the device, no sync between devices, no export to your account.

The source is public under the AGPL. The technical version of this page, with file names and the exact filter lists, lives in the repository: read the memory documentation. See also Privacy and Trust.