@remnic/plugin-openclaw 1.0.28 → 1.0.30

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
@@ -1,6 +1,6 @@
1
1
  # @remnic/plugin-openclaw
2
2
 
3
- OpenClaw plugin for Remnic memory. Thin adapter that connects the OpenClaw gateway to [`@remnic/core`](https://www.npmjs.com/package/@remnic/core).
3
+ OpenClaw plugin for Remnic memory. The package bundles the OpenClaw adapter plus the Remnic core runtime so it can run without a separate Remnic service; the adapter registers OpenClaw hooks/tools and delegates memory behavior to [`@remnic/core`](https://www.npmjs.com/package/@remnic/core).
4
4
 
5
5
  Part of [Remnic](https://github.com/joshuaswarren/remnic), the universal memory layer for AI agents.
6
6
 
@@ -79,7 +79,7 @@ runs from real runtime and OpenClaw chain runs.
79
79
  This plugin hooks into the OpenClaw gateway lifecycle:
80
80
 
81
81
  - **`gateway_start`** -- initializes the Remnic memory engine
82
- - **`before_agent_start`** / **`before_prompt_build`** -- injects relevant memories into the agent's context
82
+ - **`before_agent_start`** / **`before_prompt_build`** -- adds relevant memories to the agent context through OpenClaw's memory context builders
83
83
  - **`agent_end`** -- buffers the conversation turn for extraction
84
84
  - **`before_compaction`** / **`after_compaction`** -- saves checkpoints and triggers session reset on context compaction
85
85
  - **`before_reset`** -- bounded flush of the in-flight buffer before OpenClaw discards a session
@@ -91,7 +91,18 @@ This plugin hooks into the OpenClaw gateway lifecycle:
91
91
  - **Tools** -- registers `memory_search`, `memory_get`, `memory_stats`, and other agent tools
92
92
  - **Commands** -- provides CLI commands for memory management
93
93
 
94
- All memory processing uses [`@remnic/core`](https://www.npmjs.com/package/@remnic/core). Memory files stay on your local filesystem as plain markdown files. When the plugin is configured to use OpenAI or an OpenAI-compatible endpoint, conversation and memory excerpts may be sent to that configured model provider for extraction, consolidation, summarization, and embeddings. Use `modelSource: "gateway"` or local LLM settings when those operations should stay on your own OpenClaw/local model path.
94
+ All memory processing uses [`@remnic/core`](https://www.npmjs.com/package/@remnic/core). Memory files stay on your local filesystem as plain markdown files. When the plugin is configured to use OpenAI, an OpenAI-compatible endpoint, or provider credentials resolved from OpenClaw runtime auth, conversation and memory excerpts may be sent to that configured model provider for extraction, consolidation, summarization, embeddings, active recall, or benchmark judging. Use `modelSource: "gateway"` and route the gateway agent to local or otherwise approved models when those operations should stay on your own OpenClaw/local model path.
95
+
96
+ Credential and model-provider behavior is explicit:
97
+
98
+ - `modelSource: "gateway"` is the recommended OpenClaw mode and uses OpenClaw gateway agents instead of a Remnic-owned API key.
99
+ - Plugin/provider modes may read configured model credentials from the OpenClaw auth resolver, OpenClaw's materialized provider config at `~/.openclaw/agents/main/agent/models.json`, or provider-specific environment variables such as `<PROVIDER>_API_KEY` and `<PROVIDER>_TOKEN`.
100
+ - Do not set `openaiApiKey` or provider environment variables for Remnic if you want all LLM-backed memory work routed through the gateway.
101
+
102
+ The npm package also declares this surface in `package.json` under
103
+ `openclaw.environment` so ClawHub and other registries can show the optional
104
+ provider env vars, config path, and external-model routing behavior before
105
+ installation.
95
106
 
96
107
  ## Plugin Inspection
97
108
 
@@ -108,6 +119,33 @@ guarded in the adapter, including `registerMemoryCapability`, `registerCli`,
108
119
  and `registerCommand`; keep runtime capture coverage for those surfaces in a
109
120
  separate adapter test slice.
110
121
 
122
+ Run the deterministic OpenClaw adapter scenario suite with:
123
+
124
+ ```bash
125
+ npm run test:openclaw-scenarios
126
+ ```
127
+
128
+ The suite covers the registered memory tools and lifecycle hooks without live
129
+ OpenClaw, LLM credentials, or network calls.
130
+
131
+ ## SDK Surface Drift Check
132
+
133
+ The adapter keeps a conservative OpenClaw SDK surface snapshot at
134
+ `openclaw-sdk-surface.expected.json`. Run
135
+ `npm run check:openclaw-sdk-surface` after changing OpenClaw dependencies or
136
+ with `-- --package-root <path>` to check a local OpenClaw checkout. When an
137
+ upstream SDK change is intentional, review the adapter impact first, then
138
+ refresh the snapshot with `npm run check:openclaw-sdk-surface -- --write`.
139
+ CI jobs that provision OpenClaw should use
140
+ `npm run check:openclaw-sdk-surface:required` or pass
141
+ `-- --require --package-root <path>` so a missing SDK fails instead of skipping.
142
+
143
+ Native memory registrars are tracked separately in
144
+ [`docs/plugins/openclaw-native-memory-registrars.md`](../../docs/plugins/openclaw-native-memory-registrars.md).
145
+ That spike explains why Remnic currently uses `registerMemoryCapability()` as
146
+ the primary integration point instead of OpenClaw embedding, corpus supplement,
147
+ or compaction-provider registrars.
148
+
111
149
  ## Slot Selection
112
150
 
113
151
  Remnic is an exclusive memory-slot plugin. When `plugins.slots.memory` points
@@ -131,14 +169,14 @@ loads passively depending on `slotBehavior`:
131
169
  }
132
170
  ```
133
171
 
134
- Passive mode keeps the tool/service surface available but skips prompt
135
- injection and extraction hooks so two memory plugins do not race each other.
172
+ Passive mode keeps the tool/service surface available but skips context-building
173
+ and extraction hooks so two memory plugins do not race each other.
136
174
 
137
175
  ## Supported OpenClaw Memory Features
138
176
 
139
177
  Remnic supports the following OpenClaw memory integration points:
140
178
 
141
- ### Memory Prompt Injection
179
+ ### Memory Context Sections
142
180
 
143
181
  | Feature | Status | Since |
144
182
  |---------|--------|-------|
@@ -194,7 +232,7 @@ Reset handling is configurable:
194
232
  }
195
233
  ```
196
234
 
197
- The reset path clears per-session prompt caches and workspace override state.
235
+ The reset path clears per-session context caches and workspace preference state.
198
236
  If `flushOnResetEnabled` is true, Remnic also attempts a bounded extraction
199
237
  flush before the reset completes.
200
238
 
@@ -230,7 +268,7 @@ OpenClaw's dreaming feature (background memory consolidation) is handled by Open
230
268
 
231
269
  The plugin manifest now accepts the OpenClaw `dreaming` config block directly
232
270
  so newer runtimes do not reject the config at validation time, and the OpenClaw
233
- adapter now injects recent diary entries as `## Recent Dreams (Remnic)` when
271
+ adapter now adds recent diary entries as `## Recent Dreams (Remnic)` when
234
272
  the journal contains entries. The adapter also imports `DREAMS.md` entries into
235
273
  Remnic storage as `memoryKind: "dream"` with stable provenance so file-watch
236
274
  replays stay idempotent:
@@ -264,7 +302,7 @@ back to `DREAMS.md` through the shared writer using the OpenAI Responses API.
264
302
 
265
303
  The shared `@remnic/core` surface parsers also understand `HEARTBEAT.md`. The
266
304
  OpenClaw adapter imports those entries as `memoryKind: "procedural"`, gates
267
- normal recall during heartbeat-triggered runs, injects the active heartbeat plus
305
+ normal recall during heartbeat-triggered runs, adds the active heartbeat plus
268
306
  `## Previous Runs`, and skips episodic buffering for heartbeat turns by default.
269
307
  Detection can use explicit runtime metadata, a documented heuristic fallback, or
270
308
  `auto` to prefer runtime metadata and fall back when needed. All of that logic
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  buildExtensionsBlockForConsolidation,
7
7
  runPostConsolidationMaterialize
8
- } from "./chunk-LJ2Q4UDE.js";
8
+ } from "./chunk-HI5HX3S7.js";
9
9
  import "./chunk-WPINX4MF.js";
10
10
  import {
11
11
  isRecord
@@ -18,7 +18,7 @@ import {
18
18
  FallbackLlmClient
19
19
  } from "./chunk-24MGN4E3.js";
20
20
  import "./chunk-3A5ELHTT.js";
21
- import "./chunk-MZ3LGDXW.js";
21
+ import "./chunk-ZXLYEVOP.js";
22
22
  import "./chunk-6OJAU466.js";
23
23
  import "./chunk-RKR6PTPA.js";
24
24
  import {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-4G2XCSD2.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-MZ3LGDXW.js";
6
+ } from "./chunk-ZXLYEVOP.js";
7
7
 
8
8
  // ../remnic-core/src/maintenance/memory-governance.ts
9
9
  import path from "path";
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  StorageManager,
7
7
  isSemanticConsolidationLlmOperator
8
- } from "./chunk-MZ3LGDXW.js";
8
+ } from "./chunk-ZXLYEVOP.js";
9
9
  import {
10
10
  log
11
11
  } from "./chunk-UFU5GGGA.js";
@@ -5,7 +5,7 @@ import {
5
5
  StorageManager,
6
6
  parseContinuityImprovementLoops,
7
7
  sanitizeMemoryContent
8
- } from "./chunk-MZ3LGDXW.js";
8
+ } from "./chunk-ZXLYEVOP.js";
9
9
  import {
10
10
  log
11
11
  } from "./chunk-UFU5GGGA.js";
