kaeru memory
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KAERU_VAULT_PATH | No | Override the vault path. Default is platform-specific: Linux $XDG_DATA_HOME/kaeru, macOS ~/Library/Application Support/ai.lamantin.kaeru, Windows %LOCALAPPDATA%\ai.lamantin.kaeru. | |
| KAERU_MCP_UPDATE_CHECK | No | Set to 0 to turn off the daily GitHub update check entirely. | |
| KAERU_MCP_HYGIENE_ENABLE | No | Set to 0 to turn off automatic background hygiene. On by default since 0.7.3. | 1 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| atA | Read a node IN FULL — every field plus the complete, untruncated body. |
| attachA | Add a node to another initiative (additive multi-membership) — repair initiative fragmentation by giving a node captured under the wrong or a stale initiative a second home, without moving or copying it (same id, edges, history). The node is resolved across all initiatives. Idempotent. Local only. For a whole initiative rather than a few nodes, |
| awakeA | Restore session context: pinned set, recent episodes (24h), open reviews, plus the read-back of unfinished work — open tasks (overdue first), claims awaiting a verdict, and the saved reasoning trails. Run this when re-entering a project. |
| betweenA | Show every edge between two nodes, both directions, at NOW — answers "are A and B connected, and how?". Edges are typed (refers_to, causal, derived_from, contradicts, part_of, blocks, targets, supersedes, verifies, falsifies, temporal), so the answer says what KIND of connection it is. |
| boardA | Show the initiative's task board: status columns (from its registry, in order, empties included) with the tasks bucketed into them. Requires |
| board_statusA | Customize the initiative's board columns: action add (key,label?) / remove (key) / relabel (key,label) / reorder (order = all keys permuted). The board is created from defaults [open, in-progress, done] on first edit. |
| chainA | Save the shortest weighted path between two nodes as a knowledge chain — an ordered, recallable reasoning trail. Stronger links (higher |
| citeA | Record an archival reference. Two flavours: external source (pass |
| claimA | Record a hypothesis. Auto-named. If you ALREADY know how it turned out — the usual case, since you reach memory after the check has run — pass |
| close_reviewA | Close an open review on a node — retracts its contradicts edge(s) so it leaves the review queue; the doubt stays in history. Optional |
| cloud_initiativesA | List the initiatives a cloud holds, with how many nodes each has shared. The map of the second tier: use it when you don't know what the team has, before |
| cloud_linksA | Resolve a node's cloud soft links — fetches the cloud nodes they point at, live, so you see what they say NOW rather than what they said when the link was made. The read half of |
| cloud_recallA | SEARCH or list what the cloud holds for an initiative — the second tier your local |
| cloudsA | List the clouds this daemon can reach, with their endpoints and which one is default. Ask this before any cloud verb in an unfamiliar setup: with more than one cloud configured, |
| configB | Show resolved configuration: vault path, the configured clouds and which is default, and every cap (initiative not relevant). |
| confirmA | Mark a hypothesis as supported. |
| delete_initiativeA | Delete an initiative — drops its scoping and forgets nodes exclusive to it (bi-temporal: recoverable via |
| doneA | Mark a task done — the id, name and manual tags survive; only the status moves, and |
| drillA | Drill into a node — its brief plus one hop of children (sources via derived_from, parts via part_of). The fast way to see what a memory is attached to. Bodies come back as EXCERPTS: use |
| episodeA | Write a deliberately-named operational episode. Use when you know you'll want to recall by exact name. Pass visibility=shared (in a team initiative) to capture and push to the cloud in one call. Pass |
| evidenceB | Record what you actually checked, and attach it to a hypothesis. Past tense — this documents a check that already ran, it does not schedule one (and it is not |
| exportB | Snapshot the substrate as an Obsidian-friendly markdown vault (README + INDEX + LOG + pages). Output dir is created if missing. |
| flagA | Flag a node as doubtful — writes a review episode carrying your REASON and a contradicts edge to the target. The target itself is untouched: the doubt is recorded beside it, not written into it. It then shows up in |
| forgetA | Bi-temporal forget — retract a node and every edge connected to it. Historical reads still see it; reads at NOW skip. |
| historyA | Print every assertion / retraction recorded for a node, chronologically — |
| hygieneA | Hygiene status for an initiative: node and core counts, when the last pass ran, whether one is due, and exactly what the next pass would move. Passes run on their own — when writes accumulate, when core grows past its threshold, or on the sweep timer — and only ever change a node's layer, reversibly. |
| ideasA | List the initiative's archival IDEAS — proposals that settled without yet becoming results. Part of the cortex |
| importC | Read FIRST before bulk-importing knowledge. Returns the import playbook: scope by initiative, pick the verb by epistemic status, stamp the memory layer at creation by importance, and link after capturing. |
| inconclusiveA | Mark a hypothesis as inconclusive — the check ran and did not decide. A real third verdict, not a failure to answer: it closes the claim out of the open queue while recording that the question stayed open on the merits. Writes no verdict edge, so |
| initiativesB | List initiatives that have at least one node attached. Use this first when re-entering, then pick one for subsequent calls. |
| jotA | Low-friction episode write — auto-named from body's first words plus a unique id suffix. Defaults to observation/low. Pass visibility=shared (in a team initiative) to capture and push to the cloud in one call. Pass |
| layerB | Set a node's memory layer — controls recall priority (injected Core → Hot → Warm → Cold → Frozen). Accepts name or id; layer one of core/hot/warm/cold/frozen. |
| linkA | Create a typed edge between two nodes (by name or id). Endpoints resolve in the active initiative first, then across all initiatives, so a link may span initiatives. Edge type defaults to |
| link_cloudA | Soft-link a local node to a cloud node by id — a reference, with NO copy in your vault. Use it instead of |
| lintA | Diagnostic snapshot of graph hygiene: orphan nodes (no edges at all), unresolved reviews, and dangling edges whose endpoint was retracted. Read-only. |
| merge_initiativeA | Merge one initiative INTO another — the fix for a project whose memory ended up split across two names (a typo, a separator, a translated alias). Re-homes every node and edge of |
| neighboursA | List every node ONE HOP from a node, in BOTH directions, across ALL edge types — the way to discover what a memory is connected to. |
| outcomesA | List the initiative's archival OUTCOMES — what the work actually concluded. This is the highest-value read for a fresh agent: results, not the working notes that produced them. |
| overviewB | Print a terminal-readable map of the substrate: counts by tier/type, provenance forests, open questions, edge stats. |
| pathA | Compute the shortest weighted path between two nodes WITHOUT writing anything — a preview. Edge weight is the cost, so stronger links (higher |
| pinC | Pin a node to the active window. Accepts either a name or a UUIDv7 id. |
| policyA | Read or set an initiative's cloud sharing policy (Gate 1). Omit both arguments to read. |
| pullB | Pull a shared node from the cloud into the local vault by id, attaching it to the given initiative — the recall mechanism for team knowledge you don't have locally yet. In a multi-cloud setup pass |
| recallA | Look up a node id by EXACT name — no fuzziness, no stemming. Returns the id alone, so follow it with |
| recentA | List what was CAPTURED within the time window (defaults 24h) — every kind of write, not only episodes: references, claims, tasks and jots all count. This is the verb that answers "did what I just write land?", so a zero here really means nothing was captured. Use |
| rechainB | Refresh a chain the graph has outgrown. With no |
| reflectA | Reflect on the store: a computed maintenance work-list with how to act on each part — orphans to link, open reviews to resolve, chains gone stale (rechain), settled work to promote into cortex or drop to cold, and shared/cloud items that need YOUR sign-off (never auto-rebalanced). The last two are candidates to judge one at a time, not a batch to apply: cortex loads whole into every session, so the report prices the move (cortex N -> M). Run it when a piece of work ends, and before a session stops — that is the moment nothing else marks. |
| refuteA | Mark a hypothesis as refuted. |
| rename_initiativeA | Rename an initiative — moves all its nodes, edges, and sharing policy to the new name (fails if the new name already exists). Local by default. Pass |
| resolveA | Resolve an open question by recording that |
| reviseA | Rewrite a node's body and/or rename it IN PLACE — the id survives, and |
| reweightB | Set an existing edge's connection strength (weight 0..1) in place. Stronger edges make shorter knowledge-chain paths; use to tune which links matter after the fact. |
| searchA | Full-text search across name and body via Cozo FTS. No stemming — search the form you wrote. For inflection-tolerant matching across any language append |
| set_statusA | Move a task to a board column: sets its |
| settleA | Promote a node that stopped changing from the operational tier into the archival one — this is how knowledge hardens. |
| shareA | Share a node to the team cloud. Gated: the initiative must be |
| slotA | Make a node the live holder of a ROLE in an initiative — |
| slotsB | List the filled roles of an initiative and which node holds each. |
| supersedeA | Replace a node with a fresh one carrying new content, connected by a supersedes edge from the successor to the node it replaces. Use when the change is large enough to warrant a new identity; |
| surfaceA | Explicit layered recall — surface nodes from specific memory layers (default |
| sync_reviewA | Batch sync-review of a team initiative's still-local nodes: splits them into PROPOSE SHARE (guard-clean) vs KEEP LOCAL (secret-guard flagged). Review once, then |
| synthesiseA | Many-to-one consolidation — write one durable node from several seeds, with a derived_from edge to each so |
| taggedA | List nodes whose |
| taskA | Capture a todo as a Task node. Auto-named from body. Tags: kind:task, status:open, optional due:YYYY-MM-DD. |
| traceA | Walk derived_from ancestors of a node back to its sources — where a conclusion CAME FROM. Use it before trusting a synthesised or settled node: it shows the raw material the claim was built on. |
| unlinkB | Retract a previously-asserted edge. Bi-temporal — historical reads still see it. |
| unpinC | Unpin a node. Accepts name or id. |
| unsettleA | Bring an archival node back into the operational tier — |
| unshareA | Withdraw a node from a cloud: retracts the cloud copy and marks the node local again. The inverse of |
| unslotB | Free a role without touching the node that held it — its layer stays as it is. |
| whyA | Why is this here? Reads the saved reasoning that leads to a node — the state → reasoning → decision trail, not an isolated record. Give it a chain to read its ordered steps, or any node to see the chain it belongs to (read directly when there is only one, listed for triage when there are several). Replaces the former |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 71 tools
There is heavy thematic overlap in the read family (at vs recall vs search vs tagged; drill vs neighbours vs between; path vs chain vs why) and in the write/lifecycle family (jot vs episode; settle vs synthesise; link vs link_cloud; reflect vs lint), but the descriptions go to unusual lengths to draw explicit boundaries ('drill follows only derived_from and part_of; neighbours follows all twelve'). An agent can tell them apart with care, though the sheer number of near-parallel verbs invites occasional misselection.
Casing and separators are consistent (all lowercase snake_case), but predicate style is mixed: bare imperative verbs (link, settle, pin, search), verb_noun compounds (set_status, close_review, merge_initiative, cloud_recall), and bare nouns (board, slots, ideas, outcomes, history, config). No camelCase chaos, but no single predictable convention either.
71 tools is far beyond any comfortable surface, and the rubric flags 25+ as heavy and 50+ as extreme. The domain (bi-temporal graph, tiers, layers, chains, roles, reviews, initiatives, multi-cloud sync) genuinely justifies more than a typical server, so it is not a pure mismatch, but the count is still excessive for reliable tool selection.
Coverage is remarkably exhaustive for a knowledge substrate: capture (jot/episode/cite/claim/task/evidence), layered read (at/recall/search/tagged/drill/neighbours/between/path/trace/why/history/surface), graph editing (link/unlink/reweight/chain/rechain), lifecycle (settle/unsettle/supersede/revise/synthesise/forget), task board, reviews/verdicts, roles, initiative management, cloud sync, and maintenance (reflect/lint/hygiene) plus export/import. Almost no dead ends in the domain flow.