Give a local model map memory: an always-on, structural index of a folder of notes โ plus tools to navigate it. The model sees what exists every turn (names, paths, one-line descriptions, [[links]]), then drills into detail on demand. It is the structural, no-embeddings complement to the memory (semantic RAG) plugin โ modeled on how a good index/MEMORY.md works: scan the map, read only what's relevant, follow links.
Part of lmstudio-suite.
Two chained hooks:
| Tool | What it does |
|---|---|
map_overview | Show the whole map, or list one folder in full. |
search_map | Keyword search across names/paths/descriptions/tags โ incl. archived (warm) entries. |
read_node | Read one entry in full by its path. |
follow_links | List what an entry links to ([[name]]) and what links back โ the associative graph. |
write_node | Save a note (with full frontmatter) โ new captures default to the incoming/ inbox. Opt-in. |
organize_incoming | Sort the incoming/ inbox into folders by type/tags. Preview first, then apply. Opt-in. |
Set Knowledge directory (global config) to the folder of .md/.txt notes you want mapped โ e.g. ~/notes (a leading ~ is expanded). Files with frontmatter (name, description, metadata.type, tags) get rich map entries; plain files fall back to a hook derived from their first heading or line โ so it works on a structured KB and an arbitrary file tree. Leave blank to disable the plugin (it loads no tools and injects nothing until configured).
[[wikilinks]] in a file's body are resolved against entry names to form the navigable graph; an unresolved [[name]] is treated as a TODO marker, not an error.
archive), or files with tier: warm frontmatter, are kept out of the injected map and reached only via . This keeps the always-on map bounded for large archives.With write_node enabled, ask the model to "save that to my KB". It writes the note to the inbox (incoming/ by default) with full frontmatter โ name, description, metadata.type, and tags โ so it indexes and can be sorted later. When you're ready, "organize my incoming" runs organize_incoming: it previews the moves (routing each note to a folder by its type, then tags โ type: project โ projects/, a reference tag โ references/, โฆ), and on confirmation moves them. Notes with no usable type/tag stay in the inbox; an existing target is reported as a conflict, never overwritten.
Global: Knowledge directory ยท Warm (archived) folders ยท Inbox folder (default incoming).
Per-chat: Inject the map each turn (default on) ยท Max map characters (default 4000) ยท Enable write_node (default off โ also gates organize_incoming).
All reads/writes/moves are confined to the knowledge directory by a path-traversal guard. The map is built from file metadata only โ no embedding model, no network. write_node / organize_incoming are off by default; when enabled they create and move files in your knowledge directory with your user account's privileges, so only enable them for trusted models/tasks. organize_incoming previews before moving and never overwrites an existing file.
MIT licensed.
search_map+N more โ use search_map rollup instead of being truncated mid-entry.