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

ParameterTypeRequiredDescription
textstringYesThe memory content to store (alias: content for backward compatibility)
typestringNoClassification: "fact", "decision", "learning", "preference", "todo", "context"
categorystringNoCustom category for filtering (e.g., "auth", "ui")
scopestringNoVisibility: "agent", "project", "team", "user". Default "project"
ttl_daysnumberNoTime-to-live in days, null for permanent
document_refsstring[]NoReferenced document paths
related_tostring[]NoIDs 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

ParameterTypeRequiredDescription
memoriesarrayYesArray 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

ParameterTypeRequiredDescription
querystringYesNatural language query for semantic search
limitnumberNoMaximum memories to return, default 10
typestringNoFilter by memory type
categorystringNoFilter by category
min_relevancenumberNoMinimum relevance score (0-1), default 0.5
scopestringNoFilter 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 ID
rlm_forget({ memory_id: "mem_abc123" })
// Delete all memories of a type
rlm_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 Formula
new_confidence = base_confidence * (decay_rate ^ days_since_access)
Example: 0.9 confidence, 0.98 decay rate, 7 days
0.9 * (0.98 ^ 7) = 0.77

Reinforcement

When a memory is accessed via rlm_recall, its confidence is boosted slightly. Storing the same content again also reinforces the memory.

Memory Types

TypeUse CaseExample
factObjective information"The API uses OAuth 2.0 for authentication"
preferenceUser preferences"User prefers TypeScript over JavaScript"
decisionPast decisions made"Decided to use PostgreSQL instead of MySQL"
learningLessons learned during work"The API rate limits at 100 req/min"
todoTasks and reminders"Need to add error handling to checkout flow"
contextSession 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

PlanMax MemoriesRetentionRecall Rate
Starter1,0007 days100/hour
Pro5,00030 days500/hour
Team25,00090 days2,000/hour
EnterpriseUnlimitedUnlimitedUnlimited

Next Steps