Skip to main content
Glama
plur-ai
by plur-ai

PLUR — Your agents share the same memory

MCP Toplist

npm version CI License: Apache-2.0 GitHub stars Glama score

Persistent, open memory for AI agents — local-first, zero-cost, shared across MCP tools (Claude Code, Codex, Cursor, Hermes, OpenClaw). Your agent's memory is plain-text engrams you can read, correct, and delete — not weights you can't.

plur.ai · Benchmark · Engram Spec · npm · Comparisons

Benchmarks

PLUR is memory, not just retrieval — so we measure it on more than one axis, on the full corpus, and we publish the harness so you can reproduce every number.

Retrieval recall — full LongMemEval-S (N=500), R@5, fully local:

Stack

R@5

Notes

BM25 only

92.2%

no embedder — fully airgapped

Hybrid (BGE-small, shipping default)

95.6%

bundled local embedder, zero downloads

+ BGE-reranker-v2-m3

97.6%

local cross-encoder, max quality — opt-in, ≈5s p50 on CPU

Numbers come from plur-ai/plur-bench, which is the source of truth for every benchmark figure PLUR publishes. Where an in-repo number and a plur-bench number disagree, plur-bench wins — it is the reproducible harness, and it is what CI regression-checks.

Chunk granularity, canonical-doc scoring, corpus SHA256 pinned — reproduce it in plur-ai/plur-bench. No cloud call is required for any of these numbers (an optional cloud embedder, openai-3-large, reaches 97.0% hybrid). A faster reranker — ms-marco-minilm-l6 (p50≈245ms vs BGE's ≈5s on CPU) — trades a little recall for sub-second latency.

Run it yourself — and tell us what you get. The harness is plur-ai/plur-bench: CPU-runnable, no API key needed for the local path, corpus auto-fetched and SHA-verified. If you run it, we'd genuinely love to see your numbers — open an issue or discussion with your results, especially if they don't match ours. Independent reproduction is worth more than any number we publish, and we'll gladly credit you.

Retrieval ≠ answer accuracy — and we report them separately, never conflated. End-to-end (LLM-judge) answer accuracy with the reranker stack is 60.5%, versus 52.0% for dumping full context into the prompt and 5.5% with no memory at all.

Agent-task impact — same task, with memory vs without: Haiku + PLUR outperforms Opus without it at roughly 10× less cost; house rules 12–0 across Haiku, Sonnet, and Opus.

Operational — local-first, zero-cost search, data-sovereign by design.

More in progress: LoCoMo, agentic task suites, cross-tool portability, decay / contradiction correctness. Full methodology →

Related MCP server: Memryzed

The idea

You correct your agent's coding style on Monday. On Tuesday, it makes the same mistake. You explain your architecture in Cursor. That night, Claude Code has no idea.

PLUR fixes this. Install it once, and corrections, preferences, and conventions persist — across sessions, tools, and machines. Your memory is stored as plain YAML on your disk. No cloud, no API calls, no black box.

The interesting part: in our tool-routing and local-knowledge benchmark, Haiku with PLUR memory outperformed Opus without it — 2.6x better on tool routing, at roughly 10x less cost. Turns out the bottleneck isn't model intelligence. It's context.

The model is rented; your memory is owned. Swap Haiku for Opus for whatever ships next month — the reasoning is a commodity you don't control. The part that's yours — everything the agent has learned about your work, your corrections, your conventions — shouldn't live in someone else's cloud or be baked into weights you can't read. PLUR keeps it in plain files on your disk, in an open format you can inspect, correct, and delete. That's what owning your intelligence actually means.

Install

Tell your agent

Paste this to your coding agent (Claude Code, Cursor, Windsurf, OpenClaw):

Set up PLUR memory for me: run `npx @plur-ai/mcp init`, then check my PLUR status to confirm it works.

Prefer a guided setup? plur.ai has the exact config for your tool — Claude Code, Cursor, Windsurf, or OpenClaw.

Manual setup (Claude Code)

One command sets up everything — storage, MCP config, and Claude Code hooks:

npx @plur-ai/mcp init

This creates ~/.plur/ for storage, adds PLUR to your .mcp.json, and installs Claude Code hooks for automatic engram injection. The hooks also auto-close the memory lifecycle: a SessionEnd hook captures a closing episode and cleans up session state when a conversation ends, so memory closes cleanly even if the agent forgets to call plur_session_end. PLUR is installed globally — one MCP server, one store, available in every project. You only run init once.

For multi-project setups, use domain/scope to separate knowledge:

cd ~/projects/my-app
npx @plur-ai/cli init --domain myapp --scope project:my-app

This creates a .plur.yaml in the project with defaults that hooks apply automatically. Engrams learned in that project are tagged; recall filters by scope but always includes global knowledge.

Set scope per engram, by content. Scope is not a once-per-session setting — every plur_learn call takes its own scope, chosen from what the engram is about. Team/shared knowledge goes to a team scope (e.g. group:<org>/<team>, used by PLUR Enterprise); project details to project:<name>; personal preferences stay local. Don't let team-relevant knowledge fall back to global by omitting scope — global leaks into every project and (with a team store configured) never reaches the team. plur_session_start lists the remote scopes a token can write to.

Global install (faster startup)

npm install -g @plur-ai/mcp
plur-mcp init

Cursor

Run init from your project root — it sets up Cursor's .cursor/mcp.json (plus Cursor hooks and a context rule):

npx @plur-ai/mcp init

PLUR runs under a lean tool profile in Cursor (PLUR_TOOL_PROFILE=cursor) — Cursor caps the tools a workspace can expose, so PLUR surfaces a curated core set (learn / recall / inject / status) instead of all 42, with the rest reachable through plur_admin. Cursor support shipped in v0.13.

Codex

npx @plur-ai/cli init --codex

Registers the MCP server via codex mcp add, writes lifecycle hooks to ~/.codex/hooks.json, and adds a PLUR section to AGENTS.md. Auto-detected when ~/.codex/ exists.

Injection uses hybrid search (BM25 + embeddings) with an automatic BM25 fallback if the embedder is slow or unavailable. Set PLUR_HOOK_HYBRID=0 to force BM25 (applies to the Antigravity hooks too; PLUR_CODEX_HYBRID is honoured as an alias). PLUR_HOOK_HYBRID_DEADLINE_MS tunes the fallback deadline — keep it below your harness's hook timeout (Codex 25s, Antigravity 20s).

One manual step after install: open Codex, run /hooks, and trust the PLUR entries. Codex fingerprints every hook and refuses to run untrusted ones — silently, with no warning and a zero exit code. Until you trust them, memory simply never loads. plur doctor says so too.

Which integration you get

Every MCP client can call PLUR's tools. Only some have an adapter — the hooks and always-on context that make memory load automatically instead of waiting for the agent to think of it. Without one, recall and learning depend entirely on the model choosing to call the tools, which degrades badly under context pressure.

Harness

Tools

Auto-injection + enforcement

Claude Code

✅ hooks + CLAUDE.md

Codex

✅ hooks + AGENTS.md (trust /hooks once)

Cursor

✅ hooks + rules

OpenClaw

✅ ContextEngine plugin

Hermes

✅ plugin

Antigravity CLI (agy)

✅ hooks + AGENTS.md

Windsurf, Gemini CLI, other MCP clients

❌ tools only

If your harness is in the last row, paste the PLUR section from CLAUDE.md into its own context file (AGENTS.md, GEMINI.md, …) as an interim measure — that restores the instruction layer, though not automatic injection.

Antigravity CLI (agy)

npx @plur-ai/cli init --antigravity

Writes hooks and the MCP server into agy's global config (~/.gemini/config/) and adds a PLUR section to AGENTS.md. Auto-detected when ~/.gemini/antigravity-cli/ exists. No trust step — agy runs configured hooks on first invocation; just restart agy.

Antigravity has no session-start event and no per-prompt hook, so PLUR drives everything from PreInvocation: per-prompt recall is read from the conversation transcript, and the turn's memory is re-injected as an ephemeral message on every model invocation so it survives tool calls without accumulating in history.

Gemini CLI users: Google is transitioning Gemini CLI to Antigravity — install agy and run the command above. Gemini CLI itself remains tools-only.

OpenClaw

openclaw plugins install @plur-ai/claw
openclaw config set plur.enabled true

That's it. PLUR works in the background from here. No workflow changes needed — just use your tools as usual. Corrections accumulate automatically.

DeepSeek Harness

dsh plugin add @plur-ai/dsh

Native, not an MCP bridge. PLUR mounts as a Cordis plugin and writes your engrams straight into the system prompt, so the model reads them the way it reads its own instructions — no tool call, no round trip, and no turn spent deciding whether to look. The section is re-rendered on each assembly rather than appended, so memory does not accumulate in the context as a session runs.

Five tools (plur_recall, plur_learn, plur_forget, plur_feedback, plur_status) are still registered for when the agent wants to reach for memory deliberately. Scope defaults closed — each workspace gets its own, resolved from its .plur.yaml.

/plur reports status; /plur-memory opens the memory viewer below.

Hermes Agent

pip install plur-hermes
npm install -g @plur-ai/cli

The plugin registers automatically via Hermes' plugin system. It injects relevant memories before each LLM call, extracts learnings from agent responses, and exposes all PLUR tools to the agent. Hermes shells out to the PLUR CLI.

Python SDK (LangChain, llama.cpp, scripts)

For Python environments that aren't Hermes:

pip install "plur-ai @ git+https://github.com/plur-ai/plur.git#subdirectory=packages/python"
npm install -g @plur-ai/cli   # bridge (required)

Note: plur-ai is not yet on PyPI — use the git install above until #915 is resolved.

from plur_ai import Plur

plur = Plur()
plur.learn("always use async generators for streaming LLM output")
results = plur.recall("streaming patterns")
context = plur.inject("write a streaming endpoint", limit=10)

plur-ai bridges to the same on-disk store as Claude Code and OpenClaw — memory written from Python is immediately visible across all your tools. See packages/python/examples/ for LangChain and llama.cpp integration examples.

Verify it works

Ask your agent: "What's my PLUR status?" — it should call plur_status and return your engram count and storage path.

Read your memory

plur dashboard

Opens a local page listing every engram: what was learned, what actually gets recalled, and how often. Read-only, loopback-only, and served from your own machine — nothing is uploaded. --port moves it, --no-open skips the browser. Inside DeepSeek Harness the same page is one /plur-memory away.

Available in English and 中文; it follows your browser, or ?lang=zh.

See it in action

Once it's running, teach your agent something once:

"Always use pnpm in this project — npm install breaks the lockfile in CI."

Start a new session the next day and ask:

You: How do I run the tests?

<plur-memory> 1 engram · project:my-api </plur-memory>

Agent: Use pnpm — you mentioned npm breaks the lockfile in CI:

  pnpm test                           # full suite
  pnpm test -- src/auth.test.ts       # single file

New session. No reminder. The correction was there.

That's the moment PLUR pays off — the agent remembers a project convention you mentioned once, without it being in any file it can read.

How it works

PLUR has two storage primitives:

Engrams — learned knowledge that persists across sessions. Each engram is a typed assertion ("always use blue-green deploys", "never force-push to main") with:

  • Activation — retrieval strength that decays over time (ACT-R model) and strengthens on access. Stale facts naturally fade from injection without manual cleanup.

  • Feedback signals — positive/negative ratings that train injection quality over time

  • Scope — hierarchical namespace (global, project:myapp, cluster:prod, service:api) controlling where the engram applies

  • Polarity — automatic classification of "do" vs "don't" rules, so constraints are injected separately from directives

  • Associations — links to other engrams, including co-access edges that form automatically when engrams are recalled together

Episodes — timestamped event records for "what happened when." Each episode captures a summary, timestamp, agent attribution, and channel. Use episodes for incident timelines, session logs, and operational history. Query by time range, agent, or channel.

You correct your agent  →  engram created  →  YAML on your disk
Agent fixes an incident →  episode captured →  timeline searchable
Next session starts     →  relevant engrams injected  →  agent remembers
You rate the result     →  engram strengthens or decays  →  quality improves
Unused engrams          →  activation decays  →  naturally fade from injection

Search is fully local: BM25 (with IDF weighting, TF saturation, length normalization) + BGE embeddings + Reciprocal Rank Fusion. Zero API calls, zero per-query cost. Benchmark methodology →

Plugins (OpenClaw, Hermes) automatically capture learnings from agent conversations — no manual saving needed. The agent's corrections become engrams without you doing anything.

See the full engram spec for schema details, activation model, and injection algorithm.

Open format

The engram is an open, versioned format — not a black box. Every engram is plain YAML validated against a published JSON Schema, generated from the same Zod source the engine uses (the schemas live in spec/). Read it, diff it in git, write your own tooling against it, or build a different engine on the same format — your memory isn't locked to PLUR.

Usage

import { Plur } from '@plur-ai/core'

const plur = new Plur()

// Learn from a correction. The engine's read and write methods are async —
// they return promises so a `Plur` can be backed by a network store as well
// as by the default local YAML one.
await plur.learn('toEqual() in Vitest is strict — use toMatchObject() for partial matching', {
  type: 'behavioral',
  scope: 'project:my-app',
  domain: 'dev/testing'
})

// Recall (hybrid: BM25 + embeddings, zero cost)
const results = await plur.recallHybrid('vitest assertion matching')

// Inject relevant engrams into agent context. You get context blocks ready to
// paste into a prompt plus the IDs that went into them — not the engrams
// themselves. `budget` is the ceiling in tokens; selection fills it by relevance.
const injection = await plur.inject('Write tests for the user service', {
  scope: 'project:my-app',
  budget: 2000
})
console.log(injection.directives)   // also .constraints, .consider
console.log(`${injection.count} engrams, ${injection.tokens_used} tokens`)

// Feedback trains the system — rate anything you have an ID for, whether it came
// back from recall or went out in an injection (injection.injected_ids).
if (results[0]) await plur.feedback(results[0].id, 'positive')

// Capture an event (episode). Episode operations stay synchronous — they are
// backed by episodes.yaml, not the engram primary store.
plur.capture('Fixed CrashLoopBackOff on bee-3-4 by increasing memory limits', {
  agent: 'claude-code',
  channel: 'terminal'
})

// Query timeline
const incidents = plur.timeline({ agent: 'claude-code' })

// Sync across machines (use a private git remote — all engrams including private-visibility ones are pushed)
await plur.sync('git@github.com:you/plur-memory.git')

Tools

Tool

What it does

plur_learn

Store a correction, preference, or convention

plur_learn_batch

Store many engrams in one call (batch dedup + per-item failure isolation)

plur_recall

Retrieve relevant memories — hybrid (BM25 + embeddings) by default; mode:"keyword" for BM25-only

plur_inject_hybrid

Select engrams for current task within token budget

plur_feedback

Rate relevance (trains quality over time)

plur_forget

Retire a memory (activation decays, eventually pruned)

plur_rescope

Move an existing engram to another scope — personal → team, or back

plur_session_scope

Change the session's default write scope mid-session

plur_capture

Record an event — incident, resolution, session milestone

plur_timeline

Query episode history by time, agent, or channel

plur_ingest

Extract engrams from text automatically

plur_sync

Sync via git. personal remotes mirror everything (use a private repo); shared remotes receive only shared-scope, non-private engrams

plur_status

Check system health and engram counts

plur_receipt

Counted, local report of what your memory retrieved for you

plur_outbox

Inspect (and retry) team writes queued while their store was unreachable

The outbox

A write to a team scope goes to that team's remote store. When the store cannot be reached — VPN off, server down, token expired — the engram is not lost and not silently dropped: it is written locally with queue metadata and retried on the next session start, on plur sync, or on demand.

The queue is not a directory. It lives as structured_data._outbox inside the affected engrams in engrams.yaml, which is why it needs a command to see:

plur outbox            # what is queued, for which scope, how long, last error
plur outbox --flush    # retry now

The same thing is available to agents as plur_outbox ({flush: true} to retry), and plur status reports the pending count. Neither surface prints the target URL or the token.

The memory receipt

plur receipt (and the plur_receipt MCP tool) show what your memory actually did — counted from PLUR's own retrieval history, never estimated:

Your Memory Receipt
===================
  2026-07-03 .. 2026-07-22  (71 sessions)

  423 times a memory you taught PLUR
  was put in front of the model.
  (plus 45 times an installed-pack memory)

  across 71 retrievals in 71 sessions
  drawing on 162 distinct engrams

  MOST-RELIED-ON
      34x  PLUR positioning thesis across every vertical: PLUR layers …
      28x  Datacore app CoS architecture: reasoning layer added on to…
      ...

  STORE HEALTH
       4,517   engrams stored (you: 3,746, packs: 771)
         162   retrieved at least once (4% of store)
       4,355   not retrieved since 2026-07-03 (96%)
    Over a short logging window a low rate is expected, not a fault —
    memory is meant to be selective, and much of the store predates logging.

(REUSE stats and coverage caveats are also shown; trimmed here for length.)

It is local and read-only, and carries no dollar or token figure by design: on a subscription your marginal token cost is zero, and the value of an avoided rediscovery is not measurable from this data. The receipt reports only what it can count. Activation rate is store coverage over the logging window, not a quality score — it is naturally low and falls as you add engrams. --days N narrows the window; --json emits the raw shape. (The plur_receipt MCP tool returns the same figures plus a one-line summary that carries this framing to the agent.)

Syncing across devices

plur.sync(remote) is git underneath: it commits your engram store and pushes it to the remote you give it. What gets pushed depends on the remote's declared type (sync.remote_type in config.yaml, or the remote_type argument):

  • personal (default) — your own backup/mirror across your machines. The remote receives everything that is pushed, including visibility: private engrams: private visibility means "don't share this in a pack", not "don't mirror it to my own devices", so private engrams intentionally follow you from machine to machine. Because of that, always use a private git remote (a private GitHub/GitLab repo, or your own server). PLUR surfaces a warning in the sync result whenever private engrams are present. Never point a personal sync at a public repository.

  • shared — a team-visible remote. Only engrams with a shared-family scope (group:/project:/space:/team:/org:/public) and a non-private visibility are pushed; personal-family engrams (local, global, user:*, agent:*) and private-visibility engrams never reach the remote, by construction. Note the default visibility is private, so a shared remote receives only engrams whose visibility was set deliberately — teammates get what you chose to share, nothing else. The same guarantee covers the sibling store files (#686): an episode, candidate, or tension record is pushed only when every engram it references is itself in the push set — records derived from personal or private engrams (a tension's statement snapshots, a failure-report episode) stay local, as does any record referencing an engram the filter cannot resolve.

In both modes scope: local engrams are machine-specific by design (paths, local ports, per-host quirks), so they are stripped from every commit and never reach any remote. Stripping happens on the staged blob: your local working copy always keeps every engram.

Benchmark details

Per-category retrieval recall, from an earlier in-repo run — full LongMemEval-S (N=500), fully local (BGE-small + BGE-reranker-v2-m3, chunk granularity). Its overall figure (98.0%) predates the current plur-bench measurement of the same stack (97.6%) and has not been re-run per category; treat the shape as indicative and the headline table above as current.

Category

R@5

R@10

single-session-assistant

100.0%

100.0%

knowledge-update

100.0%

100.0%

single-session-user

98.6%

100.0%

multi-session

98.5%

100.0%

temporal-reasoning

97.7%

98.5%

single-session-preference

86.7%

90.0%

overall

98.0%

99.0%

Retrieval recall (finding the right memory) and end-to-end answer accuracy (whether the model then answers correctly) are different axes — PLUR measures and reports them separately, never conflated. The agent-impact figures above come from a same-task A/B run (memory vs none).

Full methodology →

PLUR vs other agent-memory tools

Mem0, Letta (MemGPT), and Zep solve real problems — a drop-in memory API (Mem0), a self-managing agent OS (Letta), a temporal knowledge graph (Zep). PLUR's bet is a combination none of them ship together:

  • Plain-text you own — engrams are human-readable YAML you can read, git diff, edit, and provably delete. Not opaque vectors, agent-state blocks, or graph nodes you need tooling to inspect.

  • Local-first, zero-cost — hybrid BM25 + local embeddings, fully offline, no API bill (98% R@5 on the full LongMemEval-S corpus with no cloud call — see above).

  • Team-shareable via gitplur sync is git underneath, so the same memory follows you across machines and across a team. Most tools are single-user-local or cloud-team; PLUR is both, and you keep the data.

  • Cross-tool — the same ~/.plur/ store works in Claude Code, Cursor, Windsurf, OpenClaw, and Hermes. Your memory isn't trapped in one vendor.

  • It learns and forgets — feedback-trained retrieval with ACT-R decay and an on-demand contradiction scan, not a grow-forever store.

If you need a hosted memory API or a temporal knowledge graph, use the tool built for that. If you want memory you can read, own, share with your team, and move between tools, that's PLUR. Side-by-side detail: comparisons/.

What PLUR is — and isn't

PLUR is agent memory — it stores corrections, preferences, conventions, and architectural decisions that an AI agent learns during work sessions, and injects them back when they're relevant.

PLUR is not a general-purpose search engine, a codebase indexer, or a replacement for code intelligence tools. It doesn't parse ASTs, navigate class hierarchies, or search your source files. If you need code-aware search (tree-sitter, language server features, symbol lookup), tools like claude-mem or your IDE's built-in search are the right choice.

The two are complementary:

PLUR

Code intelligence tools

Stores

Learned knowledge (engrams) + event timeline (episodes)

Code structure, symbols, definitions

Search

Engram recall (BM25 + embeddings over memory)

AST traversal, symbol lookup, semantic code search

Learns

From agent corrections, feedback, usage patterns

From static analysis of source code

Captures

Auto-extracts learnings from conversations (via plugins)

N/A

Decays

Yes — unused memories fade (ACT-R model)

No — code index reflects current state

Timeline

Episodes track what happened when (incidents, fixes, decisions)

Git log only

Cross-tool

Any MCP client (Claude Code, Cursor, Windsurf, OpenClaw, Hermes)

Typically tied to one tool

While search is a core part of PLUR (finding the right engram to inject), the search targets are always engrams — not files, not code, not documents. PLUR's hybrid search (BM25 + embeddings + RRF) is optimized for short natural-language assertions, not source code.

Packages

Package

Description

@plur-ai/core

Engram engine — learn, recall, inject, search, decay

@plur-ai/mcp

MCP server for Claude Code, Cursor, Windsurf

@plur-ai/claw

OpenClaw ContextEngine plugin

@plur-ai/cli

CLI — plur learn / recall / inject / status

@plur-ai/dsh

DeepSeek Harness plugin — engrams in the prompt, no tool call

@plur-ai/migrate

Store migrations, shipped with the release they migrate to

plur-hermes

Hermes Agent plugin (Python, via CLI bridge)

plur-ai

Python SDK — learn/recall/inject for LangChain, llama.cpp, scripts

plur-langchain

LangChain BaseMemory + BaseChatMessageHistory adapter

packages/ui is internal — the memory viewer's pages, bundled into the CLI and the DeepSeek Harness plugin rather than published. It is not on npm.

Architecture

@plur-ai/core
├── engrams.ts           Engram CRUD + YAML persistence
├── episodes.ts          Episode capture + timeline queries
├── fts.ts               BM25 with IDF, TF saturation (k1/b), length normalization
├── embeddings.ts        BGE-small-en-v1.5, 384-dim, local ONNX
├── hybrid-search.ts     Reciprocal Rank Fusion
├── inject.ts            Context-aware selection + spreading activation
├── decay.ts             ACT-R activation decay
├── secrets.ts           Secret detection (API keys, passwords, tokens)
├── sync.ts              Git-based sync + file locking (O_EXCL)
├── storage.ts           Path detection + YAML I/O
└── storage-indexed.ts   Optional SQLite read index

@plur-ai/mcp          Wraps core as MCP tools
@plur-ai/claw          OpenClaw ContextEngine hooks (assemble/compact/afterTurn)
plur-hermes            Python plugin for Hermes Agent (auto inject/learn)
plur-ai                Python SDK — direct learn/recall/inject for scripts and frameworks

Storage

Everything is plain YAML. Open it, read it, edit it.

~/.plur/
├── engrams.yaml     # learned knowledge (source of truth)
├── episodes.yaml    # session timeline
├── config.yaml      # settings
└── engrams.db       # optional SQLite read index (auto-generated)

PLUR_PATH overrides the default location.

Indexing is on by default (index: true) and the backend is chosen from the size of your store, so there is normally nothing to configure:

Store size

Backend

What answers a query

under 5,000 engrams

yaml

in-memory BM25 + exact cosine

5,000 and up

pglite

embedded Postgres + pgvector

50,000 and up

postgres

a Postgres server you point it at — BM25 in SQL; semantic recall scores in memory (see below)

YAML stays the source of truth in every tier except postgres (ADR-0001, ADR-0005) — the index is a cache that rebuilds automatically, and you can delete it anytime. Set backend: in config.yaml to pin a tier explicitly.

One caveat on the postgres tier, stated here because it is this table's headline row: core does not write embeddings to a Postgres primary store (ADR-0005 amendment). Keyword/BM25 recall runs in SQL, but engram_embeddings stays empty unless your deployment populates it, so semantic and hybrid recall fall back to loading engrams and scoring in memory — correct results, at the O(N) cost this tier otherwise avoids. The adapter says so once at schema init; vectorIndex: 'exact' acknowledges and silences it.

sqlite (engrams.db, via better-sqlite3) is the legacy index and is no longer selected automatically.

Requirements

  • Node.js 18+

  • 2GB RAM minimum — the embedding model (ONNX runtime) needs ~1GB for installation. On servers with less RAM, embeddings are skipped and search falls back to BM25 keyword matching.

Development

git clone https://github.com/plur-ai/plur.git
cd plur
pnpm install && pnpm build && pnpm test

~3500 tests across ~200 files. pnpm test:watch for development.

Contributing

  • Bug reports — issue with reproduction steps

  • Feature requests — issue describing the use case

  • Code — fork, branch, PR. Tests required.

  • Integrations — build PLUR support for other tools

Before submitting: pnpm test passes, pnpm build succeeds, no new external deps in core without discussion.

Conventions: TypeScript, Zod validation, Vitest, no external APIs in core, YAML storage, zero-cost search by default.

License

Apache-2.0

Available Tools

39 tools
plur_captureA

Append an episode to the episodic timeline — records what happened in a session

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags for categorizing the episode
agentNoAgent identifier capturing this episode
channelNoCommunication channel (e.g. claude-code, chat)
summaryYesWhat happened or was accomplished
session_idNoSession identifier for grouping episodes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations give destructiveHint=false and idempotentHint=false. The description adds 'append' and 'records' which imply non-destructive, additive behavior. However, it does not disclose details like whether episodes are immutable or what happens on repeated calls with same summary, leaving some uncertainty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that immediately states the action. Every word is meaningful with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a simple append operation but lacks context about return values, error conditions, or further behavioral details. Given no output schema, more elaboration would help completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All parameters have schema descriptions (100% coverage), meeting the baseline. The tool description adds no additional meaning beyond the schema explanations, so it does not elevate the score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'append' and resource 'episode to the episodic timeline', clearly stating its action. It distinguishes itself from siblings like 'plur_timeline' and 'plur_episode_to_engram' by focusing on recording a session event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. Among many siblings, the description does not mention exclusions or contexts where other tools would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_doctorA

Diagnose the PLUR ENGINE (embedder, hybrid search, remote-store auth) — not hook/MCP wiring. Reports whether the embedding model loaded, whether hybrid search is fully operational, and — for any configured enterprise/remote store — whether its auth is valid (probes /api/v1/me and decodes token expiry), so a dead or soon-to-expire token surfaces instead of hiding behind a "healthy" report. Run this first when recall feels off or team engrams stop syncing. Does NOT check .cursor/mcp.json, .cursor/hooks.json, or the live MCP tool count — for that, run the plur doctor CLI command in a terminal (a different, more thorough check with the same name).

ParametersJSON Schema
NameRequiredDescriptionDefault
retryNoIf true, reset cached embedder failure state and retry the model load before reporting
rerank_evalNoIf true and a reranker is configured (PLUR_RERANKER), run the per-store self-eval gate (#451): probes synthesized from this store's own engrams compare rerank-on vs RRF-only ordering. Verdict is cached in the store and advisory — it never auto-disables reranking. Costs one cross-encoder pass per probe (~20 probes).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only state readOnlyHint=false and idempotentHint=false, but the description discloses side effects and behavior: it resets cached failure state with retry, probes /api/v1/me and decodes token expiry, performs a cross-encoder pass for rerank_eval, and caches verdicts. It also clarifies what the tool does NOT do, avoiding misleading 'healthy' reports. This goes far beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence carries valuable information: scope, checks, exclusions, alternatives, and behavioral caveats. It is front-loaded with the core purpose and structured with specific, non-redundant statements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (diagnostic, with two optional parameters, no output schema), the description explains what the tool reports, what it probes, what side effects occur, and what it intentionally omits. It is complete enough for an agent to select and invoke it correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so per the rubric the baseline is 3. The description does not add parameter-level detail beyond the schema; the schema itself already explains both 'retry' and 'rerank_eval' thoroughly, including cost implications. The description reinforces usage context but does not elevate semantic meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Diagnose the PLUR ENGINE' and explicitly names the components checked (embedder, hybrid search, remote-store auth), which is a specific verb+resource. It also differentiates from hook/MCP wiring and the CLI 'plur doctor', making the tool's scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear when-to-use instruction: 'Run this first when recall feels off or team engrams stop syncing.' It also explicitly states what it does NOT check (e.g., .cursor/mcp.json, .cursor/hooks.json, MCP tool count) and directs users to the CLI command for those checks, naming an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_episode_to_engramA

Promote an episode to a persistent episodic engram — useful when a session event deserves long-term memory

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags for the new engram
scopeNoScope for the new engram
domainNoDomain tag for the new engram
episode_idYesEpisode ID to promote (from plur_timeline)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide idempotentHint=false and destructiveHint=false, but the description adds no further behavioral details. It does not disclose side effects (e.g., what happens to the original episode), required permissions, or return behavior. Beyond the annotations, the description is silent on behavior traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately states the action. It is concise (17 words) with no extraneous information, earning its place efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 parameters, no output schema, no annotations beyond basic hints), the description covers the core purpose but lacks behavioral details and output information. It is adequate but leaves gaps about the promotion process and return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all four parameters described. The description adds no additional meaning to the parameters beyond what the schema already provides. Per guidelines, baseline score is 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Promote an episode to a persistent episodic engram') and the context ('when a session event deserves long-term memory'). It distinguishes from sibling tools like plur_promote by specifying the source (episode) and target (engram) precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a basic use case ('useful when a session event deserves long-term memory'), but does not specify when not to use the tool or mention alternatives. Sibling tools like plur_capture and plur_learn could be confused, but no exclusion guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_extract_metaA

Extract meta-engrams from stored engrams using the 6-stage pipeline (structural analysis → clustering → alignment → formulation → hierarchy). Requires an LLM API endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoFilter source engrams by scope
domainNoFilter source engrams by domain prefix
dry_runNoIf true, extract but do not persist meta-engrams (default: false)
llm_modelNoModel name (default: gpt-4o-mini)
llm_api_keyYesAPI key for the LLM
llm_base_urlYesOpenAI-compatible API base URL (e.g. https://api.openai.com/v1)
run_validationNoWhether to run cross-domain validation (default: false)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (idempotentHint=false, destructiveHint=false) indicate non-idempotent and non-destructive behavior. Description adds pipeline stages and the need for an LLM endpoint, which are not in annotations. Does not conflict with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise, front-loaded sentences. First sentence covers action and pipeline; second states requirement. No waste or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose and key requirement but lacks context on return values, error scenarios, or how the output is structured. With no output schema, more detail would be helpful for a tool with 7 parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 7 parameters have descriptions in the input schema (100% coverage). Description does not add any additional parameter meaning beyond what is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (extract meta-engrams), specifies the resource (stored engrams), and outlines the 6-stage pipeline. Tool name and title reinforce this purpose, distinguishing it from siblings like plur_meta_engrams and plur_validate_meta.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description mentions a prerequisite (LLM API endpoint) but does not specify when to use this tool versus alternatives like plur_meta_engrams or plur_validate_meta. No when-not guidance or explicit context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_feedbackB
Idempotent

Rate an engram's usefulness — trains injection relevance over time. Supports single or batch mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoEngram ID (single mode)
signalNoFeedback signal (single mode)
signalsNoBatch feedback signals

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare idempotentHint=true and destructiveHint=false, which the description complements by stating 'trains injection relevance over time,' implying a non-destructive learning effect. The description adds behavioral context beyond annotations, but the safety profile is already well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the purpose and key feature (single/batch) without waste. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the effect (training relevance) but does not mention response format or confirmation. For a simple feedback tool, this is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for each parameter. The description adds the concept of single vs. batch modes, which is already implicit in the parameter structure. The description adds marginal value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'rate' and the resource 'engram', with the purpose of training injection relevance. It is specific and distinguishes the tool's core function, though it does not explicitly contrast with sibling tools like 'plur_pin' or 'plur_forget'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions support for single and batch modes but provides no guidance on when to use this tool over alternatives (e.g., when to provide feedback vs. other actions). No explicit when-to-use or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_forgetA
DestructiveIdempotent

Retire an engram by ID or search term — marks it as no longer active without deleting history

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoExact engram ID to retire
searchNoSearch term to find engram to retire

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide idempotentHint=true and destructiveHint=true. The description adds valuable context that the operation marks the engram inactive without deleting history, clarifying the nature of the destructiveness. However, it does not disclose potential side effects or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 17 words, front-loading the key action and result. Every word adds value, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation tool with no output schema, the description covers the essential behavioral outcome (retiring without deletion). It does not specify return values, but given idempotentHint and simplicity, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for both parameters ('Exact engram ID to retire' and 'Search term to find engram to retire'), achieving 100% coverage. The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'retire' and the resource 'engram', with a specific mechanism (by ID or search term). It distinguishes itself from sibling tools (e.g., plur_recall, plur_learn) by focusing on deactivation without deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to use the tool (by ID or search term) but provides no guidance on when to choose one over the other, nor does it mention any prerequisites or scenarios where this tool should be avoided in favor of alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_historyA
Read-onlyIdempotent

View the event-sourced history of an engram or all recent history — shows creation, updates, feedback, and evolution events

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax events to return (default 50)
engram_idNoFilter history for a specific engram ID. If omitted, returns recent history across all engrams.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and idempotentHint. Description adds value by specifying the nature of events (event-sourced, creation, updates, etc.), which goes beyond the annotations. Does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the key action and resource. Every word adds value; no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description lists the types of events included (creation, updates, feedback, evolution), which helps the agent understand return content. Lacks details on output structure or pagination, but limit parameter hints at control. Adequate for a read-only history tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description adds no additional meaning to parameters beyond what schema already provides. Description does not elaborate on limit or engram_id usage beyond implicit filtering.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool's purpose: viewing event-sourced history of an engram or all recent history, with specific event types (creation, updates, feedback, evolution). This distinguishes it from sibling tools like plur_recall or plur_learn.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for viewing historical events but provides no explicit guidance on when to use vs alternatives, such as plur_timeline. No 'when not to use' or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_ingestB

Extract engram candidates from content using pattern matching — optionally auto-save them

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoScope to assign to saved engrams
domainNoDomain to assign to saved engrams
sourceNoSource attribution for extracted engrams
contentYesText content to extract learnings from
extract_onlyNoIf true, return candidates without saving (default false — saves automatically)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-destructive and non-idempotent behavior. The description adds the key fact of optional auto-saving, but omits details on pattern matching criteria, error handling, or configuration requirements. Minimal added value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, efficient, with no redundant or filler words. Everything contributes to understanding the tool's core function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple extraction tool with 5 well-documented parameters, but lacks explanation of what 'engram candidates' are, expected output, or error cases. Missing context compared to the large sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description's role is limited. It highlights 'optionally auto-save' which relates to extract_only, but doesn't enrich parameter meaning beyond the schema descriptions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (extract) and resource (engram candidates) along with method (pattern matching) and optional behavior (auto-save). It distinguishes the tool from siblings like plur_learn or plur_capture by specifying candidates and pattern matching, but lacks explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs. alternatives like plur_learn, plur_capture, or plur_inject. The description implies usage for extraction and optional saving, but provides no context or conditions for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_injectA
Read-onlyIdempotent

Get a scored context injection for a task — returns directives and considerations within token budget

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesThe task description to inject context for
scopeNoScope filter for engram selection
budgetNoToken budget for injection (default 2000)

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds value beyond annotations by noting output includes 'directives and considerations' and respects 'token budget'. Annotations already indicate read-only and idempotent behavior, so the bar is lower; this context is helpful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the core purpose and constraints without any superfluous information. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the tool's purpose but lacks detail about return values (no output schema). Terms like 'scored context injection' and 'directives and considerations' remain vague, leaving room for ambiguity about what exactly is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters have descriptions in the input schema, achieving 100% coverage. The tool description adds no additional parameter details beyond the general mention of token budget, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets a scored context injection for a task with token budget constraints. It lacks explicit differentiation from the sibling 'plur_inject_hybrid' tool, though the title hints at BM25 method.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like plur_inject_hybrid, plur_recall, or others. The description does not mention any conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_inject_hybridA
Read-onlyIdempotent

Hybrid injection — BM25 + embeddings for better context selection. Falls back to BM25 if embeddings unavailable. Best default for injection.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesThe task description to inject context for
scopeNoScope filter for engram selection
budgetNoToken budget for injection (default 2000)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds critical behavioral context beyond annotations: it is a hybrid approach that falls back to BM25 if embeddings are unavailable. Annotations already mark it as read-only and idempotent, and the description aligns with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with three short sentences, each adding value: hybrid nature, fallback behavior, and best-default recommendation. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 params, no output schema) and presence of annotations, the description adequately covers behavior, fallback, and recommended usage. Could mention output format but not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all parameters described. The description does not add additional parameter-specific details beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Hybrid injection — BM25 + embeddings for better context selection' with a specific verb and resource. It distinguishes from siblings like plur_inject (simple BM25) and plur_recall_hybrid (hybrid recall) by positioning itself as the default injection method.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly recommends it as 'Best default for injection', implying preferential use over alternatives. It mentions fallback to BM25, indicating robustness. However, it lacks explicit guidance on when not to use it or direct comparisons to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_learnA

Create an engram — record a reusable learning, preference, or correction. Multi-agent note: in an orchestration that spawns subagents, have the PARENT session own plur_learn writes — spawned subagents should return their findings as text for the parent to persist, rather than each calling plur_learn (tool availability is not guaranteed in every subagent context). See plur-ai/plur#281.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoSearchable keyword tags — contribute to BM25/embedding recall, so concrete keywords pay off
typeNoCategory of the engram
scopeNoNamespace, e.g. global, project:myapp
domainNoDomain tag, e.g. software.deployment
pinnedNoAlways-load flag. If true, this engram bypasses the keyword-relevance gate at injection time. Use sparingly: meta-rules, safety conventions, core operating principles only.
sourceNoOrigin of this knowledge (URL, conversation ref, etc.)
rationaleNoWhy this knowledge matters — also enters the search corpus, helps recall by intent not just statement
statementYesThe knowledge assertion to store
commitmentNoHow firmly the user has committed to this belief (default: leaning)
supersedesNoEngram IDs this statement intentionally replaces (#240). Writes relations.supersedes on the new engram and the reverse superseded_by edge on each local target. Supersedes-linked pairs are skipped by tension scans — an intentional update is not a contradiction. Use when updating a standing fact (new version, changed rule) rather than contradicting it.
valid_fromNoISO date (YYYY-MM-DD) the knowledge becomes valid — inject/recall skip the engram before this date (#347)
valid_untilNoISO date (YYYY-MM-DD) the knowledge expires — inject/recall skip the engram after this date. Set this for any time-bound fact (offers, deadlines, temporary endpoints). When omitted, an explicit expiry phrase in the statement ("valid until 31 May 2026") is auto-parsed and echoed back (#347)
locked_reasonNoWhy this engram is locked (only meaningful when commitment=locked)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate not idempotent (idempotentHint: false) and not destructive (destructiveHint: false). The description adds value with the multi-agent context but does not elaborate on other behavioral traits such as side effects or rate limits. The description does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences plus a reference, front-loading the main action and then providing critical multi-agent guidance. Every sentence earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's 13 parameters and no output schema, the description covers the core purpose and provides crucial multi-agent context. However, it does not hint at the return value (e.g., engram ID), which is a minor gap. Overall, it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (all 13 parameters have descriptions in the input schema). The description does not add extra meaning beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Create an engram — record a reusable learning, preference, or correction.' It uses a specific verb ('Create') and resource ('engram'), and the multi-agent note provides additional context that distinguishes it from sibling tools like plur_learn_batch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides when-not-to-use guidance: in a multi-agent orchestration, spawned subagents should not call this tool; instead, they should return findings as text for the parent to persist. It also explains why (tool availability not guaranteed). This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_learn_batchA

Create many engrams in one call — the batch form of plur_learn. Accepts an array of engram objects and writes them sequentially through the SAME dedup + policy pipeline as plur_learn (content-hash NOOP → semantic recall → LLM ADD/UPDATE/MERGE decision). Dedup also applies WITHIN the batch: a statement duplicating an earlier item in the same array resolves to NOOP against it. Returns ids aligned 1:1 with the input array (ids[i] is the engram id for input i, or null if input i failed), the per-item decisions (each carrying its input_index), aggregate stats, and any per-item failures (each with its input index) — a single bad item does not abort the batch. Use this when an orchestration fans out and wants to persist consolidated findings without N separate calls. LLM dedup calls are capped (default 50, override with max_llm_calls) to bound bulk-import cost. Note: unlike plur_learn, batch items take the LOCAL learn path — remote-scope auto-routing (learnRouted) is not applied per item, so for shared/remote-store writes prefer plur_learn or pass an explicit local scope. See plur-ai/plur#281.

ParametersJSON Schema
NameRequiredDescriptionDefault
engramsYesEngram objects to persist. Each requires `statement`; the other fields mirror plur_learn.
max_llm_callsNoMax LLM dedup calls across the whole batch (default 50). Once spent, remaining items use the cheap hash/cosine path. Pass a large number to opt out.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description extensively explains dedup pipeline (content-hash NOOP → semantic recall → LLM decision), within-batch dedup, per-item results, non-abort on failure, and LLM call cap. Annotations (idempotentHint=false, destructiveHint=false) are complemented, not contradicted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is front-loaded with purpose and structured well, but slightly lengthy. However, every sentence adds value—no filler. Could be more concise, but given the complexity, it's appropriately detailed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 2 parameters, 100% schema coverage, and no output schema, the description covers return values (`ids`, decisions, stats, failures), dedup behavior, failure handling, and usage nuances. It leaves no critical gaps for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3). Description adds value by explaining that `engrams` mirrors `plur_learn` fields and clarifying `max_llm_calls` default and behavior. While schema already describes individual fields, the context of batch operation and the LLM call cap are useful beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Create many engrams in one call' and explicitly positions itself as 'the batch form of plur_learn.' It distinguishes from the single-item sibling and details the dedup pipeline, providing a specific verb+resource+scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance: 'Use this when an orchestration fans out... without N separate calls.' Also warns against using for remote/shared stores ('for shared/remote-store writes prefer plur_learn or pass an explicit local scope'), and explains the max_llm_calls cap for cost control.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_meta_engramsA
Read-onlyIdempotent

List existing meta-engrams (engrams with META- prefix) with their structural templates and confidence scores

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 20)
domainNoFilter by domain prefix (e.g. meta, meta.trading)
min_confidenceNoMinimum composite confidence score (0-1)
hierarchy_levelNoFilter by hierarchy level

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint; description adds that it returns templates and confidence scores, but doesn't disclose additional behavioral traits beyond what annotations and schema imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no redundant words; clearly conveys purpose and what is returned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description adequately explains return content (structural templates, confidence scores). All 4 optional parameters are described in schema; the description implies filtering but lacks explicit statements about ordering or pagination.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter has a description. The tool description does not add additional meaning beyond the schema, baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool lists meta-engrams with specific properties (structural templates, confidence scores), distinguishing it from other tools like plur_extract_meta and plur_validate_meta that perform different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives; usage is implied by the description but no when-not-to-use or alternative naming.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_packs_discoverB
Read-onlyIdempotent

Browse available engram packs from the registry — discover curated expertise packs to install

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFilter by tags
queryNoSearch query to filter packs by name or description
categoryNoFilter by category (e.g., devops, trading, writing)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint, openWorldHint, idempotentHint) already convey safety and non-destructiveness. The description adds 'browse' and 'discover', which align with read-only behavior but do not disclose additional traits like result limits, pagination, or data freshness. Since annotations carry the transparency burden, a score of 3 reflects minimal added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with clear verb 'Browse' upfront. No filler words. Every word earns its place, making it concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple browse/search tool with optional parameters and comprehensive annotations, the description is largely sufficient. It lacks output format details (e.g., list of pack names and metadata), but the read-only and open-world hints partially compensate. A small gap exists, so 4 is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all three parameters described. The description adds no parameter-specific info; it remains generic. Baseline for high coverage is 3, and the description does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool browses available packs from the registry, with verbs 'browse' and 'discover'. It implies discovery of new packs, distinguishing from sibling tools like plur_packs_list (likely listing installed packs) and plur_packs_install. However, it does not explicitly differentiate from all siblings, so a 4 is appropriate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The description does not mention conditions, exclusions, or refer to sibling tools. The agent receives no help in choosing between plur_packs_discover and similar tools like plur_packs_list or plur_packs_preview.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_packs_exportA

Export engrams as a shareable thematic pack with privacy scanning and integrity hash. Filters out private and secret-containing engrams automatically. Output goes to ~/plur-packs/ by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPack name (e.g. "react-patterns", "mcp-design")
creatorNoCreator name
output_dirNoOutput directory (default: ~/plur-packs/<name>)
descriptionNoPack description
filter_tagsNoFilter by tags
filter_typeNoFilter by engram type
filter_scopeNoFilter engrams by scope (e.g. "global", "project:myapp")
filter_domainNoFilter engrams by domain prefix (e.g. "mcp", "trading")

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide non-idempotent and non-destructive hints. Description adds behavioral details: automatic filtering of private engrams, integrity hash generation, default output directory. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with key action and features. No extraneous information. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters and no output schema, the description covers purpose, default behavior, and filtering. It lacks details on output format or return values, but the tool's name and context make the intent reasonably clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter has a description. The tool description adds minimal extra meaning beyond the schema (e.g., default output dir). Baseline is 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports engrams as a shareable thematic pack with privacy scanning and integrity hash. It distinguishes from sibling tools like plur_packs_install and plur_packs_list by focusing on export functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives (e.g., plur_packs_preview). It implies it's for exporting packs but doesn't specify contexts such as 'use when you need a shareable package' or 'avoid when you just want to preview'. No exclusions or when-not-to-use advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_packs_installA
Idempotent

Install an engram pack from a directory path. Runs a mandatory security scan (blocks if secrets found), detects conflicts with existing engrams, and records install metadata in the registry. Call plur_packs_preview first to show the user what the pack contains.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesPath to the pack directory to install

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (idempotentHint, destructiveHint) are minimal. The description adds valuable behavioral details: mandatory security scan that blocks on secrets, conflict detection, and metadata recording. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. First sentence states the core action; second adds critical context (security scan, conflict detection, metadata, and reference to preview tool).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter install tool with no output schema, the description covers key behaviors (security, conflicts, metadata). Missing return value info or error scenarios, but adequate for the scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter 'source'. The description repeats 'directory path' but adds no new semantic info beyond the schema's parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool installs an engram pack from a directory path, with specific actions like security scans and conflict detection. It distinguishes itself from sibling tools like plur_packs_preview and plur_packs_uninstall.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises calling plur_packs_preview first, providing clear usage guidance. It doesn't specify when not to use the tool, but the mention of the prerequisite is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_packs_listA
Read-onlyIdempotent

List all installed engram packs with integrity hashes, install dates, and source paths

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and idempotentHint. The description adds behavioral context by specifying return fields (integrity hashes, install dates, source paths), which is useful beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence of 13 words, front-loaded with the key action and resource. No wasted words; every part adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose and return fields. No output schema exists, but the description partially compensates. Could mention pagination or ordering, but not necessary for this simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is 100%. The description is not required to elaborate on parameters. A baseline of 4 is appropriate for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List', the resource 'installed engram packs', and specific attributes (integrity hashes, install dates, source paths). It distinguishes from siblings like plur_packs_install and plur_packs_preview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing installed packs but does not explicitly state when to use vs alternatives like plur_packs_preview or plur_packs_discover. No exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_packs_previewA
Read-onlyIdempotent

Preview a pack before installing — shows manifest, engram list, security scan, and warnings. Always call this before plur_packs_install to let the user review what they are importing.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesPath to the pack directory to preview

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and description reinforces read-only preview nature, adding detail on what is shown. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. Information is front-loaded and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given simple tool structure (1 param, no output schema), description fully covers purpose, behavior, and usage. Annotations fill the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter 'source' is well-described in schema with 100% coverage. Description implicitly confirms its use without adding syntax details, which is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Preview a pack before installing' and lists specific outputs (manifest, engram list, security scan, warnings). Distinguishes from sibling plur_packs_install.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Always call this before plur_packs_install' providing clear when-to-use guidance. Could mention when not to use but still strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_packs_uninstallA
Destructive

Uninstall an engram pack by name — removes the pack and all its engrams

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPack name to uninstall (use plur_packs_list to see names)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false. The description adds that uninstalling removes all engrams in the pack, which is consistent and provides useful context beyond annotations. However, it lacks details on reversibility, permissions, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the action, resource, and effect without unnecessary words. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema, clear annotations), the description is complete. It covers the tool's purpose, the consequence of use, and where to find the required input.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'name' has schema description 'Pack name to uninstall (use plur_packs_list to see names)'. This adds practical guidance on how to obtain valid input, which goes beyond the schema definition. Schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'uninstall' and resource 'engram pack', and the effect 'removes the pack and all its engrams'. It differentiates from sibling tools like plur_packs_install and plur_packs_list through the destructive action, but does not explicitly compare.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as plur_packs_preview or plur_packs_export. There is no mention of prerequisites, preconditions, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_pinA
Idempotent

Toggle the always-load (pinned) flag on an engram. Pinned engrams bypass the keyword-relevance gate at injection time and are eligible for loading on every session, regardless of overlap with the user task. Use sparingly — meta-rules, safety conventions, core operating principles. Pass {id, pinned:true} to pin or {id, pinned:false} to unpin. List current pinned with {list:true}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoEngram ID to pin or unpin
listNoIf true, just return the current set of pinned engrams (no mutation)
pinnedNoTarget value (default true)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavioral effects beyond annotations: pinned bypasses relevance gate and is persistent. Annotations already indicate idempotent and non-destructive; no contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise and well-structured: opens with purpose, explains significance, then provides usage patterns. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all essential behaviors (pin, unpin, list) but lacks explicit description of return values or success indications. Adequate for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds value by explaining the role of each parameter with examples, such as 'Pass {id, pinned:true} to pin'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: 'Toggle the always-load (pinned) flag on an engram.' It explains the concept of pinning and distinguishes from siblings by focusing on this unique operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance to use sparingly and gives usage examples for pin, unpin, and list. Lacks explicit differentiation from sibling tools, but the unique purpose is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_profileA
Read-onlyIdempotent

Generate or retrieve a cognitive profile — a narrative summary synthesized from stored engrams. Cached for 24h.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoFilter engrams by scope
llm_modelNoModel name
llm_api_keyNoAPI key for the LLM
llm_base_urlNoOpenAI-compatible API base URL
force_regenerateNoForce regeneration (default false)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate read-only and idempotent behavior. The description adds that results are cached for 24 hours, which is a useful behavioral detail. No contradictions with annotations. It could further explain whether generation triggers any side effects, but overall it is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences that front-load the core action. While it lacks structured details like bullet points, the brevity is appropriate for a straightforward tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate but misses some context given no output schema. It does not explain the format or content of the cognitive profile, which would help agents understand what to expect. For a tool with 5 parameters, additional details about when to use parameters like force_regenerate would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description does not add extra meaning beyond the schema, which is acceptable. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to generate or retrieve a cognitive profile synthesized from stored engrams. It uses specific verbs and resource, distinguishing it from siblings like plur_recall or plur_meta_engrams by focusing on a narrative summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that the tool is for generating/retrieving a cached profile, but it does not explicitly state when to use it over alternatives or provide exclusions. It mentions caching but lacks guidance on when to force regeneration or choose this over similar tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_promoteB
Idempotent

Activate candidate engrams so they appear in injection results

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSingle engram ID to promote
idsNoMultiple engram IDs to promote

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false. The description adds that it activates engrams to appear in injection results, which is consistent and provides some behavioral context, but no additional details about side effects or state changes are given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence that communicates the core functionality without unnecessary words or structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no output schema and annotations, the description provides minimal but adequate context. Missing details like what 'candidate' means or idempotent behavior, but annotations compensate partially.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters ('Single engram ID to promote' and 'Multiple engram IDs to promote'). The tool description does not add further meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Activate' and the resource 'candidate engrams' with a specific outcome 'appear in injection results'. It vaguely distinguishes from siblings like plur_inject but does not explicitly differentiate from similar tools like plur_pin.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., plur_inject, plur_pin). The description does not mention prerequisites, conditions, or excluded use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_recallA
Read-onlyIdempotent

Query engrams by BM25 keyword matching — use plur_recall_hybrid for semantic similarity. Note: a project-scope filter also returns personal-family engrams (local, global, user:, agent:); an explicit scope=global recall returns ALL personal-family engrams — wider than scope=global INJECT, which is targeted to the global namespace only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 20)
queryYesSearch query to find relevant engrams
scopeNoFilter by scope (also includes global)
budgetNoBudget constraints for sub-agents
domainNoFilter by domain prefix
caller_session_idNoCaller session ID for budget enforcement

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses important behavioral details beyond annotations, such as scope filtering returning personal-family engrams and the difference between recall and inject behavior. No contradictions with annotations (readOnly, idempotent).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. First sentence front-loads purpose, second provides critical caveats. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (6 params, nested objects, no output schema), the description covers key behavioral nuances and usage context. Slightly incomplete regarding return format or pagination, but sufficient for tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3). The description adds significant context for the 'scope' parameter, clarifying its behavior, which goes beyond the schema description. Other parameters not elaborated, but still above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Query engrams by BM25 keyword matching', specifying the verb, resource, and method. It also distinguishes from the sibling tool plur_recall_hybrid, enhancing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'use plur_recall_hybrid for semantic similarity', and details scope behavior nuances, helping the agent decide when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_recall_hybridA
Read-onlyIdempotent

