Start the server
npm install -g remembero
remembero serveGive the model one bounded tool. Let Remembero own retrieval and proof. Validate the call, return only the tool result, and keep writes behind review.
Use MCP when your harness already has a tool registry. Raw query and proof tools work without an LLM key; natural-language recall uses your configured provider.
npm install -g remembero
remembero serve{
"mcpServers": {
"remembero": {
"command": "npx",
"args": ["-y", "remembero", "serve"],
"env": {
"REMBERO_HOME": "/absolute/path/to/agent-memory"
}
}
}
}These four pieces map to OpenAI-compatible clients, local WebLLM, LangGraph-style nodes, custom orchestrators, and most agent harnesses.
Keep namespaces, database paths, limits, and mutation controls in trusted application configuration—not in model arguments.
const queryTool = {
type: "function",
function: {
name: "Query",
description:
"Query governed memory and return bindings, sources, and proof.",
parameters: {
type: "object",
properties: {
query: { type: "string" }
},
required: ["query"],
additionalProperties: false
}
}
} as const;The first prompt contains the user question and tool schema only. It must not contain facts, rows, rules, or the expected answer.
const first = await model.complete({
messages: [{
role: "user",
content: [
"Call Query exactly once with the user's question.",
"Do not answer until the tool result is available.",
`Question: ${question}`
].join("\n")
}],
tools: [queryTool],
toolChoice: {
type: "function",
function: { name: "Query" }
}
});Reject unknown tool names, changed questions, oversized inputs, and unauthorized namespaces before any tool executes.
const result = await remembero.callTool(
"recall_explain",
{
question: validatedQuery,
namespaces: ["agent"],
answerMode: "evidence",
proofLimit: 4
}
);The final prompt receives the validated call and bounded tool result. A deterministic contract checks that the answer agrees with its bindings and proof.
const final = await model.complete({
messages: [
{
role: "system",
content:
"Answer using only TOOL_RESULT. Cite bindings and sources. " +
"If status is not answered, return an explicit non-answer."
},
{
role: "user",
content: [
`QUESTION: ${question}`,
`TOOL_CALL: ${JSON.stringify(first.toolCall)}`,
`TOOL_RESULT: ${JSON.stringify(result)}`
].join("\n")
}
]
});Accepts a natural-language question and returns status, generated query, bindings, proof, durable sources, and a query-scoped graph.
Trusted code selects an allowlisted Datalog relation. The model never authors SQL, chooses namespaces, or broadens its own authority.
Run one command to verify structured accuracy, proof citations, stale leakage, engine latency, a real stdio MCP round trip, clean installation, million-fact memory use, and a pinned external retrieval comparison.
npm run bench:agent-db:check
npm run bench:agent-db:scale -- --check
npm run bench:agent-db:install:check
npm run bench:agent-db:million
npm run bench:agent-db:cost
npm run bench:longmemeval
npm run bench:longmemeval:semantic # live embedding cost
npm run bench:memory:external
npm run bench:memory:mem0 # live provider cost
npm run bench:memory:graphiti # live provider costRead the scorecard and evidence limits →