Skip to content

Commit 93cfe68

Browse files
wey-guclaude
andcommitted
release(openclaw): v0.7.3 — plugin trust detection, tools.allow guidance
Status tool now checks plugins.allow from OpenClaw config: - Warns when allowlist exists but plugin is not included (blocked) - Tips when no allowlist is set (loads via entries.enabled, trust implicit) - Existing memory slot check unchanged (warns when pointing to memory-core) Simplified tool availability guidance across all docs: - Plugin tools register automatically when the plugin loads - No tools.allow or tools.alsoAllow config needed - Only config required: plugins.allow with the plugin ID - Listing nowledge_mem_* in tools.allow is a misconfiguration (silently stripped) Updated: README, SKILL.md, CLAUDE.md, CHANGELOG, website docs (EN + ZH) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent a00c608 commit 93cfe68

8 files changed

Lines changed: 68 additions & 12 deletions

File tree

nowledge-mem-openclaw-plugin/CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22

33
All notable changes to the Nowledge Mem OpenClaw plugin will be documented in this file.
44

5+
## [0.7.3] - 2026-03-30
6+
7+
### Added
8+
9+
- **Status tool now checks plugin trust and memory slot.** `nowledge_mem_status` reads `plugins.allow` from the OpenClaw config: warns when the allowlist exists but the plugin is missing (loading will be blocked); shows a tip when no allowlist is set (plugin loads via `entries.enabled`, but trust is implicit). Also warns when the memory slot points to `memory-core` instead of `openclaw-nowledge-mem` — a common misconfiguration after upgrading to OpenClaw 3.22+. Both checks include the exact fix command.
10+
- **Clarified that no `tools.*` config is needed.** All plugin tools register automatically when the plugin loads. Listing `nowledge_mem_*` names in `tools.allow` is a misconfiguration — OpenClaw silently strips allowlists that contain only plugin entries. The only config users need is `plugins.allow: ["openclaw-nowledge-mem"]`. Updated troubleshooting in README, SKILL.md, and website docs (EN + ZH).
11+
512
## [0.7.2] - 2026-03-30
613

714
### Added
815

916
- **Status tool now reports memory slot configuration.** `nowledge_mem_status` checks whether the OpenClaw memory slot points to `openclaw-nowledge-mem`. If another plugin (e.g. the built-in `memory-core`) holds the slot, the tool shows a warning with the fix command. This catches a common misconfiguration after upgrading to OpenClaw 3.22+, where the implicit slot default changed to `memory-core`.
10-
- **Documented HTTP gateway limitation.** Plugin tools (save, connections, timeline, etc.) are not accessible via the OpenClaw HTTP gateway API (`/tools/invoke`) due to the gateway's `stripPluginOnlyAllowlist` policy. The built-in `memory_search` and `memory_get` are core gateway tools and always work via HTTP. Added troubleshooting guidance across README, SKILL.md, and website docs (EN + ZH).
1117

1218
### Fixed
1319

nowledge-mem-openclaw-plugin/CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ When `contextEngine` points elsewhere (or is absent), hooks handle everything. N
118118
- `nowledge_mem_thread_fetch` - fetch messages from a specific thread. Start with a small page, then use `offset` + `limit` for progressive retrieval only when more context is needed.
119119

120120
### Diagnostics
121-
- `nowledge_mem_status` - show memory slot status, effective config (mode, apiUrl, apiKey set, sessionContext, sessionDigest, etc.), backend connectivity, and version. Warns if the memory slot points to `memory-core` instead of `openclaw-nowledge-mem` (common after OpenClaw 3.22+ upgrade). No parameters.
121+
- `nowledge_mem_status` - show plugin trust status, memory slot status, effective config (mode, apiUrl, apiKey set, sessionContext, sessionDigest, etc.), backend connectivity, and version. Checks `plugins.allow`: warns if set but plugin not included (loading blocked); shows tip if not set (plugin loads via `entries.enabled` but trust is implicit). Warns if the memory slot points to `memory-core` instead of `openclaw-nowledge-mem` (common after OpenClaw 3.22+ upgrade). No parameters.
122122

123123
## Skill Surface
124124

nowledge-mem-openclaw-plugin/README.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -455,11 +455,21 @@ Or set the slot manually in `~/.openclaw/openclaw.json`:
455455

456456
Restart OpenClaw after either change.
457457

458-
**Plugin tools return 404 via OpenClaw HTTP API (`/tools/invoke`)**
458+
**Plugin tools not available**
459459

460-
The `nowledge_mem_*` tools work in normal agent conversations but return 404 when called through OpenClaw's HTTP gateway API. This is an OpenClaw gateway limitation: the tool policy pipeline (`stripPluginOnlyAllowlist`) filters out plugin-registered tool names from `tools.allow`, so there is currently no configuration path to expose them via HTTP.
460+
All 10 plugin tools register automatically when the plugin loads. No tool-level config is needed — just make sure the plugin itself is trusted:
461461

462-
The built-in `memory_search` and `memory_get` are core gateway tools and always work via HTTP. For the full tool surface, use an agent conversation instead of the HTTP API.
462+
```json
463+
{
464+
"plugins": {
465+
"allow": ["openclaw-nowledge-mem"]
466+
}
467+
}
468+
```
469+
470+
If `openclaw status` shows a CRITICAL warning about `plugins.allow`, this is the fix. Run `nowledge_mem_status` inside a conversation to check both plugin trust and memory slot status.
471+
472+
Do not list `nowledge_mem_*` tool names in `tools.allow` — OpenClaw silently strips allowlists that contain only plugin entries, so the config looks active but does nothing.
463473

