superlocalmemory 3.6.14 → 3.6.16

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 (66) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +23 -6
  3. package/package.json +1 -1
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/CLAUDE.md +5 -4
  6. package/plugin/agents/slm-memory-advisor.md +5 -4
  7. package/plugin/agents/slm-optimize-advisor.md +1 -1
  8. package/plugin/requirements.txt +1 -1
  9. package/plugin/skills/slm-cache/SKILL.md +1 -1
  10. package/plugin/skills/slm-compress/SKILL.md +1 -1
  11. package/plugin/skills/slm-graph/SKILL.md +1 -1
  12. package/plugin/skills/slm-recall/SKILL.md +10 -2
  13. package/plugin/skills/slm-remember/SKILL.md +14 -2
  14. package/plugin/skills/slm-session/SKILL.md +1 -1
  15. package/plugin/skills/slm-status/SKILL.md +1 -1
  16. package/plugin-src/agents/slm-memory-advisor.md +5 -4
  17. package/plugin-src/agents/slm-optimize-advisor.md +1 -1
  18. package/plugin-src/commands/slm-optimize.md +1 -1
  19. package/plugin-src/commands/slm-recall.md +1 -1
  20. package/plugin-src/commands/slm-remember.md +2 -2
  21. package/plugin-src/commands/slm-status.md +1 -1
  22. package/plugin-src/manifest.json +1 -1
  23. package/plugin-src/requirements.txt +1 -1
  24. package/plugin-src/rules/AGENTS.md +5 -4
  25. package/plugin-src/rules/CLAUDE.md.fragment +5 -4
  26. package/plugin-src/skills/slm-cache/SKILL.md +1 -1
  27. package/plugin-src/skills/slm-compress/SKILL.md +1 -1
  28. package/plugin-src/skills/slm-graph/SKILL.md +1 -1
  29. package/plugin-src/skills/slm-recall/SKILL.md +10 -2
  30. package/plugin-src/skills/slm-remember/SKILL.md +14 -2
  31. package/plugin-src/skills/slm-session/SKILL.md +1 -1
  32. package/plugin-src/skills/slm-status/SKILL.md +1 -1
  33. package/pyproject.toml +1 -1
  34. package/scripts/build-plugin.js +1 -1
  35. package/src/superlocalmemory/__init__.py +1 -1
  36. package/src/superlocalmemory/cli/commands.py +91 -2
  37. package/src/superlocalmemory/cli/main.py +45 -0
  38. package/src/superlocalmemory/cli/setup_wizard.py +27 -0
  39. package/src/superlocalmemory/core/backend_orchestrator.py +12 -8
  40. package/src/superlocalmemory/core/config.py +115 -0
  41. package/src/superlocalmemory/core/engine.py +74 -3
  42. package/src/superlocalmemory/core/fact_consolidator.py +20 -3
  43. package/src/superlocalmemory/core/platform_utils.py +8 -0
  44. package/src/superlocalmemory/core/recall_pipeline.py +7 -0
  45. package/src/superlocalmemory/core/recall_worker.py +7 -0
  46. package/src/superlocalmemory/core/store_pipeline.py +23 -1
  47. package/src/superlocalmemory/core/worker_pool.py +14 -2
  48. package/src/superlocalmemory/hooks/session_registry.py +8 -4
  49. package/src/superlocalmemory/mcp/_daemon_proxy.py +12 -2
  50. package/src/superlocalmemory/mcp/_pool_adapter.py +15 -6
  51. package/src/superlocalmemory/mcp/tools_core.py +25 -0
  52. package/src/superlocalmemory/mcp/tools_v3.py +6 -1
  53. package/src/superlocalmemory/mcp/tools_v33.py +8 -4
  54. package/src/superlocalmemory/retrieval/bm25_channel.py +12 -2
  55. package/src/superlocalmemory/retrieval/engine.py +36 -3
  56. package/src/superlocalmemory/retrieval/entity_channel.py +5 -5
  57. package/src/superlocalmemory/retrieval/hopfield_channel.py +10 -2
  58. package/src/superlocalmemory/retrieval/semantic_channel.py +10 -2
  59. package/src/superlocalmemory/server/unified_daemon.py +132 -10
  60. package/src/superlocalmemory/storage/database.py +215 -43
  61. package/src/superlocalmemory/storage/migration_runner.py +17 -1
  62. package/src/superlocalmemory/storage/migrations/M016_add_scope_support.py +120 -0
  63. package/src/superlocalmemory/storage/models.py +10 -0
  64. package/src/superlocalmemory/storage/schema.py +15 -10
  65. package/src/superlocalmemory.egg-info/PKG-INFO +24 -7
  66. package/src/superlocalmemory.egg-info/SOURCES.txt +1 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,34 @@ All notable changes to SuperLocalMemory V3 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