Hybrid search — BM25 + local embeddings merged via Reciprocal Rank Fusion. No API calls, fully local. Best default for most use cases.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 20)
queryYesSearch query to find relevant engrams
scopeNoFilter by scope (also includes global)
budgetNoBudget constraints for sub-agents
domainNoFilter by domain prefix
include_episodesNoIf true, include linked episode summaries for each engram (SP2 episodic anchoring)
caller_session_idNoSession ID of calling agent for budget enforcement

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly and idempotent. Description adds that it's fully local and uses specific algorithms, adding behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no filler. Front-loaded with key purpose. Every part is meaningful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does not explain return values. Schema covers parameters. Lacks details on what the result structure looks like, but annotations reduce that burden. Adequate for a simple search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are documented. Description does not add extra meaning for parameters, but the algorithmic context helps understand the query parameter. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states hybrid search using BM25 and local embeddings with RRF, distinguishing it from plausible siblings like plur_recall or plur_similarity_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly calls it 'Best default for most use cases,' guiding the agent to prefer this tool initially. Lacks explicit when-not-to-use but provides positive guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_report_failureA

Report a failure for a procedural engram — triggers procedure evolution via LLM if configured. Only works on procedural engrams. Max 3 revisions per procedure per 24h.

ParametersJSON Schema
NameRequiredDescriptionDefault
engram_idYesID of the procedural engram that failed
llm_modelNoModel name (default: gpt-4o-mini)
llm_api_keyNoAPI key for the LLM
llm_base_urlNoOpenAI-compatible API base URL for procedure evolution
failure_contextYesDescription of what went wrong when following this procedure

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide idempotentHint=false and destructiveHint=false. The description adds that failure reporting triggers evolution via LLM if configured, and imposes a revision limit, which are important behavioral traits beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose. No wasted words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description explains the outcome (triggers evolution) and constraints. The tool is simple enough that this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with clear parameter descriptions. The tool description adds context about the LLM-triggered evolution, giving extra meaning to the llm_* parameters. This goes beyond the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (report failure), the target (procedural engram), and the effect (triggers procedure evolution via LLM). It distinguishes from sibling tools like 'plur_feedback' by specifying the procedural engram requirement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies that the tool only works on procedural engrams and includes a rate limit (max 3 revisions per procedure per 24h). It does not explicitly state when not to use it or list alternatives, but the context is clear enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_scopes_discoverA
Idempotent

