superlocalmemory 4.1.24 → 4.2.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.
Files changed (161) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/CHANGELOG.md +297 -0
  3. package/README.md +206 -271
  4. package/antigravity-plugin/_GENERATED.md +2 -1
  5. package/antigravity-plugin/agents/slm-governance-advisor.md +10 -4
  6. package/antigravity-plugin/agents/slm-loop-runner.md +1 -1
  7. package/antigravity-plugin/agents/slm-memory-advisor.md +8 -4
  8. package/antigravity-plugin/agents/slm-optimize-advisor.md +1 -1
  9. package/antigravity-plugin/plugin.json +1 -1
  10. package/antigravity-plugin/skills/slm-bot-memory/SKILL.md +36 -1
  11. package/antigravity-plugin/skills/slm-cache/SKILL.md +1 -1
  12. package/antigravity-plugin/skills/slm-compress/SKILL.md +1 -1
  13. package/antigravity-plugin/skills/slm-getting-started-bot/SKILL.md +58 -7
  14. package/antigravity-plugin/skills/slm-governance/SKILL.md +61 -5
  15. package/antigravity-plugin/skills/slm-graph/SKILL.md +1 -1
  16. package/antigravity-plugin/skills/slm-loop/SKILL.md +22 -2
  17. package/antigravity-plugin/skills/slm-media/SKILL.md +334 -0
  18. package/antigravity-plugin/skills/slm-mesh/SKILL.md +110 -8
  19. package/antigravity-plugin/skills/slm-profile/SKILL.md +17 -12
  20. package/antigravity-plugin/skills/slm-recall/SKILL.md +91 -3
  21. package/antigravity-plugin/skills/slm-remember/SKILL.md +6 -1
  22. package/antigravity-plugin/skills/slm-scope/SKILL.md +1 -1
  23. package/antigravity-plugin/skills/slm-session/SKILL.md +1 -1
  24. package/antigravity-plugin/skills/slm-status/SKILL.md +48 -2
  25. package/antigravity-plugin/skills/slm-web-access/SKILL.md +92 -6
  26. package/bin/slm-npm +1 -1
  27. package/codex-plugin/.claude-plugin/plugin.json +1 -1
  28. package/codex-plugin/.codex-plugin/plugin.json +1 -1
  29. package/codex-plugin/AGENTS.md +38 -9
  30. package/codex-plugin/README.md +8 -6
  31. package/codex-plugin/_GENERATED.md +2 -1
  32. package/codex-plugin/agents/slm-governance-advisor.md +10 -4
  33. package/codex-plugin/agents/slm-loop-runner.md +1 -1
  34. package/codex-plugin/agents/slm-memory-advisor.md +8 -4
  35. package/codex-plugin/agents/slm-optimize-advisor.md +1 -1
  36. package/codex-plugin/skills/slm-bot-memory/SKILL.md +36 -1
  37. package/codex-plugin/skills/slm-cache/SKILL.md +1 -1
  38. package/codex-plugin/skills/slm-compress/SKILL.md +1 -1
  39. package/codex-plugin/skills/slm-getting-started-bot/SKILL.md +58 -7
  40. package/codex-plugin/skills/slm-governance/SKILL.md +61 -5
  41. package/codex-plugin/skills/slm-graph/SKILL.md +1 -1
  42. package/codex-plugin/skills/slm-loop/SKILL.md +22 -2
  43. package/codex-plugin/skills/slm-media/SKILL.md +334 -0
  44. package/codex-plugin/skills/slm-mesh/SKILL.md +110 -8
  45. package/codex-plugin/skills/slm-profile/SKILL.md +17 -12
  46. package/codex-plugin/skills/slm-recall/SKILL.md +91 -3
  47. package/codex-plugin/skills/slm-remember/SKILL.md +6 -1
  48. package/codex-plugin/skills/slm-scope/SKILL.md +1 -1
  49. package/codex-plugin/skills/slm-session/SKILL.md +1 -1
  50. package/codex-plugin/skills/slm-status/SKILL.md +48 -2
  51. package/codex-plugin/skills/slm-web-access/SKILL.md +92 -6
  52. package/copilot-plugin/.github/agents/slm-governance-advisor.agent.md +11 -5
  53. package/copilot-plugin/.github/agents/slm-loop-runner.agent.md +2 -2
  54. package/copilot-plugin/.github/agents/slm-memory-advisor.agent.md +9 -5
  55. package/copilot-plugin/.github/agents/slm-optimize-advisor.agent.md +2 -2
  56. package/copilot-plugin/.github/copilot-instructions.md +14 -5
  57. package/copilot-plugin/.github/prompts/slm-bot-memory.prompt.md +35 -2
  58. package/copilot-plugin/.github/prompts/slm-cache.prompt.md +2 -2
  59. package/copilot-plugin/.github/prompts/slm-compress.prompt.md +2 -2
  60. package/copilot-plugin/.github/prompts/slm-getting-started-bot.prompt.md +57 -8
  61. package/copilot-plugin/.github/prompts/slm-governance.prompt.md +60 -5
  62. package/copilot-plugin/.github/prompts/slm-graph.prompt.md +2 -2
  63. package/copilot-plugin/.github/prompts/slm-loop.prompt.md +28 -2
  64. package/copilot-plugin/.github/prompts/slm-media.prompt.md +335 -0
  65. package/copilot-plugin/.github/prompts/slm-mesh.prompt.md +108 -8
  66. package/copilot-plugin/.github/prompts/slm-profile.prompt.md +18 -13
  67. package/copilot-plugin/.github/prompts/slm-recall.prompt.md +92 -3
  68. package/copilot-plugin/.github/prompts/slm-remember.prompt.md +7 -2
  69. package/copilot-plugin/.github/prompts/slm-scope.prompt.md +2 -2
  70. package/copilot-plugin/.github/prompts/slm-session.prompt.md +2 -2
  71. package/copilot-plugin/.github/prompts/slm-status.prompt.md +48 -2
  72. package/copilot-plugin/.github/prompts/slm-web-access.prompt.md +92 -6
  73. package/copilot-plugin/README.md +3 -3
  74. package/copilot-plugin/_GENERATED.md +2 -1
  75. package/hermes-plugin/__init__.py +15 -5
  76. package/hermes-plugin/agents/slm-governance-advisor.md +10 -4
  77. package/hermes-plugin/agents/slm-loop-runner.md +1 -1
  78. package/hermes-plugin/agents/slm-memory-advisor.md +8 -4
  79. package/hermes-plugin/agents/slm-optimize-advisor.md +1 -1
  80. package/hermes-plugin/command-inventory.json +3 -3
  81. package/hermes-plugin/plugin.yaml +1 -1
  82. package/hermes-plugin/skills/slm-bot-memory/SKILL.md +36 -1
  83. package/hermes-plugin/skills/slm-cache/SKILL.md +1 -1
  84. package/hermes-plugin/skills/slm-compress/SKILL.md +1 -1
  85. package/hermes-plugin/skills/slm-getting-started-bot/SKILL.md +58 -7
  86. package/hermes-plugin/skills/slm-governance/SKILL.md +61 -5
  87. package/hermes-plugin/skills/slm-graph/SKILL.md +1 -1
  88. package/hermes-plugin/skills/slm-loop/SKILL.md +22 -2
  89. package/hermes-plugin/skills/slm-media/SKILL.md +334 -0
  90. package/hermes-plugin/skills/slm-mesh/SKILL.md +110 -8
  91. package/hermes-plugin/skills/slm-profile/SKILL.md +17 -12
  92. package/hermes-plugin/skills/slm-recall/SKILL.md +91 -3
  93. package/hermes-plugin/skills/slm-remember/SKILL.md +6 -1
  94. package/hermes-plugin/skills/slm-scope/SKILL.md +1 -1
  95. package/hermes-plugin/skills/slm-session/SKILL.md +1 -1
  96. package/hermes-plugin/skills/slm-status/SKILL.md +48 -2
  97. package/hermes-plugin/skills/slm-web-access/SKILL.md +92 -6
  98. package/ide/configs/cody-commands.json +1 -1
  99. package/ide/configs/continue-mcp.yaml +9 -14
  100. package/ide/configs/continue-skills.yaml +8 -3
  101. package/ide/configs/opencode-mcp.json +4 -5
  102. package/package.json +38 -21
  103. package/plugin/.claude-plugin/plugin.json +2 -2
  104. package/plugin/.cursor-plugin/plugin.json +1 -1
  105. package/plugin/CLAUDE.md +13 -4
  106. package/plugin/agents/slm-governance-advisor.md +10 -4
  107. package/plugin/agents/slm-loop-runner.md +1 -1
  108. package/plugin/agents/slm-memory-advisor.md +8 -4
  109. package/plugin/agents/slm-optimize-advisor.md +1 -1
  110. package/plugin/cursor-skills/slm-bot-memory/SKILL.md +36 -1
  111. package/plugin/cursor-skills/slm-getting-started-bot/SKILL.md +58 -7
  112. package/plugin/cursor-skills/slm-recall/SKILL.md +91 -3
  113. package/plugin/cursor-skills/slm-remember/SKILL.md +6 -1
  114. package/plugin/cursor-skills/slm-scope/SKILL.md +1 -1
  115. package/plugin/cursor-skills/slm-session/SKILL.md +1 -1
  116. package/plugin/mcp.cursor.json +1 -1
  117. package/plugin/requirements.txt +1 -1
  118. package/plugin/skills/slm-bot-memory/SKILL.md +36 -1
  119. package/plugin/skills/slm-cache/SKILL.md +1 -1
  120. package/plugin/skills/slm-compress/SKILL.md +1 -1
  121. package/plugin/skills/slm-getting-started-bot/SKILL.md +58 -7
  122. package/plugin/skills/slm-governance/SKILL.md +61 -5
  123. package/plugin/skills/slm-graph/SKILL.md +1 -1
  124. package/plugin/skills/slm-loop/SKILL.md +22 -2
  125. package/plugin/skills/slm-media/SKILL.md +334 -0
  126. package/plugin/skills/slm-mesh/SKILL.md +110 -8
  127. package/plugin/skills/slm-profile/SKILL.md +17 -12
  128. package/plugin/skills/slm-recall/SKILL.md +91 -3
  129. package/plugin/skills/slm-remember/SKILL.md +6 -1
  130. package/plugin/skills/slm-scope/SKILL.md +1 -1
  131. package/plugin/skills/slm-session/SKILL.md +1 -1
  132. package/plugin/skills/slm-status/SKILL.md +48 -2
  133. package/plugin/skills/slm-web-access/SKILL.md +92 -6
  134. package/plugin-src/agents/slm-governance-advisor.md +10 -4
  135. package/plugin-src/agents/slm-loop-runner.md +1 -1
  136. package/plugin-src/agents/slm-memory-advisor.md +8 -4
  137. package/plugin-src/agents/slm-optimize-advisor.md +1 -1
  138. package/plugin-src/rules/AGENTS.md +38 -9
  139. package/plugin-src/rules/CLAUDE.md.fragment +13 -4
  140. package/plugin-src/skills/slm-bot-memory/SKILL.md +36 -1
  141. package/plugin-src/skills/slm-cache/SKILL.md +1 -1
  142. package/plugin-src/skills/slm-compress/SKILL.md +1 -1
  143. package/plugin-src/skills/slm-getting-started-bot/SKILL.md +58 -7
  144. package/plugin-src/skills/slm-governance/SKILL.md +61 -5
  145. package/plugin-src/skills/slm-graph/SKILL.md +1 -1
  146. package/plugin-src/skills/slm-loop/SKILL.md +22 -2
  147. package/plugin-src/skills/slm-media/SKILL.md +334 -0
  148. package/plugin-src/skills/slm-mesh/SKILL.md +110 -8
  149. package/plugin-src/skills/slm-profile/SKILL.md +17 -12
  150. package/plugin-src/skills/slm-recall/SKILL.md +91 -3
  151. package/plugin-src/skills/slm-remember/SKILL.md +6 -1
  152. package/plugin-src/skills/slm-scope/SKILL.md +1 -1
  153. package/plugin-src/skills/slm-session/SKILL.md +1 -1
  154. package/plugin-src/skills/slm-status/SKILL.md +48 -2
  155. package/plugin-src/skills/slm-web-access/SKILL.md +92 -6
  156. package/scripts/postinstall/engine-upgrade.js +112 -0
  157. package/scripts/postinstall/media-request.js +203 -0
  158. package/scripts/postinstall/node-arch.js +27 -0
  159. package/scripts/postinstall-interactive.js +15 -19
  160. package/scripts/postinstall.js +99 -13
  161. package/scripts/preuninstall.js +55 -3