+ ## [3.6.14] - 2026-06-18 — Audit-hardened: memory bounds, cross-tenant cache isolation, atomic credentials
9
+
10
+ Shipped through two adversarial audit passes (Qualixar Iron Pattern Stages 8–9), validated against a green 5933-test suite under the real 3.12 runtime. Default single-machine behavior is unchanged.
11
+
12
+ ### Security
13
+
14
+ - **Cross-tenant cache isolation.** The optimize proxy cache now derives a per-credential tenant from the raw inbound API key (before header redaction); two users sending the same prompt with different keys never share a cache entry, and requests with no credential are never cached. Previously every proxy response was keyed under a single shared `default` tenant — on a LAN-shared proxy that could serve user A's completion to user B.
15
+ - **Hardened the isolation against internal hook errors.** A tenant-aware cache hook is never silently downgraded to the shared namespace when it raises an internal error — the safe path is a cache miss, decided by signature inspection rather than catching an ambiguous `TypeError`.
16
+ - **Vertex cache keys isolate by project + region.**
17
+
18
+ ### Fixed — memory (bounded-memory lifeline)
19
+
20
+ - **Bounded the optimize caches.** Per-tenant LRU caps on the semantic vector index and the boundary-MLE cache, plus a cap on the *number* of tenants held in memory (centroid + index shards). Eviction is lossless — the DB remains the source of truth and evicted tenants rebuild on next access. Prevents unbounded RAM growth on long-lived shared-proxy daemons.
21
+ - **Restored the SAFE-CACHE adversarial defense**, which a 3-tuple unpack bug had been silently disabling on every warm-start with vectors present.
22
+
23
+ ### Fixed — reliability
24
+
25
+ - **Atomic, 0600 credential writes** (`cloud_backup`): no world-readable window, no torn-write corruption of the credential store, and a fixed `UnboundLocalError` that broke the credential fallback entirely on keyring-less hosts (headless Linux / minimal Docker).
26
+ - **ObserveBuffer** surfaces flush failures and reports an honest `evaluated/captured/failed` count instead of treating skipped items as successes.
27
+ - **Cloud embedding** reuses a pooled HTTP client instead of opening a fresh TLS connection per call.
28
+ - **`check_status`** distinguishes a corrupt `settings.json` (`installed=None`) from "not installed".
29
+
30
+ ### Fixed — packaging / platform
31
+
32
+ - **Cross-platform plugin launcher** (POSIX + Windows) and a Windows venv bootstrap, so the plugin's MCP server resolves the correct `slm` binary on Windows (`Scripts/slm.exe`) as well as POSIX.
33
+ - **Declared `tomli-w`** so the codex IDE integration can write its `.codex/config.toml`; previously `connect_ide('codex')` failed silently because the TOML writer was never a declared dependency.
34
+ - Version reconciled to **3.6.14** across `package.json`, `pyproject.toml`, and `__init__.py`; a consistency test guards against future skew.
35
+
8
36
  ## [3.6.13] - 2026-06-14 — Hotfix: MCP server failed to start after upgrade
9
37
 
10
38
  ### Fixed
package/README.md CHANGED
@@ -2,10 +2,10 @@
2
2
  <img src="https://superlocalmemory.com/assets/logo-mark.png" alt="SuperLocalMemory" width="200"/>
3
3
  </p>
4
4
 
5
- <h1 align="center">SuperLocalMemory V3.6.14</h1>
5
+ <h1 align="center">SuperLocalMemory V3.6.16</h1>
6
6
  <p align="center"><strong>Cache. Compress. Remember. Three surfaces — proxy, MCP tools, or skill. Every setup covered.</strong><br/>
7
7
  <em>To the best of our knowledge, the only zero-cloud agent memory that beats Mem0's zero-LLM score on LoCoMo. Mode A: 74.8% vs Mem0 64.2% — no GPU, no API key, on CPU.</em></p>
8
- <p align="center"><code>v3.6.14</code> — <strong>Plugin-native. Profile-aware. Distributed-ready.</strong><br/>
8
+ <p align="center"><code>v3.6.16</code> — <strong>Plugin-native. Profile-aware. Distributed-ready.</strong><br/>
9
9
  Proxy: <code>slm wrap claude</code> &nbsp;·&nbsp; MCP: add <code>slm_compress</code> to your config &nbsp;·&nbsp; Skill: zero-config</p>
10
10
  <p align="center"><strong>3 published research papers</strong> (arXiv preprints + Zenodo-archived) · <a href="https://arxiv.org/abs/2603.02240">arXiv:2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">arXiv:2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">arXiv:2604.04514</a></p>
11
11
 
@@ -100,6 +100,8 @@ Three mathematical contributions replace cloud LLM dependency:
100
100
 
101
101
  Auto-capture hooks (`slm hooks install`) fire only on real signals — topic pivot, web call, file edit — never on a timer. Fail-open, <10ms p99 hot path.
102
102
 
103
+ **Multi-scope memory (v3.6.15, opt-in):** keep memories `personal` (default), `shared` with named profiles, or `global` across the machine. Off by default — recall only ever returns your own facts until you turn sharing on, per call or in config. See **[docs/shared-memory.md](docs/shared-memory.md)**.
104
+
103
105
  <a id="multilingual-embedding-support"></a>
104
106
 
105
107
  **Multilingual:** plug in any OpenAI-compatible embedding endpoint — Ollama, vLLM, LiteLLM, `bge-m3`, `multilingual-e5`, `Qwen3-Embedding`. The math layer is language-agnostic; 30+ languages work at full retrieval quality. No cloud dependency, no code changes.