Discover which scopes your remote token is authorized for via the enterprise server (GET /api/v1/me), and which of those are not yet registered locally. Read-only by default; pass register:true to register all authorized-but-unregistered scopes in one step. Only shared-family scopes (group:/project:/space:/team:/org:/public) are auto-registered — personal-family scopes (global/local/user:/agent:) advertised by /me are skipped and surfaced in the result. Use this when you have access to multiple team scopes on one server.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoLimit discovery to this remote URL (default: all configured remote stores)
registerNoRegister all authorized-but-unregistered scopes (default false — discovery is read-only)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses default read-only behavior, the effect of register:true, and which scopes are auto-registered (shared vs personal). Annotations confirm idempotent but no contradictions. Missing details on auth requirements or response format but adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences with clear front-loading of purpose. Every sentence adds unique value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Well-described for a tool with no output schema and two optional params. Explains when to use, effect of params, and which scopes are handled. Could include response format but not required given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant meaning beyond schema: explains default behavior of url parameter and the effect of register parameter. Schema coverage is 100% but description enriches understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool discovers authorized scopes and differences from local registration. It distinguishes from siblings by specifying usage for multiple team scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage context: 'when you have access to multiple team scopes on one server.' Explains when to use register:true but does not explicitly state when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_session_endA

