Check and correct what nanobot remembers about you
Where nanobot keeps long-term memory, how Dream updates it, and the chat commands to inspect, correct, roll back and prune what it saved about you.
· ranx.cloud

This guide is for anyone who has used nanobot for a few weeks and wants to know what it actually remembers, why it keeps bringing up something you told it once, and how to fix a wrong fact without starting over. You end up knowing which files hold its memory, how to see each change it made, how to correct or roll back a change, and how to keep one-off conversations out of memory altogether.
Everything below happens in the nanobot WebUI chat or any connected chat app. Commands and file names were checked against nanobot v0.4.0 and its memory docs.
The four layers
nanobot doesn't keep one big memory file. It has layers that change at different speeds:
| Layer | Where | What goes in | When it changes |
|---|---|---|---|
| Conversation | saved chat history (SQLite since v0.4.0) | every message in a topic or chat | every turn |
| Summaries | memory/history.jsonl in the agent workspace |
compressed summaries of older turns | when a conversation is compacted |
| Durable files | USER.md, SOUL.md, memory/MEMORY.md |
facts about you, the bot's voice, lasting facts about your work | when Dream runs |
| Versions | a Git history inside the workspace | each change Dream made to the durable files | after each Dream change |
The durable files are what makes nanobot feel like it knows you. USER.md holds stable facts and preferences about you. SOUL.md holds how the bot should sound. MEMORY.md holds decisions and facts about your projects. SOUL.md and USER.md go into the system prompt of every turn, and so does MEMORY.md once it has real content. That's why a wrong fact keeps resurfacing in every conversation, and why a bloated MEMORY.md costs you tokens on every message.
How something gets remembered
Telling nanobot "remember that I prefer metric units" doesn't write a file on the spot. Two background steps do:
- Compaction. When a conversation grows large, after 15 minutes of inactivity (Settings → System, Auto-compact idle sessions), or when you send
/compact, nanobot summarizes the older part of the conversation and appends the summary tohistory.jsonl. Your chat history stays intact; the model just stops receiving those old messages word for word. - Dream. Every two hours by default, Dream reads summaries it hasn't processed yet, plus the current
USER.md,SOUL.mdandMEMORY.md, and edits the durable files with the smallest change that keeps them consistent. If there's nothing new, it doesn't call the model.
So a preference you stated this morning may not be in USER.md until this afternoon, and a reply like "Got it, I'll remember that" proves nothing. Dream is on by default; the switch is Memory consolidation under Settings → Capabilities. Turning it off keeps existing memories and stops new ones from being written.
Save something and confirm it landed
Say it plainly, in a normal topic:
For anything I write in English, use British spelling and metric units.
Then force both steps instead of waiting:
/compact
Wait for the compaction to finish, then:
/dream
Wait for Dream's completion message, then:
/dream-log
/dream-log shows the latest change as a diff of the memory files. If Dream decided nothing durable was said, there's no change, and that's a valid outcome; restate the preference more explicitly and repeat.
To read the files themselves, ask in a WebUI topic that uses the default agent workspace:
Show me the full contents of USER.md and memory/MEMORY.md, unchanged.
If you've picked a different project folder for the topic, nanobot in Restricted mode can't read those files from there. Start a new topic on the default workspace.
Finally, test reuse where it matters: start a new topic or message the bot from Telegram and ask "Which spelling and units do I want?"
Correct a wrong fact
Wrong facts come from two places: something you said that is no longer true, and something the model guessed and wrote down as if you had said it. The second is a known weakness: summaries don't record whether a fact came from you or was inferred, so a guess can be repeated until Dream treats it as settled, and a later correction doesn't always remove it (#4212).
Fix it in this order.
1. State the replacement, not just the denial.
Correction for memory: I no longer work at Acme. Since October 2026 I work
at Northwind as a backend lead. Remove every mention of Acme as my employer.
Then /compact, /dream, /dream-log. A bare "that's wrong" gives Dream nothing to write.
2. Edit the file directly when Dream doesn't fix it. nanobot can edit its own workspace files:
Edit USER.md: delete the line saying I live in Berlin and replace it with
"Lives in Izmir, Turkey (UTC+3)". Show me the diff before and after.
Check the old fact isn't also sitting in memory/history.jsonl waiting to be processed, or Dream may add it back on its next run:
Search memory/history.jsonl for "Berlin" and show me the matching lines.
3. Roll back a bad Dream run. Every Dream change is versioned:
/dream-restore
lists recent memory versions with their IDs.
/dream-restore 3f2a9c1
restores memory to the state before that change, including anything else Dream changed in the same run. Run /dream-log afterwards to see where you are.
Keep things out of memory
Some conversations shouldn't be remembered at all: a one-time question about a medical result, a draft for someone else, a test of a new skill.
In the WebUI, start New topic → Temporary chat. Temporary chats aren't added to topic history or long-term memory, and they disappear when you reload the page or the connection drops. They still go to your model provider, and tools in them can still change files. They also can't create scheduled jobs.
For a permanent rule about what Dream may keep, give it its own instructions:
/dream-prompt init
This creates prompts/dream.md in the workspace. Ask nanobot to add your rules to it, for example:
Add to prompts/dream.md:
- Never store health, financial account or password details.
- Never store facts about other people beyond their name and role.
- Only record a preference about me if I stated it myself.
/dream-prompt shows the guidance Dream currently uses. Delete or empty the file to go back to the defaults.
Prune it
Memory files only grow if nobody trims them. Once a month or so:
Read memory/MEMORY.md. List entries that look outdated, duplicated or about
finished projects. Don't change anything yet.
Review the list, then:
Remove items 2, 5 and 7 from memory/MEMORY.md and keep the rest as is.
You don't need to prune history.jsonl. After Dream runs, nanobot drops the oldest summaries Dream has already processed and keeps roughly the last 1,000 entries.
Watch for duplicated skills too: there is an open report of Dream creating a new workspace skill on each run instead of updating the existing one (#4467). Skills → Installed lists workspace skills and lets you delete the extras.
What it costs
Dream and compaction are model calls on your API key. Settings → Overview → Token usage → View details shows them under Usage by source: Memory is Dream, and compaction falls under the other sources. Dream reads the three durable files plus new summaries; assume 20,000 input and 2,000 output tokens per run that has work to do. At four such runs a day on Claude Haiku 5.5 ($0.10 in, $0.50 out per million tokens, OpenRouter, November 2026):
4 × 30 = 120 runs/month
120 × 20,000 × 0.10 / 1e6 = $0.24
120 × 2,000 × 0.50 / 1e6 = $0.12
≈ $0.36/month
The bigger, hidden cost is the durable files themselves: every extra 1,000 tokens in MEMORY.md is sent with every message. Pruning pays for itself.
What goes wrong
It said it would remember, and didn't. Nothing was compacted yet, or Dream judged it not durable. Run /compact, /dream, /dream-log, and check that Memory consolidation is on.
A corrected fact comes back a day later. The old version is still in unprocessed summaries or in a topic you keep using. Fix the file directly, search history.jsonl for the old wording, and start a new topic for the next conversation.
The agent "remembers" something you never said. An inference was written down as a fact. Correct it explicitly and add "only record preferences I stated myself" to prompts/dream.md.
It can't read USER.md. The topic uses another project folder in Restricted mode. Open a topic on the default workspace.
Two clients' details are getting mixed. All topics and chat apps in one nanobot share the same long-term memory; a new topic or project doesn't separate it. Labelling facts by client helps organization, not privacy. Keep separate clients in separate instances.
/dream-restore undid more than expected. It restores everything changed in that version. Re-apply the good parts by stating them again.
On ranx.cloud the workspace, including the memory files and their version history, is stored on your instance's disk, encrypted with a key unique to that instance.


