Skip to main content

totalreclaw

End-to-end encrypted memory + knowledge graph for AI agents.

Store, search, and recall memories across any AI agent with zero-knowledge encryption. Your data is encrypted on-device before it leaves -- the server never sees plaintext.

As of 2.4.6, the client uses Memory Taxonomy v1 (6 canonical types: claim | preference | directive | commitment | episode | summary) and Retrieval v2 Tier 1 source-weighted reranking (user-sourced facts rank higher than assistant-sourced facts on tied BM25 + cosine scores). See the memory types guide. Existing pre-v1 vault entries decrypt transparently.

Features

  • End-to-end encrypted -- XChaCha20-Poly1305 encryption, HKDF key derivation from a BIP-39 recovery phrase
  • Portable -- Same recovery phrase works across Hermes, OpenClaw, Claude Desktop, IronClaw, ZeroClaw
  • Memory Taxonomy v1 -- 6 speech-act types + required provenance (user | user-inferred | assistant | external | derived) and 8 life-domain scopes. v1 is the only write path (no env-var gating).
  • Retrieval v2 Tier 1 -- source-weighted reranking via totalreclaw-core@2.5.5 PyO3 bindings (user-sourced facts rank higher on tied scores)
  • G-pipeline extraction -- merged-topic prompt, provenance filter (lax), comparative rescoring, volatility heuristic
  • Local embeddings -- Harrier-OSS-v1-270M runs on-device (no API calls)
  • Hybrid search -- BM25 + cosine similarity + RRF reranking
  • LSH bucketing -- Locality-sensitive hashing for encrypted search
  • On-chain storage -- Managed service stores on Gnosis mainnet (single chain, all tiers) via ERC-4337; outer protobuf v4

Quick Start

pip install totalreclaw
import asyncio
from totalreclaw import TotalReclaw

async def main():
    client = TotalReclaw(
        recovery_phrase="your twelve word recovery phrase here",
        server_url="https://api.totalreclaw.xyz",  # default, can be omitted
    )

    # REQUIRED: resolve Smart Account address and register with relay
    await client.resolve_address()
    await client.register()

    # Store a memory — v1 taxonomy defaults: type="claim", source="user", scope="unspecified".
    # Importance is 1-10 (int) or 0-1 (float, auto-normalized).
    # v1 types: claim | preference | directive | commitment | episode | summary
    # scope, volatility, reasoning also accepted.
    fact_id = await client.remember(
        "Pedro prefers dark mode for all editors",
        fact_type="preference",
        scope="personal",
        importance=8,
    )

    # Search memories
    results = await client.recall("What does Pedro prefer?")
    for r in results:
        print(f"  [{r.rrf_score:.3f}] {r.text}")

    # Delete a memory
    await client.forget(fact_id)

    # Export all memories
    facts = await client.export_all()

    # Check billing
    status = await client.status()
    print(f"Tier: {status.tier}, Used: {status.free_writes_used}/{status.free_writes_limit}")

    await client.close()

asyncio.run(main())

Important: You must call resolve_address() and register() before any operations. resolve_address() derives the CREATE2 Smart Account address via an RPC call, and register() authenticates with the relay.

With Embeddings (Recommended)

For semantic search, install with embedding support:

pip install totalreclaw
from totalreclaw import TotalReclaw
from totalreclaw.embedding import get_embedding

client = TotalReclaw(recovery_phrase="...")

# Store with embedding for semantic search
text = "Pedro prefers dark mode"
embedding = get_embedding(text)
await client.remember(text, embedding=embedding)

# Search with embedding
query = "What are Pedro's UI preferences?"
query_emb = get_embedding(query)
results = await client.recall(query, query_embedding=query_emb)

The embedding model (~600 MB) downloads automatically on first use.

Hermes Agent Plugin

pip install totalreclaw[hermes]

The plugin registers automatically with Hermes Agent v0.5.0+. See the Hermes setup guide.

Architecture

Plaintext → XChaCha20-Poly1305 encrypt → Blind indices (SHA-256) → LSH buckets → On-chain via relay
                                                                              ↓
Query → Blind trapdoors → GraphQL search → Decrypt candidates → BM25+Cosine+RRF rerank → Top 8

All encryption happens client-side. The relay server and on-chain storage never see plaintext.

Cross-Language Parity

This Python client produces byte-for-byte identical outputs to the TypeScript implementation (@totalreclaw/mcp-server):

  • Key derivation (HKDF-SHA256)
  • XChaCha20-Poly1305 wire format (nonce || tag || ciphertext)
  • Blind indices (SHA-256 + Porter stemming)
  • Content fingerprints (HMAC-SHA256)
  • LSH bucket hashes (32-bit x 20 tables)

Memories stored by the Python client can be recalled by the MCP server, and vice versa.

Learn More

Changelog

The latest changes live in CHANGELOG-public.md — kept current there rather than duplicated in this README.

License

MIT

Download files

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

Source Distribution

totalreclaw-2.5.0.tar.gz (844.8 kB view details)

Uploaded Source

Built Distribution

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

totalreclaw-2.5.0-py3-none-any.whl (464.2 kB view details)

Uploaded Python 3

File details

Details for the file totalreclaw-2.5.0.tar.gz.

File metadata

  • Download URL: totalreclaw-2.5.0.tar.gz
  • Upload date:
  • Size: 844.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for totalreclaw-2.5.0.tar.gz
Algorithm Hash digest
SHA256 c03123e6f646cad84068fbeeccdd9258e57838cdb6481aa976f91bc2fb6d6319
MD5 e142fa33d82b6244b6e0a9c758396c85
BLAKE2b-256 addbe3ccaa783b12daffb981aeaa49a4bceb469a2d36d2c459706c0c03c37391

See more details on using hashes here.

File details

Details for the file totalreclaw-2.5.0-py3-none-any.whl.

File metadata

  • Download URL: totalreclaw-2.5.0-py3-none-any.whl
  • Upload date:
  • Size: 464.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for totalreclaw-2.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2a4e49dd68d26ef92c653588760f277082f81529a3fb42283a9589220445ea8d
MD5 814e49bf539d25ecf85c72002508460d
BLAKE2b-256 ece20821a3ff100b09de2b0b8183a09ffaf30f70b473ba74ddfbf809eefae1bd

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

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