End a session. BEFORE calling this tool, review the conversation and extract learnings:

  1. Corrections the user made ("no, use X not Y") → type: behavioral

  2. Preferences stated ("always X", "never Y") → type: behavioral

  3. Codebase patterns discovered (naming, structure, conventions) → type: architectural

  4. Technical facts learned (API quirks, config, gotchas) → type: procedural

  5. Terminology defined or clarified → type: terminological

Include at least one engram_suggestion if ANYTHING was learned. An empty suggestions array means nothing worth remembering happened — this should be rare.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYesWhat happened in this session (1-3 sentences)
session_idNoSession ID from plur_session_start
engram_suggestionsYesLearnings from this session. Preferred shape is {statement: "...", type?: "..."}; bare strings are also accepted and treated as the statement. Review the conversation for corrections, preferences, patterns, and technical facts before calling.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations by detailing the requirement to supply learnings, which are presumably stored. However, it does not explain side effects of ending the session (e.g., invalidation, cleanup) or clarify the non-destructive nature implied by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise, starting with the core purpose and then listing extraction categories. While each sentence serves a purpose, the list could be streamlined without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no output schema, few parameters), the description covers the necessary invocation details: how to fill summary and engram_suggestions. It lacks information about return values or session state after ending, but that is arguably inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description elaborates on the input schema, providing examples and guidelines for engram_suggestions (object shape with type and statement, bare strings accepted) and summary format (1-3 sentences). This adds value beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'End a session' as the primary action, providing a specific verb and resource. While it does not explicitly differentiate from siblings, the sibling list includes plur_session_start, making the counterpart clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the tool: before calling, the agent must review the conversation and extract learnings. It also specifies conditions for including engram_suggestions (at least one if anything learned, empty array rare). No alternative tools are discussed, but none are relevant for ending a session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_session_startB
Read-only

