Menu

Agent Memory

Persistent semantic memory for agents, with project, team, and repo scopes when the memory should outlive one session, one user, or one model. Store facts, decisions, and preferences with evidence links, lifecycle controls, and automatic relevance-based recall.

Packaging note

Included Memory comes with the Free account. Larger hosted memory capacity starts on the Pro memory pack. Check the current pricing page for the latest plan names and limits.

Verified with snipara-companion 3.2.1: Reviewable Memory Hygiene

Agent Memory now includes read-only hygiene diagnostics and reviewable cleanup candidates so teams can catch low-signal automation receipts, stale memories, duplicates, and active superseded categories before they pollute future recalls.

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. Unlike personal-memory tools alone, Snipara can keep the same reviewed memory at project, team, and repo scope so future agents inherit approved engineering context instead of rediscovering it.

Durable Memory

Reviewed decisions, learnings, preferences, and reusable facts that should influence future behavior across sessions.

Execution Memory

Runtime traces, checkpoints, files, commands, and session context used for resume, replay, and historical inspection. It is continuity state, not approved long-term memory.

The strongest coding-agent setups use both layers together: execution memory keeps the agent aligned with its workflow state and recent runtime trace, while reviewed memory prevents it from reopening settled engineering decisions.

When an agent needs that operational layer in one hosted fetch, use snipara_resume_context. It packages execution-memory with latest handoff, What Changed, active decisions, and an optional task-scoped work brief instead of exposing execution-memory alone.

Mem0 vs Snipara

If you only need personal or per-agent memory, Mem0 is the closer comparison. Snipara can also store agent and user-scoped memory, but its differentiator for coding teams is governed project, team, and repo memory with evidence, review, invalidation, and lifecycle control.

Mem0

Personal or agent memory

  • Best fit for one user, one agent, one assistant, or one personal workflow.
  • Good for preferences, habits, recurring instructions, and lightweight carryover.
  • Usually optimized for convenience, not repo governance or source authority.
  • Less suited to reviewed engineering memory shared across a team.

Snipara

Project, team, and repo memory

  • Built for shared engineering context across users, sessions, branches, and models.
  • Links memories back to evidence such as PRs, reviews, docs, chunks, and files.
  • Applies lifecycle controls like review, invalidation, supersession, and TTL.
  • Lets future agents recall approved repo truth instead of repeating old mistakes.

In short: Mem0 is usually where you keep what one agent or one user should remember. Snipara is where you keep what the project should keep teaching every future agent.

GitHub to Durable Recall

Coding-agent memory should not jump straight from a pull request to a permanent recall. Snipara treats GitHub as evidence first, then promotes selected repo truth into durable memory only after governance and lifecycle checks.

Step 01

GitHub

Pull requests, commits, reviews, Actions summaries, files, paths, and line references stay as source artifacts first.

Step 02

Evidence

Snipara preserves URLs, SHAs, authorship, paths, and risk context so the source can still be inspected later.

Step 03

Candidate Memory

Only selected repo facts become candidates, with confidence, suggested TTL, and scope metadata attached.

Step 04

Review

Policy or a human reviewer can approve, reject, invalidate, or supersede the candidate before it affects future recalls.

Step 05

Durable Recall

Approved memory becomes reusable project context that future agents can recall semantically with evidence still linked.

Memory Scope Policy

Choose the narrowest durable owner before writing memory. Raw specs, RFPs, diagrams, and client files stay in context; memory stores compact decisions, preferences, learnings, and reusable state.

Snipara stores agent memory on the reviewed memory model by default. Agent, project, team, and user scopes are owner boundaries, not labels: agent memories require an agent identifier, user memories stay personal to one authenticated or integrator-mapped user, team memories stay with the team, and project memories stay with the active project.

