Skip to main content

Overview

Fourteen 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

Source material

add_link, add_file, list_documents

Decisions

list_conflicts, resolve_conflict, list_possible_contradictions, answer_possible_contradiction

Graph vocabulary

related_entities, set_schema_entry_status, delete_schema_entry

Memories

save_memory

Dedupes automatically and flags contradictions instead of overwriting. The response says which happened: saved, merged, or saved with a conflict id.

recall_memory

Searches memories and documents together by meaning, exact words and entities. 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.
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. url. 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. 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.
Recordings over 10 minutes are refused with a message to relay, because transcribing an hour takes 8 to 11 minutes and no tool call should block that long. Whole folders are a CLI job: memloom context add <folder>.

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 agent relays the user’s choice. It should not decide on its own. Every resolution is reversible.
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.
These are not conflicts. The pass runs at roughly 40 percent precision, so most of what it returns is wrong. confirm creates a real conflict; dismiss is permanent with no undo. Ask the user rather than guessing: a wrong confirm makes noise they can clear, a wrong dismiss loses a real contradiction for good.
See reconciliation for what the pass costs.

Graph vocabulary

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.