Skip to main content

Sovereign persistence for OpenClaw AI agents — encrypted memories on Nostr relays

Project description

sense-memory

Give your AI agent a memory.

Sovereign persistence for OpenClaw agents — encrypted memories stored on Nostr relays using the agent's own keypair. Nobody else can read them.

Why?

AI agents forget everything between conversations. Every tool that fixes this puts your agent's memories on someone else's server, behind someone else's API key.

sense-memory takes a different approach: your agent already has a cryptographic identity (via NostrKey). That identity can sign and encrypt Nostr events. So instead of storing memories in a database you manage, the agent writes encrypted notes to itself on a Nostr relay — the same way it would send a DM to another agent, except the recipient is itself.

The result: persistent memory that only the agent can read, stored on infrastructure that already exists, using a protocol that's open and sovereign.

How It Fits Together

sense-memory is part of the NSE sovereign identity ecosystem:

  • NostrKey gives the agent its identity — a Nostr keypair it owns
  • sense-memory uses that identity to encrypt and store memories on any relay
  • NostrCalendar uses the same identity for scheduling
  • NostrSocial uses it for the social graph
  • NSE Orchestrator wires all five pillars into a coherent whole

The agent's keypair is the thread that runs through everything. One identity, many capabilities — and now, persistent memory.

Install

pip install sense-memory

Quick Start

import asyncio, os
from nostrkey import Identity
from sense_memory import MemoryStore

async def main():
    identity = Identity.from_nsec(os.environ["NOSTR_NSEC"])
    store = MemoryStore(identity, "wss://relay.nostrkeep.com")

    # Remember something
    await store.remember("user_timezone", "America/Vancouver")

    # Recall it later
    memory = await store.recall("user_timezone")
    print(memory.value)  # "America/Vancouver"

    # Write a journal entry
    await store.journal("Had a great conversation about scheduling today")

    # Read recent journal
    entries = await store.recent(limit=5)
    for entry in entries:
        print(entry.content)

    # Forget a memory
    await store.forget("user_timezone")

asyncio.run(main())

How It Works

Mode Nostr Kind Behavior Use Case
Key-value 30078 (NIP-78) Replaceable by key Preferences, state, facts
Journal 4 (NIP-04 DM to self) Append-only Conversation logs, observations

Both modes encrypt content with NIP-44. Only the agent's keypair can decrypt. Any Nostr relay that supports these event kinds will work — no custom infrastructure needed.

API

Function Returns Description
remember(key, value) str Store or overwrite a memory. Returns event ID.
recall(key) Memory | None Retrieve a memory by key.
recall_all() list[Memory] Retrieve all stored memories.
forget(key) str Delete a memory (NIP-09). Returns event ID.
journal(content) str Write an append-only journal entry. Returns event ID.
recent(limit=20) list[JournalEntry] Retrieve recent journal entries.

NIPs Used

NIP Purpose
NIP-01 Basic event structure and relay protocol
NIP-04 DM to self (journal entries)
NIP-09 Event deletion (forget)
NIP-44 Encryption for all stored content
NIP-78 App-specific replaceable data (key-value memories)

OpenClaw Skill

sense-memory is published on ClawHub as the sense-memory skill. It's part of the huje.tools collection — open-source tools for the agentic age.

License

MIT — Humanjava Enterprises Inc.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sense_memory-0.1.0.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sense_memory-0.1.0-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file sense_memory-0.1.0.tar.gz.

File metadata

  • Download URL: sense_memory-0.1.0.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for sense_memory-0.1.0.tar.gz
Algorithm Hash digest
SHA256 236a471b7f47b8afeab48a6a936e7feb4c5fa13f41837c9b6f9c60d62e5b2bd1
MD5 d076625e2138679cd55815158df0bc1d
BLAKE2b-256 3a71c3d46cd01453c7bf0a22a723bca65131edf2bdbf416393c0b1edaa209002

See more details on using hashes here.

File details

Details for the file sense_memory-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sense_memory-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for sense_memory-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 db826f2626f4053831ad3095039da233bb156a5bdff0bd0aba43a27d220b0561
MD5 4edf66f77fc70c620a17a764875a08c3
BLAKE2b-256 14183952ccdc1d15bf6ead9c1128eb3535a22b8f95b5d5fdd15b15fdc62b6dcb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page