ScopeOwnerUse forRequired identifier
agentOne named agent or agent roleReusable behavior, checklists, and process learnings that should follow one agent.agent_id
projectOne project, client, mandate, or RFP/BID workspaceDurable decisions, assumptions, constraints, and validated learnings for one active project.projectId
teamA workspace or delivery teamReviewed standards, playbook rules, reusable lessons, and durable team preferences.teamId
userOne end user across projectsPersonal preferences and reusable working style for one person.external_user_id

Key Features

  • Semantic Storage — Memories are embedded for similarity search
  • Source-Linked Evidence — Attach docs, chunks, PRs, issues, and URLs to critical memories
  • Lifecycle Controls — Invalidate or supersede stale memories through hosted MCP or companion without losing history
  • Verification — Re-check whether a memory is still backed by valid evidence
  • Review Queue — Route automated memory writes to an inbox before recall
  • Transcript Import — Bootstrap durable memory from transcripts or notes
  • Automation-Safe Capture — Use novelty checks and task commits instead of raw note dumping
  • 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

Capture & Review Flow

Not every memory should become durable immediately. Snipara supports a reviewable workflow so teams can automate capture without polluting future recalls.

ModeWhat happens to automated writes
AUTOHigh-confidence project memories can be approved only when an explicit project policy permits it and records an approval receipt; automation-derived, low-confidence, and non-project scoped candidates still go to review.
INBOXAutomated sources such as commit hooks and transcript imports become PENDING until reviewed in the dashboard.

The dashboard memory page also supports Import Transcript, which previews durable candidates from a session transcript or retrospective and imports them into the review inbox.

For local human resolution, use snipara-companion Decision Requests: workflow decisions lists pending questions, workflow decide records the reviewer receipt, and memory reviews --emit-decisions turns hosted memory review candidates into the same review channel.

GitHub Evidence Memory

GitHub can become memory only through a governed path. Snipara first treats repository artifacts as evidence: issues, pull requests, review comments, commits, Actions summaries, and linked files keep their GitHub URLs, SHAs, paths, and line numbers where available.

The next layer proposes selected evidence as memory candidates. Those candidates keep source links, risk flags, confidence, and suggested TTLs. They are not durable recall material until policy or a reviewer approves them.

Before and After: one sourced memory prevents the wrong edit

The value is not abstract. A reviewed memory can stop an agent from repeating a stale repo assumption before it edits the wrong file or reopens a closed decision.

Before durable recall

The agent follows a stale assumption

  1. An agent receives a task to update auth policy enforcement and finds an older path like api/auth.ts.
  2. It assumes auth still lives there, patches the wrong layer, and duplicates middleware behavior.
  3. Tests fail later, or worse, the repo now has two competing auth paths to unwind.

After durable recall

The agent recalls reviewed repo truth first

Recalled memory

Decision: Auth middleware moved from api/auth.ts to core/security.ts.

Reason: Centralize policy checks and audit logging in one layer.

Evidence: PR #184, review thread, commit SHA, and file path preserved on the memory record.

  1. The agent recalls the approved memory before editing.
  2. It opens the correct file, updates the actual auth layer, and keeps the change scoped.
  3. It avoids a wrong edit because the memory is sourced, reviewed, and still active.

Safe wording

GitHub sync gives agents source-grounded repository context today. The reviewed-memory workflow promotes only selected GitHub evidence into reviewed memory, with policy checks, human review where needed, and source links preserved for later verification.

MCP Tools

snipara_remember

Store a new memory with optional metadata.

snipara_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

snipara_remember_if_novel

Store a memory only if it is sufficiently different from existing memories. This is the safest write path for automation and commit hooks.

snipara_remember_if_novel({
  text: "Use Vaultbrix SSH before rolling out Prisma-backed backend releases",
  type: "decision",
  category: "deploy",
  novelty_threshold: 0.92
})

Typical use: commit hooks, session summaries, and workflow automations that should skip near-duplicate memories.

snipara_remember_bulk