@@ -9,7 +9,7 @@
9
9
  "author": {
10
10
  "name": "Qualixar"
11
11
  },
12
- "description": "Local-first agent memory + reversible context compression and KV cache, as an MCP server. Serves the 56-tool full profile by default; set SLM_MCP_PROFILE=code for the 38-tool code profile.",
12
+ "description": "Local-first agent memory + reversible context compression and KV cache, as an MCP server, with optional pictures, PDFs and bot messaging. Serves the 58-tool full profile by default; set SLM_MCP_PROFILE=code for the 39-tool code profile.",
13
13
  "homepage": "https://github.com/qualixar/superlocalmemory",
14
14
  "keywords": [
15
15
  "memory",
@@ -21,7 +21,7 @@
21
21
  "license": "AGPL-3.0-or-later",
22
22
  "name": "superlocalmemory",
23
23
  "source": "./plugin",
24
- "version": "4.1.24"
24
+ "version": "4.2.0"
25
25
  },
26
26
  {
27
27
  "author": {
@@ -39,7 +39,7 @@
39
39
  "license": "AGPL-3.0-or-later",
40
40
  "name": "superlocalmemory-codex",
41
41
  "source": "./codex-plugin",
42
- "version": "4.1.24"
42
+ "version": "4.2.0"
43
43
  }
44
44
  ]
