Access Control

Control memory isolation and access using Mnemosyne's session and scope model.

Session-Based Isolation

Each Mnemosyne instance is identified by a session_id. Different sessions maintain separate memory contexts:

from mnemosyne import Mnemosyne

# Separate sessions with isolated memories
user_a_mem = Mnemosyne(session_id="user-alice")
user_b_mem = Mnemosyne(session_id="user-bob")

# Alice's memories are isolated from Bob's
user_a_mem.remember(content="Alice prefers dark mode", importance=0.5)
user_b_mem.remember(content="Bob prefers light mode", importance=0.5)

# Each user only recalls their own context
user_a_mem.recall("UI preferences")  # Returns Alice's preferences
user_b_mem.recall("UI preferences")  # Returns Bob's preferences

Scope-Based Access

Use the scope parameter on remember() to control visibility within a session:

from mnemosyne import Mnemosyne

mem = Mnemosyne(session_id="my-agent")

# Session-scoped (default) — only visible in this session
mem.remember(
  content="Current task: fixing bug #42",
  scope="session",
)

# Global — visible across all sessions sharing the same DB
mem.remember(
  content="Company style guide link: ...",
  scope="global",
)

Multi-Tenant Pattern

Isolate tenants by using separate databases:

from mnemosyne import Mnemosyne

# Each tenant gets their own database file
tenant_a = Mnemosyne(session_id="default", db_path="/data/tenant-a/memories.db")
tenant_b = Mnemosyne(session_id="default", db_path="/data/tenant-b/memories.db")

Filesystem Permissions

Since Mnemosyne stores data in local SQLite files, standard OS-level access controls apply:

  • Set restrictive file permissions on the database directory
  • Use dedicated OS users for different agent services
  • Place database files on encrypted filesystems if required
Local-Only by Default

Mnemosyne does not expose a network API by default. All access is via the Python SDK, which means access control is governed by your application code and OS-level permissions.