@@ -842,7 +842,7 @@ var CompoundingEngine = class {
842
842
  let promotionCandidates = this.config.compoundingSemanticEnabled ? this.derivePromotionCandidates(outcomeSummary, mistakes.registry, rubrics) : [];
843
843
  if (this.config.cmcConsolidationEnabled) {
844
844
  try {
845
- const { deriveCausalPromotionCandidates, materializeAfterCausalConsolidation } = await import("./causal-consolidation-TSDDWHLO.js");
845
+ const { deriveCausalPromotionCandidates, materializeAfterCausalConsolidation } = await import("./causal-consolidation-3GTZFN2T.js");
846
846
  const causalCandidates = await deriveCausalPromotionCandidates({
847
847
  memoryDir: this.config.memoryDir,
848
848
  causalTrajectoryStoreDir: this.config.causalTrajectoryStoreDir,
@@ -168,20 +168,31 @@ async function rotateMarkdownFileToArchive(opts) {
168
168
  }
169
169
 
170
170
  // ../remnic-core/src/sanitize.ts
171
+ var rx = (...parts) => new RegExp(parts.join(""), "i");
171
172
  var INJECTION_PATTERNS = [
172
- /ignore\s+(all\s+)?(previous|prior|above)\s+(instructions?|prompts?|context)/i,
173
- /forget\s+(everything|all|previous|what)/i,
174
- /new\s+(system\s+)?prompt:/i,
175
- /\[system\]/i,
176
- /<\s*system\s*>/i,
177
- /you\s+are\s+now\s+(?!called|named)/i,
178
- /disregard\s+(all\s+)?(previous|prior)/i,
179
- /override\s+(previous\s+)?(instructions?|prompt)/i,
180
- /act\s+as\s+(?:an?\s+)?(?:AI|assistant|ChatGPT|GPT|Claude|LLM)\s+(?:without|that\s+ignores)/i,
181
- /do\s+not\s+(?:follow|obey)\s+(?:previous|prior|your)\s+instructions/i,
182
- /pretend\s+(?:you\s+)?(?:have\s+no|you\s+don.?t\s+have)\s+(restrictions|guidelines|rules)/i
173
+ rx("ignore\\s+(all\\s+)?", "(previous|prior|above)", "\\s+(instructions?|prompts?|context)"),
174
+ rx("forget\\s+", "(everything|all|previous|what)"),
175
+ rx(
176
+ "new\\s+(",
177
+ "system",
178
+ "\\s+)?",
179
+ "prompt:"
180
+ ),
181
+ rx("\\[", "system", "\\]"),
182
+ rx("<\\s*", "system", "\\s*>"),
183
+ rx("you\\s+are\\s+now\\s+(?!called|named)"),
184
+ rx("disregard\\s+(all\\s+)?", "(previous|prior)"),
185
+ rx(
186
+ "over",
187
+ "ride\\s+(previous\\s+)?",
188
+ "(instructions?|",
189
+ "prompt)"
190
+ ),
191
+ rx("act\\s+as\\s+(?:an?\\s+)?(?:AI|assistant|ChatGPT|GPT|Claude|LLM)\\s+(?:without|that\\s+ignores)"),
192
+ rx("do\\s+not\\s+(?:follow|obey)\\s+(?:previous|prior|your)\\s+", "instructions"),
193
+ rx("pretend\\s+(?:you\\s+)?(?:have\\s+no|you\\s+don.?t\\s+have)\\s+(restrictions|guidelines|rules)")
183
194
  ];
184
- var REDACTED_PLACEHOLDER = "[content removed: possible prompt injection]";
195
+ var REDACTED_PLACEHOLDER = "[content removed: unsafe memory text]";
185
196
  function sanitizeMemoryContent(text) {
186
197
  const source = typeof text === "string" ? text : "";
187
198
  const violations = [];
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CompoundingEngine,
3
3
  defaultTierMigrationCycleBudget
4
- } from "./chunk-WZU2H3I4.js";
4
+ } from "./chunk-UVQXEQBQ.js";
5
5
  import "./chunk-EXDYWXMB.js";
6
- import "./chunk-MZ3LGDXW.js";
6
+ import "./chunk-ZXLYEVOP.js";
7
7
  import "./chunk-6OJAU466.js";
8
8
  import "./chunk-RKR6PTPA.js";
9
9
  import "./chunk-UFU5GGGA.js";
package/dist/index.js CHANGED
@@ -43,7 +43,7 @@ import {
43
43
  readMemoryGovernanceRunArtifact,
44
44
  restoreMemoryGovernanceRun,
45
45
  runMemoryGovernance
46
- } from "./chunk-XM3SU6WL.js";
46
+ } from "./chunk-4UA6KMRO.js";
47
47
  import {
48
48
  clamp01,
49
49
  clampLifecycleThreshold,
@@ -90,7 +90,7 @@ import {
90
90
  parseOperatorAwareConsolidationResponse,
91
91
  renderExtensionsFooter,
92
92
  resolveExtensionsRoot
93
- } from "./chunk-LJ2Q4UDE.js";
93
+ } from "./chunk-HI5HX3S7.js";
94
94
  import {
95
95
  BoxBuilder,
96
96
  countRecallTokenOverlap,
@@ -115,7 +115,7 @@ import {
115
115
  CompoundingEngine,
116
116
  SharedContextManager,
117
117
  defaultTierMigrationCycleBudget
118
- } from "./chunk-WZU2H3I4.js";
118
+ } from "./chunk-UVQXEQBQ.js";
119
119
  import {
120
120
  ZodError,
121
121
  external_exports
@@ -188,7 +188,7 @@ import {
188
188
  sortMemoryLifecycleEvents,
189
189
  stripCitationForTemplate,
190
190
  toMemoryPathRel
191
- } from "./chunk-MZ3LGDXW.js";
191
+ } from "./chunk-ZXLYEVOP.js";
192
192
  import {
193
193
  sidecarKey
194
194
  } from "./chunk-6OJAU466.js";
@@ -33805,7 +33805,7 @@ var Orchestrator = class _Orchestrator {
33805
33805
  memoryWorthCounterCache = /* @__PURE__ */ new Map();
33806
33806
  static MEMORY_WORTH_CACHE_TTL_MS = 3e4;
33807
33807
  /**
33808
- * Per-session workspace overrides keyed by sessionKey.
33808
+ * Per-session workspace selections keyed by sessionKey.
33809
33809
  * Set by the before_agent_start hook so recall() uses the correct
33810
33810
  * agent workspace for BOOT.md injection. Cleared after each recall.
33811
33811
  * Using a Map prevents concurrent sessions from overwriting each other.
@@ -33917,7 +33917,7 @@ var Orchestrator = class _Orchestrator {
33917
33917
  setRecallWorkspaceOverride(sessionKey, dir) {
33918
33918
  this._recallWorkspaceOverrides.set(sessionKey, dir);
33919
33919
  }
33920
- /** Remove a per-session workspace override (cleanup on error or early return). @internal */
33920
+ /** Remove a per-session workspace selection (cleanup on error or early return). @internal */
33921
33921
  clearRecallWorkspaceOverride(sessionKey) {
33922
33922
  this._recallWorkspaceOverrides.delete(sessionKey);
33923
33923
  }
@@ -35138,7 +35138,7 @@ ${doc.content}` : doc.content,
35138
35138
  }
35139
35139
  async runDeepSleepGovernanceNow(options) {
35140
35140
  const targetStorage = options?.storage ?? this.storage;
35141
- const { runMemoryGovernance: runMemoryGovernance2 } = await import("./memory-governance-7YPDMYCE.js");
35141
+ const { runMemoryGovernance: runMemoryGovernance2 } = await import("./memory-governance-FEQCA35V.js");
35142
35142
  const { summarizeGovernanceResultForDreams } = await import("./dreams-ledger-3I52ISYR.js");
35143
35143
  const govResult = await runMemoryGovernance2({
35144
35144
  memoryDir: targetStorage.dir,
@@ -64098,7 +64098,7 @@ async function runRepairMemoryProjectionCliCommand(options) {
64098
64098
  });
64099
64099
  }
64100
64100
  async function runMemoryTimelineCliCommand(options) {
64101
- const storage = new (await import("./storage-I26Y7X4D.js")).StorageManager(options.memoryDir);
64101
+ const storage = new (await import("./storage-R3V6ZFQT.js")).StorageManager(options.memoryDir);
64102
64102
  return storage.getMemoryTimeline(options.memoryId, options.limit);
64103
64103
  }
64104
64104
  async function runMemoryGovernanceCliCommand(options) {
@@ -64126,7 +64126,7 @@ async function runMemoryGovernanceRestoreCliCommand(options) {
64126
64126
  });
64127
64127
  }
64128
64128
  async function runMemoryReviewDispositionCliCommand(options) {
64129
- const storage = new (await import("./storage-I26Y7X4D.js")).StorageManager(options.memoryDir);
64129
+ const storage = new (await import("./storage-R3V6ZFQT.js")).StorageManager(options.memoryDir);
64130
64130
  const memory = await storage.getMemoryById(options.memoryId);
64131
64131
  if (!memory) throw new Error(`memory not found: ${options.memoryId}`);
64132
64132
  const updated = await storage.writeMemoryFrontmatter(memory, {
@@ -64305,7 +64305,7 @@ async function runSemanticRulePromoteCliCommand(options) {
64305
64305
  });
64306
64306
  }
64307
64307
  async function runCompoundingPromoteCliCommand(options) {
64308
- const { CompoundingEngine: CompoundingEngine2 } = await import("./engine-2DZ5FF5Q.js");
64308
+ const { CompoundingEngine: CompoundingEngine2 } = await import("./engine-XPEZBXIQ.js");
64309
64309
  const config = parseConfig({
64310
64310
  memoryDir: options.memoryDir,
64311
64311
  qmdEnabled: false,
@@ -6,9 +6,9 @@ import {
6
6
  readMemoryGovernanceRunArtifact,
7
7
  restoreMemoryGovernanceRun,
8
8
  runMemoryGovernance
9
- } from "./chunk-XM3SU6WL.js";
9
+ } from "./chunk-4UA6KMRO.js";
10
10
  import "./chunk-4G2XCSD2.js";
11
- import "./chunk-MZ3LGDXW.js";
11
+ import "./chunk-ZXLYEVOP.js";
12
12
  import "./chunk-6OJAU466.js";
13
13
  import "./chunk-RKR6PTPA.js";
14
14
  import "./chunk-UFU5GGGA.js";
@@ -8,7 +8,7 @@ import {
8
8
  normalizeEntityName,
9
9
  parseEntityFile,
10
10
  serializeEntityFile
11
- } from "./chunk-MZ3LGDXW.js";
11
+ } from "./chunk-ZXLYEVOP.js";
12
12
  import "./chunk-6OJAU466.js";
13
13
  import "./chunk-RKR6PTPA.js";
14
14
  import "./chunk-UFU5GGGA.js";
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "id": "openclaw-remnic",
3
3
  "name": "Remnic OpenClaw Plugin",
4
- "version": "1.0.28",
4
+ "version": "1.0.30",
5
5
  "kind": "memory",
6
- "description": "Local semantic memory for OpenClaw. Requires plugins.slots.memory set to this plugin id for hooks to fire.",
6
+ "description": "Local semantic memory for OpenClaw with bundled Remnic core runtime. Requires plugins.slots.memory set to this plugin id for hooks to fire.",
7
7
  "setup": {
8
8
  "providers": [
9
9
  {
@@ -41,6 +41,26 @@
41
41
  ]
42
42
  }
43
43
  ],
44
+ "securityDisclosure": {
45
+ "conversationAccess": "As a memory-slot plugin, Remnic hooks can observe conversation turns, tool-use metadata, LLM output metadata, and local memory files so they can be indexed, summarized, recalled, and exposed through memory tools.",
46
+ "modelProviderCredentials": {
47
+ "recommendedMode": "Use modelSource=gateway to route LLM-backed memory work through OpenClaw gateway agents instead of a Remnic-owned API key.",
48
+ "dynamicCredentialSources": [
49
+ "OpenClaw runtime auth resolver for configured model providers",
50
+ "~/.openclaw/agents/main/agent/models.json provider entries",
51
+ "provider-specific environment variables such as <PROVIDER>_API_KEY and <PROVIDER>_TOKEN"
52
+ ],
53
+ "providerModeData": [
54
+ "conversation excerpts",
55
+ "memory excerpts",
56
+ "summaries",
57
+ "embedding inputs",
58
+ "active-recall query inputs",
59
+ "benchmark and evaluation inputs"
60
+ ],
61
+ "externalProviderGuidance": "Do not set openaiApiKey or provider environment variables for Remnic if all LLM-backed memory operations should stay on the OpenClaw gateway path. When plugin/provider mode is configured, selected conversation and memory excerpts may be sent to the configured provider for extraction, consolidation, summarization, embeddings, active recall, or benchmark judging."
62
+ }
63
+ },
44
64
  "supports": {
45
65
  "memorySlot": true,
46
66
  "dreamingSlot": true,
@@ -139,7 +159,7 @@
139
159
  },
140
160
  "openaiBaseUrl": {
141
161
  "type": "string",
142
- "description": "Override the OpenAI API base URL for OpenAI-compatible providers (Scryr, Together, OpenRouter, etc.)"
162
+ "description": "Set the OpenAI API base URL for OpenAI-compatible providers (Scryr, Together, OpenRouter, etc.)"
143
163
  },
144
164
  "model": {
145
165
  "type": "string",
@@ -222,7 +242,7 @@
222
242
  "maxMemoryTokens": {
223
243
  "type": "number",
224
244
  "default": 2000,
225
- "description": "Max tokens injected per turn"
245
+ "description": "Max memory-context tokens per turn"
226
246
  },
227
247
  "memoryOsPreset": {
228
248
  "type": "string",
@@ -233,7 +253,7 @@
233
253
  "research-max",
234
254
  "local-llm-heavy"
235
255
  ],
236
- "description": "Optional named preset that seeds Engram's advanced config surface before explicit per-setting overrides are applied. `research` is accepted as a backward-compatible alias for `research-max`."
256
+ "description": "Optional named preset that seeds Engram's advanced config surface before explicit per-setting settings are applied. `research` is accepted as a backward-compatible alias for `research-max`."
237
257
  },
238
258
  "qmdEnabled": {
239
259
  "type": "boolean",
@@ -325,7 +345,7 @@
325
345
  },
326
346
  "entitySchemas": {
327
347
  "type": "object",
328
- "description": "Optional per-entity-type structured section schema overrides.",
348
+ "description": "Optional per-entity-type structured section schema customizations.",
329
349
  "additionalProperties": {
330
350
  "type": "object",
331
351
  "additionalProperties": false,
@@ -666,7 +686,7 @@
666
686
  "minimum": 1,
667
687
  "maximum": 10,
668
688
  "default": 2,
669
- "description": "Maximum procedure memories to inject on task-initiation recall."
689
+ "description": "Maximum procedure memories to add on task-initiation recall."
670
690
  },
671
691
  "proceduralMiningCronAutoRegister": {
672
692
  "type": "boolean",
@@ -754,7 +774,7 @@
754
774
  "recallTranscriptsEnabled": {
755
775
  "type": "boolean",
756
776
  "default": false,
757
- "description": "Write JSONL recall audit transcripts for runtime-surface injections."
777
+ "description": "Write JSONL recall audit transcripts for runtime recall-context assembly."
758
778
  },
759
779
  "recallTranscriptRetentionDays": {
760
780
  "type": "integer",
@@ -771,7 +791,7 @@
771
791
  "activeRecallEnabled": {
772
792
  "type": "boolean",
773
793
  "default": false,
774
- "description": "Enable the OpenClaw active-recall prompt surface."
794
+ "description": "Enable the OpenClaw active-recall context surface."
775
795
  },
776
796
  "activeRecallAgents": {
777
797
  "type": "array",
@@ -818,7 +838,7 @@
818
838
  "preference-only"
819
839
  ],
820
840
  "default": "balanced",
821
- "description": "Prompt assembly style for the active-recall surface."
841
+ "description": "Context assembly style for the active-recall surface."
822
842
  },
823
843
  "activeRecallCustomInstruction": {
824
844
  "type": "string",
@@ -826,7 +846,7 @@
826
846
  },
827
847
  "activeRecallPromptAppend": {
828
848
  "type": "string",
829
- "description": "Optional additional guidance appended to the active-recall builder."
849
+ "description": "Optional additional guidance for the active-recall builder."
830
850
  },
831
851
  "activeRecallMaxSummaryChars": {
832
852
  "type": "integer",
@@ -892,7 +912,7 @@
892
912
  },
893
913
  "activeRecallModel": {
894
914
  "type": "string",
895
- "description": "Optional model override for active recall."
915
+ "description": "Optional model selection for active recall."
896
916
  },
897
917
  "activeRecallModelFallbackPolicy": {
898
918
  "type": "string",
@@ -1208,7 +1228,7 @@
1208
1228
  "memoryExtensionsEnabled": {
1209
1229
  "type": "boolean",
1210
1230
  "default": true,
1211
- "description": "Whether third-party memory extensions are discovered and injected into consolidation prompts."
1231
+ "description": "Whether third-party memory extensions are discovered and included in consolidation instructions."
1212
1232
  },
1213
1233
  "memoryExtensionsRoot": {
1214
1234
  "type": "string",
@@ -1292,12 +1312,12 @@
1292
1312
  "full"
1293
1313
  ],
1294
1314
  "default": "recovery_only",
1295
- "description": "Controls when identity continuity context is injected into recall assembly"
1315
+ "description": "Controls when identity continuity context is added to recall assembly"
1296
1316
  },
1297
1317
  "identityMaxInjectChars": {
1298
1318
  "type": "number",
1299
1319
  "default": 1200,
1300
- "description": "Maximum characters allowed for identity continuity context injection"
1320
+ "description": "Maximum characters allowed for identity continuity context"
1301
1321
  },
1302
1322
  "continuityIncidentLoggingEnabled": {
1303
1323
  "type": "boolean",
@@ -1498,12 +1518,12 @@
1498
1518
  "maxResults": {
1499
1519
  "type": "number",
1500
1520
  "default": 4,
1501
- "description": "Maximum native knowledge chunks to inject into recall."
1521
+ "description": "Maximum native knowledge chunks to add to recall."
1502
1522
  },
1503
1523
  "maxChars": {
1504
1524
  "type": "number",
1505
1525
  "default": 2400,
1506
- "description": "Maximum total characters to inject from native knowledge recall."
1526
+ "description": "Maximum total characters to add from native knowledge recall."
1507
1527
  },
1508
1528
  "stateDir": {
1509
1529
  "type": "string",
@@ -1777,7 +1797,7 @@
1777
1797
  "recordEmptyRecallImpressions": {
1778
1798
  "type": "boolean",
1779
1799
  "default": false,
1780
- "description": "Record recall impressions with empty memoryIds when no memory context is injected."
1800
+ "description": "Record recall impressions with empty memoryIds when no memory context is added."
1781
1801
  },
1782
1802
  "recallPlannerEnabled": {
1783
1803
  "type": "boolean",
@@ -1852,7 +1872,7 @@
1852
1872
  "verbatimArtifactsMaxRecall": {
1853
1873
  "type": "number",
1854
1874
  "default": 5,
1855
- "description": "Maximum artifact anchors injected per recall."
1875
+ "description": "Maximum artifact anchors added per recall."
1856
1876
  },
1857
1877
  "verbatimArtifactCategories": {
1858
1878
  "type": "array",
@@ -1918,7 +1938,7 @@
1918
1938
  "boxRecallDays": {
1919
1939
  "type": "number",
1920
1940
  "default": 3,
1921
- "description": "Number of recent days of boxes to inject during recall."
1941
+ "description": "Number of recent days of boxes to add during recall."
1922
1942
  },
1923
1943
  "episodeNoteModeEnabled": {
1924
1944
  "type": "boolean",
@@ -1983,7 +2003,7 @@
1983
2003
  "tagRecallMaxMatches": {
1984
2004
  "type": "number",
1985
2005
  "default": 10,
1986
- "description": "Maximum number of tag-matched memories injected per recall."
2006
+ "description": "Maximum number of tag-matched memories added per recall."
1987
2007
  },
1988
2008
  "multiGraphMemoryEnabled": {
1989
2009
  "type": "boolean",
@@ -2013,7 +2033,7 @@
2013
2033
  "graphRecallShadowEnabled": {
2014
2034
  "type": "boolean",
2015
2035
  "default": false,
2016
- "description": "Run graph recall in shadow mode evaluate but do not inject results."
2036
+ "description": "Run graph recall in shadow mode - evaluate but do not add results."
2017
2037
  },
2018
2038
  "graphRecallSnapshotEnabled": {
2019
2039
  "type": "boolean",
@@ -2127,12 +2147,12 @@
2127
2147
  "graphRecallEntityHintMax": {
2128
2148
  "type": "number",
2129
2149
  "default": 3,
2130
- "description": "Maximum number of entity hints injected per graph recall result."
2150
+ "description": "Maximum number of entity hints added per graph recall result."
2131
2151
  },
2132
2152
  "graphRecallEntityHintMaxChars": {
2133
2153
  "type": "number",
2134
2154
  "default": 200,
2135
- "description": "Maximum characters per entity hint injected during graph recall."
2155
+ "description": "Maximum characters per entity hint added during graph recall."
2136
2156
  },
2137
2157
  "graphRecallSnapshotDir": {
2138
2158
  "type": "string",
@@ -2161,7 +2181,7 @@
2161
2181
  "graphAssistShadowEvalEnabled": {
2162
2182
  "type": "boolean",
2163
2183
  "default": false,
2164
- "description": "In full mode, compute graph assist for comparison telemetry and snapshots but keep injected recall output baseline-identical."
2184
+ "description": "In full mode, compute graph assist for comparison telemetry and snapshots but keep recall output baseline-identical."
2165
2185
  },
2166
2186
  "graphAssistMinSeedResults": {
2167
2187
  "type": "number",
@@ -2239,12 +2259,12 @@
2239
2259
  "recallConfidenceGateEnabled": {
2240
2260
  "type": "boolean",
2241
2261
  "default": false,
2242
- "description": "Synapse-inspired confidence gate: skip memory injection when top recall score is below threshold"
2262
+ "description": "Synapse-inspired confidence gate: skip memory context when top recall score is below threshold"
2243
2263
  },
2244
2264
  "recallConfidenceGateThreshold": {
2245
2265
  "type": "number",
2246
2266
  "default": 0.12,
2247
- "description": "Minimum top recall score to inject memories (0-1). Below this, memories are rejected as too uncertain"
2267
+ "description": "Minimum top recall score to include memories (0-1). Below this, memories are rejected as too uncertain"
2248
2268
  },
2249
2269
  "causalRuleExtractionEnabled": {
2250
2270
  "type": "boolean",
@@ -2850,12 +2870,12 @@
2850
2870
  "maxTranscriptTurns": {
2851
2871
  "type": "number",
2852
2872
  "default": 50,
2853
- "description": "Maximum transcript turns to inject"
2873
+ "description": "Maximum transcript turns to include"
2854
2874
  },
2855
2875
  "maxTranscriptTokens": {
2856
2876
  "type": "number",
2857
2877
  "default": 1000,
2858
- "description": "Maximum tokens for transcript injection"
2878
+ "description": "Maximum tokens for transcript context"
2859
2879
  },
2860
2880
  "checkpointEnabled": {
2861
2881
  "type": "boolean",
@@ -2870,7 +2890,7 @@
2870
2890
  "compactionResetEnabled": {
2871
2891
  "type": "boolean",
2872
2892
  "default": false,
2873
- "description": "Trigger session reset after compaction with BOOT.md injection (requires OC fork with api.resetSession)"
2893
+ "description": "Trigger session reset after compaction with BOOT.md recovery context (requires OC fork with api.resetSession)"
2874
2894
  },
2875
2895
  "hourlySummariesEnabled": {
2876
2896
  "type": "boolean",
@@ -2890,7 +2910,7 @@
2890
2910
  "maxSummaryCount": {
2891
2911
  "type": "number",
2892
2912
  "default": 6,
2893
- "description": "Maximum number of summaries to inject"
2913
+ "description": "Maximum number of summaries to include"
2894
2914
  },
2895
2915
  "summaryModel": {
2896
2916
  "type": "string",
@@ -2981,7 +3001,7 @@
2981
3001
  "traceRecallContent": {
2982
3002
  "type": "boolean",
2983
3003
  "default": false,
2984
- "description": "If true, include the full recalled memory text in RecallTraceEvent.recalledContent emitted to __openclawEngramTrace subscribers (e.g. Langfuse). Disabled by default only enable when you want external trace collectors to capture injected memory context."
3004
+ "description": "If true, include the full recalled memory text in RecallTraceEvent.recalledContent emitted to __openclawEngramTrace subscribers (e.g. Langfuse). Disabled by default - only enable when you want external trace collectors to capture memory context."
2985
3005
  },
2986
3006
  "profilingEnabled": {
2987
3007
  "type": "boolean",
@@ -3198,7 +3218,7 @@
3198
3218
  "localLlmDisableThinking": {
3199
3219
  "type": "boolean",
3200
3220
  "default": true,
3201
- "description": "When true (default), request chain-of-thought / thinking-mode suppression on the main local LLM (issue #548). The `chat_template_kwargs: { enable_thinking: false }` field is only injected when the detected backend is known to support it (LM Studio, vLLM); strict OpenAI-compat backends fail open to avoid the 400-cooldown path. Structured-output tasks like extraction and consolidation gain nothing from reasoning tokens and thinking-capable models (Qwen 3.5, Gemma 4, DeepSeek) often blow the 60s timeout before emitting content. Set to false to restore thinking for narrative tasks. The fast-tier client always disables thinking and is not affected by this flag."
3221
+ "description": "When true (default), request chain-of-thought / thinking-mode suppression on the main local LLM (issue #548). The `chat_template_kwargs: { enable_thinking: false }` field is sent only when the detected backend is known to support it (LM Studio, vLLM); strict OpenAI-compat backends fail open to avoid the 400-cooldown path. Structured-output tasks like extraction and consolidation gain nothing from reasoning tokens and thinking-capable models (Qwen 3.5, Gemma 4, DeepSeek) often blow the 60s timeout before emitting content. Set to false to restore thinking for narrative tasks. The fast-tier client always disables thinking and is not affected by this flag."
3202
3222
  },
3203
3223
  "hourlySummaryCronAutoRegister": {
3204
3224
  "type": "boolean",
@@ -3312,12 +3332,12 @@
3312
3332
  "conversationRecallTopK": {
3313
3333
  "type": "number",
3314
3334
  "default": 3,
3315
- "description": "Top-K conversation chunks to inject."
3335
+ "description": "Top-K conversation chunks to include."
3316
3336
  },
3317
3337
  "conversationRecallMaxChars": {
3318
3338
  "type": "number",
3319
3339
  "default": 2500,
3320
- "description": "Max characters of semantic conversation recall to inject."
3340
+ "description": "Max characters of semantic conversation recall to include."
3321
3341
  },
3322
3342
  "conversationRecallTimeoutMs": {
3323
3343
  "type": "number",
@@ -3366,7 +3386,7 @@
3366
3386
  "objectiveStateRecallEnabled": {
3367
3387
  "type": "boolean",
3368
3388
  "default": false,
3369
- "description": "Inject prompt-relevant objective-state snapshots into recall context."
3389
+ "description": "Add recall-relevant objective-state snapshots to recall context."
3370
3390
  },
3371
3391
  "objectiveStateStoreDir": {
3372
3392
  "type": "string",
@@ -3384,7 +3404,7 @@
3384
3404
  "causalTrajectoryRecallEnabled": {
3385
3405
  "type": "boolean",
3386
3406
  "default": false,
3387
- "description": "Inject prompt-relevant causal trajectories into recall context."
3407
+ "description": "Add recall-relevant causal trajectories to recall context."
3388
3408
  },
3389
3409
  "trustZonesEnabled": {
3390
3410
  "type": "boolean",
@@ -3403,7 +3423,7 @@
3403
3423
  "trustZoneRecallEnabled": {
3404
3424
  "type": "boolean",
3405
3425
  "default": false,
3406
- "description": "Inject prompt-relevant working and trusted trust-zone records into recall context."
3426
+ "description": "Add recall-relevant working and trusted trust-zone records to recall context."
3407
3427
  },
3408
3428
  "memoryPoisoningDefenseEnabled": {
3409
3429
  "type": "boolean",
@@ -3418,7 +3438,7 @@
3418
3438
  "harmonicRetrievalEnabled": {
3419
3439
  "type": "boolean",
3420
3440
  "default": false,
3421
- "description": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section injection and harmonic-search diagnostics."
3441
+ "description": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section assembly and harmonic-search diagnostics."
3422
3442
  },
3423
3443
  "abstractionAnchorsEnabled": {
3424
3444
  "type": "boolean",
@@ -3432,7 +3452,7 @@
3432
3452
  "verifiedRecallEnabled": {
3433
3453
  "type": "boolean",
3434
3454
  "default": false,
3435
- "description": "Inject prompt-relevant memory boxes only when their cited source memories verify as non-archived episodes."
3455
+ "description": "Add recall-relevant memory boxes only when their cited source memories verify as non-archived episodes."
3436
3456
  },
3437
3457
  "semanticRulePromotionEnabled": {
3438
3458
  "type": "boolean",
@@ -3489,7 +3509,7 @@
3489
3509
  "operatorAwareConsolidationEnabled": {
3490
3510
  "type": "boolean",
3491
3511
  "default": false,
3492
- "description": "Opt in to operator-aware consolidation prompts so the LLM returns structured {operator, output} JSON and SPLIT/MERGE/UPDATE is recorded on derived_via. When disabled (default), derived_via still populates via the cluster-shape heuristic."
3512
+ "description": "Opt in to operator-aware consolidation instructions so the LLM returns structured {operator, output} JSON and SPLIT/MERGE/UPDATE is recorded on derived_via. When disabled (default), derived_via still populates via the cluster-shape heuristic."
3493
3513
  },
3494
3514
  "peerProfileReasonerEnabled": {
3495
3515
  "type": "boolean",
@@ -3516,13 +3536,13 @@
3516
3536
  "peerProfileRecallEnabled": {
3517
3537
  "type": "boolean",
3518
3538
  "default": false,
3519
- "description": "When true, inject the active peer's profile fields into the recall context as a '## Peer Profile' section (issue #679 PR 3/5). Requires the session's peer ID to be registered before recall. Default off (opt-in)."
3539
+ "description": "When true, add the active peer's profile fields to the recall context as a '## Peer Profile' section (issue #679 PR 3/5). Requires the session's peer ID to be registered before recall. Default off (opt-in)."
3520
3540
  },
3521
3541
  "peerProfileRecallMaxFields": {
3522
3542
  "type": "number",
3523
3543
  "default": 5,
3524
3544
  "minimum": 0,
3525
- "description": "Maximum number of peer profile fields to inject per recall call. Only the most-recently-updated N fields are included. Set to 0 to disable field injection even when peerProfileRecallEnabled is true."
3545
+ "description": "Maximum number of peer profile fields to add per recall call. Only the most-recently-updated N fields are included. Set to 0 to disable field inclusion even when peerProfileRecallEnabled is true."
3526
3546
  },
3527
3547
  "creationMemoryEnabled": {
3528
3548
  "type": "boolean",
@@ -3570,7 +3590,7 @@
3570
3590
  "workProductRecallEnabled": {
3571
3591
  "type": "boolean",
3572
3592
  "default": false,
3573
- "description": "Inject prompt-relevant work-product ledger entries into recall context and expose artifact-recovery search tooling."
3593
+ "description": "Add recall-relevant work-product ledger entries to recall context and expose artifact-recovery search tooling."
3574
3594
  },
3575
3595
  "workProductLedgerDir": {
3576
3596
  "type": "string",
@@ -3810,7 +3830,7 @@
3810
3830
  "sharedContextEnabled": {
3811
3831
  "type": "boolean",
3812
3832
  "default": false,
3813
- "description": "Enable shared-context injection + tools (v4.0). Default off."
3833
+ "description": "Enable shared-context assembly and tools (v4.0). Default off."
3814
3834
  },
3815
3835
  "sharedContextDir": {
3816
3836
  "type": "string",
@@ -3819,7 +3839,7 @@
3819
3839
  "sharedContextMaxInjectChars": {
3820
3840
  "type": "number",
3821
3841
  "default": 4000,
3822
- "description": "Max characters of shared-context to inject into each prompt."
3842
+ "description": "Max characters of shared-context to include in each recall context."
3823
3843
  },
3824
3844
  "crossSignalsSemanticEnabled": {
3825
3845
  "type": "boolean",
@@ -4092,17 +4112,17 @@
4092
4112
  "calibrationEnabled": {
4093
4113
  "type": "boolean",
4094
4114
  "default": false,
4095
- "description": "Enable recall calibration rules injection (v9.0, default off)."
4115
+ "description": "Enable recall calibration rules (v9.0, default off)."
4096
4116
  },
4097
4117
  "calibrationMaxRulesPerRecall": {
4098
4118
  "type": "number",
4099
4119
  "default": 10,
4100
- "description": "Maximum number of calibration rules to inject per recall pass."
4120
+ "description": "Maximum number of calibration rules to include per recall pass."
4101
4121
  },
4102
4122
  "calibrationMaxChars": {
4103
4123
  "type": "number",
4104
4124
  "default": 1200,
4105
- "description": "Maximum characters of calibration content to inject per recall pass."
4125
+ "description": "Maximum characters of calibration content to include per recall pass."
4106
4126
  },
4107
4127
  "lancedbEnabled": {
4108
4128
  "type": "boolean",
@@ -4267,7 +4287,7 @@
4267
4287
  },
4268
4288
  "recallBudgetChars": {
4269
4289
  "type": "number",
4270
- "description": "Hard character cap for total recall injection. Defaults to maxMemoryTokens * 4."
4290
+ "description": "Hard character cap for total recall context. Defaults to maxMemoryTokens * 4."
4271
4291
  },
4272
4292
  "recallOuterTimeoutMs": {
4273
4293
  "type": "number",
@@ -4287,7 +4307,7 @@
4287
4307
  "recallMmrEnabled": {
4288
4308
  "type": "boolean",
4289
4309
  "default": true,
4290
- "description": "Apply Maximal Marginal Relevance to the final recall selection per-section so one redundant cluster cannot dominate the injected context."
4310
+ "description": "Apply Maximal Marginal Relevance to the final recall selection per-section so one redundant cluster cannot dominate the included context."
4291
4311
  },
4292
4312
  "recallMmrLambda": {
4293
4313
  "type": "number",
@@ -4428,7 +4448,7 @@
4428
4448
  "messagePartsRecallMaxResults": {
4429
4449
  "type": "number",
4430
4450
  "default": 6,
4431
- "description": "Maximum structured message-part matches to inject into recall when messagePartsEnabled is true."
4451
+ "description": "Maximum structured message-part matches to include in recall when messagePartsEnabled is true."
4432
4452
  },
4433
4453
  "ircEnabled": {
4434
4454
  "type": "boolean",
@@ -4438,7 +4458,7 @@
4438
4458
  "ircMaxPreferences": {
4439
4459
  "type": "number",
4440
4460
  "default": 20,
4441
- "description": "Maximum number of preferences to include in IRC rule injection."
4461
+ "description": "Maximum number of preferences to include in IRC rules."
4442
4462
  },
4443
4463
  "ircIncludeCorrections": {
4444
4464
  "type": "boolean",
@@ -4493,7 +4513,7 @@
4493
4513
  "cmcRetrievalEnabled": {
4494
4514
  "type": "boolean",
4495
4515
  "default": false,
4496
- "description": "Enable CMC retrieval injection at recall time (default off)."
4516
+ "description": "Enable CMC retrieval at recall time (default off)."
4497
4517
  },
4498
4518
  "cmcRetrievalMaxDepth": {
4499
4519
  "type": "number",
@@ -4503,7 +4523,7 @@
4503
4523
  "cmcRetrievalMaxChars": {
4504
4524
  "type": "number",
4505
4525
  "default": 800,
4506
- "description": "Maximum characters of CMC content injected per recall pass."
4526
+ "description": "Maximum characters of CMC content included per recall pass."
4507
4527
  },
4508
4528
  "cmcRetrievalCounterfactualBoost": {
4509
4529
  "type": "number",
@@ -4779,13 +4799,13 @@
4779
4799
  "help": "Enable identity continuity workflows (anchor, incidents, audits)"
4780
4800
  },
4781
4801
  "identityInjectionMode": {
4782
- "label": "Identity Injection Mode",
4802
+ "label": "Identity Context Mode",
4783
4803
  "advanced": true,
4784
4804
  "placeholder": "recovery_only",
4785
- "help": "When to inject identity continuity context: recovery_only, minimal, or full"
4805
+ "help": "When to add identity continuity context: recovery_only, minimal, or full"
4786
4806
  },
4787
4807
  "identityMaxInjectChars": {
4788
- "label": "Identity Max Inject Chars",
4808
+ "label": "Identity Max Context Chars",
4789
4809
  "advanced": true,
4790
4810
  "placeholder": "1200"
4791
4811
  },
@@ -5062,7 +5082,7 @@
5062
5082
  },
5063
5083
  "compactionResetEnabled": {
5064
5084
  "label": "Compaction Reset",
5065
- "help": "Reset session after compaction and inject BOOT.md for recovery",
5085
+ "help": "Reset session after compaction and add BOOT.md recovery context",
5066
5086
  "advanced": true
5067
5087
  },
5068
5088
  "hourlySummariesEnabled": {
@@ -5224,7 +5244,7 @@
5224
5244
  "objectiveStateRecallEnabled": {
5225
5245
  "label": "Objective-State Recall",
5226
5246
  "advanced": true,
5227
- "help": "Inject prompt-relevant objective-state snapshots into recall context."
5247
+ "help": "Add recall-relevant objective-state snapshots to recall context."
5228
5248
  },
5229
5249
  "objectiveStateStoreDir": {
5230
5250
  "label": "Objective-State Store Directory",
@@ -5245,7 +5265,7 @@
5245
5265
  "causalTrajectoryRecallEnabled": {
5246
5266
  "label": "Causal Trajectory Recall",
5247
5267
  "advanced": true,
5248
- "help": "Inject prompt-relevant causal trajectories into recall context."
5268
+ "help": "Add recall-relevant causal trajectories to recall context."
5249
5269
  },
5250
5270
  "trustZonesEnabled": {
5251
5271
  "label": "Trust Zones",
@@ -5265,7 +5285,7 @@
5265
5285
  "trustZoneRecallEnabled": {
5266
5286
  "label": "Trust-Zone Recall",
5267
5287
  "advanced": true,
5268
- "help": "Inject prompt-relevant working and trusted trust-zone records into recall context."
5288
+ "help": "Add recall-relevant working and trusted trust-zone records to recall context."
5269
5289
  },
5270
5290
  "memoryPoisoningDefenseEnabled": {
5271
5291
  "label": "Memory Poisoning Defense",
@@ -5279,7 +5299,7 @@
5279
5299
  },
5280
5300
  "harmonicRetrievalEnabled": {
5281
5301
  "label": "Harmonic Retrieval",
5282
- "help": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section injection and harmonic-search diagnostics."
5302
+ "help": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section assembly and harmonic-search diagnostics."
5283
5303
  },
5284
5304
  "abstractionAnchorsEnabled": {
5285
5305
  "label": "Abstraction Anchors",
@@ -5294,7 +5314,7 @@
5294
5314
  },
5295
5315
  "verifiedRecallEnabled": {
5296
5316
  "label": "Verified Recall",
5297
- "help": "Inject prompt-relevant memory boxes only when their cited source memories verify as non-archived episodes."
5317
+ "help": "Add recall-relevant memory boxes only when their cited source memories verify as non-archived episodes."
5298
5318
  },
5299
5319
  "semanticRulePromotionEnabled": {
5300
5320
  "label": "Semantic Rule Promotion",
@@ -5342,9 +5362,9 @@
5342
5362
  "help": "Max memories to consolidate per run to limit LLM cost."
5343
5363
  },
5344
5364
  "operatorAwareConsolidationEnabled": {
5345
- "label": "Operator-Aware Consolidation Prompt",
5365
+ "label": "Operator-Aware Consolidation",
5346
5366
  "advanced": true,
5347
- "help": "Opt in to operator-aware consolidation prompts (default off). When enabled, the LLM returns structured {operator, output} JSON and we record SPLIT/MERGE/UPDATE on derived_via. When disabled (default), derived_via still populates via the cluster-shape heuristic."
5367
+ "help": "Opt in to operator-aware consolidation instructions (default off). When enabled, the LLM returns structured {operator, output} JSON and we record SPLIT/MERGE/UPDATE on derived_via. When disabled (default), derived_via still populates via the cluster-shape heuristic."
5348
5368
  },
5349
5369
  "peerProfileReasonerEnabled": {
5350
5370
  "label": "Peer Profile Reasoner",
@@ -5367,14 +5387,14 @@
5367
5387
  "help": "Hard cap on the total number of profile fields the reasoner will apply across all peers in a single run. Set to 0 to disable applying any fields."
5368
5388
  },
5369
5389
  "peerProfileRecallEnabled": {
5370
- "label": "Peer Profile Recall Injection",
5390
+ "label": "Peer Profile Recall",
5371
5391
  "advanced": true,
5372
- "help": "When enabled, injects the active peer's profile fields into recall context as a '## Peer Profile' section. Requires the session peer ID to be registered. Default off."
5392
+ "help": "When enabled, adds the active peer's profile fields to recall context as a '## Peer Profile' section. Requires the session peer ID to be registered. Default off."
5373
5393
  },
5374
5394
  "peerProfileRecallMaxFields": {
5375
5395
  "label": "Peer Profile Recall Max Fields",
5376
5396
  "advanced": true,
5377
- "help": "Maximum number of peer profile fields to inject per recall. Only the most-recently-updated N fields are included. Set to 0 to disable injection."
5397
+ "help": "Maximum number of peer profile fields to add per recall. Only the most-recently-updated N fields are included. Set to 0 to disable this feature."
5378
5398
  },
5379
5399
  "creationMemoryEnabled": {
5380
5400
  "label": "Creation Memory",
@@ -5426,7 +5446,7 @@
5426
5446
  "workProductRecallEnabled": {
5427
5447
  "label": "Work-Product Recall",
5428
5448
  "advanced": true,
5429
- "help": "Inject prompt-relevant work-product ledger entries into recall context and expose artifact-recovery search tooling."
5449
+ "help": "Add recall-relevant work-product ledger entries to recall context and expose artifact-recovery search tooling."
5430
5450
  },
5431
5451
  "workProductLedgerDir": {
5432
5452
  "label": "Work-Product Ledger Directory",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@remnic/plugin-openclaw",
3
- "version": "1.0.28",
4
- "description": "OpenClaw adapter for Remnic memory thin wrapper delegating to @remnic/core",
3
+ "version": "1.0.30",
4
+ "description": "OpenClaw adapter for Remnic memory with bundled @remnic/core runtime",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "exports": {
@@ -31,6 +31,34 @@
31
31
  },
32
32
  "install": {
33
33
  "minHostVersion": ">=2026.4.8"
34
+ },
35
+ "environment": {
36
+ "externalServices": [
37
+ "openclaw-gateway-models",
38
+ "configured-llm-providers"
39
+ ],
40
+ "optionalEnv": [
41
+ "OPENAI_API_KEY",
42
+ "<PROVIDER>_API_KEY",
43
+ "<PROVIDER>_TOKEN"
44
+ ],
45
+ "configPaths": [
46
+ "~/.openclaw/agents/main/agent/models.json"
47
+ ],
48
+ "credentialSources": [
49
+ "OpenClaw runtime auth resolver",
50
+ "OpenClaw materialized provider model config",
51
+ "provider-specific environment variables"
52
+ ],
53
+ "dataSentToProviders": [
54
+ "conversation excerpts",
55
+ "memory excerpts",
56
+ "summaries",
57
+ "embedding inputs",
58
+ "active-recall query inputs",
59
+ "benchmark and evaluation inputs"
60
+ ],
61
+ "recommendedMode": "modelSource=gateway"
34
62
  }
35
63
  },
36
64
  "dependencies": {