45
45
  }
package/CHANGELOG.md CHANGED
@@ -5,6 +5,303 @@ All notable changes to SuperLocalMemory will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [4.2.0] — Recall that says "That isn't in SuperLocalMemory", memory that looks after itself, pictures and documents
9
+
10
+ This release changes what recall does when memory cannot answer, adds a Memory
11
+ health service that improves older memories without touching what you wrote,
12
+ and lets SLM remember pictures and documents. It also closes a long list of
13
+ erasure, access-control and backup gaps. Upgrading never moves or deletes
14
+ memory, and an update that changes the store takes a restore point first.
15
+
16
+ ### Many agents at once
17
+
18
+ - **A question waits for its full answer instead of getting a keyword guess.** When
19
+ several agents ask at once, an agent's recall, `slm recall`, the Recall Lab and
20
+ saved views now wait their turn (up to about twelve seconds) and run the full
21
+ pipeline. If every slot is still busy, they get a plain "SuperLocalMemory is
22
+ answering other questions right now. Ask again in about N seconds" (HTTP 503 with
23
+ `Retry-After`, `code: RECALL_BUSY` over MCP, exit code 75 from the CLI), never a
24
+ stale keyword answer presented as recall. Hooks that run before a prompt keep their
25
+ three-second limit, so typing is never held up. Measured on a 27,000-memory store
26
+ with twelve agents asking at once: twelve full answers in 2.4 to 5.4 seconds, where
27
+ before two of the twelve fell back to keywords.
28
+ - **The same question asked twice at once runs once.** Identical recalls in flight
29
+ share one run, and a complete answer is reused for a few seconds while nothing is
30
+ written. Any write (remember, update, delete, forget, a scope change) drops it at
31
+ once, so an agent never reads an answer from before its own write.
32
+ - **Background work steps aside for questions.** Local-model extraction and summaries
33
+ in Mode B now wait while a recall is running (never more than twenty seconds), so a
34
+ long generation no longer sits in front of every recall.
35
+ - **The dashboard reads once for everyone.** Memory health, totals and the compliance
36
+ pane are computed once and shared for a few seconds between every open dashboard;
37
+ a repeat look answers in milliseconds. The audit trail is opened once, with an
38
+ index for the workspace it is read for.
39
+ - **"What am I working on" answers with your newest memories.** A present-tense
40
+ question no longer faces the word-match test (its answer shares no word with it),
41
+ so it stops saying "That isn't in SuperLocalMemory."
42
+ - **Dashboard:** a "please wait" bar with the mascot while SLM starts or warms up;
43
+ loading and error messages carry the mascot; the folder dialog comes to the front
44
+ instead of opening behind other windows; Settings rows wrap instead of squeezing a
45
+ label to one letter per line.
46
+
47
+ ### Recall quality
48
+
49
+ - **Recall says so when nothing supports the question.** Every recall now comes back
50
+ in one of three tiers. *Supported*: at least one memory is strong enough evidence.
51
+ *Closest memories*: nothing supports it, but the question is a real one and a few
52
+ memories are close, so you see up to three, labelled, under "I don't have this
53
+ exactly — here are the closest memories." *Not in memory*: a nonsense question, or
54
+ nothing close, returns no results and the sentence "That isn't in
55
+ SuperLocalMemory." Before this, a nonsense question could still return the nearest
56
+ memories. Each memory is scored on several signals together (meaning, keywords,
57
+ names, rare terms, how the question is phrased, and how often the memory matches
58
+ everything); pinned memories are always returned. The command line and the
59
+ dashboard show the closest memories by default; over MCP and the REST API an agent
60
+ gets them when it asks (`include_related`). It is far better at rejecting nonsense
61
+ than at spotting an on-topic question memory has no answer to, which is what the
62
+ answer check is for ([Recall](docs/recall.md#when-memory-cannot-answer)).
63
+ - **`slm recall --show-weak`** (the `show_weak` option on the MCP recall tool, the
64
+ REST API and the dashboard's "Show closest matches") returns the closest weak
65
+ matches when nothing supports the question, each marked weak, with the same
66
+ sentence on top.
67
+ - **A recall that runs before SLM is ready says so.** For a few minutes after a start
68
+ the models, probes and memory graph are still loading. Recall then shows the
69
+ keyword finds it has (up to five) under "SuperLocalMemory is still warming up —
70
+ results may be incomplete", and never says the memory is empty. The response
71
+ carries `warming_up` and `status_note` for agents.
72
+ - **Layered recall.** `depth` 0 returns ids, the tier and a one-line preview; 1 (the
73
+ default) the full facts; 2 adds the source memory, up to three neighbours from the
74
+ same session, up to three facts about the same entities and the correction that
75
+ replaced it. `max_tokens` is a hard cap that is never exceeded, a new `expand`
76
+ tool drills into one result, and every injected context block is capped too.
77
+ `slm recall --depth 2 --max-tokens 1500`.
78
+ - **A recall that matches by keyword alone is no longer written off**, and the
79
+ keyword fallback serves only memories that cover the words you asked with.
80
+ Questions are also rewritten into base forms and known aliases for the keyword
81
+ search; the check that decides whether a memory answers always reads your
82
+ original words, so a rewrite can never make nonsense answer.
83
+ - **The on-device answer check (Laya) is installed by default where it can run.** On
84
+ an Apple Silicon Mac, setup installs it (about 1.1 GB) without asking in unattended
85
+ runs, and the first command after an upgrade offers it the same way: it asks in a
86
+ terminal and starts a background install without one. It is independent of the
87
+ operating mode, so Mode A and Mode B both run it entirely on your computer. Opt out
88
+ with `slm setup --no-laya` or `SLM_SKIP_LAYA=1`; answering no once is remembered. It is
89
+ never installed on other hardware, over an install you already have, or when you chose
90
+ Off or the online check. The check has its own time budget, so a slow check can no
91
+ longer eat the recall ceiling. The online option (Jev) stays off until you choose it
92
+ and tick its consent.
93
+ - **Local checks are calibrated in the background**, with visible progress and a
94
+ cancel button, and a new calibration is rejected if it does worse than the
95
+ current one on held-out questions.
96
+ - **Recall stays fast while you write.** A save no longer forces the whole graph
97
+ to rebuild on the next recall: the cached graph follows writes, deletes and
98
+ erasures, and full rebuilds run in the background. On a 26,000-fact store with
99
+ a write every 2 seconds, p95 recall fell from 4.3 s to 0.94 s and peak memory
100
+ from up to 1.7 GB to about 260 MB. Large stores get new recall indexes, and
101
+ recall waits are bounded all the way through the HTTP layer.
102
+ - **Entity matching is exact.** A name matches exactly, then after
103
+ normalisation, then with one typo in one word. It never merges different
104
+ numbers or versions, never chains near-miss names into an unrelated person or
105
+ project, and timestamps, hashes, paths, status words and sentence fragments
106
+ are no longer saved as people or projects. `slm db repair-entities` previews,
107
+ applies (after a backup, with an undo record) and undoes the clean-up of links
108
+ left by the older rules.
109
+ - **Saving is checked against what you wrote.** Every statement SLM extracts is
110
+ checked against its source before it is stored: no added names, numbers or
111
+ dates, no flipped negation. The original note is always kept. Quoted speech is
112
+ never rewritten, relative dates ("last Tuesday") resolve against the memory's
113
+ own date, and saving the same text twice adds no row.
114
+ - **The learning loop learns from real outcomes.** One query id runs from recall
115
+ to the reward, and each outcome settles exactly one recall, across restarts.
116
+ `slm outcome success|partial|failure <fact_id>...` tells SLM whether the
117
+ memories a recall gave you helped; MCP, the REST API, the dashboard and the
118
+ command share one writer. Health shows "Not demonstrated" until an outcome has
119
+ settled.
120
+ - **Upgrade memory engine** (preview, opt-in): `slm embedder upgrade` or the
121
+ Settings card re-reads memories with the one-model engine in the background,
122
+ with recall working throughout and one-click rollback.
123
+ - **Quantized retrieval is used when configured**, the status says when a tier is
124
+ degraded, and damaged or older sketches are repaired by `slm quantize` instead
125
+ of hiding the memory from search.
126
+
127
+ ### Memory health
128
+
129
+ - **A Memory health card** in the dashboard shows what SLM can improve in older
130
+ memories and what it is doing about it. A background worker runs only when the
131
+ computer is idle and **only adds**: it fills in missing observation and event
132
+ dates, names of people and tools, tags, a project and a kind on older memories,
133
+ and never edits the text you saved or replaces a value you set. It stops when you
134
+ are working and when memory is tight ([Memory health](docs/memory-health.md)).
135
+ - **Stubs are marked, not hidden.** A memory that is only a label and an id
136
+ (for example a session receipt) carries a **stub** badge in lists and counts.
137
+ Only recall leaves stubs out of its answers.
138
+ - **Anything that deletes or moves something waits for your explicit Fix.**
139
+ Repairs that remove junk entity links, re-file hidden memories or repair failed
140
+ saves are offered as a count with a **Fix** button, and every run that changed
141
+ something has an **Undo** that restores exactly what it changed (anything you
142
+ edited since is kept).
143
+ - **`slm enrich`** is the command-line side: `status`, `pause`, `resume`,
144
+ `undo`, and `fix entity-links|refile-hidden|repair-saves` (the last has no
145
+ undo, so it takes a safety copy first and says so). `--include-undone`
146
+ applies items from a repair you undid earlier.
147
+ - **One safety copy per store**, taken before the first automatic change and
148
+ reused by every later run.
149
+ - **`slm doctor`** reports the same state, a **Failed saves** row (it warns when
150
+ saves were given up on after repeated attempts and fails at 50 or more), and
151
+ `slm doctor --refile-hidden` lists memories that were moved out of sight
152
+ although their retention score says to keep them; `--yes` moves exactly those
153
+ back.
154
+
155
+ ### Privacy and erasure
156
+
157
+ - **Erasing a person leaves no readable copy.** The bytes of the data folder are
158
+ checked after an erasure and everything they found is closed: queued saves,
159
+ the encrypted request journal, the recall queue, caches, reversible
160
+ compression originals, free pages inside the side databases, event previews,
161
+ the vector index itself, the Lance history, the graph's entity nodes, an erased
162
+ picture's backup mirror and the prompt text two logs kept.
163
+ - **Erasure says exactly what it did.** `slm gdpr erase --json` reports
164
+ `success: false` for an incomplete erasure, the dashboard lists what was
165
+ removed and what remains, and the stored receipt is written after every step.
166
+ A backup keeps its erasure obligation until it is deleted or re-read clean, and
167
+ a restore replays targeted erasures as well as profile ones.
168
+ - **Exporting your data works on a real store.** Export writes plain JSON,
169
+ leaves embeddings out unless you ask (`--include-embeddings`), streams to
170
+ disk, and reports failures instead of "Export started". The full export now
171
+ carries the audit records about you, pictures, documents, folders and jobs,
172
+ and lists what it leaves out under `export_manifest`.
173
+ - **Personal data is redacted on every save path** when redaction is on,
174
+ including metadata, tags, keys and events, for pictures as well as text.
175
+ - **Mode A says what it is:** "Memories are saved and recalled without a
176
+ language model — nothing leaves this device." The server serves that one
177
+ sentence and the dashboard shows it, and it stays true when the on-device
178
+ answer check is running.
179
+
180
+ ### Access control
181
+
182
+ - **Company mode checks a role on every change and every data route.** Every
183
+ state-changing route asks for a role before the request body is read, so a
184
+ refusal is 401 or 403, never 422 or 500; with login required, every page of
185
+ data needs a signed-in user. While users are enrolled, the install token or an
186
+ API key alone no longer administers the workspace; use an admin account, or
187
+ `slm team` on the SLM computer (`slm team status`, `slm team policy
188
+ --require-login on|off`, so the owner can never be locked out).
189
+ - **Skill approvals and maintenance are scoped to the workspace.** Skill
190
+ evolution keeps each workspace's skills, backups and quarantine apart; an
191
+ approval applies to the workspace it was made in, and installation-wide
192
+ settings need authority over every workspace.
193
+ - **Roles and profiles apply to every picture, document, folder and feature
194
+ route.** Reading a file by path, connecting a folder and turning features on
195
+ need the owner or an admin, and SLM's own data folder can never be named.
196
+ - **A connected web app cannot see or change what it may not read.** It cannot
197
+ update, delete, pin, replace or give feedback on a memory by id when it may not
198
+ see that memory; it is answered as if the memory did not exist. Pictures saved
199
+ before this release are held back from web apps until they are re-checked in
200
+ the background.
201
+ - With `SLM_REQUIRE_CREDENTIALS=1` the dashboard key is no longer handed to other
202
+ programs on the computer; the dashboard asks for it once (`slm token show`).
203
+
204
+ ### Backup and restore
205
+
206
+ - **A restore is all or nothing.** While it runs, the store is held so no daemon
207
+ can start and write part-way; everything the restore may change is copied
208
+ first, and a failure puts those files back. Only if that put-back also fails
209
+ does `slm backup restore-safety-copy` bring back the safety copy taken after
210
+ the service stopped. The dashboard and the command line say in plain words
211
+ what happened and what to run next.
212
+ - **Backups are complete and honest.** Local backups copy picture and PDF
213
+ originals (never the upload-link database), a backup just taken is no longer
214
+ "overdue", and the dashboard export is one archive with every store, the
215
+ originals and a manifest.
216
+ - **A damaged keyword index is repaired for good.** On SQLite 3.44.0 to 3.46.0,
217
+ `slm db repair --apply` turns off the setting that damages the index, rebuilds
218
+ it, checks it again and says plainly if it is still damaged. Your memories are
219
+ kept.
220
+
221
+ ### Dashboard
222
+
223
+ - **Documents & Images** pane with progress, a drop zone, **Find a picture**,
224
+ connected folders and a **Choose folder** button that uses the computer's own
225
+ picker; **Bot messages** tab listing every bot by name with mute, rename and
226
+ retire; a **What's new** card that knows what is already on.
227
+ - **Connected apps shows which apps are connected right now**: live MCP
228
+ processes by host with a count, a flag on apps still running older SLM code,
229
+ and a reconnect. Connect, doctor, repair and restart are buttons.
230
+ - **Search says why it found nothing.** The Memories search shows the tier's sentence
231
+ ("That isn't in SuperLocalMemory.", the closest memories, or the warming-up note)
232
+ instead of an empty list, and has a **Show closest matches** switch.
233
+ - **Answer Check** tab, Settings → Answer check with a test for each option and
234
+ **Calibrate on my store**, and the Memory health card described above.
235
+ - Memory guards read real memory use on macOS (physical footprint); the
236
+ resident size under-reported up to 15 times on a busy Mac.
237
+
238
+ ### Pictures and documents
239
+
240
+ - **Save screenshots, photos and PDFs and find them by describing them.** A
241
+ picture model runs on your computer (EmbeddingGemma 2), OCR reads the text
242
+ inside pictures, and each PDF page is indexed by its picture and its text. No
243
+ generative model looks at your files. Off by default; turn it on from the npm
244
+ installer or upgrader, the dashboard, or `slm media enable`. Pictures live in
245
+ their own database, so your existing memories and embeddings are never
246
+ changed. It needs a computer with 16 GB of memory and downloads about 1.5 GB the
247
+ first time; limits are in `docs/pictures-and-documents.md`.
248
+ - `slm media status|disable|gc|repair`; `slm sources add` mirrors **folders and
249
+ Obsidian vaults** read-only (properties, links and canvases kept) and re-reads a
250
+ file as soon as it changes.
251
+ - **Recall finds pictures and pages** beside text memories, shows them to local AI
252
+ apps, and counts a picture as evidence only above the model's own similarity
253
+ floor. The generated picture caption stays in the picture's metadata and never
254
+ becomes searchable words or facts.
255
+ - **Erasing a memory erases its picture**, and a replaced picture or PDF is
256
+ erased for good at the end of its grace period.
257
+ - Pictures and documents work on Linux 64-bit ARM, are refused with a plain
258
+ reason on computers under 16 GB, and the picture tools are stopped before they
259
+ pass their memory cap. The picture model embeds in small passes; its peak fell
260
+ from about 12 GB to under 4 GB on large batches.
261
+
262
+ ### Bots and web apps
263
+
264
+ - **Bots that talk to each other.** Web apps connected through Web access
265
+ (ChatGPT, Claude on the web, Grok Bot, Muse, Composio) can join SLM-Mesh beside
266
+ the agents on your computer: see peers, send a named bot a message, wait for a
267
+ reply and read shared state. Each app needs two yeses: a box on the approval
268
+ page and a switch on the **Web access** row in Connected apps (or `slm remote
269
+ keys allow <key> mesh`). Messages reach a web app at least once, marked as a
270
+ repeat if it did not acknowledge them.
271
+ - **Web apps save real files.** A connected app can ask for a one-time upload
272
+ link: you open it, pick the file, and it streams to your computer through the
273
+ connection gateway, which keeps no copy. A link belongs to the app that asked
274
+ for it, works once and expires in 10 minutes. ChatGPT can hand over an
275
+ attached file directly once its file hosts are on your allowed list.
276
+ - **Frameworks and editors.** Google ADK, CrewAI and Semantic Kernel run through
277
+ an isolated engine bridge instead of failing to install next to SLM; Continue,
278
+ OpenCode, Antigravity, VS Code and Gemini CLI setup write each host's current
279
+ schema; and Claude Desktop on Windows is configured in `%APPDATA%\Claude`.
280
+ - Every plugin, skill and setup text now teaches this release: a new `slm-media`
281
+ skill, and the mesh, web access, governance and bot skills cover upload links,
282
+ `mesh_wait` and the Connected apps switches. Hermes registers all 16 skills
283
+ and its four advisor tools load again.
284
+
285
+ ### Reliability
286
+
287
+ - **Windows reads and writes SLM's own files as UTF-8**: the dashboard, the
288
+ answer-check settings and the backup reader no longer depend on the Windows
289
+ code page, so text outside it round-trips.
290
+ - Services and ports belong to one install: `slm dashboard`, Health, Settings and
291
+ HTTP setup use the configured port, strict credential settings survive
292
+ auto-start, and a second install gets its own service name. A daemon started
293
+ with `python -m` publishes its ready record, so `stop` no longer waits 90
294
+ seconds.
295
+ - `--sync` saves return after enrichment completes, the Python API shares the
296
+ daemon's embedder, failed session opens exit non-zero, and a queued embedding
297
+ upgrade says why it waits. A model refused for lack of memory says so instead
298
+ of "no vector", and an embedding pause explains itself in the model status.
299
+ - `npm install` says plainly when the Python it found cannot work (an Intel Mac,
300
+ 32-bit Windows, Windows on ARM, 32-bit Linux, Node under Rosetta) and how to
301
+ install a supported one; pip installs on 64-bit ARM Linux.
302
+ - `slm doctor` makes at most one short health probe of the daemon, never starts
303
+ it, and prints a full report within a hard deadline instead of hanging.
304
+
8
305
  ## [4.1.24] — Connecting ChatGPT, Grok Bot, Muse and dots works the first time
9
306
 
10
307
  ### Added