@@ -160,7 +162,7 @@ Full docs: [docs/multi-machine.md](docs/multi-machine.md) · [docs/distributed-d
160
162
  |:-----|:--------|:-----|
161
163
  | **npm** (recommended) | `npm install -g superlocalmemory` | Node 14+, installs Python deps automatically |
162
164
  | **pip** | `pip install superlocalmemory` | Python 3.11+, direct install |
163
- | **Claude Code Plugin** (WP-06) | `/plugin install superlocalmemory@qualixar` | Self-bootstraps venv, isolated SLM_DATA_DIR, additive — 14-tool core |
165
+ | **Claude Code Plugin** (WP-06) | `/plugin marketplace add qualixar/superlocalmemory` then `/plugin install superlocalmemory@qualixar` | Self-bootstraps venv, isolated SLM_DATA_DIR, additive — 14-tool core. Ships the skills/agents/hooks/commands |
164
166
  | **Portable / IDE connect** (WP-08) | `slm connect <ide> [--here]` | Wire any IDE without reinstalling; `slm connect claude-code` → plugin pointer |
165
167
 
166
168
  After any install path: `slm setup` → `slm doctor` → `slm warmup` (optional, pre-downloads ~500MB embedding model).
@@ -216,18 +218,31 @@ Per-IDE configs available for Claude Code, Cursor, Windsurf, VS Code Copilot, Co
216
218
 
217
219
  ## Claude Code Plugin
218
220
 
219
- Install directly in Claude Code without a system-level npm/pip install:
221
+ Install directly in Claude Code no system-level npm/pip needed. This is how you
222
+ get the **skills, agents, hooks, commands, and rules** (the MCP server is
223
+ bootstrapped automatically). It is a two-step flow — add the marketplace once,
224
+ then install:
220
225
 
221
226
  ```bash
227
+ # 1. Add the Qualixar marketplace (one-time — the repo IS the marketplace)
228
+ /plugin marketplace add qualixar/superlocalmemory
229
+
230
+ # 2. Install the plugin
222
231
  /plugin install superlocalmemory@qualixar
223
232
  ```
224
233
 
225
234
  - Self-bootstraps a Python venv, installs all deps in an isolated `SLM_DATA_DIR`
226
- - Registers 14-tool core MCP surface (`core14` profile by default)
235
+ - Registers the 14-tool core MCP surface (`core14` profile by default)
236
+ - Ships the SLM skills / agents / hooks / commands / rules
227
237
  - Additive — does not replace an existing SLM install
228
238
  - `slm connect claude-code` detects an existing plugin install and links them
229
239
 
230
- See [docs/getting-started.md](docs/getting-started.md) for full plugin walkthrough.
240
+ > **Plugin vs `pip`/`npm`:** `pip install superlocalmemory` / `npm i -g superlocalmemory`
241
+ > give you the `slm` CLI + the MCP server (the *tools*). The **skills/agents/hooks/
242
+ > commands** come only through the plugin above. Use the plugin for Claude Code; use
243
+ > pip/npm for the CLI or other IDEs.
244
+
245
+ To update later: `/plugin marketplace update qualixar` then `/plugin install superlocalmemory@qualixar`.
231
246
 
232
247
  ---
233
248
 
@@ -292,6 +307,8 @@ slm dashboard # Opens at http://localhost:8765
292
307
 
293
308
  | Version | Codename | Key Features |
294
309
  |---|---|---|
310
+ | **v3.6.16** | Docs | Corrected Claude Code plugin install — adds the required `/plugin marketplace add` step; clarifies plugin vs pip/npm delivery |
311
+ | **v3.6.15** | Multi-scope | **Opt-in [shared memory](docs/shared-memory.md)** (personal/shared/global, off by default), default-deny scope at every read path, recall scope-race fix, contributor PRs #42/#43/#44, fixes #46–#49 |
295
312
  | **v3.6.14** | Plugin-native | Claude Code Plugin (WP-06), MCP profiles (WP-01), IDE connect (WP-08), asset consolidation, UI polish (WP-12) |
296
313
  | **v3.6.x** | Optimize Everywhere / Distributed-ready | Three surfaces (proxy/MCP/skill), `SLM_REMOTE=1` LAN mode, remote dashboard, custom LLM endpoints |
297
314
  | **v3.5.0** | Scale-Ready | CozoDB/LanceDB, 6-channel recall <1s, Core Memory Block, context injection v2, score normalization |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superlocalmemory",
3
- "version": "3.6.14",
3
+ "version": "3.6.16",
4
4
  "description": "Information-geometric agent memory with mathematical guarantees. 4-channel retrieval, Fisher-Rao similarity, zero-LLM mode, EU AI Act compliant. Works with Claude, Cursor, Windsurf, and 17+ AI tools.",
5
5
  "keywords": [
6
6
  "ai-memory",
@@ -16,5 +16,5 @@
16
16
  "mcpServers": "./.mcp.json",
17
17
  "name": "superlocalmemory",
18
18
  "repository": "https://github.com/qualixar/superlocalmemory",
19
- "version": "3.6.14"
19
+ "version": "3.6.16"
20
20
  }
package/plugin/CLAUDE.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- BEGIN SuperLocalMemory v3.6.14 -->
1
+ <!-- BEGIN SuperLocalMemory v3.6.16 -->
2
2
 
3
3
  ## SuperLocalMemory (SLM) — Agent Rules
4
4
 
@@ -12,6 +12,7 @@ Call `session_init(project_path, query)` ONCE per fresh session before any recal
12
12
  - Recall-before-remember: `recall(query, 5)` first; use `update_memory` if near-match found.
13
13
  - Always supply tags + project + importance (7–10 for blockers/security/architecture).
14
14
  - Never dump a whole file; never claim "saved" without success:true.
15
+ - Scope is opt-in (v3.6.15): writes are `personal`/private by default. Only use `scope="shared"/"global"` (or recall's `include_global`/`include_shared`) when the user explicitly asks to share across local profiles.
15
16
 
16
17
  ### Recall
17
18
  - `recall` for conceptual/semantic queries; `search` for exact keywords.
@@ -27,7 +28,7 @@ Call `session_init(project_path, query)` ONCE per fresh session before any recal
27
28
  `close_session(session_id)` when work is meaningfully complete.
28
29
 
29
30
  ### CLI fallback (MCP down)
30
- `slm recall "<q>" --limit N` · `slm search "<q>"` · `slm remember "<c>" --tags t --importance N` · `slm list --limit N` · `slm forget` (preview first) · `slm status` · `slm optimize status`
31
+ `slm recall "<q>" --limit N` · `slm search "<q>"` · `slm remember "<c>" --tags t` · `slm list --limit N` · `slm forget` (preview first) · `slm status` · `slm optimize status`
31
32
 
32
33
  ### Skills
33
34
  slm-recall · slm-remember · slm-session · slm-status · slm-cache · slm-compress · slm-graph
@@ -38,6 +39,6 @@ slm-recall · slm-remember · slm-session · slm-status · slm-cache · slm-comp
38
39
  ### Subagents
39
40
  slm-memory-advisor (memory decisions, session hygiene) · slm-optimize-advisor (context compression + KV cache)
40
41
 
41
- <!-- END SuperLocalMemory v3.6.14 -->
42
+ <!-- END SuperLocalMemory v3.6.16 -->
42
43
 
43
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -17,9 +17,9 @@ When the main agent: starts a session and hasn't loaded project context; is abou
17
17
 
18
18
  # Tools you may use (real SLM MCP tools, core profile)
19
19
  - `session_init(project_path, query, max_results, max_age_days)` — ONCE at session start; returns recent decisions + relevant memories.
20
- - `recall(query, limit, session_id, fast)` — multi-channel semantic retrieval (default limit 10).
20
+ - `recall(query, limit, session_id, fast, include_global, include_shared)` — multi-channel semantic retrieval (default limit 10). Leave `include_global`/`include_shared` unset — recall is private-by-default (v3.6.15).
21
21
  - `search(query, limit, profile_id)` — exact keyword / FTS5 BM25.
22
- - `remember(content, tags, project, importance, session_id)` — store atomic fact; importance 1-10.
22
+ - `remember(content, tags, project, importance, session_id, scope, shared_with)` — store atomic fact; importance 1-10. Leave `scope` unset (defaults to `personal`/private).
23
23
  - `update_memory(fact_id, content)` — correct by exact id.
24
24
  - `forget(profile_id, dry_run)` — decay cycle; ALWAYS dry_run=True first, report, never apply blind.
25
25
  - `list_recent(limit)` — newest first.
@@ -33,11 +33,12 @@ When the main agent: starts a session and hasn't loaded project context; is abou
33
33
  5. recall vs search — recall for conceptual; search for literal keyword.
34
34
  6. EMPTY/LOW results → broaden, try search, or list_recent; never fabricate.
35
35
  7. SESSION END — close_session(session_id) when work meaningfully complete.
36
+ 8. SCOPE IS OPT-IN (v3.6.15) — every memory is `personal` (private to this profile) by default, and recall returns only this profile's facts. Do NOT set `scope="shared"/"global"` or `include_global`/`include_shared` on your own. Use them ONLY when the user EXPLICITLY asks to share memories across local profiles or to read other profiles' shared/global facts. Default behaviour is identical to single-profile SLM.
36
37
 
37
38
  # CLI fallback (MCP unavailable)
38
- recall→`slm recall "<q>" --limit N` · search→`slm search "<q>"` · remember→`slm remember "<c>" --tags a,b --project p --importance N` · list→`slm list --limit N` · forget→`slm forget` (preview first) · status→`slm status`. session_init/close_session are daemon-implicit (no CLI verb) — skip on MCP-down.
39
+ recall→`slm recall "<q>" --limit N` (add `--include-global`/`--include-shared` only on explicit user request) · search→`slm search "<q>"` · remember→`slm remember "<c>" --tags a,b` (project/importance are MCP-only, NOT CLI flags; `--scope shared --shared-with a,b` only when the user asks to share) · list→`slm list --limit N` · forget→`slm forget` (preview first) · status→`slm status`. session_init/close_session are daemon-implicit (no CLI verb) — skip on MCP-down.
39
40
 
40
41
  # What NOT to do
41
42
  Never session_init twice; never forget dry_run=False without reporting preview; never dump a whole file into remember; never invent a memory; never claim "saved" without success:true / clean CLI exit.
42
43
 
43
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -35,4 +35,4 @@ stats→`slm optimize status`/`savings` · compress→`slm compress` · cache→
35
35
  # What NOT to do
36
36
  Never compress code-for-edit/JSON-to-parse/<500 chars; never store secrets/ccr_ids; never let optimize failure block/alter the task; never claim a specific savings %.
37
37
 
38
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
38
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -1 +1 @@
1
- superlocalmemory==3.6.14
1
+ superlocalmemory==3.6.16
@@ -137,4 +137,4 @@ These subcommands control daemon-level cache settings. They do not read or write
137
137
 
138
138
  ---
139
139
 
140
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
140
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -140,4 +140,4 @@ Content over 1 MB (1 000 000 bytes UTF-8) is processed but `reversible` is force
140
140
 
141
141
  ---
142
142
 
143
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
143
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -297,4 +297,4 @@ Without this, the six graph tools are not registered and will appear as unknown
297
297
 
298
298
  ---
299
299
 
300
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
300
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -164,6 +164,9 @@ No benchmark numbers are cited here; performance is workload-dependent.
164
164
  # Multi-channel semantic recall
165
165
  slm recall "<query>" [--limit N] [--fast] [--json]
166
166
 
167
+ # Opt into shared/global facts for one query (v3.6.15 — off by default)
168
+ slm recall "<query>" --include-global --include-shared
169
+
167
170
  # Keyword/FTS5 search (alias: slm search)
168
171
  slm search "<query>" [--limit N] [--json]
169
172
 
@@ -175,11 +178,16 @@ slm list [--limit N] [--json]
175
178
  ```
176
179
 
177
180
  Flags verified in source (main.py):
178
- - `slm recall`: `--limit`, `--fast`, `--json`
181
+ - `slm recall`: `--limit`, `--fast`, `--json`, `--include-global` / `--no-global`, `--include-shared` / `--no-shared`
179
182
  - `slm search`: `--limit`, `--json`
180
183
  - `slm trace`: `--limit`, `--json`
181
184
  - `slm list`: `--limit` / `-n`, `--json`
182
185
 
186
+ > **Multi-scope (v3.6.15, opt-in):** recall is shared-OFF by default — it returns only
187
+ > this profile's facts. Pass `--include-global` / `--include-shared` (or the MCP
188
+ > `include_global` / `include_shared` args) to opt in for a query, or set the defaults in
189
+ > your `mode_a/b/c.json` config. See [docs/shared-memory.md](../../../docs/shared-memory.md).
190
+
183
191
  **Flags that do NOT exist** (fabricated in old skills — never write these):
184
192
  `--min-score`, `--format`, `--project`, `--tags` on recall or search.
185
193
 
@@ -193,4 +201,4 @@ trusts that what you surface came from the store.
193
201
 
194
202
  ---
195
203
 
196
- *SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later*
204
+ *SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later*
@@ -103,9 +103,16 @@ remember(
103
103
  project: str = "", # project scope, e.g. "superlocalmemory"
104
104
  importance: int = 5,# 1–10; see scale below
105
105
  session_id: str = "",# from session_init; attributes the write to this session
106
+ scope: str = None, # v3.6.15 multi-scope: "personal" (default) | "shared" | "global"
107
+ shared_with: str = "",# comma-separated profile_ids for scope="shared"
106
108
  )
107
109
  ```
108
110
 
111
+ > **Multi-scope (v3.6.15, opt-in):** leave `scope` unset for `personal` (private to
112
+ > this profile — the default, identical to 3.6.14). `"global"` is visible to every
113
+ > profile on the machine; `"shared"` is visible to the profiles in `shared_with`.
114
+ > See [docs/shared-memory.md](../../../docs/shared-memory.md).
115
+
109
116
  **importance scale:**
110
117
  - 1–3: Low — passing notes, ideas, soft preferences
111
118
  - 4–6: Normal — patterns, conventions, standard decisions (default: 5)
@@ -159,8 +166,13 @@ Always run `--dry-run` first and review the preview before passing `--yes`.
159
166
  # Store a fact
160
167
  slm remember "<content>" [--tags a,b,c] [--json]
161
168
 
162
- # Flags verified in source (main.py): --tags, --json, --sync
169
+ # Store a shared/global fact (v3.6.15, opt-in)
170
+ slm remember "<content>" --scope global
171
+ slm remember "<content>" --scope shared --shared-with alice,bob
172
+
173
+ # Flags verified in source (main.py): --tags, --json, --sync, --scope, --shared-with
163
174
  # --sync: wait for full enrichment before returning (default is async)
175
+ # --scope: personal (default) | shared | global ; --shared-with: profile ids for shared
164
176
  ```
165
177
 
166
178
  **Flags that do NOT exist** on `slm remember`:
@@ -179,4 +191,4 @@ slm remember "<content>" [--tags a,b,c] [--json]
179
191
 
180
192
  ---
181
193
 
182
- *SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later*
194
+ *SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later*
@@ -204,4 +204,4 @@ slm doctor [--json] # preflight check including daemon and embedding worker
204
204
 
205
205
  ---
206
206
 
207
- *SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later*
207
+ *SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later*
@@ -146,4 +146,4 @@ Note: the `slm optimize` subcommands have known pre-existing parse-test failures
146
146
 
147
147
  ---
148
148
 
149
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
149
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -17,9 +17,9 @@ When the main agent: starts a session and hasn't loaded project context; is abou
17
17
 
18
18
  # Tools you may use (real SLM MCP tools, core profile)
19
19
  - `session_init(project_path, query, max_results, max_age_days)` — ONCE at session start; returns recent decisions + relevant memories.
20
- - `recall(query, limit, session_id, fast)` — multi-channel semantic retrieval (default limit 10).
20
+ - `recall(query, limit, session_id, fast, include_global, include_shared)` — multi-channel semantic retrieval (default limit 10). Leave `include_global`/`include_shared` unset — recall is private-by-default (v3.6.15).
21
21
  - `search(query, limit, profile_id)` — exact keyword / FTS5 BM25.
22
- - `remember(content, tags, project, importance, session_id)` — store atomic fact; importance 1-10.
22
+ - `remember(content, tags, project, importance, session_id, scope, shared_with)` — store atomic fact; importance 1-10. Leave `scope` unset (defaults to `personal`/private).
23
23
  - `update_memory(fact_id, content)` — correct by exact id.
24
24
  - `forget(profile_id, dry_run)` — decay cycle; ALWAYS dry_run=True first, report, never apply blind.
25
25
  - `list_recent(limit)` — newest first.
@@ -33,11 +33,12 @@ When the main agent: starts a session and hasn't loaded project context; is abou
33
33
  5. recall vs search — recall for conceptual; search for literal keyword.
34
34
  6. EMPTY/LOW results → broaden, try search, or list_recent; never fabricate.
35
35
  7. SESSION END — close_session(session_id) when work meaningfully complete.
36
+ 8. SCOPE IS OPT-IN (v3.6.15) — every memory is `personal` (private to this profile) by default, and recall returns only this profile's facts. Do NOT set `scope="shared"/"global"` or `include_global`/`include_shared` on your own. Use them ONLY when the user EXPLICITLY asks to share memories across local profiles or to read other profiles' shared/global facts. Default behaviour is identical to single-profile SLM.
36
37
 
37
38
  # CLI fallback (MCP unavailable)
38
- recall→`slm recall "<q>" --limit N` · search→`slm search "<q>"` · remember→`slm remember "<c>" --tags a,b --project p --importance N` · list→`slm list --limit N` · forget→`slm forget` (preview first) · status→`slm status`. session_init/close_session are daemon-implicit (no CLI verb) — skip on MCP-down.
39
+ recall→`slm recall "<q>" --limit N` (add `--include-global`/`--include-shared` only on explicit user request) · search→`slm search "<q>"` · remember→`slm remember "<c>" --tags a,b` (project/importance are MCP-only, NOT CLI flags; `--scope shared --shared-with a,b` only when the user asks to share) · list→`slm list --limit N` · forget→`slm forget` (preview first) · status→`slm status`. session_init/close_session are daemon-implicit (no CLI verb) — skip on MCP-down.
39
40
 
40
41
  # What NOT to do
41
42
  Never session_init twice; never forget dry_run=False without reporting preview; never dump a whole file into remember; never invent a memory; never claim "saved" without success:true / clean CLI exit.
42
43
 
43
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -35,4 +35,4 @@ stats→`slm optimize status`/`savings` · compress→`slm compress` · cache→
35
35
  # What NOT to do
36
36
  Never compress code-for-edit/JSON-to-parse/<500 chars; never store secrets/ccr_ids; never let optimize failure block/alter the task; never claim a specific savings %.
37
37
 
38
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
38
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -19,4 +19,4 @@ Rules (apply strictly):
19
19
 
20
20
  MCP unavailable → CLI fallback: `slm optimize status`.
21
21
 
22
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
22
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -13,4 +13,4 @@ Recall from SuperLocalMemory using the query: $ARGUMENTS
13
13
  - `slm recall "$ARGUMENTS" --limit 10`
14
14
  - then `slm search "$ARGUMENTS"`
15
15
 
16
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
16
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -11,6 +11,6 @@ Save to SuperLocalMemory: $ARGUMENTS
11
11
  3. Determine importance: use 8 for blockers/security/architecture decisions; use 7 for conventions and constraints; use 5 for general facts.
12
12
  4. Call `remember(content="$ARGUMENTS", tags=<extracted tags>, importance=<n>)`.
13
13
  5. Confirm only on success:true. If success is not true, report the error — never claim "saved."
14
- 6. MCP unavailable → CLI fallback: `slm remember "$ARGUMENTS" --tags <tags> --importance <n>`.
14
+ 6. MCP unavailable → CLI fallback: `slm remember "$ARGUMENTS" --tags <tags>` (note: `--importance` is MCP-only, not a CLI flag).
15
15
 
16
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
16
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -12,4 +12,4 @@ Show SuperLocalMemory status and optimization counters.
12
12
 
13
13
  Note: MCP get_status is intentionally NOT used here — it is outside the core profile and would error. Use `slm status` (CLI) + `slm_optimize_stats` (MCP) only.
14
14
 
15
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
15
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.6.14",
2
+ "version": "3.6.16",
3
3
  "pluginName": "superlocalmemory",
4
4
  "displayName": "SuperLocalMemory",
5
5
  "repository": "https://github.com/qualixar/superlocalmemory",
@@ -1 +1 @@
1
- superlocalmemory==3.6.14
1
+ superlocalmemory==3.6.16
@@ -18,6 +18,7 @@ Call `session_init(project_path, query, max_results, max_age_days)` **once** at
18
18
  - **Recall before remember** — call `recall(query, 5)` first. If a near-identical memory exists, use `update_memory(fact_id, content)` to correct it; never duplicate.
19
19
  - **Tags + project + importance** — always supply meaningful tags and the project name. Use importance 7–10 for blockers, security findings, and architecture decisions; 5 for general facts.
20
20
  - **Never dump a whole file** — extract only the durable decision or constraint; store the path reference if needed.
21
+ - **Scope is opt-in (v3.6.15)** — memories are `personal` (private to this profile) by default. Only pass `scope="shared"/"global"` (or recall's `include_global`/`include_shared`) when the user EXPLICITLY asks to share across local profiles. Never opt in on your own; the default is identical to single-profile SLM.
21
22
 
22
23
  ---
23
24
 
@@ -56,7 +57,7 @@ When the SLM MCP server is unavailable, use these CLI equivalents:
56
57
  |------------------------|-----------------------------------------------------------|
57
58
  | `recall` | `slm recall "<query>" --limit N` |
58
59
  | `search` | `slm search "<query>"` |
59
- | `remember` | `slm remember "<content>" --tags a,b --project p --importance N` |
60
+ | `remember` | `slm remember "<content>" --tags a,b` (project/importance are MCP-only) |
60
61
  | `list_recent` | `slm list --limit N` |
61
62
  | `forget` | `slm forget` (always preview first) |
62
63
  | `slm_optimize_stats` | `slm optimize status` / `slm optimize savings` |
@@ -72,8 +73,8 @@ When the SLM MCP server is unavailable, use these CLI equivalents:
72
73
 
73
74
  | Tool | Signature (key params) | Notes |
74
75
  |--------------------|--------------------------------------------------------------------------------|------------------------------------|
75
- | `remember` | `content, tags="", project="", importance=5, session_id="", agent_id` | Store atomic fact |
76
- | `recall` | `query, limit=10, agent_id, session_id="", fast=False` | Multi-channel semantic retrieval |
76
+ | `remember` | `content, tags="", project="", importance=5, session_id="", scope="personal", shared_with=""` | Store atomic fact. `scope` opt-in (personal default) |
77
+ | `recall` | `query, limit=10, agent_id, session_id="", fast=False, include_global, include_shared` | Multi-channel retrieval. Scope flags off by default |
77
78
  | `search` | `query, limit=10, profile_id=""` | FTS5 BM25 keyword search |
78
79
  | `fetch` | `url, ...` | Fetch remote content |
79
80
  | `list_recent` | `limit=20, profile_id=""` | Newest memories first |
@@ -87,4 +88,4 @@ When the SLM MCP server is unavailable, use these CLI equivalents:
87
88
  | `slm_cache_get` | `key` | KV cache get; returns hit, value |
88
89
  | `slm_optimize_stats` | `()` | Returns compress_runs, tokens_saved_compress, cache_kv_hits |
89
90
 
90
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
91
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -1,4 +1,4 @@
1
- <!-- BEGIN SuperLocalMemory v3.6.14 -->
1
+ <!-- BEGIN SuperLocalMemory v3.6.16 -->
2
2
 
3
3
  ## SuperLocalMemory (SLM) — Agent Rules
4
4
 
@@ -12,6 +12,7 @@ Call `session_init(project_path, query)` ONCE per fresh session before any recal
12
12
  - Recall-before-remember: `recall(query, 5)` first; use `update_memory` if near-match found.
13
13
  - Always supply tags + project + importance (7–10 for blockers/security/architecture).
14
14
  - Never dump a whole file; never claim "saved" without success:true.
15
+ - Scope is opt-in (v3.6.15): writes are `personal`/private by default. Only use `scope="shared"/"global"` (or recall's `include_global`/`include_shared`) when the user explicitly asks to share across local profiles.
15
16
 
16
17
  ### Recall
17
18
  - `recall` for conceptual/semantic queries; `search` for exact keywords.
@@ -27,7 +28,7 @@ Call `session_init(project_path, query)` ONCE per fresh session before any recal
27
28
  `close_session(session_id)` when work is meaningfully complete.
28
29
 
29
30
  ### CLI fallback (MCP down)
30
- `slm recall "<q>" --limit N` · `slm search "<q>"` · `slm remember "<c>" --tags t --importance N` · `slm list --limit N` · `slm forget` (preview first) · `slm status` · `slm optimize status`
31
+ `slm recall "<q>" --limit N` · `slm search "<q>"` · `slm remember "<c>" --tags t` · `slm list --limit N` · `slm forget` (preview first) · `slm status` · `slm optimize status`
31
32
 
32
33
  ### Skills
33
34
  slm-recall · slm-remember · slm-session · slm-status · slm-cache · slm-compress · slm-graph
@@ -38,6 +39,6 @@ slm-recall · slm-remember · slm-session · slm-status · slm-cache · slm-comp
38
39
  ### Subagents
39
40
  slm-memory-advisor (memory decisions, session hygiene) · slm-optimize-advisor (context compression + KV cache)
40
41
 
41
- <!-- END SuperLocalMemory v3.6.14 -->
42
+ <!-- END SuperLocalMemory v3.6.16 -->
42
43
 
43
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -137,4 +137,4 @@ These subcommands control daemon-level cache settings. They do not read or write
137
137
 
138
138
  ---
139
139
 
140
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
140
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -140,4 +140,4 @@ Content over 1 MB (1 000 000 bytes UTF-8) is processed but `reversible` is force
140
140
 
141
141
  ---
142
142
 
143
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
143
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -297,4 +297,4 @@ Without this, the six graph tools are not registered and will appear as unknown
297
297
 
298
298
  ---
299
299
 
300
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
300
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
@@ -164,6 +164,9 @@ No benchmark numbers are cited here; performance is workload-dependent.
164
164
  # Multi-channel semantic recall
165
165
  slm recall "<query>" [--limit N] [--fast] [--json]
166
166
 
167
+ # Opt into shared/global facts for one query (v3.6.15 — off by default)
168
+ slm recall "<query>" --include-global --include-shared
169
+
167
170
  # Keyword/FTS5 search (alias: slm search)
168
171
  slm search "<query>" [--limit N] [--json]
169
172
 
@@ -175,11 +178,16 @@ slm list [--limit N] [--json]
175
178
  ```
176
179
 
177
180
  Flags verified in source (main.py):
178
- - `slm recall`: `--limit`, `--fast`, `--json`
181
+ - `slm recall`: `--limit`, `--fast`, `--json`, `--include-global` / `--no-global`, `--include-shared` / `--no-shared`
179
182
  - `slm search`: `--limit`, `--json`
180
183
  - `slm trace`: `--limit`, `--json`
181
184
  - `slm list`: `--limit` / `-n`, `--json`
182
185
 
186
+ > **Multi-scope (v3.6.15, opt-in):** recall is shared-OFF by default — it returns only
187
+ > this profile's facts. Pass `--include-global` / `--include-shared` (or the MCP
188
+ > `include_global` / `include_shared` args) to opt in for a query, or set the defaults in
189
+ > your `mode_a/b/c.json` config. See [docs/shared-memory.md](../../../docs/shared-memory.md).
190
+
183
191
  **Flags that do NOT exist** (fabricated in old skills — never write these):
184
192
  `--min-score`, `--format`, `--project`, `--tags` on recall or search.
185
193
 
@@ -193,4 +201,4 @@ trusts that what you surface came from the store.
193
201
 
194
202
  ---
195
203
 
196
- *SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later*
204
+ *SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later*
@@ -103,9 +103,16 @@ remember(
103
103
  project: str = "", # project scope, e.g. "superlocalmemory"
104
104
  importance: int = 5,# 1–10; see scale below
105
105
  session_id: str = "",# from session_init; attributes the write to this session
106
+ scope: str = None, # v3.6.15 multi-scope: "personal" (default) | "shared" | "global"
107
+ shared_with: str = "",# comma-separated profile_ids for scope="shared"
106
108
  )
107
109
  ```
108
110
 
111
+ > **Multi-scope (v3.6.15, opt-in):** leave `scope` unset for `personal` (private to
112
+ > this profile — the default, identical to 3.6.14). `"global"` is visible to every
113
+ > profile on the machine; `"shared"` is visible to the profiles in `shared_with`.
114
+ > See [docs/shared-memory.md](../../../docs/shared-memory.md).
115
+
109
116
  **importance scale:**
110
117
  - 1–3: Low — passing notes, ideas, soft preferences
111
118
  - 4–6: Normal — patterns, conventions, standard decisions (default: 5)
@@ -159,8 +166,13 @@ Always run `--dry-run` first and review the preview before passing `--yes`.
159
166
  # Store a fact
160
167
  slm remember "<content>" [--tags a,b,c] [--json]
161
168
 
162
- # Flags verified in source (main.py): --tags, --json, --sync
169
+ # Store a shared/global fact (v3.6.15, opt-in)
170
+ slm remember "<content>" --scope global
171
+ slm remember "<content>" --scope shared --shared-with alice,bob
172
+
173
+ # Flags verified in source (main.py): --tags, --json, --sync, --scope, --shared-with
163
174
  # --sync: wait for full enrichment before returning (default is async)
175
+ # --scope: personal (default) | shared | global ; --shared-with: profile ids for shared
164
176
  ```
165
177
 
166
178
  **Flags that do NOT exist** on `slm remember`:
@@ -179,4 +191,4 @@ slm remember "<content>" [--tags a,b,c] [--json]
179
191
 
180
192
  ---
181
193
 
182
- *SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later*
194
+ *SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later*
@@ -204,4 +204,4 @@ slm doctor [--json] # preflight check including daemon and embedding worker
204
204
 
205
205
  ---
206
206
 
207
- *SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later*
207
+ *SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later*
@@ -146,4 +146,4 @@ Note: the `slm optimize` subcommands have known pre-existing parse-test failures
146
146
 
147
147
  ---
148
148
 
149
- SuperLocalMemory v3.6.14 · Qualixar · AGPL-3.0-or-later
149
+ SuperLocalMemory v3.6.16 · Qualixar · AGPL-3.0-or-later
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "3.6.14"
3
+ version = "3.6.16"
4
4
  description = "Information-geometric agent memory with mathematical guarantees"
5
5
  readme = "README.md"
6
6
  license = {text = "AGPL-3.0-or-later"}
@@ -30,7 +30,7 @@ import process from 'node:process';
30
30
  // ---------------------------------------------------------------------------
31
31
  // Constants
32
32
  // ---------------------------------------------------------------------------
33
- const VERSION = '3.6.14';
33
+ const VERSION = '3.6.16';
34
34
  const MANIFEST_REL = 'plugin-src/manifest.json';
35
35
  const GENERATED_BANNER = `# _GENERATED — DO NOT HAND-EDIT
36
36
 
@@ -32,7 +32,7 @@ if "OMP_NUM_THREADS" not in os.environ:
32
32
  os.environ["OMP_NUM_THREADS"] = "2"
33
33
  # ---------------------------------------------------------------------------
34
34
 
35
- __version__ = "3.6.14"
35
+ __version__ = "3.6.16"
36
36
 
37
37
  _REQUIRED_VERSIONS = {
38
38
  "sentence_transformers": "5.3.0",