464474
**Search timeouts with many concurrent agents**
465475

nowledge-mem-openclaw-plugin/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ What to expect:
249249
| `plugins.allow is empty` warning | Add `openclaw-nowledge-mem` to `plugins.allow` if the user wants explicit trust |
250250
| Remote config seems ignored | Check whether `~/.nowledge-mem/openclaw.json` is overriding plugin settings |
251251
| Local mode unexpectedly talks to a remote server | Check for stale `NMEM_API_URL` / `NMEM_API_KEY` in the environment or an overriding `~/.nowledge-mem/openclaw.json` |
252-
| Plugin tools return 404 via HTTP API (`/tools/invoke`) | This is an OpenClaw gateway limitation — the tool policy pipeline strips plugin tool names from `tools.allow`. The built-in `memory_search` and `memory_get` work via HTTP (core gateway tools). For the full tool surface, use an agent conversation instead of the HTTP API. |
252+
| Plugin tools missing | Ensure the plugin is in `plugins.allow: ["openclaw-nowledge-mem"]`. Do **not** put `nowledge_mem_*` tool names in `tools.allow` — OpenClaw silently strips plugin-only allowlists. No `tools.*` config is needed; plugin tools load automatically when the plugin is allowed. |
253253

254254
## Notes for Agents
255255

nowledge-mem-openclaw-plugin/openclaw.plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"id": "openclaw-nowledge-mem",
3-
"version": "0.7.2",
3+
"version": "0.7.3",
44
"kind": "memory",
55
"skills": ["skills/memory-guide"],
66
"uiHints": {

nowledge-mem-openclaw-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@nowledge/openclaw-nowledge-mem",
3-
"version": "0.7.2",
3+
"version": "0.7.3",
44
"type": "module",
55
"description": "Nowledge Mem memory plugin for OpenClaw, local-first personal knowledge base",
66
"author": {

nowledge-mem-openclaw-plugin/src/index.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,14 @@ export default {
5454
api.registerTool(createThreadSearchTool(client, logger));
5555
api.registerTool(createThreadFetchTool(client, logger));
5656

57-
// Diagnostics — pass the resolved memory slot so the status tool
58-
// can warn when the slot points elsewhere (e.g. memory-core).
57+
// Diagnostics — pass runtime config so the status tool can detect:
58+
// - plugins.allow missing or not including this plugin
59+
// - memory slot pointing elsewhere (e.g. memory-core)
5960
const memorySlot = api.config?.plugins?.slots?.memory;
60-
api.registerTool(createStatusTool(client, logger, cfg, { memorySlot }));
61+
const pluginsAllow = api.config?.plugins?.allow;
62+
api.registerTool(
63+
createStatusTool(client, logger, cfg, { memorySlot, pluginsAllow }),
64+
);
6165

6266
// --- Context Engine registration ---
6367
// When the user sets `plugins.slots.contextEngine: "nowledge-mem"`,

nowledge-mem-openclaw-plugin/src/tools/status.js

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,43 @@ export function createStatusTool(client, _logger, cfg, runtimeInfo = {}) {
2323
const details = {};
2424
const sources = cfg._sources || {};
2525

26-
// 0. Memory slot check — detect misconfiguration early
26+
// 0a. Plugin trust check — detect missing plugins.allow
27+
const pluginsAllow = runtimeInfo.pluginsAllow;
28+
const pluginId = "openclaw-nowledge-mem";
29+
details.pluginsAllow = !Array.isArray(pluginsAllow)
30+
? "(not set)"
31+
: pluginsAllow.includes(pluginId)
32+
? "listed"
33+
: "set but plugin not included";
34+
35+
if (
36+
Array.isArray(pluginsAllow) &&
37+
pluginsAllow.length > 0 &&
38+
!pluginsAllow.includes(pluginId)
39+
) {
40+
lines.push(
41+
`⚠ plugins.allow is set but does not include "${pluginId}".`,
42+
);
43+
lines.push(
44+
" The plugin will be BLOCKED from loading unless it holds the memory slot or is explicitly enabled.",
45+
);
46+
lines.push(
47+
` Fix: add "${pluginId}" to plugins.allow in your OpenClaw config.`,
48+
);
49+
lines.push("");
50+
} else if (!Array.isArray(pluginsAllow) || pluginsAllow.length === 0) {
51+
lines.push(
52+
"Plugin trust: plugins.allow not set (plugin loads via entries.enabled)",
53+
);
54+
lines.push(
55+
` Tip: set plugins.allow to ["${pluginId}"] to pin trust explicitly.`,
56+
);
57+
lines.push("");
58+
} else {
59+
lines.push(`Plugin trust: ${pluginId} (allowlisted)`);
60+
}
61+
62+
// 0b. Memory slot check — detect misconfiguration early
2763
const memorySlot = runtimeInfo.memorySlot;
2864
details.memorySlot = memorySlot ?? "(unknown)";
2965
if (memorySlot && memorySlot !== "openclaw-nowledge-mem") {

0 commit comments

Comments
 (0)