@memorilabs/openclaw-memori 0.0.11 → 0.0.13
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/README.md +1 -1
- package/dist/index.js +5 -4
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.js +4 -2
- package/dist/tools/memori-recall.d.ts +0 -6
- package/dist/tools/memori-recall.js +0 -6
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/openclaw.plugin.json +8 -2
- package/package.json +1 -1
- package/skills/clawhub/SKILL.md +135 -228
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { handleAugmentation } from './handlers/augmentation.js';
|
|
2
2
|
import { PLUGIN_CONFIG } from './constants.js';
|
|
3
3
|
import { MemoriLogger, loadSkillsContent } from './utils/index.js';
|
|
4
|
-
import {
|
|
4
|
+
import { registerUtilityTools, registerAuthenticatedTools } from './tools/index.js';
|
|
5
5
|
import { registerCliCommands } from './cli/commands.js';
|
|
6
6
|
const memoriPlugin = {
|
|
7
7
|
id: PLUGIN_CONFIG.ID,
|
|
@@ -15,19 +15,20 @@ const memoriPlugin = {
|
|
|
15
15
|
entityId: rawConfig?.entityId,
|
|
16
16
|
projectId: rawConfig?.projectId,
|
|
17
17
|
};
|
|
18
|
+
const logger = new MemoriLogger(api);
|
|
19
|
+
const skillsContent = loadSkillsContent(api.resolvePath.bind(api));
|
|
20
|
+
registerUtilityTools({ api, config, logger });
|
|
18
21
|
if (!config.apiKey || !config.entityId) {
|
|
19
22
|
api.logger.warn(`${PLUGIN_CONFIG.LOG_PREFIX} Missing apiKey or entityId in config. Plugin disabled.`);
|
|
20
23
|
return;
|
|
21
24
|
}
|
|
22
|
-
const logger = new MemoriLogger(api);
|
|
23
|
-
const skillsContent = loadSkillsContent(api.resolvePath.bind(api));
|
|
24
25
|
logger.info(`\n=== ${PLUGIN_CONFIG.LOG_PREFIX} INITIALIZING PLUGIN ===`);
|
|
25
26
|
logger.info(`${PLUGIN_CONFIG.LOG_PREFIX} Tracking Entity ID: ${config.entityId}`);
|
|
26
27
|
if (skillsContent) {
|
|
27
28
|
api.on('before_prompt_build', () => ({ appendSystemContext: skillsContent }));
|
|
28
29
|
}
|
|
29
30
|
api.on('agent_end', (event, ctx) => handleAugmentation(event, ctx, config, logger));
|
|
30
|
-
|
|
31
|
+
registerAuthenticatedTools({ api, config, logger });
|
|
31
32
|
},
|
|
32
33
|
};
|
|
33
34
|
export default memoriPlugin;
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { ToolDeps } from './types.js';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function registerUtilityTools(deps: ToolDeps): void;
|
|
3
|
+
export declare function registerAuthenticatedTools(deps: ToolDeps): void;
|
|
3
4
|
export type { ToolDeps };
|
package/dist/tools/index.js
CHANGED
|
@@ -3,10 +3,12 @@ import { createMemoriQuotaTool } from './memori-quota.js';
|
|
|
3
3
|
import { createMemoriRecallTool } from './memori-recall.js';
|
|
4
4
|
import { createMemoriRecallSummaryTool } from './memori-recall-summary.js';
|
|
5
5
|
import { createMemoriFeedbackTool } from './memori-feedback.js';
|
|
6
|
-
export function
|
|
6
|
+
export function registerUtilityTools(deps) {
|
|
7
7
|
deps.api.registerTool(createMemoriSignupTool(deps));
|
|
8
|
-
|
|
8
|
+
}
|
|
9
|
+
export function registerAuthenticatedTools(deps) {
|
|
9
10
|
deps.api.registerTool(createMemoriRecallTool(deps));
|
|
10
11
|
deps.api.registerTool(createMemoriRecallSummaryTool(deps));
|
|
11
12
|
deps.api.registerTool(createMemoriFeedbackTool(deps));
|
|
13
|
+
deps.api.registerTool(createMemoriQuotaTool(deps));
|
|
12
14
|
}
|
|
@@ -6,10 +6,6 @@ export declare function createMemoriRecallTool(deps: ToolDeps): {
|
|
|
6
6
|
parameters: {
|
|
7
7
|
type: string;
|
|
8
8
|
properties: {
|
|
9
|
-
query: {
|
|
10
|
-
type: string;
|
|
11
|
-
description: string;
|
|
12
|
-
};
|
|
13
9
|
dateStart: {
|
|
14
10
|
type: string;
|
|
15
11
|
description: string;
|
|
@@ -37,10 +33,8 @@ export declare function createMemoriRecallTool(deps: ToolDeps): {
|
|
|
37
33
|
enum: string[];
|
|
38
34
|
};
|
|
39
35
|
};
|
|
40
|
-
required: string[];
|
|
41
36
|
};
|
|
42
37
|
execute(_toolCallId: string, params: {
|
|
43
|
-
query: string;
|
|
44
38
|
dateStart?: string;
|
|
45
39
|
dateEnd?: string;
|
|
46
40
|
projectId?: string;
|
|
@@ -8,10 +8,6 @@ export function createMemoriRecallTool(deps) {
|
|
|
8
8
|
parameters: {
|
|
9
9
|
type: 'object',
|
|
10
10
|
properties: {
|
|
11
|
-
query: {
|
|
12
|
-
type: 'string',
|
|
13
|
-
description: 'REQUIRED: The natural language search query to find specific facts (e.g., "What database did we decide to use?", "Ryan\'s dogs"). DO NOT use wildcards like "*" or regex. This is a semantic search, so use real words.',
|
|
14
|
-
},
|
|
15
11
|
dateStart: {
|
|
16
12
|
type: 'string',
|
|
17
13
|
description: 'ISO 8601 (MUST be UTC) date string to filter memories created on or after this time',
|
|
@@ -58,8 +54,6 @@ export function createMemoriRecallTool(deps) {
|
|
|
58
54
|
],
|
|
59
55
|
},
|
|
60
56
|
},
|
|
61
|
-
// Force the LLM to ALWAYS provide a search query
|
|
62
|
-
required: ['query'],
|
|
63
57
|
},
|
|
64
58
|
async execute(_toolCallId, params) {
|
|
65
59
|
try {
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "0.0.
|
|
1
|
+
export declare const SDK_VERSION = "0.0.13";
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const SDK_VERSION = '0.0.
|
|
1
|
+
export const SDK_VERSION = '0.0.13';
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "openclaw-memori",
|
|
3
3
|
"name": "Memori System",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.13",
|
|
5
5
|
"description": "Hosted memory backend",
|
|
6
6
|
"kind": "memory",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"contracts": {
|
|
9
|
-
"tools": [
|
|
9
|
+
"tools": [
|
|
10
|
+
"memori_recall",
|
|
11
|
+
"memori_recall_summary",
|
|
12
|
+
"memori_feedback",
|
|
13
|
+
"memori_signup",
|
|
14
|
+
"memori_quota"
|
|
15
|
+
]
|
|
10
16
|
},
|
|
11
17
|
"uiHints": {
|
|
12
18
|
"apiKey": {
|
package/package.json
CHANGED
package/skills/clawhub/SKILL.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memori
|
|
3
3
|
id: '@memorilabs/openclaw-memori'
|
|
4
|
-
description:
|
|
5
|
-
license:
|
|
4
|
+
description: Agent-native memory for OpenClaw that structures memory from agent trace, execution history, decisions, tool calls, and conversations into durable long-term memory primitives.
|
|
5
|
+
license: Apache-2.0
|
|
6
|
+
homepage: https://github.com/MemoriLabs/Memori
|
|
7
|
+
repository: https://github.com/MemoriLabs/Memori.git
|
|
6
8
|
compatibility:
|
|
7
9
|
- openclaw
|
|
8
10
|
metadata:
|
|
@@ -19,290 +21,191 @@ metadata:
|
|
|
19
21
|
- https://api.memorilabs.ai
|
|
20
22
|
---
|
|
21
23
|
|
|
22
|
-
# Memori
|
|
24
|
+
# Memori - Structured Long-term Memory for OpenClaw
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
Give your OpenClaw agents persistent, structured memory derived from agent execution, tool usage, workflow history, and conversations. Memori integrates seamlessly in the background via lifecycle hooks and provides agents with the tools to retrieve context when it is relevant.
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
## Core Workflow
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
## Core instruction
|
|
31
|
-
|
|
32
|
-
At the start of a session, you should check the `SKILL.md` file
|
|
33
|
-
|
|
34
|
-
Use it to understand:
|
|
35
|
-
|
|
36
|
-
- Available capabilities
|
|
37
|
-
- Tooling and integrations
|
|
38
|
-
- Expected behaviors and constraints
|
|
39
|
-
|
|
40
|
-
Treat `SKILL.md` as a source of truth for what you can do before taking action.
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## When to use Memori
|
|
45
|
-
|
|
46
|
-
Use Memori when:
|
|
47
|
-
|
|
48
|
-
- The task depends on prior context
|
|
49
|
-
- The user refers to previous sessions or decisions
|
|
50
|
-
- You need known constraints, preferences, or patterns
|
|
51
|
-
- You are starting a session and need current state
|
|
52
|
-
- You want to understand what has already been done
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
## When not to use Memori
|
|
57
|
-
|
|
58
|
-
Do not use Memori when:
|
|
30
|
+
Memori operates on two parallel tracks through standard OpenClaw lifecycle hooks:
|
|
59
31
|
|
|
60
|
-
|
|
61
|
-
- The answer depends only on the current prompt
|
|
62
|
-
- No historical context is required
|
|
63
|
-
- The query is simple or one-off
|
|
32
|
+
### 1. Advanced Augmentation (automatic)
|
|
64
33
|
|
|
65
|
-
|
|
34
|
+
After each interaction, Memori converts raw session data into structured, reusable memories asynchronously.
|
|
66
35
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
36
|
+
- Transforms raw agent sessions into structured memory units
|
|
37
|
+
- Captures the agent's actions, reasoning, tool usage, responses, corrections, and failures
|
|
38
|
+
- Organizes into classes to enable efficient retrieval
|
|
39
|
+
- Generates embeddings for semantic retrieval
|
|
40
|
+
- Updates structured memory and the knowledge graph
|
|
70
41
|
|
|
71
|
-
|
|
42
|
+
This is how structured memory is continuously built and updated over time. It runs after the agent responds and does not impact latency.
|
|
72
43
|
|
|
73
|
-
|
|
44
|
+
### 2. Agent-Controlled-Intelligent Recall
|
|
74
45
|
|
|
75
|
-
|
|
46
|
+
Recall is explicit and initiated by the agent.
|
|
76
47
|
|
|
77
|
-
|
|
78
|
-
- `projectId` → project or workspace context
|
|
79
|
-
- `sessionId` → specific session
|
|
80
|
-
- `dateStart` / `dateEnd` → time-bounded recall
|
|
81
|
-
- `source` → type of memory
|
|
82
|
-
- `signal` → how the memory was derived
|
|
48
|
+
Memori separates memory creation from memory recall:
|
|
83
49
|
|
|
84
|
-
|
|
85
|
-
|
|
50
|
+
- Creation is automatic (advanced augmentation)
|
|
51
|
+
- Recall is intentional (agent-controlled)
|
|
86
52
|
|
|
87
|
-
|
|
53
|
+
Agents decide:
|
|
88
54
|
|
|
89
|
-
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
- execution
|
|
93
|
-
- fact
|
|
94
|
-
- insight
|
|
95
|
-
- instruction
|
|
96
|
-
- status
|
|
97
|
-
- strategy
|
|
98
|
-
- task
|
|
55
|
+
- When to recall
|
|
56
|
+
- What scope to recall from
|
|
57
|
+
- How much history to include
|
|
99
58
|
|
|
100
|
-
|
|
101
|
-
- commit
|
|
102
|
-
- discovery
|
|
103
|
-
- failure
|
|
104
|
-
- inference
|
|
105
|
-
- pattern
|
|
106
|
-
- result
|
|
107
|
-
- update
|
|
108
|
-
- verification
|
|
59
|
+
To maintain an efficient context window, Memori equips the agent with specific tools to retrieve history when required for the conversation:
|
|
109
60
|
|
|
110
|
-
|
|
61
|
+
1. **`memori_recall`**: Searches the structured memory graph for specific facts, constraints, and prior decisions.
|
|
62
|
+
2. **`memori_recall_summary`**: Retrieves structured daily briefs and rolling summaries of prior sessions.
|
|
63
|
+
3. **`memori_feedback`**: Reports on memory quality to improve extraction accuracy.
|
|
111
64
|
|
|
112
|
-
|
|
65
|
+
## Installation
|
|
113
66
|
|
|
114
|
-
|
|
115
|
-
|
|
67
|
+
```bash
|
|
68
|
+
openclaw plugins install @memorilabs/openclaw-memori
|
|
69
|
+
```
|
|
116
70
|
|
|
117
|
-
|
|
71
|
+
## Configuration
|
|
118
72
|
|
|
119
|
-
|
|
120
|
-
- Add time bounds only when needed
|
|
121
|
-
- Use `source` and `signal` to refine results
|
|
122
|
-
- Expand scope only if needed
|
|
123
|
-
- Do not recall on every turn
|
|
73
|
+
Add to your `~/.openclaw/openclaw.json` or use the `openclaw memori init` CLI command to set up your workspace:
|
|
124
74
|
|
|
125
|
-
|
|
75
|
+
```bash
|
|
76
|
+
openclaw memori init \
|
|
77
|
+
--api-key "YOUR_MEMORI_API_KEY" \
|
|
78
|
+
--entity-id "your-entity-id" \
|
|
79
|
+
--project-id "your-project-id"
|
|
80
|
+
```
|
|
126
81
|
|
|
127
|
-
|
|
82
|
+
Alternatively, configure it directly via JSON:
|
|
128
83
|
|
|
129
|
-
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"plugins": {
|
|
87
|
+
"entries": {
|
|
88
|
+
"openclaw-memori": {
|
|
89
|
+
"enabled": true,
|
|
90
|
+
"config": {
|
|
91
|
+
"apiKey": "${MEMORI_API_KEY}",
|
|
92
|
+
"entityId": "openclaw-user",
|
|
93
|
+
"projectId": "default-project"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
```
|
|
130
100
|
|
|
131
|
-
|
|
101
|
+
### Configuration Options
|
|
132
102
|
|
|
133
|
-
-
|
|
103
|
+
- **apiKey** (required): Your Memori API key from [memorilabs.ai](https://app.memorilabs.ai/signup)
|
|
104
|
+
- **entityId** (required): Unique identifier for this user's memories
|
|
105
|
+
- **projectId** (required): Scopes all memories to a specific project or workspace
|
|
134
106
|
|
|
135
|
-
|
|
107
|
+
## Agentic Tool Guidelines
|
|
136
108
|
|
|
137
|
-
-
|
|
138
|
-
- `sessionId`
|
|
139
|
-
- `dateStart`
|
|
140
|
-
- `dateEnd`
|
|
109
|
+
When this plugin is active, the agent is equipped with tools to manage long-term context. The agent should use its discretion to call these tools when helpful:
|
|
141
110
|
|
|
142
|
-
|
|
111
|
+
- **Contextual Recall**: The agent can run a `memori_recall` search to retrieve relevant details if context is missing regarding user preferences.
|
|
112
|
+
- **Summaries**: The agent can utilize the `memori_recall_summary` tool to construct a brief if a user requests a recap.
|
|
113
|
+
- **Account Creation**: If a user explicitly asks to create an account, the agent can use the `memori_signup` tool to initiate the process by asking for an email address. Keys are never returned in the chat. The system securely emails the credentials to the user, who must then manually configure them to activate the plugin.
|
|
114
|
+
- **Quota Monitoring**: The agent can use the `memori_quota` tool to check the user's current memory usage and storage limits to communicate quota status or gracefully degrade behavior if limits are reached.
|
|
115
|
+
- **Date Defaults**: If the agent chooses to search memory, providing specific start/end dates is recommended to keep context windows efficient. Omitting dates will search all available history.
|
|
143
116
|
|
|
144
|
-
|
|
117
|
+
## Verification
|
|
145
118
|
|
|
146
|
-
|
|
119
|
+
Check that the plugin is working and securely connected:
|
|
147
120
|
|
|
148
|
-
|
|
121
|
+
```bash
|
|
122
|
+
# Verify plugin is securely connected to the API
|
|
123
|
+
openclaw memori status --check
|
|
149
124
|
|
|
150
|
-
|
|
125
|
+
# Check for Memori logs in gateway output
|
|
126
|
+
openclaw gateway logs --filter "[Memori]"
|
|
127
|
+
```
|
|
151
128
|
|
|
152
|
-
|
|
129
|
+
## Quota Management
|
|
153
130
|
|
|
154
|
-
|
|
131
|
+
Check your current API quota:
|
|
155
132
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
- Open work
|
|
133
|
+
```bash
|
|
134
|
+
memori quota
|
|
135
|
+
```
|
|
160
136
|
|
|
161
|
-
|
|
137
|
+
**Example output:**
|
|
162
138
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
- Open loops
|
|
172
|
-
- Known failures and anti-patterns
|
|
173
|
-
- Staleness warnings
|
|
139
|
+
```
|
|
140
|
+
__ __ _
|
|
141
|
+
| \/ | ___ _ __ ___ ___ _ __(_)
|
|
142
|
+
| |\/| |/ _ \ '_ ` _ \ / _ \| '__| |
|
|
143
|
+
| | | | __/ | | | | | (_) | | | |
|
|
144
|
+
|_| |_|\___|_| |_| |_|\___/|_| |_|
|
|
145
|
+
perfectam memoriam
|
|
146
|
+
memorilabs.ai
|
|
174
147
|
|
|
175
|
-
|
|
148
|
+
+ Maximum # of Memories: 100
|
|
149
|
+
+ Current # of Memories: 0
|
|
176
150
|
|
|
177
|
-
|
|
151
|
+
+ You are not currently over quota.
|
|
152
|
+
```
|
|
178
153
|
|
|
179
|
-
|
|
154
|
+
Use this to monitor usage and upgrade if needed.
|
|
180
155
|
|
|
181
|
-
|
|
182
|
-
2. During task → use targeted recall
|
|
183
|
-
3. When memory is missing or incorrect → send feedback
|
|
184
|
-
4. When limits are reached → degrade gracefully
|
|
156
|
+
## Performance
|
|
185
157
|
|
|
186
|
-
|
|
158
|
+
- **Automatic deduplication** prevents memory bloat
|
|
159
|
+
- **Agent-controlled retrieval** ensures token usage remains targeted, compact, and actionable
|
|
160
|
+
- **Semantic ranking** ensures relevant memories surface first
|
|
187
161
|
|
|
188
|
-
##
|
|
162
|
+
## Privacy, Consent & Data Handling
|
|
189
163
|
|
|
190
|
-
-
|
|
191
|
-
- Do not assume memory is correct if it conflicts with the user
|
|
192
|
-
- Verify before acting when needed
|
|
193
|
-
- Treat recent instructions as higher priority than recalled memory
|
|
164
|
+
**Explicit Opt-In Required:** Memori requires the user to explicitly configure an API key (`MEMORI_API_KEY`) and an `entityId`. **No data is captured or transmitted unless these credentials are actively provided by the user.**
|
|
194
165
|
|
|
195
|
-
|
|
166
|
+
- ✅ Conversations are securely transmitted to the Memori backend (`https://api.memorilabs.ai`) only when the plugin is fully configured by the user.
|
|
167
|
+
- ✅ Data is encrypted in transit and at rest.
|
|
168
|
+
- ✅ Users control their data scope via their specific `projectId` and `entityId`.
|
|
169
|
+
- ✅ The backend automatically filters sensitive data (API keys, passwords, secrets) prior to storage.
|
|
196
170
|
|
|
197
|
-
|
|
171
|
+
For details: [Memori Privacy Policy](https://memorilabs.ai/privacy)
|
|
198
172
|
|
|
199
|
-
|
|
173
|
+
## Memory Persistence
|
|
200
174
|
|
|
201
|
-
|
|
175
|
+
Memories persist safely across:
|
|
202
176
|
|
|
203
|
-
|
|
177
|
+
- Session restarts
|
|
178
|
+
- Gateway restarts
|
|
179
|
+
- System reboots
|
|
180
|
+
- OpenClaw upgrades
|
|
204
181
|
|
|
205
|
-
|
|
182
|
+
All storage is handled by the Memori backend and is scoped safely alongside your local `MEMORY.md` file without overwriting it.
|
|
206
183
|
|
|
207
|
-
|
|
184
|
+
## Troubleshooting
|
|
208
185
|
|
|
209
|
-
|
|
186
|
+
**Plugin not loading:**
|
|
210
187
|
|
|
211
|
-
-
|
|
212
|
-
-
|
|
213
|
-
-
|
|
214
|
-
- Something works particularly well and should be reinforced
|
|
215
|
-
|
|
216
|
-
Examples:
|
|
217
|
-
|
|
218
|
-
- "Send feedback that recall missed a pricing constraint."
|
|
219
|
-
- "Tell Memori the daily brief was accurate."
|
|
220
|
-
- "Submit a bug report: you didn't remember my preferred language."
|
|
221
|
-
|
|
222
|
-
#### Purpose
|
|
223
|
-
|
|
224
|
-
Feedback improves:
|
|
225
|
-
|
|
226
|
-
- Memory extraction quality
|
|
227
|
-
- Recall relevance
|
|
228
|
-
- Summary accuracy
|
|
229
|
-
|
|
230
|
-
---
|
|
188
|
+
- Verify `enabled: true` in openclaw.json
|
|
189
|
+
- Check API key: `echo $MEMORI_API_KEY`
|
|
190
|
+
- Restart gateway: `openclaw gateway restart`
|
|
231
191
|
|
|
232
|
-
|
|
192
|
+
**No memories captured:**
|
|
233
193
|
|
|
234
|
-
|
|
194
|
+
- Check gateway logs for `[Memori]` errors
|
|
195
|
+
- Verify API endpoint reachable
|
|
196
|
+
- Test API key: `memori quota`
|
|
235
197
|
|
|
236
|
-
|
|
198
|
+
**Memories not recalled:**
|
|
237
199
|
|
|
238
|
-
- Check for
|
|
239
|
-
-
|
|
200
|
+
- Did the agent utilize the retrieval tool? Check your gateway logs for `memori_recall` tool execution. If it didn't use the tool, you can prompt it to search its memory.
|
|
201
|
+
- Ensure `entityId` and `projectId` are consistent across sessions.
|
|
202
|
+
- Verify memories exist: `memori quota` shows count > 0.
|
|
240
203
|
|
|
241
|
-
|
|
204
|
+
**Quota exceeded:**
|
|
242
205
|
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
-
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
### 3. Account Creation and Onboarding (`memori_signup`)
|
|
250
|
-
|
|
251
|
-
You are equipped with the `memori_signup` tool to securely create an account and provision an API key for the user via the Memori CLI.
|
|
252
|
-
|
|
253
|
-
Use this tool when:
|
|
254
|
-
|
|
255
|
-
- The user explicitly asks to sign up, create an account, or get an API key for Memori.
|
|
256
|
-
- You encounter an error indicating a missing `MEMORI_API_KEY` and the user provides their email address to get one.
|
|
257
|
-
|
|
258
|
-
#### Behavior:
|
|
259
|
-
|
|
260
|
-
- **Email Required:** If the user asks to sign up but **does not** provide an email address, you MUST ask them for their email first. Do not attempt to guess or hallucinate an email.
|
|
261
|
-
- **Execution:** Once they provide an email, run `memori_signup` with that email.
|
|
262
|
-
- **Follow-up:** The tool will trigger the underlying CLI and return a success or error message. Relay that message to the user, remind them to check their inbox for the API key, and instruct them to add it to their configuration (`~/.openclaw/openclaw.json` or `.env` file).
|
|
263
|
-
- **Troubleshooting Errors:** If the tool fails with a `Permission denied`, `EACCES`, or `command not found` error, do not ask the user for permission to troubleshoot. Instead, immediately tell them that their CLI installation is broken or missing, and explicitly instruct them to run `npm install -g @memorilabs/memori` in their terminal to fix it.
|
|
264
|
-
|
|
265
|
-
---
|
|
266
|
-
|
|
267
|
-
### 4. Quota Awareness and Upgrades (`memori_quota`)
|
|
268
|
-
|
|
269
|
-
You are equipped with the `memori_quota` tool to check the user's current memory usage and limits via the Memori CLI.
|
|
270
|
-
|
|
271
|
-
Use this tool when:
|
|
272
|
-
|
|
273
|
-
- The user explicitly asks about their quota, usage, storage, or how many memories they have left.
|
|
274
|
-
- You encounter errors suggesting memory limits have been reached and want to confirm before degrading behavior.
|
|
275
|
-
|
|
276
|
-
#### Behavior:
|
|
277
|
-
|
|
278
|
-
- **No Parameters Required:** Simply invoke `memori_quota` — it requires no arguments.
|
|
279
|
-
- **Execution:** The tool runs the underlying CLI and returns the user's current usage and quota.
|
|
280
|
-
- **Follow-up:** Relay the result clearly to the user. If they are near or at their limit, explain the impact and suggest an upgrade.
|
|
281
|
-
- **Troubleshooting Errors:** If the tool fails with a `Permission denied`, `EACCES`, or `command not found` error, do not ask the user for permission to troubleshoot. Instead, immediately tell them that their CLI installation is broken or missing, and explicitly instruct them to run `npm install -g @memorilabs/memori` in their terminal to fix it.
|
|
282
|
-
|
|
283
|
-
#### When limits are reached or nearing:
|
|
284
|
-
|
|
285
|
-
#### a. Degrade gracefully
|
|
286
|
-
|
|
287
|
-
- Reduce recall scope (shorter time ranges)
|
|
288
|
-
- Prioritize high-signal memory (decisions, constraints, key facts)
|
|
289
|
-
- Avoid unnecessary or repeated recall calls
|
|
290
|
-
|
|
291
|
-
#### b. Inform the human/operator
|
|
292
|
-
|
|
293
|
-
Clearly communicate when limits impact performance.
|
|
294
|
-
|
|
295
|
-
Example:
|
|
296
|
-
|
|
297
|
-
> "Memory limits have been reached. I can continue with limited recall, or you can upgrade to restore full functionality."
|
|
298
|
-
|
|
299
|
-
#### c. Suggest upgrades appropriately
|
|
300
|
-
|
|
301
|
-
- Only prompt when performance is affected
|
|
302
|
-
- Avoid repetitive or disruptive messaging
|
|
303
|
-
- Keep messaging neutral and helpful
|
|
304
|
-
|
|
305
|
-
---
|
|
206
|
+
- Run `memori quota` to check usage
|
|
207
|
+
- Upgrade at [memorilabs.ai](https://app.memorilabs.ai/)
|
|
208
|
+
- Or clear old memories via dashboard
|
|
306
209
|
|
|
307
210
|
## Learn More
|
|
308
211
|
|
|
@@ -311,3 +214,7 @@ Example:
|
|
|
311
214
|
- **Documentation**: https://memorilabs.ai/docs/memori-cloud/openclaw/overview/
|
|
312
215
|
- **API Dashboard**: https://app.memorilabs.ai/
|
|
313
216
|
- **Support**: [GitHub Issues](https://github.com/MemoriLabs/Memori/issues)
|
|
217
|
+
|
|
218
|
+
## Notes
|
|
219
|
+
|
|
220
|
+
This skill informs the agent about the Memori plugin. The plugin must be installed separately via npm. Once installed, memory capture happens in the background, and the agent is empowered to explicitly query its memories when needed.
|