Store multiple memories in a single call for efficient batch operations.

snipara_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 snipara_remember_bulk when storing 3+ memories at once. It uses batch embedding for faster processing and fewer API calls.

snipara_end_of_task_commit

Persist durable outcomes from a task summary. This is the workflow-oriented memory entry point for automation and handoff flows.

snipara_end_of_task_commit({
  summary: "Completed the memory inbox UI and left deployment validation as the next step.",
  outcome: "partial",
  persist_types: ["decision", "learning", "workflow"],
  files_touched: ["apps/web/src/app/(dashboard)/dashboard/agents/memory/page.tsx"]
})

Use this when you want Snipara to extract only durable outcomes from a task summary instead of storing the raw narrative as-is.

snipara_recall

Retrieve memories relevant to a query using semantic search.

Use snipara_recall for durable decisions, learnings, preferences, and carryover. Do not use it as a substitute for source documents. For specs, PDFs, client files, and shared playbooks, start with Project Intelligence Inputs and use snipara_context_query or snipara_shared_context.

On projects where Outcome Loop recall reranking is enabled, recall may include an outcome_loop_rerank block and per-memory outcome_evidence. That ranking signal is based on sample-aware OutcomeStats posterior evidence, not raw Memory.evidenceScore. It is a gated memory recall treatment. Context/chunk retrieval uses a separate opt-in outcome rerank path backed by persisted OutcomeEvidenceStats for chunk targets, live fallback for missing stats, bounded boost-only movement, and a top-relevance exploration floor.

snipara_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",
      "status": "ACTIVE",
      "freshness": "fresh",
      "evidence_count": 2
    }
  ],
  "total": 1
}

Confidence values in recall responses are ranking and lifecycle signals, not calibrated advisor-grade probability claims.

snipara_memories

List all memories with optional filters (no semantic search).

snipara_memories({
  type: "decision",
  limit: 20,
  offset: 0
})

snipara_forget

Delete specific memories by ID or filter.

// Delete by ID
snipara_forget({ memory_id: "mem_abc123" })
// Delete all memories of a type
snipara_forget({ type: "todo" })

Memory Lifecycle Tools

Use reviewed memory lifecycle tools when you need memory that can be traced back to evidence and updated safely over time instead of being hard-deleted.

snipara_memory_attach_source

Attach evidence to a memory, such as a document chunk, PR, issue, commit, or URL.

snipara_memory_attach_source({
  memory_id: "mem_abc123",
  evidence_type: "CHUNK",
  chunk_id: "chunk_456",
  snippet: "OAuth callback validates state before token exchange",
  weight: 1.0
})

Use this for fact, decision, and learning memories that should stay grounded in project evidence.

snipara_get_chunk

Retrieve the full content for a referenced chunk when you need to inspect the exact source behind a memory or a query result.

snipara_get_chunk({
  chunk_id: "chunk_456"
})

snipara_memory_verify

Verify whether a memory still has valid supporting evidence.

snipara_memory_verify({
  memory_id: "mem_abc123",
  mark_stale_if_missing: true
})
{
  "memory_id": "mem_v2_abc123",
  "verified": true,
  "total_evidence": 2,
  "valid_evidence": 2,
  "invalid_evidence": 0,
  "evidence_score": 1.0,
  "status": "ACTIVE"
}

snipara_memory_invalidate

Mark a memory as invalid when it is no longer true. This preserves the audit trail better than deleting it outright.

snipara_memory_invalidate({
  memory_id: "mem_abc123",
  invalidated_at: "2026-04-10T14:30:00Z",
  reason: "Legacy OAuth flow replaced by PKCE-only flow"
})

snipara_memory_supersede

Replace an outdated memory with a newer one while keeping the relationship explicit.

snipara_memory_supersede({
  old_memory_id: "mem_old_auth",
  new_memory_id: "mem_new_auth",
  reason: "Authorization server configuration changed"
})