Start a session — inject relevant engrams for your task. Call at the beginning of every session.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags to filter injected engrams
taskYesWhat you are working on (triggers engram injection)
default_scopeNoDefault scope for plur_learn calls this session when no explicit scope is provided. Only set this if you want ALL engrams to route to a specific store. Usually, leave unset and pass scope per-engram based on relevance.

TDQS

B3.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description uses 'inject relevant engrams,' implying a write operation, but annotations declare readOnlyHint=true. This contradiction misleads about the tool's behavioral safety. Additionally, no other behavioral traits (e.g., side effects on persistent state) are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences, with the purpose front-loaded. Every sentence is necessary and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a session-start tool with 3 parameters and no output schema, the description is too minimal. It lacks details on session lifecycle, idempotency (idempotentHint=false), and interaction with other tools like plur_inject. More context is needed for complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no extra meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Start a session — inject relevant engrams') and the resource ('session'). It distinguishes from siblings like plur_session_end by specifying it is for starting a session, called at the beginning.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Call at the beginning of every session,' providing clear when-to-use guidance. It does not mention exclusions or alternatives, but the context is well-defined by the sibling tool plur_session_end.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_statusA
Read-onlyIdempotent

Return system health — running version, engram count, episode count, pack count, storage root. Optionally filter engram counts by domain prefix and/or creation date.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoOnly count engrams whose domain starts with this prefix (e.g. "meridian")
created_afterNoISO-8601 date (YYYY-MM-DD). Only count engrams learned on or after this date.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and idempotentHint, so the description does not need to reiterate safety. It adds optional filtering behavior, but does not disclose return format or potential limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences: first covers main purpose, second adds optional filtering. No wasted words, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple status tool with no output schema, the description covers core metrics and optional filters adequately. Lacks return format details but is sufficient given tool simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description essentially restates the schema's parameter descriptions. No additional meaning or usage nuance beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Return system health' and lists specific metrics (version, engram count, etc.). It distinguishes itself from sibling tools like plur_learn or plur_recall, which have different functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for system health checks but does not explicitly state when to use this tool over alternatives or when not to use it. The context is clear but not directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_stores_addA
Idempotent

