Navigation
ELOWEN · Documentation

Last updated: October 20, 2026

Browse documentation · Memory & Embeddings
Everyday use

Memory & Embeddings

Memory keeps useful facts across conversations, such as preferences, decisions, and project details. It is not a transcript. Open the Memory workspace at /memory to search and manage saved memories; supported chats also let you use memory tools such as MemorySearch.

Memory is private to your account unless an administrator has set up a shared Project pool. Memories in a Project pool are available to eligible members while they work in that Project. Shared-pool members can manage accessible memories, but only an administrator can change or delete a shared category. Category creation and recategorization tools apply to your personal memory, not the shared pool. Personal memory tools are unavailable to unlinked platform senders and delegated task workers.

Automatic recall

Elowen can search memory at the start of a turn and, if enabled, again while it works. Both are enabled by default. Change them under Account → Memory: Automatic memory search holds Search memory after each message, and Search while preparing a reply holds Search for memories again while preparing a reply. Recall settings are read for each turn, so changes apply to later work without restarting Elowen.

Search is based on meaning when an embedding model is configured. Otherwise, Elowen uses keyword and recency matching. Automatic turn-start recall returns up to 10 memories within a budget of 20,000 bytes by default. It waits up to 5 seconds for the original message's search, then starts the response without it; results that arrive later are delivered at the next model call, including in the next turn if this turn has no further call. This reuses the same search. An administrator can change the wait from 0 to 30 seconds under Settings → <assistant name> AI → Limits, as Turn-start memory wait; 0 means never wait for the first response. The memory relevance floor and the duplicate thresholds are under Settings → <assistant name> AI → Runtime.

Live recall searches again as Elowen works through files, tools, and errors. It runs in the background and can add results to a later model call. Its instance-wide defaults and ranges are:

Setting (Settings → <assistant name> AI → Limits) Default Range
Recall while working — searches 10 0–20
Recall while working — memories per batch 2 0–10
Recall while working — turn budget 20,000 UTF-8 bytes 10,000–40,000

Set Recall while working — searches to 0 to disable live recall; setting memories per batch to 0 also disables it. Each search skips memories already visible to Elowen, and Recall while working — searches caps the embedding requests a tool loop can make. A new steering message resets its budget. You can also search explicitly with MemorySearch, which returns up to 6 results by default.

Automatic saving

With Account → Memory → Auto-save turned on (Save new memories after each reply), a background pass after each reply can save durable new facts from the exchange, revise memories that have changed, merge duplicates, or delete memories that no longer hold. It is off by default. Each exchange may change at most 2 memories; an administrator sets Maximum memory writes per exchange (0–6) under Settings → <assistant name> AI → Runtime, and 0 switches automatic saving off. The memory tools work either way. The pass uses the utility model, so it does nothing when no utility model is configured.

Automatic memory maintenance

Elowen can also consolidate your memories in the background: a maintenance pass merges similar notes, corrects outdated facts and shortens bodies so they stay useful. It is off by default. Turn it on under Account → Memory → Automatic memory maintenance; while it is off, nothing runs by itself.

A pass runs once enough time has passed since the last one and enough of your other conversations hold a finished exchange. Run now starts one immediately and ignores those conditions. Maintenance model chooses the model a pass uses; by default it is the model of the conversation the pass runs from. Passes work only on your own personal memories, never a shared Project pool. With the account's grants, a pass can also create, delete or refile your categories to keep memories findable; deleting a category leaves its memories uncategorized, so they stay unrecallable until something sorts them again. They never remove a memory permanently: a pass can merge memories, rewrite them, or move them to the trash, where you can restore them.

Past maintenance passes under the switch lists each pass with its time, whether it ran automatically or because you asked, the model, the counts of memories added, updated, merged and deleted, and what it changed. Open a pass to see the before and after of every memory it touched. Stop ends a running pass. A memory a pass has processed is marked reviewed, so the next pass looks at the rest first; editing a memory yourself, or letting the curator change it, makes it eligible again.

An administrator sets how long the account must be quiet and how many other conversations must be active under Settings → <assistant name> AI → Runtime (Memory dreaming: hours since the last pass and Memory dreaming: conversations since the last pass).

Learning reusable procedures

Facts belong in memory; repeatable instructions belong in Skills. With the Skills plugin enabled and permission to create skills, Account → Memory also offers automatic skill learning. It is off by default and applies only to successful personal web and CLI turns, not scheduled work, shared channels, direct platform messages or steered turns.

The Skills plugin periodically reviews completed work for a reusable procedure. A newly learned skill is an ordinary personal skill, available like one you saved yourself; there is no approval step. The reviewer may later improve only skills it wrote itself, and never one you wrote or edited. It considers the completed conversation context using the same model and provider account, and its model usage is charged to your account. A review may be skipped when the exact conversation request cannot be safely extended, capacity is unavailable, or its weekly subscription allowance is at least 90% used or unknown. The count stays pending for a later eligible exchange. Administrators set three limits under Settings → <assistant name> AI → Runtime: Minimum tool calls for a skill review (1–200, default 1) is how many successful tool calls one exchange needs to count at all; Skill review every N tool calls (1–200, default 100; your explicitly saved interval stays unchanged) is how many such calls the counted exchanges add up to before a review; Maximum skill changes per exchange (0–6, default 1) caps the skill writes one review may propose, and 0 switches learning off for everyone.

Manage memories

The Memory workspace lets you search, filter, sort, and inspect memories, then create, edit, categorize, merge, restore, or delete them. Use status and category filters to focus on active or deleted entries. It also has a Map view as an alternative to the List view. Deleted memories go to the trash, where they can be restored or permanently removed.

