@remnic/plugin-openclaw 1.0.0
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/dist/calibration-KQXCC77L.js +235 -0
- package/dist/causal-chain-LA3IQNL6.js +22 -0
- package/dist/causal-consolidation-WINYJQJ4.js +205 -0
- package/dist/causal-retrieval-ITNQBUQM.js +182 -0
- package/dist/causal-trajectory-graph-7Z5DD66L.js +59 -0
- package/dist/chunk-5LE4HTVL.js +46 -0
- package/dist/chunk-BZ27H3BL.js +158 -0
- package/dist/chunk-DMGIUDBO.js +41 -0
- package/dist/chunk-GUSMRW4H.js +12 -0
- package/dist/chunk-H3SKMYPU.js +340 -0
- package/dist/chunk-HSBPDYF4.js +278 -0
- package/dist/chunk-JGEKL3WH.js +434 -0
- package/dist/chunk-MLKGABMK.js +9 -0
- package/dist/chunk-TJZ7KBCC.js +577 -0
- package/dist/chunk-WLR4WL6B.js +5893 -0
- package/dist/chunk-Y7JG2Q3V.js +4242 -0
- package/dist/engine-QHRKR53Q.js +11 -0
- package/dist/fallback-llm-2VMRPBHR.js +8 -0
- package/dist/index.js +61705 -0
- package/dist/legacy-hook-compat-XQ7FP6FV.js +35 -0
- package/dist/logger-NZE2OBVA.js +9 -0
- package/dist/storage-AGYBIME4.js +16 -0
- package/openclaw.plugin.json +3779 -0
- package/package.json +54 -0
|
@@ -0,0 +1,3779 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "openclaw-engram",
|
|
3
|
+
"kind": "memory",
|
|
4
|
+
"configSchema": {
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"properties": {
|
|
8
|
+
"openaiApiKey": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "OpenAI API key (or set OPENAI_API_KEY env var)"
|
|
11
|
+
},
|
|
12
|
+
"openaiBaseUrl": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "Override the OpenAI API base URL for OpenAI-compatible providers (Scryr, Together, OpenRouter, etc.)"
|
|
15
|
+
},
|
|
16
|
+
"model": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"default": "gpt-5.2",
|
|
19
|
+
"description": "OpenAI model for extraction/consolidation"
|
|
20
|
+
},
|
|
21
|
+
"reasoningEffort": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"enum": [
|
|
24
|
+
"none",
|
|
25
|
+
"low",
|
|
26
|
+
"medium",
|
|
27
|
+
"high"
|
|
28
|
+
],
|
|
29
|
+
"default": "low",
|
|
30
|
+
"description": "Reasoning effort for extraction"
|
|
31
|
+
},
|
|
32
|
+
"triggerMode": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"enum": [
|
|
35
|
+
"smart",
|
|
36
|
+
"every_n",
|
|
37
|
+
"time_based"
|
|
38
|
+
],
|
|
39
|
+
"default": "smart",
|
|
40
|
+
"description": "Buffer trigger mode"
|
|
41
|
+
},
|
|
42
|
+
"bufferMaxTurns": {
|
|
43
|
+
"type": "number",
|
|
44
|
+
"default": 5,
|
|
45
|
+
"description": "Max turns before forced extraction"
|
|
46
|
+
},
|
|
47
|
+
"bufferMaxMinutes": {
|
|
48
|
+
"type": "number",
|
|
49
|
+
"default": 15,
|
|
50
|
+
"description": "Max minutes before forced extraction"
|
|
51
|
+
},
|
|
52
|
+
"consolidateEveryN": {
|
|
53
|
+
"type": "number",
|
|
54
|
+
"default": 3,
|
|
55
|
+
"description": "Run consolidation every N extractions"
|
|
56
|
+
},
|
|
57
|
+
"highSignalPatterns": {
|
|
58
|
+
"type": "array",
|
|
59
|
+
"items": {
|
|
60
|
+
"type": "string"
|
|
61
|
+
},
|
|
62
|
+
"description": "Custom regex patterns for immediate extraction"
|
|
63
|
+
},
|
|
64
|
+
"maxMemoryTokens": {
|
|
65
|
+
"type": "number",
|
|
66
|
+
"default": 2000,
|
|
67
|
+
"description": "Max tokens injected per turn"
|
|
68
|
+
},
|
|
69
|
+
"memoryOsPreset": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"enum": [
|
|
72
|
+
"conservative",
|
|
73
|
+
"balanced",
|
|
74
|
+
"research",
|
|
75
|
+
"research-max",
|
|
76
|
+
"local-llm-heavy"
|
|
77
|
+
],
|
|
78
|
+
"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`."
|
|
79
|
+
},
|
|
80
|
+
"qmdEnabled": {
|
|
81
|
+
"type": "boolean",
|
|
82
|
+
"default": true,
|
|
83
|
+
"description": "Use QMD for search"
|
|
84
|
+
},
|
|
85
|
+
"qmdCollection": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"default": "openclaw-engram",
|
|
88
|
+
"description": "QMD collection name"
|
|
89
|
+
},
|
|
90
|
+
"qmdMaxResults": {
|
|
91
|
+
"type": "number",
|
|
92
|
+
"default": 8,
|
|
93
|
+
"description": "Max QMD results per search"
|
|
94
|
+
},
|
|
95
|
+
"qmdColdTierEnabled": {
|
|
96
|
+
"type": "boolean",
|
|
97
|
+
"default": false,
|
|
98
|
+
"description": "Enable cold-tier QMD recall from a secondary collection when hot recall misses"
|
|
99
|
+
},
|
|
100
|
+
"qmdColdCollection": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"default": "openclaw-engram-cold",
|
|
103
|
+
"description": "Secondary QMD collection name used for cold-tier fallback recall"
|
|
104
|
+
},
|
|
105
|
+
"qmdColdMaxResults": {
|
|
106
|
+
"type": "number",
|
|
107
|
+
"default": 8,
|
|
108
|
+
"description": "Max cold-tier QMD results considered before final recall cap"
|
|
109
|
+
},
|
|
110
|
+
"qmdTierMigrationEnabled": {
|
|
111
|
+
"type": "boolean",
|
|
112
|
+
"default": false,
|
|
113
|
+
"description": "Enable value-aware migration between hot and cold QMD tiers"
|
|
114
|
+
},
|
|
115
|
+
"qmdTierDemotionMinAgeDays": {
|
|
116
|
+
"type": "number",
|
|
117
|
+
"default": 14,
|
|
118
|
+
"description": "Minimum hot-memory age in days before tier demotion is eligible"
|
|
119
|
+
},
|
|
120
|
+
"qmdTierDemotionValueThreshold": {
|
|
121
|
+
"type": "number",
|
|
122
|
+
"default": 0.35,
|
|
123
|
+
"description": "Value-score threshold at or below which hot memories are eligible for cold demotion"
|
|
124
|
+
},
|
|
125
|
+
"qmdTierPromotionValueThreshold": {
|
|
126
|
+
"type": "number",
|
|
127
|
+
"default": 0.7,
|
|
128
|
+
"description": "Value-score threshold at or above which cold memories are eligible for hot promotion"
|
|
129
|
+
},
|
|
130
|
+
"qmdTierParityGraphEnabled": {
|
|
131
|
+
"type": "boolean",
|
|
132
|
+
"default": true,
|
|
133
|
+
"description": "Apply graph-assist parity checks across hot and cold retrieval tiers"
|
|
134
|
+
},
|
|
135
|
+
"qmdTierParityHiMemEnabled": {
|
|
136
|
+
"type": "boolean",
|
|
137
|
+
"default": true,
|
|
138
|
+
"description": "Apply HiMem episode/note parity checks across hot and cold retrieval tiers"
|
|
139
|
+
},
|
|
140
|
+
"qmdTierAutoBackfillEnabled": {
|
|
141
|
+
"type": "boolean",
|
|
142
|
+
"default": false,
|
|
143
|
+
"description": "Allow automated cold-tier backfill jobs to repair parity gaps"
|
|
144
|
+
},
|
|
145
|
+
"embeddingFallbackEnabled": {
|
|
146
|
+
"type": "boolean",
|
|
147
|
+
"default": true,
|
|
148
|
+
"description": "Enable embedding-based semantic recall fallback when QMD is unavailable or returns no matches"
|
|
149
|
+
},
|
|
150
|
+
"embeddingFallbackProvider": {
|
|
151
|
+
"type": "string",
|
|
152
|
+
"enum": [
|
|
153
|
+
"auto",
|
|
154
|
+
"openai",
|
|
155
|
+
"local"
|
|
156
|
+
],
|
|
157
|
+
"default": "auto",
|
|
158
|
+
"description": "Embedding provider selection for semantic fallback"
|
|
159
|
+
},
|
|
160
|
+
"qmdPath": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"description": "Optional absolute path to qmd binary (bypasses PATH/fallback discovery)"
|
|
163
|
+
},
|
|
164
|
+
"memoryDir": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "Override memory storage directory"
|
|
167
|
+
},
|
|
168
|
+
"debug": {
|
|
169
|
+
"type": "boolean",
|
|
170
|
+
"default": false,
|
|
171
|
+
"description": "Enable debug logging"
|
|
172
|
+
},
|
|
173
|
+
"identityEnabled": {
|
|
174
|
+
"type": "boolean",
|
|
175
|
+
"default": true,
|
|
176
|
+
"description": "Enable agent identity reflections (appends to workspace IDENTITY.md)"
|
|
177
|
+
},
|
|
178
|
+
"identityContinuityEnabled": {
|
|
179
|
+
"type": "boolean",
|
|
180
|
+
"default": false,
|
|
181
|
+
"description": "Enable identity continuity workflows (anchor, incidents, audits)"
|
|
182
|
+
},
|
|
183
|
+
"identityInjectionMode": {
|
|
184
|
+
"type": "string",
|
|
185
|
+
"enum": [
|
|
186
|
+
"recovery_only",
|
|
187
|
+
"minimal",
|
|
188
|
+
"full"
|
|
189
|
+
],
|
|
190
|
+
"default": "recovery_only",
|
|
191
|
+
"description": "Controls when identity continuity context is injected into recall assembly"
|
|
192
|
+
},
|
|
193
|
+
"identityMaxInjectChars": {
|
|
194
|
+
"type": "number",
|
|
195
|
+
"default": 1200,
|
|
196
|
+
"description": "Maximum characters allowed for identity continuity context injection"
|
|
197
|
+
},
|
|
198
|
+
"continuityIncidentLoggingEnabled": {
|
|
199
|
+
"type": "boolean",
|
|
200
|
+
"description": "When unset, defaults to identityContinuityEnabled. Controls continuity incident logging artifacts."
|
|
201
|
+
},
|
|
202
|
+
"continuityAuditEnabled": {
|
|
203
|
+
"type": "boolean",
|
|
204
|
+
"default": false,
|
|
205
|
+
"description": "Enable continuity audit artifact generation workflows"
|
|
206
|
+
},
|
|
207
|
+
"sessionObserverEnabled": {
|
|
208
|
+
"type": "boolean",
|
|
209
|
+
"default": false,
|
|
210
|
+
"description": "Enable heartbeat-driven active session observer checks for proactive extraction triggers."
|
|
211
|
+
},
|
|
212
|
+
"sessionObserverDebounceMs": {
|
|
213
|
+
"type": "number",
|
|
214
|
+
"default": 120000,
|
|
215
|
+
"description": "Minimum interval between heartbeat observer triggers per session (ms)."
|
|
216
|
+
},
|
|
217
|
+
"sessionObserverBands": {
|
|
218
|
+
"type": "array",
|
|
219
|
+
"description": "Session size bands and growth thresholds for heartbeat observer triggers.",
|
|
220
|
+
"items": {
|
|
221
|
+
"type": "object",
|
|
222
|
+
"additionalProperties": false,
|
|
223
|
+
"properties": {
|
|
224
|
+
"maxBytes": {
|
|
225
|
+
"type": "number"
|
|
226
|
+
},
|
|
227
|
+
"triggerDeltaBytes": {
|
|
228
|
+
"type": "number"
|
|
229
|
+
},
|
|
230
|
+
"triggerDeltaTokens": {
|
|
231
|
+
"type": "number"
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
"required": [
|
|
235
|
+
"maxBytes",
|
|
236
|
+
"triggerDeltaBytes",
|
|
237
|
+
"triggerDeltaTokens"
|
|
238
|
+
]
|
|
239
|
+
},
|
|
240
|
+
"default": [
|
|
241
|
+
{
|
|
242
|
+
"maxBytes": 50000,
|
|
243
|
+
"triggerDeltaBytes": 4800,
|
|
244
|
+
"triggerDeltaTokens": 1200
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"maxBytes": 200000,
|
|
248
|
+
"triggerDeltaBytes": 9600,
|
|
249
|
+
"triggerDeltaTokens": 2400
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"maxBytes": 1000000000,
|
|
253
|
+
"triggerDeltaBytes": 19200,
|
|
254
|
+
"triggerDeltaTokens": 4800
|
|
255
|
+
}
|
|
256
|
+
]
|
|
257
|
+
},
|
|
258
|
+
"injectQuestions": {
|
|
259
|
+
"type": "boolean",
|
|
260
|
+
"default": false,
|
|
261
|
+
"description": "Inject the most relevant open question into the system prompt"
|
|
262
|
+
},
|
|
263
|
+
"commitmentDecayDays": {
|
|
264
|
+
"type": "number",
|
|
265
|
+
"default": 90,
|
|
266
|
+
"description": "Days before fulfilled/expired commitments are removed"
|
|
267
|
+
},
|
|
268
|
+
"workspaceDir": {
|
|
269
|
+
"type": "string",
|
|
270
|
+
"description": "Override workspace directory path"
|
|
271
|
+
},
|
|
272
|
+
"fileHygiene": {
|
|
273
|
+
"type": "object",
|
|
274
|
+
"additionalProperties": false,
|
|
275
|
+
"description": "Optional: keep OpenClaw bootstrap workspace files small and warn before silent truncation risk.",
|
|
276
|
+
"properties": {
|
|
277
|
+
"enabled": {
|
|
278
|
+
"type": "boolean",
|
|
279
|
+
"default": false,
|
|
280
|
+
"description": "Master switch for file hygiene (default off)."
|
|
281
|
+
},
|
|
282
|
+
"lintEnabled": {
|
|
283
|
+
"type": "boolean",
|
|
284
|
+
"default": true,
|
|
285
|
+
"description": "If true, warn when bootstrap files approach budget."
|
|
286
|
+
},
|
|
287
|
+
"lintBudgetBytes": {
|
|
288
|
+
"type": "number",
|
|
289
|
+
"default": 20000,
|
|
290
|
+
"description": "Budget in bytes used for lint warnings (approx)."
|
|
291
|
+
},
|
|
292
|
+
"lintWarnRatio": {
|
|
293
|
+
"type": "number",
|
|
294
|
+
"default": 0.8,
|
|
295
|
+
"description": "Warn when file size >= budget * warnRatio."
|
|
296
|
+
},
|
|
297
|
+
"lintPaths": {
|
|
298
|
+
"type": "array",
|
|
299
|
+
"items": {
|
|
300
|
+
"type": "string"
|
|
301
|
+
},
|
|
302
|
+
"default": [
|
|
303
|
+
"IDENTITY.md",
|
|
304
|
+
"MEMORY.md"
|
|
305
|
+
],
|
|
306
|
+
"description": "Workspace-relative paths to lint (or absolute paths)."
|
|
307
|
+
},
|
|
308
|
+
"rotateEnabled": {
|
|
309
|
+
"type": "boolean",
|
|
310
|
+
"default": false,
|
|
311
|
+
"description": "If true, rotate oversized markdown files into an archive and replace with a lean index."
|
|
312
|
+
},
|
|
313
|
+
"rotateMaxBytes": {
|
|
314
|
+
"type": "number",
|
|
315
|
+
"default": 18000,
|
|
316
|
+
"description": "Rotate when a target file exceeds this size (bytes)."
|
|
317
|
+
},
|
|
318
|
+
"rotateKeepTailChars": {
|
|
319
|
+
"type": "number",
|
|
320
|
+
"default": 2000,
|
|
321
|
+
"description": "How many characters of the old file to keep inline (tail) for continuity."
|
|
322
|
+
},
|
|
323
|
+
"rotatePaths": {
|
|
324
|
+
"type": "array",
|
|
325
|
+
"items": {
|
|
326
|
+
"type": "string"
|
|
327
|
+
},
|
|
328
|
+
"default": [
|
|
329
|
+
"IDENTITY.md"
|
|
330
|
+
],
|
|
331
|
+
"description": "Workspace-relative paths to rotate (or absolute paths)."
|
|
332
|
+
},
|
|
333
|
+
"archiveDir": {
|
|
334
|
+
"type": "string",
|
|
335
|
+
"default": ".engram-archive",
|
|
336
|
+
"description": "Workspace-relative archive directory where rotated files are stored."
|
|
337
|
+
},
|
|
338
|
+
"runMinIntervalMs": {
|
|
339
|
+
"type": "number",
|
|
340
|
+
"default": 300000,
|
|
341
|
+
"description": "Minimum interval between hygiene runs (ms)."
|
|
342
|
+
},
|
|
343
|
+
"warningsLogEnabled": {
|
|
344
|
+
"type": "boolean",
|
|
345
|
+
"default": false,
|
|
346
|
+
"description": "If true, append warnings to a log file under memoryDir."
|
|
347
|
+
},
|
|
348
|
+
"warningsLogPath": {
|
|
349
|
+
"type": "string",
|
|
350
|
+
"default": "hygiene/warnings.md",
|
|
351
|
+
"description": "memoryDir-relative path to write warnings to."
|
|
352
|
+
},
|
|
353
|
+
"indexEnabled": {
|
|
354
|
+
"type": "boolean",
|
|
355
|
+
"default": false,
|
|
356
|
+
"description": "Reserved: write an Engram index file in workspace (not required for rotation)."
|
|
357
|
+
},
|
|
358
|
+
"indexPath": {
|
|
359
|
+
"type": "string",
|
|
360
|
+
"default": "ENGRAM_INDEX.md",
|
|
361
|
+
"description": "Workspace-relative index path (if indexEnabled)."
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
"required": [
|
|
365
|
+
"enabled"
|
|
366
|
+
]
|
|
367
|
+
},
|
|
368
|
+
"nativeKnowledge": {
|
|
369
|
+
"type": "object",
|
|
370
|
+
"additionalProperties": false,
|
|
371
|
+
"description": "Optional: search curated workspace markdown files directly during recall without converting them into durable memory files.",
|
|
372
|
+
"properties": {
|
|
373
|
+
"enabled": {
|
|
374
|
+
"type": "boolean",
|
|
375
|
+
"default": false,
|
|
376
|
+
"description": "Master switch for curated workspace file recall."
|
|
377
|
+
},
|
|
378
|
+
"includeFiles": {
|
|
379
|
+
"type": "array",
|
|
380
|
+
"items": {
|
|
381
|
+
"type": "string"
|
|
382
|
+
},
|
|
383
|
+
"default": [
|
|
384
|
+
"IDENTITY.md",
|
|
385
|
+
"MEMORY.md"
|
|
386
|
+
],
|
|
387
|
+
"description": "Workspace-relative curated markdown files to scan for native knowledge recall."
|
|
388
|
+
},
|
|
389
|
+
"maxChunkChars": {
|
|
390
|
+
"type": "number",
|
|
391
|
+
"default": 900,
|
|
392
|
+
"description": "Maximum chunk size per native knowledge section before it is split."
|
|
393
|
+
},
|
|
394
|
+
"maxResults": {
|
|
395
|
+
"type": "number",
|
|
396
|
+
"default": 4,
|
|
397
|
+
"description": "Maximum native knowledge chunks to inject into recall."
|
|
398
|
+
},
|
|
399
|
+
"maxChars": {
|
|
400
|
+
"type": "number",
|
|
401
|
+
"default": 2400,
|
|
402
|
+
"description": "Maximum total characters to inject from native knowledge recall."
|
|
403
|
+
},
|
|
404
|
+
"stateDir": {
|
|
405
|
+
"type": "string",
|
|
406
|
+
"default": "state/native-knowledge",
|
|
407
|
+
"description": "Memory-relative directory used for backend-agnostic native knowledge sync state."
|
|
408
|
+
},
|
|
409
|
+
"openclawWorkspace": {
|
|
410
|
+
"type": "object",
|
|
411
|
+
"additionalProperties": false,
|
|
412
|
+
"description": "Optional adapter for OpenClaw workspace artifacts such as bootstrap docs, handoffs, daily summaries, and automation notes.",
|
|
413
|
+
"properties": {
|
|
414
|
+
"enabled": {
|
|
415
|
+
"type": "boolean",
|
|
416
|
+
"default": false,
|
|
417
|
+
"description": "Enable the OpenClaw workspace native-knowledge adapter."
|
|
418
|
+
},
|
|
419
|
+
"bootstrapFiles": {
|
|
420
|
+
"type": "array",
|
|
421
|
+
"items": {
|
|
422
|
+
"type": "string"
|
|
423
|
+
},
|
|
424
|
+
"default": [
|
|
425
|
+
"IDENTITY.md",
|
|
426
|
+
"MEMORY.md",
|
|
427
|
+
"USER.md"
|
|
428
|
+
],
|
|
429
|
+
"description": "Workspace-relative bootstrap docs treated as high-confidence native knowledge."
|
|
430
|
+
},
|
|
431
|
+
"handoffGlobs": {
|
|
432
|
+
"type": "array",
|
|
433
|
+
"items": {
|
|
434
|
+
"type": "string"
|
|
435
|
+
},
|
|
436
|
+
"default": [
|
|
437
|
+
"**/*handoff*.md",
|
|
438
|
+
"handoffs/**/*.md"
|
|
439
|
+
],
|
|
440
|
+
"description": "Glob patterns (relative to workspaceDir) used to discover handoff notes."
|
|
441
|
+
},
|
|
442
|
+
"dailySummaryGlobs": {
|
|
443
|
+
"type": "array",
|
|
444
|
+
"items": {
|
|
445
|
+
"type": "string"
|
|
446
|
+
},
|
|
447
|
+
"default": [
|
|
448
|
+
"**/*daily*summary*.md",
|
|
449
|
+
"summaries/**/*.md"
|
|
450
|
+
],
|
|
451
|
+
"description": "Glob patterns (relative to workspaceDir) used to discover daily summary notes."
|
|
452
|
+
},
|
|
453
|
+
"automationNoteGlobs": {
|
|
454
|
+
"type": "array",
|
|
455
|
+
"items": {
|
|
456
|
+
"type": "string"
|
|
457
|
+
},
|
|
458
|
+
"default": [],
|
|
459
|
+
"description": "Optional glob patterns for automation-written status or operating notes."
|
|
460
|
+
},
|
|
461
|
+
"workspaceDocGlobs": {
|
|
462
|
+
"type": "array",
|
|
463
|
+
"items": {
|
|
464
|
+
"type": "string"
|
|
465
|
+
},
|
|
466
|
+
"default": [],
|
|
467
|
+
"description": "Optional glob patterns for other explicitly allowlisted workspace docs."
|
|
468
|
+
},
|
|
469
|
+
"excludeGlobs": {
|
|
470
|
+
"type": "array",
|
|
471
|
+
"items": {
|
|
472
|
+
"type": "string"
|
|
473
|
+
},
|
|
474
|
+
"default": [],
|
|
475
|
+
"description": "Additional glob patterns appended to the built-in workspace safety excludes."
|
|
476
|
+
},
|
|
477
|
+
"sharedSafeGlobs": {
|
|
478
|
+
"type": "array",
|
|
479
|
+
"items": {
|
|
480
|
+
"type": "string"
|
|
481
|
+
},
|
|
482
|
+
"default": [],
|
|
483
|
+
"description": "Optional glob patterns that should be tagged as shared-safe when no explicit privacy class is present."
|
|
484
|
+
}
|
|
485
|
+
},
|
|
486
|
+
"required": [
|
|
487
|
+
"enabled"
|
|
488
|
+
]
|
|
489
|
+
},
|
|
490
|
+
"obsidianVaults": {
|
|
491
|
+
"type": "array",
|
|
492
|
+
"default": [],
|
|
493
|
+
"description": "Optional Obsidian vault adapters to sync into backend-agnostic native knowledge records.",
|
|
494
|
+
"items": {
|
|
495
|
+
"type": "object",
|
|
496
|
+
"additionalProperties": false,
|
|
497
|
+
"properties": {
|
|
498
|
+
"id": {
|
|
499
|
+
"type": "string",
|
|
500
|
+
"description": "Stable vault identifier used in synced note metadata."
|
|
501
|
+
},
|
|
502
|
+
"rootDir": {
|
|
503
|
+
"type": "string",
|
|
504
|
+
"description": "Absolute path to the Obsidian vault root."
|
|
505
|
+
},
|
|
506
|
+
"includeGlobs": {
|
|
507
|
+
"type": "array",
|
|
508
|
+
"items": {
|
|
509
|
+
"type": "string"
|
|
510
|
+
},
|
|
511
|
+
"default": [
|
|
512
|
+
"**/*.md"
|
|
513
|
+
],
|
|
514
|
+
"description": "Glob patterns (relative to the vault root) that are eligible for sync."
|
|
515
|
+
},
|
|
516
|
+
"excludeGlobs": {
|
|
517
|
+
"type": "array",
|
|
518
|
+
"items": {
|
|
519
|
+
"type": "string"
|
|
520
|
+
},
|
|
521
|
+
"default": [
|
|
522
|
+
".obsidian/**",
|
|
523
|
+
"**/*.canvas",
|
|
524
|
+
"**/*.png",
|
|
525
|
+
"**/*.jpg",
|
|
526
|
+
"**/*.jpeg",
|
|
527
|
+
"**/*.gif",
|
|
528
|
+
"**/*.pdf"
|
|
529
|
+
],
|
|
530
|
+
"description": "Glob patterns excluded from sync."
|
|
531
|
+
},
|
|
532
|
+
"namespace": {
|
|
533
|
+
"type": "string",
|
|
534
|
+
"description": "Default namespace assigned to records from this vault."
|
|
535
|
+
},
|
|
536
|
+
"privacyClass": {
|
|
537
|
+
"type": "string",
|
|
538
|
+
"description": "Operator-defined privacy class preserved on synced records."
|
|
539
|
+
},
|
|
540
|
+
"folderRules": {
|
|
541
|
+
"type": "array",
|
|
542
|
+
"default": [],
|
|
543
|
+
"description": "Optional per-folder overrides for namespace or privacy classification.",
|
|
544
|
+
"items": {
|
|
545
|
+
"type": "object",
|
|
546
|
+
"additionalProperties": false,
|
|
547
|
+
"properties": {
|
|
548
|
+
"pathPrefix": {
|
|
549
|
+
"type": "string",
|
|
550
|
+
"description": "Vault-relative folder prefix that activates the override."
|
|
551
|
+
},
|
|
552
|
+
"namespace": {
|
|
553
|
+
"type": "string",
|
|
554
|
+
"description": "Namespace override for matching notes."
|
|
555
|
+
},
|
|
556
|
+
"privacyClass": {
|
|
557
|
+
"type": "string",
|
|
558
|
+
"description": "Privacy-class override for matching notes."
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
"required": [
|
|
562
|
+
"pathPrefix"
|
|
563
|
+
]
|
|
564
|
+
}
|
|
565
|
+
},
|
|
566
|
+
"dailyNotePatterns": {
|
|
567
|
+
"type": "array",
|
|
568
|
+
"items": {
|
|
569
|
+
"type": "string"
|
|
570
|
+
},
|
|
571
|
+
"default": [
|
|
572
|
+
"YYYY-MM-DD"
|
|
573
|
+
],
|
|
574
|
+
"description": "Filename patterns used to derive daily-note dates (for example `YYYY-MM-DD` or `YYYY/MM/DD`)."
|
|
575
|
+
},
|
|
576
|
+
"materializeBacklinks": {
|
|
577
|
+
"type": "boolean",
|
|
578
|
+
"default": false,
|
|
579
|
+
"description": "If true, compute backlinks from wikilink targets for recall hints and explainability."
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
"required": [
|
|
583
|
+
"rootDir"
|
|
584
|
+
]
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
},
|
|
588
|
+
"required": [
|
|
589
|
+
"enabled"
|
|
590
|
+
]
|
|
591
|
+
},
|
|
592
|
+
"agentAccessHttp": {
|
|
593
|
+
"type": "object",
|
|
594
|
+
"additionalProperties": false,
|
|
595
|
+
"description": "Optional: run a local authenticated HTTP API so non-OpenClaw clients can query Engram directly.",
|
|
596
|
+
"properties": {
|
|
597
|
+
"enabled": {
|
|
598
|
+
"type": "boolean",
|
|
599
|
+
"default": false,
|
|
600
|
+
"description": "Start the local Engram HTTP access server during plugin startup."
|
|
601
|
+
},
|
|
602
|
+
"host": {
|
|
603
|
+
"type": "string",
|
|
604
|
+
"default": "127.0.0.1",
|
|
605
|
+
"description": "Loopback host to bind for the Engram HTTP access server."
|
|
606
|
+
},
|
|
607
|
+
"port": {
|
|
608
|
+
"type": "number",
|
|
609
|
+
"default": 4318,
|
|
610
|
+
"description": "Bind port for the Engram HTTP access server. Use 0 for an ephemeral port."
|
|
611
|
+
},
|
|
612
|
+
"authToken": {
|
|
613
|
+
"type": "string",
|
|
614
|
+
"description": "Bearer token for the local Remnic HTTP API. Supports ${ENV_VAR} expansion. If omitted, OPENCLAW_ENGRAM_ACCESS_TOKEN is used."
|
|
615
|
+
},
|
|
616
|
+
"principal": {
|
|
617
|
+
"type": "string",
|
|
618
|
+
"description": "Optional trusted principal bound to the local Engram access bridge. When set, namespace write authorization is evaluated against this principal instead of any client-supplied sessionKey. If omitted, OPENCLAW_ENGRAM_ACCESS_PRINCIPAL is used when present."
|
|
619
|
+
},
|
|
620
|
+
"maxBodyBytes": {
|
|
621
|
+
"type": "number",
|
|
622
|
+
"default": 131072,
|
|
623
|
+
"description": "Maximum accepted JSON request body size for the local Remnic HTTP API."
|
|
624
|
+
}
|
|
625
|
+
},
|
|
626
|
+
"required": [
|
|
627
|
+
"enabled"
|
|
628
|
+
]
|
|
629
|
+
},
|
|
630
|
+
"accessTrackingEnabled": {
|
|
631
|
+
"type": "boolean",
|
|
632
|
+
"default": true,
|
|
633
|
+
"description": "Track memory access counts and recency"
|
|
634
|
+
},
|
|
635
|
+
"accessTrackingBufferMaxSize": {
|
|
636
|
+
"type": "number",
|
|
637
|
+
"default": 100,
|
|
638
|
+
"description": "Max entries in access tracking buffer before flush"
|
|
639
|
+
},
|
|
640
|
+
"recencyWeight": {
|
|
641
|
+
"type": "number",
|
|
642
|
+
"default": 0.2,
|
|
643
|
+
"description": "Weight for recency boosting in search (0-1)"
|
|
644
|
+
},
|
|
645
|
+
"boostAccessCount": {
|
|
646
|
+
"type": "boolean",
|
|
647
|
+
"default": true,
|
|
648
|
+
"description": "Boost frequently accessed memories in search results"
|
|
649
|
+
},
|
|
650
|
+
"recordEmptyRecallImpressions": {
|
|
651
|
+
"type": "boolean",
|
|
652
|
+
"default": false,
|
|
653
|
+
"description": "Record recall impressions with empty memoryIds when no memory context is injected."
|
|
654
|
+
},
|
|
655
|
+
"recallPlannerEnabled": {
|
|
656
|
+
"type": "boolean",
|
|
657
|
+
"default": true,
|
|
658
|
+
"description": "Use lightweight retrieve-vs-think planning to avoid unnecessary recall work."
|
|
659
|
+
},
|
|
660
|
+
"recallPlannerModel": {
|
|
661
|
+
"type": "string",
|
|
662
|
+
"default": "gpt-5.2-mini",
|
|
663
|
+
"description": "Model to use for the recall planner."
|
|
664
|
+
},
|
|
665
|
+
"recallPlannerTimeoutMs": {
|
|
666
|
+
"type": "number",
|
|
667
|
+
"default": 1500,
|
|
668
|
+
"description": "Timeout in ms for recall planner inference."
|
|
669
|
+
},
|
|
670
|
+
"recallPlannerUseResponsesApi": {
|
|
671
|
+
"type": "boolean",
|
|
672
|
+
"default": true,
|
|
673
|
+
"description": "Use OpenAI Responses API for recall planner calls."
|
|
674
|
+
},
|
|
675
|
+
"recallPlannerMaxPromptChars": {
|
|
676
|
+
"type": "number",
|
|
677
|
+
"default": 4000,
|
|
678
|
+
"description": "Maximum characters of prompt context to send to the recall planner."
|
|
679
|
+
},
|
|
680
|
+
"recallPlannerMaxMemoryHints": {
|
|
681
|
+
"type": "number",
|
|
682
|
+
"default": 24,
|
|
683
|
+
"description": "Maximum number of recent memory hints included in the recall planner prompt."
|
|
684
|
+
},
|
|
685
|
+
"recallPlannerShadowMode": {
|
|
686
|
+
"type": "boolean",
|
|
687
|
+
"default": false,
|
|
688
|
+
"description": "Run recall planner in shadow mode \u2014 evaluate but do not apply results."
|
|
689
|
+
},
|
|
690
|
+
"recallPlannerTelemetryEnabled": {
|
|
691
|
+
"type": "boolean",
|
|
692
|
+
"default": true,
|
|
693
|
+
"description": "Emit telemetry events for recall planner decisions."
|
|
694
|
+
},
|
|
695
|
+
"recallPlannerMaxQmdResultsMinimal": {
|
|
696
|
+
"type": "number",
|
|
697
|
+
"default": 4,
|
|
698
|
+
"description": "QMD cap used when recall planner selects minimal mode."
|
|
699
|
+
},
|
|
700
|
+
"recallPlannerMaxQmdResultsFull": {
|
|
701
|
+
"type": "number",
|
|
702
|
+
"default": 8,
|
|
703
|
+
"description": "QMD cap used when recall planner selects full mode."
|
|
704
|
+
},
|
|
705
|
+
"intentRoutingEnabled": {
|
|
706
|
+
"type": "boolean",
|
|
707
|
+
"default": false,
|
|
708
|
+
"description": "Attach intent metadata to memories and boost compatible memories at recall."
|
|
709
|
+
},
|
|
710
|
+
"intentRoutingBoost": {
|
|
711
|
+
"type": "number",
|
|
712
|
+
"default": 0.12,
|
|
713
|
+
"description": "Maximum score boost applied for intent-compatible memory matches."
|
|
714
|
+
},
|
|
715
|
+
"verbatimArtifactsEnabled": {
|
|
716
|
+
"type": "boolean",
|
|
717
|
+
"default": false,
|
|
718
|
+
"description": "Write quote-first artifact anchors during extraction and include them in recall."
|
|
719
|
+
},
|
|
720
|
+
"verbatimArtifactsMinConfidence": {
|
|
721
|
+
"type": "number",
|
|
722
|
+
"default": 0.8,
|
|
723
|
+
"description": "Minimum extraction confidence required before writing an artifact."
|
|
724
|
+
},
|
|
725
|
+
"verbatimArtifactsMaxRecall": {
|
|
726
|
+
"type": "number",
|
|
727
|
+
"default": 5,
|
|
728
|
+
"description": "Maximum artifact anchors injected per recall."
|
|
729
|
+
},
|
|
730
|
+
"verbatimArtifactCategories": {
|
|
731
|
+
"type": "array",
|
|
732
|
+
"items": {
|
|
733
|
+
"type": "string",
|
|
734
|
+
"enum": [
|
|
735
|
+
"fact",
|
|
736
|
+
"preference",
|
|
737
|
+
"correction",
|
|
738
|
+
"entity",
|
|
739
|
+
"decision",
|
|
740
|
+
"relationship",
|
|
741
|
+
"principle",
|
|
742
|
+
"commitment",
|
|
743
|
+
"moment",
|
|
744
|
+
"skill"
|
|
745
|
+
]
|
|
746
|
+
},
|
|
747
|
+
"default": [
|
|
748
|
+
"decision",
|
|
749
|
+
"correction",
|
|
750
|
+
"principle",
|
|
751
|
+
"commitment"
|
|
752
|
+
],
|
|
753
|
+
"description": "Memory categories eligible for artifact extraction."
|
|
754
|
+
},
|
|
755
|
+
"memoryBoxesEnabled": {
|
|
756
|
+
"type": "boolean",
|
|
757
|
+
"default": false,
|
|
758
|
+
"description": "Enable Memory Boxes (v8.0 Phase 2A). Groups memories into topic-bounded windows. Disabled by default."
|
|
759
|
+
},
|
|
760
|
+
"boxTopicShiftThreshold": {
|
|
761
|
+
"type": "number",
|
|
762
|
+
"default": 0.35,
|
|
763
|
+
"description": "Jaccard overlap threshold below which a topic shift seals the current box (0\u20131)."
|
|
764
|
+
},
|
|
765
|
+
"boxTimeGapMs": {
|
|
766
|
+
"type": "number",
|
|
767
|
+
"default": 1800000,
|
|
768
|
+
"description": "Time gap in milliseconds before an open box is sealed (default 30 min)."
|
|
769
|
+
},
|
|
770
|
+
"boxMaxMemories": {
|
|
771
|
+
"type": "number",
|
|
772
|
+
"default": 50,
|
|
773
|
+
"description": "Maximum memories per box before forced seal."
|
|
774
|
+
},
|
|
775
|
+
"traceWeaverEnabled": {
|
|
776
|
+
"type": "boolean",
|
|
777
|
+
"default": false,
|
|
778
|
+
"description": "Enable Trace Weaving (v8.0 Phase 2A). Links recurring topic boxes with a shared traceId."
|
|
779
|
+
},
|
|
780
|
+
"traceWeaverLookbackDays": {
|
|
781
|
+
"type": "number",
|
|
782
|
+
"default": 7,
|
|
783
|
+
"description": "Days back to search for trace links."
|
|
784
|
+
},
|
|
785
|
+
"traceWeaverOverlapThreshold": {
|
|
786
|
+
"type": "number",
|
|
787
|
+
"default": 0.4,
|
|
788
|
+
"description": "Minimum Jaccard topic overlap to assign the same traceId (0\u20131)."
|
|
789
|
+
},
|
|
790
|
+
"boxRecallDays": {
|
|
791
|
+
"type": "number",
|
|
792
|
+
"default": 3,
|
|
793
|
+
"description": "Number of recent days of boxes to inject during recall."
|
|
794
|
+
},
|
|
795
|
+
"episodeNoteModeEnabled": {
|
|
796
|
+
"type": "boolean",
|
|
797
|
+
"default": false,
|
|
798
|
+
"description": "Enable HiMem episode/note classification (v8.0 Phase 2B). Tags each extracted memory as 'episode' (time-specific event) or 'note' (stable belief/preference). Disabled by default."
|
|
799
|
+
},
|
|
800
|
+
"queryAwareIndexingEnabled": {
|
|
801
|
+
"type": "boolean",
|
|
802
|
+
"default": false,
|
|
803
|
+
"description": "Enable temporal and tag indexes (v8.1). Maintains state/index_time.json and state/index_tags.json for fast prefiltering. At recall time, temporal queries and #tag tokens receive a small score boost from the index. Disabled by default."
|
|
804
|
+
},
|
|
805
|
+
"queryAwareIndexingMaxCandidates": {
|
|
806
|
+
"type": "number",
|
|
807
|
+
"default": 200,
|
|
808
|
+
"description": "Max candidate paths returned from index prefilter before scoring (0 = no cap)."
|
|
809
|
+
},
|
|
810
|
+
"temporalIndexWindowDays": {
|
|
811
|
+
"type": "number",
|
|
812
|
+
"default": 30,
|
|
813
|
+
"description": "Number of days to include in the temporal index window."
|
|
814
|
+
},
|
|
815
|
+
"temporalIndexMaxEntries": {
|
|
816
|
+
"type": "number",
|
|
817
|
+
"default": 5000,
|
|
818
|
+
"description": "Maximum number of entries in the temporal index."
|
|
819
|
+
},
|
|
820
|
+
"temporalBoostRecentDays": {
|
|
821
|
+
"type": "number",
|
|
822
|
+
"default": 7,
|
|
823
|
+
"description": "Memories from the last N days receive a recency boost during recall."
|
|
824
|
+
},
|
|
825
|
+
"temporalBoostScore": {
|
|
826
|
+
"type": "number",
|
|
827
|
+
"default": 0.15,
|
|
828
|
+
"description": "Score boost applied to recent memories during recall."
|
|
829
|
+
},
|
|
830
|
+
"temporalDecayEnabled": {
|
|
831
|
+
"type": "boolean",
|
|
832
|
+
"default": true,
|
|
833
|
+
"description": "Apply temporal decay to older memories during recall scoring."
|
|
834
|
+
},
|
|
835
|
+
"tagMemoryEnabled": {
|
|
836
|
+
"type": "boolean",
|
|
837
|
+
"default": false,
|
|
838
|
+
"description": "Enable tag-based memory indexing and recall boosting."
|
|
839
|
+
},
|
|
840
|
+
"tagMaxPerMemory": {
|
|
841
|
+
"type": "number",
|
|
842
|
+
"default": 5,
|
|
843
|
+
"description": "Maximum number of tags assigned per memory."
|
|
844
|
+
},
|
|
845
|
+
"tagIndexMaxEntries": {
|
|
846
|
+
"type": "number",
|
|
847
|
+
"default": 10000,
|
|
848
|
+
"description": "Maximum number of entries in the tag index."
|
|
849
|
+
},
|
|
850
|
+
"tagRecallBoost": {
|
|
851
|
+
"type": "number",
|
|
852
|
+
"default": 0.15,
|
|
853
|
+
"description": "Score boost applied to memories whose tags match the query."
|
|
854
|
+
},
|
|
855
|
+
"tagRecallMaxMatches": {
|
|
856
|
+
"type": "number",
|
|
857
|
+
"default": 10,
|
|
858
|
+
"description": "Maximum number of tag-matched memories injected per recall."
|
|
859
|
+
},
|
|
860
|
+
"multiGraphMemoryEnabled": {
|
|
861
|
+
"type": "boolean",
|
|
862
|
+
"default": false,
|
|
863
|
+
"description": "Enable multi-graph memory (entity, time, causal edges). Default false."
|
|
864
|
+
},
|
|
865
|
+
"graphRecallEnabled": {
|
|
866
|
+
"type": "boolean",
|
|
867
|
+
"default": false,
|
|
868
|
+
"description": "Enable graph recall planner mode (`graph_mode`). Requires multiGraphMemoryEnabled. Default false."
|
|
869
|
+
},
|
|
870
|
+
"graphRecallMaxExpansions": {
|
|
871
|
+
"type": "number",
|
|
872
|
+
"default": 3,
|
|
873
|
+
"description": "Maximum number of expansion hops per graph recall query."
|
|
874
|
+
},
|
|
875
|
+
"graphRecallMaxPerSeed": {
|
|
876
|
+
"type": "number",
|
|
877
|
+
"default": 5,
|
|
878
|
+
"description": "Maximum graph-expanded results per seed node."
|
|
879
|
+
},
|
|
880
|
+
"graphRecallMinEdgeWeight": {
|
|
881
|
+
"type": "number",
|
|
882
|
+
"default": 0.1,
|
|
883
|
+
"description": "Minimum edge weight to follow during graph recall traversal."
|
|
884
|
+
},
|
|
885
|
+
"graphRecallShadowEnabled": {
|
|
886
|
+
"type": "boolean",
|
|
887
|
+
"default": false,
|
|
888
|
+
"description": "Run graph recall in shadow mode \u2014 evaluate but do not inject results."
|
|
889
|
+
},
|
|
890
|
+
"graphRecallSnapshotEnabled": {
|
|
891
|
+
"type": "boolean",
|
|
892
|
+
"default": false,
|
|
893
|
+
"description": "Write graph recall snapshots for offline analysis."
|
|
894
|
+
},
|
|
895
|
+
"graphRecallShadowSampleRate": {
|
|
896
|
+
"type": "number",
|
|
897
|
+
"default": 0.1,
|
|
898
|
+
"description": "Fraction of turns evaluated in shadow mode (0-1)."
|
|
899
|
+
},
|
|
900
|
+
"graphRecallExplainToolEnabled": {
|
|
901
|
+
"type": "boolean",
|
|
902
|
+
"default": false,
|
|
903
|
+
"description": "Expose a graph explain tool to agents during graph recall."
|
|
904
|
+
},
|
|
905
|
+
"graphRecallStoreColdMirror": {
|
|
906
|
+
"type": "boolean",
|
|
907
|
+
"default": false,
|
|
908
|
+
"description": "Store cold-path graph recall results in a secondary QMD collection."
|
|
909
|
+
},
|
|
910
|
+
"graphRecallColdMirrorCollection": {
|
|
911
|
+
"type": "string",
|
|
912
|
+
"description": "QMD collection name for cold-mirror graph recall results."
|
|
913
|
+
},
|
|
914
|
+
"graphRecallColdMirrorMinAgeDays": {
|
|
915
|
+
"type": "number",
|
|
916
|
+
"default": 7,
|
|
917
|
+
"description": "Minimum age in days for a memory to qualify for cold-mirror storage."
|
|
918
|
+
},
|
|
919
|
+
"graphRecallUseEntityPriors": {
|
|
920
|
+
"type": "boolean",
|
|
921
|
+
"default": false,
|
|
922
|
+
"description": "Boost seed nodes using entity prior scores during graph recall."
|
|
923
|
+
},
|
|
924
|
+
"graphRecallEntityPriorBoost": {
|
|
925
|
+
"type": "number",
|
|
926
|
+
"default": 0.2,
|
|
927
|
+
"description": "Score boost applied to nodes with strong entity priors."
|
|
928
|
+
},
|
|
929
|
+
"graphRecallPreferHubSeeds": {
|
|
930
|
+
"type": "boolean",
|
|
931
|
+
"default": false,
|
|
932
|
+
"description": "Prefer high-degree hub nodes as graph recall seeds."
|
|
933
|
+
},
|
|
934
|
+
"graphRecallHubBias": {
|
|
935
|
+
"type": "number",
|
|
936
|
+
"default": 0.3,
|
|
937
|
+
"description": "Bias weight toward hub-seed selection (0-1)."
|
|
938
|
+
},
|
|
939
|
+
"graphRecallRecencyHalfLifeDays": {
|
|
940
|
+
"type": "number",
|
|
941
|
+
"default": 30,
|
|
942
|
+
"description": "Half-life in days for recency decay applied to graph-expanded nodes."
|
|
943
|
+
},
|
|
944
|
+
"graphRecallDampingFactor": {
|
|
945
|
+
"type": "number",
|
|
946
|
+
"default": 0.85,
|
|
947
|
+
"description": "PageRank-style damping factor for graph activation propagation."
|
|
948
|
+
},
|
|
949
|
+
"graphRecallMaxSeedNodes": {
|
|
950
|
+
"type": "number",
|
|
951
|
+
"default": 10,
|
|
952
|
+
"description": "Maximum number of seed nodes selected for graph recall expansion."
|
|
953
|
+
},
|
|
954
|
+
"graphRecallMaxExpandedNodes": {
|
|
955
|
+
"type": "number",
|
|
956
|
+
"default": 30,
|
|
957
|
+
"description": "Maximum total nodes visited during graph recall expansion."
|
|
958
|
+
},
|
|
959
|
+
"graphRecallMaxTrailPerNode": {
|
|
960
|
+
"type": "number",
|
|
961
|
+
"default": 5,
|
|
962
|
+
"description": "Maximum trail length followed per node during graph traversal."
|
|
963
|
+
},
|
|
964
|
+
"graphRecallMinSeedScore": {
|
|
965
|
+
"type": "number",
|
|
966
|
+
"default": 0.3,
|
|
967
|
+
"description": "Minimum QMD score for a memory to qualify as a graph recall seed."
|
|
968
|
+
},
|
|
969
|
+
"graphRecallExpansionScoreThreshold": {
|
|
970
|
+
"type": "number",
|
|
971
|
+
"default": 0.2,
|
|
972
|
+
"description": "Minimum blended score required to include a graph-expanded node in results."
|
|
973
|
+
},
|
|
974
|
+
"graphRecallExplainMaxPaths": {
|
|
975
|
+
"type": "number",
|
|
976
|
+
"default": 3,
|
|
977
|
+
"description": "Maximum reasoning paths included in a graph recall explanation."
|
|
978
|
+
},
|
|
979
|
+
"graphRecallExplainMaxChars": {
|
|
980
|
+
"type": "number",
|
|
981
|
+
"default": 500,
|
|
982
|
+
"description": "Maximum characters per graph recall explanation."
|
|
983
|
+
},
|
|
984
|
+
"graphRecallExplainEdgeLimit": {
|
|
985
|
+
"type": "number",
|
|
986
|
+
"default": 5,
|
|
987
|
+
"description": "Maximum edges described per node in a graph recall explanation."
|
|
988
|
+
},
|
|
989
|
+
"graphRecallExplainEnabled": {
|
|
990
|
+
"type": "boolean",
|
|
991
|
+
"default": false,
|
|
992
|
+
"description": "Append natural-language graph reasoning explanations to recall output."
|
|
993
|
+
},
|
|
994
|
+
"graphRecallEntityHintsEnabled": {
|
|
995
|
+
"type": "boolean",
|
|
996
|
+
"default": false,
|
|
997
|
+
"description": "Inject entity hint summaries alongside graph-recalled memories."
|
|
998
|
+
},
|
|
999
|
+
"graphRecallEntityHintMax": {
|
|
1000
|
+
"type": "number",
|
|
1001
|
+
"default": 3,
|
|
1002
|
+
"description": "Maximum number of entity hints injected per graph recall result."
|
|
1003
|
+
},
|
|
1004
|
+
"graphRecallEntityHintMaxChars": {
|
|
1005
|
+
"type": "number",
|
|
1006
|
+
"default": 200,
|
|
1007
|
+
"description": "Maximum characters per entity hint injected during graph recall."
|
|
1008
|
+
},
|
|
1009
|
+
"graphRecallSnapshotDir": {
|
|
1010
|
+
"type": "string",
|
|
1011
|
+
"description": "Directory for graph recall snapshot files (defaults to {memoryDir}/state/graph)."
|
|
1012
|
+
},
|
|
1013
|
+
"graphRecallEnableTrace": {
|
|
1014
|
+
"type": "boolean",
|
|
1015
|
+
"default": false,
|
|
1016
|
+
"description": "Enable detailed graph recall trace logging for debugging."
|
|
1017
|
+
},
|
|
1018
|
+
"graphRecallEnableDebug": {
|
|
1019
|
+
"type": "boolean",
|
|
1020
|
+
"default": false,
|
|
1021
|
+
"description": "Enable verbose debug output for graph recall operations."
|
|
1022
|
+
},
|
|
1023
|
+
"graphExpandedIntentEnabled": {
|
|
1024
|
+
"type": "boolean",
|
|
1025
|
+
"default": true,
|
|
1026
|
+
"description": "Escalate broader causal/timeline phrasing into graph_mode planning."
|
|
1027
|
+
},
|
|
1028
|
+
"graphAssistInFullModeEnabled": {
|
|
1029
|
+
"type": "boolean",
|
|
1030
|
+
"default": true,
|
|
1031
|
+
"description": "Run bounded graph expansion during full recall mode when seed results exist."
|
|
1032
|
+
},
|
|
1033
|
+
"graphAssistShadowEvalEnabled": {
|
|
1034
|
+
"type": "boolean",
|
|
1035
|
+
"default": false,
|
|
1036
|
+
"description": "In full mode, compute graph assist for comparison telemetry and snapshots but keep injected recall output baseline-identical."
|
|
1037
|
+
},
|
|
1038
|
+
"graphAssistMinSeedResults": {
|
|
1039
|
+
"type": "number",
|
|
1040
|
+
"default": 3,
|
|
1041
|
+
"description": "Minimum seed recall results required before full-mode graph assist runs."
|
|
1042
|
+
},
|
|
1043
|
+
"entityGraphEnabled": {
|
|
1044
|
+
"type": "boolean",
|
|
1045
|
+
"default": true,
|
|
1046
|
+
"description": "Build entity co-reference graph (requires multiGraphMemoryEnabled). Default true."
|
|
1047
|
+
},
|
|
1048
|
+
"timeGraphEnabled": {
|
|
1049
|
+
"type": "boolean",
|
|
1050
|
+
"default": true,
|
|
1051
|
+
"description": "Build temporal sequence graph within threads (requires multiGraphMemoryEnabled). Default true."
|
|
1052
|
+
},
|
|
1053
|
+
"graphWriteSessionAdjacencyEnabled": {
|
|
1054
|
+
"type": "boolean",
|
|
1055
|
+
"default": true,
|
|
1056
|
+
"description": "Write fallback temporal adjacency edges for consecutive extracted memories in the same session."
|
|
1057
|
+
},
|
|
1058
|
+
"causalGraphEnabled": {
|
|
1059
|
+
"type": "boolean",
|
|
1060
|
+
"default": true,
|
|
1061
|
+
"description": "Build causal inference graph from heuristic phrases (requires multiGraphMemoryEnabled). Default true."
|
|
1062
|
+
},
|
|
1063
|
+
"maxGraphTraversalSteps": {
|
|
1064
|
+
"type": "number",
|
|
1065
|
+
"default": 3,
|
|
1066
|
+
"description": "Maximum BFS hops during spreading activation. Default 3."
|
|
1067
|
+
},
|
|
1068
|
+
"graphActivationDecay": {
|
|
1069
|
+
"type": "number",
|
|
1070
|
+
"default": 0.7,
|
|
1071
|
+
"description": "Per-hop activation decay factor (0-1). Default 0.7."
|
|
1072
|
+
},
|
|
1073
|
+
"graphExpansionActivationWeight": {
|
|
1074
|
+
"type": "number",
|
|
1075
|
+
"default": 0.65,
|
|
1076
|
+
"description": "Blend weight for graph activation when scoring expanded results (0-1). Higher values favor graph activation over seed QMD score."
|
|
1077
|
+
},
|
|
1078
|
+
"graphExpansionBlendMin": {
|
|
1079
|
+
"type": "number",
|
|
1080
|
+
"default": 0.05,
|
|
1081
|
+
"description": "Lower clamp bound for blended graph-expanded recall scores (0-1)."
|
|
1082
|
+
},
|
|
1083
|
+
"graphExpansionBlendMax": {
|
|
1084
|
+
"type": "number",
|
|
1085
|
+
"default": 0.95,
|
|
1086
|
+
"description": "Upper clamp bound for blended graph-expanded recall scores (0-1)."
|
|
1087
|
+
},
|
|
1088
|
+
"maxEntityGraphEdgesPerMemory": {
|
|
1089
|
+
"type": "number",
|
|
1090
|
+
"default": 10,
|
|
1091
|
+
"description": "Maximum entity graph edges written per memory write. Default 10."
|
|
1092
|
+
},
|
|
1093
|
+
"delinearizeEnabled": {
|
|
1094
|
+
"type": "boolean",
|
|
1095
|
+
"default": true,
|
|
1096
|
+
"description": "SimpleMem-inspired de-linearization: resolve pronouns and anchor relative dates in extracted memories"
|
|
1097
|
+
},
|
|
1098
|
+
"recallConfidenceGateEnabled": {
|
|
1099
|
+
"type": "boolean",
|
|
1100
|
+
"default": false,
|
|
1101
|
+
"description": "Synapse-inspired confidence gate: skip memory injection when top recall score is below threshold"
|
|
1102
|
+
},
|
|
1103
|
+
"recallConfidenceGateThreshold": {
|
|
1104
|
+
"type": "number",
|
|
1105
|
+
"default": 0.12,
|
|
1106
|
+
"description": "Minimum top recall score to inject memories (0-1). Below this, memories are rejected as too uncertain"
|
|
1107
|
+
},
|
|
1108
|
+
"causalRuleExtractionEnabled": {
|
|
1109
|
+
"type": "boolean",
|
|
1110
|
+
"default": false,
|
|
1111
|
+
"description": "PlugMem-inspired causal rule extraction: mine IF-THEN rules from conversations during consolidation"
|
|
1112
|
+
},
|
|
1113
|
+
"memoryReconstructionEnabled": {
|
|
1114
|
+
"type": "boolean",
|
|
1115
|
+
"default": false,
|
|
1116
|
+
"description": "E-Mem-inspired memory reconstruction: targeted secondary retrieval for entity references lacking context in recall"
|
|
1117
|
+
},
|
|
1118
|
+
"memoryReconstructionMaxExpansions": {
|
|
1119
|
+
"type": "number",
|
|
1120
|
+
"default": 3,
|
|
1121
|
+
"description": "Maximum number of entity expansions per recall cycle"
|
|
1122
|
+
},
|
|
1123
|
+
"graphLateralInhibitionEnabled": {
|
|
1124
|
+
"type": "boolean",
|
|
1125
|
+
"default": true,
|
|
1126
|
+
"description": "Synapse-inspired lateral inhibition to suppress hub-node dominance in graph retrieval"
|
|
1127
|
+
},
|
|
1128
|
+
"graphLateralInhibitionBeta": {
|
|
1129
|
+
"type": "number",
|
|
1130
|
+
"default": 0.15,
|
|
1131
|
+
"description": "Inhibition strength (0-1). Higher values suppress weaker nodes more aggressively"
|
|
1132
|
+
},
|
|
1133
|
+
"graphLateralInhibitionTopM": {
|
|
1134
|
+
"type": "number",
|
|
1135
|
+
"default": 7,
|
|
1136
|
+
"description": "Number of top competing nodes considered for lateral inhibition"
|
|
1137
|
+
},
|
|
1138
|
+
"temporalMemoryTreeEnabled": {
|
|
1139
|
+
"type": "boolean",
|
|
1140
|
+
"default": false,
|
|
1141
|
+
"description": "Build a hierarchical memory summary tree (hour/day/week/persona nodes). Default: false."
|
|
1142
|
+
},
|
|
1143
|
+
"tmtHourlyMinMemories": {
|
|
1144
|
+
"type": "number",
|
|
1145
|
+
"default": 3,
|
|
1146
|
+
"description": "Minimum new memories in an hour to trigger an hour-level TMT node. Default: 3."
|
|
1147
|
+
},
|
|
1148
|
+
"tmtSummaryMaxTokens": {
|
|
1149
|
+
"type": "number",
|
|
1150
|
+
"default": 300,
|
|
1151
|
+
"description": "Max tokens for each TMT summary node. Default: 300."
|
|
1152
|
+
},
|
|
1153
|
+
"queryExpansionEnabled": {
|
|
1154
|
+
"type": "boolean",
|
|
1155
|
+
"default": false,
|
|
1156
|
+
"description": "Enable heuristic query expansion for retrieval (no LLM calls)."
|
|
1157
|
+
},
|
|
1158
|
+
"queryExpansionMaxQueries": {
|
|
1159
|
+
"type": "number",
|
|
1160
|
+
"default": 4,
|
|
1161
|
+
"description": "Max expanded queries to run (including the original prompt)."
|
|
1162
|
+
},
|
|
1163
|
+
"queryExpansionMinTokenLen": {
|
|
1164
|
+
"type": "number",
|
|
1165
|
+
"default": 3,
|
|
1166
|
+
"description": "Minimum token length to include in heuristic query expansion."
|
|
1167
|
+
},
|
|
1168
|
+
"rerankEnabled": {
|
|
1169
|
+
"type": "boolean",
|
|
1170
|
+
"default": false,
|
|
1171
|
+
"description": "Enable LLM re-ranking of retrieved memories. Default off."
|
|
1172
|
+
},
|
|
1173
|
+
"rerankProvider": {
|
|
1174
|
+
"type": "string",
|
|
1175
|
+
"default": "local",
|
|
1176
|
+
"description": "Re-ranking provider: 'local' uses local LLM only. 'cloud' is reserved/experimental (currently treated as no-op).",
|
|
1177
|
+
"enum": [
|
|
1178
|
+
"local",
|
|
1179
|
+
"cloud"
|
|
1180
|
+
]
|
|
1181
|
+
},
|
|
1182
|
+
"rerankMaxCandidates": {
|
|
1183
|
+
"type": "number",
|
|
1184
|
+
"default": 20,
|
|
1185
|
+
"description": "Max candidates to send to the re-ranker."
|
|
1186
|
+
},
|
|
1187
|
+
"rerankTimeoutMs": {
|
|
1188
|
+
"type": "number",
|
|
1189
|
+
"default": 8000,
|
|
1190
|
+
"description": "Timeout for re-ranking requests (ms). Fail-open on timeout."
|
|
1191
|
+
},
|
|
1192
|
+
"rerankCacheEnabled": {
|
|
1193
|
+
"type": "boolean",
|
|
1194
|
+
"default": true,
|
|
1195
|
+
"description": "Cache re-ranking results in-memory for repeated queries."
|
|
1196
|
+
},
|
|
1197
|
+
"rerankCacheTtlMs": {
|
|
1198
|
+
"type": "number",
|
|
1199
|
+
"default": 3600000,
|
|
1200
|
+
"description": "TTL for in-memory re-ranking cache (ms)."
|
|
1201
|
+
},
|
|
1202
|
+
"feedbackEnabled": {
|
|
1203
|
+
"type": "boolean",
|
|
1204
|
+
"default": false,
|
|
1205
|
+
"description": "Enable feedback capture tool for memory relevance (thumbs up/down)."
|
|
1206
|
+
},
|
|
1207
|
+
"negativeExamplesEnabled": {
|
|
1208
|
+
"type": "boolean",
|
|
1209
|
+
"default": false,
|
|
1210
|
+
"description": "Enable negative examples (track retrieved-but-not-useful memories) and apply a small ranking penalty."
|
|
1211
|
+
},
|
|
1212
|
+
"negativeExamplesPenaltyPerHit": {
|
|
1213
|
+
"type": "number",
|
|
1214
|
+
"default": 0.05,
|
|
1215
|
+
"description": "Ranking penalty per negative example hit (keep small; QMD scores are ~0-1)."
|
|
1216
|
+
},
|
|
1217
|
+
"negativeExamplesPenaltyCap": {
|
|
1218
|
+
"type": "number",
|
|
1219
|
+
"default": 0.25,
|
|
1220
|
+
"description": "Maximum ranking penalty applied from negative examples."
|
|
1221
|
+
},
|
|
1222
|
+
"chunkingEnabled": {
|
|
1223
|
+
"type": "boolean",
|
|
1224
|
+
"default": false,
|
|
1225
|
+
"description": "Enable automatic chunking of long memories"
|
|
1226
|
+
},
|
|
1227
|
+
"chunkingTargetTokens": {
|
|
1228
|
+
"type": "number",
|
|
1229
|
+
"default": 200,
|
|
1230
|
+
"description": "Target tokens per chunk"
|
|
1231
|
+
},
|
|
1232
|
+
"chunkingMinTokens": {
|
|
1233
|
+
"type": "number",
|
|
1234
|
+
"default": 150,
|
|
1235
|
+
"description": "Minimum tokens to trigger chunking"
|
|
1236
|
+
},
|
|
1237
|
+
"chunkingOverlapSentences": {
|
|
1238
|
+
"type": "number",
|
|
1239
|
+
"default": 2,
|
|
1240
|
+
"description": "Number of sentences to overlap between chunks"
|
|
1241
|
+
},
|
|
1242
|
+
"contradictionDetectionEnabled": {
|
|
1243
|
+
"type": "boolean",
|
|
1244
|
+
"default": false,
|
|
1245
|
+
"description": "Enable automatic contradiction detection with LLM verification"
|
|
1246
|
+
},
|
|
1247
|
+
"contradictionSimilarityThreshold": {
|
|
1248
|
+
"type": "number",
|
|
1249
|
+
"default": 0.7,
|
|
1250
|
+
"description": "QMD similarity threshold to trigger contradiction check"
|
|
1251
|
+
},
|
|
1252
|
+
"contradictionMinConfidence": {
|
|
1253
|
+
"type": "number",
|
|
1254
|
+
"default": 0.9,
|
|
1255
|
+
"description": "Minimum LLM confidence to auto-resolve contradictions"
|
|
1256
|
+
},
|
|
1257
|
+
"contradictionAutoResolve": {
|
|
1258
|
+
"type": "boolean",
|
|
1259
|
+
"default": true,
|
|
1260
|
+
"description": "Automatically supersede contradicted memories"
|
|
1261
|
+
},
|
|
1262
|
+
"memoryLinkingEnabled": {
|
|
1263
|
+
"type": "boolean",
|
|
1264
|
+
"default": false,
|
|
1265
|
+
"description": "Enable automatic memory linking to build knowledge graph"
|
|
1266
|
+
},
|
|
1267
|
+
"threadingEnabled": {
|
|
1268
|
+
"type": "boolean",
|
|
1269
|
+
"default": false,
|
|
1270
|
+
"description": "Enable conversation threading"
|
|
1271
|
+
},
|
|
1272
|
+
"threadingGapMinutes": {
|
|
1273
|
+
"type": "number",
|
|
1274
|
+
"default": 30,
|
|
1275
|
+
"description": "Minutes of gap to start a new thread"
|
|
1276
|
+
},
|
|
1277
|
+
"summarizationEnabled": {
|
|
1278
|
+
"type": "boolean",
|
|
1279
|
+
"default": false,
|
|
1280
|
+
"description": "Enable automatic memory summarization/compression"
|
|
1281
|
+
},
|
|
1282
|
+
"summarizationTriggerCount": {
|
|
1283
|
+
"type": "number",
|
|
1284
|
+
"default": 1000,
|
|
1285
|
+
"description": "Memory count threshold to trigger summarization"
|
|
1286
|
+
},
|
|
1287
|
+
"summarizationRecentToKeep": {
|
|
1288
|
+
"type": "number",
|
|
1289
|
+
"default": 300,
|
|
1290
|
+
"description": "Number of recent memories to keep uncompressed"
|
|
1291
|
+
},
|
|
1292
|
+
"summarizationImportanceThreshold": {
|
|
1293
|
+
"type": "number",
|
|
1294
|
+
"default": 0.3,
|
|
1295
|
+
"description": "Only compress memories with importance below this threshold"
|
|
1296
|
+
},
|
|
1297
|
+
"summarizationProtectedTags": {
|
|
1298
|
+
"type": "array",
|
|
1299
|
+
"items": {
|
|
1300
|
+
"type": "string"
|
|
1301
|
+
},
|
|
1302
|
+
"default": [
|
|
1303
|
+
"commitment",
|
|
1304
|
+
"preference",
|
|
1305
|
+
"decision",
|
|
1306
|
+
"principle"
|
|
1307
|
+
],
|
|
1308
|
+
"description": "Tags that protect memories from compression"
|
|
1309
|
+
},
|
|
1310
|
+
"topicExtractionEnabled": {
|
|
1311
|
+
"type": "boolean",
|
|
1312
|
+
"default": true,
|
|
1313
|
+
"description": "Enable topic extraction during consolidation"
|
|
1314
|
+
},
|
|
1315
|
+
"topicExtractionTopN": {
|
|
1316
|
+
"type": "number",
|
|
1317
|
+
"default": 50,
|
|
1318
|
+
"description": "Number of top topics to extract"
|
|
1319
|
+
},
|
|
1320
|
+
"transcriptEnabled": {
|
|
1321
|
+
"type": "boolean",
|
|
1322
|
+
"default": true,
|
|
1323
|
+
"description": "Enable transcript archiving"
|
|
1324
|
+
},
|
|
1325
|
+
"captureMode": {
|
|
1326
|
+
"type": "string",
|
|
1327
|
+
"enum": [
|
|
1328
|
+
"implicit",
|
|
1329
|
+
"explicit",
|
|
1330
|
+
"hybrid"
|
|
1331
|
+
],
|
|
1332
|
+
"default": "implicit",
|
|
1333
|
+
"description": "Memory capture policy. implicit preserves normal extraction, explicit stores only structured capture, and hybrid allows both."
|
|
1334
|
+
},
|
|
1335
|
+
"transcriptRetentionDays": {
|
|
1336
|
+
"type": "number",
|
|
1337
|
+
"default": 7,
|
|
1338
|
+
"description": "Days to retain transcript entries"
|
|
1339
|
+
},
|
|
1340
|
+
"transcriptSkipChannelTypes": {
|
|
1341
|
+
"type": "array",
|
|
1342
|
+
"items": {
|
|
1343
|
+
"type": "string"
|
|
1344
|
+
},
|
|
1345
|
+
"default": [
|
|
1346
|
+
"cron"
|
|
1347
|
+
],
|
|
1348
|
+
"description": "Channel types to skip from transcript logging (e.g., cron)"
|
|
1349
|
+
},
|
|
1350
|
+
"transcriptRecallHours": {
|
|
1351
|
+
"type": "number",
|
|
1352
|
+
"default": 12,
|
|
1353
|
+
"description": "Hours of transcript history to recall"
|
|
1354
|
+
},
|
|
1355
|
+
"maxTranscriptTurns": {
|
|
1356
|
+
"type": "number",
|
|
1357
|
+
"default": 50,
|
|
1358
|
+
"description": "Maximum transcript turns to inject"
|
|
1359
|
+
},
|
|
1360
|
+
"maxTranscriptTokens": {
|
|
1361
|
+
"type": "number",
|
|
1362
|
+
"default": 1000,
|
|
1363
|
+
"description": "Maximum tokens for transcript injection"
|
|
1364
|
+
},
|
|
1365
|
+
"checkpointEnabled": {
|
|
1366
|
+
"type": "boolean",
|
|
1367
|
+
"default": true,
|
|
1368
|
+
"description": "Enable conversation checkpoints"
|
|
1369
|
+
},
|
|
1370
|
+
"checkpointTurns": {
|
|
1371
|
+
"type": "number",
|
|
1372
|
+
"default": 15,
|
|
1373
|
+
"description": "Number of turns per checkpoint"
|
|
1374
|
+
},
|
|
1375
|
+
"compactionResetEnabled": {
|
|
1376
|
+
"type": "boolean",
|
|
1377
|
+
"default": false,
|
|
1378
|
+
"description": "Trigger session reset after compaction with BOOT.md injection (requires OC fork with api.resetSession)"
|
|
1379
|
+
},
|
|
1380
|
+
"hourlySummariesEnabled": {
|
|
1381
|
+
"type": "boolean",
|
|
1382
|
+
"default": true,
|
|
1383
|
+
"description": "Enable hourly conversation summaries"
|
|
1384
|
+
},
|
|
1385
|
+
"daySummaryEnabled": {
|
|
1386
|
+
"type": "boolean",
|
|
1387
|
+
"default": true,
|
|
1388
|
+
"description": "Enable end-of-day summary generation via engram.day_summary MCP tool"
|
|
1389
|
+
},
|
|
1390
|
+
"summaryRecallHours": {
|
|
1391
|
+
"type": "number",
|
|
1392
|
+
"default": 24,
|
|
1393
|
+
"description": "Hours of summary history to recall"
|
|
1394
|
+
},
|
|
1395
|
+
"maxSummaryCount": {
|
|
1396
|
+
"type": "number",
|
|
1397
|
+
"default": 6,
|
|
1398
|
+
"description": "Maximum number of summaries to inject"
|
|
1399
|
+
},
|
|
1400
|
+
"summaryModel": {
|
|
1401
|
+
"type": "string",
|
|
1402
|
+
"description": "Model for hourly summaries (defaults to main model)"
|
|
1403
|
+
},
|
|
1404
|
+
"modelSource": {
|
|
1405
|
+
"type": "string",
|
|
1406
|
+
"enum": ["plugin", "gateway"],
|
|
1407
|
+
"default": "plugin",
|
|
1408
|
+
"description": "LLM source: 'plugin' uses Engram's own openai/localLlm config; 'gateway' delegates to a gateway agent's model chain (agents.list[])."
|
|
1409
|
+
},
|
|
1410
|
+
"gatewayAgentId": {
|
|
1411
|
+
"type": "string",
|
|
1412
|
+
"default": "",
|
|
1413
|
+
"description": "Agent persona ID (from openclaw.json agents.list[]) whose model chain to use for extraction, consolidation, and summarization. Required when modelSource is 'gateway'. Falls back to agents.defaults.model if empty."
|
|
1414
|
+
},
|
|
1415
|
+
"fastGatewayAgentId": {
|
|
1416
|
+
"type": "string",
|
|
1417
|
+
"default": "",
|
|
1418
|
+
"description": "Agent persona ID for fast-tier ops (rerank, entity summaries, compression guidelines). When modelSource is 'gateway' and this is empty, fast ops use the same chain as gatewayAgentId."
|
|
1419
|
+
},
|
|
1420
|
+
"localLlmEnabled": {
|
|
1421
|
+
"type": "boolean",
|
|
1422
|
+
"default": false,
|
|
1423
|
+
"description": "Enable local LLM for extraction and summarization (e.g., LM Studio, Ollama)"
|
|
1424
|
+
},
|
|
1425
|
+
"localLlmUrl": {
|
|
1426
|
+
"type": "string",
|
|
1427
|
+
"default": "http://localhost:1234/v1",
|
|
1428
|
+
"description": "URL for local LLM OpenAI-compatible endpoint"
|
|
1429
|
+
},
|
|
1430
|
+
"localLlmModel": {
|
|
1431
|
+
"type": "string",
|
|
1432
|
+
"default": "local-model",
|
|
1433
|
+
"description": "Model name for local LLM requests"
|
|
1434
|
+
},
|
|
1435
|
+
"localLlmApiKey": {
|
|
1436
|
+
"type": "string",
|
|
1437
|
+
"description": "Optional API key for authenticated OpenAI-compatible local endpoints"
|
|
1438
|
+
},
|
|
1439
|
+
"localLlmHeaders": {
|
|
1440
|
+
"type": "object",
|
|
1441
|
+
"description": "Optional additional headers for local/compatible endpoint requests",
|
|
1442
|
+
"additionalProperties": {
|
|
1443
|
+
"type": "string"
|
|
1444
|
+
}
|
|
1445
|
+
},
|
|
1446
|
+
"localLlmAuthHeader": {
|
|
1447
|
+
"type": "boolean",
|
|
1448
|
+
"default": true,
|
|
1449
|
+
"description": "If false, do not send Authorization header even when localLlmApiKey is set"
|
|
1450
|
+
},
|
|
1451
|
+
"localLlmFallback": {
|
|
1452
|
+
"type": "boolean",
|
|
1453
|
+
"default": true,
|
|
1454
|
+
"description": "Fall back to cloud OpenAI if local LLM is unavailable"
|
|
1455
|
+
},
|
|
1456
|
+
"localLlmHomeDir": {
|
|
1457
|
+
"type": "string",
|
|
1458
|
+
"description": "Optional home directory override for local LLM helpers (LM Studio settings + CLI PATH resolution)."
|
|
1459
|
+
},
|
|
1460
|
+
"localLmsCliPath": {
|
|
1461
|
+
"type": "string",
|
|
1462
|
+
"description": "Optional absolute path to LMS CLI binary. Preferred over auto-detected locations."
|
|
1463
|
+
},
|
|
1464
|
+
"localLmsBinDir": {
|
|
1465
|
+
"type": "string",
|
|
1466
|
+
"description": "Optional bin directory prepended to PATH for LMS CLI execution."
|
|
1467
|
+
},
|
|
1468
|
+
"localLlmTimeoutMs": {
|
|
1469
|
+
"type": "number",
|
|
1470
|
+
"default": 180000,
|
|
1471
|
+
"description": "Hard timeout for local LLM requests (ms)"
|
|
1472
|
+
},
|
|
1473
|
+
"slowLogEnabled": {
|
|
1474
|
+
"type": "boolean",
|
|
1475
|
+
"default": false,
|
|
1476
|
+
"description": "If enabled, log slow operations (durations + metadata; never logs content)"
|
|
1477
|
+
},
|
|
1478
|
+
"slowLogThresholdMs": {
|
|
1479
|
+
"type": "number",
|
|
1480
|
+
"default": 30000,
|
|
1481
|
+
"description": "Threshold for slow operation logging (ms)"
|
|
1482
|
+
},
|
|
1483
|
+
"traceRecallContent": {
|
|
1484
|
+
"type": "boolean",
|
|
1485
|
+
"default": false,
|
|
1486
|
+
"description": "If true, include the full recalled memory text in RecallTraceEvent.recalledContent emitted to __openclawEngramTrace subscribers (e.g. Langfuse). Disabled by default \u2014 only enable when you want external trace collectors to capture injected memory context."
|
|
1487
|
+
},
|
|
1488
|
+
"profilingEnabled": {
|
|
1489
|
+
"type": "boolean",
|
|
1490
|
+
"default": false,
|
|
1491
|
+
"description": "If true, enable performance profiling for recall and extraction pipelines. Profiling data is stored locally in the profiling storage directory."
|
|
1492
|
+
},
|
|
1493
|
+
"profilingStorageDir": {
|
|
1494
|
+
"type": "string",
|
|
1495
|
+
"default": "",
|
|
1496
|
+
"description": "Directory path for storing profiling trace files. Defaults to <memoryDir>/profiling if empty."
|
|
1497
|
+
},
|
|
1498
|
+
"profilingMaxTraces": {
|
|
1499
|
+
"type": "number",
|
|
1500
|
+
"default": 100,
|
|
1501
|
+
"description": "Maximum number of profiling trace files to retain. Oldest traces are pruned when this limit is exceeded."
|
|
1502
|
+
},
|
|
1503
|
+
"extractionDedupeEnabled": {
|
|
1504
|
+
"type": "boolean",
|
|
1505
|
+
"default": true,
|
|
1506
|
+
"description": "Enable deduplication of near-identical extraction batches within a time window."
|
|
1507
|
+
},
|
|
1508
|
+
"extractionDedupeWindowMs": {
|
|
1509
|
+
"type": "number",
|
|
1510
|
+
"default": 300000,
|
|
1511
|
+
"description": "Window for extraction dedupe fingerprints (ms)."
|
|
1512
|
+
},
|
|
1513
|
+
"extractionMinChars": {
|
|
1514
|
+
"type": "number",
|
|
1515
|
+
"default": 40,
|
|
1516
|
+
"description": "Minimum combined user/assistant characters required before extraction runs."
|
|
1517
|
+
},
|
|
1518
|
+
"extractionMinUserTurns": {
|
|
1519
|
+
"type": "number",
|
|
1520
|
+
"default": 1,
|
|
1521
|
+
"description": "Minimum number of user turns required before extraction runs."
|
|
1522
|
+
},
|
|
1523
|
+
"extractionMaxTurnChars": {
|
|
1524
|
+
"type": "number",
|
|
1525
|
+
"default": 4000,
|
|
1526
|
+
"description": "Maximum characters per turn fed to extraction (long turns are truncated)."
|
|
1527
|
+
},
|
|
1528
|
+
"extractionMaxFactsPerRun": {
|
|
1529
|
+
"type": "number",
|
|
1530
|
+
"default": 12,
|
|
1531
|
+
"description": "Maximum facts persisted from a single extraction run."
|
|
1532
|
+
},
|
|
1533
|
+
"extractionMaxEntitiesPerRun": {
|
|
1534
|
+
"type": "number",
|
|
1535
|
+
"default": 6,
|
|
1536
|
+
"description": "Maximum entities persisted from a single extraction run."
|
|
1537
|
+
},
|
|
1538
|
+
"extractionMaxQuestionsPerRun": {
|
|
1539
|
+
"type": "number",
|
|
1540
|
+
"default": 3,
|
|
1541
|
+
"description": "Maximum questions persisted from a single extraction run."
|
|
1542
|
+
},
|
|
1543
|
+
"extractionMaxProfileUpdatesPerRun": {
|
|
1544
|
+
"type": "number",
|
|
1545
|
+
"default": 4,
|
|
1546
|
+
"description": "Maximum profile updates persisted from a single extraction run."
|
|
1547
|
+
},
|
|
1548
|
+
"consolidationRequireNonZeroExtraction": {
|
|
1549
|
+
"type": "boolean",
|
|
1550
|
+
"default": true,
|
|
1551
|
+
"description": "Only schedule consolidation when the last extraction produced durable outputs."
|
|
1552
|
+
},
|
|
1553
|
+
"consolidationMinIntervalMs": {
|
|
1554
|
+
"type": "number",
|
|
1555
|
+
"default": 600000,
|
|
1556
|
+
"description": "Minimum interval between consolidation runs (ms)."
|
|
1557
|
+
},
|
|
1558
|
+
"qmdMaintenanceEnabled": {
|
|
1559
|
+
"type": "boolean",
|
|
1560
|
+
"default": true,
|
|
1561
|
+
"description": "Enable debounced background QMD maintenance instead of immediate updates on extraction."
|
|
1562
|
+
},
|
|
1563
|
+
"qmdMaintenanceDebounceMs": {
|
|
1564
|
+
"type": "number",
|
|
1565
|
+
"default": 30000,
|
|
1566
|
+
"description": "Debounce window for background QMD maintenance updates (ms)."
|
|
1567
|
+
},
|
|
1568
|
+
"qmdAutoEmbedEnabled": {
|
|
1569
|
+
"type": "boolean",
|
|
1570
|
+
"default": false,
|
|
1571
|
+
"description": "If true, background QMD maintenance also runs embed on a throttled cadence."
|
|
1572
|
+
},
|
|
1573
|
+
"qmdEmbedMinIntervalMs": {
|
|
1574
|
+
"type": "number",
|
|
1575
|
+
"default": 3600000,
|
|
1576
|
+
"description": "Minimum interval between background QMD embed runs (ms)."
|
|
1577
|
+
},
|
|
1578
|
+
"qmdUpdateTimeoutMs": {
|
|
1579
|
+
"type": "number",
|
|
1580
|
+
"default": 90000,
|
|
1581
|
+
"description": "Timeout for QMD update command (ms). Increase if your index grows and updates exceed 30s."
|
|
1582
|
+
},
|
|
1583
|
+
"qmdUpdateMinIntervalMs": {
|
|
1584
|
+
"type": "number",
|
|
1585
|
+
"default": 900000,
|
|
1586
|
+
"description": "Minimum interval between QMD update executions (ms). Useful because current QMD update runs globally across collections."
|
|
1587
|
+
},
|
|
1588
|
+
"localLlmRetry5xxCount": {
|
|
1589
|
+
"type": "number",
|
|
1590
|
+
"default": 1,
|
|
1591
|
+
"description": "Number of retry attempts for local LLM 5xx responses."
|
|
1592
|
+
},
|
|
1593
|
+
"localLlmRetryBackoffMs": {
|
|
1594
|
+
"type": "number",
|
|
1595
|
+
"default": 400,
|
|
1596
|
+
"description": "Base backoff delay between local LLM retries (ms)."
|
|
1597
|
+
},
|
|
1598
|
+
"localLlm400TripThreshold": {
|
|
1599
|
+
"type": "number",
|
|
1600
|
+
"default": 5,
|
|
1601
|
+
"description": "Consecutive 400 responses before local LLM enters temporary cooldown."
|
|
1602
|
+
},
|
|
1603
|
+
"localLlm400CooldownMs": {
|
|
1604
|
+
"type": "number",
|
|
1605
|
+
"default": 120000,
|
|
1606
|
+
"description": "Cooldown duration after tripping local LLM 400 threshold (ms)."
|
|
1607
|
+
},
|
|
1608
|
+
"localLlmMaxContext": {
|
|
1609
|
+
"type": "number",
|
|
1610
|
+
"description": "Override the detected context window for local LLM. Set to 32768 if your LLM server defaults to 32K context despite the model supporting 128K."
|
|
1611
|
+
},
|
|
1612
|
+
"localLlmFastEnabled": {
|
|
1613
|
+
"type": "boolean",
|
|
1614
|
+
"default": false,
|
|
1615
|
+
"description": "Enable a separate smaller/faster local LLM for quick operations (rerank, entity_summary, tmt_summary, compression_guideline)."
|
|
1616
|
+
},
|
|
1617
|
+
"localLlmFastModel": {
|
|
1618
|
+
"type": "string",
|
|
1619
|
+
"default": "",
|
|
1620
|
+
"description": "Model ID for fast-tier local LLM operations. Empty string uses the primary localLlmModel."
|
|
1621
|
+
},
|
|
1622
|
+
"localLlmFastUrl": {
|
|
1623
|
+
"type": "string",
|
|
1624
|
+
"description": "Endpoint for the fast-tier local LLM. Defaults to the same endpoint as localLlmUrl when not set."
|
|
1625
|
+
},
|
|
1626
|
+
"localLlmFastTimeoutMs": {
|
|
1627
|
+
"type": "number",
|
|
1628
|
+
"default": 15000,
|
|
1629
|
+
"description": "Timeout for fast-tier local LLM requests (ms). Lower than primary since fast ops should complete quickly."
|
|
1630
|
+
},
|
|
1631
|
+
"hourlySummaryCronAutoRegister": {
|
|
1632
|
+
"type": "boolean",
|
|
1633
|
+
"default": false,
|
|
1634
|
+
"description": "If true, Engram may attempt to auto-register an hourly summary cron job (default off)."
|
|
1635
|
+
},
|
|
1636
|
+
"nightlyGovernanceCronAutoRegister": {
|
|
1637
|
+
"type": "boolean",
|
|
1638
|
+
"default": false,
|
|
1639
|
+
"description": "If true, Engram may attempt to auto-register the nightly governance cron job (default off)."
|
|
1640
|
+
},
|
|
1641
|
+
"hourlySummariesExtendedEnabled": {
|
|
1642
|
+
"type": "boolean",
|
|
1643
|
+
"default": false,
|
|
1644
|
+
"description": "Enable structured hourly summaries (topics/decisions/action items/rejections). Default off."
|
|
1645
|
+
},
|
|
1646
|
+
"hourlySummariesIncludeToolStats": {
|
|
1647
|
+
"type": "boolean",
|
|
1648
|
+
"default": false,
|
|
1649
|
+
"description": "Include tool usage counts in extended hourly summaries (requires tool usage capture)."
|
|
1650
|
+
},
|
|
1651
|
+
"hourlySummariesIncludeSystemMessages": {
|
|
1652
|
+
"type": "boolean",
|
|
1653
|
+
"default": false,
|
|
1654
|
+
"description": "Include system messages in extended hourly summaries (use with care)."
|
|
1655
|
+
},
|
|
1656
|
+
"hourlySummariesMaxTurnsPerRun": {
|
|
1657
|
+
"type": "number",
|
|
1658
|
+
"default": 200,
|
|
1659
|
+
"description": "Maximum transcript turns to consider per session per hourly summarizer run."
|
|
1660
|
+
},
|
|
1661
|
+
"conversationIndexEnabled": {
|
|
1662
|
+
"type": "boolean",
|
|
1663
|
+
"default": false,
|
|
1664
|
+
"description": "Enable conversation chunk indexing + semantic recall hook (default off)."
|
|
1665
|
+
},
|
|
1666
|
+
"conversationIndexBackend": {
|
|
1667
|
+
"type": "string",
|
|
1668
|
+
"enum": [
|
|
1669
|
+
"qmd",
|
|
1670
|
+
"faiss"
|
|
1671
|
+
],
|
|
1672
|
+
"default": "qmd",
|
|
1673
|
+
"description": "Backend for conversation indexing. qmd indexes chunk docs into a QMD collection; faiss uses the bundled Python sidecar and local FAISS artifacts under memoryDir/state/conversation-index/faiss."
|
|
1674
|
+
},
|
|
1675
|
+
"conversationIndexQmdCollection": {
|
|
1676
|
+
"type": "string",
|
|
1677
|
+
"default": "openclaw-engram-conversations",
|
|
1678
|
+
"description": "QMD collection to use for conversation chunk search (must be configured in ~/.config/qmd/index.yml)."
|
|
1679
|
+
},
|
|
1680
|
+
"conversationIndexRetentionDays": {
|
|
1681
|
+
"type": "number",
|
|
1682
|
+
"default": 30,
|
|
1683
|
+
"description": "Days to retain conversation chunk docs."
|
|
1684
|
+
},
|
|
1685
|
+
"conversationIndexMinUpdateIntervalMs": {
|
|
1686
|
+
"type": "number",
|
|
1687
|
+
"default": 900000,
|
|
1688
|
+
"description": "Minimum interval between conversation_index_update runs per session (ms). Prevents redundant reindex churn."
|
|
1689
|
+
},
|
|
1690
|
+
"conversationIndexEmbedOnUpdate": {
|
|
1691
|
+
"type": "boolean",
|
|
1692
|
+
"default": false,
|
|
1693
|
+
"description": "If true, conversation_index_update also runs QMD embed by default. Keep false for lower load."
|
|
1694
|
+
},
|
|
1695
|
+
"conversationIndexFaissScriptPath": {
|
|
1696
|
+
"type": "string",
|
|
1697
|
+
"default": "",
|
|
1698
|
+
"description": "Optional absolute path to FAISS sidecar script. If unset, uses built-in default script location."
|
|
1699
|
+
},
|
|
1700
|
+
"conversationIndexFaissPythonBin": {
|
|
1701
|
+
"type": "string",
|
|
1702
|
+
"default": "",
|
|
1703
|
+
"description": "Optional Python executable used to run the FAISS sidecar (for example python3.11)."
|
|
1704
|
+
},
|
|
1705
|
+
"conversationIndexFaissModelId": {
|
|
1706
|
+
"type": "string",
|
|
1707
|
+
"default": "text-embedding-3-small",
|
|
1708
|
+
"description": "Embedding model identifier passed to the FAISS sidecar. By default the sidecar aliases OpenAI embedding ids to a local sentence-transformers model when ENGRAM_FAISS_ENABLE_ST=1, and otherwise falls back to deterministic hash embeddings."
|
|
1709
|
+
},
|
|
1710
|
+
"conversationIndexFaissIndexDir": {
|
|
1711
|
+
"type": "string",
|
|
1712
|
+
"default": "state/conversation-index/faiss",
|
|
1713
|
+
"description": "Relative directory under memoryDir where FAISS sidecar artifacts are stored, including index.faiss, metadata.jsonl, and manifest.json."
|
|
1714
|
+
},
|
|
1715
|
+
"conversationIndexFaissUpsertTimeoutMs": {
|
|
1716
|
+
"type": "number",
|
|
1717
|
+
"default": 30000,
|
|
1718
|
+
"description": "Timeout (ms) for FAISS upsert operations."
|
|
1719
|
+
},
|
|
1720
|
+
"conversationIndexFaissSearchTimeoutMs": {
|
|
1721
|
+
"type": "number",
|
|
1722
|
+
"default": 5000,
|
|
1723
|
+
"description": "Timeout (ms) for FAISS search operations."
|
|
1724
|
+
},
|
|
1725
|
+
"conversationIndexFaissHealthTimeoutMs": {
|
|
1726
|
+
"type": "number",
|
|
1727
|
+
"default": 2000,
|
|
1728
|
+
"description": "Timeout (ms) for FAISS health checks. Health is fail-open and reports degraded when dependencies or local artifacts are missing."
|
|
1729
|
+
},
|
|
1730
|
+
"conversationIndexFaissMaxBatchSize": {
|
|
1731
|
+
"type": "number",
|
|
1732
|
+
"default": 512,
|
|
1733
|
+
"description": "Maximum transcript chunk batch size per FAISS upsert call."
|
|
1734
|
+
},
|
|
1735
|
+
"conversationIndexFaissMaxSearchK": {
|
|
1736
|
+
"type": "number",
|
|
1737
|
+
"default": 50,
|
|
1738
|
+
"description": "Maximum top-K allowed for FAISS search requests."
|
|
1739
|
+
},
|
|
1740
|
+
"conversationRecallTopK": {
|
|
1741
|
+
"type": "number",
|
|
1742
|
+
"default": 3,
|
|
1743
|
+
"description": "Top-K conversation chunks to inject."
|
|
1744
|
+
},
|
|
1745
|
+
"conversationRecallMaxChars": {
|
|
1746
|
+
"type": "number",
|
|
1747
|
+
"default": 2500,
|
|
1748
|
+
"description": "Max characters of semantic conversation recall to inject."
|
|
1749
|
+
},
|
|
1750
|
+
"conversationRecallTimeoutMs": {
|
|
1751
|
+
"type": "number",
|
|
1752
|
+
"default": 800,
|
|
1753
|
+
"description": "Timeout for semantic conversation recall search (ms). Fail-open on timeout."
|
|
1754
|
+
},
|
|
1755
|
+
"evalHarnessEnabled": {
|
|
1756
|
+
"type": "boolean",
|
|
1757
|
+
"default": false,
|
|
1758
|
+
"description": "Enable Engram's benchmark/evaluation harness foundation for tracking benchmark packs and run summaries."
|
|
1759
|
+
},
|
|
1760
|
+
"evalShadowModeEnabled": {
|
|
1761
|
+
"type": "boolean",
|
|
1762
|
+
"default": false,
|
|
1763
|
+
"description": "Enable shadow-mode evaluation workflows so future benchmark instrumentation can measure memory changes without changing live recall output."
|
|
1764
|
+
},
|
|
1765
|
+
"benchmarkBaselineSnapshotsEnabled": {
|
|
1766
|
+
"type": "boolean",
|
|
1767
|
+
"default": false,
|
|
1768
|
+
"description": "Enable versioned benchmark baseline snapshot artifacts under the eval store for later PR delta reporting."
|
|
1769
|
+
},
|
|
1770
|
+
"benchmarkStoredBaselineEnabled": {
|
|
1771
|
+
"type": "boolean",
|
|
1772
|
+
"default": false,
|
|
1773
|
+
"description": "Enable stored baseline comparisons for benchmark delta reporting."
|
|
1774
|
+
},
|
|
1775
|
+
"benchmarkDeltaReporterEnabled": {
|
|
1776
|
+
"type": "boolean",
|
|
1777
|
+
"default": false,
|
|
1778
|
+
"description": "Enable named-baseline delta reports so PR candidates can be compared against stored benchmark baselines."
|
|
1779
|
+
},
|
|
1780
|
+
"evalStoreDir": {
|
|
1781
|
+
"type": "string",
|
|
1782
|
+
"description": "Override the evaluation harness state directory (defaults to {memoryDir}/state/evals)."
|
|
1783
|
+
},
|
|
1784
|
+
"objectiveStateMemoryEnabled": {
|
|
1785
|
+
"type": "boolean",
|
|
1786
|
+
"default": false,
|
|
1787
|
+
"description": "Enable Engram's objective-state memory foundation for normalized world/tool state snapshots."
|
|
1788
|
+
},
|
|
1789
|
+
"objectiveStateSnapshotWritesEnabled": {
|
|
1790
|
+
"type": "boolean",
|
|
1791
|
+
"default": false,
|
|
1792
|
+
"description": "Allow writing typed objective-state snapshots to the objective-state store."
|
|
1793
|
+
},
|
|
1794
|
+
"objectiveStateRecallEnabled": {
|
|
1795
|
+
"type": "boolean",
|
|
1796
|
+
"default": false,
|
|
1797
|
+
"description": "Inject prompt-relevant objective-state snapshots into recall context."
|
|
1798
|
+
},
|
|
1799
|
+
"objectiveStateStoreDir": {
|
|
1800
|
+
"type": "string",
|
|
1801
|
+
"description": "Override the objective-state memory directory (defaults to {memoryDir}/state/objective-state)."
|
|
1802
|
+
},
|
|
1803
|
+
"causalTrajectoryMemoryEnabled": {
|
|
1804
|
+
"type": "boolean",
|
|
1805
|
+
"default": false,
|
|
1806
|
+
"description": "Enable Engram's causal-trajectory memory foundation for typed goal-action-observation-outcome chains."
|
|
1807
|
+
},
|
|
1808
|
+
"causalTrajectoryStoreDir": {
|
|
1809
|
+
"type": "string",
|
|
1810
|
+
"description": "Override the causal-trajectory memory directory (defaults to {memoryDir}/state/causal-trajectories)."
|
|
1811
|
+
},
|
|
1812
|
+
"causalTrajectoryRecallEnabled": {
|
|
1813
|
+
"type": "boolean",
|
|
1814
|
+
"default": false,
|
|
1815
|
+
"description": "Inject prompt-relevant causal trajectories into recall context."
|
|
1816
|
+
},
|
|
1817
|
+
"trustZonesEnabled": {
|
|
1818
|
+
"type": "boolean",
|
|
1819
|
+
"default": false,
|
|
1820
|
+
"description": "Enable Engram's trust-zone memory foundation for quarantine, working, and trusted records."
|
|
1821
|
+
},
|
|
1822
|
+
"quarantinePromotionEnabled": {
|
|
1823
|
+
"type": "boolean",
|
|
1824
|
+
"default": false,
|
|
1825
|
+
"description": "Reserve future promotion flows from quarantine into higher-trust zones."
|
|
1826
|
+
},
|
|
1827
|
+
"trustZoneStoreDir": {
|
|
1828
|
+
"type": "string",
|
|
1829
|
+
"description": "Override the trust-zone store directory (defaults to {memoryDir}/state/trust-zones)."
|
|
1830
|
+
},
|
|
1831
|
+
"trustZoneRecallEnabled": {
|
|
1832
|
+
"type": "boolean",
|
|
1833
|
+
"default": false,
|
|
1834
|
+
"description": "Inject prompt-relevant working and trusted trust-zone records into recall context."
|
|
1835
|
+
},
|
|
1836
|
+
"memoryPoisoningDefenseEnabled": {
|
|
1837
|
+
"type": "boolean",
|
|
1838
|
+
"default": false,
|
|
1839
|
+
"description": "Enable deterministic provenance trust scoring for trust-zone records as the first poisoning-defense surface."
|
|
1840
|
+
},
|
|
1841
|
+
"memoryRedTeamBenchEnabled": {
|
|
1842
|
+
"type": "boolean",
|
|
1843
|
+
"default": false,
|
|
1844
|
+
"description": "Enable operator-facing memory red-team benchmark packs and status accounting for poisoning-defense regression suites."
|
|
1845
|
+
},
|
|
1846
|
+
"harmonicRetrievalEnabled": {
|
|
1847
|
+
"type": "boolean",
|
|
1848
|
+
"default": false,
|
|
1849
|
+
"description": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section injection and harmonic-search diagnostics."
|
|
1850
|
+
},
|
|
1851
|
+
"abstractionAnchorsEnabled": {
|
|
1852
|
+
"type": "boolean",
|
|
1853
|
+
"default": false,
|
|
1854
|
+
"description": "Enable typed cue-anchor indexing for abstraction nodes and expose it through cue-anchor status tooling."
|
|
1855
|
+
},
|
|
1856
|
+
"abstractionNodeStoreDir": {
|
|
1857
|
+
"type": "string",
|
|
1858
|
+
"description": "Override the abstraction-node store directory (defaults to {memoryDir}/state/abstraction-nodes)."
|
|
1859
|
+
},
|
|
1860
|
+
"verifiedRecallEnabled": {
|
|
1861
|
+
"type": "boolean",
|
|
1862
|
+
"default": false,
|
|
1863
|
+
"description": "Inject prompt-relevant memory boxes only when their cited source memories verify as non-archived episodes."
|
|
1864
|
+
},
|
|
1865
|
+
"semanticRulePromotionEnabled": {
|
|
1866
|
+
"type": "boolean",
|
|
1867
|
+
"default": false,
|
|
1868
|
+
"description": "Enable deterministic promotion of explicit IF/THEN rules from verified episodic memories."
|
|
1869
|
+
},
|
|
1870
|
+
"semanticRuleVerificationEnabled": {
|
|
1871
|
+
"type": "boolean",
|
|
1872
|
+
"default": false,
|
|
1873
|
+
"description": "Verify promoted semantic rules against their cited source episodes at recall time before surfacing them in recall."
|
|
1874
|
+
},
|
|
1875
|
+
"semanticConsolidationEnabled": {
|
|
1876
|
+
"type": "boolean",
|
|
1877
|
+
"default": false,
|
|
1878
|
+
"description": "Enable periodic semantic consolidation of similar memories."
|
|
1879
|
+
},
|
|
1880
|
+
"semanticConsolidationModel": {
|
|
1881
|
+
"type": "string",
|
|
1882
|
+
"default": "auto",
|
|
1883
|
+
"description": "LLM for consolidation synthesis: 'auto' (primary model), 'fast' (fast local model), or a specific model name."
|
|
1884
|
+
},
|
|
1885
|
+
"semanticConsolidationThreshold": {
|
|
1886
|
+
"type": "number",
|
|
1887
|
+
"default": 0.8,
|
|
1888
|
+
"description": "Token overlap threshold (0-1) for grouping similar memories. 0.8=conservative, 0.6=aggressive."
|
|
1889
|
+
},
|
|
1890
|
+
"semanticConsolidationMinClusterSize": {
|
|
1891
|
+
"type": "number",
|
|
1892
|
+
"default": 3,
|
|
1893
|
+
"description": "Minimum cluster size before consolidation triggers."
|
|
1894
|
+
},
|
|
1895
|
+
"semanticConsolidationExcludeCategories": {
|
|
1896
|
+
"type": "array",
|
|
1897
|
+
"items": { "type": "string" },
|
|
1898
|
+
"default": ["correction", "commitment"],
|
|
1899
|
+
"description": "Memory categories excluded from semantic consolidation."
|
|
1900
|
+
},
|
|
1901
|
+
"semanticConsolidationIntervalHours": {
|
|
1902
|
+
"type": "number",
|
|
1903
|
+
"default": 168,
|
|
1904
|
+
"description": "Hours between automatic consolidation runs (168 = weekly)."
|
|
1905
|
+
},
|
|
1906
|
+
"semanticConsolidationMaxPerRun": {
|
|
1907
|
+
"type": "number",
|
|
1908
|
+
"default": 100,
|
|
1909
|
+
"description": "Max memories to consolidate per run to limit LLM cost."
|
|
1910
|
+
},
|
|
1911
|
+
"creationMemoryEnabled": {
|
|
1912
|
+
"type": "boolean",
|
|
1913
|
+
"default": false,
|
|
1914
|
+
"description": "Enable creation-memory foundations, including the work-product ledger for explicit outputs agents create."
|
|
1915
|
+
},
|
|
1916
|
+
"memoryUtilityLearningEnabled": {
|
|
1917
|
+
"type": "boolean",
|
|
1918
|
+
"default": false,
|
|
1919
|
+
"description": "Enable utility-learning telemetry storage so later slices can learn promotion and ranking weights from downstream outcomes."
|
|
1920
|
+
},
|
|
1921
|
+
"promotionByOutcomeEnabled": {
|
|
1922
|
+
"type": "boolean",
|
|
1923
|
+
"default": false,
|
|
1924
|
+
"description": "Enable outcome-aware promotion controls that consume learned utility signals when later rollout slices activate them."
|
|
1925
|
+
},
|
|
1926
|
+
"commitmentLedgerEnabled": {
|
|
1927
|
+
"type": "boolean",
|
|
1928
|
+
"default": false,
|
|
1929
|
+
"description": "Enable the explicit commitment ledger for promises, follow-ups, deadlines, and unfinished obligations."
|
|
1930
|
+
},
|
|
1931
|
+
"commitmentLifecycleEnabled": {
|
|
1932
|
+
"type": "boolean",
|
|
1933
|
+
"default": false,
|
|
1934
|
+
"description": "Enable commitment lifecycle transitions, stale tracking, and resolved-entry cleanup for the commitment ledger."
|
|
1935
|
+
},
|
|
1936
|
+
"commitmentStaleDays": {
|
|
1937
|
+
"type": "number",
|
|
1938
|
+
"default": 14,
|
|
1939
|
+
"description": "Days before an open commitment without a due date is considered stale in lifecycle status."
|
|
1940
|
+
},
|
|
1941
|
+
"commitmentLedgerDir": {
|
|
1942
|
+
"type": "string",
|
|
1943
|
+
"description": "Override the commitment ledger directory (defaults to {memoryDir}/state/commitment-ledger)."
|
|
1944
|
+
},
|
|
1945
|
+
"resumeBundlesEnabled": {
|
|
1946
|
+
"type": "boolean",
|
|
1947
|
+
"default": false,
|
|
1948
|
+
"description": "Enable deterministic resume-bundle storage and operator-facing handoff bundle commands."
|
|
1949
|
+
},
|
|
1950
|
+
"resumeBundleDir": {
|
|
1951
|
+
"type": "string",
|
|
1952
|
+
"description": "Override the resume-bundle directory (defaults to {memoryDir}/state/resume-bundles)."
|
|
1953
|
+
},
|
|
1954
|
+
"workProductRecallEnabled": {
|
|
1955
|
+
"type": "boolean",
|
|
1956
|
+
"default": false,
|
|
1957
|
+
"description": "Inject prompt-relevant work-product ledger entries into recall context and expose artifact-recovery search tooling."
|
|
1958
|
+
},
|
|
1959
|
+
"workProductLedgerDir": {
|
|
1960
|
+
"type": "string",
|
|
1961
|
+
"description": "Override the work-product ledger directory (defaults to {memoryDir}/state/work-product-ledger)."
|
|
1962
|
+
},
|
|
1963
|
+
"workTasksEnabled": {
|
|
1964
|
+
"type": "boolean",
|
|
1965
|
+
"default": false,
|
|
1966
|
+
"description": "Enable task tracking within the work product system."
|
|
1967
|
+
},
|
|
1968
|
+
"workProjectsEnabled": {
|
|
1969
|
+
"type": "boolean",
|
|
1970
|
+
"default": false,
|
|
1971
|
+
"description": "Enable project tracking within the work product system."
|
|
1972
|
+
},
|
|
1973
|
+
"workTasksDir": {
|
|
1974
|
+
"type": "string",
|
|
1975
|
+
"description": "Override the work tasks directory (defaults to {memoryDir}/work/tasks)."
|
|
1976
|
+
},
|
|
1977
|
+
"workProjectsDir": {
|
|
1978
|
+
"type": "string",
|
|
1979
|
+
"description": "Override the work projects directory (defaults to {memoryDir}/work/projects)."
|
|
1980
|
+
},
|
|
1981
|
+
"workIndexEnabled": {
|
|
1982
|
+
"type": "boolean",
|
|
1983
|
+
"default": false,
|
|
1984
|
+
"description": "Enable search index for work tasks and projects."
|
|
1985
|
+
},
|
|
1986
|
+
"workIndexDir": {
|
|
1987
|
+
"type": "string",
|
|
1988
|
+
"description": "Override the work index directory (defaults to {memoryDir}/work/index)."
|
|
1989
|
+
},
|
|
1990
|
+
"workTaskIndexEnabled": {
|
|
1991
|
+
"type": "boolean",
|
|
1992
|
+
"default": false,
|
|
1993
|
+
"description": "Include tasks in the work search index."
|
|
1994
|
+
},
|
|
1995
|
+
"workProjectIndexEnabled": {
|
|
1996
|
+
"type": "boolean",
|
|
1997
|
+
"default": false,
|
|
1998
|
+
"description": "Include projects in the work search index."
|
|
1999
|
+
},
|
|
2000
|
+
"workIndexAutoRebuildEnabled": {
|
|
2001
|
+
"type": "boolean",
|
|
2002
|
+
"default": false,
|
|
2003
|
+
"description": "Automatically rebuild the work index when tasks or projects change."
|
|
2004
|
+
},
|
|
2005
|
+
"workIndexAutoRebuildDebounceMs": {
|
|
2006
|
+
"type": "number",
|
|
2007
|
+
"default": 1000,
|
|
2008
|
+
"description": "Debounce delay in ms before triggering auto-rebuild of the work index."
|
|
2009
|
+
},
|
|
2010
|
+
"actionGraphRecallEnabled": {
|
|
2011
|
+
"type": "boolean",
|
|
2012
|
+
"default": false,
|
|
2013
|
+
"description": "Write action-conditioned causal-stage edges from typed trajectory records into the causal graph."
|
|
2014
|
+
},
|
|
2015
|
+
"namespacesEnabled": {
|
|
2016
|
+
"type": "boolean",
|
|
2017
|
+
"default": false,
|
|
2018
|
+
"description": "Enable multi-agent namespaces (v3.0). Default off."
|
|
2019
|
+
},
|
|
2020
|
+
"defaultNamespace": {
|
|
2021
|
+
"type": "string",
|
|
2022
|
+
"default": "default",
|
|
2023
|
+
"description": "Default namespace name."
|
|
2024
|
+
},
|
|
2025
|
+
"sharedNamespace": {
|
|
2026
|
+
"type": "string",
|
|
2027
|
+
"default": "shared",
|
|
2028
|
+
"description": "Shared namespace name."
|
|
2029
|
+
},
|
|
2030
|
+
"principalFromSessionKeyMode": {
|
|
2031
|
+
"type": "string",
|
|
2032
|
+
"enum": [
|
|
2033
|
+
"map",
|
|
2034
|
+
"prefix",
|
|
2035
|
+
"regex"
|
|
2036
|
+
],
|
|
2037
|
+
"default": "map",
|
|
2038
|
+
"description": "How to derive principal identity from sessionKey."
|
|
2039
|
+
},
|
|
2040
|
+
"principalFromSessionKeyRules": {
|
|
2041
|
+
"type": "array",
|
|
2042
|
+
"description": "Rules for resolving principal from sessionKey (ordered).",
|
|
2043
|
+
"items": {
|
|
2044
|
+
"type": "object",
|
|
2045
|
+
"additionalProperties": false,
|
|
2046
|
+
"properties": {
|
|
2047
|
+
"match": {
|
|
2048
|
+
"type": "string"
|
|
2049
|
+
},
|
|
2050
|
+
"principal": {
|
|
2051
|
+
"type": "string"
|
|
2052
|
+
}
|
|
2053
|
+
},
|
|
2054
|
+
"required": [
|
|
2055
|
+
"match",
|
|
2056
|
+
"principal"
|
|
2057
|
+
]
|
|
2058
|
+
}
|
|
2059
|
+
},
|
|
2060
|
+
"namespacePolicies": {
|
|
2061
|
+
"type": "array",
|
|
2062
|
+
"description": "Namespace access policies.",
|
|
2063
|
+
"items": {
|
|
2064
|
+
"type": "object",
|
|
2065
|
+
"additionalProperties": false,
|
|
2066
|
+
"properties": {
|
|
2067
|
+
"name": {
|
|
2068
|
+
"type": "string"
|
|
2069
|
+
},
|
|
2070
|
+
"readPrincipals": {
|
|
2071
|
+
"type": "array",
|
|
2072
|
+
"items": {
|
|
2073
|
+
"type": "string"
|
|
2074
|
+
}
|
|
2075
|
+
},
|
|
2076
|
+
"writePrincipals": {
|
|
2077
|
+
"type": "array",
|
|
2078
|
+
"items": {
|
|
2079
|
+
"type": "string"
|
|
2080
|
+
}
|
|
2081
|
+
},
|
|
2082
|
+
"includeInRecallByDefault": {
|
|
2083
|
+
"type": "boolean"
|
|
2084
|
+
}
|
|
2085
|
+
},
|
|
2086
|
+
"required": [
|
|
2087
|
+
"name",
|
|
2088
|
+
"readPrincipals",
|
|
2089
|
+
"writePrincipals"
|
|
2090
|
+
]
|
|
2091
|
+
}
|
|
2092
|
+
},
|
|
2093
|
+
"defaultRecallNamespaces": {
|
|
2094
|
+
"type": "array",
|
|
2095
|
+
"description": "Which namespaces to include by default in recall.",
|
|
2096
|
+
"items": {
|
|
2097
|
+
"type": "string",
|
|
2098
|
+
"enum": [
|
|
2099
|
+
"self",
|
|
2100
|
+
"shared"
|
|
2101
|
+
]
|
|
2102
|
+
},
|
|
2103
|
+
"default": [
|
|
2104
|
+
"self",
|
|
2105
|
+
"shared"
|
|
2106
|
+
]
|
|
2107
|
+
},
|
|
2108
|
+
"cronRecallMode": {
|
|
2109
|
+
"type": "string",
|
|
2110
|
+
"enum": [
|
|
2111
|
+
"all",
|
|
2112
|
+
"none",
|
|
2113
|
+
"allowlist"
|
|
2114
|
+
],
|
|
2115
|
+
"default": "all",
|
|
2116
|
+
"description": "Recall behavior for cron sessions. Use allowlist to opt specific cron sessionKeys in."
|
|
2117
|
+
},
|
|
2118
|
+
"cronRecallAllowlist": {
|
|
2119
|
+
"type": "array",
|
|
2120
|
+
"items": {
|
|
2121
|
+
"type": "string"
|
|
2122
|
+
},
|
|
2123
|
+
"default": [],
|
|
2124
|
+
"description": "Session-key wildcard patterns (supports *) allowed for recall when cronRecallMode=allowlist."
|
|
2125
|
+
},
|
|
2126
|
+
"cronRecallPolicyEnabled": {
|
|
2127
|
+
"type": "boolean",
|
|
2128
|
+
"default": true,
|
|
2129
|
+
"description": "Enable prompt-shape-aware recall query normalization for cron sessions."
|
|
2130
|
+
},
|
|
2131
|
+
"cronRecallNormalizedQueryMaxChars": {
|
|
2132
|
+
"type": "number",
|
|
2133
|
+
"default": 480,
|
|
2134
|
+
"description": "Maximum query length (characters) used for cron recall retrieval after normalization."
|
|
2135
|
+
},
|
|
2136
|
+
"cronRecallInstructionHeavyTokenCap": {
|
|
2137
|
+
"type": "number",
|
|
2138
|
+
"default": 36,
|
|
2139
|
+
"description": "Maximum token count used to build compact retrieval queries for instruction-heavy cron prompts."
|
|
2140
|
+
},
|
|
2141
|
+
"cronConversationRecallMode": {
|
|
2142
|
+
"type": "string",
|
|
2143
|
+
"enum": [
|
|
2144
|
+
"auto",
|
|
2145
|
+
"always",
|
|
2146
|
+
"never"
|
|
2147
|
+
],
|
|
2148
|
+
"default": "auto",
|
|
2149
|
+
"description": "Controls conversation semantic recall in cron sessions. auto skips it for instruction-heavy prompts."
|
|
2150
|
+
},
|
|
2151
|
+
"autoPromoteToSharedEnabled": {
|
|
2152
|
+
"type": "boolean",
|
|
2153
|
+
"default": false,
|
|
2154
|
+
"description": "If enabled, Engram may auto-promote selected categories to shared (reserved; conservative)."
|
|
2155
|
+
},
|
|
2156
|
+
"autoPromoteToSharedCategories": {
|
|
2157
|
+
"type": "array",
|
|
2158
|
+
"items": {
|
|
2159
|
+
"type": "string",
|
|
2160
|
+
"enum": [
|
|
2161
|
+
"fact",
|
|
2162
|
+
"correction",
|
|
2163
|
+
"decision",
|
|
2164
|
+
"preference"
|
|
2165
|
+
]
|
|
2166
|
+
},
|
|
2167
|
+
"default": [
|
|
2168
|
+
"fact",
|
|
2169
|
+
"correction",
|
|
2170
|
+
"decision",
|
|
2171
|
+
"preference"
|
|
2172
|
+
],
|
|
2173
|
+
"description": "Categories eligible for auto-promotion to shared."
|
|
2174
|
+
},
|
|
2175
|
+
"autoPromoteMinConfidenceTier": {
|
|
2176
|
+
"type": "string",
|
|
2177
|
+
"enum": [
|
|
2178
|
+
"explicit",
|
|
2179
|
+
"implied"
|
|
2180
|
+
],
|
|
2181
|
+
"default": "explicit",
|
|
2182
|
+
"description": "Minimum confidence tier for auto-promotion."
|
|
2183
|
+
},
|
|
2184
|
+
"routingRulesEnabled": {
|
|
2185
|
+
"type": "boolean",
|
|
2186
|
+
"default": false,
|
|
2187
|
+
"description": "Enable custom memory routing rules (v8.7). Default off."
|
|
2188
|
+
},
|
|
2189
|
+
"routingRulesStateFile": {
|
|
2190
|
+
"type": "string",
|
|
2191
|
+
"default": "state/routing-rules.json",
|
|
2192
|
+
"description": "Relative path under memoryDir for persisted routing rules."
|
|
2193
|
+
},
|
|
2194
|
+
"sharedContextEnabled": {
|
|
2195
|
+
"type": "boolean",
|
|
2196
|
+
"default": false,
|
|
2197
|
+
"description": "Enable shared-context injection + tools (v4.0). Default off."
|
|
2198
|
+
},
|
|
2199
|
+
"sharedContextDir": {
|
|
2200
|
+
"type": "string",
|
|
2201
|
+
"description": "Override shared-context directory (default: ~/.openclaw/workspace/shared-context)."
|
|
2202
|
+
},
|
|
2203
|
+
"sharedContextMaxInjectChars": {
|
|
2204
|
+
"type": "number",
|
|
2205
|
+
"default": 4000,
|
|
2206
|
+
"description": "Max characters of shared-context to inject into each prompt."
|
|
2207
|
+
},
|
|
2208
|
+
"crossSignalsSemanticEnabled": {
|
|
2209
|
+
"type": "boolean",
|
|
2210
|
+
"default": false,
|
|
2211
|
+
"description": "Enable semantic cross-signal grouping (reserved/experimental)."
|
|
2212
|
+
},
|
|
2213
|
+
"crossSignalsSemanticTimeoutMs": {
|
|
2214
|
+
"type": "number",
|
|
2215
|
+
"default": 4000,
|
|
2216
|
+
"description": "Timeout for semantic cross-signal grouping (ms)."
|
|
2217
|
+
},
|
|
2218
|
+
"sharedCrossSignalSemanticEnabled": {
|
|
2219
|
+
"type": "boolean",
|
|
2220
|
+
"default": false,
|
|
2221
|
+
"description": "Enable semantic cross-signal enhancer during shared-context daily curation."
|
|
2222
|
+
},
|
|
2223
|
+
"sharedCrossSignalSemanticTimeoutMs": {
|
|
2224
|
+
"type": "number",
|
|
2225
|
+
"default": 4000,
|
|
2226
|
+
"description": "Timeout budget for shared-context semantic cross-signal enhancer (ms)."
|
|
2227
|
+
},
|
|
2228
|
+
"sharedCrossSignalSemanticMaxCandidates": {
|
|
2229
|
+
"type": "number",
|
|
2230
|
+
"default": 120,
|
|
2231
|
+
"description": "Maximum candidate topic tokens considered by semantic cross-signal enhancer."
|
|
2232
|
+
},
|
|
2233
|
+
"compoundingEnabled": {
|
|
2234
|
+
"type": "boolean",
|
|
2235
|
+
"default": false,
|
|
2236
|
+
"description": "Enable compounding engine (v5.0). Default off."
|
|
2237
|
+
},
|
|
2238
|
+
"compoundingWeeklyCronEnabled": {
|
|
2239
|
+
"type": "boolean",
|
|
2240
|
+
"default": false,
|
|
2241
|
+
"description": "If true, compounding weekly synthesis can be scheduled externally via cron."
|
|
2242
|
+
},
|
|
2243
|
+
"compoundingSemanticEnabled": {
|
|
2244
|
+
"type": "boolean",
|
|
2245
|
+
"default": false,
|
|
2246
|
+
"description": "Enable semantic compounding synthesis (reserved/experimental)."
|
|
2247
|
+
},
|
|
2248
|
+
"compoundingSynthesisTimeoutMs": {
|
|
2249
|
+
"type": "number",
|
|
2250
|
+
"default": 15000,
|
|
2251
|
+
"description": "Timeout for compounding synthesis (ms)."
|
|
2252
|
+
},
|
|
2253
|
+
"compoundingInjectEnabled": {
|
|
2254
|
+
"type": "boolean",
|
|
2255
|
+
"default": true,
|
|
2256
|
+
"description": "Inject compounded mistakes/patterns into recall when compounding is enabled."
|
|
2257
|
+
},
|
|
2258
|
+
"factDeduplicationEnabled": {
|
|
2259
|
+
"type": "boolean",
|
|
2260
|
+
"default": true,
|
|
2261
|
+
"description": "Enable content-hash deduplication to prevent storing semantically identical facts."
|
|
2262
|
+
},
|
|
2263
|
+
"factArchivalEnabled": {
|
|
2264
|
+
"type": "boolean",
|
|
2265
|
+
"default": false,
|
|
2266
|
+
"description": "Enable automatic archival of old, low-importance, rarely-accessed facts during consolidation."
|
|
2267
|
+
},
|
|
2268
|
+
"factArchivalAgeDays": {
|
|
2269
|
+
"type": "number",
|
|
2270
|
+
"default": 90,
|
|
2271
|
+
"description": "Minimum age in days before a fact is eligible for archival."
|
|
2272
|
+
},
|
|
2273
|
+
"factArchivalMaxImportance": {
|
|
2274
|
+
"type": "number",
|
|
2275
|
+
"default": 0.3,
|
|
2276
|
+
"description": "Maximum importance score for archival eligibility (0-1). Only facts below this threshold are archived."
|
|
2277
|
+
},
|
|
2278
|
+
"factArchivalMaxAccessCount": {
|
|
2279
|
+
"type": "number",
|
|
2280
|
+
"default": 2,
|
|
2281
|
+
"description": "Maximum access count for archival eligibility. Only rarely-accessed facts are archived."
|
|
2282
|
+
},
|
|
2283
|
+
"factArchivalProtectedCategories": {
|
|
2284
|
+
"type": "array",
|
|
2285
|
+
"items": {
|
|
2286
|
+
"type": "string"
|
|
2287
|
+
},
|
|
2288
|
+
"default": [
|
|
2289
|
+
"commitment",
|
|
2290
|
+
"preference",
|
|
2291
|
+
"decision",
|
|
2292
|
+
"principle"
|
|
2293
|
+
],
|
|
2294
|
+
"description": "Categories that protect a fact from archival regardless of other criteria."
|
|
2295
|
+
},
|
|
2296
|
+
"lifecyclePolicyEnabled": {
|
|
2297
|
+
"type": "boolean",
|
|
2298
|
+
"default": false,
|
|
2299
|
+
"description": "Enable lifecycle scoring/promotions during consolidation (v8.3)."
|
|
2300
|
+
},
|
|
2301
|
+
"lifecycleFilterStaleEnabled": {
|
|
2302
|
+
"type": "boolean",
|
|
2303
|
+
"default": false,
|
|
2304
|
+
"description": "If enabled, stale lifecycle memories can be filtered from retrieval (wired in PR20D)."
|
|
2305
|
+
},
|
|
2306
|
+
"lifecyclePromoteHeatThreshold": {
|
|
2307
|
+
"type": "number",
|
|
2308
|
+
"default": 0.55,
|
|
2309
|
+
"description": "Heat threshold for lifecycle promotion to validated/active states."
|
|
2310
|
+
},
|
|
2311
|
+
"lifecycleStaleDecayThreshold": {
|
|
2312
|
+
"type": "number",
|
|
2313
|
+
"default": 0.65,
|
|
2314
|
+
"description": "Decay threshold for lifecycle demotion to stale."
|
|
2315
|
+
},
|
|
2316
|
+
"lifecycleArchiveDecayThreshold": {
|
|
2317
|
+
"type": "number",
|
|
2318
|
+
"default": 0.85,
|
|
2319
|
+
"description": "Decay threshold for lifecycle demotion to archived state semantics."
|
|
2320
|
+
},
|
|
2321
|
+
"lifecycleProtectedCategories": {
|
|
2322
|
+
"type": "array",
|
|
2323
|
+
"items": {
|
|
2324
|
+
"type": "string"
|
|
2325
|
+
},
|
|
2326
|
+
"default": [
|
|
2327
|
+
"decision",
|
|
2328
|
+
"principle",
|
|
2329
|
+
"commitment",
|
|
2330
|
+
"preference"
|
|
2331
|
+
],
|
|
2332
|
+
"description": "Categories that lifecycle policy will not auto-archive."
|
|
2333
|
+
},
|
|
2334
|
+
"lifecycleMetricsEnabled": {
|
|
2335
|
+
"type": "boolean",
|
|
2336
|
+
"default": true,
|
|
2337
|
+
"description": "Emit lifecycle metrics snapshots to state/lifecycle-metrics.json when policy is enabled."
|
|
2338
|
+
},
|
|
2339
|
+
"proactiveExtractionEnabled": {
|
|
2340
|
+
"type": "boolean",
|
|
2341
|
+
"default": false,
|
|
2342
|
+
"description": "Enable proactive self-questioning extraction second-pass (v8.3, default off)."
|
|
2343
|
+
},
|
|
2344
|
+
"contextCompressionActionsEnabled": {
|
|
2345
|
+
"type": "boolean",
|
|
2346
|
+
"default": false,
|
|
2347
|
+
"description": "Enable context compression action tooling and telemetry paths (v8.3, default off)."
|
|
2348
|
+
},
|
|
2349
|
+
"compressionGuidelineLearningEnabled": {
|
|
2350
|
+
"type": "boolean",
|
|
2351
|
+
"default": false,
|
|
2352
|
+
"description": "Enable adaptive compression guideline learning from memory-action outcomes (v8.3, default off)."
|
|
2353
|
+
},
|
|
2354
|
+
"compressionGuidelineSemanticRefinementEnabled": {
|
|
2355
|
+
"type": "boolean",
|
|
2356
|
+
"default": false,
|
|
2357
|
+
"description": "Enable optional semantic refinement pass after deterministic guideline candidate generation (v8.11, default off)."
|
|
2358
|
+
},
|
|
2359
|
+
"compressionGuidelineSemanticTimeoutMs": {
|
|
2360
|
+
"type": "number",
|
|
2361
|
+
"default": 2500,
|
|
2362
|
+
"description": "Hard timeout in milliseconds for semantic refinement; timeout fail-opens to deterministic output."
|
|
2363
|
+
},
|
|
2364
|
+
"maxProactiveQuestionsPerExtraction": {
|
|
2365
|
+
"type": "number",
|
|
2366
|
+
"default": 2,
|
|
2367
|
+
"description": "Maximum proactive self-questions generated per extraction pass (0 disables question generation)."
|
|
2368
|
+
},
|
|
2369
|
+
"proactiveExtractionTimeoutMs": {
|
|
2370
|
+
"type": "number",
|
|
2371
|
+
"default": 2500,
|
|
2372
|
+
"description": "Hard timeout in milliseconds for proactive self-question generation and answer synthesis (0 disables the proactive second pass)."
|
|
2373
|
+
},
|
|
2374
|
+
"proactiveExtractionMaxTokens": {
|
|
2375
|
+
"type": "number",
|
|
2376
|
+
"default": 900,
|
|
2377
|
+
"description": "Token budget for each proactive extraction sub-call (0 disables the proactive second pass)."
|
|
2378
|
+
},
|
|
2379
|
+
"extractionMaxOutputTokens": {
|
|
2380
|
+
"type": "number",
|
|
2381
|
+
"default": 16384,
|
|
2382
|
+
"description": "Maximum output tokens (max_completion_tokens) for the direct-client extraction call."
|
|
2383
|
+
},
|
|
2384
|
+
"proactiveExtractionCategoryAllowlist": {
|
|
2385
|
+
"type": "array",
|
|
2386
|
+
"items": {
|
|
2387
|
+
"type": "string"
|
|
2388
|
+
},
|
|
2389
|
+
"description": "Optional memory categories allowed from proactive second-pass writes. When omitted, proactive writes can emit any standard memory category."
|
|
2390
|
+
},
|
|
2391
|
+
"maxCompressionTokensPerHour": {
|
|
2392
|
+
"type": "number",
|
|
2393
|
+
"default": 1500,
|
|
2394
|
+
"description": "Hourly token budget for compression actions/guideline generation (0 disables budgeted compression work)."
|
|
2395
|
+
},
|
|
2396
|
+
"behaviorLoopAutoTuneEnabled": {
|
|
2397
|
+
"type": "boolean",
|
|
2398
|
+
"default": false,
|
|
2399
|
+
"description": "Enable runtime behavior-loop policy auto-tuning (v8.15, default off)."
|
|
2400
|
+
},
|
|
2401
|
+
"behaviorLoopLearningWindowDays": {
|
|
2402
|
+
"type": "number",
|
|
2403
|
+
"default": 14,
|
|
2404
|
+
"description": "Rolling signal window used for behavior-loop policy learning (days; 0 allowed)."
|
|
2405
|
+
},
|
|
2406
|
+
"behaviorLoopMinSignalCount": {
|
|
2407
|
+
"type": "number",
|
|
2408
|
+
"default": 10,
|
|
2409
|
+
"description": "Minimum signal volume required before behavior-loop adjustments are emitted (0 allowed)."
|
|
2410
|
+
},
|
|
2411
|
+
"behaviorLoopMaxDeltaPerCycle": {
|
|
2412
|
+
"type": "number",
|
|
2413
|
+
"default": 0.1,
|
|
2414
|
+
"description": "Maximum absolute parameter delta allowed per learning cycle (0-1)."
|
|
2415
|
+
},
|
|
2416
|
+
"behaviorLoopProtectedParams": {
|
|
2417
|
+
"type": "array",
|
|
2418
|
+
"items": {
|
|
2419
|
+
"type": "string"
|
|
2420
|
+
},
|
|
2421
|
+
"default": [
|
|
2422
|
+
"maxMemoryTokens",
|
|
2423
|
+
"qmdMaxResults",
|
|
2424
|
+
"qmdColdMaxResults",
|
|
2425
|
+
"recallPlannerMaxQmdResultsMinimal",
|
|
2426
|
+
"verbatimArtifactsMaxRecall"
|
|
2427
|
+
],
|
|
2428
|
+
"description": "Runtime parameters that auto-tuning must never modify."
|
|
2429
|
+
},
|
|
2430
|
+
"searchBackend": {
|
|
2431
|
+
"type": "string",
|
|
2432
|
+
"enum": [
|
|
2433
|
+
"qmd",
|
|
2434
|
+
"remote",
|
|
2435
|
+
"noop",
|
|
2436
|
+
"lancedb",
|
|
2437
|
+
"meilisearch",
|
|
2438
|
+
"orama"
|
|
2439
|
+
],
|
|
2440
|
+
"default": "qmd",
|
|
2441
|
+
"description": "Search backend: qmd (local hybrid), remote (HTTP REST), noop (disabled), lancedb (embedded hybrid), meilisearch (server-based), orama (embedded JS)"
|
|
2442
|
+
},
|
|
2443
|
+
"remoteSearchBaseUrl": {
|
|
2444
|
+
"type": "string",
|
|
2445
|
+
"description": "Base URL for remote search backend (when searchBackend=remote)"
|
|
2446
|
+
},
|
|
2447
|
+
"remoteSearchApiKey": {
|
|
2448
|
+
"type": "string",
|
|
2449
|
+
"description": "API key for remote search backend (when searchBackend=remote)"
|
|
2450
|
+
},
|
|
2451
|
+
"remoteSearchTimeoutMs": {
|
|
2452
|
+
"type": "number",
|
|
2453
|
+
"default": 30000,
|
|
2454
|
+
"description": "Timeout in ms for remote search backend requests"
|
|
2455
|
+
},
|
|
2456
|
+
"calibrationEnabled": {
|
|
2457
|
+
"type": "boolean",
|
|
2458
|
+
"default": false,
|
|
2459
|
+
"description": "Enable recall calibration rules injection (v9.0, default off)."
|
|
2460
|
+
},
|
|
2461
|
+
"calibrationMaxRulesPerRecall": {
|
|
2462
|
+
"type": "number",
|
|
2463
|
+
"default": 10,
|
|
2464
|
+
"description": "Maximum number of calibration rules to inject per recall pass."
|
|
2465
|
+
},
|
|
2466
|
+
"calibrationMaxChars": {
|
|
2467
|
+
"type": "number",
|
|
2468
|
+
"default": 1200,
|
|
2469
|
+
"description": "Maximum characters of calibration content to inject per recall pass."
|
|
2470
|
+
},
|
|
2471
|
+
"lancedbEnabled": {
|
|
2472
|
+
"type": "boolean",
|
|
2473
|
+
"default": false,
|
|
2474
|
+
"description": "Enable LanceDB as a supplemental search backend."
|
|
2475
|
+
},
|
|
2476
|
+
"lanceDbPath": {
|
|
2477
|
+
"type": "string",
|
|
2478
|
+
"description": "Directory path for LanceDB storage (when searchBackend=lancedb)"
|
|
2479
|
+
},
|
|
2480
|
+
"lanceEmbeddingDimension": {
|
|
2481
|
+
"type": "number",
|
|
2482
|
+
"default": 1536,
|
|
2483
|
+
"description": "Embedding vector dimension for LanceDB (when searchBackend=lancedb)"
|
|
2484
|
+
},
|
|
2485
|
+
"meilisearchEnabled": {
|
|
2486
|
+
"type": "boolean",
|
|
2487
|
+
"default": false,
|
|
2488
|
+
"description": "Enable Meilisearch as a supplemental search backend."
|
|
2489
|
+
},
|
|
2490
|
+
"meilisearchHost": {
|
|
2491
|
+
"type": "string",
|
|
2492
|
+
"default": "http://localhost:7700",
|
|
2493
|
+
"description": "Meilisearch server host URL (when searchBackend=meilisearch)"
|
|
2494
|
+
},
|
|
2495
|
+
"meilisearchApiKey": {
|
|
2496
|
+
"type": "string",
|
|
2497
|
+
"description": "API key for Meilisearch (when searchBackend=meilisearch)"
|
|
2498
|
+
},
|
|
2499
|
+
"meilisearchTimeoutMs": {
|
|
2500
|
+
"type": "number",
|
|
2501
|
+
"default": 30000,
|
|
2502
|
+
"description": "Timeout in ms for Meilisearch requests (when searchBackend=meilisearch)"
|
|
2503
|
+
},
|
|
2504
|
+
"meilisearchAutoIndex": {
|
|
2505
|
+
"type": "boolean",
|
|
2506
|
+
"default": false,
|
|
2507
|
+
"description": "Automatically push local memory docs to Meilisearch on update (when searchBackend=meilisearch)"
|
|
2508
|
+
},
|
|
2509
|
+
"oramaEnabled": {
|
|
2510
|
+
"type": "boolean",
|
|
2511
|
+
"default": false,
|
|
2512
|
+
"description": "Enable Orama as a supplemental search backend."
|
|
2513
|
+
},
|
|
2514
|
+
"oramaDbPath": {
|
|
2515
|
+
"type": "string",
|
|
2516
|
+
"description": "Directory path for Orama persistence files (when searchBackend=orama)"
|
|
2517
|
+
},
|
|
2518
|
+
"oramaEmbeddingDimension": {
|
|
2519
|
+
"type": "number",
|
|
2520
|
+
"default": 1536,
|
|
2521
|
+
"description": "Embedding vector dimension for Orama (when searchBackend=orama)"
|
|
2522
|
+
},
|
|
2523
|
+
"qmdDaemonEnabled": {
|
|
2524
|
+
"type": "boolean",
|
|
2525
|
+
"default": true,
|
|
2526
|
+
"description": "Prefer the shared QMD MCP session for faster searches when available."
|
|
2527
|
+
},
|
|
2528
|
+
"qmdDaemonUrl": {
|
|
2529
|
+
"type": "string",
|
|
2530
|
+
"default": "http://localhost:8181/mcp",
|
|
2531
|
+
"description": "Legacy compatibility setting retained for QMD daemon configuration."
|
|
2532
|
+
},
|
|
2533
|
+
"qmdDaemonRecheckIntervalMs": {
|
|
2534
|
+
"type": "number",
|
|
2535
|
+
"default": 60000,
|
|
2536
|
+
"description": "Re-probe interval when daemon is down (ms)"
|
|
2537
|
+
},
|
|
2538
|
+
"qmdIntentHintsEnabled": {
|
|
2539
|
+
"type": "boolean",
|
|
2540
|
+
"default": false,
|
|
2541
|
+
"description": "Pass Engram's inferred recall intent into QMD unified search when supported."
|
|
2542
|
+
},
|
|
2543
|
+
"qmdExplainEnabled": {
|
|
2544
|
+
"type": "boolean",
|
|
2545
|
+
"default": false,
|
|
2546
|
+
"description": "Request QMD explain traces for recall debugging when supported."
|
|
2547
|
+
},
|
|
2548
|
+
"knowledgeIndexEnabled": {
|
|
2549
|
+
"type": "boolean",
|
|
2550
|
+
"default": true,
|
|
2551
|
+
"description": "Inject a compact Knowledge Index of top entities into every recall"
|
|
2552
|
+
},
|
|
2553
|
+
"knowledgeIndexMaxEntities": {
|
|
2554
|
+
"type": "number",
|
|
2555
|
+
"default": 40,
|
|
2556
|
+
"description": "Max entities included in the Knowledge Index"
|
|
2557
|
+
},
|
|
2558
|
+
"knowledgeIndexMaxChars": {
|
|
2559
|
+
"type": "number",
|
|
2560
|
+
"default": 4000,
|
|
2561
|
+
"description": "Hard character cap for the Knowledge Index section"
|
|
2562
|
+
},
|
|
2563
|
+
"entityRetrievalEnabled": {
|
|
2564
|
+
"type": "boolean",
|
|
2565
|
+
"default": true,
|
|
2566
|
+
"description": "Enable entity-oriented recall hints for direct entity questions and short follow-up queries."
|
|
2567
|
+
},
|
|
2568
|
+
"entityRetrievalMaxChars": {
|
|
2569
|
+
"type": "number",
|
|
2570
|
+
"default": 2400,
|
|
2571
|
+
"description": "Hard character cap for the entity retrieval section."
|
|
2572
|
+
},
|
|
2573
|
+
"entityRetrievalMaxHints": {
|
|
2574
|
+
"type": "number",
|
|
2575
|
+
"default": 2,
|
|
2576
|
+
"description": "Maximum entity targets summarized in one recall pass."
|
|
2577
|
+
},
|
|
2578
|
+
"entityRetrievalMaxSupportingFacts": {
|
|
2579
|
+
"type": "number",
|
|
2580
|
+
"default": 6,
|
|
2581
|
+
"description": "Maximum supporting fact/timeline snippets considered per entity target."
|
|
2582
|
+
},
|
|
2583
|
+
"entityRetrievalMaxRelatedEntities": {
|
|
2584
|
+
"type": "number",
|
|
2585
|
+
"default": 3,
|
|
2586
|
+
"description": "Maximum related entities listed per target when confidence is high."
|
|
2587
|
+
},
|
|
2588
|
+
"entityRetrievalRecentTurns": {
|
|
2589
|
+
"type": "number",
|
|
2590
|
+
"default": 6,
|
|
2591
|
+
"description": "Recent transcript turns scanned for pronoun carry-forward and short follow-up resolution."
|
|
2592
|
+
},
|
|
2593
|
+
"entityRelationshipsEnabled": {
|
|
2594
|
+
"type": "boolean",
|
|
2595
|
+
"default": true,
|
|
2596
|
+
"description": "Track entity-to-entity relationships during extraction"
|
|
2597
|
+
},
|
|
2598
|
+
"entityActivityLogEnabled": {
|
|
2599
|
+
"type": "boolean",
|
|
2600
|
+
"default": true,
|
|
2601
|
+
"description": "Log timestamped activity per entity"
|
|
2602
|
+
},
|
|
2603
|
+
"entityActivityLogMaxEntries": {
|
|
2604
|
+
"type": "number",
|
|
2605
|
+
"default": 20,
|
|
2606
|
+
"description": "Max activity entries per entity before oldest are pruned"
|
|
2607
|
+
},
|
|
2608
|
+
"entityAliasesEnabled": {
|
|
2609
|
+
"type": "boolean",
|
|
2610
|
+
"default": true,
|
|
2611
|
+
"description": "Store aliases per entity file"
|
|
2612
|
+
},
|
|
2613
|
+
"entitySummaryEnabled": {
|
|
2614
|
+
"type": "boolean",
|
|
2615
|
+
"default": true,
|
|
2616
|
+
"description": "Generate LLM summaries for entities during consolidation"
|
|
2617
|
+
},
|
|
2618
|
+
"recallBudgetChars": {
|
|
2619
|
+
"type": "number",
|
|
2620
|
+
"description": "Hard character cap for total recall injection. Defaults to maxMemoryTokens * 4."
|
|
2621
|
+
},
|
|
2622
|
+
"recallOuterTimeoutMs": {
|
|
2623
|
+
"type": "number",
|
|
2624
|
+
"default": 75000,
|
|
2625
|
+
"description": "Outer timeout in ms for the full recall pipeline."
|
|
2626
|
+
},
|
|
2627
|
+
"recallCoreDeadlineMs": {
|
|
2628
|
+
"type": "number",
|
|
2629
|
+
"default": 75000,
|
|
2630
|
+
"description": "Default deadline in ms recorded for core recall sections."
|
|
2631
|
+
},
|
|
2632
|
+
"recallEnrichmentDeadlineMs": {
|
|
2633
|
+
"type": "number",
|
|
2634
|
+
"default": 25000,
|
|
2635
|
+
"description": "Default deadline in ms recorded for enrichment recall sections."
|
|
2636
|
+
},
|
|
2637
|
+
"recallPipeline": {
|
|
2638
|
+
"type": "array",
|
|
2639
|
+
"description": "Ordered recall sections with per-section budgets and feature knobs.",
|
|
2640
|
+
"items": {
|
|
2641
|
+
"type": "object",
|
|
2642
|
+
"properties": {
|
|
2643
|
+
"id": {
|
|
2644
|
+
"type": "string"
|
|
2645
|
+
},
|
|
2646
|
+
"enabled": {
|
|
2647
|
+
"type": "boolean",
|
|
2648
|
+
"default": true
|
|
2649
|
+
},
|
|
2650
|
+
"maxChars": {
|
|
2651
|
+
"type": [
|
|
2652
|
+
"number",
|
|
2653
|
+
"null"
|
|
2654
|
+
]
|
|
2655
|
+
},
|
|
2656
|
+
"consolidateTriggerLines": {
|
|
2657
|
+
"type": "number"
|
|
2658
|
+
},
|
|
2659
|
+
"consolidateTargetLines": {
|
|
2660
|
+
"type": "number"
|
|
2661
|
+
},
|
|
2662
|
+
"maxEntities": {
|
|
2663
|
+
"type": "number"
|
|
2664
|
+
},
|
|
2665
|
+
"maxResults": {
|
|
2666
|
+
"type": "number"
|
|
2667
|
+
},
|
|
2668
|
+
"maxTurns": {
|
|
2669
|
+
"type": "number"
|
|
2670
|
+
},
|
|
2671
|
+
"maxTokens": {
|
|
2672
|
+
"type": "number"
|
|
2673
|
+
},
|
|
2674
|
+
"lookbackHours": {
|
|
2675
|
+
"type": "number"
|
|
2676
|
+
},
|
|
2677
|
+
"maxCount": {
|
|
2678
|
+
"type": "number"
|
|
2679
|
+
},
|
|
2680
|
+
"topK": {
|
|
2681
|
+
"type": "number"
|
|
2682
|
+
},
|
|
2683
|
+
"timeoutMs": {
|
|
2684
|
+
"type": "number"
|
|
2685
|
+
},
|
|
2686
|
+
"maxPatterns": {
|
|
2687
|
+
"type": "number"
|
|
2688
|
+
}
|
|
2689
|
+
},
|
|
2690
|
+
"required": [
|
|
2691
|
+
"id"
|
|
2692
|
+
]
|
|
2693
|
+
}
|
|
2694
|
+
},
|
|
2695
|
+
"qmdRecallCacheTtlMs": {
|
|
2696
|
+
"type": "number",
|
|
2697
|
+
"default": 60000,
|
|
2698
|
+
"description": "Fresh TTL in ms for rendered QMD recall enrichment cache entries."
|
|
2699
|
+
},
|
|
2700
|
+
"qmdRecallCacheStaleTtlMs": {
|
|
2701
|
+
"type": "number",
|
|
2702
|
+
"default": 600000,
|
|
2703
|
+
"description": "Maximum stale TTL in ms for rendered QMD recall cache fallbacks."
|
|
2704
|
+
},
|
|
2705
|
+
"qmdRecallCacheMaxEntries": {
|
|
2706
|
+
"type": "number",
|
|
2707
|
+
"default": 128,
|
|
2708
|
+
"description": "Maximum in-memory rendered QMD recall cache entries before oldest eviction."
|
|
2709
|
+
},
|
|
2710
|
+
"lcmEnabled": {
|
|
2711
|
+
"type": "boolean",
|
|
2712
|
+
"default": false,
|
|
2713
|
+
"description": "Enable Lossless Context Management (LCM) subsystem"
|
|
2714
|
+
},
|
|
2715
|
+
"lcmLeafBatchSize": {
|
|
2716
|
+
"type": "number",
|
|
2717
|
+
"default": 8,
|
|
2718
|
+
"description": "Number of turns per leaf node in the LCM DAG"
|
|
2719
|
+
},
|
|
2720
|
+
"lcmRollupFanIn": {
|
|
2721
|
+
"type": "number",
|
|
2722
|
+
"default": 4,
|
|
2723
|
+
"description": "Number of children per rollup node in the LCM DAG"
|
|
2724
|
+
},
|
|
2725
|
+
"lcmFreshTailTurns": {
|
|
2726
|
+
"type": "number",
|
|
2727
|
+
"default": 16,
|
|
2728
|
+
"description": "Number of recent turns kept verbatim (not summarized)"
|
|
2729
|
+
},
|
|
2730
|
+
"lcmMaxDepth": {
|
|
2731
|
+
"type": "number",
|
|
2732
|
+
"default": 5,
|
|
2733
|
+
"description": "Maximum depth of the LCM summary DAG"
|
|
2734
|
+
},
|
|
2735
|
+
"lcmRecallBudgetShare": {
|
|
2736
|
+
"type": "number",
|
|
2737
|
+
"default": 0.15,
|
|
2738
|
+
"description": "Fraction of recall budget allocated to LCM compressed history (0-1)"
|
|
2739
|
+
},
|
|
2740
|
+
"lcmDeterministicMaxTokens": {
|
|
2741
|
+
"type": "number",
|
|
2742
|
+
"default": 512,
|
|
2743
|
+
"description": "Max tokens for deterministic (non-LLM) summaries"
|
|
2744
|
+
},
|
|
2745
|
+
"lcmArchiveRetentionDays": {
|
|
2746
|
+
"type": "number",
|
|
2747
|
+
"default": 90,
|
|
2748
|
+
"description": "Days to retain archived LCM summaries"
|
|
2749
|
+
},
|
|
2750
|
+
"ircEnabled": {
|
|
2751
|
+
"type": "boolean",
|
|
2752
|
+
"default": true,
|
|
2753
|
+
"description": "Enable Inductive Rule Consolidation (IRC) subsystem (default on)."
|
|
2754
|
+
},
|
|
2755
|
+
"ircMaxPreferences": {
|
|
2756
|
+
"type": "number",
|
|
2757
|
+
"default": 20,
|
|
2758
|
+
"description": "Maximum number of preferences to include in IRC rule injection."
|
|
2759
|
+
},
|
|
2760
|
+
"ircIncludeCorrections": {
|
|
2761
|
+
"type": "boolean",
|
|
2762
|
+
"default": true,
|
|
2763
|
+
"description": "Include corrections when building IRC rules (default on)."
|
|
2764
|
+
},
|
|
2765
|
+
"ircMinConfidence": {
|
|
2766
|
+
"type": "number",
|
|
2767
|
+
"default": 0.3,
|
|
2768
|
+
"description": "Minimum confidence threshold for an IRC rule to be included (0-1)."
|
|
2769
|
+
},
|
|
2770
|
+
"cmcEnabled": {
|
|
2771
|
+
"type": "boolean",
|
|
2772
|
+
"default": false,
|
|
2773
|
+
"description": "Enable Causal Memory Consolidation (CMC) subsystem (default off)."
|
|
2774
|
+
},
|
|
2775
|
+
"cmcStitchLookbackDays": {
|
|
2776
|
+
"type": "number",
|
|
2777
|
+
"default": 7,
|
|
2778
|
+
"description": "Number of days to look back when stitching causal trajectories."
|
|
2779
|
+
},
|
|
2780
|
+
"cmcStitchMinScore": {
|
|
2781
|
+
"type": "number",
|
|
2782
|
+
"default": 2.5,
|
|
2783
|
+
"description": "Minimum score for a causal edge to be stitched into a trajectory."
|
|
2784
|
+
},
|
|
2785
|
+
"cmcStitchMaxEdgesPerTrajectory": {
|
|
2786
|
+
"type": "number",
|
|
2787
|
+
"default": 3,
|
|
2788
|
+
"description": "Maximum edges per trajectory during CMC stitching."
|
|
2789
|
+
},
|
|
2790
|
+
"cmcConsolidationEnabled": {
|
|
2791
|
+
"type": "boolean",
|
|
2792
|
+
"default": false,
|
|
2793
|
+
"description": "Enable CMC consolidation pass (default off)."
|
|
2794
|
+
},
|
|
2795
|
+
"cmcConsolidationMinRecurrence": {
|
|
2796
|
+
"type": "number",
|
|
2797
|
+
"default": 3,
|
|
2798
|
+
"description": "Minimum recurrence count before a CMC pattern is consolidated."
|
|
2799
|
+
},
|
|
2800
|
+
"cmcConsolidationMinSessions": {
|
|
2801
|
+
"type": "number",
|
|
2802
|
+
"default": 2,
|
|
2803
|
+
"description": "Minimum sessions a CMC pattern must appear in before consolidation."
|
|
2804
|
+
},
|
|
2805
|
+
"cmcConsolidationSuccessThreshold": {
|
|
2806
|
+
"type": "number",
|
|
2807
|
+
"default": 0.7,
|
|
2808
|
+
"description": "Minimum success ratio required to consolidate a CMC pattern (0-1)."
|
|
2809
|
+
},
|
|
2810
|
+
"cmcRetrievalEnabled": {
|
|
2811
|
+
"type": "boolean",
|
|
2812
|
+
"default": false,
|
|
2813
|
+
"description": "Enable CMC retrieval injection at recall time (default off)."
|
|
2814
|
+
},
|
|
2815
|
+
"cmcRetrievalMaxDepth": {
|
|
2816
|
+
"type": "number",
|
|
2817
|
+
"default": 3,
|
|
2818
|
+
"description": "Maximum graph depth traversed during CMC retrieval."
|
|
2819
|
+
},
|
|
2820
|
+
"cmcRetrievalMaxChars": {
|
|
2821
|
+
"type": "number",
|
|
2822
|
+
"default": 800,
|
|
2823
|
+
"description": "Maximum characters of CMC content injected per recall pass."
|
|
2824
|
+
},
|
|
2825
|
+
"cmcRetrievalCounterfactualBoost": {
|
|
2826
|
+
"type": "number",
|
|
2827
|
+
"default": 0.4,
|
|
2828
|
+
"description": "Score boost applied to counterfactual nodes during CMC retrieval (0-1)."
|
|
2829
|
+
},
|
|
2830
|
+
"cmcBehaviorLearningEnabled": {
|
|
2831
|
+
"type": "boolean",
|
|
2832
|
+
"default": false,
|
|
2833
|
+
"description": "Enable CMC behavior pattern learning (default off)."
|
|
2834
|
+
},
|
|
2835
|
+
"cmcBehaviorMinFrequency": {
|
|
2836
|
+
"type": "number",
|
|
2837
|
+
"default": 3,
|
|
2838
|
+
"description": "Minimum frequency for a behavior pattern to be learned by CMC."
|
|
2839
|
+
},
|
|
2840
|
+
"cmcBehaviorMinSessions": {
|
|
2841
|
+
"type": "number",
|
|
2842
|
+
"default": 2,
|
|
2843
|
+
"description": "Minimum sessions a behavior must appear in before CMC learns it."
|
|
2844
|
+
},
|
|
2845
|
+
"cmcBehaviorConfidenceThreshold": {
|
|
2846
|
+
"type": "number",
|
|
2847
|
+
"default": 0.6,
|
|
2848
|
+
"description": "Minimum confidence threshold for CMC behavior patterns (0-1)."
|
|
2849
|
+
},
|
|
2850
|
+
"cmcLifecycleCausalImpactWeight": {
|
|
2851
|
+
"type": "number",
|
|
2852
|
+
"default": 0.05,
|
|
2853
|
+
"description": "Weight of causal impact score in CMC lifecycle scoring."
|
|
2854
|
+
},
|
|
2855
|
+
"parallelRetrievalEnabled": {
|
|
2856
|
+
"type": "boolean",
|
|
2857
|
+
"default": false,
|
|
2858
|
+
"description": "Enable three-agent parallel retrieval (DirectFact + Contextual + Temporal). Zero additional LLM cost. Default false."
|
|
2859
|
+
},
|
|
2860
|
+
"parallelAgentWeights": {
|
|
2861
|
+
"type": "object",
|
|
2862
|
+
"default": {
|
|
2863
|
+
"direct": 1.0,
|
|
2864
|
+
"contextual": 0.7,
|
|
2865
|
+
"temporal": 0.85
|
|
2866
|
+
},
|
|
2867
|
+
"description": "Score weights per retrieval agent source applied during result merge."
|
|
2868
|
+
},
|
|
2869
|
+
"parallelMaxResultsPerAgent": {
|
|
2870
|
+
"type": "number",
|
|
2871
|
+
"default": 20,
|
|
2872
|
+
"description": "Maximum results fetched per agent before merge."
|
|
2873
|
+
}
|
|
2874
|
+
}
|
|
2875
|
+
},
|
|
2876
|
+
"uiHints": {
|
|
2877
|
+
"openaiApiKey": {
|
|
2878
|
+
"label": "OpenAI API Key",
|
|
2879
|
+
"sensitive": true,
|
|
2880
|
+
"placeholder": "sk-...",
|
|
2881
|
+
"help": "API key for OpenAI (or use ${OPENAI_API_KEY})"
|
|
2882
|
+
},
|
|
2883
|
+
"openaiBaseUrl": {
|
|
2884
|
+
"label": "OpenAI Base URL",
|
|
2885
|
+
"advanced": true,
|
|
2886
|
+
"placeholder": "https://api.openai.com/v1",
|
|
2887
|
+
"help": "Override for OpenAI-compatible providers (Scryr, Together, OpenRouter, etc.)"
|
|
2888
|
+
},
|
|
2889
|
+
"model": {
|
|
2890
|
+
"label": "Extraction Model",
|
|
2891
|
+
"advanced": true,
|
|
2892
|
+
"placeholder": "gpt-5.2"
|
|
2893
|
+
},
|
|
2894
|
+
"reasoningEffort": {
|
|
2895
|
+
"label": "Reasoning Effort",
|
|
2896
|
+
"advanced": true
|
|
2897
|
+
},
|
|
2898
|
+
"triggerMode": {
|
|
2899
|
+
"label": "Trigger Mode",
|
|
2900
|
+
"advanced": true
|
|
2901
|
+
},
|
|
2902
|
+
"bufferMaxTurns": {
|
|
2903
|
+
"label": "Buffer Max Turns",
|
|
2904
|
+
"advanced": true,
|
|
2905
|
+
"placeholder": "5"
|
|
2906
|
+
},
|
|
2907
|
+
"bufferMaxMinutes": {
|
|
2908
|
+
"label": "Buffer Max Minutes",
|
|
2909
|
+
"advanced": true,
|
|
2910
|
+
"placeholder": "15"
|
|
2911
|
+
},
|
|
2912
|
+
"consolidateEveryN": {
|
|
2913
|
+
"label": "Consolidation Frequency",
|
|
2914
|
+
"advanced": true,
|
|
2915
|
+
"placeholder": "3"
|
|
2916
|
+
},
|
|
2917
|
+
"maxMemoryTokens": {
|
|
2918
|
+
"label": "Max Memory Tokens",
|
|
2919
|
+
"advanced": true,
|
|
2920
|
+
"placeholder": "2000"
|
|
2921
|
+
},
|
|
2922
|
+
"memoryOsPreset": {
|
|
2923
|
+
"label": "Memory OS Preset",
|
|
2924
|
+
"advanced": true,
|
|
2925
|
+
"help": "Optional preset: conservative, balanced, research-max, or local-llm-heavy. `research` remains accepted as a backward-compatible alias. Explicit settings still win."
|
|
2926
|
+
},
|
|
2927
|
+
"qmdEnabled": {
|
|
2928
|
+
"label": "Enable QMD",
|
|
2929
|
+
"help": "Enable QMD for memory search/indexing"
|
|
2930
|
+
},
|
|
2931
|
+
"qmdCollection": {
|
|
2932
|
+
"label": "QMD Collection",
|
|
2933
|
+
"advanced": true,
|
|
2934
|
+
"placeholder": "openclaw-engram"
|
|
2935
|
+
},
|
|
2936
|
+
"qmdMaxResults": {
|
|
2937
|
+
"label": "QMD Max Results",
|
|
2938
|
+
"advanced": true,
|
|
2939
|
+
"placeholder": "8"
|
|
2940
|
+
},
|
|
2941
|
+
"qmdColdTierEnabled": {
|
|
2942
|
+
"label": "Enable Cold QMD Tier",
|
|
2943
|
+
"advanced": true,
|
|
2944
|
+
"help": "When hot recall misses, query a secondary cold QMD collection before archive scan fallback"
|
|
2945
|
+
},
|
|
2946
|
+
"qmdColdCollection": {
|
|
2947
|
+
"label": "Cold QMD Collection",
|
|
2948
|
+
"advanced": true,
|
|
2949
|
+
"placeholder": "openclaw-engram-cold"
|
|
2950
|
+
},
|
|
2951
|
+
"qmdColdMaxResults": {
|
|
2952
|
+
"label": "Cold QMD Max Results",
|
|
2953
|
+
"advanced": true,
|
|
2954
|
+
"placeholder": "8"
|
|
2955
|
+
},
|
|
2956
|
+
"qmdTierMigrationEnabled": {
|
|
2957
|
+
"label": "Enable Tier Migration",
|
|
2958
|
+
"advanced": true,
|
|
2959
|
+
"help": "Enable value-aware hot/cold migration controls"
|
|
2960
|
+
},
|
|
2961
|
+
"qmdTierDemotionMinAgeDays": {
|
|
2962
|
+
"label": "Tier Demotion Min Age Days",
|
|
2963
|
+
"advanced": true,
|
|
2964
|
+
"placeholder": "14"
|
|
2965
|
+
},
|
|
2966
|
+
"qmdTierDemotionValueThreshold": {
|
|
2967
|
+
"label": "Tier Demotion Value Threshold",
|
|
2968
|
+
"advanced": true,
|
|
2969
|
+
"placeholder": "0.35"
|
|
2970
|
+
},
|
|
2971
|
+
"qmdTierPromotionValueThreshold": {
|
|
2972
|
+
"label": "Tier Promotion Value Threshold",
|
|
2973
|
+
"advanced": true,
|
|
2974
|
+
"placeholder": "0.7"
|
|
2975
|
+
},
|
|
2976
|
+
"qmdTierParityGraphEnabled": {
|
|
2977
|
+
"label": "Tier Parity Graph Checks",
|
|
2978
|
+
"advanced": true
|
|
2979
|
+
},
|
|
2980
|
+
"qmdTierParityHiMemEnabled": {
|
|
2981
|
+
"label": "Tier Parity HiMem Checks",
|
|
2982
|
+
"advanced": true
|
|
2983
|
+
},
|
|
2984
|
+
"qmdTierAutoBackfillEnabled": {
|
|
2985
|
+
"label": "Tier Auto Backfill",
|
|
2986
|
+
"advanced": true,
|
|
2987
|
+
"help": "Enable automated cold-tier backfill runs for parity repair"
|
|
2988
|
+
},
|
|
2989
|
+
"embeddingFallbackEnabled": {
|
|
2990
|
+
"label": "Embedding Fallback",
|
|
2991
|
+
"help": "Use semantic embeddings when QMD is unavailable or no results are found"
|
|
2992
|
+
},
|
|
2993
|
+
"embeddingFallbackProvider": {
|
|
2994
|
+
"label": "Embedding Provider",
|
|
2995
|
+
"advanced": true,
|
|
2996
|
+
"placeholder": "auto"
|
|
2997
|
+
},
|
|
2998
|
+
"qmdPath": {
|
|
2999
|
+
"label": "QMD Path",
|
|
3000
|
+
"advanced": true,
|
|
3001
|
+
"placeholder": "/opt/homebrew/bin/qmd",
|
|
3002
|
+
"help": "Optional absolute path to qmd binary for environments with unstable PATH/bun shims"
|
|
3003
|
+
},
|
|
3004
|
+
"memoryDir": {
|
|
3005
|
+
"label": "Memory Directory",
|
|
3006
|
+
"advanced": true,
|
|
3007
|
+
"placeholder": "~/.openclaw/workspace/memory/local"
|
|
3008
|
+
},
|
|
3009
|
+
"debug": {
|
|
3010
|
+
"label": "Debug Mode",
|
|
3011
|
+
"advanced": true
|
|
3012
|
+
},
|
|
3013
|
+
"identityEnabled": {
|
|
3014
|
+
"label": "Identity Reflections",
|
|
3015
|
+
"help": "Append self-reflections to workspace IDENTITY.md after each extraction"
|
|
3016
|
+
},
|
|
3017
|
+
"identityContinuityEnabled": {
|
|
3018
|
+
"label": "Identity Continuity",
|
|
3019
|
+
"help": "Enable identity continuity workflows (anchor, incidents, audits)"
|
|
3020
|
+
},
|
|
3021
|
+
"identityInjectionMode": {
|
|
3022
|
+
"label": "Identity Injection Mode",
|
|
3023
|
+
"advanced": true,
|
|
3024
|
+
"placeholder": "recovery_only",
|
|
3025
|
+
"help": "When to inject identity continuity context: recovery_only, minimal, or full"
|
|
3026
|
+
},
|
|
3027
|
+
"identityMaxInjectChars": {
|
|
3028
|
+
"label": "Identity Max Inject Chars",
|
|
3029
|
+
"advanced": true,
|
|
3030
|
+
"placeholder": "1200"
|
|
3031
|
+
},
|
|
3032
|
+
"continuityIncidentLoggingEnabled": {
|
|
3033
|
+
"label": "Continuity Incident Logging",
|
|
3034
|
+
"advanced": true,
|
|
3035
|
+
"help": "When omitted, follows Identity Continuity enabled state"
|
|
3036
|
+
},
|
|
3037
|
+
"continuityAuditEnabled": {
|
|
3038
|
+
"label": "Continuity Audits",
|
|
3039
|
+
"advanced": true,
|
|
3040
|
+
"help": "Generate continuity audit artifacts"
|
|
3041
|
+
},
|
|
3042
|
+
"sessionObserverEnabled": {
|
|
3043
|
+
"label": "Session Observer",
|
|
3044
|
+
"advanced": true,
|
|
3045
|
+
"help": "Observe heartbeat growth and proactively trigger extraction when configured thresholds are crossed"
|
|
3046
|
+
},
|
|
3047
|
+
"sessionObserverDebounceMs": {
|
|
3048
|
+
"label": "Observer Debounce (ms)",
|
|
3049
|
+
"advanced": true,
|
|
3050
|
+
"placeholder": "120000"
|
|
3051
|
+
},
|
|
3052
|
+
"sessionObserverBands": {
|
|
3053
|
+
"label": "Observer Size Bands",
|
|
3054
|
+
"advanced": true,
|
|
3055
|
+
"help": "Array of {maxBytes, triggerDeltaBytes, triggerDeltaTokens} threshold objects"
|
|
3056
|
+
},
|
|
3057
|
+
"injectQuestions": {
|
|
3058
|
+
"label": "Inject Questions",
|
|
3059
|
+
"help": "Include the most relevant open question in the system prompt"
|
|
3060
|
+
},
|
|
3061
|
+
"commitmentDecayDays": {
|
|
3062
|
+
"label": "Commitment Decay (days)",
|
|
3063
|
+
"advanced": true,
|
|
3064
|
+
"placeholder": "90"
|
|
3065
|
+
},
|
|
3066
|
+
"workspaceDir": {
|
|
3067
|
+
"label": "Workspace Directory",
|
|
3068
|
+
"advanced": true,
|
|
3069
|
+
"placeholder": "~/.openclaw/workspace"
|
|
3070
|
+
},
|
|
3071
|
+
"accessTrackingEnabled": {
|
|
3072
|
+
"label": "Access Tracking",
|
|
3073
|
+
"help": "Track which memories are accessed most frequently"
|
|
3074
|
+
},
|
|
3075
|
+
"accessTrackingBufferMaxSize": {
|
|
3076
|
+
"label": "Access Buffer Size",
|
|
3077
|
+
"advanced": true,
|
|
3078
|
+
"placeholder": "100"
|
|
3079
|
+
},
|
|
3080
|
+
"recencyWeight": {
|
|
3081
|
+
"label": "Recency Weight",
|
|
3082
|
+
"advanced": true,
|
|
3083
|
+
"help": "How much to boost recent memories in search (0-1)",
|
|
3084
|
+
"placeholder": "0.2"
|
|
3085
|
+
},
|
|
3086
|
+
"boostAccessCount": {
|
|
3087
|
+
"label": "Boost Frequent Access",
|
|
3088
|
+
"help": "Rank frequently accessed memories higher in search"
|
|
3089
|
+
},
|
|
3090
|
+
"captureMode": {
|
|
3091
|
+
"label": "Capture Mode",
|
|
3092
|
+
"help": "Choose whether Engram stores only explicit notes, normal extraction, or both."
|
|
3093
|
+
},
|
|
3094
|
+
"agentAccessHttp": {
|
|
3095
|
+
"label": "Local HTTP Access",
|
|
3096
|
+
"help": "Enable a local authenticated HTTP API for external Engram clients"
|
|
3097
|
+
},
|
|
3098
|
+
"negativeExamplesEnabled": {
|
|
3099
|
+
"label": "Negative Examples",
|
|
3100
|
+
"help": "Track retrieved-but-not-useful memories and apply a small ranking penalty (optional)"
|
|
3101
|
+
},
|
|
3102
|
+
"negativeExamplesPenaltyPerHit": {
|
|
3103
|
+
"label": "Negative Penalty / Hit",
|
|
3104
|
+
"advanced": true,
|
|
3105
|
+
"placeholder": "0.05"
|
|
3106
|
+
},
|
|
3107
|
+
"negativeExamplesPenaltyCap": {
|
|
3108
|
+
"label": "Negative Penalty Cap",
|
|
3109
|
+
"advanced": true,
|
|
3110
|
+
"placeholder": "0.25"
|
|
3111
|
+
},
|
|
3112
|
+
"chunkingEnabled": {
|
|
3113
|
+
"label": "Enable Chunking",
|
|
3114
|
+
"help": "Automatically split long memories into overlapping chunks for better retrieval"
|
|
3115
|
+
},
|
|
3116
|
+
"chunkingTargetTokens": {
|
|
3117
|
+
"label": "Chunk Target Tokens",
|
|
3118
|
+
"advanced": true,
|
|
3119
|
+
"placeholder": "200"
|
|
3120
|
+
},
|
|
3121
|
+
"chunkingMinTokens": {
|
|
3122
|
+
"label": "Chunk Min Tokens",
|
|
3123
|
+
"advanced": true,
|
|
3124
|
+
"placeholder": "150"
|
|
3125
|
+
},
|
|
3126
|
+
"chunkingOverlapSentences": {
|
|
3127
|
+
"label": "Chunk Overlap Sentences",
|
|
3128
|
+
"advanced": true,
|
|
3129
|
+
"placeholder": "2"
|
|
3130
|
+
},
|
|
3131
|
+
"contradictionDetectionEnabled": {
|
|
3132
|
+
"label": "Contradiction Detection",
|
|
3133
|
+
"help": "Detect and resolve conflicting memories using LLM verification"
|
|
3134
|
+
},
|
|
3135
|
+
"contradictionSimilarityThreshold": {
|
|
3136
|
+
"label": "Contradiction Similarity Threshold",
|
|
3137
|
+
"advanced": true,
|
|
3138
|
+
"placeholder": "0.7"
|
|
3139
|
+
},
|
|
3140
|
+
"contradictionMinConfidence": {
|
|
3141
|
+
"label": "Contradiction Min Confidence",
|
|
3142
|
+
"advanced": true,
|
|
3143
|
+
"placeholder": "0.9"
|
|
3144
|
+
},
|
|
3145
|
+
"contradictionAutoResolve": {
|
|
3146
|
+
"label": "Auto-Resolve Contradictions",
|
|
3147
|
+
"help": "Automatically supersede old memories when contradiction is confirmed"
|
|
3148
|
+
},
|
|
3149
|
+
"memoryLinkingEnabled": {
|
|
3150
|
+
"label": "Memory Linking",
|
|
3151
|
+
"help": "Build knowledge graph by linking related memories"
|
|
3152
|
+
},
|
|
3153
|
+
"threadingEnabled": {
|
|
3154
|
+
"label": "Conversation Threading",
|
|
3155
|
+
"help": "Group memories into conversation threads with auto-titles"
|
|
3156
|
+
},
|
|
3157
|
+
"threadingGapMinutes": {
|
|
3158
|
+
"label": "Thread Gap (minutes)",
|
|
3159
|
+
"advanced": true,
|
|
3160
|
+
"placeholder": "30"
|
|
3161
|
+
},
|
|
3162
|
+
"summarizationEnabled": {
|
|
3163
|
+
"label": "Memory Summarization",
|
|
3164
|
+
"help": "Compress old, low-importance memories into summaries"
|
|
3165
|
+
},
|
|
3166
|
+
"summarizationTriggerCount": {
|
|
3167
|
+
"label": "Summarization Trigger",
|
|
3168
|
+
"advanced": true,
|
|
3169
|
+
"placeholder": "1000"
|
|
3170
|
+
},
|
|
3171
|
+
"summarizationRecentToKeep": {
|
|
3172
|
+
"label": "Recent to Keep",
|
|
3173
|
+
"advanced": true,
|
|
3174
|
+
"placeholder": "300"
|
|
3175
|
+
},
|
|
3176
|
+
"summarizationImportanceThreshold": {
|
|
3177
|
+
"label": "Importance Threshold",
|
|
3178
|
+
"advanced": true,
|
|
3179
|
+
"placeholder": "0.3"
|
|
3180
|
+
},
|
|
3181
|
+
"topicExtractionEnabled": {
|
|
3182
|
+
"label": "Topic Extraction",
|
|
3183
|
+
"help": "Extract key topics from memory corpus"
|
|
3184
|
+
},
|
|
3185
|
+
"topicExtractionTopN": {
|
|
3186
|
+
"label": "Top N Topics",
|
|
3187
|
+
"advanced": true,
|
|
3188
|
+
"placeholder": "50"
|
|
3189
|
+
},
|
|
3190
|
+
"transcriptEnabled": {
|
|
3191
|
+
"label": "Enable Transcript Archive",
|
|
3192
|
+
"help": "Archive conversation transcripts for context preservation"
|
|
3193
|
+
},
|
|
3194
|
+
"transcriptRetentionDays": {
|
|
3195
|
+
"label": "Transcript Retention (days)",
|
|
3196
|
+
"advanced": true,
|
|
3197
|
+
"placeholder": "7"
|
|
3198
|
+
},
|
|
3199
|
+
"transcriptSkipChannelTypes": {
|
|
3200
|
+
"label": "Skip Channel Types",
|
|
3201
|
+
"advanced": true,
|
|
3202
|
+
"help": "Channel types to exclude from transcript logging (default: cron)"
|
|
3203
|
+
},
|
|
3204
|
+
"transcriptRecallHours": {
|
|
3205
|
+
"label": "Transcript Recall (hours)",
|
|
3206
|
+
"advanced": true,
|
|
3207
|
+
"placeholder": "12"
|
|
3208
|
+
},
|
|
3209
|
+
"maxTranscriptTurns": {
|
|
3210
|
+
"label": "Max Transcript Turns",
|
|
3211
|
+
"advanced": true,
|
|
3212
|
+
"placeholder": "50"
|
|
3213
|
+
},
|
|
3214
|
+
"maxTranscriptTokens": {
|
|
3215
|
+
"label": "Max Transcript Tokens",
|
|
3216
|
+
"advanced": true,
|
|
3217
|
+
"placeholder": "1000"
|
|
3218
|
+
},
|
|
3219
|
+
"checkpointEnabled": {
|
|
3220
|
+
"label": "Enable Checkpoints",
|
|
3221
|
+
"help": "Capture conversation checkpoints for resuming context"
|
|
3222
|
+
},
|
|
3223
|
+
"checkpointTurns": {
|
|
3224
|
+
"label": "Checkpoint Turn Interval",
|
|
3225
|
+
"advanced": true,
|
|
3226
|
+
"placeholder": "15"
|
|
3227
|
+
},
|
|
3228
|
+
"compactionResetEnabled": {
|
|
3229
|
+
"label": "Compaction Reset",
|
|
3230
|
+
"help": "Reset session after compaction and inject BOOT.md for recovery",
|
|
3231
|
+
"advanced": true
|
|
3232
|
+
},
|
|
3233
|
+
"hourlySummariesEnabled": {
|
|
3234
|
+
"label": "Enable Hourly Summaries",
|
|
3235
|
+
"help": "Generate hourly summaries of conversation activity"
|
|
3236
|
+
},
|
|
3237
|
+
"summaryRecallHours": {
|
|
3238
|
+
"label": "Summary Recall (hours)",
|
|
3239
|
+
"advanced": true,
|
|
3240
|
+
"placeholder": "24"
|
|
3241
|
+
},
|
|
3242
|
+
"maxSummaryCount": {
|
|
3243
|
+
"label": "Max Summary Count",
|
|
3244
|
+
"advanced": true,
|
|
3245
|
+
"placeholder": "6"
|
|
3246
|
+
},
|
|
3247
|
+
"summaryModel": {
|
|
3248
|
+
"label": "Summary Model",
|
|
3249
|
+
"advanced": true,
|
|
3250
|
+
"placeholder": "(same as extraction model)"
|
|
3251
|
+
},
|
|
3252
|
+
"modelSource": {
|
|
3253
|
+
"label": "Model Source",
|
|
3254
|
+
"help": "Route LLM calls through the gateway's agent model chain instead of Engram's own config. When set to 'gateway', localLlm and openai settings are ignored."
|
|
3255
|
+
},
|
|
3256
|
+
"gatewayAgentId": {
|
|
3257
|
+
"label": "Gateway Agent ID",
|
|
3258
|
+
"advanced": true,
|
|
3259
|
+
"placeholder": "engram-llm",
|
|
3260
|
+
"help": "Agent persona ID from openclaw.json agents.list[] whose model chain to use. Leave empty to use global defaults."
|
|
3261
|
+
},
|
|
3262
|
+
"fastGatewayAgentId": {
|
|
3263
|
+
"label": "Fast Gateway Agent ID",
|
|
3264
|
+
"advanced": true,
|
|
3265
|
+
"placeholder": "engram-llm-fast",
|
|
3266
|
+
"help": "Agent persona ID for fast-tier ops. Leave empty to use the primary gatewayAgentId."
|
|
3267
|
+
},
|
|
3268
|
+
"localLlmEnabled": {
|
|
3269
|
+
"label": "Enable Local LLM",
|
|
3270
|
+
"help": "Use local LLM (LM Studio, Ollama, etc.) for extraction and summaries. Falls back to OpenAI if unavailable."
|
|
3271
|
+
},
|
|
3272
|
+
"localLlmUrl": {
|
|
3273
|
+
"label": "Local LLM URL",
|
|
3274
|
+
"advanced": true,
|
|
3275
|
+
"placeholder": "http://localhost:1234/v1",
|
|
3276
|
+
"help": "OpenAI-compatible endpoint URL for local LLM"
|
|
3277
|
+
},
|
|
3278
|
+
"localLlmModel": {
|
|
3279
|
+
"label": "Local LLM Model",
|
|
3280
|
+
"advanced": true,
|
|
3281
|
+
"placeholder": "local-model",
|
|
3282
|
+
"help": "Model identifier for local LLM requests"
|
|
3283
|
+
},
|
|
3284
|
+
"localLlmApiKey": {
|
|
3285
|
+
"label": "Local LLM API Key",
|
|
3286
|
+
"advanced": true,
|
|
3287
|
+
"sensitive": true,
|
|
3288
|
+
"placeholder": "sk-...",
|
|
3289
|
+
"help": "Optional API key for authenticated OpenAI-compatible endpoints"
|
|
3290
|
+
},
|
|
3291
|
+
"localLlmHeaders": {
|
|
3292
|
+
"label": "Local LLM Headers",
|
|
3293
|
+
"advanced": true,
|
|
3294
|
+
"help": "Optional extra headers for provider-specific routing/auth"
|
|
3295
|
+
},
|
|
3296
|
+
"localLlmAuthHeader": {
|
|
3297
|
+
"label": "Send Auth Header",
|
|
3298
|
+
"advanced": true,
|
|
3299
|
+
"help": "When false, do not send Authorization header even if localLlmApiKey is set"
|
|
3300
|
+
},
|
|
3301
|
+
"localLlmFallback": {
|
|
3302
|
+
"label": "Local LLM Fallback",
|
|
3303
|
+
"advanced": true,
|
|
3304
|
+
"help": "Fall back to cloud OpenAI if local LLM fails or is unavailable"
|
|
3305
|
+
},
|
|
3306
|
+
"localLlmHomeDir": {
|
|
3307
|
+
"label": "Local LLM Home Dir",
|
|
3308
|
+
"advanced": true,
|
|
3309
|
+
"placeholder": "(auto: HOME / os.homedir)",
|
|
3310
|
+
"help": "Optional home directory override for LM Studio settings and local helper paths."
|
|
3311
|
+
},
|
|
3312
|
+
"localLmsCliPath": {
|
|
3313
|
+
"label": "LMS CLI Path",
|
|
3314
|
+
"advanced": true,
|
|
3315
|
+
"placeholder": "/path/to/lms",
|
|
3316
|
+
"help": "Optional absolute path to LMS CLI. Overrides auto-detection."
|
|
3317
|
+
},
|
|
3318
|
+
"localLmsBinDir": {
|
|
3319
|
+
"label": "LMS Bin Dir",
|
|
3320
|
+
"advanced": true,
|
|
3321
|
+
"placeholder": "/path/to/bin",
|
|
3322
|
+
"help": "Optional bin directory prepended to PATH for LMS CLI execution."
|
|
3323
|
+
},
|
|
3324
|
+
"localLlmMaxContext": {
|
|
3325
|
+
"label": "Local LLM Max Context",
|
|
3326
|
+
"advanced": true,
|
|
3327
|
+
"placeholder": "(auto-detected from model)",
|
|
3328
|
+
"help": "Override context window if your LLM server uses smaller default (e.g., 32768 for LM Studio default)"
|
|
3329
|
+
},
|
|
3330
|
+
"localLlmFastEnabled": {
|
|
3331
|
+
"label": "Fast LLM Tier",
|
|
3332
|
+
"help": "Use a separate smaller model for quick operations (rerank, entity summaries, compression guidelines)"
|
|
3333
|
+
},
|
|
3334
|
+
"localLlmFastModel": {
|
|
3335
|
+
"label": "Fast LLM Model",
|
|
3336
|
+
"placeholder": "qwen3.5-4b-mlx",
|
|
3337
|
+
"help": "Model ID for fast-tier operations. Must be loaded in LM Studio alongside the primary model."
|
|
3338
|
+
},
|
|
3339
|
+
"localLlmFastUrl": {
|
|
3340
|
+
"label": "Fast LLM URL",
|
|
3341
|
+
"advanced": true,
|
|
3342
|
+
"placeholder": "(defaults to localLlmUrl)",
|
|
3343
|
+
"help": "Endpoint for fast-tier model. When not set, inherits the primary localLlmUrl."
|
|
3344
|
+
},
|
|
3345
|
+
"localLlmFastTimeoutMs": {
|
|
3346
|
+
"label": "Fast LLM Timeout (ms)",
|
|
3347
|
+
"advanced": true,
|
|
3348
|
+
"help": "Timeout for fast-tier requests. Lower than primary since fast ops should complete quickly."
|
|
3349
|
+
},
|
|
3350
|
+
"evalHarnessEnabled": {
|
|
3351
|
+
"label": "Evaluation Harness",
|
|
3352
|
+
"help": "Enable Engram's benchmark/evaluation harness foundation and benchmark-status diagnostics."
|
|
3353
|
+
},
|
|
3354
|
+
"evalShadowModeEnabled": {
|
|
3355
|
+
"label": "Evaluation Shadow Mode",
|
|
3356
|
+
"advanced": true,
|
|
3357
|
+
"help": "Reserve shadow-mode measurement paths so future benchmark instrumentation can compare memory behavior without affecting live recall."
|
|
3358
|
+
},
|
|
3359
|
+
"benchmarkBaselineSnapshotsEnabled": {
|
|
3360
|
+
"label": "Benchmark Baseline Snapshots",
|
|
3361
|
+
"advanced": true,
|
|
3362
|
+
"help": "Enable versioned benchmark baseline snapshot artifacts for later PR delta reporting."
|
|
3363
|
+
},
|
|
3364
|
+
"benchmarkDeltaReporterEnabled": {
|
|
3365
|
+
"label": "Benchmark Delta Reporter",
|
|
3366
|
+
"advanced": true,
|
|
3367
|
+
"help": "Enable named-baseline delta reports that compare the current eval store against a stored benchmark baseline snapshot."
|
|
3368
|
+
},
|
|
3369
|
+
"evalStoreDir": {
|
|
3370
|
+
"label": "Evaluation Store Directory",
|
|
3371
|
+
"advanced": true,
|
|
3372
|
+
"placeholder": "{memoryDir}/state/evals",
|
|
3373
|
+
"help": "Override where benchmark packs and run summaries are stored."
|
|
3374
|
+
},
|
|
3375
|
+
"objectiveStateMemoryEnabled": {
|
|
3376
|
+
"label": "Objective-State Memory",
|
|
3377
|
+
"help": "Enable the objective-state memory foundation for normalized world and tool state snapshots."
|
|
3378
|
+
},
|
|
3379
|
+
"objectiveStateSnapshotWritesEnabled": {
|
|
3380
|
+
"label": "Objective-State Snapshot Writes",
|
|
3381
|
+
"advanced": true,
|
|
3382
|
+
"help": "Allow snapshot writers to persist objective-state records into the objective-state store."
|
|
3383
|
+
},
|
|
3384
|
+
"objectiveStateRecallEnabled": {
|
|
3385
|
+
"label": "Objective-State Recall",
|
|
3386
|
+
"advanced": true,
|
|
3387
|
+
"help": "Inject prompt-relevant objective-state snapshots into recall context."
|
|
3388
|
+
},
|
|
3389
|
+
"objectiveStateStoreDir": {
|
|
3390
|
+
"label": "Objective-State Store Directory",
|
|
3391
|
+
"advanced": true,
|
|
3392
|
+
"placeholder": "{memoryDir}/state/objective-state",
|
|
3393
|
+
"help": "Override where objective-state snapshots are stored."
|
|
3394
|
+
},
|
|
3395
|
+
"causalTrajectoryMemoryEnabled": {
|
|
3396
|
+
"label": "Causal Trajectory Memory",
|
|
3397
|
+
"help": "Enable the causal-trajectory memory foundation for typed goal-action-observation-outcome chains."
|
|
3398
|
+
},
|
|
3399
|
+
"causalTrajectoryStoreDir": {
|
|
3400
|
+
"label": "Causal Trajectory Store Directory",
|
|
3401
|
+
"advanced": true,
|
|
3402
|
+
"placeholder": "{memoryDir}/state/causal-trajectories",
|
|
3403
|
+
"help": "Override where causal-trajectory records are stored."
|
|
3404
|
+
},
|
|
3405
|
+
"causalTrajectoryRecallEnabled": {
|
|
3406
|
+
"label": "Causal Trajectory Recall",
|
|
3407
|
+
"advanced": true,
|
|
3408
|
+
"help": "Inject prompt-relevant causal trajectories into recall context."
|
|
3409
|
+
},
|
|
3410
|
+
"trustZonesEnabled": {
|
|
3411
|
+
"label": "Trust Zones",
|
|
3412
|
+
"help": "Enable the trust-zone memory foundation for quarantine, working, and trusted records."
|
|
3413
|
+
},
|
|
3414
|
+
"quarantinePromotionEnabled": {
|
|
3415
|
+
"label": "Quarantine Promotion",
|
|
3416
|
+
"advanced": true,
|
|
3417
|
+
"help": "Reserve future promotion flows from quarantine into higher-trust zones."
|
|
3418
|
+
},
|
|
3419
|
+
"trustZoneStoreDir": {
|
|
3420
|
+
"label": "Trust-Zone Store Directory",
|
|
3421
|
+
"advanced": true,
|
|
3422
|
+
"placeholder": "{memoryDir}/state/trust-zones",
|
|
3423
|
+
"help": "Override where trust-zone records are stored."
|
|
3424
|
+
},
|
|
3425
|
+
"trustZoneRecallEnabled": {
|
|
3426
|
+
"label": "Trust-Zone Recall",
|
|
3427
|
+
"advanced": true,
|
|
3428
|
+
"help": "Inject prompt-relevant working and trusted trust-zone records into recall context."
|
|
3429
|
+
},
|
|
3430
|
+
"memoryPoisoningDefenseEnabled": {
|
|
3431
|
+
"label": "Memory Poisoning Defense",
|
|
3432
|
+
"advanced": true,
|
|
3433
|
+
"help": "Enable provenance trust scoring in trust-zone status output as the first poisoning-defense signal."
|
|
3434
|
+
},
|
|
3435
|
+
"memoryRedTeamBenchEnabled": {
|
|
3436
|
+
"label": "Memory Red-Team Benchmarks",
|
|
3437
|
+
"advanced": true,
|
|
3438
|
+
"help": "Enable operator-facing red-team benchmark pack support and status accounting for poisoning-defense suites."
|
|
3439
|
+
},
|
|
3440
|
+
"harmonicRetrievalEnabled": {
|
|
3441
|
+
"label": "Harmonic Retrieval",
|
|
3442
|
+
"help": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section injection and harmonic-search diagnostics."
|
|
3443
|
+
},
|
|
3444
|
+
"abstractionAnchorsEnabled": {
|
|
3445
|
+
"label": "Abstraction Anchors",
|
|
3446
|
+
"advanced": true,
|
|
3447
|
+
"help": "Enable typed cue-anchor indexing for abstraction nodes and expose it through cue-anchor status tooling."
|
|
3448
|
+
},
|
|
3449
|
+
"abstractionNodeStoreDir": {
|
|
3450
|
+
"label": "Abstraction-Node Store Directory",
|
|
3451
|
+
"advanced": true,
|
|
3452
|
+
"placeholder": "{memoryDir}/state/abstraction-nodes",
|
|
3453
|
+
"help": "Override where abstraction nodes are stored."
|
|
3454
|
+
},
|
|
3455
|
+
"verifiedRecallEnabled": {
|
|
3456
|
+
"label": "Verified Recall",
|
|
3457
|
+
"help": "Inject prompt-relevant memory boxes only when their cited source memories verify as non-archived episodes."
|
|
3458
|
+
},
|
|
3459
|
+
"semanticRulePromotionEnabled": {
|
|
3460
|
+
"label": "Semantic Rule Promotion",
|
|
3461
|
+
"advanced": true,
|
|
3462
|
+
"help": "Promote explicit IF/THEN rules from verified episodic memories into durable rule memories."
|
|
3463
|
+
},
|
|
3464
|
+
"semanticRuleVerificationEnabled": {
|
|
3465
|
+
"label": "Semantic Rule Verification",
|
|
3466
|
+
"advanced": true,
|
|
3467
|
+
"help": "Verify promoted semantic rules against their cited source episodes at recall time before surfacing them in recall."
|
|
3468
|
+
},
|
|
3469
|
+
"semanticConsolidationEnabled": {
|
|
3470
|
+
"label": "Semantic Consolidation",
|
|
3471
|
+
"advanced": true,
|
|
3472
|
+
"help": "Enable periodic semantic consolidation of similar memories."
|
|
3473
|
+
},
|
|
3474
|
+
"semanticConsolidationModel": {
|
|
3475
|
+
"label": "Semantic Consolidation Model",
|
|
3476
|
+
"advanced": true,
|
|
3477
|
+
"help": "LLM for consolidation synthesis: 'auto' (primary model), 'fast' (fast local model), or a specific model name."
|
|
3478
|
+
},
|
|
3479
|
+
"semanticConsolidationThreshold": {
|
|
3480
|
+
"label": "Semantic Consolidation Threshold",
|
|
3481
|
+
"advanced": true,
|
|
3482
|
+
"help": "Token overlap threshold (0-1) for grouping similar memories. 0.8=conservative, 0.6=aggressive."
|
|
3483
|
+
},
|
|
3484
|
+
"semanticConsolidationMinClusterSize": {
|
|
3485
|
+
"label": "Semantic Consolidation Min Cluster Size",
|
|
3486
|
+
"advanced": true,
|
|
3487
|
+
"help": "Minimum cluster size before consolidation triggers."
|
|
3488
|
+
},
|
|
3489
|
+
"semanticConsolidationExcludeCategories": {
|
|
3490
|
+
"label": "Semantic Consolidation Exclude Categories",
|
|
3491
|
+
"advanced": true,
|
|
3492
|
+
"help": "Memory categories excluded from semantic consolidation."
|
|
3493
|
+
},
|
|
3494
|
+
"semanticConsolidationIntervalHours": {
|
|
3495
|
+
"label": "Semantic Consolidation Interval (Hours)",
|
|
3496
|
+
"advanced": true,
|
|
3497
|
+
"help": "Hours between automatic consolidation runs (168 = weekly)."
|
|
3498
|
+
},
|
|
3499
|
+
"semanticConsolidationMaxPerRun": {
|
|
3500
|
+
"label": "Semantic Consolidation Max Per Run",
|
|
3501
|
+
"advanced": true,
|
|
3502
|
+
"help": "Max memories to consolidate per run to limit LLM cost."
|
|
3503
|
+
},
|
|
3504
|
+
"creationMemoryEnabled": {
|
|
3505
|
+
"label": "Creation Memory",
|
|
3506
|
+
"advanced": true,
|
|
3507
|
+
"help": "Enable creation-memory foundations, including the work-product ledger for explicit outputs agents create."
|
|
3508
|
+
},
|
|
3509
|
+
"memoryUtilityLearningEnabled": {
|
|
3510
|
+
"label": "Utility Learning",
|
|
3511
|
+
"advanced": true,
|
|
3512
|
+
"help": "Enable utility-learning telemetry storage so later slices can learn promotion and ranking weights from downstream outcomes."
|
|
3513
|
+
},
|
|
3514
|
+
"promotionByOutcomeEnabled": {
|
|
3515
|
+
"label": "Promotion By Outcome",
|
|
3516
|
+
"advanced": true,
|
|
3517
|
+
"help": "Enable outcome-aware promotion controls that will consume learned utility signals in later rollout slices."
|
|
3518
|
+
},
|
|
3519
|
+
"commitmentLedgerEnabled": {
|
|
3520
|
+
"label": "Commitment Ledger",
|
|
3521
|
+
"advanced": true,
|
|
3522
|
+
"help": "Enable the explicit commitment ledger for promises, follow-ups, deadlines, and unfinished obligations."
|
|
3523
|
+
},
|
|
3524
|
+
"commitmentLifecycleEnabled": {
|
|
3525
|
+
"label": "Commitment Lifecycle",
|
|
3526
|
+
"advanced": true,
|
|
3527
|
+
"help": "Enable fulfillment transitions, stale tracking, and resolved-entry cleanup for the commitment ledger."
|
|
3528
|
+
},
|
|
3529
|
+
"commitmentStaleDays": {
|
|
3530
|
+
"label": "Commitment Stale Days",
|
|
3531
|
+
"advanced": true,
|
|
3532
|
+
"help": "Days before an open commitment without a due date counts as stale."
|
|
3533
|
+
},
|
|
3534
|
+
"commitmentLedgerDir": {
|
|
3535
|
+
"label": "Commitment Ledger Directory",
|
|
3536
|
+
"advanced": true,
|
|
3537
|
+
"placeholder": "{memoryDir}/state/commitment-ledger",
|
|
3538
|
+
"help": "Override where commitment ledger entries are stored."
|
|
3539
|
+
},
|
|
3540
|
+
"resumeBundlesEnabled": {
|
|
3541
|
+
"label": "Resume Bundles",
|
|
3542
|
+
"advanced": true,
|
|
3543
|
+
"help": "Enable deterministic resume-bundle storage and explicit handoff bundle commands."
|
|
3544
|
+
},
|
|
3545
|
+
"resumeBundleDir": {
|
|
3546
|
+
"label": "Resume Bundle Directory",
|
|
3547
|
+
"advanced": true,
|
|
3548
|
+
"placeholder": "{memoryDir}/state/resume-bundles",
|
|
3549
|
+
"help": "Override where resume bundles are stored."
|
|
3550
|
+
},
|
|
3551
|
+
"workProductRecallEnabled": {
|
|
3552
|
+
"label": "Work-Product Recall",
|
|
3553
|
+
"advanced": true,
|
|
3554
|
+
"help": "Inject prompt-relevant work-product ledger entries into recall context and expose artifact-recovery search tooling."
|
|
3555
|
+
},
|
|
3556
|
+
"workProductLedgerDir": {
|
|
3557
|
+
"label": "Work-Product Ledger Directory",
|
|
3558
|
+
"advanced": true,
|
|
3559
|
+
"placeholder": "{memoryDir}/state/work-product-ledger",
|
|
3560
|
+
"help": "Override where work-product ledger entries are stored."
|
|
3561
|
+
},
|
|
3562
|
+
"actionGraphRecallEnabled": {
|
|
3563
|
+
"label": "Action Graph Recall",
|
|
3564
|
+
"help": "Write action-conditioned causal-stage edges from typed trajectory records into the causal graph."
|
|
3565
|
+
},
|
|
3566
|
+
"factDeduplicationEnabled": {
|
|
3567
|
+
"label": "Fact Deduplication",
|
|
3568
|
+
"help": "Prevent storing semantically identical facts using content hashing"
|
|
3569
|
+
},
|
|
3570
|
+
"factArchivalEnabled": {
|
|
3571
|
+
"label": "Fact Archival",
|
|
3572
|
+
"help": "Automatically archive old, low-importance, rarely-accessed facts during consolidation"
|
|
3573
|
+
},
|
|
3574
|
+
"factArchivalAgeDays": {
|
|
3575
|
+
"label": "Archival Age (days)",
|
|
3576
|
+
"advanced": true,
|
|
3577
|
+
"placeholder": "90"
|
|
3578
|
+
},
|
|
3579
|
+
"factArchivalMaxImportance": {
|
|
3580
|
+
"label": "Archival Max Importance",
|
|
3581
|
+
"advanced": true,
|
|
3582
|
+
"placeholder": "0.3"
|
|
3583
|
+
},
|
|
3584
|
+
"factArchivalMaxAccessCount": {
|
|
3585
|
+
"label": "Archival Max Access Count",
|
|
3586
|
+
"advanced": true,
|
|
3587
|
+
"placeholder": "2"
|
|
3588
|
+
},
|
|
3589
|
+
"factArchivalProtectedCategories": {
|
|
3590
|
+
"label": "Archival Protected Categories",
|
|
3591
|
+
"advanced": true,
|
|
3592
|
+
"help": "Categories that are never archived regardless of age or importance"
|
|
3593
|
+
},
|
|
3594
|
+
"lifecyclePolicyEnabled": {
|
|
3595
|
+
"label": "Lifecycle Policy Engine",
|
|
3596
|
+
"help": "Enable lifecycle scoring/promotions during consolidation (v8.3)"
|
|
3597
|
+
},
|
|
3598
|
+
"lifecycleFilterStaleEnabled": {
|
|
3599
|
+
"label": "Filter Stale Lifecycle Memories",
|
|
3600
|
+
"advanced": true,
|
|
3601
|
+
"help": "If enabled, retrieval may filter stale lifecycle memories (activated in PR20D)"
|
|
3602
|
+
},
|
|
3603
|
+
"lifecyclePromoteHeatThreshold": {
|
|
3604
|
+
"label": "Lifecycle Promote Heat Threshold",
|
|
3605
|
+
"advanced": true,
|
|
3606
|
+
"placeholder": "0.55"
|
|
3607
|
+
},
|
|
3608
|
+
"lifecycleStaleDecayThreshold": {
|
|
3609
|
+
"label": "Lifecycle Stale Decay Threshold",
|
|
3610
|
+
"advanced": true,
|
|
3611
|
+
"placeholder": "0.65"
|
|
3612
|
+
},
|
|
3613
|
+
"lifecycleArchiveDecayThreshold": {
|
|
3614
|
+
"label": "Lifecycle Archive Decay Threshold",
|
|
3615
|
+
"advanced": true,
|
|
3616
|
+
"placeholder": "0.85"
|
|
3617
|
+
},
|
|
3618
|
+
"lifecycleProtectedCategories": {
|
|
3619
|
+
"label": "Lifecycle Protected Categories",
|
|
3620
|
+
"advanced": true,
|
|
3621
|
+
"help": "Categories lifecycle policy should not auto-archive"
|
|
3622
|
+
},
|
|
3623
|
+
"lifecycleMetricsEnabled": {
|
|
3624
|
+
"label": "Lifecycle Metrics",
|
|
3625
|
+
"advanced": true,
|
|
3626
|
+
"help": "Write lifecycle metrics snapshots to state/lifecycle-metrics.json"
|
|
3627
|
+
},
|
|
3628
|
+
"proactiveExtractionEnabled": {
|
|
3629
|
+
"label": "Proactive Extraction",
|
|
3630
|
+
"help": "Enable proactive self-questioning extraction second-pass (v8.3, default off)"
|
|
3631
|
+
},
|
|
3632
|
+
"contextCompressionActionsEnabled": {
|
|
3633
|
+
"label": "Context Compression Actions",
|
|
3634
|
+
"help": "Enable context compression action tools and action telemetry (v8.3, default off)"
|
|
3635
|
+
},
|
|
3636
|
+
"compressionGuidelineLearningEnabled": {
|
|
3637
|
+
"label": "Compression Guideline Learning",
|
|
3638
|
+
"help": "Enable adaptive compression guideline learning from action outcomes (v8.3, default off)"
|
|
3639
|
+
},
|
|
3640
|
+
"compressionGuidelineSemanticRefinementEnabled": {
|
|
3641
|
+
"label": "Compression Semantic Refinement",
|
|
3642
|
+
"advanced": true,
|
|
3643
|
+
"help": "Enable optional semantic refinement after deterministic guideline generation (v8.11, default off)"
|
|
3644
|
+
},
|
|
3645
|
+
"compressionGuidelineSemanticTimeoutMs": {
|
|
3646
|
+
"label": "Compression Semantic Timeout (ms)",
|
|
3647
|
+
"advanced": true,
|
|
3648
|
+
"placeholder": "2500"
|
|
3649
|
+
},
|
|
3650
|
+
"maxProactiveQuestionsPerExtraction": {
|
|
3651
|
+
"label": "Max Proactive Questions / Extraction",
|
|
3652
|
+
"advanced": true,
|
|
3653
|
+
"placeholder": "2"
|
|
3654
|
+
},
|
|
3655
|
+
"proactiveExtractionTimeoutMs": {
|
|
3656
|
+
"label": "Proactive Extraction Timeout (ms)",
|
|
3657
|
+
"advanced": true,
|
|
3658
|
+
"placeholder": "2500"
|
|
3659
|
+
},
|
|
3660
|
+
"proactiveExtractionMaxTokens": {
|
|
3661
|
+
"label": "Proactive Extraction Max Tokens",
|
|
3662
|
+
"advanced": true,
|
|
3663
|
+
"placeholder": "900"
|
|
3664
|
+
},
|
|
3665
|
+
"extractionMaxOutputTokens": {
|
|
3666
|
+
"label": "Extraction Max Output Tokens",
|
|
3667
|
+
"advanced": true,
|
|
3668
|
+
"placeholder": "16384"
|
|
3669
|
+
},
|
|
3670
|
+
"proactiveExtractionCategoryAllowlist": {
|
|
3671
|
+
"label": "Proactive Category Allowlist",
|
|
3672
|
+
"advanced": true,
|
|
3673
|
+
"help": "Optional list of memory categories that proactive second-pass writes may emit"
|
|
3674
|
+
},
|
|
3675
|
+
"maxCompressionTokensPerHour": {
|
|
3676
|
+
"label": "Max Compression Tokens / Hour",
|
|
3677
|
+
"advanced": true,
|
|
3678
|
+
"placeholder": "1500"
|
|
3679
|
+
},
|
|
3680
|
+
"behaviorLoopAutoTuneEnabled": {
|
|
3681
|
+
"label": "Behavior Loop Auto-Tune",
|
|
3682
|
+
"help": "Enable bounded runtime policy auto-tuning from correction/preference signals (v8.15, default off)"
|
|
3683
|
+
},
|
|
3684
|
+
"behaviorLoopLearningWindowDays": {
|
|
3685
|
+
"label": "Behavior Learning Window (days)",
|
|
3686
|
+
"advanced": true,
|
|
3687
|
+
"placeholder": "14"
|
|
3688
|
+
},
|
|
3689
|
+
"behaviorLoopMinSignalCount": {
|
|
3690
|
+
"label": "Behavior Min Signal Count",
|
|
3691
|
+
"advanced": true,
|
|
3692
|
+
"placeholder": "10"
|
|
3693
|
+
},
|
|
3694
|
+
"behaviorLoopMaxDeltaPerCycle": {
|
|
3695
|
+
"label": "Behavior Max Delta / Cycle",
|
|
3696
|
+
"advanced": true,
|
|
3697
|
+
"placeholder": "0.1"
|
|
3698
|
+
},
|
|
3699
|
+
"behaviorLoopProtectedParams": {
|
|
3700
|
+
"label": "Behavior Protected Params",
|
|
3701
|
+
"advanced": true,
|
|
3702
|
+
"help": "Parameter keys that auto-tuning must never change"
|
|
3703
|
+
},
|
|
3704
|
+
"knowledgeIndexEnabled": {
|
|
3705
|
+
"label": "Knowledge Index",
|
|
3706
|
+
"help": "Inject a compact table of top entities into every recall"
|
|
3707
|
+
},
|
|
3708
|
+
"knowledgeIndexMaxEntities": {
|
|
3709
|
+
"label": "Knowledge Index Max Entities",
|
|
3710
|
+
"advanced": true,
|
|
3711
|
+
"placeholder": "40"
|
|
3712
|
+
},
|
|
3713
|
+
"knowledgeIndexMaxChars": {
|
|
3714
|
+
"label": "Knowledge Index Max Chars",
|
|
3715
|
+
"advanced": true,
|
|
3716
|
+
"placeholder": "4000"
|
|
3717
|
+
},
|
|
3718
|
+
"entityRetrievalEnabled": {
|
|
3719
|
+
"label": "Entity Retrieval",
|
|
3720
|
+
"help": "Inject direct-answer entity hints for entity questions and short follow-up queries"
|
|
3721
|
+
},
|
|
3722
|
+
"entityRetrievalMaxChars": {
|
|
3723
|
+
"label": "Entity Retrieval Max Chars",
|
|
3724
|
+
"advanced": true,
|
|
3725
|
+
"placeholder": "2400"
|
|
3726
|
+
},
|
|
3727
|
+
"entityRetrievalMaxHints": {
|
|
3728
|
+
"label": "Entity Retrieval Max Hints",
|
|
3729
|
+
"advanced": true,
|
|
3730
|
+
"placeholder": "2"
|
|
3731
|
+
},
|
|
3732
|
+
"entityRetrievalMaxSupportingFacts": {
|
|
3733
|
+
"label": "Entity Retrieval Max Supporting Facts",
|
|
3734
|
+
"advanced": true,
|
|
3735
|
+
"placeholder": "6"
|
|
3736
|
+
},
|
|
3737
|
+
"entityRetrievalMaxRelatedEntities": {
|
|
3738
|
+
"label": "Entity Retrieval Max Related Entities",
|
|
3739
|
+
"advanced": true,
|
|
3740
|
+
"placeholder": "3"
|
|
3741
|
+
},
|
|
3742
|
+
"entityRetrievalRecentTurns": {
|
|
3743
|
+
"label": "Entity Retrieval Recent Turns",
|
|
3744
|
+
"advanced": true,
|
|
3745
|
+
"placeholder": "6"
|
|
3746
|
+
},
|
|
3747
|
+
"entityRelationshipsEnabled": {
|
|
3748
|
+
"label": "Entity Relationships",
|
|
3749
|
+
"help": "Track entity-to-entity relationships during extraction"
|
|
3750
|
+
},
|
|
3751
|
+
"entityActivityLogEnabled": {
|
|
3752
|
+
"label": "Entity Activity Log",
|
|
3753
|
+
"help": "Log timestamped activity per entity"
|
|
3754
|
+
},
|
|
3755
|
+
"entityActivityLogMaxEntries": {
|
|
3756
|
+
"label": "Activity Log Max Entries",
|
|
3757
|
+
"advanced": true,
|
|
3758
|
+
"placeholder": "20"
|
|
3759
|
+
},
|
|
3760
|
+
"entityAliasesEnabled": {
|
|
3761
|
+
"label": "Entity Aliases",
|
|
3762
|
+
"help": "Store aliases per entity file"
|
|
3763
|
+
},
|
|
3764
|
+
"entitySummaryEnabled": {
|
|
3765
|
+
"label": "Entity Summaries",
|
|
3766
|
+
"help": "Generate LLM summaries for entities during consolidation"
|
|
3767
|
+
},
|
|
3768
|
+
"recallBudgetChars": {
|
|
3769
|
+
"label": "Recall Budget (Chars)",
|
|
3770
|
+
"advanced": true,
|
|
3771
|
+
"placeholder": "8000"
|
|
3772
|
+
},
|
|
3773
|
+
"recallPipeline": {
|
|
3774
|
+
"label": "Recall Pipeline",
|
|
3775
|
+
"advanced": true,
|
|
3776
|
+
"help": "Ordered section configuration for recall assembly and per-section limits"
|
|
3777
|
+
}
|
|
3778
|
+
}
|
|
3779
|
+
}
|