Register an additional engram store. Either filesystem (path) or remote (url+token, e.g. PLUR Enterprise). One remote URL can host multiple scopes — call once per team scope you are authorized for; each registers independently. Returns status: "added" or "already_registered".

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoRemote store base URL, e.g. https://plur.datafund.io/sse — pair with token
pathNoFilesystem path to engrams.yaml (omit if registering a remote store)
scopeYesScope identifier (e.g. space:1-datafund, group:plur/plur-ai/engineering)
tokenNoBearer token (JWT or plur_sk_... API key) for remote stores
sharedNoWhether this store is git-committed / team-visible (remote stores default true)
readonlyNoWhether this store is read-only (e.g. purchased packs)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true and destructiveHint=false. The description confirms idempotency by stating returns 'added' or 'already_registered'. It also explains that remote URLs can host multiple scopes and that each registration is independent, adding context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences, front-loaded with the core purpose. It efficiently covers both registration types, usage pattern, and return status without unnecessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description adequately mentions the return status ('added' or 'already_registered'). It covers the 6 parameters sufficiently in context, though more detail on the 'shared' and 'readonly' parameters could be beneficial. Overall, it provides enough information for an agent to use the tool correctly alongside the sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. The description adds value by explaining the relationship between url+token vs path, and that 'one remote URL can host multiple scopes — call once per team scope'. It also mentions that shared indicates git-committed/team-visible and readonly for purchased packs, enhancing semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Register an additional engram store' with specific distinction between filesystem (path) and remote (url+token) stores. It also explains that one remote URL can host multiple scopes, differentiating this tool from siblings like plur_stores_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides specific guidance on when to call the tool: 'call once per team scope you are authorized for' for remote URLs. It implies that this tool is for adding new stores, not for listing or other operations. However, it does not explicitly mention when not to use it or compare to other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_stores_listA
Read-onlyIdempotent

