attestation: { mac, issuedAt }. The mac covers the text, validity window, trust level and source event hashes of every item, plus the project and memory version. Send the pack back to check it:123const pack = await kaibo.recall("who owns the release?"); const check = await kaibo.verifyPack(pack); // { valid: true, reasons: [] }
freshness and reverifyBy, computed from the type's half-life (tasks 7 days, episodes 30, facts 180, decisions and preferences 365, procedures 730):| freshness | meaning |
fresh | confirmed within half its half-life |
aging | past half, within the full half-life |
unverified | past its half-life without being confirmed |
unverified items before acting on them. When you do, confirm them so the clock restarts:1await kaibo.verifyMemory(item.memoryId);
recall({ asOf }) returns what was believed true at that instant, including values that were later replaced. diff lists what changed in a window:12const d = await kaibo.diff({ from: "2026-11-01T00:00:00Z", to: "2026-11-08T00:00:00Z" }); // d.added: became true. d.ended: stopped being true, with what replaced each.
source.kind of tool_call or file) can carry injected instructions. kaibo marks memories derived only from such sources trust: "untrusted", and an untrusted update can add knowledge but cannot replace or retire a trusted memory. Ask for trusted memories only when the result will drive an action:1await kaibo.recall({ query: "who is the CEO?", minTrust: "trusted" });
mode: "fast" never calls a model on the read path (about 0.4 s). mode: "deep" always asks one to choose the memories. The default, auto, answers fast when keyword, meaning and concept-graph retrieval agree on a single clear answer, and deepens for questions about change, lists, or anything ambiguous.