A local 'second brain': RAG over your scattered notes and docs, with an MCP server so AI agents can use it too.
loci presents 8 well-named, clearly-purposeful tools with strong descriptions and complete input schemas. All tools follow verb_noun naming conventions (brain_search, brain_ask, brain_forget, etc.), making intent obvious. Descriptions are consistently detailed (150-250 chars), explaining WHAT the tool does, WHEN to use it, and how it differs from similar tools, exemplary for LLM selection. All required parameters have type definitions and descriptions. Output schemas are not explicitly documented in the source, which prevents a higher score. No error handling guidance is visible. Security considerations (read-only vs. write operations) are annotated but not formally gated. Tool composition is excellent: single-responsibility design with clear chains (brain_search → brain_ask, brain_remember ↔ brain_search/brain_forget). Schemas use proper JSON Schema with required/optional fields. The main gaps are: (1) missing output schema documentation; (2) no error recovery guidance visible; (3) no per-parameter validation constraints (min/max, regex patterns) in schemas; (4) potential for result-limiting guidance (e.g., brain_search defaults to k=5 but could state this more prominently).
Ask the knowledge base a question. Behavior: retrieves the most relevant excerpts, then an LLM synthesizes an answer grounded ONLY in them, ending with [source: path > section] citations. Usage: prefer this over brain_search whenever a question needs synthesis or an explanation; set verify=true to get a claim-by-claim audit (supported / partial / unsupported) when accuracy matters more than speed.
Retract memories that are wrong or outdated. Behavior: memory notes matching the query move to a .trash folder (recoverable by hand) and their chunks leave the index immediately; nothing is permanently destroyed. Usage: use when a remembered fact was superseded or was a mistake; check with brain_search first if you are unsure what matches.
Query the knowledge graph over memories and wiki pages. Behavior: with an entity, returns its outgoing/incoming relations (each cites its source file); without one, returns the top hub entities. The graph is built from `loci graph build` (LLM-extracted triples in graph.json). Usage: explore how concepts connect before asking questions; see the strongest entities for orientation.
Show the Obsidian-style [[wikilink]] graph around a note. Behavior: lists every note the given note links to (outbound) and every note that links back to it (inbound), based on the current index. Usage: use to explore how a topic connects to others before asking questions, or to find related notes when search keywords fail.
Output schemas not documented. No response format descriptions exist in source. LLMs cannot infer what fields each tool returns, forcing guesswork or context-wasting follow-up calls.
No error handling or recovery guidance visible. Tools that call LLMs (brain_ask, brain_wiki) or query vector databases (brain_search) can fail in various ways (model error, embedding failure, no results). No indication of how errors are reported or what the LLM should do next.
No parameter constraints (min, max, regex, enum) in schemas. 'k' param on brain_search has a hint (1-20) in description but no formal min/max constraint. 'tags' param lacks guidance on valid tag format. Without formal constraints, LLMs can pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Store a durable memory (decision, fact, preference, lesson learned) into the shared knowledge base. Behavior: writes a markdown note with frontmatter tags into the memories directory and indexes it immediately, so it is searchable within the same call. Memories persist across sessions and are shared by every MCP host that mounts loci — write from one IDE, recall from any other with brain_search or brain_ask. Usage: use for decisions, facts, preferences and lessons worth recording; do not use for ephemeral chit-chat.
Search the personal knowledge base with hybrid retrieval (vector similarity fused with BM25 keyword matching). Behavior: returns up to k ranked excerpts, each with file path, heading breadcrumb and similarity score; no LLM call is made. Usage: reach for this when you need source material to quote, verify a claim, or see what exists on a topic; use brain_ask when you want a synthesized answer instead. Results are limited to the indexed sources — run brain_ingest first if recent files are missing.
Report what the index currently contains. Behavior: returns the store path, total chunk count, chunk count per source file, the embedding and chat models in use, and retrieval settings (hybrid, rrf_k, top_k). Reads local metadata only — no LLM or embedding calls. Usage: call before searching to see what is indexed, after brain_ingest to confirm what changed, or whenever answers seem to be missing a file you expected to be there. Takes no parameters.
Generate a wiki page about a topic by distilling everything the index knows into one curated, cross-linked markdown page. Behavior: retrieves up to k source excerpts, an LLM synthesizes a structured page, and the page is written to the wiki directory and indexed immediately (loci's memory-consolidation layer). Requires a working LLM. Usage: use when scattered notes about a topic should become one stable, searchable page; regenerate the same topic to update it.
Write operations (brain_wiki, brain_remember, brain_forget) lack confirmation or dry-run modes. An agent could mistakenly call brain_forget with a broad query and trash many memories. No pattern to preview changes before committing.