PLUR
OfficialPLUR is a persistent, local-first memory system for AI agents that enables storing, retrieving, and sharing knowledge (engrams) and events (episodes) across sessions and tools — stored as plain YAML on disk.
Core Memory Operations
Learn (
plur_learn,plur_learn_batch) — Store corrections, preferences, conventions, and facts as typed engrams with scope, domain, tags, commitment level, and validity datesRecall (
plur_recall,plur_recall_hybrid) — Search engrams via BM25 keyword matching or hybrid BM25 + embeddings (Reciprocal Rank Fusion)Inject (
plur_inject,plur_inject_hybrid) — Retrieve a token-budget-aware, scored context block of relevant engrams to inject into agent promptsForget (
plur_forget) — Retire outdated engrams without deleting their historyPin (
plur_pin) — Mark engrams to always load, bypassing relevance filteringFeedback (
plur_feedback) — Rate engram usefulness to improve injection quality over timeSimilarity Search (
plur_similarity_search) — Find engrams by cosine similarity, useful for deduplication
Session Lifecycle
Session Start/End (
plur_session_start,plur_session_end) — Inject relevant engrams at session start and extract/persist new learnings at session end
Episodic Timeline
Capture (
plur_capture) — Record timestamped events to the episodic timelineTimeline (
plur_timeline) — Query past episodes by time range, agent, channel, or full-text searchEpisode to Engram (
plur_episode_to_engram) — Promote an episode to a persistent engram
Knowledge Ingestion & Meta-Analysis
Ingest (
plur_ingest) — Auto-extract engram candidates from arbitrary textExtract Meta-Engrams (
plur_extract_meta) — Synthesize higher-order meta-engrams from stored knowledge via LLM pipelineCognitive Profile (
plur_profile) — Generate a narrative summary of stored knowledge
Conflict & Tension Management
Tensions (
plur_tensions) — Scan for contradictions between engrams, confirm/dismiss/resolve themReport Failure (
plur_report_failure) — Report failures on procedural engrams to trigger LLM-driven evolution
Pack Management
Discover, preview, install, uninstall, and export thematic collections of engrams as shareable packs (
plur_packs_*)
Multi-Store & Sync
Sync (
plur_sync) — Git-based sync across devices or to a team remoteAdd/List Stores (
plur_stores_add,plur_stores_list) — Register and manage multiple engram stores (local or remote enterprise)Suggest/Discover Scopes (
plur_suggest_scope,plur_scopes_discover) — Get scope recommendations or discover authorized remote scopes
History & Diagnostics
History (
plur_history) — View the event-sourced audit trail of an engramPromote (
plur_promote) — Activate candidate engrams for injectionStatus/Doctor (
plur_status,plur_doctor) — Check system health and diagnose embedder, search, and remote auth issues
PLUR — Your agents share the same memory
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 initThis 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-appThis 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 initCursor
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 initPLUR 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 --codexRegisters 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 + |
Codex | ✅ | ✅ hooks + |
Cursor | ✅ | ✅ hooks + rules |
OpenClaw | ✅ | ✅ ContextEngine plugin |
Hermes | ✅ | ✅ plugin |
Antigravity CLI ( | ✅ | ✅ hooks + |
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 --antigravityWrites 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 trueThat'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/dshNative, 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/cliThe 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-aiis 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 dashboardOpens 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
pnpmin this project —npm installbreaks 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 fileNew 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 appliesPolarity — 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 injectionSearch 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 |
| Store a correction, preference, or convention |
| Store many engrams in one call (batch dedup + per-item failure isolation) |
| Retrieve relevant memories — hybrid (BM25 + embeddings) by default; |
| Select engrams for current task within token budget |
| Rate relevance (trains quality over time) |
| Retire a memory (activation decays, eventually pruned) |
| Move an existing engram to another scope — personal → team, or back |
| Change the session's default write scope mid-session |
| Record an event — incident, resolution, session milestone |
| Query episode history by time, agent, or channel |
| Extract engrams from text automatically |
| Sync via git. |
| Check system health and engram counts |
| Counted, local report of what your memory retrieved for you |
| 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 nowThe 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, includingvisibility: privateengrams: 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 awarningin 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 isprivate, 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).
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 git —
plur syncis 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 |
Engram engine — learn, recall, inject, search, decay | |
MCP server for Claude Code, Cursor, Windsurf | |
OpenClaw ContextEngine plugin | |
CLI — plur learn / recall / inject / status | |
DeepSeek Harness plugin — engrams in the prompt, no tool call | |
Store migrations, shipped with the release they migrate to | |
Hermes Agent plugin (Python, via CLI bridge) | |
Python SDK — learn/recall/inject for LangChain, llama.cpp, scripts | |
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 frameworksStorage
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 |
| in-memory BM25 + exact cosine |
5,000 and up |
| embedded Postgres + pgvector |
50,000 and up |
| 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 toolsplur_captureA
Append an episode to the episodic timeline — records what happened in a session
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags for categorizing the episode | |
| agent | No | Agent identifier capturing this episode | |
| channel | No | Communication channel (e.g. claude-code, chat) | |
| summary | Yes | What happened or was accomplished | |
| session_id | No | Session identifier for grouping episodes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| retry | No | If true, reset cached embedder failure state and retry the model load before reporting | |
| rerank_eval | No | If 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
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags for the new engram | |
| scope | No | Scope for the new engram | |
| domain | No | Domain tag for the new engram | |
| episode_id | Yes | Episode ID to promote (from plur_timeline) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Filter source engrams by scope | |
| domain | No | Filter source engrams by domain prefix | |
| dry_run | No | If true, extract but do not persist meta-engrams (default: false) | |
| llm_model | No | Model name (default: gpt-4o-mini) | |
| llm_api_key | Yes | API key for the LLM | |
| llm_base_url | Yes | OpenAI-compatible API base URL (e.g. https://api.openai.com/v1) | |
| run_validation | No | Whether to run cross-domain validation (default: false) |
TDQS
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.
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.
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.
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.
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.
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_feedbackBIdempotent
Rate an engram's usefulness — trains injection relevance over time. Supports single or batch mode.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Engram ID (single mode) | |
| signal | No | Feedback signal (single mode) | |
| signals | No | Batch feedback signals |
TDQS
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.
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.
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.
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.
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.
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_forgetADestructiveIdempotent
Retire an engram by ID or search term — marks it as no longer active without deleting history
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Exact engram ID to retire | |
| search | No | Search term to find engram to retire |
TDQS
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.
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.
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.
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.
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.
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_historyARead-onlyIdempotent
View the event-sourced history of an engram or all recent history — shows creation, updates, feedback, and evolution events
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max events to return (default 50) | |
| engram_id | No | Filter history for a specific engram ID. If omitted, returns recent history across all engrams. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Scope to assign to saved engrams | |
| domain | No | Domain to assign to saved engrams | |
| source | No | Source attribution for extracted engrams | |
| content | Yes | Text content to extract learnings from | |
| extract_only | No | If true, return candidates without saving (default false — saves automatically) |
TDQS
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.
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.
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.
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.
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.
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_injectARead-onlyIdempotent
Get a scored context injection for a task — returns directives and considerations within token budget
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The task description to inject context for | |
| scope | No | Scope filter for engram selection | |
| budget | No | Token budget for injection (default 2000) |
TDQS
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.
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.
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.
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.
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.
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_hybridARead-onlyIdempotent
Hybrid injection — BM25 + embeddings for better context selection. Falls back to BM25 if embeddings unavailable. Best default for injection.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The task description to inject context for | |
| scope | No | Scope filter for engram selection | |
| budget | No | Token budget for injection (default 2000) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Searchable keyword tags — contribute to BM25/embedding recall, so concrete keywords pay off | |
| type | No | Category of the engram | |
| scope | No | Namespace, e.g. global, project:myapp | |
| domain | No | Domain tag, e.g. software.deployment | |
| pinned | No | Always-load flag. If true, this engram bypasses the keyword-relevance gate at injection time. Use sparingly: meta-rules, safety conventions, core operating principles only. | |
| source | No | Origin of this knowledge (URL, conversation ref, etc.) | |
| rationale | No | Why this knowledge matters — also enters the search corpus, helps recall by intent not just statement | |
| statement | Yes | The knowledge assertion to store | |
| commitment | No | How firmly the user has committed to this belief (default: leaning) | |
| supersedes | No | Engram 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_from | No | ISO date (YYYY-MM-DD) the knowledge becomes valid — inject/recall skip the engram before this date (#347) | |
| valid_until | No | ISO 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_reason | No | Why this engram is locked (only meaningful when commitment=locked) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| engrams | Yes | Engram objects to persist. Each requires `statement`; the other fields mirror plur_learn. | |
| max_llm_calls | No | Max 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
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.
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.
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.
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.
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.
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_engramsARead-onlyIdempotent
List existing meta-engrams (engrams with META- prefix) with their structural templates and confidence scores
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default 20) | |
| domain | No | Filter by domain prefix (e.g. meta, meta.trading) | |
| min_confidence | No | Minimum composite confidence score (0-1) | |
| hierarchy_level | No | Filter by hierarchy level |
TDQS
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.
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.
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.
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.
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.
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_discoverBRead-onlyIdempotent
Browse available engram packs from the registry — discover curated expertise packs to install
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter by tags | |
| query | No | Search query to filter packs by name or description | |
| category | No | Filter by category (e.g., devops, trading, writing) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Pack name (e.g. "react-patterns", "mcp-design") | |
| creator | No | Creator name | |
| output_dir | No | Output directory (default: ~/plur-packs/<name>) | |
| description | No | Pack description | |
| filter_tags | No | Filter by tags | |
| filter_type | No | Filter by engram type | |
| filter_scope | No | Filter engrams by scope (e.g. "global", "project:myapp") | |
| filter_domain | No | Filter engrams by domain prefix (e.g. "mcp", "trading") |
TDQS
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.
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.
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.
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.
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.
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_installAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Path to the pack directory to install |
TDQS
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.
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.
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.
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.
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.
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_listARead-onlyIdempotent
List all installed engram packs with integrity hashes, install dates, and source paths
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_previewARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Path to the pack directory to preview |
TDQS
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.
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.
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.
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.
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.
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_uninstallADestructive
Uninstall an engram pack by name — removes the pack and all its engrams
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Pack name to uninstall (use plur_packs_list to see names) |
TDQS
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.
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.
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.
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.
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.
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_pinAIdempotent
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Engram ID to pin or unpin | |
| list | No | If true, just return the current set of pinned engrams (no mutation) | |
| pinned | No | Target value (default true) |
TDQS
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.
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.
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.
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.
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.
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_profileARead-onlyIdempotent
Generate or retrieve a cognitive profile — a narrative summary synthesized from stored engrams. Cached for 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Filter engrams by scope | |
| llm_model | No | Model name | |
| llm_api_key | No | API key for the LLM | |
| llm_base_url | No | OpenAI-compatible API base URL | |
| force_regenerate | No | Force regeneration (default false) |
TDQS
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.
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.
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.
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.
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.
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_promoteBIdempotent
Activate candidate engrams so they appear in injection results
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Single engram ID to promote | |
| ids | No | Multiple engram IDs to promote |
TDQS
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.
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.
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.
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.
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.
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_recallARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default 20) | |
| query | Yes | Search query to find relevant engrams | |
| scope | No | Filter by scope (also includes global) | |
| budget | No | Budget constraints for sub-agents | |
| domain | No | Filter by domain prefix | |
| caller_session_id | No | Caller session ID for budget enforcement |
TDQS
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.
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.
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.
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.
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.
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_hybridARead-onlyIdempotent
Hybrid search — BM25 + local embeddings merged via Reciprocal Rank Fusion. No API calls, fully local. Best default for most use cases.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default 20) | |
| query | Yes | Search query to find relevant engrams | |
| scope | No | Filter by scope (also includes global) | |
| budget | No | Budget constraints for sub-agents | |
| domain | No | Filter by domain prefix | |
| include_episodes | No | If true, include linked episode summaries for each engram (SP2 episodic anchoring) | |
| caller_session_id | No | Session ID of calling agent for budget enforcement |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| engram_id | Yes | ID of the procedural engram that failed | |
| llm_model | No | Model name (default: gpt-4o-mini) | |
| llm_api_key | No | API key for the LLM | |
| llm_base_url | No | OpenAI-compatible API base URL for procedure evolution | |
| failure_context | Yes | Description of what went wrong when following this procedure |
TDQS
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.
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.
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.
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.
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.
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_discoverAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Limit discovery to this remote URL (default: all configured remote stores) | |
| register | No | Register all authorized-but-unregistered scopes (default false — discovery is read-only) |
TDQS
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.
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.
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.
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.
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.
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:
Corrections the user made ("no, use X not Y") → type: behavioral
Preferences stated ("always X", "never Y") → type: behavioral
Codebase patterns discovered (naming, structure, conventions) → type: architectural
Technical facts learned (API quirks, config, gotchas) → type: procedural
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.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | What happened in this session (1-3 sentences) | |
| session_id | No | Session ID from plur_session_start | |
| engram_suggestions | Yes | Learnings 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
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.
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.
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.
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.
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.
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_startBRead-only
Start a session — inject relevant engrams for your task. Call at the beginning of every session.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags to filter injected engrams | |
| task | Yes | What you are working on (triggers engram injection) | |
| default_scope | No | Default 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
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.
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.
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.
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.
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.
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_similarity_searchARead-onlyIdempotent
Search engrams by cosine similarity, returning scores. Used for dedup classification — scores > 0.9 indicate duplicates, 0.7-0.9 related, < 0.7 new.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default 20) | |
| query | Yes | Search query to find similar engrams | |
| scope | No | Filter by scope (also includes global) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the tool as read-only and idempotent. The description adds value by explaining the return scores and their interpretation, but this is a natural extension of the output, not additional behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, front-loading the purpose and usage. Every sentence contributes meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity and no output schema, the description adequately explains the return values and their interpretation. However, it could briefly mention the effects of the 'limit' and 'scope' parameters to be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The description does not add any parameter-specific semantics beyond the schema, which is acceptable given the high coverage. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches engrams by cosine similarity and returns scores. It provides a specific use case (dedup classification) with score thresholds, effectively differentiating it from sibling tools like plur_recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the tool is used for dedup classification and gives score thresholds, indicating when it is appropriate. However, it does not specify when not to use it or suggest alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plur_statusARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Only count engrams whose domain starts with this prefix (e.g. "meridian") | |
| created_after | No | ISO-8601 date (YYYY-MM-DD). Only count engrams learned on or after this date. |
TDQS
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.
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.
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.
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.
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.
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_addAIdempotent
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".
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Remote store base URL, e.g. https://plur.datafund.io/sse — pair with token | |
| path | No | Filesystem path to engrams.yaml (omit if registering a remote store) | |
| scope | Yes | Scope identifier (e.g. space:1-datafund, group:plur/plur-ai/engineering) | |
| token | No | Bearer token (JWT or plur_sk_... API key) for remote stores | |
| shared | No | Whether this store is git-committed / team-visible (remote stores default true) | |
| readonly | No | Whether this store is read-only (e.g. purchased packs) |
TDQS
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.
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.
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.
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.
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.
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_listARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_scopeARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags on the engram | |
| domain | No | Optional dotted namespace for the engram (e.g. "plur.core.security") — strongest routing signal | |
| statement | Yes | The engram statement to route |
TDQS
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.
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.
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.
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.
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.
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_syncAIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Full reindex: drop the derived index (PGLite/SQLite) and rebuild from YAML. YAML is never modified. Use to recover from an out-of-sync index. | |
| remote | No | Git remote URL (e.g. git@github.com:user/plur-engrams.git). Only needed on first call to set up remote. |
TDQS
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.
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.
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.
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.
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.
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_statusARead-onlyIdempotent
Check git sync status — whether repo is initialized, has remote, is dirty, ahead/behind counts
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_tensionsAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tension record id (T-YYYY-MMDD-NNN) for action mode | |
| scan | No | Run 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. | |
| scope | No | Filter by scope | |
| action | No | Lifecycle 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. | |
| domain | No | Filter by domain prefix | |
| status | No | List-mode status filter. Default: unresolved records (detected + confirmed). | |
| winner | No | Engram id that wins the tension (action:"resolve" only). The other engram is retired. | |
| persist | No | Persist scan detections as tension records (default true). Set false for a dry-run scan that also ignores the recorded-pair suppress list. | |
| llm_model | No | Model name for scan mode (default: gpt-4o-mini) | |
| max_pairs | No | Maximum candidate pairs to evaluate in scan mode (default: 50) | |
| batch_size | No | Pairs judged per LLM call in scan mode (default: 5). Set to 1 for sequential single-pair judging. | |
| llm_api_key | No | API key for the LLM (scan mode) | |
| llm_base_url | No | OpenAI-compatible API base URL for scan mode (e.g. https://api.openai.com/v1) | |
| min_confidence | No | Minimum confidence threshold for scan mode (0–1, default: 0.7) | |
| temporal_discount | No | Multiply 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
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.
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.
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.
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.
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.
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_purgeADestructiveIdempotent
Purge all conflict relations from local engrams — removes accumulated false positives from the legacy tension-detection system
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_timelineARead-onlyIdempotent
Query the episodic timeline — retrieve past episodes filtered by time, agent, or search
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | Filter by agent identifier | |
| since | No | ISO date string — only episodes after this time | |
| until | No | ISO date string — only episodes before this time | |
| search | No | Full-text search within episode summaries | |
| channel | No | Filter by channel |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| llm_model | No | Model name (default: gpt-4o-mini) | |
| llm_api_key | Yes | API key for the LLM | |
| test_domain | Yes | Domain to test against (e.g. medicine) | |
| llm_base_url | Yes | OpenAI-compatible API base URL | |
| meta_engram_id | Yes | META- engram ID to validate |
TDQS
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.
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.
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.
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.
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.
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.
39 tool updates
v0.14.0- First observed
plur_capture - First observed
plur_doctor - First observed
plur_episode_to_engram - First observed
plur_extract_meta - First observed
plur_feedback - First observed
plur_forget - First observed
plur_history - First observed
plur_ingest - First observed
plur_inject - First observed
plur_inject_hybrid - First observed
plur_learn - First observed
plur_learn_batch - First observed
plur_meta_engrams - First observed
plur_packs_discover - First observed
plur_packs_export - First observed
plur_packs_install - First observed
plur_packs_list - First observed
plur_packs_preview - First observed
plur_packs_uninstall - First observed
plur_pin - First observed
plur_profile - First observed
plur_promote - First observed
plur_recall - First observed
plur_recall_hybrid - First observed
plur_report_failure - First observed
plur_scopes_discover - First observed
plur_session_end - First observed
plur_session_start - First observed
plur_similarity_search - First observed
plur_status - First observed
plur_stores_add - First observed
plur_stores_list - First observed
plur_suggest_scope - First observed
plur_sync - First observed
plur_sync_status - First observed
plur_tensions - First observed
plur_tensions_purge - First observed
plur_timeline - First observed
plur_validate_meta
TDQS
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.
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.
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.
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
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
Portable memory for AI agents: capture once, recall across Claude, Cursor, and any MCP client.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
One memory, every AI: Claude, ChatGPT, Perplexity, Gemini, Cursor, OpenClaw, Hermes, any MCP client.
Related MCP Servers
- AlicenseAqualityAmaintenancePersistent long-term memory for AI agents — semantic recall across Claude, Cursor, ChatGPT & MCP.1051921MIT
- FlicenseNot gradedqualityBmaintenanceLocal-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.-
- AlicenseNot gradedqualityDmaintenanceLocal-first memory for Claude & AI agents with hybrid search, Graph-RAG, and time-travel, runs entirely on your machine.861Apache 2.0
- AlicenseNot gradedqualityAmaintenancePersistent, local memory for AI coding agents that learns how you work, not just what you said. Supports Claude Code, Codex CLI, Cursor, and any MCP client.67MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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