@nowledge/openclaw-nowledge-mem 0.6.5 → 0.6.8

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 CHANGED
@@ -17,7 +17,7 @@ openclaw plugins install @nowledge/openclaw-nowledge-mem
17
17
 
18
18
  ### Local mode (default)
19
19
 
20
- Start Nowledge Mem desktop app or run `nmem serve`, then configure:
20
+ Start Nowledge Mem desktop app or run `nmem serve`, then enable the plugin:
21
21
 
22
22
  ```json
23
23
  {
@@ -32,30 +32,24 @@ Start Nowledge Mem desktop app or run `nmem serve`, then configure:
32
32
  }
33
33
  ```
34
34
 
35
- That's it. The agent gets 9 tools and calls them on demand. No extra tokens wasted.
35
+ That's it. The agent gets 10 tools and calls them on demand. No extra tokens wasted.
36
36
 
37
37
  ### Remote mode
38
38
 
39
- Connect to a Nowledge Mem server running elsewhere — on a VPS, a home server, or shared team instance. See [remote access guide](https://mem.nowledge.co/docs/remote-access) for server setup.
39
+ Connect to a Nowledge Mem server running elsewhere (a VPS, a home server, or a shared team instance). See [remote access guide](https://mem.nowledge.co/docs/remote-access) for server setup.
40
+
41
+ Enable the plugin the same way as local mode, then set `apiUrl` and `apiKey` in the OpenClaw plugin settings.
42
+
43
+ Or use a config file at `~/.nowledge-mem/openclaw.json`:
40
44
 
41
45
  ```json
42
46
  {
43
- "plugins": {
44
- "slots": { "memory": "openclaw-nowledge-mem" },
45
- "entries": {
46
- "openclaw-nowledge-mem": {
47
- "enabled": true,
48
- "config": {
49
- "apiUrl": "https://nowledge.example.com",
50
- "apiKey": "your-api-key-here"
51
- }
52
- }
53
- }
54
- }
47
+ "apiUrl": "https://nowledge.example.com",
48
+ "apiKey": "your-api-key-here"
55
49
  }
56
50
  ```
57
51
 
58
- The `apiKey` is injected as `NMEM_API_KEY` into the nmem CLI process — never passed as a CLI argument, never logged.
52
+ The `apiKey` is injected as `NMEM_API_KEY` into the nmem CLI process. Never passed as a CLI argument, never logged.
59
53
 
60
54
  ## How It Works
61
55
 
@@ -70,7 +64,7 @@ flowchart TD
70
64
  B --> C["Behavioral guidance(always, ~110 tokens)"]
71
65
  B -.->|"sessionContext: true"| D["Working Memory +relevant memories (~1-2 KB)"]
72
66
 
73
- C --> E["Agent processes message(9 tools available)"]
67
+ C --> E["Agent processes message(10 tools available)"]
74
68
  D --> E
75
69
 
76
70
  E --> F{"Needs past context?"}
@@ -99,6 +93,7 @@ The behavioral hook nudges the agent to **search before answering** and **save a
99
93
  | Memory has `sourceThreadId` | `nowledge_mem_thread_fetch` | Fetch full source conversation. Pagination via `offset` + `limit`. |
100
94
  | "Find our discussion about X" | `nowledge_mem_thread_search` | Search past conversations by keyword. Returns matched snippets. |
101
95
  | "Forget X" | `nowledge_mem_forget` | Delete by ID or search query. |
96
+ | "Is my setup working?" | `nowledge_mem_status` | Show effective config, backend connectivity, and version. |
102
97
 
103
98
  ### Session Lifecycle (Automatic Capture)
104
99
 
@@ -114,7 +109,7 @@ flowchart TD
114
109
 
115
110
  C --> F{"sessionDigest enabled+ enough messages+ cooldown passed?"}
116
111
  F -->|"Yes"| G["LLM triage (~100 tokens):worth distilling?"]
117
- F -->|"No"| H["Done — thread saved"]
112
+ F -->|"No"| H["Done - thread saved"]
118
113
  G -->|"Decisions, insights,preferences found"| I["Full distillation ->structured memories(with sourceThreadId)"]
119
114
  G -->|"Routine chat"| H
120
115
 
@@ -123,7 +118,7 @@ flowchart TD
123
118
  ```
124
119
 
125
120
  **Key points:**
126
- - Thread capture is **unconditional** — every conversation is saved and searchable via `nowledge_mem_thread_search`
121
+ - Thread capture is unconditional: every conversation is saved and searchable via `nowledge_mem_thread_search`
127
122
  - LLM distillation only runs at `agent_end`, not during compaction/reset checkpoints
128
123
  - Distilled memories carry `sourceThreadId`, linking them back to the source conversation
129
124
  - Cooldown (`digestMinInterval`, default 300s) prevents burst distillation
@@ -151,8 +146,8 @@ flowchart LR
151
146
  ```
152
147
 
153
148
  Two entry points:
154
- 1. **From a memory** — `memory_search` or `memory_get` returns `sourceThreadId` -> fetch the source conversation
155
- 2. **Direct search** — `nowledge_mem_thread_search` finds conversations by keyword -> fetch any result
149
+ 1. **From a memory**: `memory_search` or `memory_get` returns `sourceThreadId`, then fetch the source conversation
150
+ 2. **Direct search**: `nowledge_mem_thread_search` finds conversations by keyword, then fetch any result
156
151
 
157
152
  ### Three Modes at a Glance
158
153
 
@@ -161,21 +156,21 @@ flowchart LR
161
156
  subgraph "default" ["Default (recommended)"]
162
157
  direction TB
163
158
  D1["Every turn: behavioral guidance (~50 tokens)"]
164
- D2["Agent calls 9 tools on demand"]
159
+ D2["Agent calls 10 tools on demand"]
165
160
  D3["Session end: thread capture + LLM distillation"]
166
161
  end
167
162
 
168
163
  subgraph context ["Session Context"]
169
164
  direction TB
170
165
  C1["Every turn: guidance + Working Memory+ recalled memories (~1-2 KB)"]
171
- C2["Agent calls 9 tools on demand"]
166
+ C2["Agent calls 10 tools on demand"]
172
167
  C3["Session end: thread capture + LLM distillation"]
173
168
  end
174
169
 
175
170
  subgraph minimal ["Minimal"]
176
171
  direction TB
177
172
  M1["Every turn: behavioral guidance (~50 tokens)"]
178
- M2["Agent calls 9 tools on demand"]
173
+ M2["Agent calls 10 tools on demand"]
179
174
  M3["No automatic capture"]
180
175
  end
181
176
  ```
@@ -186,15 +181,15 @@ flowchart LR
186
181
 
187
182
  These satisfy the OpenClaw memory slot contract and activate the "Memory Recall" section in OpenClaw's system prompt.
188
183
 
189
- **memory_search** — Multi-signal recall using embedding, BM25, label match, graph signals, and recency decay. Returns structured source paths (`nowledgemem://memory/<id>`) for follow-up with `memory_get` or `nowledge_mem_connections`. Also returns relevant past conversation snippets (`relatedThreads`) and `sourceThreadId` (link to the conversation the memory was distilled from) when available.
184
+ **memory_search** - Multi-signal recall using embedding, BM25, label match, graph signals, and recency decay. Returns structured source paths (`nowledgemem://memory/<id>`) for follow-up with `memory_get` or `nowledge_mem_connections`. Also returns relevant past conversation snippets (`relatedThreads`) and `sourceThreadId` (link to the conversation the memory was distilled from) when available.
190
185
 
191
- **memory_get** — Read a specific memory by ID or path. Supports `MEMORY.md` alias for Working Memory. Returns `sourceThreadId` when the memory was distilled from a conversation.
186
+ **memory_get** - Read a specific memory by ID or path. Supports `MEMORY.md` alias for Working Memory. Returns `sourceThreadId` when the memory was distilled from a conversation.
192
187
 
193
188
  ### Nowledge Mem Native
194
189
 
195
190
  These reflect capabilities unique to Nowledge Mem's knowledge graph architecture.
196
191
 
197
- **nowledge_mem_save** — Capture structured knowledge with type classification, labels, and temporal context.
192
+ **nowledge_mem_save** - Capture structured knowledge with type classification, labels, and temporal context.
198
193
 
199
194
  ```
200
195
  text: "We decided to use PostgreSQL with JSONB for the task events table"
@@ -204,18 +199,18 @@ importance: 0.8
204
199
  labels: ["backend", "architecture"]
205
200
  event_start: 2024-03
206
201
  temporal_context: past
207
- → Saved: Task events database choice [decision] (id: mem_abc) · labels: backend, architecture · event: 2024-03
202
+ > Saved: Task events database choice [decision] (id: mem_abc) - labels: backend, architecture - event: 2024-03
208
203
  ```
209
204
 
210
- Eight memory types: `fact`, `preference`, `decision`, `plan`, `procedure`, `learning`, `context`, `event` — each becomes a typed node in the knowledge graph. Labels enable filtering in `memory_search`. `event_start` records *when* something happened, not just when you saved it — powering bi-temporal search.
205
+ Eight memory types: `fact`, `preference`, `decision`, `plan`, `procedure`, `learning`, `context`, `event`. Each becomes a typed node in the knowledge graph. Labels enable filtering in `memory_search`. `event_start` records *when* something happened, not just when you saved it, powering bi-temporal search.
211
206
 
212
- **nowledge_mem_context** — Read today's Working Memory: focus areas, priorities, unresolved flags, and recent activity. Generated by the Knowledge Agent each morning, updated throughout the day.
207
+ **nowledge_mem_context** - Read today's Working Memory: focus areas, priorities, unresolved flags, and recent activity. Generated by the Knowledge Agent each morning, updated throughout the day.
213
208
 
214
- **nowledge_mem_connections** — Explore the knowledge graph around a topic or memory. Returns connected memories, EVOLVES version chains (how understanding has grown), related entities, and source document provenance (which files or URLs knowledge was extracted from).
209
+ **nowledge_mem_connections** - Explore the knowledge graph around a topic or memory. Returns connected memories, EVOLVES version chains (how understanding has grown), related entities, and source document provenance (which files or URLs knowledge was extracted from).
215
210
 
216
211
  ```
217
212
  memoryId: "mem_abc"
218
- → Connected memories:
213
+ > Connected memories:
219
214
  - PostgreSQL optimization patterns: Use JSONB GIN indexes for...
220
215
  - Redis caching layer decision: For frequently accessed task lists...
221
216
  Source documents (provenance):
@@ -227,25 +222,25 @@ memoryId: "mem_abc"
227
222
  - superseded by newer understanding (version chain)
228
223
  ```
229
224
 
230
- **nowledge_mem_timeline** — Browse your knowledge history chronologically. Use for questions like "what was I working on last week?" or "what happened yesterday?". Groups activity by day: memories saved, documents ingested, insights generated, and more.
225
+ **nowledge_mem_timeline** - Browse your knowledge history chronologically. Use for questions like "what was I working on last week?" or "what happened yesterday?". Groups activity by day: memories saved, documents ingested, insights generated, and more.
231
226
 
232
227
  ```
233
228
  last_n_days: 7
234
- → 2026-02-18:
235
- - [Memory saved] UV guide — Python toolchain setup
229
+ > 2026-02-18:
230
+ - [Memory saved] UV guide - Python toolchain setup
236
231
  - [Knowledge extracted from document] api-spec.pdf
237
232
  2026-02-17:
238
233
  - [Daily briefing] Focus: NebulaGraph, AI biotech...
239
234
  - [Insight] Connection between Redis caching and...
240
235
  ```
241
236
 
242
- **nowledge_mem_forget** — Delete a memory by ID or search query. Supports user confirmation when multiple matches are found.
237
+ **nowledge_mem_forget** - Delete a memory by ID or search query. Supports user confirmation when multiple matches are found.
243
238
 
244
239
  ### Thread Tools
245
240
 
246
- **nowledge_mem_thread_search** — Search past conversations by keyword. Returns matched threads with message snippets and relevance scores. Use when the user asks about a past discussion or wants to find a conversation from a specific time.
241
+ **nowledge_mem_thread_search** - Search past conversations by keyword. Returns matched threads with message snippets and relevance scores. Use when the user asks about a past discussion or wants to find a conversation from a specific time.
247
242
 
248
- **nowledge_mem_thread_fetch** — Fetch full messages from a conversation thread with pagination. Pass a `sourceThreadId` from memory results or a `threadId` from thread search. Supports `offset` and `limit` for progressive retrieval of long conversations.
243
+ **nowledge_mem_thread_fetch** - Fetch full messages from a conversation thread with pagination. Pass a `sourceThreadId` from memory results or a `threadId` from thread search. Supports `offset` and `limit` for progressive retrieval of long conversations.
249
244
 
250
245
  ```
251
246
  threadId: "openclaw-db-arch-a1b2c3"
@@ -262,19 +257,19 @@ The plugin supports three modes. Choose based on how much you want to guarantee
262
257
 
263
258
  | Mode | Config | Behavior | Tradeoff |
264
259
  |------|--------|----------|----------|
265
- | **Default** (recommended) | `sessionContext: false, sessionDigest: true` | Agent calls 9 tools on demand. Behavioral guidance every turn (~50 tokens). Conversations captured + distilled at session end. | Lowest cost. Agent decides when to search — usually smart, occasionally forgets. |
266
- | **Session context** | `sessionContext: true` | Working Memory + relevant memories injected at prompt time, plus all 9 tools still available. | ~1-2 KB/turn. Guarantees context is always present. Best for short sessions or critical workflows. |
260
+ | **Default** (recommended) | `sessionContext: false, sessionDigest: true` | Agent calls 10 tools on demand. Behavioral guidance every turn (~50 tokens). Conversations captured + distilled at session end. | Lowest cost. Agent decides when to search, usually smart, occasionally forgets. |
261
+ | **Session context** | `sessionContext: true` | Working Memory + relevant memories injected at prompt time, plus all 10 tools still available. | ~1-2 KB/turn. Guarantees context is always present. Best for short sessions or critical workflows. |
267
262
  | **Minimal** | `sessionDigest: false` | Tool-only, no automatic capture. | Zero overhead beyond guidance. Use when you handle memory manually. |
268
263
 
269
264
  **Which mode should you use?**
270
265
 
271
266
  - **Most users**: start with default. The agent gets behavioral guidance nudging it to search before answering and save after deciding. It works well for most conversations.
272
- - **Short sessions or critical accuracy**: enable `sessionContext`. This guarantees relevant memories are present from the first turn — the agent doesn't need to decide whether to search. The tradeoff is ~1-2 KB of context per turn.
267
+ - **Short sessions or critical accuracy**: enable `sessionContext`. This guarantees relevant memories are present from the first turn. The agent doesn't need to decide whether to search. The tradeoff is ~1-2 KB of context per turn.
273
268
  - **Full manual control**: set `sessionDigest: false`. You control what gets saved (via `/remember` or `nowledge_mem_save`) and nothing is captured automatically.
274
269
 
275
270
  ### Session Context (`sessionContext`, default: false)
276
271
 
277
- When enabled, the plugin injects Working Memory and relevant search results at prompt time. The behavioral guidance automatically adjusts to tell the agent that context is already present — use `memory_search` only for specific follow-up queries, not broad recall. This prevents the agent from redundantly searching for the same context that was just injected.
272
+ When enabled, the plugin injects Working Memory and relevant search results at prompt time. The behavioral guidance automatically adjusts to tell the agent that context is already present, so `memory_search` should only be used for specific follow-up queries, not broad recall. This prevents the agent from redundantly searching for the same context that was just injected.
278
273
 
279
274
  Useful for giving the agent immediate context without waiting for it to search proactively.
280
275
 
@@ -284,7 +279,7 @@ When enabled, two things happen at `agent_end`, `after_compaction`, and `before_
284
279
 
285
280
  **1. Thread capture (always).** The full conversation is appended to a persistent thread. Unconditional, idempotent by message ID.
286
281
 
287
- **2. LLM distillation (when worthwhile).** A lightweight LLM triage determines if the conversation has save-worthy content. If yes, a full distillation pass creates structured memories with types, labels, and temporal data. Language-agnostic — works in any language.
282
+ **2. LLM distillation (when worthwhile).** A lightweight LLM triage determines if the conversation has save-worthy content. If yes, a full distillation pass creates structured memories with types, labels, and temporal data. Language-agnostic, works in any language.
288
283
 
289
284
  ## Design Decisions
290
285
 
@@ -292,23 +287,23 @@ Honest answers to common questions about how the memory system works.
292
287
 
293
288
  **Does the agent always search before answering?**
294
289
 
295
- No. The behavioral guidance nudges the agent to search, but doesn't force it. This is a deliberate tradeoff — forcing a search on every turn would add latency and cost for messages that don't need past context (like "hello" or "thanks"). In practice, modern LLMs follow behavioral guidance reliably for knowledge-related questions. If guaranteed recall matters for your use case, enable `sessionContext: true` — that injects relevant memories at prompt time, before the agent even processes your message.
290
+ No. The behavioral guidance nudges the agent to search, but doesn't force it. This is a deliberate tradeoff: forcing a search on every turn would add latency and cost for messages that don't need past context (like "hello" or "thanks"). In practice, modern LLMs follow behavioral guidance reliably for knowledge-related questions. If guaranteed recall matters for your use case, enable `sessionContext: true`. That injects relevant memories at prompt time, before the agent even processes your message.
296
291
 
297
292
  **What stops the agent from saving duplicate memories?**
298
293
 
299
- Two layers. First, the plugin checks for near-identical existing memories before every save. If a memory with ≥90% similarity already exists, the save is skipped and the existing memory is returned instead. Second, Nowledge Mem's Knowledge Agent runs in the background and handles deeper deduplication — it identifies semantic overlap across memories and links them via EVOLVES chains (replaces, enriches, confirms, or challenges). The plugin handles obvious duplicates; the Knowledge Agent handles subtle ones.
294
+ Two layers. First, the plugin checks for near-identical existing memories before every save. If a memory with >=90% similarity already exists, the save is skipped and the existing memory is returned instead. Second, Nowledge Mem's Knowledge Agent runs in the background and handles deeper deduplication, identifying semantic overlap across memories and linking them via EVOLVES chains (replaces, enriches, confirms, or challenges). The plugin handles obvious duplicates; the Knowledge Agent handles subtle ones.
300
295
 
301
296
  **When `sessionContext` is on, will the agent search again and get duplicate context?**
302
297
 
303
- The behavioral guidance adjusts when `sessionContext` is enabled. Instead of "search with memory_search when prior context would help," it tells the agent "relevant memories have already been injected — use memory_search only for specific follow-up queries." This reduces redundant searches. The injected context and manual search results are in different XML blocks, so even if overlap occurs, it doesn't confuse the agent — it just sees the same fact confirmed from two sources.
298
+ The behavioral guidance adjusts when `sessionContext` is enabled. Instead of "search with memory_search when prior context would help," it tells the agent "relevant memories have already been injected, use memory_search only for specific follow-up queries." This reduces redundant searches. The injected context and manual search results are in different XML blocks, so even if overlap occurs, it doesn't confuse the agent.
304
299
 
305
300
  **What happens to conversations I don't explicitly save?**
306
301
 
307
- With `sessionDigest` enabled (the default), every conversation is saved as a searchable thread — you can find it later with `nowledge_mem_thread_search`. On top of that, a lightweight LLM triage checks if the conversation contained decisions, insights, or preferences worth keeping as structured memories. If yes, they're extracted with proper types, labels, and temporal context. If the conversation was routine ("fix this typo"), nothing extra is saved.
302
+ With `sessionDigest` enabled (the default), every conversation is saved as a searchable thread. You can find it later with `nowledge_mem_thread_search`. On top of that, a lightweight LLM triage checks if the conversation contained decisions, insights, or preferences worth keeping as structured memories. If yes, they're extracted with proper types, labels, and temporal context. If the conversation was routine ("fix this typo"), nothing extra is saved.
308
303
 
309
304
  **Can memories be wrong or outdated?**
310
305
 
311
- Yes. Memories are what you or the AI saved at a point in time. Nowledge Mem's EVOLVES chains track how understanding changes — a newer memory can supersede, enrich, or challenge an older one. The Knowledge Agent identifies these relationships automatically. When you search, the relevance scoring considers recency, so newer memories rank higher by default.
306
+ Yes. Memories are what you or the AI saved at a point in time. Nowledge Mem's EVOLVES chains track how understanding changes: a newer memory can supersede, enrich, or challenge an older one. The Knowledge Agent identifies these relationships automatically. When you search, the relevance scoring considers recency, so newer memories rank higher by default.
312
307
 
313
308
  ## Slash Commands
314
309
 
@@ -327,24 +322,66 @@ openclaw nowledge-mem status
327
322
 
328
323
  ## Configuration
329
324
 
325
+ No config needed to get started. The defaults work for local mode.
326
+
327
+ To change settings, use the OpenClaw plugin settings UI. Changes take effect on restart.
328
+
330
329
  | Key | Type | Default | Description |
331
330
  |-----|------|---------|-------------|
332
331
  | `sessionContext` | boolean | `false` | Inject Working Memory + relevant memories at prompt time |
333
332
  | `sessionDigest` | boolean | `true` | Thread capture + LLM distillation at session end |
334
- | `maxContextResults` | integer | `5` | Max memories to inject at prompt time (1–20, only used when sessionContext is enabled) |
335
- | `digestMinInterval` | integer | `300` | Minimum seconds between session digests for the same thread (0–86400) |
333
+ | `digestMinInterval` | integer | `300` | Minimum seconds between session digests for the same thread (0-86400) |
334
+ | `maxContextResults` | integer | `5` | Max memories to inject at prompt time (1-20, only used when sessionContext is enabled) |
336
335
  | `apiUrl` | string | `""` | Remote server URL. Empty = local (`http://127.0.0.1:14242`) |
337
- | `apiKey` | string | `""` | API key for remote access. Injected as `NMEM_API_KEY` env var — never logged |
336
+ | `apiKey` | string | `""` | API key for remote access. Injected as `NMEM_API_KEY` env var, never logged |
337
+
338
+ ### Advanced: config file
339
+
340
+ For persistent or scripted config, create `~/.nowledge-mem/openclaw.json`:
341
+
342
+ ```json
343
+ {
344
+ "sessionContext": false,
345
+ "sessionDigest": true,
346
+ "digestMinInterval": 300,
347
+ "maxContextResults": 5,
348
+ "apiUrl": "",
349
+ "apiKey": ""
350
+ }
351
+ ```
352
+
353
+ The config file takes priority over OpenClaw settings. Only the keys you include are overridden; missing keys fall through to OpenClaw settings, then env vars, then defaults.
354
+
355
+ ### Advanced: environment variables
356
+
357
+ For CI, scripts, or Docker deployments, all options also support environment variables:
358
+
359
+ ```bash
360
+ NMEM_SESSION_CONTEXT=true
361
+ NMEM_SESSION_DIGEST=true
362
+ NMEM_DIGEST_MIN_INTERVAL=300
363
+ NMEM_MAX_CONTEXT_RESULTS=5
364
+ NMEM_API_URL=https://...
365
+ NMEM_API_KEY=your-key
366
+ ```
367
+
368
+ ### Priority
369
+
370
+ ```
371
+ config file > OpenClaw settings > env vars > defaults
372
+ ```
373
+
374
+ Use `nowledge_mem_status` (or `openclaw nowledge-mem status`) to see where each value comes from.
338
375
 
339
376
  ## What Makes This Different
340
377
 
341
378
  - **Local-first**: no API key, no cloud account. Your knowledge stays on your machine.
342
379
  - **Knowledge graph**: memories are connected nodes, not isolated vectors. EVOLVES edges track how understanding grows over time.
343
- - **Source provenance**: the Library ingests PDFs, DOCX, URLs — extracted knowledge links back to the exact document section it came from.
344
- - **Working Memory**: an AI-generated daily briefing that evolves — not a static user profile.
380
+ - **Source provenance**: the Library ingests PDFs, DOCX, URLs. Extracted knowledge links back to the exact document section it came from.
381
+ - **Working Memory**: an AI-generated daily briefing that evolves, not a static user profile.
345
382
  - **Cross-AI continuity**: knowledge captured in any tool (Cursor, Claude, ChatGPT) flows to OpenClaw and back.
346
- - **Typed memories**: 8 knowledge types mapped to graph node properties — structured understanding, not text blobs.
347
- - **Multi-signal search**: not just semantic similarity — combines embedding, BM25 keyword, label match, graph & community signals, and recency/importance decay. See [Search & Relevance](https://mem.nowledge.co/docs/search-relevance).
383
+ - **Typed memories**: 8 knowledge types mapped to graph node properties. Structured understanding, not text blobs.
384
+ - **Multi-signal search**: not just semantic similarity. Combines embedding, BM25 keyword, label match, graph & community signals, and recency/importance decay. See [Search & Relevance](https://mem.nowledge.co/docs/search-relevance).
348
385
 
349
386
  ## License
350
387
 
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "id": "openclaw-nowledge-mem",
3
- "version": "0.6.5",
3
+ "version": "0.6.8",
4
4
  "kind": "memory",
5
5
  "uiHints": {
6
6
  "sessionContext": {
7
7
  "label": "Session context injection",
8
- "help": "Inject Working Memory and relevant memories at prompt time. Off by default — the agent can call memory_search on demand instead."
8
+ "help": "Inject Working Memory and relevant memories at prompt time. Off by default \u2014 the agent can call memory_search on demand instead."
9
9
  },
10
10
  "sessionDigest": {
11
11
  "label": "Session digest at end",
12
- "help": "Capture conversation threads and distill key memories via LLM at session end. On by default — negligible cost, one triage call per session."
12
+ "help": "Capture conversation threads and distill key memories via LLM at session end. On by default \u2014 negligible cost, one triage call per session."
13
13
  },
14
14
  "digestMinInterval": {
15
15
  "label": "Minimum digest interval (seconds)",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "maxContextResults": {
19
19
  "label": "Max context results",
20
- "help": "How many memories to inject for each context cycle (1–20)"
20
+ "help": "How many memories to inject for each context cycle (1\u201320)"
21
21
  },
22
22
  "apiUrl": {
23
23
  "label": "Server URL (remote mode)",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "apiKey": {
27
27
  "label": "API key (remote mode)",
28
- "help": "Required when connecting to a remote server. Never logged or passed as a CLI argument — injected as NMEM_API_KEY env var only.",
28
+ "help": "Required when connecting to a remote server. Never logged or passed as a CLI argument \u2014 injected as NMEM_API_KEY env var only.",
29
29
  "secret": true
30
30
  }
31
31
  },
@@ -35,7 +35,7 @@
35
35
  "sessionContext": {
36
36
  "type": "boolean",
37
37
  "default": false,
38
- "description": "Inject Working Memory and recalled memories at prompt time. Off by default — the agent queries memory on demand via tools."
38
+ "description": "Inject Working Memory and recalled memories at prompt time. Off by default \u2014 the agent queries memory on demand via tools."
39
39
  },
40
40
  "sessionDigest": {
41
41
  "type": "boolean",
@@ -64,9 +64,8 @@
64
64
  "apiKey": {
65
65
  "type": "string",
66
66
  "default": "",
67
- "description": "API key for remote access. Stored in plugin config, injected as NMEM_API_KEY env var — never logged."
67
+ "description": "API key for remote access. Stored in plugin config, injected as NMEM_API_KEY env var. Never logged."
68
68
  }
69
- },
70
- "additionalProperties": false
69
+ }
71
70
  }
72
71
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nowledge/openclaw-nowledge-mem",
3
- "version": "0.6.5",
3
+ "version": "0.6.8",
4
4
  "type": "module",
5
5
  "description": "Nowledge Mem memory plugin for OpenClaw, local-first personal knowledge base",
6
6
  "author": {