Skip to main content
Glama
vbcherepanov

total-agent-memory

total-agent-memory

The only memory layer that learns how you work — not just what you said. Persistent, local memory for AI coding agents: Claude Code, Codex CLI, Cursor, any MCP client. Temporal knowledge graph · procedural memory · AST codebase ingest · cross-project analogy · 3D WebGL visualization.

Version Tests IDEs LongMemEval R@5 LoCoMo R@5 BEAM R@5 vs Supermemory p50 latency Local-First License MCP npm PyPI Docker GHCR Homebrew Donate

Why this, not mem0 / Letta / Zep / Supermemory / Cognee?docs/vs-competitors.md


v13.0.0 — MCP 2026-07-28, and honest benchmarks (2026-08-27)

Upgrade if you installed after the MCP Python SDK went 2.0. The 2.x line dropped the @Server.list_tools() / @Server.call_tool() decorators this server was built on, and the dependency was floored at mcp[cli]>=1.0.0 — so every fresh pip / uvx / npx / brew / docker install resolved 2.x and died at import. Existing installs kept working only because their pinned 1.x never moved.

Protocol. Tools now register through whichever API the installed SDK exposes, and the server serves both protocol eras from one process: the stateless 2026-07-28 revision — tools/list, server/discover and tools/call with no initialize handshake, protocol metadata per request — alongside the legacy handshake for clients on older SDKs. JSON-answering tools return structuredContent, so clients stop re-parsing strings, and all 74 tools carry readOnlyHint / destructiveHint / idempotentHint annotations that clients use to decide what runs without a confirmation prompt.

Claude Code plugin. The MCP server, the memory-protocol skill and the seven capture hooks now install in one step:

/plugin marketplace add vbcherepanov/total-agent-memory
/plugin install total-agent-memory@vbcherepanov

LongMemEval now measures the product. The runner had its own self-contained BM25 / RRF / MMR / CrossEncoder stack, so the published 96.2% described an algorithm rather than this software. A new --modes store — now the default — ingests each haystack into a real Store and queries Recall.search. Re-measured: 95.1% R@5, 27.6 ms per query.

Benchmarks that no longer measure themselves. Recall.search bumps recall_count on every row it returns, and the scorer adds recall_boost = min(0.3, recall_count * 0.05). Spaced repetition is wanted in normal use and fatal for measurement: successive runs against one database scored 0.547 → 0.565 → 0.588 → 0.607 R@5 without a line of retrieval code changing. Both runners now pass record_usage=False, a clean run and a re-run are byte-identical, and every number below was re-measured on that basis. The LoCoMo runner had also been printing categories 2 and 3 under each other's labels.

BEAM (ICLR 2026) is now part of the suite — retrieval across its ten memory abilities at the 100K / 500K / 1M scales, graded against each probe's source_chat_ids with no LLM in the loop.

And ~3 GB it could not reach (13.0.2). The base install resolved sentence-transformers, transformers, FlagEmbedding and peft, each of which resolves torch, which on Linux resolves the entire nvidia-cu* set: 147 packages and ~3,108 MB of wheels against 97 and ~113 MB without them. The Glama build sandbox simply ran out of disk unpacking nvidia-cudnn-cu13. Yet the default configuration cannot touch any of it — MEMORY_MODE=fast disables the reranker, and the same mode's MEMORY_ALLOW_OLLAMA_IN_HOT_PATH=false is the flag that gates the SentenceTransformer fall-through in Recall._compute. The stack now lives in a rerank extra, and the mirror of the dependency-drift test keeps it there. Every installer was also warming all-MiniLM-L6-v2 — the fallback model, not the one the server embeds with — into a cache nothing reads.

The server was carrying ~450 MB it never used. chromadb and sentence_transformers were imported at module scope, both are fallback paths, and the second pulls in torch — so every user paid for a stack that fastembed made unnecessary. Deferring them took import server from 558 MB to 116 MB and a serving process from 1367 MB to 909 MB. Reported by d.snezhinskiy. A failed fastembed init also stops being a single log line: it now names the cache and the memory cost, because a macOS-purged model cache is the usual reason a memory server suddenly wants 1.5 GB.

Bugs worth naming — all of the "works in a checkout, silently dead when installed" kind. tree-sitter-language-pack was in no requirements file, so "AST codebase ingest, 9 languages" degraded to whole-file chunks for everyone. vocabularies/ and filters/ never made it into the wheel or the image, so canonical tag normalisation ran against an empty vocabulary and every memory_save(filter=…) was a no-op. The enrichment worker shared the Store's sqlite connection — safe for reads, not for writes — and long ingests died on cannot start a transaction within a transaction. Migration 028 failed on every fresh database and could never record itself, so it retried on every startup forever (root cause spotted by @juicetin in #12: two owners for one schema change). And ai_layer/verifier.py looked for NLI calibrations at the pre-.tam path.

Full notes in CHANGELOG.md. Earlier releases: v12.4.0 · v12.0.0 · v11.0.


Related MCP server: SharedMemory MCP Server

Table of contents


The problem it solves

AI coding agents have amnesia. Every new Claude Code / Codex / Cursor session starts from zero. Yesterday's architectural decisions, bug fixes, stack choices, and hard-won lessons vanish the moment you close the terminal. You re-explain the same things, re-discover the same solutions, paste the same context into every new chat.

total-agent-memory gives the agent a persistent brain — on your machine, not in someone else's cloud.

Every decision, solution, error, fact, file change, and session summary is:

  • Captured — explicitly via memory_save or implicitly via hooks on file edits / bash errors / session end

  • Linked — automatically extracted into a knowledge graph (entities, relations, temporal facts)

  • Searchable — 6-stage hybrid retrieval (BM25 + dense + graph + CrossEncoder + MMR + RRF fusion), 95.1% R@5 on public LongMemEval

  • Private — 100% local. SQLite + FastEmbed + optional Ollama. No data leaves your machine.


60-second demo

You:     "remember we picked pgvector over ChromaDB because of multi-tenant RLS"
Claude:  ✓ memory_save(type=decision, content="Chose pgvector over ChromaDB",
                       context="WHY: single Postgres, per-tenant RLS")

[3 days later, different session, possibly different project directory:]

You:     "why did we pick pgvector again?"
Claude:  ✓ memory_recall(query="vector database choice")
         → "Chose pgvector over ChromaDB for multi-tenant RLS. Single DB
            instance, row-level security per tenant."

It's not just retrieval. It's procedural too:

You:     "migrate auth middleware to JWT-only session tokens"
Claude:  ✓ workflow_predict(task_description="migrate auth middleware...")
         → confidence 0.82, predicted steps:
             1. read src/auth/middleware.go + tests
             2. update session fixtures in tests/
             3. run migration 0042
             4. regenerate OpenAPI spec
           similar past: wf#118 (success), wf#93 (success)

Benchmarks — how it compares

Everything below is retrieval: does the memory surface the passage that contains the answer, in the top-K? That is the part this project owns — answer quality is bounded above by it, and it can be graded with no LLM in the loop, which makes the numbers deterministic, free, and reproducible on your machine.

Two things to read them honestly:

  • These are the default fast profile — FastEmbed, no reranker, no LLM anywhere in the path. That is what you get after install.sh, not a tuned configuration.

  • Every runner passes record_usage=False. Recall.search normally bumps recall_count, and the scorer adds recall_boost = min(0.3, recall_count × 0.05) — so before v13, each re-run against the same database scored higher than the last, partly measuring its own history. A clean run and a re-run are now byte-identical.

LoCoMo — snap-research/locomo

1,536 gradable questions across 10 long-running conversations (5,882 turns ingested), plus 446 adversarial questions scored separately.

Category

N

R@1

R@5

R@10

MRR

single-hop

282

0.202

0.500

0.638

0.332

temporal

321

0.411

0.689

0.735

0.524

multi-hop

92

0.163

0.413

0.435

0.256

open-domain

841

0.363

0.633

0.712

0.479

overall

1,536

0.331

0.607

0.687

0.448

Latency p50 18.2 ms, p95 55.4 ms. Temporal is the strongest category — the bi-temporal knowledge graph earns its keep. Multi-hop is the weakest and is the v13.1 target.

Reproduce: python benchmarks/locomo_bench.py --wipebenchmarks/results/v13-locomo-retrieval.json

BEAM — Beyond a Million Tokens, ICLR 2026

BEAM is the benchmark that starts where context windows stop: conversations of 100K / 500K / 1M tokens (a separate 10M set goes further), probed across ten distinct memory abilities. Scored here against each probe's source_chat_ids.

Scale 100K — 20 conversations, 5,732 messages, 355 gradable probes:

Ability

N

R@1

R@5

R@10

MRR

contradiction_resolution

40

0.700

1.000

1.000

0.824

temporal_reasoning

40

0.475

0.975

1.000

0.689

knowledge_update

40

0.550

0.925

0.950

0.719

multi_session_reasoning

40

0.375

0.675

0.850

0.486

information_extraction

40

0.400

0.625

0.725

0.503

summarization

36

0.167

0.444

0.556

0.267

preference_following

39

0.077

0.282

0.410

0.169

event_ordering

40

0.025

0.150

0.200

0.074

instruction_following

40

0.025

0.075

0.150

0.054

overall

355

0.313

0.575

0.651

0.423

Latency p50 17.7 ms. The shape is the useful part: contradiction resolution, temporal reasoning and knowledge update are effectively solved, while instruction_following and event_ordering are near-zero — those probes ask whether a stated instruction was followed or in what order things happened, and semantic similarity to the question does not find the message where the instruction was given. Retrieval is the wrong primitive there, and that is the roadmap item.

Scale 500K — 35 conversations, 38,058 messages, 629 gradable probes:

Ability

N

R@1

R@5

R@10

MRR

contradiction_resolution

70

0.714

0.943

0.971

0.828

knowledge_update

69

0.464

0.855

0.899

0.617

temporal_reasoning

70

0.500

0.786

0.871

0.625

multi_session_reasoning

70

0.357

0.614

0.729

0.470

information_extraction

70

0.271

0.443

0.571

0.354

preference_following

70

0.071

0.300

0.471

0.168

summarization

70

0.100

0.286

0.414

0.174

instruction_following

70

0.029

0.157

0.257

0.086

event_ordering

70

0.014

0.029

0.186

0.042

overall

629

0.280

0.490

0.596

0.373

Scale 1M — 35 conversations, 74,630 messages, 625 gradable probes:

Ability

N

R@1

R@5

R@10

MRR

knowledge_update

70

0.529

0.886

0.929

0.677

contradiction_resolution

70

0.686

0.871

0.914

0.772

temporal_reasoning

70

0.371

0.686

0.800

0.508

multi_session_reasoning

70

0.214

0.429

0.600

0.315

information_extraction

70

0.157

0.371

0.500

0.250

summarization

66

0.015

0.288

0.515

0.147

preference_following

69

0.029

0.246

0.406

0.134

event_ordering

70

0.000

0.157

0.329

0.069

instruction_following

70

0.029

0.086

0.200

0.061

overall

625

0.227

0.448

0.578

0.327

How it scales, and what that exposed

Scale

Messages

R@5

search p50

ingest

100K

5,732

0.575

17.7 ms

25.6 msg/s

500K

38,058

0.490

58.5 ms

10.8 msg/s

1M

74,630

0.448

411.5 ms

5.0 msg/s

Recall decays gracefully — 13× the haystack costs 12.7 points of R@5, and the abilities that hold up (knowledge update, contradiction resolution) hold up at every scale. The two curves that do not decay gracefully are the interesting part, and they have separate causes.

Ingest — found and fixed. Throughput fell 5× across the three scales on identical code. The cause was ours: graph/auto_link.py runs on every save and constructed a fresh ConceptExtractor each time. The node-name cache lives on the instance, so it was thrown away immediately and the whole graph_nodes table was re-read per write — 1,000 saves triggered 1,000 full table reads (~139 million rows at the 139k nodes this ingest reaches). Fixed in v13.0.1; counting reads rather than timing makes the check load-independent, and it is now 1 read per 1,000 saves. The ingest column above was measured before that fix and is kept as the record of the problem.

Search — open. p50 grew 7× between 500K and 1M for 2× the data. Store._binary_search loads the binary vectors of every active record into numpy on each query, so search is linear in store size. That is a different problem from the ingest one and is not fixed; an ANN index over the binary vectors is the obvious answer and has not been built yet. Stated rather than buried, because 411 ms is a real number a user would feel.

Reproduce: python benchmarks/beam_bench.py --scale 100K --wipev13-beam-100K.json · v13-beam-500K.json · v13-beam-1M.json

LongMemEval — xiaowu0162/longmemeval-cleaned

470 questions across six question types, re-measured for v13 through the product: each question's haystack is ingested into a real Store and queried with Recall.search, the same path an agent takes.

Question type

Count

R@5 (recall_any)

knowledge-update

72

100.0%

multi-session

121

98.3%

single-session-user

64

95.3%

single-session-assistant

56

94.6%

temporal-reasoning

127

92.9%

single-session-preference

30

80.0%

total

470

95.1%

Also recall_all@5 85.7% (every required fragment, not just one), NDCG@5 88.9%, 27.6 ms per query.

This replaces the 96.2% we published before, and the difference matters more than the 1.1 points. Until v13 this runner used its own self-contained BM25 / RRF / MMR / CrossEncoder stack, so the number described an algorithm, not this software. --modes store drives the shipping path and is now the default. The old modes remain for ablations.

For reference on the same set, Mastra "Observational" reports 95.0% and Supermemory 85.4% — both cloud services.

Reproduce: python benchmarks/longmemeval_bench.py --modes storeevals/longmemeval-2026-08-27-v13-store.json

On end-to-end accuracy numbers

Systems in this space usually publish LoCoMo accuracy — a generator answers from the retrieved context and an LLM judges it. We publish it too, with the two caveats that make it meaningful.

One LLM-judged run is a sample, not a measurement. Temperature 0 does not make the API deterministic and OpenAI documents seed as best-effort, so the runner takes --seed and we report three runs:

Category

N

mean

min

max

spread

single-hop

282

0.366

0.358

0.372

0.014

temporal

321

0.426

0.424

0.427

0.003

multi-hop

96

0.292

0.281

0.302

0.021

open-domain

841

0.570

0.567

0.573

0.006

adversarial

446

0.904

0.899

0.908

0.009

overall (no adversarial)

1,540

0.486 ± 0.002

0.484

0.488

0.005

overall (all)

1,986

0.579 ± 0.002

0.578

0.582

0.004

gpt-4o generator, gpt-4o-mini judge, seeds 1/2/3. Retrieval was byte-identical across all three — only generation and judging vary.

The judge needed two guards, and they point opposite ways.

Refusals scored as correct answers. On ~100 of the 1,540 non-adversarial questions per run, the judge answered YES to "Not mentioned in the conversation." against golds like Sweden, June 2023, Single — F1 exactly 0.00. Almost certainly the adversarial rule bleeding across, since the judge is told to accept a refusal when the gold also indicates no information. Per category the inflation runs 3.2 pp (open-domain) to 14.3 pp (temporal).

Hallucinations scored as correct abstentions. 99.6% of LoCoMo's adversarial golds are the empty string. The judge accepts almost any fluent answer against an empty reference, so 27–30 invented answers per run scored correct — inflating the one category we used to lead on.

Both are rules rather than judgements — on categories 1–4 the gold is a fact, so a refusal cannot be right; with an empty gold, only a refusal can be — so both now run deterministically at judging time. Effect: no-adv 0.551 → 0.486, adversarial 0.966 → 0.904, all 0.645 → 0.579. The table above is corrected.

How noisy is the rest? Aligning all 1,986 questions across the three seeds:

share

generator's answer differed between seeds

12.5%

judge's verdict differed

5.1%

judge flipped on an identical answer

2.7%

The aggregate holds within ±0.005 because those flips roughly cancel, not because the instrument is precise. Quoting one run to three decimals — as we did before — is not supported by the data.

Not comparable to the 90%+ figures some competitors publish: different generators, judges, prompts and question subsets. And on this evidence, an unguarded LLM judge can be worth six points on its own. The retrieval numbers above remain our primary metric because they are checkable without an API key.

benchmarks/results/v13-locomo-llm-3seeds.json · Runner: benchmarks/locomo_bench_llm.py

Do the retrieval numbers mean anything? — negative controls

A retrieval score with no floor under it is not a claim. Every LoCoMo run now scores three degenerate baselines on the same questions:

Baseline

R@1

R@5

R@10

random — ten turns from the same conversation

0.001

0.012

0.023

first — the ten earliest turns

0.000

0.023

0.039

recency — the ten most recent turns

0.001

0.003

0.011

the pipeline

0.331

0.607

0.687

27× the best degenerate baseline. The controls run in the same pass as the metric, so the floor ships with the number rather than living in a script somebody stops running.

Latency profile

  p50 (warm)   ▌ 0.065 ms
  p95 (warm)   ▌▌ 2.97 ms
  LoCoMo       ▌▌▌ 18.2 ms/query    ← full hybrid retrieval over 5,882 records
  BEAM 100K    ▌▌▌ 17.7 ms/query    ← over 5,732 messages
  LongMemEval  ▌▌▌▌▌ 38.8 ms/query  ← includes embedding + CrossEncoder rerank
  p50 (cold)   ▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌ 1333 ms  ← first query after process start

Warm / cold reproducible from evals/results-2026-04-17.json.


Competitor comparison

We're not replacing chatbot memory — we're occupying the coding-agent + MCP + local niche.

mem0

Letta

Zep

Supermemory

Cognee

LangMem

total-agent-memory

Funding / status

$24M YC

$10M seed

$12M seed

$2.6M seed

$7.5M seed

in LangChain

self-funded OSS

Runs 100% local

🟡

🟡

🟡

🟡

MCP-native

via SDK

🟡 Graphiti

🟡

✅ 74 tools, MCP 2026-07-28

Knowledge graph

🔒 $249/mo

Temporal facts (kg_at)

🟡

Procedural memory

🟡

workflow_predict

Cross-project analogy

analogize

Self-improving rules

🟡

learn_error

AST codebase ingest

🟡

✅ tree-sitter 9 lang

Pre-edit risk warnings

file_context

3D WebGL graph viewer

🟡

Price for graph features

$249/mo

free

cloud

usage

free

free

free

On competitors' benchmark numbers. mem0 now publishes 92.5 on LoCoMo and 94.4 on LongMemEval. Those are end-to-end accuracy with their own generator, judge and prompts — not comparable to the retrieval numbers above, and not independently reproducible without their stack. We publish retrieval because the runner, the corpus and the gold labels are all public and you can re-run them on your laptop without an API key. Where a project has not published on a benchmark, we write "—" rather than inventing a number.

Full side-by-side with pricing, latency, accuracy, "when to pick each" → docs/vs-competitors.md.


What you get

Eight capabilities nobody else ships

Capability

Tool

One-liner

🧠 Procedural memory

workflow_predict / workflow_track

"How did I solve this last time?" — predicts steps with confidence

🔗 Cross-project analogy

analogize

"Was there something like this in another repo?" — Jaccard + Dempster-Shafer

⚠️ Pre-edit risk warnings

file_context

Surfaces past errors / hot spots on the file you're about to edit

🛡 Self-improving rules

learn_error + self_rules_context

Bash failures → patterns → auto-consolidated behavioral rules at N≥3

🕰 Temporal facts

kg_add_fact / kg_at

Append-only KG with valid_from/valid_to — query what was true at any point

🎯 Task workflow phases

classify_task / phase_transition

Automatic L1-L4 complexity classification, state machine across van/plan/creative/build/reflect/archive

🧩 Structured decisions

save_decision

Options + criteria matrix + rationale + discarded → searchable decision records with per-criterion embeddings

💸 Token-efficient retrieval

memory_recall(mode="index") + memory_get

3-layer workflow: compact IDs → timeline → batched full fetch. ~83% token saving on typical queries

