Memory tools
Selu provides built-in memory tools that agents can call without a capability container. They’re handled directly by the orchestrator and are subject to tool policy like any other tool.
There are three distinct memory concepts. Understanding the boundaries helps you write agent prompts and capability prompts that use memory correctly.
The three memory boundaries
Section titled “The three memory boundaries”| Concept | Tool(s) | Scope | Injected automatically? |
|---|---|---|---|
| User profile (“About you”) | — | All agents, all sessions | Yes — always |
| Shared notes | memory_remember, memory_search | All agents, one user | No — agent must search |
| Agent lessons | Managed by Selu automatically | One agent, one user | Yes — active lessons only |
User profile
Section titled “User profile”The user profile is edited by the user on the Personality page. It is injected into every agent’s context at the start of every turn. Agents cannot write to it directly.
Shared notes
Section titled “Shared notes”Shared notes are user-scoped and searchable. Any agent can save a note, and any agent can find it later. The saving agent is recorded as provenance but doesn’t affect access.
When to use shared notes:
- Persistent facts that are relevant across multiple agents (e.g. “user prefers metric units”, “user’s main email address”)
- Context that should survive beyond a single conversation
When not to use shared notes:
- One-off conversational details
- Temporary state (use
store_setinstead) - Secrets or credentials
Agent lessons
Section titled “Agent lessons”Lessons capture behavioral guidance for one specific agent. They’re generated automatically by Selu’s reflection process — agents don’t call a tool to create them. Active lessons are injected into the agent’s context automatically.
Tool reference
Section titled “Tool reference”memory_search
Section titled “memory_search”Search the user’s shared notes for relevant context.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | yes | Natural-language query describing the information you’re looking for |
Returns: A list of matching notes ranked by relevance.
When to call it: At the start of a turn when stable past context is likely relevant — for example, when the user asks about something they may have discussed before, or when you need to recall a preference or fact.
When not to call it: On every single turn regardless of relevance. Searching unnecessarily adds latency and noise.
# In your agent.md or capability prompt.md:# Use memory_search when the user's question likely relates to something# they've told you before — preferences, recurring topics, personal facts.# Don't search on every message; use judgment.memory_remember
Section titled “memory_remember”Save a note to the user’s shared notes.
| Parameter | Type | Required | Description |
|---|---|---|---|
content | string | yes | The fact or context to save, written in natural language |
Returns: Confirmation that the note was saved.
When to call it: When the user shares a durable, reusable fact — something that will be useful across future conversations or for other agents. Examples: a stated preference, a recurring goal, a stable personal fact.
When not to call it:
- For temporary or one-off information
- For secrets, passwords, or tokens
- For mutable state that changes frequently (use
store_setinstead) - For things the user didn’t explicitly share or that are obvious from the current turn only
set_reminder
Section titled “set_reminder”Schedule a one-shot reminder for the user at a specific future time.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | yes | What the agent should do or say when the reminder fires |
when | string | yes | Natural-language time expression (e.g. “tomorrow at 9am”, “in 20 minutes”, “next Friday morning”) |
Returns: Confirmation with the parsed fire time.
When to call it: When the user asks to be reminded of something during conversation. Prefer calling set_reminder directly over telling the user to use the /remind command.
Default tool policy: Allow
# If the user says "remind me to check on the deployment in two hours",# call set_reminder with:# prompt = "Check on the deployment status"# when = "in two hours"# Don't tell the user to use /remind — just handle it.Lesson lifecycle
Section titled “Lesson lifecycle”Lessons aren’t created by tool calls — they emerge from Selu’s reflection process after conversations.
Here’s how it works:
- After a conversation, Selu runs a single five-turn reflection on the interaction.
- If the reflection identifies a behavioral pattern, it creates a lesson candidate with an observation.
- Lessons with at least two supporting observations and a confidence of 0.85 or higher activate automatically.
- Up to ten active lessons can be in effect for one agent at a time.
- Lessons below the confidence threshold appear as suggestions the user can activate manually.
Users can activate, pause, or remove lessons from the agent’s detail page.
Tool policies
Section titled “Tool policies”All memory tools are subject to tool policy and appear in the agent’s Permissions page. Default policies:
| Tool | Default policy |
|---|---|
memory_search | Allow |
memory_remember | Allow |
set_reminder | Allow |
Users can change these to Ask (require approval before each call) or Block (prevent the tool from running).