slm-bot-memory
Cross-bot memory on a shared computer (Grok Bot, Cursor plugin, any host where several agents share one machine). Explains…
Search and retrieve facts, decisions, and past context from SuperLocalMemory. Use when the user asks to recall, find, search, or "what did we decide/say about X". Triggers multi-channel semantic retrieval with reranking; always call before storing anything new.
Claude Code
$ npx -y skills add qualixar/superlocalmemory --skill slm-recall --agent claude-code
Codex
$ npx skills add qualixar/superlocalmemory --skill slm-recall -a codex -y
Cursor
$ npx skills add qualixar/superlocalmemory --skill slm-recall -a cursor -y
Gemini CLI
$ npx skills add qualixar/superlocalmemory --skill slm-recall -a gemini-cli -y
GitHub Copilot
$ npx skills add qualixar/superlocalmemory --skill slm-recall -a github-copilot -y
OpenCode
$ npx skills add qualixar/superlocalmemory --skill slm-recall -a opencode -y
Windsurf
$ npx skills add qualixar/superlocalmemory --skill slm-recall -a windsurf -y
name: slm-recall description: Search and retrieve facts, decisions, and past context from SuperLocalMemory. Use when the user asks to recall, find, search, or "what did we decide/say about X". Triggers multi-channel semantic retrieval with reranking; always call before storing anything new. when_to_use: | - "What did we decide about X?" - "Recall anything about Y" - "Do we have context on the Z feature?" - "Find stored information about authentication / the database / error handling" - "Search for what I said about Y" - Automatically before any non-trivial task, to surface prior context allowed-tools: recall, search, fetch, expand, list_recent, get_memory_summary, run_view, report_outcome, report_feedback, Bash(slm:*)
Retrieve stored facts, decisions, and past context from SuperLocalMemory using multi-channel retrieval. The golden rule: **recall before you remember**.
---
| Situation | Tool | |-----------|------| | Conceptual or paraphrase query ("what did we agree on for auth?") | `recall` — full multi-channel retrieval + rerank | | Exact keyword match needed ("find facts containing BM25") | `search` — FTS5 BM25 only, lower latency | | You have a specific `fact_id` from a prior result | `fetch` — exact lookup, full detail | | One result looks right and you need what surrounds it | `expand` — source memory, session neighbours, same-entity facts, the correction that replaced it | | Browse newest entries without a query | `list_recent` | | A day, a project or a session in readable form | `get_memory_summary` | | A question the user saved under a name | `run_view` |
Use `recall` as the default. `search` is a fallback for zero-result recall on a known exact term. `fetch` is for when you already know the ID.
---
Before storing anything new, always call `recall` first. If a near-duplicate fact already exists, call `update_memory(fact_id, content)` to refine it rather than creating a duplicate. Duplicates degrade retrieval quality for every future session.
---
recall( query="authentication strategy decision", limit=20, # default 20; reduce to 5 for quick pre-task checks session_id="<sid>", # pass the session_id returned by session_init fast=None, # leave unset; see "Fast mode" below for what it controls )
Real response shape (trimmed to the fields that matter; `slm recall --json` wraps the same data in a `data` envelope):
{
"success": true,
"results": [
{
"fact_id": "f8a2bc91",
"memory_id": "m7e19ca0",
"content": "Decided to use JWT with 1h expiry for API auth (2026-06-10)",
"score": 0.87,
"tier": "supported",
"confidence": 0.91,
"trust_score": 0.84,
"fact_type": "semantic",
"memory_kind": "decision",
"memory_kind_state": "confirmed",
"age_label": "4 months ago",
"channel_scores": {
"semantic": 0.88,
"bm25": 0.61,
"temporal": 0.72,
"hopfield": 0.55
}
}
],
"count": 1,
"query_type": "semantic",
"channel_weights": {
"semantic": 0.4,
"bm25": 0.2,
"temporal": 0.2,
"hopfield": 0.2
},
"channel_status": {
"semantic": "ok",
"bm25": "ok",
"temporal": "empty",
"hopfield": "ok",
"spreading_activation": "no_candidates",
"entity_graph": "no_embedding",
"profile": "disabled"
},
"incomplete_channels": [],
"retrieval_time_ms": 134,
"query_id": "q-3f9a",
"no_confident_match": false,
"calibration_status": "uncalibrated",
"calibration_id": null,
"answer_confidence": null,
"abstained": false,
"abstention_reason": null,
"abstention_note": "",
"tier": "supported",
"warming_up": false,
"status_note": "",
"answer_check_status": "off",
"answerability": "unjudged",
"answerability_reason": "disabled"
}A result that came from a saved picture or a PDF page also carries a `media` block (`media_id`, `kind` of `image` or `page`, `thumbnail_uri`, `page`, `document_id`, `citation` such as `page 12`). Pictures and pages are searched by a normal `recall` while pictures and documents are on; nothing changes when they are off. From an app on this computer, up to three thumbnails follow the JSON as image blocks; `get_media(media_id)` shows any other. Look at a thumbnail before saying a picture shows something, and give the page when you quote a PDF. See `slm-media`.
Other fields that can appear: `profile` (the namespace that answered), `project_scope` (what a `project` filter did), `tag_scope` (what a `tags` filter did), `temporal_frame`, `reranker_status`, and `thematic_context`. Long contents are clamped and later results can come back as short stubs (`truncated` / `stub` on the result); call `fetch` for the full text.
**Read `channel_status` before concluding that nothing is stored.** It reports what each retrieval channel did on this query. `channel_weights` says how much each channel counts; `channel_status` says whether it ran at all.
| status | meaning | |---|---| | `ok` | the channel ran and contributed candidates | | `empty` | it ran and there was genuinely nothing to return | | `no_candidates` | it ran but nothing survived fusion | | `error` | it raised — **its results are missing from this answer** | | `timeout` | it exceeded its guard — **results missing** | | `no_embedding` | the query could not be embedded, so it could not run | | `warming` | the embedding model, or the entity graph, was still loading right after a start — **results missing**, and the same question a little later usually works | | `disabled` | switched off by configuration | | `not_configured` | the backing service is not set up |
`semantic`, `bm25`, `temporal`, `hopfield` and `spreading_activation` each search and return their own candidates. `profile` is a shortcut that runs befor
Open-source governed, local-first memory control plane for AI agents and teams. arXiv:2608.08253
Cross-bot memory on a shared computer (Grok Bot, Cursor plugin, any host where several agents share one machine). Explains…
KV cache for repeated reads — call slm_cache_get(key) first; on a miss do the expensive operation then slm_cache_set(key, value,…
Compress large text, tool output, or transcripts to reduce context-window usage while keeping the full 1M window intact — call…
First-session orientation for SuperLocalMemory on a headless bot host (Grok Bot, or any Cursor-format plugin install with no…
Governed-workspace behavior for SuperLocalMemory. Covers roles (admin/member/viewer) and company mode, who administers a…
Use this skill to extract structured Markdown/JSON from PDFs and document images—tables with cell-level precision, formulas as…
Estimates intracellular metabolic fluxes from steady-state carbon-13 isotope-tracing measurements using validated atom maps,…