slm-bot-memory
Cross-bot memory on a shared computer (Grok Bot, Cursor plugin, any host where several agents…
Save pictures and PDFs in SuperLocalMemory and find them again by describing them. Covers when to save a picture or document, remember_media, remember_document, get_media, media_status and media_upload_link, how recall returns pictures and PDF pages, the limits, what stays
$ npx -y skills add qualixar/superlocalmemory --skill slm-media --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/slm-mediaContext preview
The summary Claude sees to decide when to auto-load this skill.
Save pictures and PDFs in SuperLocalMemory and find them again by describing them. Covers when to save a picture or document, remember_media, remember_document, get_media, media_status and media_upload_link, how recall returns pictures and PDF pages, the limits, what stays
name: slm-media description: Save pictures and PDFs in SuperLocalMemory and find them again by describing them. Covers when to save a picture or document, remember_media, remember_document, get_media, media_status and media_upload_link, how recall returns pictures and PDF pages, the limits, what stays private, turning the feature on with `slm media` (16 GB of memory needed), connecting folders with `slm sources`, and how web apps add files through one-time upload links. Off by default. when_to_use: | - "Save this screenshot / photo / PDF" - "Find the picture where ..." or "which page of the PDF says ..." - "Add this document to my memory" - A web app (ChatGPT, Claude on the web, Grok Bot, Muse, Composio) cannot send a file itself - remember_media, remember_document, get_media, media_status or media_upload_link is missing from the tool list - "Turn on pictures and documents", slm media status, slm media repair - "Connect my Obsidian vault / notes folder" (slm sources) allowed-tools: remember_media, remember_document, get_media, media_status, media_upload_link, recall, Bash(slm:*)
SuperLocalMemory can keep a picture or a PDF as a memory and find it later by describing what it shows or what it says. A picture model runs on this computer (EmbeddingGemma 2). OCR reads the text inside pictures. Each PDF page is indexed by its picture and by its text. No generative model looks at the files, so SLM cannot describe a picture to you: it finds it, and you look at the thumbnail it returns.
This feature is **off by default**. Pictures live in their own database (`media.db`); turning it on does not change any existing memory or embedding.
---
Save one when the user asks, or when the file is itself the thing worth finding again: a screenshot of an error they will meet again, a diagram of a design decision, a receipt, a scanned page, a PDF spec. Do not save a file just because it was shown in the conversation.
Add words with `content`. The picture is found by what it shows, by the text read inside it, and by the words you add, so a short sentence about why it matters ("Staging dashboard after the Postgres 17 move") helps recall.
Never save a picture or PDF that shows a password, key, token, card number, government id or private data about a third party. The text read from a file is scanned like any saved text, but a screenshot of a secret should not be saved at all. Ask the user first if you are unsure.
---
The five tools below are listed only while pictures and documents are on, and only in the `full`, `power` and `whole` MCP tool sets. They are not in `core` or `code`. The tool set is fixed when the MCP server starts, so after the feature is turned on, restart the MCP session (`slm restart` starts the picture worker too). Do not guess: run
slm media status
It says whether the feature is off, set up, still setting up, or failed (`slm doctor` explains a failure). The same status is in the dashboard under **Documents & Images**.
slm media enable # shows the download size and a disk check, then asks; --yes skips the question
Turning it on downloads about 1.5 GB of models and tools, and needs a computer with 16 GB of memory (the check passes from 15 GiB). On a smaller computer `enable` refuses with the reason and exits with code 4; text memory keeps working. Never turn it on, or pass `--yes`, without the user saying yes in this conversation. Never set `SLM_MEDIA_ALLOW_LOW_RAM=1` yourself: it removes the memory check and the owner must decide that.
Supported: macOS on Apple Silicon, Windows x64, Linux x86_64 and Linux ARM64 (aarch64), Python 3.12 to 3.14. Not supported: Intel Macs and Windows on ARM.
Other commands:
slm media status # what is on and how set-up is going slm media disable # off again; memories are kept (--remove-files also deletes the downloaded models) slm media gc # report picture records without a memory and files without a record; removes nothing slm media gc --apply # remove them (owner or admin); never touches SLM's databases slm media repair --dry-run # count pictures that cannot be found by what they show yet slm media repair # re-embed them (owner or admin); run again if it says pictures are left
All take `--json`. Run `slm media repair` when a save says a picture "can't be found by what it shows yet", or after the picture model changed.
---
remember_media( path: str = "", download_url: str = "", base64: str = "", file = None, # give exactly one content: str = "", tags: str = "", profile_id: str = "", idempotency_key: str = "", scope: str = "", shared_with: str = "", ) -> dict
Give exactly one of `path` (a file on this computer), `download_url` (an https link), `base64`, or `file` (a picture attached in a ChatGPT chat; ChatGPT fills it in, never write it by hand). Two or none is refused (`invalid_request`). `scope` (personal, project, shared, global) and `shared_with` (comma-separated profile ids) work as in `remember`: leave them unset unless the user asked to share. Formats: PNG, JPEG, GIF (first frame) and WebP.
Returns `success`, `status`, and on success a `media_id` and a `resource`, `slm://media/<media_id>`. Report what the tool returned; do not say "saved" unless `success` is true.
remember_document( path: str = "", base64: str = "", download_url: str = "", file = None, # give exactly one file_name: str = "", content: str = "", tags: str = "", profile_id: str = "", idempotency_key: str = "", scope: str = "", shared_with: str = "", ) -> dict
Same sources and rules as `remember_media`, for a PDF. The work continues in the background; the answer has a `job_id` (and `
Open-source governed, local-first memory control plane for AI agents and teams. arXiv:2608.08253
Repo: qualixar/superlocalmemory
Cross-bot memory on a shared computer (Grok Bot, Cursor plugin, any host where several agents…
KV cache for repeated reads — call slm_cache_get(key) first; on a miss do the expensive…
Compress large text, tool output, or transcripts to reduce context-window usage while keeping…
First-session orientation for SuperLocalMemory on a headless bot host (Grok Bot, or any…
Governed-workspace behavior for SuperLocalMemory. Covers roles (admin/member/viewer) and…