Plus the basics done well

  • 6-stage hybrid retrieval (BM25 + dense + fuzzy + graph + CrossEncoder + MMR, RRF fusion) — 95.1% R@5 public

  • Multi-representation embeddings — each record embedded as raw + summary + keywords + questions + compressed

  • AST codebase ingest — tree-sitter across 9 languages (Python, TS/JS, Go, Rust, Java, C/C++, Ruby, C#)

  • Auto-reflection pipelinememory_save → LaunchAgent file-watch → graph edges appear ~30 s later

  • rtk-style content filters — strip noise from pytest / cargo / git / docker logs while preserving URLs, paths, code

  • 3D WebGL knowledge graph viewer — 3,500+ nodes, 120,000+ edges, click-to-focus, filters

  • Hive plot & adjacency matrix — alternate graph views sorted by node type

  • A2A protocol — memory shared between multiple agents (backend + frontend + mobile in a team)

  • design-explore skill — drop-in Claude Code skill that walks L3-L4 tasks through options → criteria matrix → save_decision before code (see examples/skills/design-explore/SKILL.md)

  • <private>...</private> inline redaction in any saved content

  • Cloud LLM/embed providers with per-phase routing (OpenAI / Anthropic / OpenRouter / Together / Groq / Cohere / any OpenAI-compat)

  • activeContext.md Obsidian projection for human-readable session state

  • Phase-scoped rules (self_rules_context(phase="build")) — ~70% token reduction


Architecture

                  ┌─────────────────────────────────────────────────┐
                  │             Your AI coding agent                │
                  │   (Claude Code · Codex CLI · Cursor · any MCP)  │
                  └──────────────────────┬──────────────────────────┘
                                         │ MCP (stdio or HTTP)
                                         │ 74 tools
                  ┌──────────────────────▼──────────────────────────┐
                  │            total-agent-memory server             │
                  │    ┌──────────────┐  ┌────────────────────┐     │
                  │    │ memory_save  │  │  memory_recall      │     │
                  │    │ memory_upd   │  │  6-stage pipeline:  │     │
                  │    │ kg_add_fact  │  │  BM25  (FTS5)       │     │
                  │    │ learn_error  │  │  + dense (FastEmbed)│     │
                  │    │ file_context │  │  + fuzzy            │     │
                  │    │ workflow_*   │  │  + graph expansion  │     │
                  │    │ analogize    │  │  + CrossEncoder †   │     │
                  │    │ ingest_code  │  │  + MMR diversity †  │     │
                  │    └──────┬───────┘  │  → RRF fusion       │     │
                  │           │          └──────────┬──────────┘     │
                  └───────────┼─────────────────────┼────────────────┘
                              │                     │
                  ┌───────────▼─────────────────────▼────────────────┐
                  │                   Storage                         │
                  │  ┌────────────┐  ┌────────────┐  ┌─────────────┐ │
                  │  │  SQLite    │  │  FastEmbed │  │   Ollama    │ │
                  │  │  + FTS5    │  │  HNSW      │  │  (optional) │ │
                  │  │  + KG tbls │  │  binary-q  │  │  qwen2.5-7b │ │
                  │  └────────────┘  └────────────┘  └─────────────┘ │
                  └───────────────────────────────────────────────────┘
                              │
                              │ file-watch + debounce
                  ┌───────────▼────────────────────────────────────┐
                  │  Auto-reflection pipeline  (LaunchAgent)        │
                  │  triple_extraction → deep_enrichment → reprs   │
                  │  (async, 10s debounce, drains in background)   │
                  └─────────────────────────────────────────────────┘
                              │
                  ┌───────────▼─────────────────────────────────────┐
                  │  Dashboard (localhost:37737)                     │
                  │   /           - stats, savings, queue depths   │
                  │   /graph/live - 3D WebGL force-graph           │
                  │   /graph/hive - D3 hive plot                   │
                  │   /graph/matrix - adjacency matrix             │
                  └─────────────────────────────────────────────────┘

  † CrossEncoder + MMR are on-demand via `rerank=true` / `diverse=true`

Install

Quickstart — pick one

Channel

Command

What it does

npx (Node)

npx -y total-agent-memory connect claude-code

Zero-install. Bootstraps a Python venv in ~/.tam/.venv via uv (or python3 fallback), pulls the PyPI server, wires the MCP entry into your IDE. Replace claude-code with codex / cursor / cline / continue / aider / windsurf / gemini-cli / opencode.

uvx (Python via uv)

uvx total-agent-memory

One-off run with no install. Best for trying without commitment.

pipx (Python isolated)

pipx install total-agent-memory

Installs the total-agent-memory, tam, tam-lookup, lookup-memory binaries on PATH in an isolated venv.

brew (macOS / Linuxbrew)

brew install vbcherepanov/tap/total-memory

Bottle-style install with tam and legacy claude-total-memory symlinks.

Docker (multi-arch)

docker run -p 37737:37737 -v ~/.tam:/data ghcr.io/vbcherepanov/total-agent-memory:13.0.4

Containerized (linux/amd64 + linux/arm64). Dashboard on :37737.

Claude Code plugin

/plugin marketplace add vbcherepanov/total-agent-memory/plugin install total-agent-memory@vbcherepanov

Installs the MCP server, the memory-protocol skill and all seven capture hooks in one step, from inside Claude Code. The bootstrap reuses an existing install if it finds one, so nothing is downloaded twice.

Manual clone

git clone https://github.com/vbcherepanov/total-agent-memory ~/total-agent-memory && cd ~/total-agent-memory && ./install.sh --ide claude-code

Full control. Lets you hack on the server, run benchmarks, and pick which background services to enable. Detailed walkthrough below.

All seven channels land at the same MCP server. The npx and ./install.sh paths additionally configure IDE-specific MCP entries and hooks. Other channels start the server bare — you wire the IDE afterwards (see docs/installation.md).

The reranker is an extra, not a dependency. A base install is 97 packages and ~113 MB of wheels: fastembed runs the embeddings through ONNX and no torch is resolved anywhere. The CrossEncoder / BGE reranker needs the torch stack, which on Linux drags in the whole nvidia-cu* set — 147 packages and ~3.1 GB — so it ships separately, and the default MEMORY_MODE=fast does not use it. Turn it on with MEMORY_MODE=deep (or MEMORY_RERANK_ENABLED=true) and install it:

pip install "total-agent-memory[rerank]"      # pip / uvx / pipx
pip install -r requirements-rerank.txt        # clone / Docker

Upgrade from v11.x? Whatever channel you pick will auto-migrate ~/.claude-memory/~/.tam/ on first run and keep a symlink for backward compat. No manual data move required.


Detailed paths (manual / Docker / per-IDE)

Two manual paths. Same 74 tools, same dashboard, different deployment shapes.

IDE matrix (v10.5)

The same MCP server, same tools, same protocol — different installation locations and hook wiring per IDE. The installer (install.sh --ide <name>) automates all of it.

IDE

Skill API

Hook API

Sub-agents

Install command

Claude Code

✅ full

./install.sh --ide claude-code

Codex CLI

./install.sh --ide codex

Cursor

rules-pane

composer

./install.sh --ide cursor

Cline (VS Code)

.clinerules/

./install.sh --ide cline

Continue

rules file

./install.sh --ide continue

Aider

.aider.conf.yml read

❌ ¹

./install.sh --ide aider

Windsurf

.windsurfrules

cascade

./install.sh --ide windsurf

Gemini CLI

.gemini/rules/

⚠️ partial

./install.sh --ide gemini-cli

OpenCode

.opencode/skills/

custom

./install.sh --ide opencode

¹ Aider has no MCP yet — the bridge is via lookup_memory.sh / save_memory.sh shell scripts.

Full per-IDE setup, manual fallbacks, and template snippets: skills/memory-protocol/references/ide-setup.md.

Platform matrix

OS

Command

Background services

macOS 10.15+

./install.sh --ide claude-code

LaunchAgents (launchctl)

Linux (Ubuntu 22.04+, Debian 12+, Fedora 38+)

./install.sh --ide claude-code

systemd --user

WSL2 (Windows 11 + Ubuntu/Debian)

./install.sh --ide claude-code

systemd --user — requires /etc/wsl.conf with [boot] systemd=true; otherwise falls back to shell-loop autostart

Windows 10/11 native

.\install.ps1 -Ide claude-code

Task Scheduler

Full per-platform walkthrough, WSL2 Windows-host-vs-WSL IDE nuances, the wsl -e MCP-command pattern, IDE coverage matrix, and uninstall/diagnostic flows: docs/installation.md.

Path A — native (macOS / Linux / WSL2)

git clone https://github.com/vbcherepanov/total-agent-memory.git ~/total-agent-memory
cd ~/total-agent-memory
bash install.sh --ide claude-code   # or: cursor | gemini-cli | opencode | codex

The installer:

  1. Clones + creates ~/total-agent-memory/.venv/

  2. Installs deps from requirements.txt and requirements-dev.txt

  3. Pre-downloads the FastEmbed multilingual MiniLM model

  4. Registers the MCP server via claude mcp add-json memory ... (stored in ~/.claude.json, the canonical store Claude Code actually reads)

  5. Copies all hooks (session-*, user-prompt-submit.sh, post-tool-use.sh, pre-edit.sh, on-bash-error.sh, etc.) into ~/.claude/hooks/ and registers them in ~/.claude/settings.json

  6. Grants permissions.allow for 20+ mcp__memory__* tools so hook-driven calls don't prompt for confirmation

  7. Installs background services for the current OS:

    • macOS — 4 LaunchAgents (reflection, orphan-backfill, check-updates, dashboard) under ~/Library/LaunchAgents/

    • Linux / WSL2 — 7 systemd --user units (*.service, *.timer, *.path) under ~/.config/systemd/user/; gracefully degrades if systemd --user is unavailable (WSL without /etc/wsl.conf)

  8. Applies all migrations to a fresh memory.db

  9. Starts the dashboard at http://127.0.0.1:37737

Restart Claude Code → /mcpmemory should show Connected with 74 tools.

Path A — native (Windows 10/11)

git clone https://github.com/vbcherepanov/total-agent-memory.git $HOME\total-agent-memory
cd $HOME\total-agent-memory
powershell -ExecutionPolicy Bypass -File install.ps1 -Ide claude-code

Same 9 steps as Unix, but:

  • MCP config path is %USERPROFILE%\.claude\settings.json (or .cursor\mcp.json, etc.)

  • Hooks copied to %USERPROFILE%\.claude\hooks\.ps1 versions (auto-capture, memory-trigger, user-prompt-submit, post-tool-use, pre-edit, on-bash-error, session-start/end, on-stop, codex-notify)

  • Background services via Task Scheduler:

    • total-agent-memory-reflection — every 5 min (no native FileSystemWatcher equivalent)

    • total-agent-memory-orphan-backfill — daily 00:00 + 6h repetition

    • total-agent-memory-check-updates — weekly Mon 09:00

    • TotalAgentMemoryDashboard — AtLogon

Uninstall

All installers preserve ~/.tam/memory.db (legacy installs: ~/.claude-memory/memory.db) and your config files; only services + hook registrations are removed.

./install.sh --uninstall          # macOS/Linux/WSL2 — removes LaunchAgents OR systemd units
.\install.ps1 -Uninstall          # Windows — unregisters Scheduled Tasks + cleans settings.json

Diagnose

One-shot health check — prints ✓/✗ for each subsystem (OS detect, venv, MCP import, services, dashboard HTTP, Ollama, DB migrations):

bash scripts/diagnose.sh          # macOS / Linux / WSL2
.\scripts\diagnose.ps1            # Windows

Exit code 0 = all green, 1 = something broken.

Path B — Docker (everything containerized, cross-platform)

git clone https://github.com/vbcherepanov/total-agent-memory.git
cd total-agent-memory
bash install-docker.sh --with-compose

Brings up 5 services:

Service

Role

Exposed

mcp

MCP server (HTTP transport)

127.0.0.1:3737/mcp

dashboard

Web UI

127.0.0.1:37737

ollama

Local LLM runtime

127.0.0.1:11434

reflection

File-watch queue drainer

internal

scheduler

Ofelia cron (backfill + update check)

internal

First run pulls qwen2.5-coder:7b (~4.7 GB) + nomic-embed-text (~275 MB) — 5–10 min cold start.

GPU note: Docker Desktop on macOS doesn't forward Metal. Native install is faster on Mac. On Linux with NVIDIA Container Toolkit, uncomment the deploy.resources.reservations.devices block in docker-compose.yml.

Verify (both paths)

memory_save(content="install works", type="fact")
memory_stats()

Open http://127.0.0.1:37737/ — dashboard, knowledge graph, token savings.


Quick start

v11 default is MEMORY_MODE=fast. No LLM, no Ollama, no network in the save/search/recall hot path. To restore v10.5 synchronous-LLM behaviour set export MEMORY_MODE=deep. Mode switching: LAUNCH.md § Tuning.

Once installed, in any Claude Code / Codex CLI / Cursor session:

1. Resume where you left off (auto on session start, but you can also invoke)

session_init(project="my-api")
→ {summary: "yesterday: migrated auth middleware to JWT",
   next_steps: ["update OpenAPI spec", "notify frontend team"],
   pitfalls: ["don't revert migration 0042 — dev DB already migrated"]}

2. Save a decision (agent does this automatically after hooks are registered)

memory_save(
  type="decision",
  content="Chose pgvector over ChromaDB for multi-tenant RLS",
  context="WHY: single Postgres instance, per-tenant row-level security",
  project="my-api",
  tags=["database", "multi-tenant"],
)

3. Recall across sessions / projects

memory_recall(query="vector database choice", project="my-api", limit=5)
→ RRF-fused results from 6 retrieval tiers

4. Predict approach before starting a task

workflow_predict(task_description="migrate auth middleware to JWT-only")
→ {confidence: 0.82, predicted_steps: [...], similar_past: [...]}

5. Check a file's risk before editing (auto via hook, also manual)

file_context(path="/Users/me/my-api/src/auth/middleware.go")
→ {risk_score: 0.71, warnings: ["last 3 edits caused test failures in ..."], hot_spots: [...]}

6. Get full stats

memory_stats()
→ {sessions: 515, knowledge: {active: 1859, ...}, storage_mb: 119.5, ...}

CLI: lookup-memory for sub-agents

New in v9. Bash-friendly memory search for sub-agent workflows where launching the full MCP server would be overkill (e.g. Bash(lookup-memory "fix slow Wave query") from inside a Claude Code agent prompt).

Two equivalent commands ship with the package (registered as [project.scripts] entries — installed automatically by ./install.sh or ./update.sh):

lookup-memory "Caroline researched"          # human-readable bullets
tam-lookup "Caroline researched"             # short canonical alias
ctm-lookup "Caroline researched"             # legacy alias (v11.x and earlier)

lookup-memory --project myproj --limit 5 "auth flow"
lookup-memory --type solution --tag reusable "fix bug"
lookup-memory --json "claude code hooks"     # structured stdout for piping

How it works: opens the same $TAM_MEMORY_DIR/memory.db (legacy: $CLAUDE_MEMORY_DIR/memory.db) the running MCP server uses → BM25 ranking via FTS5 → falls back to LIKE on older DBs. Zero deps beyond the package. No Ollama, no rag_chat.py, no ChromaDB required for the CLI path. Works on macOS, Linux, Windows.

$ lookup-memory --project locomo_0 --limit 2 "adoption"
1. [synthesized_fact|locomo_0] Caroline is researching adoption agencies.
2. [synthesized_fact|locomo_0] Melanie congratulates Caroline on her adoption.

Why three names? lookup-memory matches the legacy bash script that older docs and sub-agent prompts reference (~/claude-memory-server/ollama/lookup_memory.sh, legacy install path). tam-lookup is the new project-prefixed canonical form (v12+). ctm-lookup is the v11.x prefixed name, kept as a legacy alias. All three call into total_agent_memory.lookup:main (v11.x and earlier: claude_total_memory.lookup:main, still importable via deprecation shim).

Migration note: v7/v8 docs that pointed at ~/claude-memory-server/ollama/lookup_memory.sh should be updated — the bash version still works for users with a manual install, but ./install.sh / ./update.sh clients on v9+ now get lookup-memory (and tam-lookup) on PATH directly via the package's [project.scripts] entry.


MCP tools reference (74 tools)

Tool categories

Core retrieval (9): memory_save, memory_recall, memory_get, memory_update, memory_delete, memory_history, memory_extract_session, memory_relate, memory_search_by_tag

Knowledge graph (8): kg_add_fact, kg_invalidate_fact, kg_at, kg_timeline, memory_graph, memory_graph_index, memory_graph_stats, memory_concepts

Episodic / session (6): memory_episode_save, memory_episode_recall, session_init, session_end, memory_timeline, memory_history

Procedural / workflows (4): workflow_learn, workflow_predict, workflow_track, classify_task

Task phases (4, v8.0): task_create, phase_transition, task_phases_list, complete_task

Decisions (1, v8.0): save_decision

Intents (3, v8.0): save_intent, list_intents, search_intents

Self-improvement (5): self_rules, self_rules_context, self_insight, self_patterns, self_error_log, rule_set_phase (v8.0)

Pre-edit guard / error learning (3): file_context, learn_error, self_error_log

Analogy / cross-project (2): analogize, ingest_codebase

Reflection / consolidation (4): memory_reflect_now, memory_consolidate, memory_forget, memory_observe

Stats / export (5): memory_stats, memory_export, memory_self_assess, memory_context_build, benchmark

Skills (3): memory_skill_get, memory_skill_update, file_context

Total: 74 tools. Each is documented below with input schema and example.

Every tool carries MCP behaviour annotations — 38 are marked readOnlyHint, and memory_delete / memory_forget / memory_update / kg_invalidate_fact plus the two rebuild tools are marked destructiveHint. Clients use these to decide what may run without a confirmation prompt. Tools that answer in JSON also return it as structuredContent, so you do not have to parse the text.

Token-efficient 3-layer workflow

When you only know the topic but not which records matter, use progressive disclosure:

  1. Indexmemory_recall(query="auth refactor", mode="index", limit=20) → ~2 KB of {id, title, score, type, project, created_at} per hit. No content, no cognitive expansion.

  2. Timelinememory_recall(query="auth refactor", mode="timeline", limit=5, neighbors=2) → top-K hits padded with ±neighbours from the same session, sorted chronologically.

  3. Fetchmemory_get(ids=[3622, 3606]) → full content for ONLY the IDs you chose (max 50 per call, detail="summary" truncates to 150 chars).

Typical saving: 80-90 %% fewer tokens vs memory_recall(detail="full", limit=20) when you end up using 2-3 of the 20 hits.

memory_recall · memory_get · memory_save · memory_update · memory_delete · memory_search_by_tag · memory_history · memory_timeline · memory_stats · memory_consolidate · memory_export · memory_forget · memory_relate · memory_extract_session · memory_observe

memory_graph · memory_graph_index · memory_graph_stats · memory_concepts · memory_associate · memory_context_build

memory_episode_save · memory_episode_recall · memory_skill_get · memory_skill_update

memory_reflect_now · memory_self_assess · self_error_log · self_insight · self_patterns · self_reflect · self_rules · self_rules_context

kg_add_fact · kg_invalidate_fact · kg_at · kg_timeline

workflow_learn · workflow_predict · workflow_track

file_context (pre-edit risk scoring) · learn_error (auto-consolidating error capture) · session_init / session_end · ingest_codebase (AST, 9 languages) · analogize (cross-project analogy) · benchmark (regression gate)

Full JSON schemas: python -m total_agent_memory.cli tools --json or open the dashboard at localhost:37737/tools.


TypeScript SDK

For Node.js / browser / any TS project that isn't an MCP-native agent:

npm i @vbch/total-agent-memory-client
import { connectStdio } from "@vbch/total-agent-memory-client";

const memory = await connectStdio();

await memory.save({
  type: "decision",
  content: "Picked pgvector over ChromaDB for multi-tenant RLS",
  project: "my-api",
});

const hits = await memory.recallFlat({
  query: "vector database choice",
  project: "my-api",
  limit: 5,
});

Also ships LangChain adapter example, procedural-memory integration, and HTTP transport (for team / serverless setups).

Package repo: github.com/vbcherepanov/total-agent-memory-client


Dashboard (localhost:37737)

  • / — live stats, queue depths, token savings from filters, representation coverage

  • /graph/live — 3D WebGL force-graph (Three.js), 3,500+ nodes / 120,000+ edges, click-to-focus, type filters, search

  • /graph/hive — D3 hive plot, nodes on radial axes by type

  • /graph/matrix — canvas adjacency matrix sorted by type

  • /knowledge — paginated knowledge browser, tag filters

  • /sessions — last 50 sessions with summaries + next steps

  • /errors — consolidated error patterns

  • /rules — active behavioral rules + fire counts

  • SSE-pill in header — live reconnect indicator

Screenshots → the dashboard is at http://localhost:37737 once installed.


Update

cd ~/total-agent-memory   # legacy clones: ~/claude-memory-server
./update.sh

7 stages:

  1. Pre-flight — disk check + DB snapshot (keeps last 7)

  2. Source pull (git) or SHA-256-verified tarball

  3. Depspip install -r requirements.txt -r requirements-dev.txt (only if hash changed)

  4. Full pytest suite — aborts with snapshot if red

  5. Schema migrationspython src/tools/version_status.py

  6. LaunchAgent reload — reflection + backfill + update-check

  7. MCP reconnect notification — in-app /mcpmemory → Reconnect

Manual equivalent:

cd ~/total-agent-memory   # legacy clones: ~/claude-memory-server
git pull
.venv/bin/pip install -r requirements.txt -r requirements-dev.txt
.venv/bin/python src/tools/version_status.py
.venv/bin/python -m pytest tests/
# in Claude Code: /mcp → memory → Reconnect

Upgrading from v8.x to v9.0

v9 is backward compatible. Existing v8 calls and DB schema work unchanged — v9 is an infra release that adds pluggable backends, a public CLI for sub-agents, and LoCoMo benchmark wiring. Nothing is forcibly enabled.

One-command upgrade

cd ~/total-agent-memory && ./update.sh   # legacy clones: ~/claude-memory-server
# pulls v9 src, installs new entry-points (tam, tam-lookup, lookup-memory; legacy: ctm-lookup),
# keeps existing memory.db untouched.

After upgrade, verify the new CLI is on PATH:

lookup-memory --limit 1 "any-query-from-your-history"

What's new (no action required)

  • lookup-memory / tam-lookup / ctm-lookup (legacy) CLI now installed alongside total-agent-memory MCP server (registered as [project.scripts] so ./install.sh and ./update.sh put them on PATH automatically). Sub-agent prompts that reference the legacy ~/claude-memory-server/ollama/lookup_memory.sh script keep working; new prompts should prefer the package-installed name.

  • Embedding backends stay on fastembed by default. Switch via V9_EMBED_BACKEND=openai-3-large (set MEMORY_EMBED_API_KEY) — costs ~$0.10/5k rows for re-embed, expected R@5 lift on conversational data.

  • Reranker backend stays on ce-marco by default. V9_RERANKER_BACKEND=bge-v2-m3 (or off) switches at runtime.

  • Subject-aware retrieval is opt-in via --subject-aware in benchmarks/locomo_bench_llm.py. Future: surface as MCP tool flag.

  • No migrations. Schema unchanged from v8.

What requires manual action

  • Re-embed (only if switching embedding model, otherwise skip):

    python -m scripts.reembed --backend openai-3-large --confirm
  • Old bash sub-agent prompts that hardcode ~/claude-memory-server/ollama/lookup_memory.sh "query" will keep working. To ride the new package install, replace with lookup-memory "query".

Breaking changes

None. All v8 MCP tools, env vars, hooks, and DB tables behave identically.


Upgrading from v7.x to v8.0

v8.0 is backward compatible — your existing v7 installation keeps working unchanged. All new features are opt-in via MCP tool calls or env vars.

One-command upgrade

cd ~/total-agent-memory && ./update.sh   # legacy clones: ~/claude-memory-server
# Applies migrations 011-013 idempotently, restarts LaunchAgents, updates dependencies

Then restart Claude Code: /mcp restart memory.

What changes automatically

  • Migrations 011–013 apply on MCP startup (privacy_counters, task_phases, intents). Zero-downtime, idempotent.

  • Existing memory_save calls keep working — they now additionally strip <private>...</private> sections if present.

  • Existing memory_recall calls keep working — default mode is still "search". New mode="index" is opt-in.

  • Existing session_end calls keep working — auto_compress=False by default. Pass auto_compress=True to opt in.

  • Existing self_rules_context calls keep working — default returns all rules (no phase filter).

What requires manual setup

1. Cloud providers (only if you want to replace/augment Ollama):

export MEMORY_LLM_PROVIDER=openai       # or "anthropic"
export MEMORY_LLM_API_KEY=sk-...
export MEMORY_LLM_MODEL=gpt-4o-mini     # or "claude-haiku-4-5"

See Cloud providers for OpenRouter / per-phase routing / Cohere examples.

2. Install additional hooks (for UserPromptSubmit capture + citation):

./install.sh --ide claude-code   # re-run installer; it now registers user-prompt-submit.sh hook

The hook is additive — existing hooks keep working.

3. activeContext.md Obsidian integration (if you want markdown projection):

export MEMORY_ACTIVECONTEXT_VAULT=~/Documents/project/Projects   # default
# Disable: export MEMORY_ACTIVECONTEXT_DISABLE=1

Each session_end writes <vault>/<project>/activeContext.md.

Breaking changes

None. All v7 MCP tool signatures are preserved. New parameters are optional with safe defaults.

Embedding dimension note

If you switch to a cloud embedding provider (MEMORY_EMBED_PROVIDER=openai/cohere), the server will refuse to start if existing DB embeddings have a different dimension than the new provider returns. This is deliberate — it prevents silent data corruption.

Either:

  • Keep MEMORY_EMBED_PROVIDER=fastembed (default 384d) and only change the LLM provider, OR

  • Re-embed the DB: python src/tools/reembed.py --provider openai --model text-embedding-3-small

New MCP tools in v8.0

Quick reference — see full docs in MCP tools reference:

Tool

Purpose

classify_task(description)

Returns {level 1-4, suggested_phases, estimated_tokens}

task_create(task_id, description)

Starts state machine in "van" phase

phase_transition(task_id, new_phase, artifacts?)

Moves task through van/plan/creative/build/reflect/archive

task_phases_list(task_id)

Chronological phase history

save_decision(title, options, criteria_matrix, selected, rationale, ...)

Structured decision with per-criterion indexing

memory_get(ids, detail)

Batched full-content fetch for IDs from memory_recall(mode="index")

save_intent / list_intents / search_intents

UserPromptSubmit-captured prompts

rule_set_phase(rule_id, phase)

Tag a rule for phase-scoped loading

Extended tools:

  • memory_recall(mode="index"|"timeline", decisions_only=False, ...) — 3-layer token-efficient workflow

  • session_end(auto_compress=True, transcript=None, ...) — LLM-generated summary

  • self_rules_context(phase="build"|"plan"|...) — phase filter

  • save_knowledge(...) — now strips <private>...</private> sections automatically

Rollback plan

v8.0 doesn't remove any v7 functionality. If you hit an issue, you can:

  1. Set env var to revert behaviour:

    export MEMORY_LLM_PROVIDER=ollama           # revert to local LLM
    export MEMORY_EMBED_PROVIDER=fastembed      # revert to local embeddings
    export MEMORY_ACTIVECONTEXT_DISABLE=1       # disable markdown projection
    export MEMORY_POST_TOOL_CAPTURE=0           # disable opt-in capture (default anyway)
  2. Migrations 011/012/013 are additive (no DROP / ALTER on existing tables), so DB downgrade is not destructive — old code continues reading older tables.

  3. Worst case: git checkout v7.0.0 && ./update.sh --skip-migrations.


Without Ollama: works fully — raw content is saved, retrieval via BM25 + FastEmbed dense embeddings.

With Ollama: you also get LLM-generated summaries, keywords, question-forms, compressed representations, and deep enrichment (entities, intent, topics).

brew install ollama     # or: curl -fsSL https://ollama.com/install.sh | sh
ollama serve &
ollama pull qwen2.5-coder:7b        # default — best quality/speed on M-series
ollama pull nomic-embed-text        # optional, alternative embedder

Cloud providers (optional)

Use OpenAI, Anthropic, or any OpenAI-compat endpoint (OpenRouter, Together, Groq, DeepSeek, LM Studio, llama.cpp) instead of local Ollama.

OpenAI:

export MEMORY_LLM_PROVIDER=openai
export MEMORY_LLM_API_KEY=sk-...
export MEMORY_LLM_MODEL=gpt-4o-mini

Anthropic:

export MEMORY_LLM_PROVIDER=anthropic
export MEMORY_LLM_API_KEY=sk-ant-...
export MEMORY_LLM_MODEL=claude-haiku-4-5

OpenRouter (100+ models via one endpoint):

export MEMORY_LLM_PROVIDER=openai
export MEMORY_LLM_API_BASE=https://openrouter.ai/api/v1
export MEMORY_LLM_API_KEY=sk-or-...
export MEMORY_LLM_MODEL=anthropic/claude-haiku-4.5

Per-phase routing (cheap model for bulk, quality for compression):

export MEMORY_TRIPLE_PROVIDER=openai
export MEMORY_TRIPLE_MODEL=gpt-4o-mini
export MEMORY_ENRICH_PROVIDER=anthropic
export MEMORY_ENRICH_MODEL=claude-haiku-4-5

Embeddings (dimension must match existing DB or re-embed required):

export MEMORY_EMBED_PROVIDER=openai
export MEMORY_EMBED_MODEL=text-embedding-3-small  # 1536d
# or Cohere:
export MEMORY_EMBED_PROVIDER=cohere
export MEMORY_EMBED_API_KEY=...

Model choice

Model

Size

Use case

qwen2.5-coder:7b

4.7 GB

default — best quality/speed ratio

qwen2.5-coder:32b

19 GB

highest quality, needs 32 GB+ RAM

llama3.1:8b

4.9 GB

general-purpose alternative

phi3:mini

2.3 GB

low-RAM machines


Configuration

Environment variables (all optional):

v11.0 — Memory mode + multi-embedding-space

Variable

Default

Purpose

MEMORY_MODE

fast

ultrafast|fast|balanced|deep. Selects hot-path profile. See Performance tuning.

MEMORY_USE_LLM_IN_HOT_PATH

false

Master switch for sync LLM stages in save_knowledge / Recall.search. MEMORY_MODE=deep flips this to true.

MEMORY_ALLOW_OLLAMA_IN_HOT_PATH

false

Re-enables the silent FastEmbed → Ollama fallback ladder when FastEmbed is unavailable.

MEMORY_RERANK_ENABLED

false

Honour caller's rerank=true. When false, CrossEncoder rerank is hard-disabled even if a tool call requests it.

MEMORY_ENRICHMENT_ENABLED

false

Run the async enrichment worker. Default-ON in balanced / deep.

MEMORY_TEXT_EMBED_MODEL

sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2

Model for embedding_space=text.

MEMORY_CODE_EMBED_MODEL

empty → falls back to TEXT model

Model for embedding_space=code. The row still records space=code so a future swap is config-only.

MEMORY_LOG_EMBED_MODEL

empty → TEXT

Model for embedding_space=log.

MEMORY_CONFIG_EMBED_MODEL

empty → TEXT

Model for embedding_space=config.

MEMORY_DEFAULT_EMBEDDING_SPACE

text

Space for unclassified content.

v10 + earlier

Variable

Default

Purpose

MEMORY_DB

~/.tam/memory.db (legacy installs: ~/.claude-memory/memory.db)

SQLite location

MEMORY_LLM_ENABLED

auto

auto|true|false|force — LLM enrichment toggle

MEMORY_LLM_MODEL

qwen2.5-coder:7b

Ollama model for enrichment

MEMORY_LLM_PROBE_TTL_SEC

60

Cache TTL for Ollama availability probe

MEMORY_LLM_TIMEOUT_SEC

60

Global fallback timeout for Ollama requests (s)

MEMORY_TRIPLE_TIMEOUT_SEC

30

Timeout for deep triple extraction (s)

MEMORY_ENRICH_TIMEOUT_SEC

45

Timeout for deep enrichment (s)

MEMORY_REPR_TIMEOUT_SEC

60

Timeout for representation generation (s)

MEMORY_TRIPLE_MAX_PREDICT

2048

num_predict cap for triple extraction

OLLAMA_URL

http://localhost:11434

Ollama endpoint

MEMORY_EMBED_MODE

fastembed

fastembed|sentence-transformers|ollama

DASHBOARD_PORT

37737

HTTP dashboard port

MEMORY_MCP_PORT

3737

HTTP MCP transport port (Docker path)

MEMORY_ASYNC_ENRICHMENT

false

v10.1 — move quality gate / contradiction / entity dedup / episodic / wiki to a background worker. See Performance tuning

MEMORY_ENRICH_TICK_SEC

0.1

Worker tick interval (clamp 0.01..5)

MEMORY_ENRICH_BATCH

5

Rows claimed per tick (clamp 1..50)

MEMORY_ENRICH_MAX_ATTEMPTS

3

Retries before flipping a row to failed

MEMORY_ENRICH_STALE_AFTER_SEC

60

Seconds before a processing row is reclaimed (worker crash recovery)

CPU-only / WSL hosts: if Ollama keeps timing out, lower MEMORY_TRIPLE_MAX_PREDICT before raising timeouts. install-codex.sh writes conservative defaults automatically. For 30-40s save latency on WSL2 → set MEMORY_ASYNC_ENRICHMENT=true — see below.

Full config: see total_agent_memory/config.py.


Performance tuning

v11.0 fast-mode hot path (default)

When MEMORY_MODE=fast (default):

metric

p50

p95

p99

save_fast

6.2

8.9

11.4

save_fast cached

0.3

0.4

1.4

search_fast

3.4

4.7

6.0

cached_search

3.1

3.4

3.6

llm_calls=0, network_calls=0. Reproduce: ./bin/memory-bench. Regression gate: ./bin/memory-perf-gate. Architecture rationale and per-stage audit: docs/v11/audit.md. Raw bench artifact: docs/v11/benchmark.md.

If your numbers do not match the table, run ./bin/memory-bench --warmup first — cold FastEmbed import dominates the first call.

Legacy: v10.5 deep-mode memory_save latency

The synchronous v10 hot path runs five LLM-bound stages inline so a drop verdict can block the INSERT and a contradiction supersede commits in the same transaction. On macOS with a warm Ollama that's ~340 ms median; on a WSL2 box without GPU/CoreML each LLM round-trip can stretch the same call into 30–40 seconds.

v10.1 ships an opt-in inbox/outbox worker that moves the heavy stages out of band:

sync   : privacy → canonical_tags → INSERT → embed → enqueue → return
worker : quality_gate → entity_dedup_audit → contradiction → episodic → wiki

Enable it in your env:

export MEMORY_ASYNC_ENRICHMENT=true
# Optional knobs (defaults shown):
export MEMORY_ENRICH_TICK_SEC=0.1
export MEMORY_ENRICH_BATCH=5
export MEMORY_ENRICH_MAX_ATTEMPTS=3
export MEMORY_ENRICH_STALE_AFTER_SEC=60

Restart the MCP server. A background daemon thread now consumes enrichment_queue; you can watch it on the dashboard panel ⚡ v10.1 enrichment worker.

Bench v10.5 (10-record corpus × 2 rounds, with LLM stages on)

memory_save latency:

min

p50

p95

p99

max

mean

sync (default)

17.5 ms

25.3 ms

2150.5 ms

2179.0 ms

2186.1 ms

348.0 ms

async (MEMORY_ASYNC_ENRICHMENT=true)

18.1 ms

22.3 ms

26.7 ms

27.4 ms

27.5 ms

22.7 ms

memory_recall latency: p50 ≈ 3-5 ms in both modes (steady state), with cold-cache p95 outliers on the first warmup hit.

p95 collapses 80× with async (2150 ms → 27 ms). On WSL2 with a slow Ollama, the same shape holds — sync p95 of 30-40 s becomes async p95 of ~300-1000 ms (LLM moves out of the hot path entirely).

Reproduce: ./.venv/bin/python benchmarks/v10_5_latency.py --rounds 2 --with-llm. Full report: benchmarks/v10_5_results.md.

Trade-off — soft drop semantic

When async is on, a quality_gate drop no longer prevents the INSERT (we already committed in the sync path). Instead the row is marked status='quality_dropped' after the worker scores it. memory_recall ignores that status (idx_knowledge_status_quality is added in migration 020). Audit history stays in quality_gate_log so nothing is lost.

If you need strict pre-INSERT gating (e.g. compliance), keep the default sync path.

Crash recovery

Rows stuck in processing longer than MEMORY_ENRICH_STALE_AFTER_SEC (default 60 s) are flipped back to pending automatically — covers worker process kills mid-stage. The pre-existing write_intents outbox still covers a crash before INSERT.


Roadmap

Shipped in v13.0.0 (2026-08-27)

  • MCP SDK 2.x compatibility — the blocker: every install created after mcp 2.0 shipped was dead on arrival. Tools register through either SDK era; dependency bounded >=1.9,<3.

  • Protocol revision 2026-07-28 — stateless era served end-to-end (tools/list / server/discover / tools/call with no handshake), legacy handshake era from the same process, structuredContent on JSON-answering tools, behaviour annotations on all 74.

  • Claude Code plugin/plugin install total-agent-memory@vbcherepanov wires the MCP server, the skill and seven hooks in one step.

  • Reproducible benchmarksrecord_usage=False stops runs from measuring their own history; category labels in the LoCoMo runner corrected.

  • BEAM (ICLR 2026) added to the suite at 100K / 500K / 1M.

  • tree-sitter-language-pack is now an actual dependency — AST ingest had been silently degrading to whole-file chunks for every user.

  • Enrichment worker owns its sqlite connection — long ingests no longer die on cannot start a transaction within a transaction.

Shipped in v11.0 (2026-04-27) — production memory engine

  • Default MEMORY_MODE=fast — zero LLM, zero Ollama, zero network in save/search/recall hot path. Set MEMORY_MODE=deep to restore v10.5 behaviour.

  • Memory Core / AI Layer splitsrc/memory_core/* is deterministic; src/ai_layer/* owns every LLM-bound code path. Enforced by tests/test_no_llm_hot_path.py.

  • 4 modes: ultrafast / fast / balanced / deep. Single env flag.

  • Multi-embedding-space contract — every vector row records provider / model / dimension / space / content_type / language. Spaces: text / code / log / config. Single Chroma backend; per-space model swap is config-only.

  • Embed fallback ladder gated — silent Ollama fallback in Store.embed requires MEMORY_ALLOW_OLLAMA_IN_HOT_PATH=true.

  • New MCP tools: memory_save_fast, memory_search_fast, memory_explain_search, memory_warmup, memory_perf_report, memory_rebuild_fts, memory_rebuild_embeddings, memory_eval_locomo, memory_eval_recall, memory_eval_temporal, memory_eval_entity_consistency, memory_eval_contradictions, memory_eval_long_context.

  • Migrations 021 (embedding_spaces) + 022 (embedding_cache_v11) — idempotent on next start.

  • Benchmark suite: bin/memory-bench (artifact docs/v11/benchmark.md) + bin/memory-perf-gate for CI.

Shipped in v10.5 (2026-04-27)

  • Universal memory-protocol skill — single canonical SKILL.md + 4 references (tool cheatsheet for all MCP tools, workflow recipes for 15 common situations, hooks reference, per-IDE setup) + 4 templates (Claude Code settings.json, Codex config.toml, Cursor .mdc, Cline .md). Same content for every IDE; only the wiring differs.

  • install.sh --ide extended to 9 IDEs: claude-code, codex, cursor, cline, continue, aider, windsurf, gemini-cli, opencode. New helpers: register_mcp_cline / continue / aider / windsurf + _json_merge_mcp_nested for the dotted-key case (cline.mcpServers).

  • Cross-platform hardening — all bash scripts pass bash -n under macOS bash 3.2 (default). Replaced ${var,,} lowercase bashism in update.sh with tr '[:upper:]' '[:lower:]'. Verified with shellcheck.

  • Sub-agent memory protocol — universal header for any sub-agent (php-pro, golang-pro, vue-expert, etc.) with mandatory memory_recall before / memory_save after. Full template in skills/memory-protocol/references/subagent-protocol.md.

  • v10.5 latency benchmarkbenchmarks/v10_5_latency.py with apples-to-apples sync vs async comparison. Demonstrates 80× p95 reduction (2150 ms → 27 ms) when async is enabled with LLM stages on.

Shipped in v10.1 (2026-04-27)

  • Async enrichment worker — opt-in MEMORY_ASYNC_ENRICHMENT=true moves quality gate / entity dedup / contradiction detector / episodic linking / wiki refresh to a background thread. Drops max save latency 5.4× on macOS, 60–100× on WSL2. See Performance tuning.

  • enrichment_queue table with stale-processing recovery (rows stuck >60 s in processing flip back to pending).

  • Dashboard panel for worker health: depth, throughput/min, p50/p95 ms per task, oldest pending age, recent failures.

  • _binary_search ValueError fixnp.argpartition requires kth STRICTLY < N; tiny test projects (pool ≤ 50) used to silently break contradiction_log.

  • coref_resolver RU→EN translation fix — prompt explicitly pins output language (Do NOT translate).

Shipped in v10.0 (2026-04-27)

  • 10 Beever-Atlas-inspired features in one push: quality gate (Beever 6-Month Test), canonical tag vocabulary, importance boost in recall, opt-in coref resolution, contradiction auto-detection with supersede, write-intent outbox + reconciler, embedding-based entity dedup, episodic save events in the graph, smart query router (relational vs lexical), per-project Markdown wiki digest.

  • ✅ 5 SQLite migrations (015–019) applied automatically on restart.

  • ✅ 11 new env knobs, all with safe fail-open defaults.

  • ✅ Tests: 971 → 1124 (+153).

Shipped in v9.0 (2026-04-25)

  • lookup-memory / tam-lookup / ctm-lookup (legacy) CLI — bash entry-point for sub-agents, registered as [project.scripts] and installed by ./install.sh / ./update.sh (replaces manual ~/claude-memory-server/ollama/lookup_memory.sh)

  • Pluggable embedding backends: openai-3-small, openai-3-large (3072d), bge-m3, e5-large, locomo-tuned-minilm (fine-tuned on user data)

  • Pluggable reranker backends: ce-marco, bge-v2-m3, bge-large, off (env V9_RERANKER_BACKEND, hot-swap)

  • Subject-aware retrieval — LLM extracts (subject, action) from question → SQL graph lookup → DIRECT FACTS prepended to context (LoCoMo cat 1/2 lift)

  • Judge-weighted ensemble — category-aware scoring rubric + abstain logic for LoCoMo-style adversarial gold

  • Fine-tune embedding pipeline (scripts/finetune_embedding.py) — mine triplets from your data, train on top of MiniLM via sentence-transformers

  • Few-shot pair mining (scripts/mine_locomo_fewshot.py) — augment per-category prompts with held-in (Q,A) pairs

  • Schema-specific graph extractor (closed canonical predicate vocabulary, optional)

  • SSL fix for macOS Python.org installsurllib requests now use certifi by default

  • HTTP retry with exponential backoff for embedding providers (5xx/timeout)

  • ✅ LoCoMo benchmark integration (benchmarks/locomo_bench_llm.py with 14 ablation flags)

Shipped in v8.0 (2026-04-19)

  • ✅ Task workflow phases (L1-L4 classifier + 6-phase state machine)

  • ✅ Structured save_decision with criteria matrix + multi-representation criterion indexing

  • ✅ Cloud LLM/embed providers (OpenAI, Anthropic, Cohere, any OpenAI-compat)

  • session_end(auto_compress=True) via LLM provider

  • ✅ Progressive disclosure: memory_recall(mode="index") + memory_get(ids)

  • activeContext.md Obsidian live-doc projection

  • ✅ Phase-scoped rules via tag filter

  • <private>...</private> inline redaction

  • ✅ HTTP citation endpoints /api/knowledge/{id} + /api/session/{id}

  • ✅ UserPromptSubmit + PostToolUse (opt-in) capture hooks

  • ✅ Unified install.sh --ide {claude-code|cursor|gemini-cli|opencode|codex}

Next — what the v13 numbers say to fix

The benchmarks point at specific gaps rather than a general "make retrieval better", so the roadmap names them:

  • instruction_following R@5 = 0.075, event_ordering = 0.150 (BEAM). These probes ask whether a stated instruction was followed or in what order things happened. Semantic similarity to the question does not find the message where the instruction was given — retrieval is the wrong primitive. Needs a directive index (statements of the form "always/never/from now on") and ordering-aware traversal over the episodic graph.

  • multi-hop R@5 = 0.413 (LoCoMo). Weakest category, and the one where the leaders win. Query decomposition without putting an LLM back in the hot path is the open design question.

  • single_session_preference R@5 = 0.80 (LongMemEval), preference_following = 0.282 (BEAM). The same weakness from two directions: preferences are stated once, in passing, and never restated.

  • BEAM-10M. The 1M scale runs today; 10M is the interesting claim.

  • Search is linear in store size. BEAM 1M measured p50 411 ms against 58 ms at 500K — Store._binary_search loads every active record's binary vector into numpy per query. An ANN index over those vectors is the obvious answer. This is the largest open performance item.

  • Profile the write path — done in v13.0.1: auto_link constructed a ConceptExtractor per save and threw away its node cache, re-reading the whole graph_nodes table on every write.

Planned

  • GitHub Actions: install smoke tests + a nightly retrieval gate, so a regression in R@5 fails CI the way bin/memory-perf-gate already fails on latency.

  • has_llm() per-phase provider caching.

Under research

  • "Endless mode" — continuous session without hard boundaries (virtual sessions by idle >N hours)

  • MLX local LLM integration

  • Speculative decoding for local path (+1.5-1.8× LLM speed)


Support the project

total-agent-memory is, and will always be, free and MIT-licensed. No paid tier, no gated features, no "enterprise edition". The benchmarks on this page are the entire product.

If it's saving you hours of context-pasting every week and you want to help keep development going — or just say thanks — a donation means a lot.

What your support funds

Goal

$5 — a coffee

One evening of focused OSS work

🍕 $25 — a pizza

A new MCP tool end-to-end (design, code, tests, docs)

🎧 $100 — a weekend

A major feature: e.g. the preference-tracking module that closes the 80% gap on LongMemEval

💎 $500+ — a sprint

A release cycle: new subsystem + migrations + docs + benchmark artifact

Non-monetary ways to help (equally appreciated)

  • Star the repo — GitHub discovery runs on this

  • 🐦 Share benchmarks on X / HN / Reddit — reach matters more than donations

  • 🐛 Open issues with repro cases — bug reports are pure gold

  • 📝 Write a blog post about how you use it

  • 🔧 Submit a PR — fixes, new tools, new integrations

  • 🌍 Translate the README — first docs in RU / DE / JA / ZH very welcome

  • 💬 Tell your team — peer recommendations convert 10× better than marketing

Commercial / consulting

  • Building something that would benefit from a custom integration, on-prem deployment, or team-shared memory? Email vbcherepanov@gmail.com — open to contract work and partnerships.

  • AI / dev-tools company whose roadmap overlaps? Same email — happy to talk.


Philosophy

MIT forever. No commercial-license switch, no VC money, no dark patterns. The memory layer belongs to the developers using it, not to a SaaS vendor.

Local-first is the product. If you want a cloud memory service, mem0 and Supermemory are great. If you want your data on your disk, untouched by anyone else — this.

Honest benchmarks. Every number on this page is reproducible from the artifacts in evals/ and the scripts in benchmarks/. If you can't reproduce a claim, open an issue — it's a bug.


Contributing

  • Open an issue before a large PR — saves everyone time.

  • pytest tests/ must stay green. Add tests for new tools.

  • Update evals/scenarios/*.json if you change retrieval behavior.

  • Docs-only / typo PRs welcome without discussion.


License

MIT — see LICENSE.


Available Tools

74 tools
analogizeB
Read-onlyIdempotent

Find past solutions/lessons from OTHER projects whose feature set overlaps with the given problem text (Jaccard similarity).

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
limitNo
min_scoreNo
only_typesNo
exclude_projectNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds useful context about the algorithm (Jaccard similarity) and the scope (other projects), which goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

The description is a single, clear, and well-structured sentence. It efficiently communicates the core purpose without unnecessary words or complexity.

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

Completeness2/5

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

The description gives a high-level purpose but lacks operational details. It does not explain the semantics of the parameters, what the output looks like, or any edge cases. An agent would likely be uncertain about how to properly configure the input beyond the single required 'text' parameter.

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

Parameters1/5

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

The schema has 5 parameters but zero description coverage. The description only mentions 'given problem text' and 'Jaccard similarity,' leaving the meaning and usage of limit, min_score, only_types, and exclude_project completely unexplained. The description fails to compensate for the lack of schema descriptions.

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

Purpose5/5

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

The description clearly states the tool's function: finding past solutions/lessons from other projects using feature-set overlap and Jaccard similarity. It is specific and distinguishes this tool from sibling memory tools that focus on the current project's memory.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention any conditions or prerequisites. It lacks explicit direction for an agent to decide when analogize is the appropriate choice.

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

benchmarkA
Read-onlyIdempotent

Run the eval harness: recall_at_k, prevention_rate, latency percentiles. Loads scenarios from evals/scenarios/*.json by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenarios_pathNoCustom scenarios dir or file

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already establish read-only, idempotent, and non-destructive behavior, and the description does not contradict them. It adds useful context about loading scenarios and computing specific metrics, though it does not explicitly describe output or side effects beyond what the annotations imply.

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

Conciseness5/5

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

The description is two concise sentences with no redundant or filler content. It packs the core action, metrics, and default loading behavior efficiently.

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

Completeness4/5

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

Given the simple schema and clear annotations, the description is adequate for an agent to understand what the tool does and what inputs it accepts. It could be slightly more explicit about return values or output format, but no output schema exists and the intended evaluation metrics are named.

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

Parameters4/5

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

The single parameter has full schema coverage with a clear description ('Custom scenarios dir or file'). The tool description adds the useful default behavior (evals/scenarios/*.json), which clarifies how the parameter relates to the default when omitted.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Run') and resource ('eval harness'), and itemizes the metrics it produces. It distinguishes this tool from the memory- and workflow-related siblings by focusing on evaluation.

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

Usage Guidelines3/5

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

The description implies use for running evaluations and notes the default scenario path, but it does not explicitly state when to use this tool versus any alternative or provide conditions for when it should be avoided. There is no direct competing eval tool among siblings, but guidance is still minimal.

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

classify_taskC
Read-onlyIdempotent

v8.0: classify task into L1-L4 complexity + suggested phases.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo
descriptionYes

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior, so the description does not need to restate these. It adds no additional side-effect information, but also does not contradict the annotations.

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

Conciseness5/5

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

The description is extremely concise and contains no irrelevant information. Every word adds meaning.

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

Completeness1/5

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

There is no output schema, no parameter explanations, and no usage context. The description is too sparse to allow a user to confidently invoke the tool correctly.

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

Parameters1/5

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

Schema provides no parameter descriptions and the tool description does not explain the meaning or expected format of 'project' or 'description'. Essential parameter semantics are entirely absent.

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

Purpose4/5

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

Description clearly states the action (classify), the object (task), and the output (L1-L4 complexity plus suggested phases). However, it does not explicitly distinguish itself from sibling tools that might also handle task-related operations.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or context for invoking it.

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

file_contextA
Read-onlyIdempotent

BEFORE editing a file, call this to surface past errors, lessons, and related rules for that file path. Returns risk_score ∈ [0, 1].

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
limitNo
projectNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds useful behavioral detail about surfacing past errors, lessons, related rules, and returning a risk score, with no contradiction.

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

Conciseness5/5

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

One compact sentence conveys the action, timing, content returned, and risk score. No filler or redundancy.

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

Completeness3/5

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

With no output schema, the description partially compensates by mentioning risk_score and the categories of returned information, but it does not describe the full return structure. Adequate for basic invocation, but not fully complete.

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

Parameters2/5

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

The schema has no field descriptions, and the description only clarifies 'path'. The 'limit' and 'project' parameters are left unexplained, so the description provides only partial compensation for the missing schema documentation.

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

Purpose5/5

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

Description states a specific action and resource: call to surface past errors, lessons, and related rules for a file path, and returns a risk score. This clearly distinguishes it from generic memory recall tools and ties it to a pre-edit workflow.

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

Usage Guidelines4/5

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

Explicitly says 'BEFORE editing a file', giving a clear trigger for use. It does not name alternative tools or say when not to use it, but the primary use case is unambiguous.

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

ingest_codebaseB

Parse a file or directory into semantic AST chunks (functions, classes, methods) across 8 languages. Returns chunk count + sample.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
includeNoExtension allowlist e.g. ['.py','.go']
sample_limitNo

TDQS

B3.2/5.0
Behavior2/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description does not disclose any side effects (e.g., whether it writes to a database or modifies files). It only mentions parsing and returning data, leaving behavioral traits ambiguous and not adding clarity beyond the minimal annotations.

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

Conciseness5/5

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

The description is concise, using two clear sentences without redundant information. It efficiently conveys the core action and output, maintaining a clean structure that is easy to parse.

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

Completeness3/5

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

Given the tool's simplicity and lack of an output schema, the description provides a basic understanding of the return (chunk count + sample) but omits details like the exact output format or error conditions. This is a gap for an agent that needs to interpret results reliably, so completeness is only moderate.

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

Parameters1/5

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

The schema has three parameters (path, include, sample_limit), but only 'include' has a description. The description does not elaborate on any parameter meanings, and with schema coverage at only 33% (low), the description fails to compensate, leaving the required 'path' and 'sample_limit' under-specified.

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

Purpose5/5

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

The description clearly states the tool's function: parsing files or directories into semantic AST chunks across 8 languages, and it explicitly mentions what it returns (chunk count + sample). This distinguishes it from sibling tools, which are memory-related, making the purpose unmistakable.

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

Usage Guidelines3/5

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

The description implies usage for code parsing but does not explicitly state when to use this tool versus alternatives. Since all siblings are memory/workflow tools, the context makes usage obvious, but no explicit guidance on when not to use it is provided.

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

kg_add_factA

Record a temporal fact assertion (subject, predicate, object). Supersedes any prior assertion with same (s,p) and different object — full history is preserved. Use for evolving architectural decisions.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectYes
contextNo
projectNogeneral
subjectYes
predicateYes
confidenceNo
invalidate_previousNo

TDQS

A4.2/5.0
Behavior5/5

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

The description openly discloses the crucial side effect: adding a fact with the same subject-predicate but a different object supersedes the prior assertion, yet the full history is preserved. It also notes the temporal nature, aligning with the non-destructive annotation (destructiveHint false).

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

Conciseness5/5

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

The description is concise and well-structured, using two clear sentences. It front-loads the primary action and then explains the key behavior and use case without unnecessary verbosity.

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

Completeness3/5

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

The description gives the core purpose and main side effect, which is adequate for a simple add-fact operation. However, given the low parameter coverage and lack of output schema details, it leaves gaps regarding parameter semantics and expected return behavior, making it only partially complete for an agent to use confidently.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions only the three required parameters (subject, predicate, object) but leaves the other four (context, project, confidence, invalidate_previous) unexplained. The description does not clarify the role of these additional parameters, making it insufficient for full parameter understanding.

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

Purpose5/5

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

The description clearly states the tool's purpose: to record a temporal fact assertion with subject, predicate, and object. It also specifies the context of use ('evolving architectural decisions') and the key behavior of superseding prior assertions while preserving history.

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

Usage Guidelines4/5

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

The description provides a specific use case ('Use for evolving architectural decisions') and explains the supersede-and-preserve behavior, which helps distinguish it from other memory/knowledge graph operations. However, it does not explicitly name sibling tools or contrast with alternatives like kg_invalidate_fact.

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

kg_atB
Read-onlyIdempotent

Point-in-time query: return fact assertions valid at timestamp (ISO 8601). Omit timestamp for currently-valid facts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
objectNo
projectNo
subjectNo
predicateNo
timestampNoISO 8601 or omit for now

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so safety is covered. The description adds the key behavioral nuance of timestamp filtering, which is useful. However, it does not describe the return format, potential limits, or error conditions. Given that annotations cover the safety aspects, this is adequate but not exceptional.

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

Conciseness5/5

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

The description is two sentences with no redundant words. It directly states the purpose and the optional behavior of the timestamp parameter. Every word serves a purpose, making it highly concise and well-structured.

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

Completeness4/5

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

For a query tool in a knowledge graph context, the description sufficiently explains how to use it: specify a timestamp for point-in-time valid facts, or omit for current ones. It distinguishes itself from timeline tools by focusing on a single time point. The unmentioned parameters are standard in such domains (subject, predicate, object) and likely understandable. A small deduction for not specifying the output shape, but overall it is complete enough for an agent to call correctly.

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

Parameters2/5

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

Only the timestamp parameter is described in the schema and referenced in the description. The other five parameters (limit, object, project, subject, predicate) have no descriptions and are not mentioned. With schema coverage at only 17%, the description fails to compensate for the missing parameter documentation, leaving most of the parameters underspecified.

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

Purpose4/5

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

The description clearly states the tool returns fact assertions valid at a specific timestamp, or current facts if timestamp is omitted. This makes the core purpose unambiguous without needing to inspect the schema. However, it does not explicitly distinguish itself from sibling tools like kg_timeline, so it loses a point.

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

Usage Guidelines3/5

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

The description provides a clear condition for usage: include timestamp for point-in-time queries, omit for current facts. This gives practical guidance, but it does not mention when to prefer this over other query tools or mention any limitations (e.g., pagination, ordering). The guidance is implicit rather than explicit.

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

kg_invalidate_factB
Destructive

Close a currently-valid fact assertion. History is retained.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectYes
reasonNomanually_invalidated
projectNogeneral
subjectYes
predicateYes

TDQS

B3.2/5.0
Behavior4/5

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

The annotation marks the tool as destructive, and the description adds clarifying context by saying 'History is retained,' which indicates this is not a hard delete. It does not fully describe downstream query effects or how reason and project are used, but the core behavior is transparent.

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

Conciseness4/5

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

The description is very short, front-loaded with the main action, and followed by a relevant retention note. It is concise and free of filler, though it is too terse to cover parameter semantics or usage alternatives.

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

Completeness2/5

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

With no output schema, no parameter descriptions, and no mention of return values, errors, or optional arguments, the description is not complete enough for an agent to confidently invoke the tool beyond knowing that it closes a currently valid fact and preserves history.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain subject, predicate, object, reason, or project. The parameters are only listed as bare string fields, leaving an agent with no guidance about what values are expected or how they relate to the fact being invalidated.

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

Purpose4/5

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

The description identifies a specific action ('Close') and a specific resource ('currently-valid fact assertion'), and it adds the useful behavior that history is retained. It is distinguishable from sibling tools like kg_add_fact and kg_timeline, though it relies on 'close' rather than the tool's 'invalidate' wording.

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

Usage Guidelines3/5

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

The phrase 'currently-valid' implies the precondition that the fact must be active before invalidation. However, the description does not explicitly name alternatives or state when to prefer this over other KG tools, leaving usage mostly implied rather than directly guided.

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

kg_timelineB
Read-onlyIdempotent

Full chronological history of assertions for a subject.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
projectNo
subjectYes
predicateNo

TDQS

B3.1/5.0
Behavior3/5

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

The description adds that results are full and chronological, but it does not disclose the default limit, whether invalidated assertions are included, or how predicate/project filters affect results. Read-only and idempotent behavior are covered 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.

Conciseness5/5

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

A single concise sentence with no redundant or extraneous content; the core action and resource are front-loaded.

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

Completeness3/5

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

For a tool with no output schema, the description conveys that a chronological history is returned, but omits filtering semantics and default limits, leaving some operational context implicit.

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

Parameters2/5

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

With zero parameter descriptions in the schema, the text only adds meaning to 'subject' (the entity whose assertions are returned). limit, predicate, and project remain unexplained.

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

Purpose4/5

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

The description identifies the resource (chronological assertions for a subject) and implies retrieval via 'full history', distinguishing it from a point-in-time lookup like kg_at. It lacks an explicit verb but is clear in context.

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

Usage Guidelines2/5

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

No guidance is given on when to prefer this tool over siblings such as kg_at or kg_add_fact, nor any mention of use cases or alternatives.

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

learn_errorC

Structured error capture: file, error, root_cause, fix, pattern. After N (default 3) errors share the same pattern, a prevention rule is auto-synthesized into the rules table.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixYes
fileYes
errorYes
patternYes
projectNogeneral
categoryNobug
severityNomedium
root_causeYes

TDQS

C2.9/5.0
Behavior3/5

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

The description discloses the key side effect of auto-synthesizing a prevention rule into the rules table, which aligns with the readOnlyHint=false annotation. However, it does not clarify whether repeated calls with the same pattern create duplicate rules or are deduplicated, and it omits any mention of idempotency or potential side effects on existing data.

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

Conciseness4/5

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

The description is a single, concise sentence that efficiently communicates the core functionality and the auto-synthesis behavior. It avoids unnecessary detail, though it could be slightly more structured by separating the parameter list from the side-effect explanation.

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

Completeness2/5

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

Given the complexity (8 parameters, side effects, pattern detection), the description provides insufficient context. It does not explain how the pattern is determined, what the rules table looks like, or the relationship with sibling tools like self_error_log or workflow_learn. The absence of an output schema and lack of examples further reduces completeness.

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

Parameters2/5

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

The description lists the required parameters (file, error, root_cause, fix, pattern) but does not explain their meaning or relationships, and the schema has no descriptions. Optional parameters like project, category, and severity are not mentioned at all, leaving their semantics unclear. The parameter names are self-explanatory but not fully defined, especially 'pattern' and how it differs from 'error'.

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

Purpose4/5

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

The description clearly states 'Structured error capture' and lists the key parameters, making the tool's purpose apparent. However, it does not explicitly name the verb 'record' or 'log', relying on the phrase 'error capture' to imply the action, which is a minor gap.

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

Usage Guidelines2/5

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

The description mentions that after N errors with the same pattern, a prevention rule is auto-synthesized, hinting at when the tool's output becomes useful. But it does not explicitly state when to use this tool versus alternatives (e.g., self_error_log) or when not to use it, leaving usage guidance vague.

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

list_intentsA
Read-onlyIdempotent

List recent user prompts from the intents table, newest first. Filter by project and/or session. Max 500 rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
projectNo
session_idNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds useful behavioral details: ordering (newest first) and a row cap (Max 500 rows). It also clarifies the data source (intents table). No contradictions with annotations, and the added traits are relevant to invocation expectations.

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

Conciseness5/5

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

The description is a single, compact sentence that front-loads the primary purpose (List recent user prompts) and then efficiently adds ordering, filters, and a limit. Every word contributes value; there is no fluff or redundancy.

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

Completeness4/5

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

For a simple list tool with no output schema and annotations covering safety, the description is quite complete. It states the action, data source, sorting, filters, and a row limit. It does not describe the return format (e.g., fields of each prompt), but that is not critical for a straightforward read-only list. The absence of pagination details is mitigated by the limit parameter. Overall, an agent can call it correctly with the given information.

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

Parameters3/5

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

With schema description coverage at 0%, the description must explain parameters. It explicitly covers 'project' and 'session_id' via 'Filter by project and/or session', giving meaning to those string fields. However, the 'limit' parameter is not clearly explained; the mention of 'Max 500 rows' appears to be a cap, but the relationship to the limit parameter (which defaults to 50) is ambiguous. Partial compensation for missing schema descriptions, but not complete.

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

Purpose5/5

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

The description clearly states the action (List), the resource (recent user prompts from the intents table), ordering (newest first), and optional filters. It is specific enough to distinguish from siblings like search_intents, which implies a search-oriented purpose. No ambiguity in what the tool does.

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

Usage Guidelines2/5

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

The description provides filtering options (by project and/or session) but does not explain when to choose this tool over alternatives such as search_intents, memory_timeline, or save_intent. There is no mention of when not to use it or any conditions that would make another tool more appropriate. Usage context is only implied by the action of listing recent prompts.

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

memory_associateA

Associative recall — brain-like spreading activation through knowledge graph. Finds memories through concept resonance, not keyword search. In 'composition' mode, finds minimum set of memories covering all needed concepts.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNorecall=find related, composition=build solution from partsrecall
queryYesNatural language query
projectNoFilter by project
max_resultsNo
min_coverageNoMin coverage for composition mode (0.0-1.0)

TDQS

A3.9/5.0
Behavior2/5

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

The annotations declare readOnlyHint=false, indicating the tool may have side effects, but the description frames it as a recall operation, which implies read-only behavior. It does not disclose any potential state modifications, performance implications, or other behavioral traits. The description adds no transparency beyond the functional modes, and the mismatch with the readOnlyHint is not directly contradictory but leaves the agent uncertain about side effects.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core concept. Every clause adds value: the mechanism, the contrast with keyword search, and the special mode. No filler or redundancy.

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

Completeness3/5

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

While the description covers the tool's purpose and modes, it does not describe the return format or output structure. Since there is no output schema, the description should indicate what the tool returns (e.g., a list of memories, scores, or a composition result). It also omits any mention of parameter interactions or edge cases, such as how max_results and min_coverage behave together. These gaps leave the agent guessing about the response shape.

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

Parameters4/5

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

Schema description coverage is 80%, so most parameters are already documented. The description adds meaningful context for the 'mode' parameter by explaining the composition mode's goal (minimum set of memories covering concepts). It also clarifies that 'query' is natural language for concept resonance rather than keywords. This goes beyond the schema's brief descriptions.

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

Purpose5/5

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

The description clearly states the tool performs associative recall through a knowledge graph, explicitly contrasting it with keyword search. It also distinguishes the two modes (recall and composition), which differentiates it from siblings like memory_search_by_tag and memory_timeline. The verb 'finds' and resource 'memories' are specific and unambiguous.

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

Usage Guidelines4/5

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

The description explains that this is for associative recall rather than keyword search, implying when to use it. It also describes the composition mode for building solutions from parts. However, it does not explicitly name alternative tools or provide clear when-not-to-use scenarios, only a general contrast with keyword search.

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

memory_conceptsC
Read-onlyIdempotent

List or search concepts in the knowledge graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by node type
limitNo
queryNoSearch concepts by name
include_memoriesNoInclude linked knowledge records

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to repeat these. However, the description adds no additional behavioral context (e.g., that it returns a list without side effects), which is acceptable but not enhancing.

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

Conciseness4/5

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

The description is a single concise sentence with no redundancy or fluff. It is efficiently structured, though it could benefit from a bit more detail without becoming verbose.

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

Completeness2/5

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

Given the large number of sibling tools (many memory-related), the description is too sparse to provide adequate context. It does not hint at what 'concepts' specifically means, how this differs from other search tools, or any special behavior like returning linked memories when include_memories is true.

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

Parameters2/5

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

The schema provides descriptions for 3 of 4 parameters (type, query, include_memories), but the 'limit' parameter has no description, resulting in 75% coverage, below the 80% threshold. The description does not compensate by explaining any parameters, leaving the behavior of 'limit' ambiguous.

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

Purpose4/5

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

The description uses specific verbs 'List or search' and a clear resource 'concepts in the knowledge graph,' which distinguishes it from most sibling tools. However, it does not fully differentiate from other search-related tools like memory_search_by_tag or memory_recall, so it is not a perfect 5.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as memory_recall, memory_search_by_tag, or memory_timeline. The description lacks any contextual cues to help an agent decide when to invoke this specific tool.

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

memory_consolidateA

Find and merge duplicate/similar knowledge records. Keeps the longest version, supersedes shorter duplicates. Reduces noise in recall results.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoIf true, only show what would be merged
projectNoConsolidate only this project (optional)
thresholdNoSimilarity threshold 0.0-1.0 (default 0.75)

TDQS

A4/5.0
Behavior4/5

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

The description transparently states that records are merged, the longest version is kept, and shorter duplicates are superseded. This clearly implies a mutating operation even without an explicit warning about side effects.

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

Conciseness5/5

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

The description is concise and well-structured, covering the action, strategy, and benefit in three short sentences without any redundant wording.

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

Completeness4/5

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

The description is complete enough for a tool of this complexity, covering the operation, the merge strategy, and the result. It does not describe return values, but no output schema is expected and the dry_run parameter helps imply preview behavior.

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

Parameters3/5

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

The input schema already provides complete parameter descriptions, including defaults and ranges. The description adds no further parameter-level meaning, so it meets the baseline but does not exceed it.

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

Purpose5/5

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

The description clearly states the operation: finding and merging duplicate or similar knowledge records. It also explains the merging strategy and the overall benefit, leaving no ambiguity about what the tool does.

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

Usage Guidelines3/5

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

The description explains the purpose and benefit, but it does not explicitly say when to use this tool versus alternatives like memory_delete or memory_search. Usage guidance is implied rather than directly stated.

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

memory_consolidate_statusA
Read-onlyIdempotent

v11.0 W2-G: report the consolidation daemon state — per-project last-run, active locks, recent activity. Use to verify the idle-project worker is making progress without interfering with active work.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint true, idempotentHint true, and destructiveHint false. Description aligns with these by saying it 'reports' and checks progress 'without interfering with active work,' adding useful behavioral context beyond the annotations.

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

Conciseness5/5

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

Description is two short sentences with the main action front-loaded. It includes only essential detail and no filler, making it easy to parse quickly.

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

Completeness5/5

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

Given the simple zero-parameter read-only nature of the tool, the description sufficiently covers what state is reported and why it is used. No output schema is present, so the listed output aspects (last-run, locks, recent activity) are enough context.

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

Parameters5/5

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

Tool has no parameters, and the empty parameter schema fully documents this. There is nothing additional for the description to explain, so parameter semantics are complete.

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

Purpose5/5

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

Description uses a clear verb ('report') and specifies the object (consolidation daemon state) plus concrete details like per-project last-run, active locks, and recent activity. It also states the intended purpose of verifying idle-project worker progress, making the tool's role unambiguous.

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

Usage Guidelines4/5

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

Description explicitly says 'Use to verify the idle-project worker is making progress,' giving a clear use case. It does not explicitly name alternative tools or when-not-to-use conditions, but the context is sufficiently clear for this read-only status check.

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

memory_context_buildC
Read-onlyIdempotent

Build optimal context for a query. Combines: spreading activation + knowledge graph + episodes + skills + self-model. The 'brain thinking' tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWhat you need context for
projectNo
max_tokensNo

TDQS

C2.5/5.0
Behavior3/5

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

Annotations already convey read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds that it combines retrieval mechanisms, but does not explain actual processing steps, output format, or potential costs.

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

Conciseness4/5

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

The description is short and front-loaded, with only minor filler in the 'brain thinking' metaphor. It could be more informative, but it does not waste words.

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

Completeness2/5

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

Given the large sibling set and no output schema, the description leaves ambiguity about the return value, the meaning of 'context', parameter details, and how this differs from other memory tools. It is not complete enough for reliable selection.

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

Parameters1/5

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

Schema coverage is only 33% (1 of 3 parameters described). 'query' has a terse description, while 'project' and 'max_tokens' are undocumented, and the description does not compensate for these gaps.

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

Purpose3/5

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

States a verb and resource ('build optimal context for a query') and hints at internal mechanisms, but 'optimal context' and 'brain thinking' are vague. With many similar memory/context sibling tools, it does not clearly define what distinct artifact it produces.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus memory_recall, memory_search_by_tag, memory_context, or other siblings. No conditions, alternatives, or situational examples are provided.

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

memory_deleteA
DestructiveIdempotent

Delete a knowledge record (soft-delete). Removes from search results and ChromaDB. Use when knowledge is wrong or no longer relevant.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesKnowledge record ID to delete

TDQS

A4.3/5.0
Behavior4/5

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

Discloses that it performs a soft-delete and removes from search results and ChromaDB, aligning with the destructiveHint annotation. It does not explain whether the record is recoverable or how it interacts with related knowledge, but the soft-delete term implies reversible behavior. No contradiction with annotations.

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

Conciseness5/5

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

The description is concise and directly to the point, using only two sentences to convey purpose, effect, and usage condition. No unnecessary fluff or redundant details.

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

Completeness5/5

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

Given the simplicity of the tool with one parameter and no output schema, the description provides all necessary context: what it does, when to use it, and its effect. It is fully self-contained and does not leave the agent guessing about behavior or prerequisites.

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

Parameters3/5

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

The schema has full coverage (100%) with a single 'id' parameter described as 'Knowledge record ID to delete'. The description repeats the same information without adding extra context, such as how to obtain the ID or validation rules, so it adds no new semantic value beyond the schema.

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

Purpose5/5

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

The description clearly states the action (delete), the resource (knowledge record), and the effect (soft-delete, removes from search and ChromaDB). It also gives a usage context ('when knowledge is wrong or no longer relevant'), distinguishing it from other memory tools that might retrieve or update.

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

Usage Guidelines4/5

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

Explicitly states when to use the tool ('Use when knowledge is wrong or no longer relevant'). It does not mention alternative tools, but the sibling list includes memory_forget and kg_invalidate_fact, so a brief comparison would have been helpful; however, the provided condition is sufficient for basic usage guidance.

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

memory_entity_resolveB
Idempotent

v11.0 W1-F: resolve a mention to its canonical entity within a project+type. Cross-session coreference via name/alias index + embedding cosine. Returns canonical_id, matched_via, and is_new flag. Pronouns return -1.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoEntity type: person, technology, project, company, ...person
mentionYes
projectNogeneral
thresholdNoCosine similarity threshold for embedding match.
create_if_missingNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false and idempotentHint=true, and the description adds some context about pronoun behavior and matched_via. However, it does not disclose the potential side effect of creating a new entity when create_if_missing is true, which is a significant behavioral aspect not covered by annotations alone.

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

Conciseness4/5

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

The description is mostly concise and well-structured, packing method, behavior, and return values into a short paragraph. The inclusion of 'v11.0 W1-F' at the start is extraneous and could confuse, but does not significantly harm clarity.

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

Completeness3/5

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

Given the moderate complexity (5 parameters, one required) and no output schema, the description provides sufficient high-level context (return values, special behavior) but lacks detail on parameter semantics and side effects. It is adequate for a basic use case but not comprehensive for edge cases.

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

Parameters2/5

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

Schema coverage is only 40% (type and threshold have descriptions), and the description text does not elaborate on the undocumented parameters (mention, project, create_if_missing). Without additional explanation, an agent may not understand the full meaning of these parameters, especially 'mention' and 'create_if_missing' behavior.

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

Purpose5/5

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

The description clearly states the tool's function: resolving a mention to a canonical entity within a project+type, using cross-session coreference via name/alias index and embedding cosine. It also specifies the return values (canonical_id, matched_via, is_new) and the special case for pronouns returning -1, leaving no ambiguity about purpose.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus alternatives. It only explains the basic operation without context on ideal scenarios, prerequisites, or when another tool (e.g., memory_save or memory_search_by_tag) 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.

memory_episode_recallB
Read-onlyIdempotent

Find past episodes (experiences). Search by concepts, outcome, project, or impact.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoSearch narrative text
outcomeNo
projectNo
conceptsNo
min_impactNo

TDQS

B3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no additional behavioral context such as result ordering, pagination, or what constitutes an 'episode'. It is consistent with annotations but provides no extra value beyond them.

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

Conciseness5/5

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

A single, front-loaded sentence that states the purpose and search dimensions with zero waste. It is appropriately concise for a straightforward search tool.

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

Completeness2/5

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

With 6 parameters, no output schema, and no parameter descriptions, the description is too sparse. It fails to clarify what an 'episode' is, how impact is measured, what the default limit means, or what the return structure looks like. An agent calling this tool would lack critical information for correct invocation.

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

Parameters2/5

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

Schema description coverage is only 17% (only the query parameter has a description). The tool description lists the searchable fields (concepts, outcome, project, impact) but does not explain their semantics or how they interact. Parameters like min_impact and limit are not elaborated, leaving agents to infer meaning from names alone.

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

Purpose4/5

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

The description clearly states the tool finds past episodes and lists the search dimensions (concepts, outcome, project, impact). It distinguishes from many sibling memory tools by focusing on episodes, though it does not explicitly name an alternative to differentiate from, leaving some ambiguity against memory_recall or memory_timeline.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It does not mention when to prefer it over memory_recall, memory_timeline, or memory_search_by_tag, nor any exclusions or prerequisites. The usage context is implied but not explicit.

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

memory_episode_saveA

Save an episode — narrative of WHAT HAPPENED and HOW. Not just facts, but the journey: what was tried, what failed, what worked.

ParametersJSON Schema
NameRequiredDescriptionDefault
outcomeYes
projectNogeneral
conceptsNoKey concepts involved
narrativeYes2-3 sentence narrative of what happened
key_insightNoThe aha moment, if any
impact_scoreNo0.0-1.0, how significant
approaches_triedNo
frustration_signalsNo

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already indicate this is not read-only, not idempotent, and not destructive, so the behavioral profile is partially known. The description adds that it saves an episode, but does not specify side effects like whether it updates an existing episode or always creates a new one. It does not contradict the annotations.

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

Conciseness5/5

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

The description is two concise sentences, front-loading the action and then elaborating on the nuance. Every word contributes to the purpose, with no fluff or irrelevant detail. It is appropriately sized for a tool of this complexity.

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

Completeness3/5

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

The description gives the core purpose and hints at the type of content to include, but it does not explain the required parameters or the meaning of the outcome enum, nor does it address potential side effects or return values. Given the moderate complexity of 8 parameters, this leaves gaps for an agent trying to call it correctly. It is not fully self-contained.

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

Parameters2/5

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

Schema description coverage is 50%, with outcome, project, approaches_tried, and frustration_signals lacking descriptions. The description does not clarify any of these parameters, instead focusing on the overall narrative concept. It fails to compensate for the missing schema details, so parameter semantics are weak.

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

Purpose5/5

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

The description clearly states the action (save) and the object (an episode) with a specific definition of what an episode is (narrative of what happened and how). It contrasts with just saving facts, which distinguishes it from memory_save. This is a clear, specific purpose.

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

Usage Guidelines4/5

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

The description implies the tool is for recording narrative journeys, including what was tried, failed, and worked, which gives a clear use case. It contrasts with facts, suggesting use when a richer account is needed, but it does not explicitly name alternatives or conditions. This provides moderate guidance but falls short of explicit when-to-use instructions.

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

memory_eval_contradictionsB
Read-onlyIdempotent

v11.0 Phase 8: runs contradiction_detector against a labelled fixture. Requires balanced/deep mode (LLM). Returns {status: 'not_implemented', ...} if module is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofast
fixture_pathNo

TDQS

B3.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds useful behavioral details: it requires balanced/deep mode and returns {status: 'not_implemented', ...} if unavailable. 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.

Conciseness3/5

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

The description is one sentence, but the leading 'v11.0 Phase 8:' is unnecessary metadata that does not help an agent decide to invoke the tool. The rest is reasonably concise.

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

Completeness2/5

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

The description explains purpose and a failure condition, but it omits what a successful run returns, leaves fixture_path unexplained, and does not clarify mode values beyond the contradictory requirement. It is not complete enough for reliable invocation.

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

Parameters1/5

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

Schema coverage is 0%, and the description does not explain fixture_path. It mentions mode must be balanced/deep, which actually contradicts the schema default of 'fast', making mode semantics confusing rather than helpful.

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

Purpose4/5

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

The description clearly states the tool runs contradiction_detector against a labelled fixture, which distinguishes it from other memory_eval_* siblings. The version/phase prefix adds some noise, but the core purpose is unambiguous.

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

Usage Guidelines3/5

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

It states a prerequisite ('Requires balanced/deep mode') and a fallback behavior for missing module, but it does not explicitly explain when to choose this over the many sibling eval tools or how it fits among them.

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

memory_eval_entity_consistencyC
Read-onlyIdempotent

v11.0 Phase 8: verifies entity_dedup canonicalization is stable across repeated saves of variant tag spellings.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofast

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already indicate read-only, idempotent, and non-destructive behavior, so the bar is lower. The description's 'verifies' aligns with these annotations, but it does not add context about what happens on failure, whether a report is returned, or any side effects 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.

Conciseness4/5

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

The description is a single sentence with no extraneous words, and the main verb 'verifies' is front-loaded. It is compact and to the point, though the density of technical terms slightly reduces clarity.

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

Completeness2/5

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

No output schema or return value is described, which is important for an evaluation tool. The description also lacks context about how this fits into the broader memory evaluation workflow or what 'canonicalization stability' means in practice, making it incomplete for an agent operating in a complex domain.

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

Parameters3/5

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

The schema fully documents the 'mode' parameter with an enum (fast/balanced/deep) and a default value, so coverage is high. The description adds no additional meaning or usage detail for the parameter, leaving the baseline score of 3 appropriate.

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

Purpose4/5

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

The description clearly states a specific verb ('verifies') and a specific resource ('entity_dedup canonicalization'), and the phrase 'across repeated saves of variant tag spellings' narrows the scope. It is distinct from sibling evaluation tools by focusing on entity consistency, though the jargon is dense and not fully explained.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus the many sibling evaluation tools (e.g., memory_eval_long_context, memory_eval_temporal). There is no mention of use cases, prerequisites, or alternative selection criteria, leaving the agent without direction on when to invoke it.

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

memory_eval_locomoB
Read-onlyIdempotent

v11.0 Phase 8: run the LongMemEval-style recall+prevention scenario suite (loaded from evals/scenarios/) against the live store. Forces MEMORY_MODE=fast by default. Returns {scenarios_total, scenarios_passed, recall_at_5, recall_at_10, latency_ms, mode, llm_calls_during_eval, network_calls_during_eval}.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofast
limitNoCap how many scenarios to run.
top_kNo
scenarios_pathNoOptional override path.

TDQS

B3.4/5.0
Behavior4/5

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

The description discloses the key behavioral detail of forcing MEMORY_MODE=fast, which is not covered by the annotations. Since the annotations already indicate read-only, idempotent, and non-destructive behavior, the description adds useful context without contradicting them.

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

Conciseness5/5

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

The description is a single, well-structured sentence that concisely conveys the action, input source, default behavior, and return fields. There is no extraneous information, making it highly efficient.

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

Completeness4/5

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

Given the tool's moderate complexity (4 parameters, no output schema), the description provides the return fields and default mode, which is helpful. However, it omits details about scenario format or output interpretation, leaving minor gaps for a fully autonomous agent.

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

Parameters2/5

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

The schema description coverage is 50% (only limit and scenarios_path have descriptions). The tool description does not clarify the meaning of mode or top_k, nor does it explain the return field semantics beyond listing them. This leaves significant ambiguity for the agent.

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

Purpose4/5

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

The description clearly states the tool's purpose: running a LongMemEval-style recall+prevention scenario suite against the live store. It differentiates from sibling eval tools by specifying the scenario type, though it does not explicitly name the alternative tools.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus the many sibling eval tools (e.g., memory_eval_recall, memory_eval_temporal). It implies usage for LongMemEval-style scenarios but doesn't state conditions or alternatives directly.

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

memory_eval_long_contextC
Read-onlyIdempotent

v11.0 Phase 8: large-context recall scenario. Saves N records and queries them at the tail. Reuses eval_harness scenarios tagged 'long_context' if present.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofast
top_kNo
n_recordsNo

TDQS

C2.4/5.0
Behavior1/5

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

The description states that the tool 'Saves N records', which implies write/create behavior, but the annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. This is a direct contradiction and could mislead an agent about 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.

Conciseness3/5

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

The description is brief and mostly to the point, but the opening 'v11.0 Phase 8' is version/phase noise that does not help an agent. The remaining sentences are functional but somewhat vague.

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

Completeness2/5

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

The description lacks enough context for an agent to confidently invoke the tool: it does not define what 'large-context recall' means in practice, what output to expect, how mode affects behavior, or how this evaluation relates to the many sibling evaluation tools.

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

Parameters2/5

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

The schema provides no parameter descriptions, and the description only loosely maps 'N records' to n_records and 'queries them at the tail' to the evaluation behavior. The meanings of mode and top_k, and the effect of their defaults, are not explained.

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

Purpose4/5

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

The description identifies a large-context recall scenario and states that it saves N records and queries them at the tail, which makes the core evaluation behavior clear. It is reasonably distinguishable from sibling memory_eval_* tools by the explicit 'long_context' tag mention.

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

Usage Guidelines2/5

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

The description gives only a subtle hint about reusing eval_harness scenarios tagged 'long_context', but does not explicitly say when to choose this tool over sibling evaluation tools such as memory_eval_recall or memory_eval_locomo. No clear use-case boundaries are provided.

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

memory_eval_recallC
Read-onlyIdempotent

v11.0 Phase 8: generic recall benchmark on a dataset path or a small built-in fixture. Same payload shape as memory_eval_locomo.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofast
limitNo
top_kNo
dataset_pathNo

TDQS

C2.7/5.0
Behavior2/5

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

The description adds little beyond the annotations. It mentions accepting a dataset path or built-in fixture but does not disclose expected side effects, return behavior, or how the benchmark is executed.

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

Conciseness4/5

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

The description is brief and to the point, with no redundant information. It efficiently conveys the core purpose in two sentences.

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

Completeness2/5

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

The description is incomplete for a benchmark tool. It does not explain what the benchmark measures, what output to expect, how to interpret results, or any additional context needed to use the tool effectively.

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

Parameters2/5

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

Only dataset_path is implicitly referenced via 'dataset path or built-in fixture'. The parameters mode, limit, and top_k are not explained, and the schema provides no descriptions, leaving most parameters ambiguous.

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

Purpose4/5

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

The description clearly indicates a generic recall benchmark and distinguishes it from memory_eval_locomo by referencing the same payload shape. It names the resource (recall) and implies evaluation, though it could be more explicit about the exact action.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool over alternatives. The reference to memory_eval_locomo is helpful but does not explain selection criteria or use cases.

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

memory_eval_temporalC
Read-onlyIdempotent

v11.0 Phase 8: temporal recall using temporal_kg + temporal_filter. Returns {status: 'not_implemented', ...} when modules are missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofast
limitNo

TDQS

C2.7/5.0
Behavior3/5

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

The description discloses that it returns a 'not_implemented' status when modules are missing, which is a useful behavioral detail. However, it does not describe any other side effects, return formats, or error conditions beyond that, and the read-only and idempotent annotations already cover safety.

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

Conciseness4/5

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

The description is a single sentence that directly states the purpose and a key behavior. It is concise and avoids unnecessary fluff, though it does include version and phase information that might be considered extraneous.

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

Completeness2/5

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

Given the simple schema and lack of output schema, the description provides minimal context. It does not explain what the tool actually returns (beyond the not_implemented case), how mode or limit influence results, or what temporal recall entails. This leaves significant gaps for an agent trying to decide whether to invoke it.

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

Parameters2/5

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

The input schema defines 'mode' with an enum and a default, and 'limit' as an integer, but the description does not explain their meanings or how they affect the operation. The enum values are self-explanatory to some degree, but 'limit' is left completely undefined.

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

Purpose3/5

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

The description states it performs 'temporal recall using temporal_kg + temporal_filter', which gives a general sense of the operation, but the verb 'temporal recall' is vague and it does not clearly distinguish from sibling memory_eval_* tools. It also mentions a version and phase, which adds context but not clarity.

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

Usage Guidelines2/5

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

No explicit guidance is provided on when to use this tool versus alternatives. The mention of 'Phase 8' hints at a workflow, but there is no direct comparison to other memory_eval_* tools or any clear usage conditions.

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

memory_exportA
Read-onlyIdempotent

Export all knowledge as JSON for backup or migration. Includes knowledge, sessions, and relations.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoExport only this project (optional)
save_to_fileNoSave to <memory-dir>/backups/ (default true)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already convey read-only, idempotent, non-destructive behavior; description adds context by noting the export includes knowledge, sessions, and relations, and that save_to_file defaults to persisting to a backups directory.

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

Conciseness5/5

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

Two concise sentences deliver action, scope, format, and purpose with no filler or redundancy.

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

Completeness4/5

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

For a simple two-parameter tool with no output schema, the description adequately covers what is exported and why; it could be slightly more explicit about the return shape when save_to_file is false.

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

Parameters3/5

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

Schema covers both parameters with descriptions; the tool description does not add much beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

Description states a specific action (Export), a specific resource (all knowledge), a format (JSON), and a clear purpose (backup or migration), which distinguishes it from narrower memory retrieval tools.

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

Usage Guidelines4/5

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

Explicitly frames the tool for backup or migration scenarios, giving an agent clear context for when to choose it; no explicit alternative comparisons are needed given the broad export scope.

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

memory_extract_sessionA

Get pending session transcripts for knowledge extraction. Previous sessions are auto-captured on exit. Use action='list' to see pending, 'get' to read transcript, then save knowledge via memory_save, then 'complete' to mark as processed.

ParametersJSON Schema
NameRequiredDescriptionDefault
chunkNoChunk number for large transcripts (0-based)
actionYeslist: show pending sessions. get: return transcript data. complete: mark as done.
session_idNoSession ID (required for 'get' and 'complete')

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses that sessions are auto-captured on exit and that 'complete' marks them as processed, which are side effects. This is consistent with readOnlyHint=false. It doesn't mention any destructive actions, aligning with destructiveHint=false, but doesn't elaborate on state changes beyond marking processed.

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

Conciseness5/5

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

The description is two concise sentences. The first states the purpose, the second gives the workflow. There is no redundancy or unnecessary detail, making it easy to parse and act on.

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

Completeness4/5

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

For a tool with 3 parameters and no output schema, the description covers the primary workflow and parameter usage. It doesn't mention output format, error handling, or chunking details, but given the simplicity and the presence of schema descriptions, it is sufficiently complete for an agent to invoke correctly.

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

Parameters4/5

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

The schema already covers parameter meanings (action enum, session_id required for get/complete, chunk for large transcripts). The description adds value by explaining the workflow order and how the parameters are used together, which goes beyond simple definitions. This is helpful, though not essential.

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

Purpose4/5

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

The description clearly states the tool's purpose: retrieving pending session transcripts for knowledge extraction, with a specific verb and resource. It also mentions automatic capture on exit, providing context. However, it does not explicitly differentiate from sibling tools like memory_get or memory_recall, so it's not a perfect 5.

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

Usage Guidelines4/5

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

The description provides a clear workflow: use action='list' to see pending, 'get' to read, then save via memory_save, and 'complete' to mark processed. It mentions a subsequent step (memory_save) which gives usage context. It doesn't explicitly state when not to use this tool or compare it to alternatives, but the workflow is helpful.

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

memory_forgetA
DestructiveIdempotent

Apply retention policy: archive stale records (>180d, never recalled, low confidence), purge very old archived records (>365d). Keeps memory clean.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoIf true, only show what would be affected

TDQS

A4/5.0
Behavior3/5

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

The tool is marked destructiveHint=true, and the description mentions 'purge', which implies deletion. However, it does not explicitly state that purged records are permanently removed, that archived records are moved to a different location, or that the operation might affect linked data. The annotations cover the core destructive nature, but the description adds limited behavioral detail beyond the obvious archive/purge actions.

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

Conciseness5/5

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

The description is concise and well-structured, using exactly two sentences. The first states the primary action and conditions, the second summarizes the benefit. No unnecessary words or redundant explanations are present; every part contributes to understanding the tool's function.

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

Completeness3/5

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

While the description is clear about the operation, it lacks broader context. It does not explain how this tool fits into the memory management lifecycle, nor does it mention what happens after archiving (e.g., whether archived records are still queryable). Given the existence of sibling tools like memory_delete and memory_consolidate, the description could benefit from clarifying the distinction between this automated retention task and those manual/alternative operations. The low overall complexity keeps this from being a serious gap, but the description is not fully complete on its own.

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

Parameters5/5

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

The single parameter, dry_run, has a clear description ('If true, only show what would be affected') that goes beyond the boolean type to explain its effect on the tool's behavior. This fully clarifies the parameter's meaning and how to use it, making the description self-sufficient for parameter understanding.

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

Purpose5/5

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

The description clearly states the tool's primary purpose: applying a retention policy that archives stale records and purges very old archived records. The verbs 'archive' and 'purge' are specific, and the condition thresholds (>180d, >365d) provide concrete scope. This is a clear, unambiguous statement of intent.

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

Usage Guidelines3/5

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

The description does not explicitly contrast this tool with alternatives like memory_delete or memory_consolidate. While it implies use for routine memory maintenance ('Keeps memory clean'), it lacks explicit guidance on when to choose this tool over a direct delete or when not to use it (e.g., if only a single record needs removal). The purpose is clear, but usage boundaries are not spelled out.

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

memory_getA
Read-onlyIdempotent

Batched fetch by ID — complement to memory_recall(mode='index'). Returns full content for ONLY the IDs the caller chose after inspecting an index. Typical 3-layer flow: recall(mode='index') → pick IDs → memory_get(ids=[...]).

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesKnowledge record IDs (max 50 per call; extras are silently dropped)
detailNo'summary' truncates content to 150 chars, 'full' returns everythingfull

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds that it returns full content only for selected IDs, which clarifies output behavior but does not introduce additional side-effect or permission information. This is slightly above baseline because the description reinforces the non-destructive nature.

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

Conciseness5/5

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

The description is concise, using three sentences to convey purpose, relationship to sibling tool, and usage flow. No redundant or filler content; every sentence adds value.

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

Completeness5/5

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

Given the simple parameter set and absence of an output schema, the description fully equips an agent to decide when and how to use the tool. It provides the necessary context about the intended workflow and the tool's role within it, making it complete for this context.

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

Parameters3/5

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

The schema already provides 100% coverage for both parameters including the enum and default for 'detail', and the description of 'ids' mentions the maximum and silent dropping in the schema. The description itself does not add further parameter semantics beyond what the schema already states, so it stays at the baseline of 3.

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

Purpose5/5

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

The description clearly states the verb 'fetch' and the resource 'memory by ID', and explicitly distinguishes it from the sibling tool memory_recall by describing it as a complement and specifying its role in a typical flow (after index inspection). This makes the purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly names the alternative tool (memory_recall(mode='index')) and provides a clear usage flow: recall index first, then pick IDs, then call memory_get. This leaves no doubt about when to use this tool versus others.

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

memory_graphB
Read-onlyIdempotent

Query the unified knowledge graph. Returns neighborhood of a node: connected rules, skills, memories, concepts, entities.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesNode name or ID to explore
depthNoTraversal depth (1-3)
typesNoFilter by node types (rule, skill, concept, etc.)

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description's use of 'Query' aligns with these hints and adds no contradictory claims. It does not elaborate on edge cases like missing nodes or empty results, but given the annotation coverage, this is sufficient.

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

Conciseness5/5

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

The description is a single sentence that directly conveys the core functionality and return types. It is concise, well-structured, and contains no superfluous information.

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

Completeness4/5

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

For a query tool with a relatively simple output, the description adequately informs about the nature of results (connected rules, skills, memories, concepts, entities). It does not specify the exact output format (e.g., list vs. graph), but given the tool's simplicity and lack of an output schema, this is acceptable and does not leave major gaps.

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

Parameters3/5

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

The schema provides descriptions for all three parameters (node, depth, types) with coverage of 100%. The tool description adds no additional semantic detail about these parameters, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool's action ('Query the unified knowledge graph') and its primary output ('neighborhood of a node' with listed connected types). However, it does not distinguish itself from several closely related sibling tools (e.g., memory_graph_index, kg_at, or memory_recall), so its unique purpose is not fully explicit.

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

Usage Guidelines1/5

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

The description provides no guidance on when to use this tool versus the many sibling tools that query or manipulate memory/knowledge graphs. There is no mention of appropriate contexts, prerequisites, or scenarios where this tool is preferred over alternatives.

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

memory_graph_indexA
Idempotent

Reindex CLAUDE.md rules and skills into the knowledge graph. Run after modifying CLAUDE.md or adding new skills.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoall

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate the tool is idempotent and not destructive. The description adds the maintenance context (run after changes) and clarifies that it updates the knowledge graph, but it doesn't disclose any side effects beyond reindexing. Given the annotation coverage, this is acceptable but minimal additional behavioral disclosure.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core action and followed by the trigger condition. There is no redundancy or filler; every word earns its place.

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

Completeness3/5

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

For a simple tool with one optional parameter and no output schema, the description covers the action and when to run it. However, it omits any explanation of the parameter, which means an agent might not realize it can target subsets. Given the default 'all', a full reindex is achievable without parameters, but the omission limits flexibility.

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

Parameters2/5

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

The schema has 0% description coverage, and the description does not mention the 'target' parameter or its possible values (all, claude_md, skills, rules). While the enum values are somewhat self-explanatory, the description fails to explain how they map to the reindex scope, leaving an agent to infer the parameter's role. This is a significant gap that the description should compensate for.

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

Purpose5/5

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

The description clearly states a specific action: 'Reindex CLAUDE.md rules and skills into the knowledge graph.' It names the verb (reindex), the resource (CLAUDE.md rules and skills), and the destination (knowledge graph), and it includes a trigger condition. This distinguishes it from sibling reindex tools like memory_rebuild_fts and memory_rebuild_embeddings, which target different indexes.

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

Usage Guidelines4/5

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

The description explicitly says 'Run after modifying CLAUDE.md or adding new skills,' which is a clear, actionable trigger. It does not mention alternatives or exclusions, but the context is sufficient for an agent to know when this tool is appropriate, especially given the knowledge-graph specificity.

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

memory_graph_statsA
Read-onlyIdempotent

Knowledge graph statistics: nodes, edges, communities, top concepts, health metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

The annotations already indicate read-only, non-destructive behavior, and the description does not contradict them. The mention of 'health metrics' hints at additional informational output, but no further behavioral traits are disclosed beyond what the annotations cover.

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

Conciseness5/5

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

The description is concise and directly lists the output categories. Every word contributes meaning, and the structure is clear without redundancy.

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

Completeness5/5

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

Given that no output schema is provided, the description still lists the key statistics returned. This is sufficient for a user to understand the tool's purpose and typical output, making the description complete in context.

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

Parameters3/5

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

The tool has no parameters, so the schema coverage is complete. The description adds no parameter-specific semantics, but none are needed; the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool provides knowledge graph statistics, listing specific elements: nodes, edges, communities, top concepts, and health metrics. This is distinct from sibling tools like memory_graph (which likely fetches the graph structure) and memory_concepts (which focuses on concepts).

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

Usage Guidelines2/5

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

The description does not explicitly state when to use this tool versus alternatives. It merely describes what it returns, without noting situations where a user should prefer this over memory_graph or memory_concepts, or when it might be inappropriate.

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

memory_historyB
Read-onlyIdempotent

View version history for a knowledge record. Shows the chain of superseded versions (newest → oldest), enabling time-travel through knowledge evolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesKnowledge record ID to get history for

TDQS

B3.4/5.0
Behavior4/5

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

Given the annotations already declare the tool as read-only and non-destructive, the description adds useful behavioral context by specifying that it returns a chain of superseded versions ordered newest-to-oldest. This goes beyond the annotations.

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

Conciseness5/5

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

The description is two sentences with no unnecessary words. It is well-structured, with the core action stated first and a clarifying detail second.

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

Completeness4/5

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

With no output schema, the description provides essential context about the output: it shows a chain of superseded versions and the ordering (newest → oldest). This is sufficient for basic understanding, though it does not detail the fields of each version entry.

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

Parameters3/5

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

The schema covers 100% of parameters (only 'id') with a description that matches the tool's purpose. The description does not add any extra detail about the parameter, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb ('View') and resource ('version history for a knowledge record'), clearly indicating the tool's function. It does not explicitly name a sibling alternative, but the focus on superseded versions (newest → oldest) differentiates it from tools like memory_get or memory_timeline.

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

Usage Guidelines1/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention scenarios or conditions that would make this the preferred choice over memory_get or memory_timeline.

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

memory_observeA

Save a lightweight observation (auto-capture). No dedup, no ChromaDB — fast and cheap. Use for tracking file changes, tool usage, and session activity. Observations auto-cleanup after 30 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNogeneral
summaryYesWhat happened (e.g. 'Modified auth controller')
tool_nameYesWhich tool triggered this (Write, Edit, Bash, etc.)
files_affectedNoList of affected file paths
observation_typeNoType of observationchange

TDQS

A4.4/5.0
Behavior5/5

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

Discloses key behaviors beyond annotations: auto-capture, no dedup, no ChromaDB, fast/cheap, and 30-day auto-cleanup, which informs the agent about retention and performance characteristics.

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

Conciseness5/5

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

Two sentences, no fluff, main action and differentiators front-loaded.

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

Completeness4/5

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

Sufficiently complete for a simple save tool; includes purpose, retention, and performance; no output schema needed, though could mention return value or side effects.

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

Parameters3/5

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

Schema already covers most parameter descriptions (80%); description adds no extra parameter-level detail, so baseline score of 3 is appropriate.

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

Purpose5/5

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

Clearly states it saves lightweight observations for tracking file changes, tool usage, and session activity, and differentiates from heavier memory tools by noting absence of dedup and ChromaDB.

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

Usage Guidelines4/5

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

Explicitly identifies use cases (tracking file changes, tool usage, session activity) and implies alternative for lightweight, fast, cheap saves with 30-day auto-cleanup; could be more explicit about contrasting with memory_save but enough.

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

memory_perf_reportA
Read-onlyIdempotent

v11.0: dump in-process telemetry counters (search_total_ms, embed_ms, fts_ms, vector_ms, llm_calls, network_calls) plus persistent embedding_cache stats. Use to verify the fast hot path stays clean.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses that it dumps telemetry counters and embedding cache stats, adding context beyond the annotations which already declare read-only, idempotent, and non-destructive. It does not mention any side effects or limitations, but given the annotations cover safety, the description provides useful behavioral context about what data is returned. No contradictions with annotations are present.

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

Conciseness5/5

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

The description is a single, well-structured sentence. It front-loads the action ('dump') and immediately lists the specific counters, followed by a clear usage note. The version prefix 'v11.0' is minor and does not detract. Every word contributes value.

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

Completeness4/5

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

For a report tool with no parameters and no output schema, the description covers the essential information: what data it dumps, the purpose, and the intended use case. It does not describe the exact output format, but that is not strictly necessary for an agent to decide to call it. The annotations cover safety, so the description is sufficiently complete.

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

Parameters4/5

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

The tool has zero parameters, and the schema coverage is 100% (vacuous). The description does not need to explain parameters. Per the calibration baseline for 0 params, a score of 4 is appropriate. No parameter information is missing.

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

Purpose5/5

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

The description clearly states the tool's action: 'dump in-process telemetry counters' and enumerates specific counter names, distinguishing it from sibling tools like memory_stats or memory_graph_stats that likely serve different metrics. The mention of 'persistent embedding_cache stats' adds specificity. The purpose is unambiguous and identifiable.

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

Usage Guidelines4/5

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

It provides explicit usage guidance: 'Use to verify the fast hot path stays clean.' This gives a clear when-to-use context. It does not explicitly mention alternatives or when not to use, but the stated purpose is sufficient for an agent to decide if this tool is appropriate compared to other reporting tools. Since there are no parameters, no further usage details are needed.

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

memory_rebuild_embeddingsA
DestructiveIdempotent

v11.0: re-encode every record (or every record in a given embedding space) and update the binary + float32 vectors. Idempotent. Pass embedding_space='code' to refresh only code rows after switching the code embedder. Returns {rebuilt: int, skipped: int}.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
projectNo
batch_sizeNo
embedding_spaceNoOptional: only re-encode rows in these spaces.

TDQS

A3.9/5.0
Behavior4/5

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

Description says 'update' and 're-encode', clearly indicating mutation, and adds idempotency info. Annotations already mark it destructive and not read-only, so no contradiction; slight lack of detail on potential data loss or performance impact.

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

Conciseness5/5

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

Very concise: two sentences covering functionality, idempotency, an example, and the return shape. No superfluous words.

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

Completeness2/5

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

Mentions the return shape ({rebuilt, skipped}) but leaves significant gaps: meaning of limit, project, batch_size is unexplained, and there is no warning about side effects or performance. Given the tool mutates records, more context is needed.

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

Parameters2/5

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

Only embedding_space has a description in the schema, and the description adds meaning for it. The other three parameters (limit, project, batch_size) remain undocumented, and the description does not compensate for the low 25% coverage.

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

Purpose5/5

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

Clearly states the action (re-encode and update vectors), the resource (records in an embedding space), and provides a concrete usage example (embedding_space='code').

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

Usage Guidelines4/5

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

Gives an explicit scenario for using the tool (refreshing code rows after switching the embedder) and mentions idempotency, but does not contrast with alternative tools or state when not to use it.

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

memory_rebuild_ftsA
DestructiveIdempotent

v11.0: drop and rebuild the SQLite FTS5 virtual table from knowledge rows. Useful after migrations or content_type column changes that the FTS triggers didn't see. Returns {rebuilt: int}.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

The description adds details beyond the annotations by mentioning the return value '{rebuilt: int}' and the reason for use, while the destructive and idempotent nature is already captured in annotations.

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

Conciseness5/5

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

The description is two short sentences, leading with the action and then providing context, with no extraneous detail.

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

Completeness4/5

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

The description covers what the tool does, when to use it, and its return value, which is sufficient for a simple maintenance operation; a note on potential side effects (e.g., temporary unavailability) would make it fully complete.

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

Parameters3/5

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

There are no parameters, so the schema is trivially covered; the description adds no parameter-specific information beyond what the empty schema implies.

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

Purpose5/5

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

The description clearly states the specific action ('drop and rebuild the SQLite FTS5 virtual table') and the resource ('knowledge rows'), making the purpose unambiguous.

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

Usage Guidelines4/5

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

It provides a clear condition for when to use the tool ('after migrations or content_type changes that the FTS triggers didn't see'), though it does not explicitly contrast with alternative tools.

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

memory_recallA
Read-onlyIdempotent

Search ALL memory: decisions, solutions, facts, lessons from ALL past sessions. 6-stage pipeline: FTS5+BM25 → semantic → fuzzy → graph → (optional) CrossEncoder → (optional) MMR. Default: hybrid mode (BM25 + semantic + RRF). Use BEFORE starting any task. v11.0: routes to fast hot path when MEMORY_MODE=fast (default). Use memory_search_fast / memory_explain_search for explicit fast routing.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoProgressive-disclosure mode: 'search' (default) = normal results, 'index' = ultra-compact metadata only (id+title+score+type+project+created_at, ~40-60 tok/hit, no cognitive expansion, use memory_get(ids=...) to fetch full content), 'timeline' = top-K hits expanded with ±neighbors from same session (chronological)search
typeNoall
limitNo
queryYesWhat to search for
branchNoFilter by git branch (also includes branch-agnostic records)
detailNoLevel of detail: 'compact' ~50 tokens/result (id+title+score), 'summary' truncates content to 150 chars, 'full' returns everything, 'auto' picks based on query complexity (paths/urls/code → full, short → compact). Ignored when mode!='search'.full
fusionNoScore fusion method: 'rrf' = Reciprocal Rank Fusion (better multi-tier ranking), 'legacy' = original additive scoringrrf
intentNoFilter by classified intent (question|procedural|fact|decision|problem|solution|incident|plan)
rerankNoEnable CrossEncoder re-ranking for higher precision (adds ~30ms latency)
topicsNoFilter results to records tagged with any of these topics (from deep enrichment)
diverseNoEnable MMR diversity to reduce redundant results (useful for broad queries)
projectNoFilter by project name
entitiesNoFilter by extracted entity names (technology/person/project, case-insensitive)
neighborsNoTimeline mode only: how many records before/after each hit to include.
expand_budgetNoMax number of additional records to include via graph expansion
decisions_onlyNoReturn only structured decisions (v8.0): type=decision AND tags contain 'structured'. Results include parsed schema payload under 'decision'.
expand_contextNoAdd graph-related records (1-hop neighbors via knowledge graph) as 'expansion' results

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly and idempotent annotations, the description discloses behavioral details such as the 6-stage pipeline, default hybrid mode, latency implications of rerank, and the behavior of timeline mode (top-K hits expanded with neighbors). This provides rich transparency about how the tool operates.

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

Conciseness5/5

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

The description is concise (5 sentences) and front-loaded with the core purpose, followed by pipeline overview, defaults, and usage guidance. Every sentence adds value with no redundancy.

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

Completeness5/5

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

Given the tool's complexity (17 parameters, many with detailed schema descriptions) and no output schema, the description is complete enough. It provides an overview, pipeline context, default behaviors, and usage guidance, covering all necessary context for invocation.

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

Parameters3/5

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

Schema description coverage is 88%, already high. The tool description adds little beyond the schema's parameter descriptions; it does mention defaults and pipeline stages but does not elaborate on parameter semantics beyond what the schema provides. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Search ALL memory: decisions, solutions, facts, lessons from ALL past sessions.' It also distinguishes itself from memory_search_fast by noting explicit fast routing, making the purpose and differentiation unambiguous.

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

Usage Guidelines5/5

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

The description gives explicit usage guidance: 'Use BEFORE starting any task' and directs users to memory_search_fast / memory_explain_search for explicit fast routing. This clearly tells when to use this tool versus alternatives.

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

memory_recall_iterativeA
Read-onlyIdempotent

v11.0 W1-B: IRCoT-style iterative retrieval. Decomposes the query into sub-questions, retrieves per sub-question, and asks a planner LLM whether more retrieval is needed. Best for multi-hop questions. Returns unified evidence + provenance per iteration.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
projectNo
llm_modelNohaiku
max_itersNo
k_per_iterNo

TDQS

A3.9/5.0
Behavior5/5

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

Beyond the read-only and idempotent annotations, the description reveals the internal process: decomposes query, retrieves per sub-question, and consults a planner LLM. It also discloses the output shape ('unified evidence + provenance per iteration'), which is valuable given no output schema. This provides a clear behavioral model.

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

Conciseness5/5

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

The description is concise, with two sentences that pack essential information. It front-loads the core functionality (iterative retrieval) and adds relevant context (multi-hop, output format). No filler or redundancy.

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

Completeness2/5

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

While the description explains the retrieval strategy and high-level output, it omits crucial parameter semantics and any detail about how the iterative process is configured (e.g., max_iters, k_per_iter). Without parameter clarification, an agent cannot properly invoke the tool. The description provides partial context but is far from complete.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate by explaining parameters. It does not mention project, llm_model, max_iters, or k_per_iter at all. Even the required 'query' parameter is only implied, not clarified. This is a critical gap for usability.

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

Purpose5/5

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

The description clearly states the tool's purpose: IRCoT-style iterative retrieval. It distinguishes itself from simpler recall tools by emphasizing decomposition into sub-questions and multi-hop suitability. The verb 'retrieves' and the process description make the function explicit.

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

Usage Guidelines4/5

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

Explicitly notes 'Best for multi-hop questions,' giving a clear when-to-use condition. While it doesn't name specific alternatives, this guidance differentiates it from single-hop recall tools. The reference to iterative planning further signals when this is appropriate.

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

memory_reflect_nowB

Run reflection (the 'sleep' process). Consolidates knowledge, finds patterns, generates skill proposals, updates self-model.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoquick=dedup only, full=digest+synthesize, weekly=deep analysisfull

TDQS

B3.4/5.0
Behavior3/5

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

The description discloses that the tool updates the self-model and consolidates knowledge, which implies state changes, but it does not explicitly state side effects, reversibility, or what happens to data. Annotations indicate readOnlyHint=false and destructiveHint=false, which are consistent with the description but add no extra detail. The description goes slightly beyond the annotations by mentioning 'updates self-model' but does not fully elaborate on behavioral implications.

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

Conciseness5/5

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

The description is exceptionally concise—two sentences that pack all essential information. It front-loads the primary purpose and then lists the key actions without any fluff. There is no redundant or irrelevant text, making it easy to parse and understand quickly.

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

Completeness4/5

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

Given the tool has only one parameter, no output schema, and a clear description of its actions, the context is largely complete. However, the description does not mention what the tool returns (e.g., success confirmation or a summary of reflection), and given the large sibling set, a note on when to prefer this over memory_consolidate would improve completeness. Still, the core functionality is adequately covered.

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

Parameters3/5

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

The schema description covers the 'scope' parameter with a full enum and descriptions for each option (quick, full, weekly), so parameter semantics are already well-documented. The tool description does not add extra context beyond what the schema provides. With 100% schema coverage, the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool's function with a specific verb ('Run reflection') and resource ('the sleep process'), and lists concrete actions (consolidates, finds patterns, generates proposals, updates self-model). While it doesn't explicitly contrast with sibling tools like memory_consolidate or self_reflect, the specificity of the actions makes the purpose clear enough for an agent to understand what it does.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus its siblings (e.g., memory_consolidate, self_reflect). It does not mention conditions, prerequisites, or alternatives. An agent would have to infer usage from the name and description alone, which is insufficient given the many overlapping memory and reflection tools.

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

memory_relateB

Create a typed relation between two knowledge records. Enriches graph expansion in Tier 4 search. Types: causal, solution, context, related, contradicts.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesRelation type
to_idYesTarget knowledge record ID
from_idYesSource knowledge record ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate a non-read-only, non-idempotent, non-destructive operation. The description's 'Create' aligns with these, and it adds the graph expansion context. However, it does not disclose side effects like whether duplicates are prevented, ID existence checks, or return behavior, so it adds minimal 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.

Conciseness4/5

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

Two short sentences, front-loaded with the core action. The types list is redundant with the schema but doesn't bloat it. No fluff; concise enough for quick scanning.

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

Completeness3/5

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

With no output schema, the agent doesn't know what the tool returns. The description doesn't mention return value, error conditions, or prerequisites (e.g., IDs must exist). For a write operation of moderate complexity, this is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100% – each parameter has a description in the schema. The description repeats the enum types (causal, solution, etc.) but adds no new meaning beyond what the schema already provides. It doesn't explain how from_id/to_id relate semantically beyond 'source' and 'target'.

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

Purpose4/5

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

The description clearly states the action ('Create a typed relation') and the resource ('between two knowledge records'), with a specific list of relation types. It distinguishes itself from sibling tools like memory_save or memory_update by focusing on relations, though it does not explicitly differentiate from kg_add_fact which might overlap.

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

Usage Guidelines3/5

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

It gives a context hint ('Enriches graph expansion in Tier 4 search') but no explicit when-to-use vs alternatives. The purpose implies usage for linking records, but there is no guidance on when not to use it or which alternative to pick, so it's only implied.

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

memory_saveA

Save knowledge explicitly. Types: decision (MUST include WHY in context), solution, lesson, fact, convention. Auto-dedup via Jaccard + fuzzy similarity. v10: a quality gate scores the record before save; below-threshold records are rejected with a rejected_by_quality_gate: true response (override with MEMORY_QUALITY_GATE_ENABLED=false). Use importance to surface critical decisions at recall time (boosts the final RRF score). v11.0: routes to fast hot path when MEMORY_MODE=fast (default). Use memory_save_fast for explicit fast routing.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
typeYes
corefNoOpt into v10 coreference rewrite — expand pronouns ('after this it broke') into self-contained text using recent session history. Costs ~1s LLM round-trip; default off.
branchNoGit branch this knowledge relates to
filterNoOptional content filter (pytest|cargo|git_status|docker_ps|generic_logs). Trims noisy CLI output while preserving URLs/paths/code.
contentYesThe knowledge to save
contextNoAdditional context, WHY for decisions
projectNogeneral
agent_idNoOptional Claude Code subagent ID (x-claude-code-agent-id header / OTEL agent_id attribute, v2.1.139+). Lets recall trace which subagent produced this knowledge.
importanceNoRecall-time boost: critical x1.5, high x1.2, medium x1.0, low x0.8. Reserve `critical` for migration-blocking decisions and security incidents.medium
parent_agent_idNoOptional parent agent ID (the dispatching Agent tool / parent span). Together with agent_id forms the subagent lineage tree.

TDQS

A4/5.0
Behavior5/5

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

Annotations are all neutral/false, so the description carries the full burden and delivers richly: auto-dedup via Jaccard + fuzzy similarity, quality-gate rejection with the exact response flag (rejected_by_quality_gate: true) plus the override env var, and importance's RRF-score boost at recall. This substantially exceeds what the structured annotations convey.

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

Conciseness4/5

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

The core purpose is front-loaded in the opening phrase and every sentence carries operational content. Minor noise from version tags (v10, v11.0) slightly blurs focus, but the density is justified given the tool's behavioral complexity.

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

Completeness4/5

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

For an 11-parameter tool with no output schema, the description covers the rejection path, dedup, importance effects, and fast routing. Gaps remain: it never describes the success response shape, nor what happens on a dedup hit (does it return the existing record or a duplicate marker?). These are notable for a no-output-schema tool but the rejection case is well covered.

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

Parameters4/5

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

With 73% schema coverage the baseline is 3, and the description adds genuine value on top: it mandates that the 'decision' type MUST include WHY in context (tying type to context semantics), and explains the purpose of importance ('surface critical decisions at recall time') rather than just its enum values. This pushes it above baseline.

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

Purpose4/5

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

States a specific verb and resource ('Save knowledge explicitly') and enumerates the supported types (decision, solution, lesson, fact, convention). It differentiates from memory_save_fast by naming it explicitly, but does not address the closely-related save_decision sibling, which also handles the 'decision' type mentioned here.

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

Usage Guidelines3/5

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

Provides explicit routing guidance: 'Use memory_save_fast for explicit fast routing' and notes the MEMORY_MODE=fast default path. However, it offers no guidance on when to prefer save_decision or memory_episode_save over this tool, leaving the alternative-selection picture incomplete for a tool with many save-like siblings.

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

memory_save_fastA

v11.0: same as memory_save but routes through the fast hot path (skip_quality=True, no LLM, no async-blocking). Use when you want to bypass the v10 quality gate without flipping the env flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
typeYes
branchNo
filterNo
contentYes
contextNo
projectNogeneral
agent_idNoOptional Claude Code subagent ID (v2.1.139+)
importanceNomedium
parent_agent_idNoOptional parent agent ID (the dispatching span)

TDQS

A4.2/5.0
Behavior4/5

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

Discloses several behavioral traits beyond annotations: it skips quality checks, does not use LLM, and is non-blocking. It does not mention potential downsides of skipping quality, but given minimal annotations, this is fairly transparent.

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

Conciseness5/5

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

Two concise sentences. The first states the core function, the second gives usage guidance. Well-structured and front-loaded.

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

Completeness3/5

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

Given the complexity of 10 parameters, the description is sparse. It does not explain required fields or optional parameters, though it may be acceptable as a variant reference. It omits any detail about the output or side effects, leaving some gaps.

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

Parameters2/5

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

The description adds no information about the parameters. Schema coverage is low (20%) with only agent_id and parent_agent_id described, and the description does not compensate by explaining any of the other parameters. It relies entirely on reference to memory_save.

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

Purpose5/5

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

The description clearly states the tool's purpose: it saves memory like memory_save but uses a faster path, bypassing quality checks. It distinguishes itself from memory_save by specifying the variant's key difference.

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

Usage Guidelines5/5

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

Explicitly says when to use this tool: 'Use when you want to bypass the v10 quality gate without flipping the env flag.' This provides clear guidance relative to the alternative (memory_save).

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

memory_search_by_tagA
Read-onlyIdempotent

Search knowledge by tag. Returns all active records with matching tag (partial match). Useful for categorical browsing.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesTag to search for (partial match)
projectNoFilter by project (optional)

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful context that results are limited to active records and that matching is partial, which goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

Two concise sentences with no unnecessary detail. The key behavior and intended use are communicated efficiently.

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

Completeness4/5

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

The description explains what is returned ('all active records') and the matching behavior, which is sufficient for a simple search tool. It does not specify output structure or edge cases, but the absence of an output schema is offset by the clear return semantics.

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

Parameters3/5

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

The schema already documents both parameters, including 'partial match' for tag and the optional project filter. The description does not add additional meaning beyond the schema, so it sits at the baseline for full schema coverage.

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

Purpose5/5

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

States a specific action ('Search knowledge by tag') and a clear result ('Returns all active records with matching tag'). The partial-match behavior and categorical-browsing use case make the tool's purpose immediately identifiable.

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

Usage Guidelines3/5

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

The description implies use for categorical browsing but does not explicitly distinguish when to use this tool over sibling tools like memory_search_fast or memory_recall. There is no direct when-to-use or when-not-to-use guidance relative to alternatives.

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

memory_search_fastA
Read-onlyIdempotent

v11.0: like memory_recall but with rerank=False, diverse=False forced. Deterministic fast path — zero LLM, FastEmbed-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoall
limitNo
queryYes
branchNo
detailNofull
fusionNorrf
projectNo
embedding_spaceNoFilter to one or more embedding spaces (text|code|log|config).

TDQS

A3.6/5.0
Behavior4/5

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

Discloses that it forces rerank=False and diverse=False, uses no LLM, and is deterministic, which is consistent with readOnly and idempotent annotations. It does not mention output shape or side effects, but the read-only behavior is already covered.

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

Conciseness5/5

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

Very short and front-loaded; two sentences convey the key distinction without padding. The version prefix is minor but does not detract from clarity.

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

Completeness2/5

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

As a standalone description, it depends heavily on the unnamed memory_recall tool and omits return shape, result ordering, and parameter semantics. Given no output schema and low schema coverage, an agent would need additional context to use it confidently.

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

Parameters2/5

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

Only embedding_space is described in the schema; query, limit, type, branch, detail, fusion, and project have no parameter-level explanation and the description does not clarify them beyond the memory_recall reference. With 8 parameters and 13% schema coverage, most parameter semantics remain implicit.

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

Purpose4/5

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

Clearly identifies a memory search tool and distinguishes it from memory_recall by forcing rerank=False and diverse=False for a deterministic fast path. The exact search semantics rely on familiarity with memory_recall, but the name and 'like memory_recall' anchor the purpose.

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

Usage Guidelines4/5

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

Explicitly says when to use it: deterministic fast path, zero LLM, FastEmbed-only, in contrast to memory_recall. It does not spell out all trade-offs or when not to use, but the deterministic/no-LLM cues are practical guidance.

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

memory_self_assessB
Read-onlyIdempotent

Self-assessment: how competent am I in given domains? Shows level, confidence, blind spots.

ParametersJSON Schema
NameRequiredDescriptionDefault
conceptsNoDomains/concepts to assess competency for
full_reportNoReturn full self-model report

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds that it shows level, confidence, and blind spots, which is useful but does not detail whether it only reads existing state or computes new assessments. No contradiction with annotations.

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

Conciseness5/5

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

The description is extremely short and front-loaded. The core purpose appears in the first sentence, and the additional output details are concise. No redundant or irrelevant wording.

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

Completeness4/5

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

For a simple read-only introspection tool with no output schema and annotations covering safety, the description is essentially complete. It explains what the tool does and what it returns at a high level, though it could mention the absence of side effects more explicitly.

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

Parameters3/5

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

The schema descriptions cover both concepts and full_report, so coverage is complete. The tool description adds only minimal meaning to 'concepts' via 'given domains' and nothing extra about full_report. This meets the baseline for schema-covered parameters but does not enrich them.

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

Purpose4/5

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

The description clearly identifies the action (self-assessment) and the target (competency in given domains), plus the kind of output (level, confidence, blind spots). It does not explicitly name a resource like 'self model', but the intent is unambiguous enough.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as self_reflect, self_insight, or memory_recall. It lacks context for selecting this self-assessment over related introspection tools.

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

memory_skill_getC
Read-onlyIdempotent

Find skills matching a trigger. Skills are learned procedures — HOW to do things.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoGet skill by exact name
triggerNoNatural language trigger to match
list_allNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint. The description is consistent with these but adds no further behavioral context (e.g., return format, behavior on no match, or fuzzy matching semantics).

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

Conciseness4/5

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

The description is concise, consisting of two short sentences. It defines the key concept (skills) without unnecessary verbosity, though it could benefit from a structured parameter breakdown.

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

Completeness2/5

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

The description omits critical context: it does not specify what the tool returns (e.g., a list of skill names or full objects), how parameters interact, or when to prefer this over siblings like memory_skill_update or memory_search_by_tag. With no output schema, this incompleteness is especially problematic.

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

Parameters2/5

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

The description only clarifies the 'trigger' parameter by mentioning 'matching a trigger.' It does not explain 'name' (e.g., exact match) or 'list_all' (e.g., return all skills), which is a significant gap given the schema lacks any parameter descriptions.

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

Purpose4/5

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

Description clearly states the tool 'Find skills matching a trigger' and defines skills as 'learned procedures — HOW to do things.' This gives a clear verb and resource, though it doesn't explicitly distinguish it from sibling tools like memory_get or memory_search_by_tag.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, nor on how the parameters (name vs trigger vs list_all) should be chosen. The description implies trigger-based search but leaves parameter semantics entirely implicit.

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

memory_skill_updateA

Record skill usage or refine a skill. Updates success rate and metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
successYesWas the skill application successful?
skill_idYesSkill ID
new_stepsNoAdditional steps to add
new_anti_patternNoAnti-pattern learned from failure

TDQS

A4.2/5.0
Behavior4/5

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

The description explicitly states that it 'Updates success rate and metrics', making the side effect transparent. Annotations reinforce non-readonly/non-destructive behavior, but details on whether updates append or overwrite are not disclosed.

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

Conciseness5/5

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

The description is concise—two sentences—with no redundancy. It directly states the action and effect without extraneous detail, fitting the tool's simple scope.

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

Completeness4/5

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

Given the tool's straightforward nature and no output schema, the description covers essential aspects: what it does and what it affects. The requirement of skill_id and success is implicit. It does not discuss edge cases or relationships with other skill-related tools, but this is not critical for a basic update operation.

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

Parameters4/5

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

Of the 5 parameters, 4 have descriptive text (skill_id, success, new_steps, new_anti_pattern) with clear meanings. The 'notes' parameter lacks a description but appears self-explanatory. 80% coverage with clear field names supports effective use.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Record skill usage or refine a skill. Updates success rate and metrics.' It distinguishes itself from generic memory save/update tools by explicitly targeting skill usage and metrics.

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

Usage Guidelines3/5

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

The description implies usage (when recording or refining a skill) but does not explicitly state when to prefer this over siblings like memory_save or memory_update. It lacks explicit when-not-to-use guidance, though the phrase 'skill usage' provides some context.

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

memory_statsA
Read-onlyIdempotent

Memory statistics with health metrics: sessions, knowledge by type/project, retention zones (active/archived/consolidated), stale records, storage size, config.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description does not contradict them. However, the description adds no additional behavioral disclosure beyond what annotations provide, so the bar is lower but still met.

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

Conciseness5/5

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

The description is a single, efficient sentence that conveys the tool's purpose and enumerates the output categories without unnecessary verbosity.

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

Completeness4/5

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

The description lists the main output categories, giving a good sense of what the tool returns. Since there is no output schema, this enumeration partially compensates, but it lacks details about the output format or structure.

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

Parameters4/5

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

The tool takes no parameters, so the baseline score of 4 applies. There is nothing to document, and the description does not need to explain parameters.

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

Purpose5/5

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

Clearly states the tool provides memory statistics and health metrics, listing the specific categories (sessions, knowledge by type/project, retention zones, stale records, storage size, config), which distinguishes it from retrieval or modification tools in the sibling list.

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

Usage Guidelines3/5

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

Does not explicitly state when to use this tool versus other stats-oriented siblings like memory_graph_stats or memory_perf_report. The purpose is implied but lacks explicit conditions or alternatives.

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

memory_temporal_queryB
Read-onlyIdempotent

v11.0 W1-C: deterministic temporal reasoning — Allen interval relations, duration arithmetic (days/weeks/months/years), and natural-language date normalization (en + ru). Pass op=relation|duration_between|normalize.

ParametersJSON Schema
NameRequiredDescriptionDefault
aNoISO datetime — duration_between
bNo
opYes
langNoauto
a_endNo
b_endNo
anchorNoISO datetime anchor for relative phrases
phraseNoNatural-language date — normalize
a_startNoISO datetime — relation only
b_startNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already state readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that the tool performs deterministic temporal reasoning and which operations are available, giving useful behavioral context without contradicting 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.

Conciseness4/5

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

The description is a single dense sentence and mostly efficient. The leading version string 'v11.0 W1-C' adds noise and could be removed, but the core capabilities are conveyed without excessive verbosity.

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

Completeness2/5

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

There is no output schema, and the description does not describe the return format or provide examples. Given the parameter complexity and the lack of an output schema, the description is not self-sufficient for an agent to confidently invoke the tool and interpret results.

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

Parameters2/5

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

Schema description coverage is only 40%, and several parameters (b, b_end, b_start, lang, op) have no or minimal description. The description mentions op modes but does not map each mode to its required parameters, leaving significant ambiguity about how to populate the interval fields.

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

Purpose4/5

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

The description names the resource as deterministic temporal reasoning and enumerates the three operation modes (relation, duration_between, normalize), giving a clear sense of the tool's purpose. However, it does not explicitly contrast with sibling tools like memory_timeline, so differentiation is mostly implicit.

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

Usage Guidelines3/5

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

It instructs the caller to pass op=relation|duration_between|normalize, which is a direct usage cue. But it does not explain when each operation should be chosen over alternatives such as memory_timeline or other memory tools, leaving selection partly to inference.

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

memory_timelineB
Read-onlyIdempotent

Browse session history. sessions_ago=N for 'N sessions ago', session_number=1 for first session, date_from/date_to for date ranges.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
date_toNoYYYY-MM-DD
projectNo
date_fromNoYYYY-MM-DD
sessions_agoNo
session_numberNo

TDQS

B3.3/5.0
Behavior3/5

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

The description is consistent with the annotations (readOnlyHint=true, destructiveHint=false, idempotentHint=true) and does not contradict them. It adds minimal behavioral detail beyond stating it 'browses' session history, but given the simple read-only nature implied by annotations, the description provides adequate transparency without contradiction.

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

Conciseness5/5

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

The description is a single, tightly packed sentence with no redundancy. It clearly conveys the core purpose and the meaning of several parameters without any fluff, making it highly concise and well-structured.

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

Completeness3/5

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

The description provides the essential information for basic usage: what the tool does and how to specify certain filtering parameters. However, it omits details about the output format, how to interpret results, and when to choose this tool over similar ones. Given the absence of an output schema, the description is minimally adequate but leaves some gaps.

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

Parameters2/5

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

Schema coverage is only 29% (2 out of 7 parameters have descriptions). The description text explains the meaning of three parameters (sessions_ago, session_number, date_from/date_to) but leaves limit, query, and project unexplained. Since schema coverage is low and the description compensates only partially, the semantics are insufficient for full understanding.

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

Purpose4/5

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

The description clearly states the tool's purpose as browsing session history, with a specific verb ('browse') and resource ('session history'). It also explains the meaning of key parameters, which helps clarify the intended use. However, it does not explicitly differentiate itself from sibling tools like memory_history or kg_timeline, so it lacks explicit sibling distinction.

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

Usage Guidelines3/5

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

The description provides specific guidance on how to use certain parameters (sessions_ago, session_number, date_from/date_to), which is useful. However, it does not mention when to use this tool over alternatives, nor does it provide any prerequisites or context about the expected input format or output. Thus, usage guidance is partial.

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

memory_updateB
Destructive

Update existing knowledge. Finds old by search query, supersedes it, creates new version.

ParametersJSON Schema
NameRequiredDescriptionDefault
findYesSearch query to find the old knowledge
reasonNoWhy updating
new_contentYesNew content to replace with

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds that it supersedes the old and creates a new version, suggesting a non-deletion update mechanism, but does not disclose whether the old version is fully replaced, archived, or partially retained, nor mention any side effects. It adds some context beyond the annotations but leaves key behavioral details ambiguous.

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

Conciseness4/5

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

Two concise sentences that front-load the primary purpose ('Update existing knowledge') and then explain the mechanism. There is no fluff or redundancy, making it efficient and scannable.

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

Completeness2/5

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

Given the destructiveHint annotation and absence of an output schema, the description should clarify what happens to the old knowledge (deletion vs. versioning) and what the tool returns. It says 'supersedes' and 'creates new version' but leaves the fate of the old entry unclear, and it does not mention the response format. This is a significant gap for a mutation tool.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters (find, reason, new_content) are already documented. The description adds minimal extra meaning: it maps 'find' to a search query and 'new_content' to the new version, but does not elaborate on 'reason' beyond the schema. With full schema coverage, the baseline is 3, and the description adds little.

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

Purpose4/5

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

The description clearly states the tool updates existing knowledge and describes the process (find, supersede, create new version). It distinguishes from siblings like memory_save (new) and memory_delete (removal) but does not name them explicitly, so it is clear but not maximally differentiated.

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

Usage Guidelines3/5

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

The description implies this tool is for updating existing knowledge, providing context that a search query is needed to locate the old entry. However, it does not explicitly state when to use this over alternatives like memory_save or memory_delete, nor give exclusions. The guidance is implied rather than stated.

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

memory_warmupA
Idempotent

v11.0: pre-load FastEmbed model and open the vector store, so the first save/search after process start doesn't pay model-load latency.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses the primary side effects: pre-loading a model and opening the vector store. It does not mention potential errors or whether prior setup is required, but the idempotentHint annotation aligns with the described warming behavior and there is no contradiction.

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

Conciseness5/5

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

The description is a single, compact sentence that conveys the action, the resource involved, and the reason for the action. Every word contributes meaning, and no unnecessary detail is included.

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

Completeness4/5

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

For a simple, parameterless warm-up utility, the description provides the essential context: what is loaded, what is opened, and why it matters. It could mention failure modes or prerequisites, but the current level is complete enough for the tool's simplicity.

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

Parameters4/5

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

There are no parameters, so parameter-level semantics are trivially covered. The description adds no parameter information because none exists; a baseline score of 4 is appropriate for a zero-parameter tool.

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

Purpose5/5

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

The description clearly states the tool's purpose: pre-load the FastEmbed model and open the vector store. It also explains the intended benefit—avoiding model-load latency on the first save/search—which is specific and actionable.

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

Usage Guidelines4/5

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

The description implies when to use the tool: after process start and before the first save/search. It does not explicitly mention alternatives, but with zero parameters and a focused warm-up purpose, the guidance is sufficiently clear.

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

memory_wiki_generateA
Idempotent

v10 — Render the per-project wiki digest (top decisions, active solutions, conventions, recent changes) as Markdown. Pass project to refresh one wiki, omit it to refresh all active projects. Files land in /wikis/.md and are deterministic (no LLM call).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject to refresh (omit for all)

TDQS

A4.4/5.0
Behavior4/5

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

Discloses side effects: files land in <MEMORY_DIR>/wikis/<project>.md, and states determinism. The 'refresh' wording implies overwriting and writing to disk, consistent with readOnlyHint=false. IdempotentHint=true aligns with deterministic behavior. Some details about whether existing files are overwritten or other memory structures change are not explicit, but the core behavior 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.

Conciseness5/5

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

Two concise sentences with no filler. All key information—purpose, parameter usage, output location, and determinism—is packed efficiently and logically ordered.

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

Completeness4/5

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

Covers purpose, parameter semantics, side effects, and determinism. It does not specify the exact Markdown structure or define 'active projects', but given the tool's simplicity and the presence of sibling tools for detailed queries, this is sufficient for an agent to invoke it correctly.

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

Parameters4/5

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

The schema description ('Project to refresh (omit for all)') is clear, and the tool description reinforces it with concrete behavior ('refresh one wiki' vs 'all active projects'). This adds a bit of context beyond the schema, clarifying the optional parameter's effect on scope.

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

Purpose5/5

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

States a specific verb (render) and resource (per-project wiki digest), and enumerates the digest contents (top decisions, active solutions, conventions, recent changes). This clearly distinguishes the tool from memory-related siblings without needing to name them.

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

Usage Guidelines4/5

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

Provides explicit parameter usage: pass `project` to refresh one wiki, omit it to refresh all active projects. It also notes the tool is deterministic (no LLM call), helping an agent decide when to use it. It doesn't explicitly mention when-not alternatives, but the purpose is sufficiently unique.

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

phase_transitionC

v8.0: advance a task to the next phase.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
task_idYes
artifactsNo
new_phaseYes

TDQS

C2.4/5.0
Behavior2/5

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

The word 'advance' implies a state change, which aligns with readOnlyHint=false, but no additional behavioral traits are disclosed. It does not mention side effects, return values, or other outcomes beyond the transition itself.

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

Conciseness5/5

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

The description is a single, succinct sentence with no redundancy. It front-loads the verb and object, making the core operation immediately clear.

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

Completeness1/5

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

The description is extremely sparse. It omits details about phase definitions, the role of notes and artifacts, whether the transition is reversible, and what the output or result might be. Given the complexity of the sibling toolset, this is insufficient.

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

Parameters1/5

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

None of the parameters (task_id, new_phase, notes, artifacts) are described. Their names hint at their purpose, but there is no explicit semantic detail about expected values, formats, or how they affect the transition.

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

Purpose4/5

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

The description clearly states the action ('advance') and the object ('a task to the next phase'), but lacks context about what a 'phase' is or how this action differs from other task-related tools.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives like task_create or task_phases_list. The description gives no situational context or prerequisites.

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

rule_set_phaseA
Idempotent

Attach or remove a phase scope on a rule (v8.0 lazy rule loading). Tag-based: manages 'phase:' on the rule's tags. phase=null clears the phase tag (rule becomes core — applies to every phase). Valid phases: van, plan, creative, build, reflect, archive.

ParametersJSON Schema
NameRequiredDescriptionDefault
phaseNoPhase name or null to clear.
rule_idYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnly=false, idempotent=true, and destructive=false, and the description adds useful detail about null clearing the tag and making the rule core. It does not disclose potential side effects beyond tag modification, but transparency is adequate.

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

Conciseness5/5

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

The description is compact and information-dense, covering purpose, mechanism, null semantics, and valid values in a single sentence. No unnecessary words or redundant structure are present.

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

Completeness5/5

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

The description provides enough context to call the tool correctly: what it does, how tags are managed, what null means, and which phase values are valid. No output schema exists, but the outcome is clear from the described behavior.

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

Parameters4/5

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

The phase parameter is well explained with valid enum values and null behavior, and rule_id is self-explanatory as an integer identifier for a rule. The description adds meaning beyond the schema, though rule_id itself lacks an explicit schema description.

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

Purpose5/5

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

The description clearly states the tool attaches or removes a phase scope on a rule, identifies the tag-based mechanism ('phase:<X>'), and lists valid phases. It is immediately distinguishable from sibling tools by naming the specific rule-tag operation.

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

Usage Guidelines3/5

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

The description explains what the tool does and how null works, but it does not explicitly state when to prefer this over sibling phase-related tools, nor does it mention when not to use it. Usage guidance is implied rather than explicit.

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

save_decisionA

v8.0: save a structured architectural decision (options + criteria matrix + rationale + discarded). Adds structured tag and a JSON blob in context. Use for Creative-phase outputs; plain type=decision memory_save still works.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
titleYesShort decision title
optionsYesOptions considered: [{name, pros[], cons[], unknowns[]}, ...]
projectNo
selectedYesChosen option name (must be in options)
discardedNoOption names rejected (subset of options - {selected})
rationaleYesWhy this option was chosen
criteria_matrixYescriterion -> {option_name: rating 0-5}

TDQS

A4.4/5.0
Behavior4/5

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

Description mentions adding a structured tag and JSON blob, going beyond annotations which only indicate non-read-only, non-destructive, and non-idempotent. It does not specify whether it creates new entries or updates existing ones, but the 'Adds' phrasing implies creation.

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

Conciseness5/5

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

Two concise sentences that are directly relevant, with no redundancy or filler.

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

Completeness4/5

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

Given the tool's complexity (8 params, nested objects), the description adequately covers the core purpose and usage context. It does not describe return values, but no output schema exists, so that is not a gap.

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

Parameters3/5

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

Schema covers 75% of parameters with descriptions. The tool description reiterates the main required components but does not clarify the missing 'project' or 'tags' parameters beyond what the schema lacks. No additional per-parameter semantics are provided.

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

Purpose5/5

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

Clearly states the tool saves a structured architectural decision with specific components (options, criteria matrix, rationale, discarded). Also notes it adds a structured tag and JSON blob, distinguishing it from plain memory_save.

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

Usage Guidelines5/5

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

Explicitly directs usage for Creative-phase outputs and mentions that plain type=decision memory_save still works as an alternative, providing clear when-to-use guidance.

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

save_intentA

Persist one user prompt into the intents table (same source as the UserPromptSubmit hook). Use when programmatically seeding intents — the hook covers normal interactive usage. Dedupes same prompt within 5 min per session.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesUser prompt text as submitted
projectNoProject slug
session_idNoSession id (defaults to current MCP session)

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses that the tool deduplicates the same prompt within 5 minutes per session, which is useful behavioral context not present in annotations. It also clarifies the relationship to the hook, though it does not detail side effects like return behavior or error cases.

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

Conciseness5/5

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

The description is two concise sentences that convey purpose, use case, and deduplication behavior without unnecessary detail. It is well-structured and easy to parse.

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

Completeness5/5

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

For a simple insert-style tool with no output schema, the description covers the essential context: what is persisted, the relationship to the hook, when to use it, and deduplication behavior. No critical information is missing for an agent to decide to call it.

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

Parameters3/5

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

The schema already describes all three parameters with full coverage, including the default behavior of session_id. The description adds only minimal additional parameter context, such as dedupe behavior involving prompt and session, so it stays at the baseline for schema-covered parameters.

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

Purpose5/5

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

The description clearly states the tool persists a user prompt into the intents table and explicitly names the same source as the UserPromptSubmit hook. It distinguishes itself from normal interactive usage and from sibling tools like save_decision by focusing on programmatic intent seeding.

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

Usage Guidelines5/5

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

The description explicitly says to use this tool when programmatically seeding intents and notes that the hook covers normal interactive usage. This gives clear guidance on when to use the tool versus relying on the existing hook.

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

search_intentsA
Read-onlyIdempotent

Substring search over user prompts (LIKE). Returns newest match first. Useful for 'what did I ask about X' without mining transcripts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesSubstring to match in prompt text
projectNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive. Description adds behavioral detail: it uses LIKE substring matching and returns newest matches first. This goes beyond the annotations and helps the agent understand result ordering.

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

Conciseness5/5

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

Two sentences with no redundant words. It front-loads the core functionality and immediately gives a use case.

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

Completeness4/5

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

The description covers purpose, ordering, and a practical use case. Given the tool's simplicity and the presence of read-only annotations, this is sufficient for an agent to decide when to use it. It does not need to explain output format since there is no output schema.

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

Parameters2/5

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

Only the query parameter has a description in the schema; limit and project are undocumented. The tool description does not add any explanation for limit or project, leaving these parameters ambiguous. With 33% schema coverage, the description should have compensated, but it does not.

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

Purpose5/5

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

States exactly what it does: substring search over user prompts using LIKE. Also specifies result ordering (newest first). The verb 'search' is specific and unambiguous.

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

Usage Guidelines4/5

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

Provides a clear use case ('what did I ask about X') and contrasts with a manual alternative (mining transcripts). Does not explicitly name sibling tools that might be more suitable for other types of search, so the guidance is good but not fully explicit about exclusions.

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

self_error_logA

Log an error/failure for pattern analysis. Call AUTOMATICALLY when: bash command fails, wrong assumption discovered, API returns error, config issue found, loop detected, or any mistake occurs. System detects patterns (3+ same category) and suggests insights.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixNoHow it was fixed (empty if unresolved)
tagsNo
contextNoWhat was being done when error occurred
projectNogeneral
categoryYesError category for pattern grouping
severityNomedium
descriptionYesWhat went wrong: symptom, expectation vs reality

TDQS

A4.3/5.0
Behavior4/5

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

The description mentions pattern detection and insight suggestion, which implies side effects beyond simple logging. It does not explicitly state persistence or non-idempotency, but the annotations already cover these aspects appropriately.

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

Conciseness5/5

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

The description is concise, front-loading the core purpose and then listing triggers efficiently. No redundant information, and the structure is logical.

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

Completeness4/5

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

For a logging tool with no output schema, the description adequately covers the purpose, triggers, and expected behavior. It could benefit from an example, but the essentials are present.

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

Parameters2/5

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

The description does not add any parameter-specific guidance beyond what the schema already provides. With schema coverage at 57%, several parameters lack clarity, and the description fails to compensate for this gap.

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

Purpose5/5

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

The description clearly states the tool's purpose: logging errors/failures for pattern analysis. It specifies the exact scenarios in which to call it, making its role unambiguous.

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

Usage Guidelines5/5

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

It provides explicit triggers for automatic invocation (bash failure, wrong assumption, API error, config issue, loop, or any mistake), leaving no ambiguity about when to use it.

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

self_insightA

Manage insights from error patterns (ExpeL-style). Actions: add (create, importance=2), upvote (+1), downvote (-1, auto-archive at 0), edit, list, promote (to rule when importance>=5 AND confidence>=0.8). Call 'add' when pattern detected. Call 'upvote' when insight confirmed again.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoInsight ID (for upvote/downvote/edit/promote)
tagsNo
actionYes
contentNoInsight text (for add/edit)
contextNo
projectNogeneral
categoryNoError category (for add)
source_error_idsNoError IDs that spawned this (for add)

TDQS

A4.2/5.0
Behavior4/5

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

Discloses important side effects such as downvote auto-archiving at 0 and the promote threshold. Annotations are not contradicted, and the description adds useful behavioral context beyond the flags.

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

Conciseness5/5

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

The description is compact and well-structured, using a clear action list and parenthetical modifiers. Every sentence adds useful information without unnecessary fluff.

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

Completeness4/5

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

Given the multi-action nature and 8 parameters, the description covers the core action semantics and thresholds well. It does not mention return values or output format, but the lack of an output schema reduces the impact of that omission.

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

Parameters3/5

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

Schema coverage is about 50%; the description adds meaning for action-specific behavior and thresholds but does not elaborate on parameters like tags, context, project, or source_error_ids beyond their schema descriptions. Some parameter semantics are left to inference.

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

Purpose5/5

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

Clearly describes managing insights from error patterns and enumerates the concrete actions (add, upvote, downvote, edit, list, promote). This makes the tool's scope obvious and distinct from sibling memory/self tools.

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

Usage Guidelines4/5

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

Provides explicit trigger conditions for adding and upvoting insights ('Call add when pattern detected', 'Call upvote when insight confirmed again'), giving clear contextual usage. It does not give when-not-to-use guidance for every action, but the main intent is clear.

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

self_patternsA
Read-onlyIdempotent

Analyze error patterns and self-improvement stats. Views: error_patterns (frequency, repeating 3+), insight_candidates (ready for promotion), rule_effectiveness (success rates, stale rules), improvement_trend (weekly errors), full_report (all). Call periodically to track improvement.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
viewNofull_report
projectNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only and idempotent behavior. The description adds value by detailing what data is analyzed (error patterns, insight candidates, rule effectiveness, trends) and the periodic cadence. No contradiction; the description enriches the annotation-provided safety profile.

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

Conciseness5/5

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

Two sentences, zero fluff. The main purpose is front-loaded, and the view list is compactly presented. Every word contributes to the tool's functionality.

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

Completeness3/5

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

The description covers the core functionality and views well, but omits details about the 'project' parameter and does not describe the output format. Given the tool has 3 optional parameters and no output schema, these gaps make it adequate but not fully complete.

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

Parameters3/5

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

With 0% schema coverage, the description must explain parameters. It fully explains the 'view' enum values, but does not explain 'days' (only hints via 'weekly errors') or 'project' at all. It adds meaning for the primary parameter but leaves two parameters under-documented.

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

Purpose5/5

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

Description states a specific verb ('Analyze') and resource ('error patterns and self-improvement stats'), then enumerates five distinct views that define exactly what analyses are available. This clearly separates it from sibling tools like self_error_log (logging) and self_reflect (general reflection).

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

Usage Guidelines4/5

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

The description suggests periodic invocation ('Call periodically to track improvement'), implying a monitoring use case. It does not explicitly name alternatives or exclusion criteria, but the view list implicitly differentiates from other self-* tools. This is clear context without formal when-not guidance.

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

self_reflectA

Save a verbal self-reflection (Reflexion pattern). Call after completing a task or encountering difficulty. NOT for errors (use self_error_log). For meta-observations about strategy, approach effectiveness, process improvements.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
outcomeNosuccess
projectNogeneral
reflectionYesWhat went well, what to improve, what to do differently
task_summaryYesBrief description of what was done

TDQS

A4.2/5.0
Behavior3/5

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

The description says 'Save' and references 'Reflexion pattern' but goes no deeper into side effects — where the reflection is stored, whether it appends to memory_timeline, or whether repeated calls create duplicate entries. Annotations provide only readOnlyHint/destructiveHint/idempotentHint flags with no additional guidance, so the description carries most of the burden and only partially discharges it.

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

Conciseness5/5

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

Three short sentences, front-loaded with verb+resource ('Save a verbal self-reflection'). Negative guidance and content scope are packed efficiently without redundancy; every sentence earns its place.

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

Completeness4/5

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

Covers the core essentials — what to save, when to call, what content belongs, what to avoid. Does not state where the reflection is stored (e.g., retrievable via memory_get or visible in memory_timeline) nor clarify the role of outcome/project/tags, leaving minor gaps for an agent operating within the rich sibling tool set. With no output schema, nothing about return values is owed.

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

Parameters3/5

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

Schema covers only 2 of 5 parameters (reflection, task_summary); tags, outcome, and project have no schema description. The tool description's 'NOT for errors...' and 'meta-observations about strategy...' lines clarify the intended content of reflection, but the uncovered parameters remain unexplained, so the description only partially compensates for the 40% coverage gap.

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

Purpose5/5

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

States the verb ('Save'), the resource ('verbal self-reflection'), the pattern ('Reflexion pattern'), and the invocation trigger ('after completing a task or encountering difficulty'). The 'NOT for errors (use self_error_log)' line explicitly differentiates it from the closest sibling, making purpose unambiguous.

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

Usage Guidelines5/5

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

Names the explicit alternative (self_error_log) and the condition that selects it ('NOT for errors'), plus the content scope ('meta-observations about strategy, approach effectiveness, process improvements') and trigger ('after completing a task or encountering difficulty'). The agent can decide without guessing.

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

self_rulesB

Manage behavioral rules (SOUL). Rules are promoted insights that shape agent behavior. Actions: list, fire (record relevance), rate (success=true/false), suspend, activate, retire, add_manual. Auto-suspend: success_rate < 0.2 after 10+ fires.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRule ID (for fire/rate/suspend/activate/retire)
tagsNo
scopeNoglobal | project:<name> | category:<name>global
actionYes
contentNoRule text (for add_manual)
projectNogeneral
successNoFor rate: was rule helpful?
categoryNoCategory (for add_manual)
priorityNo1-10

TDQS

B3.3/5.0
Behavior4/5

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

The description discloses key behavioral details beyond the annotations, such as the auto-suspend rule (success_rate < 0.2 after 10+ fires) and clarifies the side effects of actions like 'fire (record relevance)' and 'rate (success=true/false)'. It does not mention potential destructive consequences of 'suspend' or 'retire', but the annotations already set destructiveHint to false, so no conflict.

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

Conciseness5/5

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

The description is brief and information-dense. It front-loads the core purpose ('Manage behavioral rules') and then lists actions and the auto-suspend rule without unnecessary verbiage. Every sentence adds value.

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

Completeness3/5

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

Given the tool's moderate complexity (multiple actions, a project/category scope, auto-suspend logic), the description covers the main behaviors but omits details about expected outputs, error conditions, or how scope/project/category interact. It is sufficient for a basic understanding but leaves some operational gaps.

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

Parameters2/5

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

The description does not add meaning to the parameters beyond what the schema already provides. Several parameters (tags, project) lack schema descriptions, and the description does not compensate by explaining them. It only describes actions, not the fields needed to perform them, so parameter semantics are not enhanced.

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

Purpose4/5

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

The description clearly states the tool manages behavioral rules (SOUL) and enumerates the supported actions (list, fire, rate, suspend, activate, retire, add_manual), giving a clear sense of purpose. However, it does not explicitly differentiate this from similar sibling tools like self_rules_context or rule_set_phase, so it is slightly less than a perfect 5.

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

Usage Guidelines2/5

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

The description lists actions but provides no guidance on when to use this tool versus alternatives (e.g., when to use self_rules_context or rule_set_phase). There is no explicit 'use this when' or 'instead of' guidance, leaving the selection largely to inference.

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

self_rules_contextA
Read-onlyIdempotent

Get active behavioral rules for current session. Call at SESSION START to load rules. Returns rules filtered by project and scope. v8.0: pass phase to lazy-load rules relevant to current task phase — core rules (no phase tag) + rules tagged phase:. Cuts prompt tokens ~70%. After task completion, rate rules: self_rules(action='rate', id=X, success=true/false).

ParametersJSON Schema
NameRequiredDescriptionDefault
phaseNoOptional: lazy-load only rules relevant to this phase (core + phase-specific). Omit to get all rules.
projectNogeneral
categoriesNoError categories relevant to current task

TDQS

A3.7/5.0
Behavior3/5

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

The annotations already declare readOnly, idempotent, and non-destructive behavior, and the description is fully consistent with these—it describes only retrieving rules. The description does add some output-related context (filtered by project and scope) but does not go beyond annotation coverage in terms of side effects, auth, or rate limits. Since the annotations carry the main safety information, a 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.

Conciseness4/5

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

The description is well-structured and front-loaded, starting with the core purpose and then providing usage and feature details. Each sentence adds relevant information (purpose, usage timing, output behavior, lazy-loading feature, and follow-up action). While slightly verbose with the v8.0 note and rating instructions, every sentence earns its place, so it merits a 4.

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

Completeness2/5

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

There is no output schema, so the description must explain what the function returns. It only states 'Returns rules filtered by project and scope,' which is vague—it does not specify the format, structure, or whether the output is a list, string, or JSON. This incomplete information about the return value leaves ambiguity for the agent, making the description insufficiently complete.

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

Parameters3/5

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

Schema coverage is 67% (phase and categories have descriptions, but project does not). The description adds meaningful context for the phase parameter by explaining lazy-loading and the tagging scheme, but it only vaguely references project and scope without defining them. The coverage is below the high threshold, so the description should compensate, but it only partially does so, leading to a 3.

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

Purpose5/5

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

The description clearly states the tool's primary purpose: 'Get active behavioral rules for current session.' It uses a specific verb (Get) and resource (active behavioral rules), and immediately identifies the intended usage context (session start). This makes the tool's function unambiguous.

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

Usage Guidelines4/5

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

The description explicitly says 'Call at SESSION START to load rules,' providing a clear when-to-use instruction. It also explains the lazy-loading behavior with the phase parameter and suggests rating rules after completion. However, it does not mention any alternatives or when not to use this tool compared to sibling tools, so it's not a perfect 5.

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

session_endA

End-of-session capture: summary + highlights + pitfalls + next_steps so the next session can resume cleanly. Set auto_compress=true to have the LLM generate the missing summary/next_steps/pitfalls from stored session artifacts (or from an optional transcript).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNogeneral
summaryNo
pitfallsNo
highlightsNo
next_stepsNo
session_idYes
transcriptNo
auto_compressNo
open_questionsNo

TDQS

A3.5/5.0
Behavior3/5

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

Discloses the auto_compress behavior, explaining that setting it to true generates missing fields from stored artifacts or transcript. However, it does not mention side effects such as overwriting existing session data, and annotations provide no safety hints (all false), so the description carries more burden but still leaves some ambiguity.

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

Conciseness5/5

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

The description is succinct, consisting of two sentences with no redundancy. It front-loads the core purpose and then adds the key behavioral detail about auto_compress, maintaining efficiency.

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

Completeness3/5

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

Provides enough to understand the core action and the auto_compress feature, but lacks crucial context: it does not state whether any fields are required when auto_compress is false, nor how this tool fits relative to sibling session/memory tools. This could lead to incorrect usage.

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

Parameters3/5

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

The description explicitly mentions several parameters (summary, highlights, pitfalls, next_steps, transcript, auto_compress) and explains auto_compress. However, it does not clarify the purpose or usage of required session_id, project, or open_questions. Given low schema coverage (0%), it partially compensates but leaves gaps.

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

Purpose4/5

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

Clearly states it is an 'End-of-session capture' with specific fields (summary, highlights, pitfalls, next_steps), giving a clear verb and resource. It implies a specific usage context but does not explicitly distinguish from sibling tools like memory_save or session_init.

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

Usage Guidelines3/5

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

The phrase 'End-of-session capture' and 'so the next session can resume cleanly' provide a temporal context, but the description does not explicitly mention when to use this over alternatives or when not to use it. It lacks direct guidance against using other memory tools.

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

session_initC

At session start: return the most recent unconsumed end-of-session summary with highlights / pitfalls / next_steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNogeneral
mark_consumedNo

TDQS

C2.6/5.0
Behavior2/5

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

The description does not disclose the side effect of marking the summary as consumed when mark_consumed is true, nor does it mention any other effects like authentication or rate limits. The annotations indicate non-destructive, but the state change is not explained.

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

Conciseness4/5

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

The description is concise, one sentence, with no fluff. It states the essence directly. However, it could benefit from a bit more detail on the parameters, but conciseness itself is acceptable.

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

Completeness2/5

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

There is no output schema, and the description does not describe the expected return format or additional context. The agent is left with insufficient information about how to interpret the result or handle the parameters. Minor context is provided by the mention of highlights/pitfalls/next_steps, but overall it's incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain the 'project' or 'mark_consumed' parameters, leaving the agent to infer their meaning from the schema alone, which has no descriptions. Since schema coverage is 0%, the description should have compensated but did not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to return the most recent unconsumed end-of-session summary, with a specific list of contents. However, it doesn't explicitly differentiate from similar tools like session_end or memory_recall, but the name and context (session start) provide reasonable clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a temporal trigger ('At session start') but offers no guidance on when to use this tool versus alternatives such as memory_recall or session_end. No conditions, prerequisites, 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.

task_createC

v8.0: start a task in van phase (auto-classifies level if missing).

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNo
task_idYes
descriptionYes

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the auto-classification behavior when the level is missing, which goes beyond the annotation flags (all false). However, it does not mention side effects, permissions, error modes, or what happens in the 'van' phase—leaving significant behavioral aspects unexplained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence and technically concise, but the 'v8.0:' version prefix adds noise without value. The cryptic 'van' term and lack of elaboration make it feel under-specified rather than efficiently structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is too terse to provide sufficient context. It does not explain what the 'van' phase means, what 'level' classification entails, or what the expected outcome is. With no output schema and minimal context, the tool is not adequately described for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has three parameters (task_id, description, level) with no descriptions. The description only references 'level' in relation to auto-classification, and does not explain what task_id or description represent. With 0% parameter coverage, the description only minimally compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('start a task') and a condition ('auto-classifies level if missing'), which makes the core purpose clear. However, the phrase 'van phase' is cryptic and may confuse, though it is still distinguishable from sibling tools like classify_task or phase_transition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The mention of auto-classification gives an implicit hint, but there is no explicit direction or context for choosing this over similar sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

task_phases_listB
Read-onlyIdempotent

v8.0: list all phases of a task in chronological order.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds the chronological ordering behavior, which is useful, but doesn't disclose other details like whether all phases (including completed) are returned or if there's any pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence with the key action and ordering up front. The 'v8.0:' version prefix adds minor noise but doesn't significantly detract.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with one parameter and annotations covering safety, the description is mostly adequate. However, it omits any return format details (e.g., phase objects with status/timestamps) and provides no usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explicitly explain the task_id parameter. It only implies it through 'of a task', but doesn't state it's required or specify format. The parameter is simple and self-explanatory, but the description fails to formally map it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('list'), resource ('phases of a task'), and adds ordering ('chronological'). This clearly distinguishes it from task creation/transition tools, though it doesn't explicitly contrast with a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It doesn't mention it's a read-only inspection query or that it should be used to track task progress rather than modify phases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflow_learnB

Record a learned workflow (named sequence of steps) for future reuse.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
stepsYes
contextNo
projectNogeneral
descriptionNo
trigger_patternNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The word 'Record' clearly indicates a state-changing mutation, consistent with the annotations (readOnlyHint=false). However, the description does not go beyond that to explain persistence, overwrite behavior, idempotency, or any side effects beyond the basic act of recording.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tight sentence with no redundant or misleading wording. It efficiently conveys the core purpose and even defines the key concept of a workflow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has six parameters, nested objects, and no output schema, but the description only covers the two most obvious parameters. It does not mention expected output, errors, prerequisites, or how this relates to sibling workflow and memory tools. A more complete description would address these gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description clarifies that 'name' is the workflow's name and 'steps' are the sequence, but it leaves all other parameters (context, project, description, trigger_pattern) unexplained. With zero schema descriptions, this is a significant gap; the context object and trigger_pattern semantics are especially unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Record'), the resource ('learned workflow'), and defines it as a 'named sequence of steps' for future reuse. This makes the tool's purpose unambiguous and distinct from typical memory-saving tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a use case ('for future reuse') but does not explicitly state when to prefer this tool over siblings like workflow_track, workflow_predict, or memory_save. No guidance is given on when not to use it or how it differs from alternative recording/tracking tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflow_predictA
Read-onlyIdempotent

Predict outcome (success probability, avg duration) for a workflow by id OR by trigger keyword. Uses Laplace-smoothed success rate.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo
triggerNo
workflow_idNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only and idempotent behavior. The description adds meaningful transparency by revealing the Laplace-smoothed success rate and the nature of the prediction (probability and duration), which is not captured in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise and well-structured. Two sentences contain all essential information without any filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three parameters and no output schema, the description provides enough context to understand the core functionality and invocation modes. It lacks details on parameter requirements (e.g., project) and output format, but these are partially compensated by the simplicity of the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameter descriptions exist in the schema. The description hints that workflow_id and trigger are alternative identifiers, but project is completely unexplained. Coverage is insufficient to fully understand parameter roles and constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action ('Predict outcome'), the resource ('workflow'), the specific outputs ('success probability, avg duration'), and the two identification methods ('by id OR by trigger keyword'). No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides limited guidance on when to use this tool versus alternatives. It mentions two identification modes but does not explain when to prefer one or when to use this tool over similar siblings like workflow_learn or workflow_track.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflow_trackA

Record a workflow execution outcome. Outcome ∈ {success|failure|partial|aborted}. Aggregates update automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
outcomeYes
duration_msNo
workflow_idYes
error_detailsNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions that 'Aggregates update automatically,' which hints at side effects. It does not contradict the annotations (readOnlyHint false, etc.), but it could be more explicit about whether the operation is append-only or modifies existing records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and to the point, using a compact notation for the outcome enum. Every word adds value, and there is no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple logging tool, the description provides the essential purpose and a key side effect. However, it lacks details on parameter semantics and any caveats (e.g., whether the workflow must already exist). This leaves some gaps for an agent unfamiliar with the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains the 'outcome' parameter partially by listing its enum values, but provides no explanation for 'workflow_id', 'notes', 'duration_ms', or 'error_details'. With 5 parameters and 0% schema description coverage, the description does not adequately clarify the meaning or usage of most parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Record') and the object ('workflow execution outcome'), and enumerates the valid outcome values. It is immediately obvious what the tool does and how it differs from sibling workflow tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the core action but does not explicitly state when to use this tool versus alternatives like workflow_learn or workflow_predict. The context signals and sibling names imply it is for logging outcomes, but explicit guidance is absent.

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.

  1. 74 tool updatesv0.1.0
    • First observedanalogize
    • First observedbenchmark
    • First observedclassify_task
    • First observedfile_context
    • First observedingest_codebase
    • First observedkg_add_fact
    • First observedkg_at
    • First observedkg_invalidate_fact
    • First observedkg_timeline
    • First observedlearn_error
    • First observedlist_intents
    • First observedmemory_associate
    • First observedmemory_concepts
    • First observedmemory_consolidate
    • First observedmemory_consolidate_status
    • First observedmemory_context_build
    • First observedmemory_delete
    • First observedmemory_entity_resolve
    • First observedmemory_episode_recall
    • First observedmemory_episode_save
    • First observedmemory_eval_contradictions
    • First observedmemory_eval_entity_consistency
    • First observedmemory_eval_locomo
    • First observedmemory_eval_long_context
    • First observedmemory_eval_recall
    • First observedmemory_eval_temporal
    • First observedmemory_explain_search
    • First observedmemory_export
    • First observedmemory_extract_session
    • First observedmemory_forget
    • First observedmemory_get
    • First observedmemory_graph
    • First observedmemory_graph_index
    • First observedmemory_graph_stats
    • First observedmemory_history
    • First observedmemory_observe
    • First observedmemory_perf_report
    • First observedmemory_rebuild_embeddings
    • First observedmemory_rebuild_fts
    • First observedmemory_recall
    • First observedmemory_recall_iterative
    • First observedmemory_reflect_now
    • First observedmemory_relate
    • First observedmemory_save
    • First observedmemory_save_fast
    • First observedmemory_search_by_tag
    • First observedmemory_search_fast
    • First observedmemory_self_assess
    • First observedmemory_skill_get
    • First observedmemory_skill_update
    • First observedmemory_stats
    • First observedmemory_temporal_query
    • First observedmemory_timeline
    • First observedmemory_update
    • First observedmemory_warmup
    • First observedmemory_wiki_generate
    • First observedphase_transition
    • First observedrule_set_phase
    • First observedsave_decision
    • First observedsave_intent
    • First observedsearch_intents
    • First observedself_error_log
    • First observedself_insight
    • First observedself_patterns
    • First observedself_reflect
    • First observedself_rules
    • First observedself_rules_context
    • First observedsession_end
    • First observedsession_init
    • First observedtask_create
    • First observedtask_phases_list
    • First observedworkflow_learn
    • First observedworkflow_predict
    • First observedworkflow_track

TDQS

B3/5.0

Scored across 74 tools

Disambiguation1/5

Multiple tools appear to do essentially the same thing: memory_recall/memory_search_fast/memory_explain_search/memory_recall_iterative all serve retrieval, while memory_save/memory_save_fast/memory_observe/memory_episode_save/save_decision all overlap as save paths. With 74 tools, many boundaries are only clarified by deep description details, so an agent will frequently misselect.

Naming Consistency4/5

Namespaces are broadly consistent: memory_*, self_*, kg_*, workflow_*, task_* follow a predictable verb-first or verb-noun pattern, and snake_case is used throughout. Minor deviations like save_intent, list_intents, ingest_codebase, analogize, and the memory_eval_* family slightly weaken the pattern.

Tool Count1/5

74 tools is an extreme count for a single MCP server. Many are narrow debug/eval/internal variants that could be consolidated into a few parameterized tools, so the surface is fragmented well beyond what an agent needs to operate memory coherently.

Completeness4/5

The memory domain is covered deeply: CRUD, recall, timeline, export, consolidation, graph, relations, sessions, skills, workflows, self-model, and evaluation. Minor gaps exist — some subdomains lack lifecycle symmetry (e.g., no explicit relation/skill/episode deletion), and a few eval tools are explicitly not implemented — but agents can generally work around those gaps.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI coding agents to maintain persistent, cross-session memory of codebase architecture, naming conventions, and decisions through MCP tools. Eliminates repetitive project re-explanation by automatically injecting stored context into every session with local-first SQLite storage and optional team sharing capabilities.
    4
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Persistent memory for AI coding agents that stores and recalls preferences, decisions, and conventions via semantic similarity, with zero cloud dependencies and plug-and-play MCP integration for Claude Code.
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Persistent memory for AI coding agents, storing decisions, bug fixes, conventions, and discoveries in a local SQLite database and automatically recalling them when relevant. Works with Claude Code, Codex, Cursor, Gemini CLI, and other MCP-compatible agents.
    22
    2
    MIT