
Security News
RubyGems Adds Cooldown Feature to Bundler for Newly Published Gems
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.
@totalreclaw/totalreclaw
Advanced tools
End-to-end encrypted, agent-portable memory for OpenClaw and any LLM-agent runtime. XChaCha20-Poly1305 with protobuf v4 + on-chain Memory Taxonomy v1 (claim / preference / directive / commitment / episode / summary).
End-to-end encrypted memory + knowledge graph for AI agents -- portable, yours forever.
Your AI remembers everything. Your server sees nothing.
TotalReclaw gives any OpenClaw agent persistent, encrypted long-term memory. Preferences, decisions, commitments, rules, and context carry across every conversation -- fully end-to-end encrypted so the server never sees plaintext.
v3.0.0 ships Memory Taxonomy v1: every memory is typed (claim / preference / directive / commitment / episode / summary) and tagged with source, scope, and volatility. Recall uses source-weighted reranking so user-authored claims consistently rank above assistant-regurgitated noise. See docs/guides/memory-types-guide.md.
Tell your OpenClaw agent:
"Install the TotalReclaw skill from ClawHub"
Or via terminal:
openclaw skills install totalreclaw
Then set one environment variable:
export TOTALRECLAW_RECOVERY_PHRASE="your twelve word recovery phrase here"
That's it. TotalReclaw hooks into your agent automatically. The server URL defaults to https://api.totalreclaw.xyz (managed service) -- only set TOTALRECLAW_SERVER_URL if you are self-hosting. See the env vars reference for the full (short) list.
openclaw plugins install @totalreclaw/totalreclaw
Most AI memory solutions force a tradeoff: good recall OR privacy. TotalReclaw eliminates that tradeoff.
| Recall@8 | Privacy | Encryption | Portable Export | |
|---|---|---|---|---|
| TotalReclaw (E2EE) | 98.1% | 100% | XChaCha20-Poly1305 | Yes |
| Plaintext vector search | 99.2% | 0% | None | Varies |
| Mem0 (hosted) | ~95% | 0% | At-rest only | No |
| Native OpenClaw QMD | ~90% | 50% | Partial | No |
98.1% recall with 100% privacy -- tested against 8,727 real-world memories. The server never sees your data, yet search quality is within 1.1% of plaintext alternatives.
Tell your OpenClaw agent:
"Install the TotalReclaw skill from ClawHub"
Or via terminal:
openclaw skills install totalreclaw
Alternative (npm):
openclaw plugins install @totalreclaw/totalreclaw
You have three ways to set up TotalReclaw, depending on where your OpenClaw gateway runs.
Local gateway (laptop / workstation): run the CLI wizard on the same machine:
openclaw totalreclaw onboard
The wizard generates or accepts a 12-word BIP-39 TotalReclaw account key directly on your terminal. The phrase never touches the LLM, the chat transcript, or the network -- it's written straight to ~/.totalreclaw/credentials.json (mode 0600).
Remote gateway (VPS, home server, shared / team): use QR-pairing (new in v3.3.0).
On the gateway host:
openclaw totalreclaw pair # generate a new account key
openclaw totalreclaw pair import # import an existing TotalReclaw key
You'll see a QR code, a 6-digit secondary code, and a URL. Scan the QR with your phone's camera or open the URL on any modern browser. The browser page:
The phrase never enters the LLM, the chat transcript, or the relay server in plaintext. The pairing URL embeds the gateway's ephemeral public key in the URL fragment -- this is TLS-MITM resistant and invisible to any server on the path. See CHANGELOG.md §3.3.0 for the full threat model.
Browser support: Safari 17+, Chrome 123+, Firefox 130+ (these ship WebCrypto x25519 + ChaCha20-Poly1305).
Legacy / self-hosted: set the env var directly (useful for containers / CI):
export TOTALRECLAW_RECOVERY_PHRASE="your twelve word recovery phrase here"
That's it. v1 is the default extraction and write path. Extraction cadence, importance floor, candidate pool size, and dedup thresholds are all server-tuned via the relay's billing response -- no client env vars to set. See env vars reference.
For self-hosted relays:
export TOTALRECLAW_SERVER_URL="http://your-totalreclaw-server:8080"
export TOTALRECLAW_SELF_HOSTED=true
Once installed, TotalReclaw hooks into your agent lifecycle automatically. No code changes needed.
Your agent will:
before_agent_start)agent_end)pre_compaction)You can also use the tools directly in conversation:
"Remember that I prefer dark mode in all editors"
"What do you know about my programming preferences?"
"Forget the memory about my old email address"
"Export all my memories as JSON"
The plugin exposes these tools to your OpenClaw agent. Most invocations happen via natural language -- the agent picks the right tool from context.
Explicitly store a memory. Accepts v1 taxonomy fields.
const result = await skill.remember({
text: 'User prefers dark mode',
type: 'preference', // v1 types: claim, preference, directive, commitment, episode, summary
source: 'user', // v1 sources: user, user-inferred, assistant, external, derived
scope: 'personal', // v1 scopes: work, personal, health, family, creative, finance, misc, unspecified
importance: 7, // 1-10 (see importance rubric)
});
console.log(result); // "Memory stored successfully with ID: fact-123"
Search for relevant memories.
const memories = await skill.recall({
query: 'programming language preferences',
k: 5, // optional: number of results (default: 8, max: 20)
});
// Each memory has:
// - fact: The fact object with text, metadata, etc.
// - score: Combined relevance score
// - vectorScore: Vector similarity score
// - textScore: BM25 text score
// - decayAdjustedScore: Score adjusted for decay
Delete a specific memory.
await skill.forget({
factId: 'fact-123',
});
Export all memories for portability.
const jsonExport = await skill.export({
format: 'json', // or 'markdown'
});
console.log(jsonExport);
TotalReclaw integrates with OpenClaw through three lifecycle hooks:
| Hook | Priority | Description |
|---|---|---|
before_agent_start | 10 | Retrieve relevant memories before agent processes message |
agent_end | 90 | Extract and store facts after agent completes turn |
pre_compaction | 5 | Full memory flush before context compaction |
Runs before the agent processes a user message. Retrieves relevant memories and formats them for context injection.
const result = await skill.onBeforeAgentStart(context);
// result.memories - Array of retrieved memories
// result.contextString - Formatted string for injection
// result.latencyMs - Search latency in milliseconds
Runs after the agent completes its turn. Extracts facts from the conversation and stores them.
const result = await skill.onAgentEnd(context);
// result.factsExtracted - Number of facts extracted
// result.factsStored - Number of facts stored
// result.processingTimeMs - Processing time
Runs before conversation history is compacted. Performs comprehensive extraction of the full history.
const result = await skill.onPreCompaction(context);
// result.factsExtracted - Number of facts extracted
// result.factsStored - Number of facts stored
// result.duplicatesSkipped - Duplicates skipped
// result.processingTimeMs - Processing time
See docs/guides/env-vars-reference.md
for the complete, authoritative list. The v1-launch cleanup reduced the
user-facing surface to 5 vars plus LLM provider keys. The short version:
| Variable | Required | Default | Description |
|---|---|---|---|
TOTALRECLAW_RECOVERY_PHRASE | Yes | -- | 12-word BIP-39 recovery phrase (never sent to server) |
TOTALRECLAW_SERVER_URL | No | https://api.totalreclaw.xyz | Relay URL (override for self-hosted / staging) |
TOTALRECLAW_SELF_HOSTED | No | false | Set true if running against a self-hosted PostgreSQL server |
TOTALRECLAW_CREDENTIALS_PATH | No | ~/.totalreclaw/credentials.json | Credential file location |
TOTALRECLAW_CACHE_PATH | No | ~/.totalreclaw/cache.enc | Encrypted cache file location |
Tuning knobs (extraction interval, importance threshold, cosine thresholds) now come from the relay billing response. Self-hosted operators can still set the env-var equivalents as fallbacks — see the env vars reference.
Configuration is loaded from multiple sources. Higher priority overrides lower:
agents.defaults.totalreclaw.*TOTALRECLAW_*Add to your OpenClaw configuration file:
{
"agents": {
"defaults": {
"totalreclaw": {
"serverUrl": "http://your-server:8080",
"autoExtractEveryTurns": 3,
"minImportanceForAutoStore": 6,
"maxMemoriesInContext": 8,
"forgetThreshold": 0.3
}
}
}
}
TotalReclaw categorizes memories into five types:
| Type | Description | Example |
|---|---|---|
fact | Objective information | "User works at Acme Corp" |
preference | User likes/dislikes | "User prefers dark mode" |
decision | Choices made | "User decided to use PostgreSQL" |
episodic | Events and experiences | "User attended PyCon 2024" |
goal | Objectives and targets | "User wants to learn Rust" |
Memories are scored on a 1-10 scale:
| Score | Level | Description |
|---|---|---|
| 1-3 | Trivial | Small talk, pleasantries |
| 4-6 | Useful | Tool preferences, working style |
| 7-8 | Important | Key decisions, major preferences |
| 9-10 | Critical | Core values, safety info |
All cryptographic operations are powered by @totalreclaw/core -- a unified Rust/WASM module that ensures byte-for-byte consistency across all TotalReclaw clients.
TotalReclaw uses end-to-end encryption:
The server is cryptographically unable to read your memories, embeddings, or search queries.
| Metric | Target |
|---|---|
| Search latency (p95) | < 140ms for 1M memories |
| Recall accuracy | >= 93% of true top-250 |
| Storage overhead | <= 2.2x vs plaintext |
| Extraction latency | < 500ms |
+-------------------+ +-------------------+ +-------------------+
| OpenClaw Agent | | TotalReclaw Skill | | TotalReclaw Server |
+-------------------+ +-------------------+ +-------------------+
| | |
| onBeforeAgentStart() | |
|------------------------>| recall() |
| |------------------------>|
| |<------------------------|
|<------------------------| |
| | |
| [Agent processes] | |
| | |
| onAgentEnd() | |
|------------------------>| extract + store() |
| |------------------------>|
|<------------------------| |
Call await skill.init() before using any methods.
The reranker model is optional. If not found, vector scores are used as fallback.
The fact ID may be incorrect, or the memory may have been evicted due to decay.
maxMemoriesInContext for better recallgit clone https://github.com/p-diogo/totalreclaw
cd totalreclaw/skill
npm install
npm run build
npm test
# With coverage
npm test -- --coverage
# Watch mode
npm run test:watch
npm run lint
git checkout -b feature/my-featuregit commit -am 'Add my feature'git push origin feature/my-featureMIT License - see LICENSE for details.
FAQs
End-to-end encrypted, agent-portable memory for OpenClaw and any LLM-agent runtime. XChaCha20-Poly1305 with protobuf v4 + on-chain Memory Taxonomy v1 (claim / preference / directive / commitment / episode / summary).
We found that @totalreclaw/totalreclaw demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.

Security News
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.

Security News
Federal audit finds NIST lacked a plan to clear the NVD backlog, wasted funds on duplicate work, and delayed use of CISA data.