Each memory has a self-contained body, a kind such as user, feedback, project, or reference, an importance from 1 to 10 (default 5), and a category. Uncategorized memories are stored but cannot be recalled.

Importance describes how much it would cost to forget the fact, not how confident or recent it is: 1 is a small convenience, 3 a narrow reference, 5 a normal durable fact or preference, 7 an important decision or constraint across several tasks, 9 a critical constraint or recurring failure lesson, and 10 an exceptional safety, legal, or ownership boundary. Every level fades when unused; a higher level fades more slowly.

Memory tools

There is no standalone elowen memory command. In supported Elowen sessions, you can use these tools:

Tool Use
MemorySearch(query, limit?) Find relevant memories. Default limit: 6.
MemoryAdd(content, kind?, importance?) Save one durable fact. Importance 1–10, default 5.
MemoryUpdate(id, content?, kind?, importance?) Correct or re-rank a memory (importance 1–10).
MemoryMerge(ids, content) Replace several memories with one consolidated memory.
MemoryDelete(id) Move a memory to the trash.
MemoryListRecent(limit?) List newest memories. Default limit: 10.
MemoryCategories() List categories.
MemoryCategoryCreate(name, description?, icon?) Create a category.
MemoryCategoryDelete(id) Delete a category, leaving its memories uncategorized.
MemoryRecategorize(all?) Categorize uncategorized memories; all: true reviews all memories.

MemoryAdd saves the memory even if it resembles an existing one. Check the reported match and decide whether to keep both, update, merge, or delete one.

Categories and Project memory

Categories keep memories organized and control which ones can be recalled. Give each category a useful name and a specific description, for example:

Deployment layout, service topology, DNS records, and hosting details. No secrets.

You can bind a category to a Project in the category manager at /memory; a Project-bound category is recalled only in that Project. Global categories are available in any Project, while outside a Project only global categories are eligible. A shared Project pool can be recalled by eligible members in that Project.

New memories are categorized in the background. Automatic categorization uses the utility model. An administrator sets it under Settings → Models → Model roles → Utility model; without one, new memories are not sorted automatically. If categorization fails or no category fits, the memory remains stored but is not recalled. In a Project, its category can be used when no other category fits. MemoryRecategorize processes your personal memories, not a shared Project pool.

With Auto-save on, the curator pass after each reply distills the exchange into durable facts, as described under Automatic saving. It runs in the background and does nothing when no utility model is configured.

Deleting a category does not delete its memories, but they become unrecallable until categorized again. Permanent deletion of memories cannot be undone.

Memory retention

Memories have a vitality score from 0 to 100. Recalling one increases its usage signal; unused memories decay according to importance. Every level decays and every level can eventually be moved to the trash; there is no permanent pin. The default half-lives for importance 1 to 10 are 1, 3, 7, 14, 21, 30, 45, 60, 90, and 180 days. Even level 10 crosses the default floor after about 418 days (roughly 14 months) without a single recall. A memory that was never recalled starts at 50, half of the full vitality, so at level 10 it takes about 2.3 half-lives to fall from 50 to the default floor of 10. The memory detail shows the date the memory becomes eligible, however far ahead.

Automatic retention is on by default. After a 14-day grace period, a daily cleanup moves memories below vitality 10 to the trash, at most 5 memories per account in any rolling 24 hours by default; the rest wait for a later sweep. The limit is counted from the audited automatic deletions, so restarting does not reset it. An administrator can change retention in Settings → <assistant name> AI → Memory retention: grace period 0–365 days, vitality floor 1–90, daily trash limit 1–200, and half-lives 0.1–365 days for each of the ten levels. Zero is not accepted for the floor or any half-life. The master switch pauses automatic removal entirely. Soft-deleted memories can be restored from the trash (restoring does not refresh vitality, so pause retention while correcting a mistake); permanent purge cannot be undone. In a shared Project pool, any member who can read a memory can purge it permanently, whoever wrote it.

Reindex and recategorize

If you change the embedding model, rebuild the memory index so search uses vectors from the new model. Open Memory maintenance in the Memory workspace. Its Rebuild the memory index row needs an embedding model. Its Reorganize memories row needs the utility model and offers Categorize memories without a category and Reorganize all memories, which asks for confirmation first. Jobs continue in the background, show progress and failure counts, and are private to your account. Details for individual failures are recorded in daemon logs. Starting a job that is already running returns that job instead of creating a duplicate.

You can also run MemoryRecategorize to categorize uncategorized memories. Use all: true only when you want to review existing category assignments too. Recategorization checks each memory before saving, so a manual category change made while it runs is not overwritten.

Embedding setup

An administrator configures the embedding provider and model under Settings → Models → Model roles, with the fields Embedding provider, Embedding model and Dimensions. The default is empty, so semantic memory search is unavailable until an embedding model is configured. A usable setup needs a model name and a configured provider. The provider must be an API-key provider, or a connected OAuth account whose model list marks the model as producing embeddings, such as an OpenRouter account whose list includes an embedding model. If the provider supports it, an optional vector dimension can also be set; leave it empty to use the model's default vector size.

The setup wizard can reuse an existing provider or configure OpenRouter:

elowen setup --memory reuse --embedding-model text-embedding-3-small

Other setup choices include --memory openrouter and --memory skip; --memory-key supplies the OpenRouter key, and --skip-test skips the agent smoke test. Run elowen doctor to check memory readiness.

Privacy and good memory hygiene

Do not store passwords, tokens, API keys, or other secrets. Explicit memory tools do not filter them.

  • Save one self-contained fact, not a conversation excerpt.
  • Keep the reason behind a decision, not only the choice.
  • Use MemoryUpdate when a fact changes and MemoryMerge for duplicates.
  • Verify files, settings, and external state before relying on a recalled fact.

Next: Usage & Costs