Skip to content
Data
Skill

/slm-recall

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.

From plugin
superlocalmemory
27016 skills4 agents1 command1 MCP

Claude Code

$ npx -y skills add qualixar/superlocalmemory --skill slm-recall --agent claude-code

SKILL.md

slm-recall.SKILL.md
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:*)

slm-recall — Search & Retrieve Memory

Retrieve stored facts, decisions, and past context from SuperLocalMemory using multi-channel retrieval. The golden rule: **recall before you remember**.

---

When to use recall vs search vs fetch vs list_recent

| 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.

---

Recall-before-remember discipline

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.

---

MCP-first workflow

1. Standard recall

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

Read more
@qualixar
Ships withsuperlocalmemory

Open-source governed, local-first memory control plane for AI agents and teams. arXiv:2608.08253

27016 skills4 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
270
Star history of qualixar/superlocalmemory on GitHub, a chart by star-history.com

Other skills on superlocalmemory.

slm-cache

slm-cache

KV cache for repeated reads — call slm_cache_get(key) first; on a miss do the expensive operation then slm_cache_set(key, value,…

slm-compress

slm-compress

Compress large text, tool output, or transcripts to reduce context-window usage while keeping the full 1M window intact — call…

slm-graph

slm-graph

Index and query a codebase as a structural graph — build the code graph, trace blast radius of a change, find…

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem07d69k
@mem0ai@mem0aiInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

posthog13d41k
@posthog@posthogInstall Skill

Questions about slm-recall.

Which coding agents can use slm-recall?
slm-recall installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.