From a terminal workflow, the companion equivalents are snipara-companion memory invalidate <memory-id> and snipara-companion memory supersede <old-memory-id> <new-memory-id>. These commands call the hosted lifecycle tools and keep mutation separate from read-only hygiene commands such as memory audit and memory compact.

Recommended Pattern

For durable project knowledge: snipara_remember snipara_memory_attach_sourcesnipara_memory_verify. When reality changes, prefer snipara_memory_supersede or snipara_memory_invalidate over snipara_forget.

Memory Hygiene Tools

Memory hygiene tools help teams review active memory quality without deleting useful history. Use them before and after cleanup workflows, especially when automation writes memories on behalf of agents.

snipara_memory_health

Inspect active memory counts, top categories, compaction settings, and known hygiene anomalies. This tool is read-only.

snipara_memory_health({
  sample_limit: 5
})

Hygiene reasons include document upload receipts, trivial decomposition receipts, execution-plan receipts, and active categories that still contain :superseded.

snipara_memory_clean_candidates

Return a bounded review packet for cleanup. It groups candidates into noise, possible stale rows, duplicate groups, category anomalies, and memories that need human review.

snipara_memory_clean_candidates({
  limit_per_bucket: 10,
  include_low_confidence: false
})

This tool does not mutate memory. Follow up with snipara_memory_invalidate, snipara_memory_supersede, or snipara_memory_compact after reviewing the candidates.

snipara_memory_duplicate_candidates

Return duplicate and supersession candidates only, for workflows that do not need the full hygiene review packet.

snipara_memory_duplicate_candidates({
  limit: 20
})

Cleanup Safety

Prefer review-first cleanup: diagnose with snipara_memory_health, inspect candidates, then explicitly invalidate or supersede selected memory IDs. Avoid hard deletion unless you intentionally want to remove the audit trail.

Decision Log Tools

Use decision tools when a memory is not enough and you need a structured, ADR-style record with rationale, alternatives, and a supersession chain.

snipara_decision_create

Create a formal technical or architectural decision record.

snipara_decision_create({
  title: "Use Redis for background job deduplication",
  owner: "platform-team",
  scope: "backend",
  impact: "HIGH",
  context: "Workers need a shared dedupe layer across deploys",
  decision: "Adopt Redis SETNX-based deduplication",
  rationale: "Faster operational rollout than queue-layer rewrite",
  alternatives: ["Postgres advisory locks", "Kafka compaction"],
  tags: ["jobs", "reliability", "redis"]
})

snipara_decision_query

Search decisions by free text, scope, impact, status, or tags.

snipara_decision_query({
  query: "redis deduplication",
  scope: "backend",
  impact: "HIGH",
  include_superseded: false,
  limit: 10
})

snipara_decision_supersede

Replace an existing decision with a new one while preserving the evolution chain between both records.

snipara_decision_supersede({
  old_decision_id: "DEC-014",
  title: "Move job deduplication to queue middleware",
  owner: "platform-team",
  scope: "backend",
  impact: "HIGH",
  context: "Redis hot key pressure increased with traffic growth",
  decision: "Shift deduplication into queue middleware",
  rationale: "Reduces operational hotspots and centralizes policy"
})

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 snipara_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
  • Attach evidence for critical memories — Facts and decisions should be verifiable
  • Invalidate or supersede stale knowledge — Keep history instead of deleting everything
  • Let confidence decay work— Don't manually set confidence to 1.0
  • Recall before storing — Check if similar memory exists to reinforce instead

Current Packaging

PlanScopeCapacityNotes
FreeUser500 memories + 1 swarmIncluded Memory with Free account
ProUser5,000 memories + 5 swarmsNo Context requirement
TeamWorkspace25,000 memories + 20 swarmsRequires Context Team or Enterprise
EnterpriseWorkspaceUnlimited fair useRequires Context Enterprise

Next Steps