Agent Memory
Persistent semantic memory for individual agents. Store facts, decisions, and preferences with confidence decay and automatic relevance-based recall.
Available on All Plans
Agent Memory is available on all Snipara Agents plans starting at $15/month.
Overview
Agent Memory enables your AI agents to persist information across sessions. Unlike conversation history (which is ephemeral), memories are stored server-side and can be recalled semantically based on relevance to the current context.
Key Features
- Semantic Storage — Memories are embedded for similarity search
- Confidence Decay — Memories lose relevance over time unless reinforced
- Type Classification — Categorize as facts, preferences, decisions, etc.
- TTL Support — Set expiration times for temporary memories
- Metadata Filtering — Filter recalls by type, category, or custom tags
MCP Tools
rlm_remember
Store a new memory with optional metadata.
rlm_remember({ text: "User prefers dark mode in all applications", type: "preference", category: "ui", scope: "project", ttl_days: null // null = permanent})Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | Yes | The memory content to store (alias: content for backward compatibility) |
type | string | No | Classification: "fact", "decision", "learning", "preference", "todo", "context" |
category | string | No | Custom category for filtering (e.g., "auth", "ui") |
scope | string | No | Visibility: "agent", "project", "team", "user". Default "project" |
ttl_days | number | No | Time-to-live in days, null for permanent |
document_refs | string[] | No | Referenced document paths |
related_to | string[] | No | IDs of related memories |
rlm_remember_bulk
Store multiple memories in a single call for efficient batch operations.
rlm_remember_bulk({ memories: [ { text: "User prefers TypeScript", type: "preference" }, { text: "API uses JWT auth", type: "fact", category: "auth" }, { text: "Deploy to staging first", type: "decision", ttl_days: 30 } ]})Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
memories | array | Yes | Array of memory objects (max 50). Each object can have: text, type, category, scope, ttl_days |
Response
{ "stored": 3, "memory_ids": ["mem_abc", "mem_def", "mem_ghi"], "message": "Stored 3 memories"}Batch Efficiency
Use rlm_remember_bulk when storing 3+ memories at once. It uses batch embedding for faster processing and fewer API calls.
rlm_recall
Retrieve memories relevant to a query using semantic search.
rlm_recall({ query: "What are the user's UI preferences?", limit: 5, type: "preference", min_relevance: 0.5})Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Natural language query for semantic search |
limit | number | No | Maximum memories to return, default 10 |
type | string | No | Filter by memory type |
category | string | No | Filter by category |
min_relevance | number | No | Minimum relevance score (0-1), default 0.5 |
scope | string | No | Filter by scope: "agent", "project", "team", "user" |
Response
{ "memories": [ { "id": "mem_abc123", "content": "User prefers dark mode in all applications", "type": "preference", "category": "ui", "confidence": 0.92, "relevance": 0.87, "createdAt": "2025-01-20T10:30:00Z", "lastAccessedAt": "2025-01-23T14:15:00Z" } ], "total": 1}rlm_memories
List all memories with optional filters (no semantic search).
rlm_memories({ type: "decision", limit: 20, offset: 0})rlm_forget
Delete specific memories by ID or filter.
// Delete by IDrlm_forget({ memory_id: "mem_abc123" })// Delete all memories of a typerlm_forget({ type: "todo" })Confidence Decay
Memories naturally lose confidence over time unless they are accessed or reinforced. This prevents stale information from dominating recalls.
Confidence Decay Formulanew_confidence = base_confidence * (decay_rate ^ days_since_access)Example: 0.9 confidence, 0.98 decay rate, 7 days0.9 * (0.98 ^ 7) = 0.77Reinforcement
When a memory is accessed via rlm_recall, its confidence is boosted slightly. Storing the same content again also reinforces the memory.
Memory Types
| Type | Use Case | Example |
|---|---|---|
fact | Objective information | "The API uses OAuth 2.0 for authentication" |
preference | User preferences | "User prefers TypeScript over JavaScript" |
decision | Past decisions made | "Decided to use PostgreSQL instead of MySQL" |
learning | Lessons learned during work | "The API rate limits at 100 req/min" |
todo | Tasks and reminders | "Need to add error handling to checkout flow" |
context | Session context for continuity | "Completed auth module, next: API endpoints" |
Best Practices
Do
Store specific, actionable information that will be useful across sessions.
Don't
Store entire conversations or large code blocks — use Snipara Context for document storage.
Guidelines
- Be specific — "User prefers tabs over spaces" not "User has code style preferences"
- Use appropriate types — Helps with filtering and organization
- Set TTL for temporary info — Prevent memory bloat
- Let confidence decay work — Don't manually set confidence to 1.0
- Recall before storing — Check if similar memory exists to reinforce instead
Plan Limits
| Plan | Max Memories | Retention | Recall Rate |
|---|---|---|---|
| Starter | 1,000 | 7 days | 100/hour |
| Pro | 5,000 | 30 days | 500/hour |
| Team | 25,000 | 90 days | 2,000/hour |
| Enterprise | Unlimited | Unlimited | Unlimited |