List all configured engram stores with their scope, path, and engram count. When a store declares self-describing scope metadata, its description and covers (topics the scope is the home for) are included so you can pick the right scope.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows it's safe. The description adds transparency by specifying that the output includes scope, path, engram count, and conditional metadata. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise with two sentences: the first provides the core purpose, and the second adds conditional detail. Every sentence is informative and without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, annotations present, and no output schema, the description sufficiently covers what the tool does and what it returns. It explains the optional inclusion of metadata, which is complete for an agent to decide to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters (0 parameters, schema coverage 100%), so the baseline is 4. The description does not need to add parameter meaning since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs ('List') and resources ('configured engram stores') and details the output fields (scope, path, engram count, and optional description/covers). It clearly distinguishes from sibling tools like plur_stores_add (add) and plur_scopes_discover (discover scopes).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the tool lists all configured stores and helps pick the right scope, implying use when you need an overview of stores. It does not explicitly exclude alternatives or state when not to use, but the context is clear given it's the only listing tool for stores.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_suggest_scopeA
Read-onlyIdempotent

Suggest which registered scope(s) an engram belongs in, ranked by fit. Deterministic — no LLM, no network. Scores the statement keywords, optional domain (a dotted namespace like "plur.core.security"), and tags against the covers[] each scope declares. ADVISORY ONLY: this does not route or store anything; pass the chosen scope to plur_learn yourself. Returns candidates sorted by confidence (empty when nothing matches).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional tags on the engram
domainNoOptional dotted namespace for the engram (e.g. "plur.core.security") — strongest routing signal
statementYesThe engram statement to route

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and idempotentHint; description reinforces determinism and no side effects, expands with 'no LLM, no network' and advisory nature. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences, each adding value: purpose, determinism, advisory note, return format. Front-loaded with main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Explains input usage, behavior, and output format. Lacks detailed candidate structure but sufficient given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, description adds meaning by explaining how parameters are scored (keywords, domain, tags) and that domain is strongest signal, beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it suggests scopes for an engram ranked by fit, distinguishes from routing tools by stating it's advisory only, and differentiates from siblings like plur_learn.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use (to determine scope), what it does not do (route or store), and directs to plur_learn for actual storage. Also explains return expectations (empty when nothing matches).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_syncA
Idempotent

Sync engrams via git AND refresh the derived index from YAML. Initializes repo on first call, commits and pushes/pulls on subsequent calls. Provide a remote URL on first call to enable cross-device sync. Pass full=true to drop-and-rebuild the index from YAML (recovery path; YAML stays untouched).

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoFull reindex: drop the derived index (PGLite/SQLite) and rebuild from YAML. YAML is never modified. Use to recover from an out-of-sync index.
remoteNoGit remote URL (e.g. git@github.com:user/plur-engrams.git). Only needed on first call to set up remote.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint and non-destructiveHint. The description adds behavioral detail: git operations (commit, push, pull), repo initialization, and the drop-and-rebuild with full=true, all consistent with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each adding value: overall purpose, first vs subsequent calls, and parameter-specific guidance. No wasted words, front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given two optional params, no output schema, and good annotations, the description covers main behavior, lifecycle, and recovery. Could mention return values or error cases, but not essential for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions. The description adds a bit of context (e.g., 'recovery path' for full), but does not significantly augment the schema's parameter documentation. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear, specific action: 'Sync engrams via git AND refresh the derived index from YAML.' It names the resource (engrams), mechanism (git), and distinct behavior (index refresh), differentiating from siblings like plur_sync_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: first call initializes repo, remote URL enables cross-device sync, subsequent calls commit/push/pull, and full=true is for recovery. Lacks explicit 'when not to use' or alternatives, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_sync_statusA
Read-onlyIdempotent

