@totalreclaw/totalreclaw 3.3.12-rc.6 → 3.3.12-rc.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +28 -272
- package/auto-pair-on-load.ts +308 -0
- package/claims-helper.ts +5 -0
- package/dist/auto-pair-on-load.js +197 -0
- package/dist/claims-helper.js +5 -0
- package/dist/extractor.js +134 -0
- package/dist/fs-helpers.js +117 -0
- package/dist/import-adapters/chatgpt-adapter.js +14 -0
- package/dist/import-adapters/claude-adapter.js +14 -0
- package/dist/import-adapters/gemini-adapter.js +14 -0
- package/dist/import-adapters/mcp-memory-adapter.js +14 -0
- package/dist/import-state-manager.js +100 -0
- package/dist/index.js +376 -40
- package/dist/onboarding-cli.js +6 -1
- package/dist/pair-cli-relay.js +8 -1
- package/dist/pair-pending-injection.js +125 -0
- package/dist/tr-cli.js +1 -1
- package/extractor.ts +167 -0
- package/fs-helpers.ts +175 -0
- package/import-adapters/chatgpt-adapter.ts +18 -0
- package/import-adapters/claude-adapter.ts +18 -0
- package/import-adapters/gemini-adapter.ts +18 -0
- package/import-adapters/mcp-memory-adapter.ts +18 -0
- package/import-state-manager.ts +139 -0
- package/index.ts +433 -40
- package/onboarding-cli.ts +7 -0
- package/package.json +3 -3
- package/pair-cli-relay.ts +9 -0
- package/pair-pending-injection.ts +205 -0
- package/skill.json +1 -1
- package/tr-cli.ts +1 -1
package/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: totalreclaw
|
|
3
3
|
description: "End-to-end encrypted, decentralized memory for OpenClaw. Set up an account once, then call totalreclaw_remember / totalreclaw_recall (or the tr CLI under hybrid-primary) instead of writing to MEMORY.md / USER.md / local files. Trigger on 'install TotalReclaw', 'set up TotalReclaw', 'restore my recovery phrase', any remember / recall request, AND any user statement that contains a preference / fact / decision / commitment about themselves."
|
|
4
|
-
version: 3.3.12-rc.
|
|
4
|
+
version: 3.3.12-rc.7
|
|
5
5
|
author: TotalReclaw Team
|
|
6
6
|
license: MIT
|
|
7
7
|
homepage: https://totalreclaw.xyz
|
|
@@ -22,299 +22,55 @@ metadata:
|
|
|
22
22
|
- persistent-context
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
-
# TotalReclaw — OpenClaw
|
|
25
|
+
# TotalReclaw — OpenClaw plugin
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
>
|
|
29
|
-
> **Human-readable setup guide**: <https://github.com/p-diogo/totalreclaw/blob/main/docs/guides/openclaw-setup.md>
|
|
27
|
+
End-to-end encrypted memory stored across a decentralized network (not on a single company server). The plugin handles install + account-setup autonomously; this skill tells the agent what to call and when.
|
|
30
28
|
|
|
31
|
-
## TOP RULE — MEMORY STORAGE
|
|
29
|
+
## TOP RULE — MEMORY STORAGE
|
|
32
30
|
|
|
33
|
-
|
|
31
|
+
When the user states ANYTHING about themselves — preferences, decisions, identity, work, location, plans, tools, commitments — call `totalreclaw_remember` (or `tr remember --json "<fact>"` under hybrid-primary). NEVER write user facts to `MEMORY.md`, `USER.md`, or any local file. Those are agent-persona configuration; user memories live encrypted on-chain.
|
|
34
32
|
|
|
35
|
-
|
|
33
|
+
**Trigger immediately, no "should I?":** "I prefer / like / love / hate X", "my favorite is X", "I'm X", "my name is X", "I live / work at X", "I use X", "I decided X", "I'm going to X", "from now on X", "we agreed X", "I'll X by Y", "remind me to X", "remember that X", "save X", "note X". If a message contains MULTIPLE facts, call `totalreclaw_remember` once per fact — never blob.
|
|
36
34
|
|
|
37
|
-
|
|
35
|
+
When the user asks about themselves ("what's my X?", "do I X?", "what do you remember?"), call `totalreclaw_recall` FIRST. If 0 results, say so plainly — don't guess from session history.
|
|
38
36
|
|
|
39
|
-
-
|
|
40
|
-
- ❌ DO NOT `Write` to `MEMORY.md`.
|
|
41
|
-
- ❌ DO NOT `Edit` `USER.md` to append a user fact.
|
|
42
|
-
- ❌ DO NOT echo "saving this to MEMORY.md…" — that file is not yours to write to.
|
|
37
|
+
Do not describe storage as `"local"`, `"local-only"`, `"stored locally"`, `"on disk"`, `"local memory"`, `"local storage"`, or `"without an account"` — memories are decentralized on-chain (not on any single company server) and an account is required to derive the encryption key.
|
|
43
38
|
|
|
44
|
-
|
|
39
|
+
## Phrase safety (HARD)
|
|
45
40
|
|
|
46
|
-
|
|
41
|
+
The 12-word recovery phrase MUST NEVER enter chat or the agent's LLM context. The plugin's browser-based pair flow handles phrase generation and import. Never echo it, never ask the user to paste it, never pass it to any tool. If the user pastes one anyway, tell them it's compromised and re-pair for a fresh wallet.
|
|
47
42
|
|
|
48
|
-
|
|
49
|
-
- **Identity**: "I'm a X", "I am X", "my name is X", "I'm based in X", "I live in X", "I work at X", "I work on X", "I have X"
|
|
50
|
-
- **Tools / setup**: "I use X", "I'm running X", "my X is Y", "I've configured X to Y"
|
|
51
|
-
- **Decisions / plans**: "I decided to X", "I'm going to X", "I'm planning X", "we agreed X", "we settled on X", "let's call this X", "from now on X"
|
|
52
|
-
- **Commitments**: "I'll X by Y", "remind me to X", "I need to X by Y", "don't forget X"
|
|
53
|
-
- **Explicit asks**: "remember that X", "save X", "note that X", "store X", "make a note of X"
|
|
54
|
-
- **Possessive assertions**: "my [anything] is [value]" (preference assertion pattern)
|
|
55
|
-
- **Any 1st-person factual claim worth retaining** about identity, work, location, tools, preferences, ongoing projects, contacts, schedule.
|
|
43
|
+
## Install
|
|
56
44
|
|
|
57
|
-
If a single user message contains MULTIPLE such facts (e.g. "I'm Pedro. I live in Porto. I prefer PostgreSQL over MySQL."), call `totalreclaw_remember` MULTIPLE TIMES — once per atomic fact. Don't blob multiple unrelated facts into a single memory.
|
|
58
|
-
|
|
59
|
-
### When to call `totalreclaw_recall`
|
|
60
|
-
|
|
61
|
-
**ALWAYS call `totalreclaw_recall` first when the user asks about themselves, their preferences, or anything from past conversations.** Trigger phrases:
|
|
62
|
-
|
|
63
|
-
- "what's my X?", "do I X?", "where do I X?", "when did I X?", "have I told you X?"
|
|
64
|
-
- "what do you remember about me?", "what do you know about my X?"
|
|
65
|
-
- "remind me about X", "what did we decide about X?"
|
|
66
|
-
- "do you remember when X?"
|
|
67
|
-
|
|
68
|
-
Recall first, then answer from the returned facts. If 0 results come back, say so plainly — do not guess from session history.
|
|
69
|
-
|
|
70
|
-
## CRITICAL: How TotalReclaw actually stores memories
|
|
71
|
-
|
|
72
|
-
**TotalReclaw is end-to-end encrypted memory stored across a DECENTRALIZED NETWORK — not on a single company server.** Memories are encrypted with keys derived from the user's 12-word recovery phrase, submitted as Account Abstraction UserOps, and persisted on a public blockchain (Base / Gnosis depending on tier). The Graph subgraph indexes them. The TotalReclaw relay only forwards encrypted bundles to the bundler and proxies subgraph reads — it never sees plaintext, can't read memories, and could be replaced by any compatible relay without losing data. No single company controls or can read user memories.
|
|
73
|
-
|
|
74
|
-
Forbidden vocabulary — these claims are WRONG:
|
|
75
|
-
- "local", "local-only", "stored locally", "on disk", "local memory", "local storage" — wrong direction (implies local-only).
|
|
76
|
-
- "stored on a relay server", "stored on TotalReclaw's server", "single server owned by", "TotalReclaw stores your", "company server" — wrong direction (implies centralized custody).
|
|
77
|
-
- "without an account" — wrong (an account is required to derive the encryption key).
|
|
78
|
-
|
|
79
|
-
Canonical line: **"Memories are encrypted with a key derived from your recovery phrase, submitted on-chain via Account Abstraction, and stored across a decentralized network. The relay only forwards encrypted bundles — it never sees plaintext. Only you can decrypt them, and only with your recovery phrase."**
|
|
80
|
-
|
|
81
|
-
## User-facing vocabulary
|
|
82
|
-
|
|
83
|
-
| Internal term | Say to the user |
|
|
84
|
-
|---|---|
|
|
85
|
-
| pair / pairing / paired account | "set up an account" / "your TotalReclaw account" |
|
|
86
|
-
| relay / relay server | (don't mention; if forced, say "the encrypted-bundle forwarder") |
|
|
87
|
-
| WS / WebSocket / handshake | (don't mention) |
|
|
88
|
-
| trapdoor / blind index / dedup-key | (don't mention) |
|
|
89
|
-
| subgraph / bundler / UserOp / Account Abstraction | (don't mention; if forced, "submitted on-chain to a decentralized network") |
|
|
90
|
-
| credentials.json / mnemonic file | "your recovery phrase" |
|
|
91
|
-
| `tr pair --json` / `setsid -f` / shell exec | (don't mention; just do the work silently) |
|
|
92
|
-
|
|
93
|
-
The word "pair" is internal jargon — never use it in user-visible prose. Use "set up an account", "your account", "your recovery phrase", "your memories".
|
|
94
|
-
|
|
95
|
-
## Install / setup top-level rule
|
|
96
|
-
|
|
97
|
-
**Emit ONLY the user-visible lines listed below. Do not narrate tool calls. Do not describe what you're doing or about to do.** Errors are the only allowed deviation, and only as a single tight line. The expected user-facing transcript for a healthy install is **4–5 short lines TOTAL**.
|
|
98
|
-
|
|
99
|
-
### ⚡ MANDATORY ACK BEFORE FIRST TOOL CALL
|
|
100
|
-
|
|
101
|
-
**User-visible line 1 MUST be your FIRST output — emitted BEFORE you run any shell tool, plugin install, or `tr` command.** Install + setup takes 1–2 minutes of silent tool-execution; without an immediate ack the user assumes the request didn't register and may resend or abandon.
|
|
102
|
-
|
|
103
|
-
The ack is unconditional. Send line 1, THEN start the work.
|
|
104
|
-
|
|
105
|
-
Forbidden order (silent-then-narrate): ❌ run `openclaw plugins install` → wait 60s → emit line 1.
|
|
106
|
-
Required order (ack-then-work): ✅ emit line 1 → run `openclaw plugins install` silently → emit line 2 when `tr status` returns.
|
|
107
|
-
|
|
108
|
-
## ⛔ FORBIDDEN ACTIONS
|
|
109
|
-
|
|
110
|
-
These specific actions break the install / pair flow:
|
|
111
|
-
|
|
112
|
-
1. **Do NOT restart the gateway.** No `kill -USR1`, no `docker restart`, no `openclaw gateway restart`. The plugin self-patches and signals its own restart needs (SIGUSR1 in-process, automatic). You restarting it kills the in-flight `setsid -f` pair subprocess → 502 on browser respond. If for some specific reason a restart IS required, issue the literal slash command `/totalreclaw-restart` — nothing else. **NEVER prompt the user to manually restart anything**; the plugin handles its own restart.
|
|
113
|
-
|
|
114
|
-
2. **Do NOT write to `~/.openclaw/openclaw.json`.** The plugin's `patchOpenClawConfig()` already wrote the required keys. Any further write triggers a deferred SIGUSR1 reload that kills pair. No `openclaw config set …`, no `jq …>openclaw.json`, no `sed -i openclaw.json`.
|
|
115
|
-
|
|
116
|
-
3. **Do NOT save QR PNGs.** `tr pair --json` returns `qr_ascii` — emit that inline in a triple-backticked code block. No `/tmp/totalreclaw-pair-qr.png` (OpenClaw media-policy blocks it: `LocalMediaAccessError`). No PNG decode.
|
|
117
|
-
|
|
118
|
-
4. **`tr pair --json` MUST run via `setsid -f`** (exact form below). Foreground invocation is killed when your shell-tool exec returns → 502.
|
|
119
|
-
|
|
120
|
-
5. **Do NOT pass `--allow-dangerous` to any TotalReclaw command.** The plugin is sandboxed by design.
|
|
121
|
-
|
|
122
|
-
6. **Do NOT manually edit `~/.totalreclaw/credentials.json`.** Round-trip via `tr pair --json` (re-generate) instead.
|
|
123
|
-
|
|
124
|
-
7. **Do NOT install the legacy from-source path alongside the published plugin.** The two paths overlap and will double-write facts.
|
|
125
|
-
|
|
126
|
-
## Hybrid-primary architecture (3.3.9-rc.1)
|
|
127
|
-
|
|
128
|
-
OpenClaw 2026.5.2 has a tool-policy-pipeline bug (issue #223) that strips non-bundled plugin tools before they reach the agent toolset. **3.3.9-rc.1 makes the `tr` CLI the PRIMARY path for all memory operations.** Native tools (`totalreclaw_*`) are kept for back-compat with older OpenClaw versions where they work, but the agent MUST NOT depend on them. Use `tr` from your shell tool for everything.
|
|
129
|
-
|
|
130
|
-
**The `tr` binary is installed at one of two paths depending on OpenClaw version:**
|
|
131
|
-
- Modern (2026.5.x npm-managed): `~/.openclaw/npm/node_modules/@totalreclaw/totalreclaw/dist/tr-cli.js`
|
|
132
|
-
- Legacy (extensions tree): `~/.openclaw/extensions/totalreclaw/dist/tr-cli.js`
|
|
133
|
-
|
|
134
|
-
**Resolve the path once at the top of your shell session and reuse:**
|
|
135
|
-
```bash
|
|
136
|
-
TR_CLI="$(ls -d ~/.openclaw/npm/node_modules/@totalreclaw/totalreclaw/dist/tr-cli.js ~/.openclaw/extensions/totalreclaw/dist/tr-cli.js 2>/dev/null | head -1)"
|
|
137
45
|
```
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
## User-visible line set (THIS IS ALL YOU SAY)
|
|
143
|
-
|
|
144
|
-
Speak only these lines, in order. Substitute the bracketed placeholders with the real values. No prefaces. No suffixes. No narration.
|
|
145
|
-
|
|
146
|
-
1. (FIRST output, emitted BEFORE any shell tool call — see "MANDATORY ACK" rule above)
|
|
147
|
-
> Setting up TotalReclaw — this takes about a minute…
|
|
148
|
-
2. (after install + CLI verify — `tr status` works)
|
|
149
|
-
> ✓ Installed (totalreclaw <version>, hybrid mode)
|
|
150
|
-
3. (account-setup URL + PIN, IMMEDIATELY after `tr pair --json` returns — no consent gate)
|
|
151
|
-
> Open <url> in your browser. Enter PIN <pin>. Generate or paste a 12-word recovery phrase. Reply `done` once it's sealed.
|
|
152
|
-
4. (done + free-tier confirmation)
|
|
153
|
-
> ✓ You're set up on the TotalReclaw free tier — 500 memories/month, unlimited reads. https://totalreclaw.xyz/pricing. Ask me to remember anything.
|
|
154
|
-
|
|
155
|
-
If existing credentials are detected, emit ONLY this line and stop:
|
|
156
|
-
> ✓ TotalReclaw is already set up.
|
|
157
|
-
|
|
158
|
-
### Hard silence rules between numbered lines
|
|
159
|
-
|
|
160
|
-
Do NOT emit transitional / narrative lines between any of the four user-visible lines above. Specifically forbidden:
|
|
161
|
-
|
|
162
|
-
- ❌ "Now let me verify the install:" → silent. Just run `tr status --json`.
|
|
163
|
-
- ❌ "Now let me check if you already have credentials:" → silent.
|
|
164
|
-
- ❌ "Need to pair. Let me kick that off:" → silent.
|
|
165
|
-
- ❌ "Standing by." → silent.
|
|
166
|
-
- ❌ Any "Let me X" / "Now I'll Y" / "Just give me a second" prelude.
|
|
167
|
-
- ❌ **Skipping line 1 entirely and going straight to shell tool calls.**
|
|
168
|
-
|
|
169
|
-
## Setup flow (hybrid-primary)
|
|
170
|
-
|
|
171
|
-
1. **Install plugin first, skill second.** Run via your shell tool, in this exact order:
|
|
172
|
-
```
|
|
173
|
-
openclaw plugins install @totalreclaw/totalreclaw
|
|
174
|
-
openclaw skills install totalreclaw
|
|
175
|
-
```
|
|
176
|
-
For RC: replace the first command with `openclaw plugins install @totalreclaw/totalreclaw@rc`. Plugin BEFORE skill is deliberate.
|
|
177
|
-
|
|
178
|
-
If either shell call fails with `command not found` / ENOENT / "not authorized" (managed-service or shell-restricted environment), tell the user verbatim: *"Your environment doesn't expose the OpenClaw CLI to me. Please install `totalreclaw` from your service's plugins / skills UI, then reply `done`."* Wait for `done` and skip to step 3.
|
|
46
|
+
openclaw plugins install @totalreclaw/totalreclaw@rc
|
|
47
|
+
openclaw skills install totalreclaw
|
|
48
|
+
```
|
|
179
49
|
|
|
180
|
-
|
|
181
|
-
```bash
|
|
182
|
-
TR_CLI="$(ls -d ~/.openclaw/npm/node_modules/@totalreclaw/totalreclaw/dist/tr-cli.js ~/.openclaw/extensions/totalreclaw/dist/tr-cli.js 2>/dev/null | head -1)"
|
|
183
|
-
node "$TR_CLI" status --json
|
|
184
|
-
```
|
|
185
|
-
Parse the JSON. When you get `{"version": "...", "hybrid_mode": true, ...}`, emit user-visible line 2.
|
|
50
|
+
Plugin is published on npm + ClawHub (`p-diogo`, GitHub-verified). Stable: drop `@rc`. Under hybrid-primary, the `tr` CLI is the primary path; native `totalreclaw_*` tools are also bound when OpenClaw exposes them — use whichever your runtime binds.
|
|
186
51
|
|
|
187
|
-
|
|
52
|
+
## Setup (plugin-driven)
|
|
188
53
|
|
|
189
|
-
|
|
190
|
-
```bash
|
|
191
|
-
PAIR_OUT="/tmp/tr-pair-out-$(date +%s).json"
|
|
192
|
-
setsid -f node "$TR_CLI" pair --json > "$PAIR_OUT" 2>&1 < /dev/null
|
|
193
|
-
sleep 2
|
|
194
|
-
cat "$PAIR_OUT"
|
|
195
|
-
```
|
|
196
|
-
Parse the JSON `{"url": "...", "pin": "...", "expires_at_ms": ...}` and emit user-visible line 3. This is UNCONDITIONAL — do NOT ask "Would you like to set up an account?". The URL + PIN itself is the consent moment.
|
|
54
|
+
The plugin auto-creates a pair session on first load when no credentials exist, writes `{url, pin, sid, expires_at_ms}` to `~/.totalreclaw/.pair-pending.json`, and injects a `before_agent_start` context block to you. **When you see that block, surface the URL and PIN to the user VERBATIM — read from the injected context; never invent values.** Confirm on pair completion: `✓ TotalReclaw set up.` (If credentials already exist: `✓ TotalReclaw is already set up.`)
|
|
197
55
|
|
|
198
|
-
|
|
56
|
+
If a restart is needed (rare — plugin self-handles via gateway config-watcher), issue the literal slash command `/totalreclaw-restart`. Never `kill`, `docker restart`, or prompt the user to restart.
|
|
199
57
|
|
|
200
|
-
##
|
|
58
|
+
## Hybrid-primary CLI
|
|
201
59
|
|
|
202
|
-
|
|
60
|
+
OpenClaw 2026.5.x may strip non-bundled tool bindings (issue #223). Never rely on `totalreclaw_*` tool binding alone. Fall back via shell:
|
|
203
61
|
|
|
204
62
|
```bash
|
|
205
|
-
|
|
206
|
-
node "$TR_CLI" status --json
|
|
207
|
-
# Returns: {"version":"3.3.12-rc.5","onboarded":false,"next_step":"pair","tool_count":17,"hybrid_mode":true}
|
|
208
|
-
|
|
209
|
-
# Pair (always via setsid -f)
|
|
210
|
-
PAIR_OUT="/tmp/tr-pair-out-$(date +%s).json"
|
|
211
|
-
setsid -f node "$TR_CLI" pair --json > "$PAIR_OUT" 2>&1 < /dev/null && sleep 2 && cat "$PAIR_OUT"
|
|
212
|
-
# Returns: {"v":1,"sid":"...","url":"https://...","pin":"123456","mode":"generate","expires_at_ms":...,"qr_ascii":"..."}
|
|
213
|
-
|
|
214
|
-
# Remember a fact (foreground OK — non-blocking single-shot HTTP call)
|
|
63
|
+
TR_CLI="$(ls -d ~/.openclaw/npm/node_modules/@totalreclaw/totalreclaw/dist/tr-cli.js ~/.openclaw/extensions/totalreclaw/dist/tr-cli.js 2>/dev/null | head -1)"
|
|
64
|
+
node "$TR_CLI" status --json # {"version":"...","hybrid_mode":true,"tool_count":17}
|
|
215
65
|
node "$TR_CLI" remember --json "I work at Graph Foundation"
|
|
216
|
-
#
|
|
217
|
-
|
|
218
|
-
# Recall memories
|
|
219
|
-
node "$TR_CLI" recall --json "where does the user work" --limit 5
|
|
220
|
-
# Returns: {"results":[{"text":"...","score":0.8},...]}
|
|
66
|
+
node "$TR_CLI" recall --json "where does the user work" --limit 5 # {"results":[{"text":"...","score":0.8}]}
|
|
67
|
+
node "$TR_CLI" pair --json # {"url":"...","pin":"123456","expires_at_ms":...} — plugin's auto-pair is preferred; only use this for re-pair
|
|
221
68
|
```
|
|
222
69
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
The plugin exposes these tools via OpenClaw's plugin runtime. Under hybrid-primary mode, prefer the `tr` CLI for `pair` / `remember` / `recall` / `status`; the rest below are typically only available as native tools.
|
|
226
|
-
|
|
227
|
-
| Tool | Use case |
|
|
228
|
-
|---|---|
|
|
229
|
-
| `totalreclaw_pair` | Set up the user's account (browser-side phrase generation/import) |
|
|
230
|
-
| `totalreclaw_remember` | **Store a fact / preference / decision (encrypted, on-chain). PRIMARY tool for user statements.** |
|
|
231
|
-
| `totalreclaw_recall` | Semantic search across the user's memories |
|
|
232
|
-
| `totalreclaw_forget` | Delete a memory by id (tombstone on-chain) |
|
|
233
|
-
| `totalreclaw_pin` | Mark a memory as never-supersedable |
|
|
234
|
-
| `totalreclaw_unpin` | Remove pin status |
|
|
235
|
-
| `totalreclaw_retype` | Change a memory's type (claim/preference/directive/etc.) |
|
|
236
|
-
| `totalreclaw_set_scope` | Change a memory's scope (work / personal / health / family / creative / finance / misc) |
|
|
237
|
-
| `totalreclaw_export` | Export all memories (json / markdown) |
|
|
238
|
-
| `totalreclaw_import_from` | Import from another tool (Mem0, MCP-Memory, ChatGPT, Claude, Gemini) |
|
|
239
|
-
| `totalreclaw_import_batch` | Bulk import with chunking + extraction |
|
|
240
|
-
| `totalreclaw_consolidate` | Merge near-duplicates after a fresh import |
|
|
241
|
-
| `totalreclaw_status` | Check onboarding state, version, billing tier, quota |
|
|
242
|
-
| `totalreclaw_upgrade` | Open the Stripe upgrade flow (free → paid tier) |
|
|
243
|
-
| `totalreclaw_migrate` | Move testnet memories to mainnet (Pro tier) |
|
|
244
|
-
| `totalreclaw_onboarding_start` | (Internal — used by setup flow) |
|
|
245
|
-
| `totalreclaw_report_qa_bug` | (RC only) Surface a QA bug into the agent log |
|
|
246
|
-
|
|
247
|
-
All tools accept JSON input and return structured JSON.
|
|
248
|
-
|
|
249
|
-
## Auto-extraction (background, no agent action required)
|
|
250
|
-
|
|
251
|
-
The plugin runs a trajectory poller every 60 seconds that scans `~/.openclaw/agents/<agent>/sessions/*.trajectory.jsonl` for new conversation turns and runs LLM-driven extraction. Extracted facts go through importance filtering and dedup before landing on-chain.
|
|
252
|
-
|
|
253
|
-
**Auto-extraction is a SAFETY NET, not a substitute for explicit `totalreclaw_remember` calls.** Explicit calls are higher-fidelity (the agent decides the importance, type, and scope). Auto-extraction catches things the agent missed.
|
|
254
|
-
|
|
255
|
-
## Phrase safety (HARD — never break)
|
|
256
|
-
|
|
257
|
-
The 12-word recovery phrase is the master key. Hard rules:
|
|
258
|
-
|
|
259
|
-
- **NEVER echo, generate, log, or ask the user to paste a recovery phrase in chat.** The browser at the pair URL handles phrase generation and import. The phrase NEVER enters the agent's LLM context.
|
|
260
|
-
- **NEVER include a recovery phrase as input to ANY tool call** — not `totalreclaw_pair` (its only inputs are `mode` + optional config), not `totalreclaw_remember`, not `Bash`, not `Write`, not `Edit`. Anything that surfaces the phrase to the agent's context is a security incident.
|
|
261
|
-
- **NEVER invoke any phrase-touching CLI via your shell tool.** `openclaw totalreclaw onboard` (bare interactive form) and `totalreclaw setup` print phrase material to stdout, which enters LLM context. The ONLY agent-facilitated account-setup paths are: (1) `tr pair --json` (preferred); (2) the `totalreclaw_pair` tool; (3) `openclaw totalreclaw pair generate --url-pin-only` or `openclaw totalreclaw onboard --pair-only` (single-line URL+PIN JSON, zero phrase material — both account-setup payloads are x25519-only, not BIP-39).
|
|
262
|
-
- **NEVER display the recovery phrase back to the user in chat** even if the browser leaks it to you somehow.
|
|
263
|
-
- **If the user pastes a phrase anyway**: tell them the phrase is now compromised, re-run `tr pair --json` for a fresh wallet.
|
|
264
|
-
|
|
265
|
-
## Browser flow context
|
|
266
|
-
|
|
267
|
-
After you emit user-visible line 3, the user opens the URL on their phone or desktop browser. They walk through a 3-step wizard:
|
|
268
|
-
|
|
269
|
-
1. **Step 1 — Enter PIN.** 6 digits matching what you sent.
|
|
270
|
-
2. **Step 2 — Recovery phrase.** Two tabs: **Set up** (generates fresh BIP-39 phrase locally) or **Log in** (paste existing phrase to restore). User checks "I've written this down" and clicks Set up.
|
|
271
|
-
3. **Step 3 — You're all set.** Browser already POSTed the encrypted phrase. Plugin writes `~/.totalreclaw/credentials.json`.
|
|
272
|
-
|
|
273
|
-
Common user-side issues during pair:
|
|
274
|
-
|
|
275
|
-
- **"The page won't load"** → confirm URL host. Default for both stable and RC is `api.totalreclaw.xyz`. Staging via `TOTALRECLAW_SERVER_URL=https://api-staging.totalreclaw.xyz`.
|
|
276
|
-
- **"PIN expired"** → re-run pair block, resend line 3.
|
|
277
|
-
- **"Invalid phrase"** during Log in → user pasted a non-BIP-39-valid phrase. Tell them to re-paste or switch to Set up tab.
|
|
278
|
-
- **502 on Set up** → the gateway WS dropped. Pair subprocess is alive (`setsid -f`). Wait 30s; re-run pair if still 502.
|
|
279
|
-
- **"Where do I write down the phrase?"** → paper, password manager, encrypted note. NOT in this chat.
|
|
280
|
-
|
|
281
|
-
## Forbidden vocabulary in agent prose
|
|
282
|
-
|
|
283
|
-
Unless the user explicitly asks how the install works, these patterns must not appear:
|
|
284
|
-
|
|
285
|
-
- "Let me check that…"
|
|
286
|
-
- "Plugin loaded. Let me verify…"
|
|
287
|
-
- "I'll now…"
|
|
288
|
-
- "Quick fix…"
|
|
289
|
-
- "However, I don't see…"
|
|
290
|
-
- "I need to use…"
|
|
291
|
-
- "Should I /totalreclaw-restart" / "Want me to restart" / "Let me check if the tool is bound" / "Do you have a public URL"
|
|
292
|
-
- "Now installing…" / "Got it" / "In parallel…" / "Step 1a/1b/1c"
|
|
293
|
-
- "local" / "local-only" / "stored locally" / "on disk" / "without an account" / "local memory" / "local storage"
|
|
294
|
-
|
|
295
|
-
## Diagnostics
|
|
296
|
-
|
|
297
|
-
- `tr` CLI not found → plugin not installed or install still in progress. Wait 5s, retry.
|
|
298
|
-
- `totalreclaw_*` tools not visible → EXPECTED under OpenClaw 2026.5.2 (issue #223). Use `tr` CLI instead.
|
|
299
|
-
- User says done but `credentials.json` missing → PIN expired; re-run `tr pair --json` and resend line 3.
|
|
300
|
-
- `onboarding required` → credentials missing; redo from the account-setup step.
|
|
301
|
-
- `quota exceeded` → `tr status --json`, then offer `totalreclaw_upgrade`.
|
|
302
|
-
- `No LLM available for auto-extraction` → check `~/.openclaw/agents/<agent>/agent/auth-profiles.json`.
|
|
303
|
-
|
|
304
|
-
## How does TotalReclaw work? (canonical answer for user questions)
|
|
305
|
-
|
|
306
|
-
When the user asks "how does this work?" / "where are my memories stored?" / "is this safe?" — answer:
|
|
307
|
-
|
|
308
|
-
> **End-to-end encrypted, decentralized memory.** When you tell me to remember something, I encrypt it locally with a key derived from your 12-word recovery phrase, then submit it on-chain via Account Abstraction (a UserOperation). It lives on a public blockchain (Base Sepolia for free tier, Gnosis mainnet for paid). The Graph subgraph indexes it for fast retrieval. The TotalReclaw relay only forwards encrypted bundles between your client and the chain — it never sees plaintext, can't read your memories, and could be replaced by any compatible relay without losing data. Your recovery phrase is the only thing that can decrypt the memories.
|
|
309
|
-
|
|
310
|
-
Shorter slices:
|
|
311
|
-
- **"Where are memories stored?"** → "Encrypted, on-chain (Base or Gnosis depending on your tier), indexed by The Graph. Not on any single company's server."
|
|
312
|
-
- **"Is the relay reading my data?"** → "No. The relay only forwards encrypted bundles. Plaintext never leaves your device."
|
|
313
|
-
- **"What if TotalReclaw shuts down?"** → "Your memories survive. They're on a public blockchain. Any compatible relay (or self-hosted relay) can read them with your recovery phrase."
|
|
70
|
+
Pair is UNCONDITIONAL when no credentials — pasting the install URL IS the consent. `tr --help` lists every subcommand.
|
|
314
71
|
|
|
315
|
-
##
|
|
72
|
+
## Tools (17 native; same surface via `tr`)
|
|
316
73
|
|
|
317
|
-
|
|
318
|
-
Native fallback (when bound): `totalreclaw_pair` · `_remember` · `_recall` · `_forget` · `_pin` · `_unpin` · `_retype` · `_set_scope` · `_export` · `_status` · `_upgrade` · `_migrate` · `_import_from` · `_import_batch` · `_consolidate` · `_onboarding_start` · `_report_qa_bug` (RC only).
|
|
74
|
+
`totalreclaw_remember` · `totalreclaw_recall` · `totalreclaw_forget` · `totalreclaw_pair` · `totalreclaw_pin` · `totalreclaw_unpin` · `totalreclaw_retype` · `totalreclaw_set_scope` · `totalreclaw_export` · `totalreclaw_import_from` · `totalreclaw_import_batch` · `totalreclaw_consolidate` · `totalreclaw_status` · `totalreclaw_upgrade` · `totalreclaw_migrate` · `totalreclaw_onboarding_start` · `totalreclaw_report_qa_bug` (RC only).
|
|
319
75
|
|
|
320
|
-
|
|
76
|
+
Full guides: <https://github.com/p-diogo/totalreclaw/blob/main/docs/guides/openclaw-setup.md>
|