Overview
Fifteen tools in four groups. The descriptions the agent sees are written so it knows when to reach for each; this page is the human version, with the flows spelled out.Memories
save_memory, recall_memory, read_passage, memory_history, list_scopesSource material
add_link, add_file, list_documentsDecisions
list_conflicts, resolve_conflict, list_possible_contradictions,
answer_possible_contradictionGraph vocabulary
related_entities, set_schema_entry_status, delete_schema_entryMemories
save_memory
Dedupes automatically and flags contradictions instead of overwriting. The response says which
happened: saved, merged, or saved with a conflict id.
The description tells the agent to always pass
scope from context. Folders come from
list_scopes and only the user creates them: an unknown path answers with the fix (pick an
existing folder or omit) rather than saving; an omitted scope lands in uncategorized for the
classifier. See Scopes.
recall_memory
Searches memories and documents together by meaning, exact words and entities. A scoped call
searches the named subtree plus
uncategorized and global, so cross-cutting preferences
still surface while other folders stay out; every hit prints its folder. Exact identifiers
like file paths and error codes make excellent queries. Each result carries a title, the passage,
a similarity, provenance for chunks, and an id. Only active memories come back.
Long passages truncate at 8k with a marker naming the escape hatch:
read_passage
id from a recall result. Exists for one flow: a result ended with the truncation marker and the
answer may be in the cut part. A markdown chunk can be a whole 16k heading section, so the tail is
always reachable.
memory_history
memoryId from a recall result. The full version chain, newest first.
list_scopes
No parameters. The folder tree with per-folder counts, rendered so a validscope string can
be copied straight out of the answer. Folders are created by the user, never by agents.
Read-only. Editing a memory is a human action in the viewer or CLI.
Source material
Documents are citable source text, not memories. All three are versioned by content hash, so re-adding something unchanged is a cheap no-op rather than a duplicate.add_link
url, and optionally scope (a folder path). Saves a web page permanently as a document, returned by recall with the URL and section it
came from. The daemon fetches and parses it, so nothing reaches a third party. A page that only
renders in a browser, or sits behind a login, answers with the reason instead of a document.
add_file
path, absolute, on the machine running memloom, and optionally scope (a folder path).
Markdown, text, PDF, audio and video. Recordings
are transcribed locally with timestamps, so a recalled line cites the moment it was said.
A linked file is then watched: edit it on disk and recall follows, with no
second call.
list_documents
filter matches a substring of title or path, limit defaults to 50. Use it to answer “is this
already in?” and to see what source material recall can draw on.
Decisions
list_conflicts, resolve_conflict
list_conflicts takes no parameters and shows each pending contradiction with its id.
The flow:
save_memory reports a contradiction with an id, list_conflicts shows what
clashes, the user picks, resolve_conflict applies it.
list_possible_contradictions, answer_possible_contradiction
Unconfirmed pairs the reconcile pass flagged. Each shows the id, a verbatim quote from both sides, the reason, and the similarity.
See reconciliation for what the pass costs.
Graph vocabulary
related_entities
For questions about connections rather than content, where recall would return prose the agent
still has to read. The target is matched exactly, so this is a graph lookup, not a second search.
A folded-away spelling resolves to its canonical and the answer says so: asking about
Bob
answers about Robert and reports they are the same.
Two groups come back separately: stated relationships the extractor asserted, and appears
together with, entities named by the same sources. An agent relaying the answer must not
present the second as the first. One was asserted, the other merely observed.
set_schema_entry_status, delete_schema_entry
Disabling stops future extraction using an entry; entities already extracted under it stay.
Deleting works only on a disabled entry you added: built-ins can only be disabled, and an
active entry must be disabled first. Refusals come back as an explanation, not an error.