Check git sync status — whether repo is initialized, has remote, is dirty, ahead/behind counts

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and idempotentHint, indicating safe read-only behavior. The description adds valuable context about the specific status fields (initialized, remote, dirty, ahead/behind), which helps the agent understand the tool's output, though it does not detail other behavioral traits like lack of side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core purpose ('Check git sync status') and efficiently lists the specific checks. Every word adds value, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and no output schema, the description adequately lists the status components returned. However, it does not describe the output format (e.g., string, booleans, counts) which could help the agent better interpret results. Still, it provides sufficient information for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%, so the description does not need to explain parameters. Per instructions, baseline is 4 for no parameters, and the description adds no additional parameter info, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks git sync status, specifying exactly what aspects are covered: initialization, remote existence, dirty state, and ahead/behind counts. The verb 'Check' and resource 'git sync status' are specific and distinguish this from tools like 'plur_sync' that perform sync actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus its siblings, such as 'plur_status' or 'plur_sync'. It does not mention any prerequisites, exclusions, or alternatives, leaving the agent to infer context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_tensionsA
Idempotent

Tension lifecycle (#181). Default: list persisted tension records (unresolved first). scan:true runs an LLM contradiction scan, persists NEW detections as records, and skips already-recorded pairs. Lifecycle actions: action:"confirm" (real conflict), action:"dismiss" (false positive — pair suppressed from future scans), action:"resolve" + winner: (loser engram retired). Scan requires OPENAI_API_KEY or OPENROUTER_API_KEY env var, or explicit llm_base_url + llm_api_key args.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoTension record id (T-YYYY-MMDD-NNN) for action mode
scanNoRun an active contradiction scan using an LLM judge. New detections are persisted as tension records; recorded pairs (any status) are skipped. Requires OPENAI_API_KEY or OPENROUTER_API_KEY env var, or explicit llm_base_url + llm_api_key args.
scopeNoFilter by scope
actionNoLifecycle action on a persisted tension record (requires id). confirm: mark real. dismiss: false positive, suppress the pair. resolve: pick winner (requires winner), the losing engram is retired.
domainNoFilter by domain prefix
statusNoList-mode status filter. Default: unresolved records (detected + confirmed).
winnerNoEngram id that wins the tension (action:"resolve" only). The other engram is retired.
persistNoPersist scan detections as tension records (default true). Set false for a dry-run scan that also ignores the recorded-pair suppress list.
llm_modelNoModel name for scan mode (default: gpt-4o-mini)
max_pairsNoMaximum candidate pairs to evaluate in scan mode (default: 50)
batch_sizeNoPairs judged per LLM call in scan mode (default: 5). Set to 1 for sequential single-pair judging.
llm_api_keyNoAPI key for the LLM (scan mode)
llm_base_urlNoOpenAI-compatible API base URL for scan mode (e.g. https://api.openai.com/v1)
min_confidenceNoMinimum confidence threshold for scan mode (0–1, default: 0.7)
temporal_discountNoMultiply judge confidence by a days-apart ladder (same day x1.0 ... 15+ days x0.3) in scan mode (#240). Overrides the config default (tensions.temporal_discount, off by default). The judge prompt already carries recorded dates; enable this only when date-aware judging alone leaves too many temporal-evolution false positives.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes side effects: scan persists new detections, actions mutate records (confirm, dismiss, resolve). Also mentions env var requirement and temporal discount. Annotations already note non-readOnly and idempotent; description adds concrete mutation details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single paragraph of ~150 words, front-loads default behavior. Somewhat dense but each sentence adds value. Could benefit from bullet points or clearer mode separation for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers lifecycle and scanning details well, but lacks description of return values/format for list, scan, and actions. With no output schema, the description should indicate what the tool returns to be fully useful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds value with contextual details (e.g., scan skips recorded pairs, temporal discount ladder). Not all parameters get extra context, but meaningful added explanation beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool manages tension lifecycle, with specific modes: listing unresolved tensions, scanning for contradictions, and performing lifecycle actions. It distinguishes from siblings like plur_tensions_purge by covering the full lifecycle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit context for when to use each mode (list default, scan with API key, action with id). Implicitly tells when not to use scan without credentials. Could be improved by explicitly stating when to use alternatives, but current guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_tensions_purgeA
DestructiveIdempotent

Purge all conflict relations from local engrams — removes accumulated false positives from the legacy tension-detection system

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint and destructiveHint. The description adds minimal new behavioral context beyond the stated purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, well-structured sentence that immediately conveys the action and purpose with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a simple parameterless tool with adequate annotations. Could mention that it operates on local data only, but not strictly necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so baseline 4 applies. Description does not need to explain parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action ('Purge all conflict relations') and the resource ('local engrams'), with additional context ('removes accumulated false positives from the legacy tension-detection system'). This distinguishes it from sibling tools like plur_tensions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. The function is implied as cleanup for false positives, but alternatives or prerequisites are not mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_timelineA
Read-onlyIdempotent

Query the episodic timeline — retrieve past episodes filtered by time, agent, or search

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNoFilter by agent identifier
sinceNoISO date string — only episodes after this time
untilNoISO date string — only episodes before this time
searchNoFull-text search within episode summaries
channelNoFilter by channel

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, idempotent query. The description echoes 'Query' and 'retrieve', which aligns but adds no new behavioral context (e.g., pagination, data freshness, or scope). With annotations covering safety, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action ('Query the episodic timeline') and then elaborates on filters. Every word is needed; no fluff. Extremely concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 optional parameters, no output schema, and no nested objects. The description explains the filtering capability but does not mention the output format or any limitations like pagination. Given the lack of output schema, the description could be more complete. However, annotations cover safety, so it's adequate but not full.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all 5 parameters, so the schema already explains each parameter. The description does not add additional semantics or examples beyond what the schema provides. Baseline score of 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Query the episodic timeline — retrieve past episodes filtered by time, agent, or search'. The verb 'Query' and resource 'episodic timeline' are specific. Among sibling tools like plur_recall, plur_history, etc., this tool is uniquely positioned as a timeline filter query, so it distinguishes well.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving filtered episodes but does not explicitly state when to use this tool versus alternatives (e.g., plur_recall, plur_history). No guidance on when not to use it or prerequisites. Usage context is hinted but not fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plur_validate_metaA

Test a meta-engram template against engrams from a new domain — updates confidence and domain_coverage

ParametersJSON Schema
NameRequiredDescriptionDefault
llm_modelNoModel name (default: gpt-4o-mini)
llm_api_keyYesAPI key for the LLM
test_domainYesDomain to test against (e.g. medicine)
llm_base_urlYesOpenAI-compatible API base URL
meta_engram_idYesMETA- engram ID to validate

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only include idempotentHint=false and destructiveHint=false. The description adds behavioral context by stating it 'updates confidence and domain_coverage', which indicates a mutation. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence of 13 words communicates the tool's purpose without any redundant or unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a simple tool but lacks explanation of the return value, prerequisites (e.g., existence of meta-engram), and any side effects beyond the stated updates. Given no output schema, more detail would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage of parameter descriptions. The description adds no additional parameter-specific details beyond the schema, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it tests a meta-engram template against engrams from a new domain, using specific verbs and resources. It distinguishes itself from sibling tools like plur_extract_meta (extraction) and plur_meta_engrams (listing) by focusing on validation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for validating meta-engrams but provides no explicit guidance on when to use this tool versus its siblings or when not to use it. No alternatives or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 39 tool updatesv0.14.0
    • First observedplur_capture
    • First observedplur_doctor
    • First observedplur_episode_to_engram
    • First observedplur_extract_meta
    • First observedplur_feedback
    • First observedplur_forget
    • First observedplur_history
    • First observedplur_ingest
    • First observedplur_inject
    • First observedplur_inject_hybrid
    • First observedplur_learn
    • First observedplur_learn_batch
    • First observedplur_meta_engrams
    • First observedplur_packs_discover
    • First observedplur_packs_export
    • First observedplur_packs_install
    • First observedplur_packs_list
    • First observedplur_packs_preview
    • First observedplur_packs_uninstall
    • First observedplur_pin
    • First observedplur_profile
    • First observedplur_promote
    • First observedplur_recall
    • First observedplur_recall_hybrid
    • First observedplur_report_failure
    • First observedplur_scopes_discover
    • First observedplur_session_end
    • First observedplur_session_start
    • First observedplur_similarity_search
    • First observedplur_status
    • First observedplur_stores_add
    • First observedplur_stores_list
    • First observedplur_suggest_scope
    • First observedplur_sync
    • First observedplur_sync_status
    • First observedplur_tensions
    • First observedplur_tensions_purge
    • First observedplur_timeline
    • First observedplur_validate_meta

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct operation: engrance CRUD, recall, injection, session lifecycle, pack management, store management, health, conflicts, etc. Even pairs like learn/learn_batch and recall/inject hybrids are clearly differentiated in descriptions, leaving no ambiguity.

Naming Consistency3/5

All tools begin with 'plur_' for consistency, but the naming pattern varies: some are verb_noun (extract_meta, validate_meta), some noun_verb (scopes_discover, packs_list), some single verbs (promote, learn), and some nouns (tensions, history). This mixed pattern makes the set feel less predictable.

Tool Count3/5

With 39 tools, the count is high but reflects the broad scope of the PLUR memory ecosystem (engrams, episodes, packs, stores, sessions, conflicts, meta). While some tools could be parameterized, each serves a specific purpose and justifies its existence, avoiding redundancy.

Completeness5/5

The tool surface covers the full lifecycle of knowledge management: creation, retrieval, injection, feedback, evolution (via tensions), export, sync, and health monitoring. Missing features (e.g., bulk retire) are not critical, and the set provides no dead ends for common tasks.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Local-first cross-agent memory for AI coding agents. Persistent, shared memory over MCP — what you tell one agent can be recalled by another — with all data stored in a single local SQLite file, no cloud and no API keys.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/plur-ai/plur'

If you have feedback or need assistance with the MCP directory API, please join our Discord server